Merge ../powerpc-merge
This commit is contained in:
commit
d6d93856cb
|
@ -162,3 +162,12 @@ What: pci_module_init(driver)
|
|||
When: January 2007
|
||||
Why: Is replaced by pci_register_driver(pci_driver).
|
||||
Who: Richard Knutsson <ricknu-0@student.ltu.se> and Greg Kroah-Hartman <gregkh@suse.de>
|
||||
|
||||
---------------------------
|
||||
|
||||
What: I2C interface of the it87 driver
|
||||
When: January 2007
|
||||
Why: The ISA interface is faster and should be always available. The I2C
|
||||
probing is also known to cause trouble in at least one case (see
|
||||
bug #5889.)
|
||||
Who: Jean Delvare <khali@linux-fr.org>
|
||||
|
|
105
Documentation/hwmon/f71805f
Normal file
105
Documentation/hwmon/f71805f
Normal file
|
@ -0,0 +1,105 @@
|
|||
Kernel driver f71805f
|
||||
=====================
|
||||
|
||||
Supported chips:
|
||||
* Fintek F71805F/FG
|
||||
Prefix: 'f71805f'
|
||||
Addresses scanned: none, address read from Super I/O config space
|
||||
Datasheet: Provided by Fintek on request
|
||||
|
||||
Author: Jean Delvare <khali@linux-fr.org>
|
||||
|
||||
Thanks to Denis Kieft from Barracuda Networks for the donation of a
|
||||
test system (custom Jetway K8M8MS motherboard, with CPU and RAM) and
|
||||
for providing initial documentation.
|
||||
|
||||
Thanks to Kris Chen from Fintek for answering technical questions and
|
||||
providing additional documentation.
|
||||
|
||||
Thanks to Chris Lin from Jetway for providing wiring schematics and
|
||||
anwsering technical questions.
|
||||
|
||||
|
||||
Description
|
||||
-----------
|
||||
|
||||
The Fintek F71805F/FG Super I/O chip includes complete hardware monitoring
|
||||
capabilities. It can monitor up to 9 voltages (counting its own power
|
||||
source), 3 fans and 3 temperature sensors.
|
||||
|
||||
This chip also has fan controlling features, using either DC or PWM, in
|
||||
three different modes (one manual, two automatic). The driver doesn't
|
||||
support these features yet.
|
||||
|
||||
The driver assumes that no more than one chip is present, which seems
|
||||
reasonable.
|
||||
|
||||
|
||||
Voltage Monitoring
|
||||
------------------
|
||||
|
||||
Voltages are sampled by an 8-bit ADC with a LSB of 8 mV. The supported
|
||||
range is thus from 0 to 2.040 V. Voltage values outside of this range
|
||||
need external resistors. An exception is in0, which is used to monitor
|
||||
the chip's own power source (+3.3V), and is divided internally by a
|
||||
factor 2.
|
||||
|
||||
The two LSB of the voltage limit registers are not used (always 0), so
|
||||
you can only set the limits in steps of 32 mV (before scaling).
|
||||
|
||||
The wirings and resistor values suggested by Fintek are as follow:
|
||||
|
||||
pin expected
|
||||
name use R1 R2 divider raw val.
|
||||
|
||||
in0 VCC VCC3.3V int. int. 2.00 1.65 V
|
||||
in1 VIN1 VTT1.2V 10K - 1.00 1.20 V
|
||||
in2 VIN2 VRAM 100K 100K 2.00 ~1.25 V (1)
|
||||
in3 VIN3 VCHIPSET 47K 100K 1.47 2.24 V (2)
|
||||
in4 VIN4 VCC5V 200K 47K 5.25 0.95 V
|
||||
in5 VIN5 +12V 200K 20K 11.00 1.05 V
|
||||
in6 VIN6 VCC1.5V 10K - 1.00 1.50 V
|
||||
in7 VIN7 VCORE 10K - 1.00 ~1.40 V (1)
|
||||
in8 VIN8 VSB5V 200K 47K 1.00 0.95 V
|
||||
|
||||
(1) Depends on your hardware setup.
|
||||
(2) Obviously not correct, swapping R1 and R2 would make more sense.
|
||||
|
||||
These values can be used as hints at best, as motherboard manufacturers
|
||||
are free to use a completely different setup. As a matter of fact, the
|
||||
Jetway K8M8MS uses a significantly different setup. You will have to
|
||||
find out documentation about your own motherboard, and edit sensors.conf
|
||||
accordingly.
|
||||
|
||||
Each voltage measured has associated low and high limits, each of which
|
||||
triggers an alarm when crossed.
|
||||
|
||||
|
||||
Fan Monitoring
|
||||
--------------
|
||||
|
||||
Fan rotation speeds are reported as 12-bit values from a gated clock
|
||||
signal. Speeds down to 366 RPM can be measured. There is no theoretical
|
||||
high limit, but values over 6000 RPM seem to cause problem. The effective
|
||||
resolution is much lower than you would expect, the step between different
|
||||
register values being 10 rather than 1.
|
||||
|
||||
The chip assumes 2 pulse-per-revolution fans.
|
||||
|
||||
An alarm is triggered if the rotation speed drops below a programmable
|
||||
limit or is too low to be measured.
|
||||
|
||||
|
||||
Temperature Monitoring
|
||||
----------------------
|
||||
|
||||
Temperatures are reported in degrees Celsius. Each temperature measured
|
||||
has a high limit, those crossing triggers an alarm. There is an associated
|
||||
hysteresis value, below which the temperature has to drop before the
|
||||
alarm is cleared.
|
||||
|
||||
All temperature channels are external, there is no embedded temperature
|
||||
sensor. Each channel can be used for connecting either a thermal diode
|
||||
or a thermistor. The driver reports the currently selected mode, but
|
||||
doesn't allow changing it. In theory, the BIOS should have configured
|
||||
everything properly.
|
|
@ -9,7 +9,7 @@ Supported chips:
|
|||
http://www.ite.com.tw/
|
||||
* IT8712F
|
||||
Prefix: 'it8712'
|
||||
Addresses scanned: I2C 0x28 - 0x2f
|
||||
Addresses scanned: I2C 0x2d
|
||||
from Super I/O config space (8 I/O ports)
|
||||
Datasheet: Publicly available at the ITE website
|
||||
http://www.ite.com.tw/
|
||||
|
|
|
@ -179,11 +179,12 @@ temp[1-*]_auto_point[1-*]_temp_hyst
|
|||
****************
|
||||
|
||||
temp[1-3]_type Sensor type selection.
|
||||
Integers 1, 2, 3 or thermistor Beta value (3435)
|
||||
Integers 1 to 4 or thermistor Beta value (typically 3435)
|
||||
Read/Write.
|
||||
1: PII/Celeron Diode
|
||||
2: 3904 transistor
|
||||
3: thermal diode
|
||||
4: thermistor (default/unknown Beta)
|
||||
Not all types are supported by all chips
|
||||
|
||||
temp[1-4]_max Temperature max value.
|
||||
|
@ -261,6 +262,21 @@ alarms Alarm bitmask.
|
|||
of individual bits.
|
||||
Bits are defined in kernel/include/sensors.h.
|
||||
|
||||
alarms_in Alarm bitmask relative to in (voltage) channels
|
||||
Read only
|
||||
A '1' bit means an alarm, LSB corresponds to in0 and so on
|
||||
Prefered to 'alarms' for newer chips
|
||||
|
||||
alarms_fan Alarm bitmask relative to fan channels
|
||||
Read only
|
||||
A '1' bit means an alarm, LSB corresponds to fan1 and so on
|
||||
Prefered to 'alarms' for newer chips
|
||||
|
||||
alarms_temp Alarm bitmask relative to temp (temperature) channels
|
||||
Read only
|
||||
A '1' bit means an alarm, LSB corresponds to temp1 and so on
|
||||
Prefered to 'alarms' for newer chips
|
||||
|
||||
beep_enable Beep/interrupt enable
|
||||
0 to disable.
|
||||
1 to enable.
|
||||
|
|
|
@ -44,7 +44,6 @@
|
|||
compiler and the textural representation of
|
||||
the tree that can be "compiled" by dtc.
|
||||
|
||||
|
||||
November 21, 2005: Rev 0.5
|
||||
- Additions/generalizations for 32-bit
|
||||
- Changed to reflect the new arch/powerpc
|
||||
|
@ -1307,6 +1306,65 @@ platforms are moved over to use the flattened-device-tree model.
|
|||
};
|
||||
|
||||
|
||||
f) Freescale SOC USB controllers
|
||||
|
||||
The device node for a USB controller that is part of a Freescale
|
||||
SOC is as described in the document "Open Firmware Recommended
|
||||
Practice : Universal Serial Bus" with the following modifications
|
||||
and additions :
|
||||
|
||||
Required properties :
|
||||
- compatible : Should be "fsl-usb2-mph" for multi port host usb
|
||||
controllers, or "fsl-usb2-dr" for dual role usb controllers
|
||||
- phy_type : For multi port host usb controllers, should be one of
|
||||
"ulpi", or "serial". For dual role usb controllers, should be
|
||||
one of "ulpi", "utmi", "utmi_wide", or "serial".
|
||||
- reg : Offset and length of the register set for the device
|
||||
- port0 : boolean; if defined, indicates port0 is connected for
|
||||
fsl-usb2-mph compatible controllers. Either this property or
|
||||
"port1" (or both) must be defined for "fsl-usb2-mph" compatible
|
||||
controllers.
|
||||
- port1 : boolean; if defined, indicates port1 is connected for
|
||||
fsl-usb2-mph compatible controllers. Either this property or
|
||||
"port0" (or both) must be defined for "fsl-usb2-mph" compatible
|
||||
controllers.
|
||||
|
||||
Recommended properties :
|
||||
- interrupts : <a b> where a is the interrupt number and b is a
|
||||
field that represents an encoding of the sense and level
|
||||
information for the interrupt. This should be encoded based on
|
||||
the information in section 2) depending on the type of interrupt
|
||||
controller you have.
|
||||
- interrupt-parent : the phandle for the interrupt controller that
|
||||
services interrupts for this device.
|
||||
|
||||
Example multi port host usb controller device node :
|
||||
usb@22000 {
|
||||
device_type = "usb";
|
||||
compatible = "fsl-usb2-mph";
|
||||
reg = <22000 1000>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
interrupt-parent = <700>;
|
||||
interrupts = <27 1>;
|
||||
phy_type = "ulpi";
|
||||
port0;
|
||||
port1;
|
||||
};
|
||||
|
||||
Example dual role usb controller device node :
|
||||
usb@23000 {
|
||||
device_type = "usb";
|
||||
compatible = "fsl-usb2-dr";
|
||||
reg = <23000 1000>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
interrupt-parent = <700>;
|
||||
interrupts = <26 1>;
|
||||
phy = "ulpi";
|
||||
};
|
||||
|
||||
|
||||
More devices will be defined as this spec matures.
|
||||
|
||||
|
||||
|
|
|
@ -12,13 +12,20 @@ You can make this adapter from an old printer cable and solder things
|
|||
directly to the Butterfly. Or (if you have the parts and skills) you
|
||||
can come up with something fancier, providing ciruit protection to the
|
||||
Butterfly and the printer port, or with a better power supply than two
|
||||
signal pins from the printer port.
|
||||
signal pins from the printer port. Or for that matter, you can use
|
||||
similar cables to talk to many AVR boards, even a breadboard.
|
||||
|
||||
This is more powerful than "ISP programming" cables since it lets kernel
|
||||
SPI protocol drivers interact with the AVR, and could even let the AVR
|
||||
issue interrupts to them. Later, your protocol driver should work
|
||||
easily with a "real SPI controller", instead of this bitbanger.
|
||||
|
||||
|
||||
The first cable connections will hook Linux up to one SPI bus, with the
|
||||
AVR and a DataFlash chip; and to the AVR reset line. This is all you
|
||||
need to reflash the firmware, and the pins are the standard Atmel "ISP"
|
||||
connector pins (used also on non-Butterfly AVR boards).
|
||||
connector pins (used also on non-Butterfly AVR boards). On the parport
|
||||
side this is like "sp12" programming cables.
|
||||
|
||||
Signal Butterfly Parport (DB-25)
|
||||
------ --------- ---------------
|
||||
|
@ -40,10 +47,14 @@ by clearing PORTB.[0-3]); (b) configure the mtd_dataflash driver; and
|
|||
SELECT = J400.PB0/nSS = pin 17/C3,nSELECT
|
||||
GND = J400.GND = pin 24/GND
|
||||
|
||||
The "USI" controller, using J405, can be used for a second SPI bus. That
|
||||
would let you talk to the AVR over SPI, running firmware that makes it act
|
||||
as an SPI slave, while letting either Linux or the AVR use the DataFlash.
|
||||
There are plenty of spare parport pins to wire this one up, such as:
|
||||
Or you could flash firmware making the AVR into an SPI slave (keeping the
|
||||
DataFlash in reset) and tweak the spi_butterfly driver to make it bind to
|
||||
the driver for your custom SPI-based protocol.
|
||||
|
||||
The "USI" controller, using J405, can also be used for a second SPI bus.
|
||||
That would let you talk to the AVR using custom SPI-with-USI firmware,
|
||||
while letting either Linux or the AVR use the DataFlash. There are plenty
|
||||
of spare parport pins to wire this one up, such as:
|
||||
|
||||
Signal Butterfly Parport (DB-25)
|
||||
------ --------- ---------------
|
||||
|
|
295
Documentation/unshare.txt
Normal file
295
Documentation/unshare.txt
Normal file
|
@ -0,0 +1,295 @@
|
|||
|
||||
unshare system call:
|
||||
--------------------
|
||||
This document describes the new system call, unshare. The document
|
||||
provides an overview of the feature, why it is needed, how it can
|
||||
be used, its interface specification, design, implementation and
|
||||
how it can be tested.
|
||||
|
||||
Change Log:
|
||||
-----------
|
||||
version 0.1 Initial document, Janak Desai (janak@us.ibm.com), Jan 11, 2006
|
||||
|
||||
Contents:
|
||||
---------
|
||||
1) Overview
|
||||
2) Benefits
|
||||
3) Cost
|
||||
4) Requirements
|
||||
5) Functional Specification
|
||||
6) High Level Design
|
||||
7) Low Level Design
|
||||
8) Test Specification
|
||||
9) Future Work
|
||||
|
||||
1) Overview
|
||||
-----------
|
||||
Most legacy operating system kernels support an abstraction of threads
|
||||
as multiple execution contexts within a process. These kernels provide
|
||||
special resources and mechanisms to maintain these "threads". The Linux
|
||||
kernel, in a clever and simple manner, does not make distinction
|
||||
between processes and "threads". The kernel allows processes to share
|
||||
resources and thus they can achieve legacy "threads" behavior without
|
||||
requiring additional data structures and mechanisms in the kernel. The
|
||||
power of implementing threads in this manner comes not only from
|
||||
its simplicity but also from allowing application programmers to work
|
||||
outside the confinement of all-or-nothing shared resources of legacy
|
||||
threads. On Linux, at the time of thread creation using the clone system
|
||||
call, applications can selectively choose which resources to share
|
||||
between threads.
|
||||
|
||||
unshare system call adds a primitive to the Linux thread model that
|
||||
allows threads to selectively 'unshare' any resources that were being
|
||||
shared at the time of their creation. unshare was conceptualized by
|
||||
Al Viro in the August of 2000, on the Linux-Kernel mailing list, as part
|
||||
of the discussion on POSIX threads on Linux. unshare augments the
|
||||
usefulness of Linux threads for applications that would like to control
|
||||
shared resources without creating a new process. unshare is a natural
|
||||
addition to the set of available primitives on Linux that implement
|
||||
the concept of process/thread as a virtual machine.
|
||||
|
||||
2) Benefits
|
||||
-----------
|
||||
unshare would be useful to large application frameworks such as PAM
|
||||
where creating a new process to control sharing/unsharing of process
|
||||
resources is not possible. Since namespaces are shared by default
|
||||
when creating a new process using fork or clone, unshare can benefit
|
||||
even non-threaded applications if they have a need to disassociate
|
||||
from default shared namespace. The following lists two use-cases
|
||||
where unshare can be used.
|
||||
|
||||
2.1 Per-security context namespaces
|
||||
-----------------------------------
|
||||
unshare can be used to implement polyinstantiated directories using
|
||||
the kernel's per-process namespace mechanism. Polyinstantiated directories,
|
||||
such as per-user and/or per-security context instance of /tmp, /var/tmp or
|
||||
per-security context instance of a user's home directory, isolate user
|
||||
processes when working with these directories. Using unshare, a PAM
|
||||
module can easily setup a private namespace for a user at login.
|
||||
Polyinstantiated directories are required for Common Criteria certification
|
||||
with Labeled System Protection Profile, however, with the availability
|
||||
of shared-tree feature in the Linux kernel, even regular Linux systems
|
||||
can benefit from setting up private namespaces at login and
|
||||
polyinstantiating /tmp, /var/tmp and other directories deemed
|
||||
appropriate by system administrators.
|
||||
|
||||
2.2 unsharing of virtual memory and/or open files
|
||||
-------------------------------------------------
|
||||
Consider a client/server application where the server is processing
|
||||
client requests by creating processes that share resources such as
|
||||
virtual memory and open files. Without unshare, the server has to
|
||||
decide what needs to be shared at the time of creating the process
|
||||
which services the request. unshare allows the server an ability to
|
||||
disassociate parts of the context during the servicing of the
|
||||
request. For large and complex middleware application frameworks, this
|
||||
ability to unshare after the process was created can be very
|
||||
useful.
|
||||
|
||||
3) Cost
|
||||
-------
|
||||
In order to not duplicate code and to handle the fact that unshare
|
||||
works on an active task (as opposed to clone/fork working on a newly
|
||||
allocated inactive task) unshare had to make minor reorganizational
|
||||
changes to copy_* functions utilized by clone/fork system call.
|
||||
There is a cost associated with altering existing, well tested and
|
||||
stable code to implement a new feature that may not get exercised
|
||||
extensively in the beginning. However, with proper design and code
|
||||
review of the changes and creation of an unshare test for the LTP
|
||||
the benefits of this new feature can exceed its cost.
|
||||
|
||||
4) Requirements
|
||||
---------------
|
||||
unshare reverses sharing that was done using clone(2) system call,
|
||||
so unshare should have a similar interface as clone(2). That is,
|
||||
since flags in clone(int flags, void *stack) specifies what should
|
||||
be shared, similar flags in unshare(int flags) should specify
|
||||
what should be unshared. Unfortunately, this may appear to invert
|
||||
the meaning of the flags from the way they are used in clone(2).
|
||||
However, there was no easy solution that was less confusing and that
|
||||
allowed incremental context unsharing in future without an ABI change.
|
||||
|
||||
unshare interface should accommodate possible future addition of
|
||||
new context flags without requiring a rebuild of old applications.
|
||||
If and when new context flags are added, unshare design should allow
|
||||
incremental unsharing of those resources on an as needed basis.
|
||||
|
||||
5) Functional Specification
|
||||
---------------------------
|
||||
NAME
|
||||
unshare - disassociate parts of the process execution context
|
||||
|
||||
SYNOPSIS
|
||||
#include <sched.h>
|
||||
|
||||
int unshare(int flags);
|
||||
|
||||
DESCRIPTION
|
||||
unshare allows a process to disassociate parts of its execution
|
||||
context that are currently being shared with other processes. Part
|
||||
of execution context, such as the namespace, is shared by default
|
||||
when a new process is created using fork(2), while other parts,
|
||||
such as the virtual memory, open file descriptors, etc, may be
|
||||
shared by explicit request to share them when creating a process
|
||||
using clone(2).
|
||||
|
||||
The main use of unshare is to allow a process to control its
|
||||
shared execution context without creating a new process.
|
||||
|
||||
The flags argument specifies one or bitwise-or'ed of several of
|
||||
the following constants.
|
||||
|
||||
CLONE_FS
|
||||
If CLONE_FS is set, file system information of the caller
|
||||
is disassociated from the shared file system information.
|
||||
|
||||
CLONE_FILES
|
||||
If CLONE_FILES is set, the file descriptor table of the
|
||||
caller is disassociated from the shared file descriptor
|
||||
table.
|
||||
|
||||
CLONE_NEWNS
|
||||
If CLONE_NEWNS is set, the namespace of the caller is
|
||||
disassociated from the shared namespace.
|
||||
|
||||
CLONE_VM
|
||||
If CLONE_VM is set, the virtual memory of the caller is
|
||||
disassociated from the shared virtual memory.
|
||||
|
||||
RETURN VALUE
|
||||
On success, zero returned. On failure, -1 is returned and errno is
|
||||
|
||||
ERRORS
|
||||
EPERM CLONE_NEWNS was specified by a non-root process (process
|
||||
without CAP_SYS_ADMIN).
|
||||
|
||||
ENOMEM Cannot allocate sufficient memory to copy parts of caller's
|
||||
context that need to be unshared.
|
||||
|
||||
EINVAL Invalid flag was specified as an argument.
|
||||
|
||||
CONFORMING TO
|
||||
The unshare() call is Linux-specific and should not be used
|
||||
in programs intended to be portable.
|
||||
|
||||
SEE ALSO
|
||||
clone(2), fork(2)
|
||||
|
||||
6) High Level Design
|
||||
--------------------
|
||||
Depending on the flags argument, the unshare system call allocates
|
||||
appropriate process context structures, populates it with values from
|
||||
the current shared version, associates newly duplicated structures
|
||||
with the current task structure and releases corresponding shared
|
||||
versions. Helper functions of clone (copy_*) could not be used
|
||||
directly by unshare because of the following two reasons.
|
||||
1) clone operates on a newly allocated not-yet-active task
|
||||
structure, where as unshare operates on the current active
|
||||
task. Therefore unshare has to take appropriate task_lock()
|
||||
before associating newly duplicated context structures
|
||||
2) unshare has to allocate and duplicate all context structures
|
||||
that are being unshared, before associating them with the
|
||||
current task and releasing older shared structures. Failure
|
||||
do so will create race conditions and/or oops when trying
|
||||
to backout due to an error. Consider the case of unsharing
|
||||
both virtual memory and namespace. After successfully unsharing
|
||||
vm, if the system call encounters an error while allocating
|
||||
new namespace structure, the error return code will have to
|
||||
reverse the unsharing of vm. As part of the reversal the
|
||||
system call will have to go back to older, shared, vm
|
||||
structure, which may not exist anymore.
|
||||
|
||||
Therefore code from copy_* functions that allocated and duplicated
|
||||
current context structure was moved into new dup_* functions. Now,
|
||||
copy_* functions call dup_* functions to allocate and duplicate
|
||||
appropriate context structures and then associate them with the
|
||||
task structure that is being constructed. unshare system call on
|
||||
the other hand performs the following:
|
||||
1) Check flags to force missing, but implied, flags
|
||||
2) For each context structure, call the corresponding unshare
|
||||
helper function to allocate and duplicate a new context
|
||||
structure, if the appropriate bit is set in the flags argument.
|
||||
3) If there is no error in allocation and duplication and there
|
||||
are new context structures then lock the current task structure,
|
||||
associate new context structures with the current task structure,
|
||||
and release the lock on the current task structure.
|
||||
4) Appropriately release older, shared, context structures.
|
||||
|
||||
7) Low Level Design
|
||||
-------------------
|
||||
Implementation of unshare can be grouped in the following 4 different
|
||||
items:
|
||||
a) Reorganization of existing copy_* functions
|
||||
b) unshare system call service function
|
||||
c) unshare helper functions for each different process context
|
||||
d) Registration of system call number for different architectures
|
||||
|
||||
7.1) Reorganization of copy_* functions
|
||||
Each copy function such as copy_mm, copy_namespace, copy_files,
|
||||
etc, had roughly two components. The first component allocated
|
||||
and duplicated the appropriate structure and the second component
|
||||
linked it to the task structure passed in as an argument to the copy
|
||||
function. The first component was split into its own function.
|
||||
These dup_* functions allocated and duplicated the appropriate
|
||||
context structure. The reorganized copy_* functions invoked
|
||||
their corresponding dup_* functions and then linked the newly
|
||||
duplicated structures to the task structure with which the
|
||||
copy function was called.
|
||||
|
||||
7.2) unshare system call service function
|
||||
* Check flags
|
||||
Force implied flags. If CLONE_THREAD is set force CLONE_VM.
|
||||
If CLONE_VM is set, force CLONE_SIGHAND. If CLONE_SIGHAND is
|
||||
set and signals are also being shared, force CLONE_THREAD. If
|
||||
CLONE_NEWNS is set, force CLONE_FS.
|
||||
* For each context flag, invoke the corresponding unshare_*
|
||||
helper routine with flags passed into the system call and a
|
||||
reference to pointer pointing the new unshared structure
|
||||
* If any new structures are created by unshare_* helper
|
||||
functions, take the task_lock() on the current task,
|
||||
modify appropriate context pointers, and release the
|
||||
task lock.
|
||||
* For all newly unshared structures, release the corresponding
|
||||
older, shared, structures.
|
||||
|
||||
7.3) unshare_* helper functions
|
||||
For unshare_* helpers corresponding to CLONE_SYSVSEM, CLONE_SIGHAND,
|
||||
and CLONE_THREAD, return -EINVAL since they are not implemented yet.
|
||||
For others, check the flag value to see if the unsharing is
|
||||
required for that structure. If it is, invoke the corresponding
|
||||
dup_* function to allocate and duplicate the structure and return
|
||||
a pointer to it.
|
||||
|
||||
7.4) Appropriately modify architecture specific code to register the
|
||||
the new system call.
|
||||
|
||||
8) Test Specification
|
||||
---------------------
|
||||
The test for unshare should test the following:
|
||||
1) Valid flags: Test to check that clone flags for signal and
|
||||
signal handlers, for which unsharing is not implemented
|
||||
yet, return -EINVAL.
|
||||
2) Missing/implied flags: Test to make sure that if unsharing
|
||||
namespace without specifying unsharing of filesystem, correctly
|
||||
unshares both namespace and filesystem information.
|
||||
3) For each of the four (namespace, filesystem, files and vm)
|
||||
supported unsharing, verify that the system call correctly
|
||||
unshares the appropriate structure. Verify that unsharing
|
||||
them individually as well as in combination with each
|
||||
other works as expected.
|
||||
4) Concurrent execution: Use shared memory segments and futex on
|
||||
an address in the shm segment to synchronize execution of
|
||||
about 10 threads. Have a couple of threads execute execve,
|
||||
a couple _exit and the rest unshare with different combination
|
||||
of flags. Verify that unsharing is performed as expected and
|
||||
that there are no oops or hangs.
|
||||
|
||||
9) Future Work
|
||||
--------------
|
||||
The current implementation of unshare does not allow unsharing of
|
||||
signals and signal handlers. Signals are complex to begin with and
|
||||
to unshare signals and/or signal handlers of a currently running
|
||||
process is even more complex. If in the future there is a specific
|
||||
need to allow unsharing of signals and/or signal handlers, it can
|
||||
be incrementally added to unshare without affecting legacy
|
||||
applications using unshare.
|
||||
|
|
@ -42,4 +42,4 @@
|
|||
41 -> Hauppauge WinTV-HVR1100 DVB-T/Hybrid (Low Profile) [0070:9800,0070:9802]
|
||||
42 -> digitalnow DNTV Live! DVB-T Pro [1822:0025]
|
||||
43 -> KWorld/VStream XPert DVB-T with cx22702 [17de:08a1]
|
||||
44 -> DViCO FusionHDTV DVB-T Dual Digital [18ac:db50]
|
||||
44 -> DViCO FusionHDTV DVB-T Dual Digital [18ac:db50,18ac:db54]
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
0 -> UNKNOWN/GENERIC
|
||||
1 -> Proteus Pro [philips reference design] [1131:2001,1131:2001]
|
||||
2 -> LifeView FlyVIDEO3000 [5168:0138,4e42:0138]
|
||||
3 -> LifeView FlyVIDEO2000 [5168:0138]
|
||||
3 -> LifeView/Typhoon FlyVIDEO2000 [5168:0138,4e42:0138]
|
||||
4 -> EMPRESS [1131:6752]
|
||||
5 -> SKNet Monster TV [1131:4e85]
|
||||
6 -> Tevion MD 9717
|
||||
|
@ -53,12 +53,12 @@
|
|||
52 -> AverMedia AverTV/305 [1461:2108]
|
||||
53 -> ASUS TV-FM 7135 [1043:4845]
|
||||
54 -> LifeView FlyTV Platinum FM [5168:0214,1489:0214]
|
||||
55 -> LifeView FlyDVB-T DUO [5168:0502,5168:0306]
|
||||
55 -> LifeView FlyDVB-T DUO [5168:0306]
|
||||
56 -> Avermedia AVerTV 307 [1461:a70a]
|
||||
57 -> Avermedia AVerTV GO 007 FM [1461:f31f]
|
||||
58 -> ADS Tech Instant TV (saa7135) [1421:0350,1421:0351,1421:0370,1421:1370]
|
||||
59 -> Kworld/Tevion V-Stream Xpert TV PVR7134
|
||||
60 -> Typhoon DVB-T Duo Digital/Analog Cardbus [4e42:0502]
|
||||
60 -> LifeView/Typhoon FlyDVB-T Duo Cardbus [5168:0502,4e42:0502]
|
||||
61 -> Philips TOUGH DVB-T reference design [1131:2004]
|
||||
62 -> Compro VideoMate TV Gold+II
|
||||
63 -> Kworld Xpert TV PVR7134
|
||||
|
|
17
MAINTAINERS
17
MAINTAINERS
|
@ -540,7 +540,8 @@ S: Supported
|
|||
|
||||
BTTV VIDEO4LINUX DRIVER
|
||||
P: Mauro Carvalho Chehab
|
||||
M: mchehab@brturbo.com.br
|
||||
M: mchehab@infradead.org
|
||||
M: v4l-dvb-maintainer@linuxtv.org
|
||||
L: video4linux-list@redhat.com
|
||||
W: http://linuxtv.org
|
||||
T: git kernel.org:/pub/scm/linux/kernel/git/mchehab/v4l-dvb.git
|
||||
|
@ -837,11 +838,12 @@ S: Maintained
|
|||
|
||||
DVB SUBSYSTEM AND DRIVERS
|
||||
P: LinuxTV.org Project
|
||||
M: linux-dvb-maintainer@linuxtv.org
|
||||
M: mchehab@infradead.org
|
||||
M: v4l-dvb-maintainer@linuxtv.org
|
||||
L: linux-dvb@linuxtv.org (subscription required)
|
||||
W: http://linuxtv.org/
|
||||
T: git kernel.org:/pub/scm/linux/kernel/git/mchehab/v4l-dvb.git
|
||||
S: Supported
|
||||
S: Maintained
|
||||
|
||||
EATA-DMA SCSI DRIVER
|
||||
P: Michael Neuffer
|
||||
|
@ -929,6 +931,12 @@ M: sct@redhat.com, akpm@osdl.org, adilger@clusterfs.com
|
|||
L: ext3-users@redhat.com
|
||||
S: Maintained
|
||||
|
||||
F71805F HARDWARE MONITORING DRIVER
|
||||
P: Jean Delvare
|
||||
M: khali@linux-fr.org
|
||||
L: lm-sensors@lm-sensors.org
|
||||
S: Maintained
|
||||
|
||||
FARSYNC SYNCHRONOUS DRIVER
|
||||
P: Kevin Curtis
|
||||
M: kevin.curtis@farsite.co.uk
|
||||
|
@ -2956,7 +2964,8 @@ S: Maintained
|
|||
|
||||
VIDEO FOR LINUX
|
||||
P: Mauro Carvalho Chehab
|
||||
M: mchehab@brturbo.com.br
|
||||
M: mchehab@infradead.org
|
||||
M: v4l-dvb-maintainer@linuxtv.org
|
||||
L: video4linux-list@redhat.com
|
||||
W: http://linuxtv.org
|
||||
T: git kernel.org:/pub/scm/linux/kernel/git/mchehab/v4l-dvb.git
|
||||
|
|
2
Makefile
2
Makefile
|
@ -442,7 +442,7 @@ export KBUILD_DEFCONFIG
|
|||
config %config: scripts_basic outputmakefile FORCE
|
||||
$(Q)mkdir -p include/linux
|
||||
$(Q)$(MAKE) $(build)=scripts/kconfig $@
|
||||
$(Q)$(MAKE) .kernelrelease
|
||||
$(Q)$(MAKE) -C $(srctree) KBUILD_SRC= .kernelrelease
|
||||
|
||||
else
|
||||
# ===========================================================================
|
||||
|
|
|
@ -73,9 +73,6 @@ cpumask_t cpu_online_map;
|
|||
|
||||
EXPORT_SYMBOL(cpu_online_map);
|
||||
|
||||
/* cpus reported in the hwrpb */
|
||||
static unsigned long hwrpb_cpu_present_mask __initdata = 0;
|
||||
|
||||
int smp_num_probed; /* Internal processor count */
|
||||
int smp_num_cpus = 1; /* Number that came online. */
|
||||
|
||||
|
@ -442,7 +439,7 @@ setup_smp(void)
|
|||
if ((cpu->flags & 0x1cc) == 0x1cc) {
|
||||
smp_num_probed++;
|
||||
/* Assume here that "whami" == index */
|
||||
hwrpb_cpu_present_mask |= (1UL << i);
|
||||
cpu_set(i, cpu_possible_map);
|
||||
cpu->pal_revision = boot_cpu_palrev;
|
||||
}
|
||||
|
||||
|
@ -453,12 +450,12 @@ setup_smp(void)
|
|||
}
|
||||
} else {
|
||||
smp_num_probed = 1;
|
||||
hwrpb_cpu_present_mask = (1UL << boot_cpuid);
|
||||
cpu_set(boot_cpuid, cpu_possible_map);
|
||||
}
|
||||
cpu_present_mask = cpumask_of_cpu(boot_cpuid);
|
||||
|
||||
printk(KERN_INFO "SMP: %d CPUs probed -- cpu_present_mask = %lx\n",
|
||||
smp_num_probed, hwrpb_cpu_present_mask);
|
||||
smp_num_probed, cpu_possible_map.bits[0]);
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -467,8 +464,6 @@ setup_smp(void)
|
|||
void __init
|
||||
smp_prepare_cpus(unsigned int max_cpus)
|
||||
{
|
||||
int cpu_count, i;
|
||||
|
||||
/* Take care of some initial bookkeeping. */
|
||||
memset(ipi_data, 0, sizeof(ipi_data));
|
||||
|
||||
|
@ -486,19 +481,7 @@ smp_prepare_cpus(unsigned int max_cpus)
|
|||
|
||||
printk(KERN_INFO "SMP starting up secondaries.\n");
|
||||
|
||||
cpu_count = 1;
|
||||
for (i = 0; (i < NR_CPUS) && (cpu_count < max_cpus); i++) {
|
||||
if (i == boot_cpuid)
|
||||
continue;
|
||||
|
||||
if (((hwrpb_cpu_present_mask >> i) & 1) == 0)
|
||||
continue;
|
||||
|
||||
cpu_set(i, cpu_possible_map);
|
||||
cpu_count++;
|
||||
}
|
||||
|
||||
smp_num_cpus = cpu_count;
|
||||
smp_num_cpus = smp_num_probed;
|
||||
}
|
||||
|
||||
void __devinit
|
||||
|
|
|
@ -10,7 +10,7 @@ config ARM
|
|||
default y
|
||||
help
|
||||
The ARM series is a line of low-power-consumption RISC chip designs
|
||||
licensed by ARM ltd and targeted at embedded applications and
|
||||
licensed by ARM Ltd and targeted at embedded applications and
|
||||
handhelds such as the Compaq IPAQ. ARM-based PCs are no longer
|
||||
manufactured, but legacy ARM-based PC hardware remains popular in
|
||||
Europe. There is an ARM Linux project with a web page at
|
||||
|
@ -69,6 +69,9 @@ config GENERIC_ISA_DMA
|
|||
config FIQ
|
||||
bool
|
||||
|
||||
config ARCH_MTD_XIP
|
||||
bool
|
||||
|
||||
source "init/Kconfig"
|
||||
|
||||
menu "System Type"
|
||||
|
@ -81,45 +84,62 @@ config ARCH_CLPS7500
|
|||
bool "Cirrus-CL-PS7500FE"
|
||||
select TIMER_ACORN
|
||||
select ISA
|
||||
help
|
||||
Support for the Cirrus Logic PS7500FE system-on-a-chip.
|
||||
|
||||
config ARCH_CLPS711X
|
||||
bool "CLPS711x/EP721x-based"
|
||||
help
|
||||
Support for Cirrus Logic 711x/721x based boards.
|
||||
|
||||
config ARCH_CO285
|
||||
bool "Co-EBSA285"
|
||||
select FOOTBRIDGE
|
||||
select FOOTBRIDGE_ADDIN
|
||||
help
|
||||
Support for Intel's EBSA285 companion chip.
|
||||
|
||||
config ARCH_EBSA110
|
||||
bool "EBSA-110"
|
||||
select ISA
|
||||
help
|
||||
This is an evaluation board for the StrongARM processor available
|
||||
from Digital. It has limited hardware on-board, including an onboard
|
||||
from Digital. It has limited hardware on-board, including an
|
||||
Ethernet interface, two PCMCIA sockets, two serial ports and a
|
||||
parallel port.
|
||||
|
||||
config ARCH_FOOTBRIDGE
|
||||
bool "FootBridge"
|
||||
select FOOTBRIDGE
|
||||
help
|
||||
Support for systems based on the DC21285 companion chip
|
||||
("FootBridge"), such as the Simtec CATS and the Rebel NetWinder.
|
||||
|
||||
config ARCH_INTEGRATOR
|
||||
bool "Integrator"
|
||||
select ARM_AMBA
|
||||
select ICST525
|
||||
help
|
||||
Support for ARM's Integrator platform.
|
||||
|
||||
config ARCH_IOP3XX
|
||||
bool "IOP3xx-based"
|
||||
select PCI
|
||||
help
|
||||
Support for Intel's IOP3XX (XScale) family of processors.
|
||||
|
||||
config ARCH_IXP4XX
|
||||
bool "IXP4xx-based"
|
||||
select DMABOUNCE
|
||||
select PCI
|
||||
help
|
||||
Support for Intel's IXP4XX (XScale) family of processors.
|
||||
|
||||
config ARCH_IXP2000
|
||||
bool "IXP2400/2800-based"
|
||||
select PCI
|
||||
help
|
||||
Support for Intel's IXP2400/2800 (XScale) family of processors.
|
||||
|
||||
config ARCH_L7200
|
||||
bool "LinkUp-L7200"
|
||||
|
@ -136,6 +156,9 @@ config ARCH_L7200
|
|||
|
||||
config ARCH_PXA
|
||||
bool "PXA2xx-based"
|
||||
select ARCH_MTD_XIP
|
||||
help
|
||||
Support for Intel's PXA2XX processor line.
|
||||
|
||||
config ARCH_RPC
|
||||
bool "RiscPC"
|
||||
|
@ -152,19 +175,25 @@ config ARCH_SA1100
|
|||
bool "SA1100-based"
|
||||
select ISA
|
||||
select ARCH_DISCONTIGMEM_ENABLE
|
||||
select ARCH_MTD_XIP
|
||||
help
|
||||
Support for StrongARM 11x0 based boards.
|
||||
|
||||
config ARCH_S3C2410
|
||||
bool "Samsung S3C2410"
|
||||
help
|
||||
Samsung S3C2410X CPU based systems, such as the Simtec Electronics
|
||||
BAST (<http://www.simtec.co.uk/products/EB110ITX/>), the IPAQ 1940 or
|
||||
the Samsung SMDK2410 development board (and derviatives).
|
||||
the Samsung SMDK2410 development board (and derivatives).
|
||||
|
||||
config ARCH_SHARK
|
||||
bool "Shark"
|
||||
select ISA
|
||||
select ISA_DMA
|
||||
select PCI
|
||||
help
|
||||
Support for the StrongARM based Digital DNARD machine, also known
|
||||
as "Shark" (<http://www.shark-linux.de/shark.html>).
|
||||
|
||||
config ARCH_LH7A40X
|
||||
bool "Sharp LH7A40X"
|
||||
|
@ -176,6 +205,8 @@ config ARCH_LH7A40X
|
|||
|
||||
config ARCH_OMAP
|
||||
bool "TI OMAP"
|
||||
help
|
||||
Support for TI's OMAP platform (OMAP1 and OMAP2).
|
||||
|
||||
config ARCH_VERSATILE
|
||||
bool "Versatile"
|
||||
|
@ -194,6 +225,8 @@ config ARCH_REALVIEW
|
|||
|
||||
config ARCH_IMX
|
||||
bool "IMX"
|
||||
help
|
||||
Support for Motorola's i.MX family of processors (MX1, MXL).
|
||||
|
||||
config ARCH_H720X
|
||||
bool "Hynix-HMS720x-based"
|
||||
|
@ -210,8 +243,8 @@ config ARCH_AAEC2000
|
|||
config ARCH_AT91RM9200
|
||||
bool "AT91RM9200"
|
||||
help
|
||||
Say Y here if you intend to run this kernel on an AT91RM9200-based
|
||||
board.
|
||||
Say Y here if you intend to run this kernel on an Atmel
|
||||
AT91RM9200-based board.
|
||||
|
||||
endchoice
|
||||
|
||||
|
@ -417,8 +450,8 @@ config AEABI
|
|||
To use this you need GCC version 4.0.0 or later.
|
||||
|
||||
config OABI_COMPAT
|
||||
bool "Allow old ABI binaries to run with this kernel"
|
||||
depends on AEABI
|
||||
bool "Allow old ABI binaries to run with this kernel (EXPERIMENTAL)"
|
||||
depends on AEABI && EXPERIMENTAL
|
||||
default y
|
||||
help
|
||||
This option preserves the old syscall interface along with the
|
||||
|
|
|
@ -171,7 +171,7 @@ CONFIG_ALIGNMENT_TRAP=y
|
|||
#
|
||||
CONFIG_ZBOOT_ROM_TEXT=0x0
|
||||
CONFIG_ZBOOT_ROM_BSS=0x0
|
||||
CONFIG_CMDLINE="console=ttyS0,57600 root=/dev/nfs ip=bootp mem=64M@0x0 pci=firmware"
|
||||
CONFIG_CMDLINE="console=ttyS0,57600 root=/dev/nfs ip=bootp mem=64M@0x0"
|
||||
# CONFIG_XIP_KERNEL is not set
|
||||
|
||||
#
|
||||
|
|
|
@ -172,7 +172,7 @@ CONFIG_ALIGNMENT_TRAP=y
|
|||
#
|
||||
CONFIG_ZBOOT_ROM_TEXT=0x0
|
||||
CONFIG_ZBOOT_ROM_BSS=0x0
|
||||
CONFIG_CMDLINE="console=ttyS0,57600 root=/dev/nfs ip=bootp mem=64M@0x0 pci=firmware"
|
||||
CONFIG_CMDLINE="console=ttyS0,57600 root=/dev/nfs ip=bootp mem=64M@0x0"
|
||||
# CONFIG_XIP_KERNEL is not set
|
||||
|
||||
#
|
||||
|
|
|
@ -172,7 +172,7 @@ CONFIG_ALIGNMENT_TRAP=y
|
|||
#
|
||||
CONFIG_ZBOOT_ROM_TEXT=0x0
|
||||
CONFIG_ZBOOT_ROM_BSS=0x0
|
||||
CONFIG_CMDLINE="console=ttyS0,115200 root=/dev/nfs ip=bootp mem=64M@0x0 pci=firmware"
|
||||
CONFIG_CMDLINE="console=ttyS0,115200 root=/dev/nfs ip=bootp mem=64M@0x0"
|
||||
# CONFIG_XIP_KERNEL is not set
|
||||
|
||||
#
|
||||
|
|
|
@ -172,7 +172,7 @@ CONFIG_ALIGNMENT_TRAP=y
|
|||
#
|
||||
CONFIG_ZBOOT_ROM_TEXT=0x0
|
||||
CONFIG_ZBOOT_ROM_BSS=0x0
|
||||
CONFIG_CMDLINE="console=ttyS0,115200 root=/dev/nfs ip=bootp mem=64M@0x0 pci=firmware ixdp2x01_clock=50000000"
|
||||
CONFIG_CMDLINE="console=ttyS0,115200 root=/dev/nfs ip=bootp mem=64M@0x0"
|
||||
# CONFIG_XIP_KERNEL is not set
|
||||
|
||||
#
|
||||
|
|
|
@ -1,11 +1,10 @@
|
|||
#
|
||||
# Automatically generated make config: don't edit
|
||||
# Linux kernel version: 2.6.15-rc1
|
||||
# Sun Nov 13 17:41:24 2005
|
||||
# Linux kernel version: 2.6.16-rc2
|
||||
# Mon Feb 6 11:17:23 2006
|
||||
#
|
||||
CONFIG_ARM=y
|
||||
CONFIG_MMU=y
|
||||
CONFIG_UID16=y
|
||||
CONFIG_RWSEM_GENERIC_SPINLOCK=y
|
||||
CONFIG_GENERIC_CALIBRATE_DELAY=y
|
||||
|
||||
|
@ -28,27 +27,31 @@ CONFIG_SYSVIPC=y
|
|||
# CONFIG_BSD_PROCESS_ACCT is not set
|
||||
CONFIG_SYSCTL=y
|
||||
# CONFIG_AUDIT is not set
|
||||
# CONFIG_HOTPLUG is not set
|
||||
CONFIG_KOBJECT_UEVENT=y
|
||||
# CONFIG_IKCONFIG is not set
|
||||
CONFIG_INITRAMFS_SOURCE=""
|
||||
CONFIG_UID16=y
|
||||
CONFIG_CC_OPTIMIZE_FOR_SIZE=y
|
||||
# CONFIG_EMBEDDED is not set
|
||||
CONFIG_KALLSYMS=y
|
||||
# CONFIG_KALLSYMS_ALL is not set
|
||||
# CONFIG_KALLSYMS_EXTRA_PASS is not set
|
||||
CONFIG_HOTPLUG=y
|
||||
CONFIG_PRINTK=y
|
||||
CONFIG_BUG=y
|
||||
CONFIG_ELF_CORE=y
|
||||
CONFIG_BASE_FULL=y
|
||||
CONFIG_FUTEX=y
|
||||
CONFIG_EPOLL=y
|
||||
CONFIG_CC_OPTIMIZE_FOR_SIZE=y
|
||||
CONFIG_SHMEM=y
|
||||
CONFIG_CC_ALIGN_FUNCTIONS=0
|
||||
CONFIG_CC_ALIGN_LABELS=0
|
||||
CONFIG_CC_ALIGN_LOOPS=0
|
||||
CONFIG_CC_ALIGN_JUMPS=0
|
||||
CONFIG_SLAB=y
|
||||
# CONFIG_TINY_SHMEM is not set
|
||||
CONFIG_BASE_SMALL=0
|
||||
# CONFIG_SLOB is not set
|
||||
CONFIG_OBSOLETE_INTERMODULE=y
|
||||
|
||||
#
|
||||
# Loadable module support
|
||||
|
@ -102,6 +105,7 @@ CONFIG_ARCH_S3C2410=y
|
|||
# CONFIG_ARCH_IMX is not set
|
||||
# CONFIG_ARCH_H720X is not set
|
||||
# CONFIG_ARCH_AAEC2000 is not set
|
||||
# CONFIG_ARCH_AT91RM9200 is not set
|
||||
|
||||
#
|
||||
# S3C24XX Implementations
|
||||
|
@ -160,7 +164,6 @@ CONFIG_CPU_TLB_V4WBI=y
|
|||
# Bus support
|
||||
#
|
||||
CONFIG_ISA=y
|
||||
CONFIG_ISA_DMA_API=y
|
||||
|
||||
#
|
||||
# PCCARD (PCMCIA/CardBus) support
|
||||
|
@ -172,6 +175,7 @@ CONFIG_ISA_DMA_API=y
|
|||
#
|
||||
# CONFIG_PREEMPT is not set
|
||||
# CONFIG_NO_IDLE_HZ is not set
|
||||
# CONFIG_AEABI is not set
|
||||
# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
|
||||
CONFIG_SELECT_MEMORY_MODEL=y
|
||||
CONFIG_FLATMEM_MANUAL=y
|
||||
|
@ -214,6 +218,8 @@ CONFIG_BINFMT_AOUT=y
|
|||
# Power management options
|
||||
#
|
||||
CONFIG_PM=y
|
||||
CONFIG_PM_LEGACY=y
|
||||
# CONFIG_PM_DEBUG is not set
|
||||
CONFIG_APM=y
|
||||
|
||||
#
|
||||
|
@ -259,6 +265,11 @@ CONFIG_TCP_CONG_BIC=y
|
|||
# SCTP Configuration (EXPERIMENTAL)
|
||||
#
|
||||
# CONFIG_IP_SCTP is not set
|
||||
|
||||
#
|
||||
# TIPC Configuration (EXPERIMENTAL)
|
||||
#
|
||||
# CONFIG_TIPC is not set
|
||||
# CONFIG_ATM is not set
|
||||
# CONFIG_BRIDGE is not set
|
||||
# CONFIG_VLAN_8021Q is not set
|
||||
|
@ -276,7 +287,6 @@ CONFIG_TCP_CONG_BIC=y
|
|||
# QoS and/or fair queueing
|
||||
#
|
||||
# CONFIG_NET_SCHED is not set
|
||||
# CONFIG_NET_CLS_ROUTE is not set
|
||||
|
||||
#
|
||||
# Network testing
|
||||
|
@ -299,6 +309,11 @@ CONFIG_PREVENT_FIRMWARE_BUILD=y
|
|||
# CONFIG_FW_LOADER is not set
|
||||
# CONFIG_DEBUG_DRIVER is not set
|
||||
|
||||
#
|
||||
# Connector - unified userspace <-> kernelspace linker
|
||||
#
|
||||
# CONFIG_CONNECTOR is not set
|
||||
|
||||
#
|
||||
# Memory Technology Devices (MTD)
|
||||
#
|
||||
|
@ -412,8 +427,6 @@ CONFIG_PARPORT_1284=y
|
|||
#
|
||||
# Block devices
|
||||
#
|
||||
# CONFIG_BLK_DEV_XD is not set
|
||||
# CONFIG_PARIDE is not set
|
||||
# CONFIG_BLK_DEV_COW_COMMON is not set
|
||||
CONFIG_BLK_DEV_LOOP=y
|
||||
# CONFIG_BLK_DEV_CRYPTOLOOP is not set
|
||||
|
@ -502,7 +515,6 @@ CONFIG_NETDEVICES=y
|
|||
CONFIG_NET_ETHERNET=y
|
||||
CONFIG_MII=y
|
||||
# CONFIG_NET_VENDOR_3COM is not set
|
||||
# CONFIG_LANCE is not set
|
||||
# CONFIG_NET_VENDOR_SMC is not set
|
||||
# CONFIG_SMC91X is not set
|
||||
CONFIG_DM9000=y
|
||||
|
@ -607,11 +619,11 @@ CONFIG_SERIAL_NONSTANDARD=y
|
|||
# CONFIG_ROCKETPORT is not set
|
||||
# CONFIG_CYCLADES is not set
|
||||
# CONFIG_DIGIEPCA is not set
|
||||
# CONFIG_ESPSERIAL is not set
|
||||
# CONFIG_MOXA_INTELLIO is not set
|
||||
# CONFIG_MOXA_SMARTIO is not set
|
||||
# CONFIG_ISI is not set
|
||||
# CONFIG_SYNCLINKMP is not set
|
||||
# CONFIG_SYNCLINK_GT is not set
|
||||
# CONFIG_N_HDLC is not set
|
||||
# CONFIG_RISCOM8 is not set
|
||||
# CONFIG_SPECIALIX is not set
|
||||
|
@ -625,6 +637,7 @@ CONFIG_SERIAL_NONSTANDARD=y
|
|||
CONFIG_SERIAL_8250=y
|
||||
CONFIG_SERIAL_8250_CONSOLE=y
|
||||
CONFIG_SERIAL_8250_NR_UARTS=8
|
||||
CONFIG_SERIAL_8250_RUNTIME_UARTS=4
|
||||
CONFIG_SERIAL_8250_EXTENDED=y
|
||||
CONFIG_SERIAL_8250_MANY_PORTS=y
|
||||
CONFIG_SERIAL_8250_SHARE_IRQ=y
|
||||
|
@ -687,6 +700,7 @@ CONFIG_S3C2410_RTC=y
|
|||
#
|
||||
# TPM devices
|
||||
#
|
||||
# CONFIG_TCG_TPM is not set
|
||||
# CONFIG_TELCLOCK is not set
|
||||
|
||||
#
|
||||
|
@ -730,6 +744,12 @@ CONFIG_SENSORS_EEPROM=m
|
|||
# CONFIG_I2C_DEBUG_BUS is not set
|
||||
# CONFIG_I2C_DEBUG_CHIP is not set
|
||||
|
||||
#
|
||||
# SPI support
|
||||
#
|
||||
# CONFIG_SPI is not set
|
||||
# CONFIG_SPI_MASTER is not set
|
||||
|
||||
#
|
||||
# Hardware Monitoring support
|
||||
#
|
||||
|
@ -863,6 +883,7 @@ CONFIG_FS_MBCACHE=y
|
|||
# CONFIG_JFS_FS is not set
|
||||
# CONFIG_FS_POSIX_ACL is not set
|
||||
# CONFIG_XFS_FS is not set
|
||||
# CONFIG_OCFS2_FS is not set
|
||||
# CONFIG_MINIX_FS is not set
|
||||
CONFIG_ROMFS_FS=y
|
||||
CONFIG_INOTIFY=y
|
||||
|
@ -897,6 +918,7 @@ CONFIG_SYSFS=y
|
|||
# CONFIG_HUGETLB_PAGE is not set
|
||||
CONFIG_RAMFS=y
|
||||
# CONFIG_RELAYFS_FS is not set
|
||||
# CONFIG_CONFIGFS_FS is not set
|
||||
|
||||
#
|
||||
# Miscellaneous filesystems
|
||||
|
@ -965,6 +987,7 @@ CONFIG_SOLARIS_X86_PARTITION=y
|
|||
# CONFIG_SGI_PARTITION is not set
|
||||
# CONFIG_ULTRIX_PARTITION is not set
|
||||
# CONFIG_SUN_PARTITION is not set
|
||||
# CONFIG_KARMA_PARTITION is not set
|
||||
# CONFIG_EFI_PARTITION is not set
|
||||
|
||||
#
|
||||
|
@ -1020,12 +1043,13 @@ CONFIG_NLS_DEFAULT="iso8859-1"
|
|||
# Kernel hacking
|
||||
#
|
||||
# CONFIG_PRINTK_TIME is not set
|
||||
CONFIG_DEBUG_KERNEL=y
|
||||
CONFIG_MAGIC_SYSRQ=y
|
||||
CONFIG_DEBUG_KERNEL=y
|
||||
CONFIG_LOG_BUF_SHIFT=16
|
||||
CONFIG_DETECT_SOFTLOCKUP=y
|
||||
# CONFIG_SCHEDSTATS is not set
|
||||
# CONFIG_DEBUG_SLAB is not set
|
||||
CONFIG_DEBUG_MUTEXES=y
|
||||
# CONFIG_DEBUG_SPINLOCK is not set
|
||||
# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
|
||||
# CONFIG_DEBUG_KOBJECT is not set
|
||||
|
@ -1034,6 +1058,7 @@ CONFIG_DEBUG_INFO=y
|
|||
# CONFIG_DEBUG_FS is not set
|
||||
# CONFIG_DEBUG_VM is not set
|
||||
CONFIG_FRAME_POINTER=y
|
||||
CONFIG_FORCED_INLINING=y
|
||||
# CONFIG_RCU_TORTURE_TEST is not set
|
||||
CONFIG_DEBUG_USER=y
|
||||
# CONFIG_DEBUG_WAITQ is not set
|
||||
|
|
|
@ -291,21 +291,21 @@
|
|||
CALL(sys_mq_getsetattr)
|
||||
/* 280 */ CALL(sys_waitid)
|
||||
CALL(sys_socket)
|
||||
CALL(sys_bind)
|
||||
CALL(sys_connect)
|
||||
CALL(ABI(sys_bind, sys_oabi_bind))
|
||||
CALL(ABI(sys_connect, sys_oabi_connect))
|
||||
CALL(sys_listen)
|
||||
/* 285 */ CALL(sys_accept)
|
||||
CALL(sys_getsockname)
|
||||
CALL(sys_getpeername)
|
||||
CALL(sys_socketpair)
|
||||
CALL(sys_send)
|
||||
/* 290 */ CALL(sys_sendto)
|
||||
/* 290 */ CALL(ABI(sys_sendto, sys_oabi_sendto))
|
||||
CALL(sys_recv)
|
||||
CALL(sys_recvfrom)
|
||||
CALL(sys_shutdown)
|
||||
CALL(sys_setsockopt)
|
||||
/* 295 */ CALL(sys_getsockopt)
|
||||
CALL(sys_sendmsg)
|
||||
CALL(ABI(sys_sendmsg, sys_oabi_sendmsg))
|
||||
CALL(sys_recvmsg)
|
||||
CALL(ABI(sys_semop, sys_oabi_semop))
|
||||
CALL(sys_semget)
|
||||
|
|
|
@ -333,9 +333,13 @@ __pabt_svc:
|
|||
@ from the exception stack
|
||||
|
||||
#if __LINUX_ARM_ARCH__ < 6 && !defined(CONFIG_NEEDS_SYSCALL_FOR_CMPXCHG)
|
||||
#ifndef CONFIG_MMU
|
||||
#warning "NPTL on non MMU needs fixing"
|
||||
#else
|
||||
@ make sure our user space atomic helper is aborted
|
||||
cmp r2, #TASK_SIZE
|
||||
bichs r3, r3, #PSR_Z_BIT
|
||||
#endif
|
||||
#endif
|
||||
|
||||
@
|
||||
|
@ -705,7 +709,12 @@ __kuser_memory_barrier: @ 0xffff0fa0
|
|||
* The C flag is also set if *ptr was changed to allow for assembly
|
||||
* optimization in the calling code.
|
||||
*
|
||||
* Note: this routine already includes memory barriers as needed.
|
||||
* Notes:
|
||||
*
|
||||
* - This routine already includes memory barriers as needed.
|
||||
*
|
||||
* - A failure might be transient, i.e. it is possible, although unlikely,
|
||||
* that "failure" be returned even if *ptr == oldval.
|
||||
*
|
||||
* For example, a user space atomic_add implementation could look like this:
|
||||
*
|
||||
|
@ -756,12 +765,18 @@ __kuser_cmpxchg: @ 0xffff0fc0
|
|||
* exception happening just after the str instruction which would
|
||||
* clear the Z flag although the exchange was done.
|
||||
*/
|
||||
#ifdef CONFIG_MMU
|
||||
teq ip, ip @ set Z flag
|
||||
ldr ip, [r2] @ load current val
|
||||
add r3, r2, #1 @ prepare store ptr
|
||||
teqeq ip, r0 @ compare with oldval if still allowed
|
||||
streq r1, [r3, #-1]! @ store newval if still allowed
|
||||
subs r0, r2, r3 @ if r2 == r3 the str occured
|
||||
#else
|
||||
#warning "NPTL on non MMU needs fixing"
|
||||
mov r0, #-1
|
||||
adds r0, r0, #0
|
||||
#endif
|
||||
mov pc, lr
|
||||
|
||||
#else
|
||||
|
|
|
@ -59,6 +59,16 @@
|
|||
* struct sembuf loses its padding with EABI. Since arrays of them are
|
||||
* used they have to be copyed to remove the padding. Compatibility wrappers
|
||||
* provided below.
|
||||
*
|
||||
* sys_bind:
|
||||
* sys_connect:
|
||||
* sys_sendmsg:
|
||||
* sys_sendto:
|
||||
*
|
||||
* struct sockaddr_un loses its padding with EABI. Since the size of the
|
||||
* structure is used as a validation test in unix_mkname(), we need to
|
||||
* change the length argument to 110 whenever it is 112. Compatibility
|
||||
* wrappers provided below.
|
||||
*/
|
||||
|
||||
#include <linux/syscalls.h>
|
||||
|
@ -67,6 +77,7 @@
|
|||
#include <linux/fcntl.h>
|
||||
#include <linux/eventpoll.h>
|
||||
#include <linux/sem.h>
|
||||
#include <linux/socket.h>
|
||||
#include <asm/ipc.h>
|
||||
#include <asm/uaccess.h>
|
||||
|
||||
|
@ -337,3 +348,63 @@ asmlinkage int sys_oabi_ipc(uint call, int first, int second, int third,
|
|||
return sys_ipc(call, first, second, third, ptr, fifth);
|
||||
}
|
||||
}
|
||||
|
||||
asmlinkage long sys_oabi_bind(int fd, struct sockaddr __user *addr, int addrlen)
|
||||
{
|
||||
sa_family_t sa_family;
|
||||
if (addrlen == 112 &&
|
||||
get_user(sa_family, &addr->sa_family) == 0 &&
|
||||
sa_family == AF_UNIX)
|
||||
addrlen = 110;
|
||||
return sys_bind(fd, addr, addrlen);
|
||||
}
|
||||
|
||||
asmlinkage long sys_oabi_connect(int fd, struct sockaddr __user *addr, int addrlen)
|
||||
{
|
||||
sa_family_t sa_family;
|
||||
if (addrlen == 112 &&
|
||||
get_user(sa_family, &addr->sa_family) == 0 &&
|
||||
sa_family == AF_UNIX)
|
||||
addrlen = 110;
|
||||
return sys_connect(fd, addr, addrlen);
|
||||
}
|
||||
|
||||
asmlinkage long sys_oabi_sendto(int fd, void __user *buff,
|
||||
size_t len, unsigned flags,
|
||||
struct sockaddr __user *addr,
|
||||
int addrlen)
|
||||
{
|
||||
sa_family_t sa_family;
|
||||
if (addrlen == 112 &&
|
||||
get_user(sa_family, &addr->sa_family) == 0 &&
|
||||
sa_family == AF_UNIX)
|
||||
addrlen = 110;
|
||||
return sys_sendto(fd, buff, len, flags, addr, addrlen);
|
||||
}
|
||||
|
||||
asmlinkage long sys_oabi_sendmsg(int fd, struct msghdr __user *msg, unsigned flags)
|
||||
{
|
||||
struct sockaddr __user *addr;
|
||||
int msg_namelen;
|
||||
sa_family_t sa_family;
|
||||
if (msg &&
|
||||
get_user(msg_namelen, &msg->msg_namelen) == 0 &&
|
||||
msg_namelen == 112 &&
|
||||
get_user(addr, &msg->msg_name) == 0 &&
|
||||
get_user(sa_family, &addr->sa_family) == 0 &&
|
||||
sa_family == AF_UNIX)
|
||||
{
|
||||
/*
|
||||
* HACK ALERT: there is a limit to how much backward bending
|
||||
* we should do for what is actually a transitional
|
||||
* compatibility layer. This already has known flaws with
|
||||
* a few ioctls that we don't intend to fix. Therefore
|
||||
* consider this blatent hack as another one... and take care
|
||||
* to run for cover. In most cases it will "just work fine".
|
||||
* If it doesn't, well, tough.
|
||||
*/
|
||||
put_user(110, &msg->msg_namelen);
|
||||
}
|
||||
return sys_sendmsg(fd, msg, flags);
|
||||
}
|
||||
|
||||
|
|
|
@ -24,6 +24,8 @@ config ARCH_CEIVA
|
|||
|
||||
config ARCH_CLEP7312
|
||||
bool "CLEP7312"
|
||||
help
|
||||
Boards based on the Cirrus Logic 7212/7312 chips.
|
||||
|
||||
config ARCH_EDB7211
|
||||
bool "EDB7211"
|
||||
|
|
|
@ -27,7 +27,6 @@
|
|||
#include <asm/mach/arch.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include "generic.h"
|
||||
#include <asm/serial.h>
|
||||
|
||||
static struct resource cs89x0_resources[] = {
|
||||
[0] = {
|
||||
|
|
|
@ -106,6 +106,7 @@ static void __init enp2611_pci_preinit(void)
|
|||
{
|
||||
ixp2000_reg_write(IXP2000_PCI_ADDR_EXT, 0x00100000);
|
||||
ixp2000_pci_preinit();
|
||||
pcibios_setup("firmware");
|
||||
}
|
||||
|
||||
static inline int enp2611_pci_valid_device(struct pci_bus *bus,
|
||||
|
|
|
@ -68,6 +68,7 @@ void __init ixdp2400_pci_preinit(void)
|
|||
{
|
||||
ixp2000_reg_write(IXP2000_PCI_ADDR_EXT, 0x00100000);
|
||||
ixp2000_pci_preinit();
|
||||
pcibios_setup("firmware");
|
||||
}
|
||||
|
||||
int ixdp2400_pci_setup(int nr, struct pci_sys_data *sys)
|
||||
|
|
|
@ -212,6 +212,7 @@ void __init ixdp2x01_pci_preinit(void)
|
|||
{
|
||||
ixp2000_reg_write(IXP2000_PCI_ADDR_EXT, 0x00000000);
|
||||
ixp2000_pci_preinit();
|
||||
pcibios_setup("firmware");
|
||||
}
|
||||
|
||||
#define DEVPIN(dev, pin) ((pin) | ((dev) << 3))
|
||||
|
@ -299,7 +300,9 @@ struct hw_pci ixdp2x01_pci __initdata = {
|
|||
|
||||
int __init ixdp2x01_pci_init(void)
|
||||
{
|
||||
if (machine_is_ixdp2401() || machine_is_ixdp2801())
|
||||
pci_common_init(&ixdp2x01_pci);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
@ -30,6 +30,7 @@
|
|||
|
||||
static void __init omap_generic_init_irq(void)
|
||||
{
|
||||
omap1_init_common_hw();
|
||||
omap_init_irq();
|
||||
}
|
||||
|
||||
|
@ -104,7 +105,7 @@ static void __init omap_generic_init(void)
|
|||
|
||||
static void __init omap_generic_map_io(void)
|
||||
{
|
||||
omap_map_common_io();
|
||||
omap1_map_common_io();
|
||||
}
|
||||
|
||||
MACHINE_START(OMAP_GENERIC, "Generic OMAP1510/1610/1710")
|
||||
|
|
|
@ -128,6 +128,7 @@ static void __init h2_init_smc91x(void)
|
|||
|
||||
static void __init h2_init_irq(void)
|
||||
{
|
||||
omap1_init_common_hw();
|
||||
omap_init_irq();
|
||||
omap_gpio_init();
|
||||
h2_init_smc91x();
|
||||
|
@ -194,7 +195,7 @@ static void __init h2_init(void)
|
|||
|
||||
static void __init h2_map_io(void)
|
||||
{
|
||||
omap_map_common_io();
|
||||
omap1_map_common_io();
|
||||
}
|
||||
|
||||
MACHINE_START(OMAP_H2, "TI-H2")
|
||||
|
|
|
@ -203,6 +203,7 @@ static void __init h3_init_smc91x(void)
|
|||
|
||||
void h3_init_irq(void)
|
||||
{
|
||||
omap1_init_common_hw();
|
||||
omap_init_irq();
|
||||
omap_gpio_init();
|
||||
h3_init_smc91x();
|
||||
|
@ -210,7 +211,7 @@ void h3_init_irq(void)
|
|||
|
||||
static void __init h3_map_io(void)
|
||||
{
|
||||
omap_map_common_io();
|
||||
omap1_map_common_io();
|
||||
}
|
||||
|
||||
MACHINE_START(OMAP_H3, "TI OMAP1710 H3 board")
|
||||
|
|
|
@ -181,6 +181,7 @@ static void __init innovator_init_smc91x(void)
|
|||
|
||||
void innovator_init_irq(void)
|
||||
{
|
||||
omap1_init_common_hw();
|
||||
omap_init_irq();
|
||||
omap_gpio_init();
|
||||
#ifdef CONFIG_ARCH_OMAP15XX
|
||||
|
@ -285,7 +286,7 @@ static void __init innovator_init(void)
|
|||
|
||||
static void __init innovator_map_io(void)
|
||||
{
|
||||
omap_map_common_io();
|
||||
omap1_map_common_io();
|
||||
|
||||
#ifdef CONFIG_ARCH_OMAP15XX
|
||||
if (cpu_is_omap1510()) {
|
||||
|
|
|
@ -65,6 +65,7 @@ static struct omap_board_config_kernel netstar_config[] = {
|
|||
|
||||
static void __init netstar_init_irq(void)
|
||||
{
|
||||
omap1_init_common_hw();
|
||||
omap_init_irq();
|
||||
omap_gpio_init();
|
||||
}
|
||||
|
@ -108,7 +109,7 @@ static void __init netstar_init(void)
|
|||
|
||||
static void __init netstar_map_io(void)
|
||||
{
|
||||
omap_map_common_io();
|
||||
omap1_map_common_io();
|
||||
}
|
||||
|
||||
#define MACHINE_PANICED 1
|
||||
|
|
|
@ -169,6 +169,7 @@ static void __init osk_init_cf(void)
|
|||
|
||||
static void __init osk_init_irq(void)
|
||||
{
|
||||
omap1_init_common_hw();
|
||||
omap_init_irq();
|
||||
omap_gpio_init();
|
||||
osk_init_smc91x();
|
||||
|
@ -269,7 +270,7 @@ static void __init osk_init(void)
|
|||
|
||||
static void __init osk_map_io(void)
|
||||
{
|
||||
omap_map_common_io();
|
||||
omap1_map_common_io();
|
||||
}
|
||||
|
||||
MACHINE_START(OMAP_OSK, "TI-OSK")
|
||||
|
|
|
@ -34,6 +34,7 @@
|
|||
|
||||
static void __init omap_generic_init_irq(void)
|
||||
{
|
||||
omap1_init_common_hw();
|
||||
omap_init_irq();
|
||||
}
|
||||
|
||||
|
@ -72,7 +73,7 @@ static void __init omap_generic_init(void)
|
|||
|
||||
static void __init omap_generic_map_io(void)
|
||||
{
|
||||
omap_map_common_io();
|
||||
omap1_map_common_io();
|
||||
}
|
||||
|
||||
MACHINE_START(OMAP_PALMTE, "OMAP310 based Palm Tungsten E")
|
||||
|
|
|
@ -144,6 +144,7 @@ static void __init perseus2_init_smc91x(void)
|
|||
|
||||
void omap_perseus2_init_irq(void)
|
||||
{
|
||||
omap1_init_common_hw();
|
||||
omap_init_irq();
|
||||
omap_gpio_init();
|
||||
perseus2_init_smc91x();
|
||||
|
@ -160,7 +161,7 @@ static struct map_desc omap_perseus2_io_desc[] __initdata = {
|
|||
|
||||
static void __init omap_perseus2_map_io(void)
|
||||
{
|
||||
omap_map_common_io();
|
||||
omap1_map_common_io();
|
||||
iotable_init(omap_perseus2_io_desc,
|
||||
ARRAY_SIZE(omap_perseus2_io_desc));
|
||||
|
||||
|
|
|
@ -162,6 +162,7 @@ static struct omap_board_config_kernel voiceblue_config[] = {
|
|||
|
||||
static void __init voiceblue_init_irq(void)
|
||||
{
|
||||
omap1_init_common_hw();
|
||||
omap_init_irq();
|
||||
omap_gpio_init();
|
||||
}
|
||||
|
@ -206,7 +207,7 @@ static void __init voiceblue_init(void)
|
|||
|
||||
static void __init voiceblue_map_io(void)
|
||||
{
|
||||
omap_map_common_io();
|
||||
omap1_map_common_io();
|
||||
}
|
||||
|
||||
#define MACHINE_PANICED 1
|
||||
|
|
|
@ -13,6 +13,7 @@
|
|||
#include <linux/kernel.h>
|
||||
#include <linux/init.h>
|
||||
|
||||
#include <asm/tlb.h>
|
||||
#include <asm/mach/map.h>
|
||||
#include <asm/io.h>
|
||||
#include <asm/arch/mux.h>
|
||||
|
@ -83,15 +84,24 @@ static struct map_desc omap16xx_io_desc[] __initdata = {
|
|||
};
|
||||
#endif
|
||||
|
||||
static int initialized = 0;
|
||||
|
||||
static void __init _omap_map_io(void)
|
||||
/*
|
||||
* Maps common IO regions for omap1. This should only get called from
|
||||
* board specific init.
|
||||
*/
|
||||
void __init omap1_map_common_io(void)
|
||||
{
|
||||
initialized = 1;
|
||||
|
||||
/* We have to initialize the IO space mapping before we can run
|
||||
* cpu_is_omapxxx() macros. */
|
||||
iotable_init(omap_io_desc, ARRAY_SIZE(omap_io_desc));
|
||||
|
||||
/* Normally devicemaps_init() would flush caches and tlb after
|
||||
* mdesc->map_io(), but we must also do it here because of the CPU
|
||||
* revision check below.
|
||||
*/
|
||||
local_flush_tlb_all();
|
||||
flush_cache_all();
|
||||
|
||||
/* We want to check CPU revision early for cpu_is_omapxxxx() macros.
|
||||
* IO space mapping must be initialized before we can do that.
|
||||
*/
|
||||
omap_check_revision();
|
||||
|
||||
#ifdef CONFIG_ARCH_OMAP730
|
||||
|
@ -111,7 +121,14 @@ static void __init _omap_map_io(void)
|
|||
#endif
|
||||
|
||||
omap_sram_init();
|
||||
}
|
||||
|
||||
/*
|
||||
* Common low-level hardware init for omap1. This should only get called from
|
||||
* board specific init.
|
||||
*/
|
||||
void __init omap1_init_common_hw()
|
||||
{
|
||||
/* REVISIT: Refer to OMAP5910 Errata, Advisory SYS_1: "Timeout Abort
|
||||
* on a Posted Write in the TIPB Bridge".
|
||||
*/
|
||||
|
@ -121,16 +138,7 @@ static void __init _omap_map_io(void)
|
|||
/* Must init clocks early to assure that timer interrupt works
|
||||
*/
|
||||
omap1_clk_init();
|
||||
}
|
||||
|
||||
/*
|
||||
* This should only get called from board specific init
|
||||
*/
|
||||
void __init omap_map_common_io(void)
|
||||
{
|
||||
if (!initialized) {
|
||||
_omap_map_io();
|
||||
omap1_mux_init();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -33,6 +33,7 @@
|
|||
|
||||
static void __init omap_generic_init_irq(void)
|
||||
{
|
||||
omap2_init_common_hw();
|
||||
omap_init_irq();
|
||||
}
|
||||
|
||||
|
@ -64,7 +65,7 @@ static void __init omap_generic_init(void)
|
|||
|
||||
static void __init omap_generic_map_io(void)
|
||||
{
|
||||
omap_map_common_io();
|
||||
omap2_map_common_io();
|
||||
}
|
||||
|
||||
MACHINE_START(OMAP_GENERIC, "Generic OMAP24xx")
|
||||
|
|
|
@ -136,6 +136,7 @@ static inline void __init h4_init_smc91x(void)
|
|||
|
||||
static void __init omap_h4_init_irq(void)
|
||||
{
|
||||
omap2_init_common_hw();
|
||||
omap_init_irq();
|
||||
omap_gpio_init();
|
||||
h4_init_smc91x();
|
||||
|
@ -181,7 +182,7 @@ static void __init omap_h4_init(void)
|
|||
|
||||
static void __init omap_h4_map_io(void)
|
||||
{
|
||||
omap_map_common_io();
|
||||
omap2_map_common_io();
|
||||
}
|
||||
|
||||
MACHINE_START(OMAP_H4, "OMAP2420 H4 board")
|
||||
|
|
|
@ -182,7 +182,7 @@ static const struct icst307_params realview_oscvco_params = {
|
|||
static void realview_oscvco_set(struct clk *clk, struct icst307_vco vco)
|
||||
{
|
||||
void __iomem *sys_lock = __io_address(REALVIEW_SYS_BASE) + REALVIEW_SYS_LOCK_OFFSET;
|
||||
void __iomem *sys_osc = __io_address(REALVIEW_SYS_BASE) + REALVIEW_SYS_OSC1_OFFSET;
|
||||
void __iomem *sys_osc = __io_address(REALVIEW_SYS_BASE) + REALVIEW_SYS_OSC4_OFFSET;
|
||||
u32 val;
|
||||
|
||||
val = readl(sys_osc) & ~0x7ffff;
|
||||
|
|
|
@ -40,7 +40,6 @@
|
|||
#include <linux/mutex.h>
|
||||
|
||||
#include <asm/hardware.h>
|
||||
#include <asm/atomic.h>
|
||||
#include <asm/irq.h>
|
||||
#include <asm/io.h>
|
||||
|
||||
|
@ -59,22 +58,18 @@ static DEFINE_MUTEX(clocks_mutex);
|
|||
void inline s3c24xx_clk_enable(unsigned int clocks, unsigned int enable)
|
||||
{
|
||||
unsigned long clkcon;
|
||||
unsigned long flags;
|
||||
|
||||
local_irq_save(flags);
|
||||
|
||||
clkcon = __raw_readl(S3C2410_CLKCON);
|
||||
clkcon &= ~clocks;
|
||||
|
||||
if (enable)
|
||||
clkcon |= clocks;
|
||||
else
|
||||
clkcon &= ~clocks;
|
||||
|
||||
/* ensure none of the special function bits set */
|
||||
clkcon &= ~(S3C2410_CLKCON_IDLE|S3C2410_CLKCON_POWER);
|
||||
|
||||
__raw_writel(clkcon, S3C2410_CLKCON);
|
||||
|
||||
local_irq_restore(flags);
|
||||
}
|
||||
|
||||
/* enable and disable calls for use with the clk struct */
|
||||
|
@ -138,16 +133,32 @@ void clk_put(struct clk *clk)
|
|||
|
||||
int clk_enable(struct clk *clk)
|
||||
{
|
||||
if (IS_ERR(clk))
|
||||
if (IS_ERR(clk) || clk == NULL)
|
||||
return -EINVAL;
|
||||
|
||||
return (clk->enable)(clk, 1);
|
||||
clk_enable(clk->parent);
|
||||
|
||||
mutex_lock(&clocks_mutex);
|
||||
|
||||
if ((clk->usage++) == 0)
|
||||
(clk->enable)(clk, 1);
|
||||
|
||||
mutex_unlock(&clocks_mutex);
|
||||
return 0;
|
||||
}
|
||||
|
||||
void clk_disable(struct clk *clk)
|
||||
{
|
||||
if (!IS_ERR(clk))
|
||||
if (IS_ERR(clk) || clk == NULL)
|
||||
return;
|
||||
|
||||
mutex_lock(&clocks_mutex);
|
||||
|
||||
if ((--clk->usage) == 0)
|
||||
(clk->enable)(clk, 0);
|
||||
|
||||
mutex_unlock(&clocks_mutex);
|
||||
clk_disable(clk->parent);
|
||||
}
|
||||
|
||||
|
||||
|
@ -361,6 +372,14 @@ int s3c24xx_register_clock(struct clk *clk)
|
|||
if (clk->enable == NULL)
|
||||
clk->enable = clk_null_enable;
|
||||
|
||||
/* if this is a standard clock, set the usage state */
|
||||
|
||||
if (clk->ctrlbit) {
|
||||
unsigned long clkcon = __raw_readl(S3C2410_CLKCON);
|
||||
|
||||
clk->usage = (clkcon & clk->ctrlbit) ? 1 : 0;
|
||||
}
|
||||
|
||||
/* add to the list of available clocks */
|
||||
|
||||
mutex_lock(&clocks_mutex);
|
||||
|
@ -402,6 +421,8 @@ int __init s3c24xx_setup_clocks(unsigned long xtal,
|
|||
* the LCD clock if it is not needed.
|
||||
*/
|
||||
|
||||
mutex_lock(&clocks_mutex);
|
||||
|
||||
s3c24xx_clk_enable(S3C2410_CLKCON_NAND, 0);
|
||||
s3c24xx_clk_enable(S3C2410_CLKCON_USBH, 0);
|
||||
s3c24xx_clk_enable(S3C2410_CLKCON_USBD, 0);
|
||||
|
@ -409,6 +430,8 @@ int __init s3c24xx_setup_clocks(unsigned long xtal,
|
|||
s3c24xx_clk_enable(S3C2410_CLKCON_IIC, 0);
|
||||
s3c24xx_clk_enable(S3C2410_CLKCON_SPI, 0);
|
||||
|
||||
mutex_unlock(&clocks_mutex);
|
||||
|
||||
/* assume uart clocks are correctly setup */
|
||||
|
||||
/* register our clocks */
|
||||
|
|
|
@ -16,6 +16,7 @@ struct clk {
|
|||
struct clk *parent;
|
||||
const char *name;
|
||||
int id;
|
||||
int usage;
|
||||
unsigned long rate;
|
||||
unsigned long ctrlbit;
|
||||
int (*enable)(struct clk *, int enable);
|
||||
|
|
|
@ -275,6 +275,11 @@ static struct resource s3c_adc_resource[] = {
|
|||
},
|
||||
[1] = {
|
||||
.start = IRQ_TC,
|
||||
.end = IRQ_TC,
|
||||
.flags = IORESOURCE_IRQ,
|
||||
},
|
||||
[2] = {
|
||||
.start = IRQ_ADC,
|
||||
.end = IRQ_ADC,
|
||||
.flags = IORESOURCE_IRQ,
|
||||
}
|
||||
|
|
|
@ -17,6 +17,7 @@
|
|||
#include <linux/init.h>
|
||||
|
||||
#include <asm/mach/map.h>
|
||||
#include <asm/tlb.h>
|
||||
#include <asm/io.h>
|
||||
#include <asm/cacheflush.h>
|
||||
|
||||
|
@ -95,6 +96,14 @@ void __init omap_map_sram(void)
|
|||
omap_sram_io_desc[0].pfn, omap_sram_io_desc[0].virtual,
|
||||
omap_sram_io_desc[0].length);
|
||||
|
||||
/*
|
||||
* Normally devicemaps_init() would flush caches and tlb after
|
||||
* mdesc->map_io(), but since we're called from map_io(), we
|
||||
* must do it here.
|
||||
*/
|
||||
local_flush_tlb_all();
|
||||
flush_cache_all();
|
||||
|
||||
/*
|
||||
* Looks like we need to preserve some bootloader code at the
|
||||
* beginning of SRAM for jumping to flash for reboot to work...
|
||||
|
|
|
@ -119,7 +119,7 @@ $(SRC_ARCH)/.links:
|
|||
@ln -sfn $(SRC_ARCH)/$(SARCH)/lib $(SRC_ARCH)/lib
|
||||
@ln -sfn $(SRC_ARCH)/$(SARCH) $(SRC_ARCH)/arch
|
||||
@ln -sfn $(SRC_ARCH)/$(SARCH)/vmlinux.lds.S $(SRC_ARCH)/kernel/vmlinux.lds.S
|
||||
@ln -sfn $(SRC_ARCH)/$(SARCH)/asm-offsets.c $(SRC_ARCH)/kernel/asm-offsets.c
|
||||
@ln -sfn $(SRC_ARCH)/$(SARCH)/kernel/asm-offsets.c $(SRC_ARCH)/kernel/asm-offsets.c
|
||||
@touch $@
|
||||
|
||||
# Create link to sub arch includes
|
||||
|
|
|
@ -202,18 +202,18 @@ long arch_ptrace(struct task_struct *child, long request, long addr, long data)
|
|||
int i;
|
||||
unsigned long tmp;
|
||||
|
||||
ret = 0;
|
||||
for (i = 0; i <= PT_MAX; i++) {
|
||||
tmp = get_reg(child, i);
|
||||
|
||||
if (put_user(tmp, datap)) {
|
||||
ret = -EFAULT;
|
||||
goto out_tsk;
|
||||
break;
|
||||
}
|
||||
|
||||
data += sizeof(long);
|
||||
}
|
||||
|
||||
ret = 0;
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -222,10 +222,11 @@ long arch_ptrace(struct task_struct *child, long request, long addr, long data)
|
|||
int i;
|
||||
unsigned long tmp;
|
||||
|
||||
ret = 0;
|
||||
for (i = 0; i <= PT_MAX; i++) {
|
||||
if (get_user(tmp, datap)) {
|
||||
ret = -EFAULT;
|
||||
goto out_tsk;
|
||||
break;
|
||||
}
|
||||
|
||||
if (i == PT_DCCR) {
|
||||
|
@ -237,7 +238,6 @@ long arch_ptrace(struct task_struct *child, long request, long addr, long data)
|
|||
data += sizeof(long);
|
||||
}
|
||||
|
||||
ret = 0;
|
||||
break;
|
||||
}
|
||||
|
||||
|
|
|
@ -24,7 +24,6 @@
|
|||
/*
|
||||
* Setup options
|
||||
*/
|
||||
struct drive_info_struct { char dummy[32]; } drive_info;
|
||||
struct screen_info screen_info;
|
||||
|
||||
extern int root_mountflags;
|
||||
|
|
|
@ -77,7 +77,7 @@ void ack_bad_irq(unsigned int irq)
|
|||
* completely.
|
||||
* But only ack when the APIC is enabled -AK
|
||||
*/
|
||||
if (!cpu_has_apic)
|
||||
if (cpu_has_apic)
|
||||
ack_APIC_irq();
|
||||
}
|
||||
|
||||
|
|
|
@ -309,3 +309,4 @@ ENTRY(sys_call_table)
|
|||
.long sys_faccessat
|
||||
.long sys_pselect6
|
||||
.long sys_ppoll
|
||||
.long sys_unshare /* 310 */
|
||||
|
|
|
@ -194,7 +194,6 @@ config IA64_L1_CACHE_SHIFT
|
|||
default "7" if MCKINLEY
|
||||
default "6" if ITANIUM
|
||||
|
||||
# align cache-sensitive data to 64 bytes
|
||||
config IA64_CYCLONE
|
||||
bool "Cyclone (EXA) Time Source support"
|
||||
help
|
||||
|
@ -374,6 +373,9 @@ config IA64_PALINFO
|
|||
To use this option, you have to ensure that the "/proc file system
|
||||
support" (CONFIG_PROC_FS) is enabled, too.
|
||||
|
||||
config SGI_SN
|
||||
def_bool y if (IA64_SGI_SN2 || IA64_GENERIC)
|
||||
|
||||
source "drivers/firmware/Kconfig"
|
||||
|
||||
source "fs/Kconfig.binfmt"
|
||||
|
|
|
@ -25,16 +25,6 @@
|
|||
#include <asm/machvec.h>
|
||||
#include <asm/system.h>
|
||||
|
||||
/*
|
||||
* This is here so we can use the CMOS detection in ide-probe.c to
|
||||
* determine what drives are present. In theory, we don't need this
|
||||
* as the auto-detection could be done via ide-probe.c:do_probe() but
|
||||
* in practice that would be much slower, which is painful when
|
||||
* running in the simulator. Note that passing zeroes in DRIVE_INFO
|
||||
* is sufficient (the IDE driver will autodetect the drive geometry).
|
||||
*/
|
||||
char drive_info[4*16];
|
||||
|
||||
void __init
|
||||
dig_setup (char **cmdline_p)
|
||||
{
|
||||
|
|
|
@ -515,6 +515,7 @@ sys32_signal (int sig, unsigned int handler)
|
|||
|
||||
sigact_set_handler(&new_sa, handler, 0);
|
||||
new_sa.sa.sa_flags = SA_ONESHOT | SA_NOMASK;
|
||||
sigemptyset(&new_sa.sa.sa_mask);
|
||||
|
||||
ret = do_sigaction(sig, &new_sa, &old_sa);
|
||||
|
||||
|
|
|
@ -410,24 +410,16 @@ efi_init (void)
|
|||
efi_config_table_t *config_tables;
|
||||
efi_char16_t *c16;
|
||||
u64 efi_desc_size;
|
||||
char *cp, *end, vendor[100] = "unknown";
|
||||
char *cp, vendor[100] = "unknown";
|
||||
extern char saved_command_line[];
|
||||
int i;
|
||||
|
||||
/* it's too early to be able to use the standard kernel command line support... */
|
||||
for (cp = saved_command_line; *cp; ) {
|
||||
if (memcmp(cp, "mem=", 4) == 0) {
|
||||
cp += 4;
|
||||
mem_limit = memparse(cp, &end);
|
||||
if (end != cp)
|
||||
break;
|
||||
cp = end;
|
||||
mem_limit = memparse(cp + 4, &cp);
|
||||
} else if (memcmp(cp, "max_addr=", 9) == 0) {
|
||||
cp += 9;
|
||||
max_addr = GRANULEROUNDDOWN(memparse(cp, &end));
|
||||
if (end != cp)
|
||||
break;
|
||||
cp = end;
|
||||
max_addr = GRANULEROUNDDOWN(memparse(cp + 9, &cp));
|
||||
} else {
|
||||
while (*cp != ' ' && *cp)
|
||||
++cp;
|
||||
|
@ -458,7 +450,7 @@ efi_init (void)
|
|||
/* Show what we know for posterity */
|
||||
c16 = __va(efi.systab->fw_vendor);
|
||||
if (c16) {
|
||||
for (i = 0;i < (int) sizeof(vendor) && *c16; ++i)
|
||||
for (i = 0;i < (int) sizeof(vendor) - 1 && *c16; ++i)
|
||||
vendor[i] = *c16++;
|
||||
vendor[i] = '\0';
|
||||
}
|
||||
|
|
|
@ -1601,5 +1601,21 @@ sys_call_table:
|
|||
data8 sys_inotify_add_watch
|
||||
data8 sys_inotify_rm_watch
|
||||
data8 sys_migrate_pages // 1280
|
||||
data8 sys_openat
|
||||
data8 sys_mkdirat
|
||||
data8 sys_mknodat
|
||||
data8 sys_fchownat
|
||||
data8 sys_futimesat // 1285
|
||||
data8 sys_newfstatat
|
||||
data8 sys_unlinkat
|
||||
data8 sys_renameat
|
||||
data8 sys_linkat
|
||||
data8 sys_symlinkat // 1290
|
||||
data8 sys_readlinkat
|
||||
data8 sys_fchmodat
|
||||
data8 sys_faccessat
|
||||
data8 sys_ni_syscall // reserved for pselect
|
||||
data8 sys_ni_syscall // 1295 reserved for ppoll
|
||||
data8 sys_unshare
|
||||
|
||||
.org sys_call_table + 8*NR_syscalls // guard against failures to increase NR_syscalls
|
||||
|
|
|
@ -878,31 +878,8 @@ fsyscall_table:
|
|||
data8 0 // timer_delete
|
||||
data8 0 // clock_settime
|
||||
data8 fsys_clock_gettime // clock_gettime
|
||||
data8 0 // clock_getres // 1255
|
||||
data8 0 // clock_nanosleep
|
||||
data8 0 // fstatfs64
|
||||
data8 0 // statfs64
|
||||
data8 0
|
||||
data8 0 // 1260
|
||||
data8 0
|
||||
data8 0 // mq_open
|
||||
data8 0 // mq_unlink
|
||||
data8 0 // mq_timedsend
|
||||
data8 0 // mq_timedreceive // 1265
|
||||
data8 0 // mq_notify
|
||||
data8 0 // mq_getsetattr
|
||||
data8 0 // kexec_load
|
||||
data8 0
|
||||
data8 0 // 1270
|
||||
data8 0
|
||||
data8 0
|
||||
data8 0
|
||||
data8 0
|
||||
data8 0 // 1275
|
||||
data8 0
|
||||
data8 0
|
||||
data8 0
|
||||
data8 0
|
||||
data8 0 // 1280
|
||||
#define __NR_syscall_last 1255
|
||||
|
||||
.space 8*(NR_syscalls + 1024 - __NR_syscall_last), 0
|
||||
|
||||
.org fsyscall_table + 8*NR_syscalls // guard against failures to increase NR_syscalls
|
||||
|
|
|
@ -352,6 +352,7 @@ start_ap:
|
|||
mov ar.rsc=0 // place RSE in enforced lazy mode
|
||||
;;
|
||||
loadrs // clear the dirty partition
|
||||
mov IA64_KR(PER_CPU_DATA)=r0 // clear physical per-CPU base
|
||||
;;
|
||||
mov ar.bspstore=r2 // establish the new RSE stack
|
||||
;;
|
||||
|
|
|
@ -437,6 +437,9 @@ recover_from_read_error(slidx_table_t *slidx,
|
|||
* the process not have any locks of kernel.
|
||||
*/
|
||||
|
||||
/* Is minstate valid? */
|
||||
if (!peidx_bottom(peidx) || !(peidx_bottom(peidx)->valid.minstate))
|
||||
return 0;
|
||||
psr1 =(struct ia64_psr *)&(peidx_minstate_area(peidx)->pmsa_ipsr);
|
||||
|
||||
/*
|
||||
|
|
|
@ -14,6 +14,7 @@
|
|||
#include <linux/spinlock.h>
|
||||
#include <linux/string.h>
|
||||
|
||||
#include <asm/delay.h>
|
||||
#include <asm/page.h>
|
||||
#include <asm/sal.h>
|
||||
#include <asm/pal.h>
|
||||
|
@ -214,6 +215,78 @@ chk_nointroute_opt(void)
|
|||
static void __init sal_desc_ap_wakeup(void *p) { }
|
||||
#endif
|
||||
|
||||
/*
|
||||
* HP rx5670 firmware polls for interrupts during SAL_CACHE_FLUSH by reading
|
||||
* cr.ivr, but it never writes cr.eoi. This leaves any interrupt marked as
|
||||
* "in-service" and masks other interrupts of equal or lower priority.
|
||||
*
|
||||
* HP internal defect reports: F1859, F2775, F3031.
|
||||
*/
|
||||
static int sal_cache_flush_drops_interrupts;
|
||||
|
||||
static void __init
|
||||
check_sal_cache_flush (void)
|
||||
{
|
||||
unsigned long flags, itv;
|
||||
int cpu;
|
||||
u64 vector;
|
||||
|
||||
cpu = get_cpu();
|
||||
local_irq_save(flags);
|
||||
|
||||
/*
|
||||
* Schedule a timer interrupt, wait until it's reported, and see if
|
||||
* SAL_CACHE_FLUSH drops it.
|
||||
*/
|
||||
itv = ia64_get_itv();
|
||||
BUG_ON((itv & (1 << 16)) == 0);
|
||||
|
||||
ia64_set_itv(IA64_TIMER_VECTOR);
|
||||
ia64_set_itm(ia64_get_itc() + 1000);
|
||||
|
||||
while (!ia64_get_irr(IA64_TIMER_VECTOR))
|
||||
cpu_relax();
|
||||
|
||||
ia64_sal_cache_flush(3);
|
||||
|
||||
if (ia64_get_irr(IA64_TIMER_VECTOR)) {
|
||||
vector = ia64_get_ivr();
|
||||
ia64_eoi();
|
||||
WARN_ON(vector != IA64_TIMER_VECTOR);
|
||||
} else {
|
||||
sal_cache_flush_drops_interrupts = 1;
|
||||
printk(KERN_ERR "SAL: SAL_CACHE_FLUSH drops interrupts; "
|
||||
"PAL_CACHE_FLUSH will be used instead\n");
|
||||
ia64_eoi();
|
||||
}
|
||||
|
||||
ia64_set_itv(itv);
|
||||
local_irq_restore(flags);
|
||||
put_cpu();
|
||||
}
|
||||
|
||||
s64
|
||||
ia64_sal_cache_flush (u64 cache_type)
|
||||
{
|
||||
struct ia64_sal_retval isrv;
|
||||
|
||||
if (sal_cache_flush_drops_interrupts) {
|
||||
unsigned long flags;
|
||||
u64 progress;
|
||||
s64 rc;
|
||||
|
||||
progress = 0;
|
||||
local_irq_save(flags);
|
||||
rc = ia64_pal_cache_flush(cache_type,
|
||||
PAL_CACHE_FLUSH_INVALIDATE, &progress, NULL);
|
||||
local_irq_restore(flags);
|
||||
return rc;
|
||||
}
|
||||
|
||||
SAL_CALL(isrv, SAL_CACHE_FLUSH, cache_type, 0, 0, 0, 0, 0, 0);
|
||||
return isrv.status;
|
||||
}
|
||||
|
||||
void __init
|
||||
ia64_sal_init (struct ia64_sal_systab *systab)
|
||||
{
|
||||
|
@ -262,6 +335,8 @@ ia64_sal_init (struct ia64_sal_systab *systab)
|
|||
}
|
||||
p += SAL_DESC_SIZE(*p);
|
||||
}
|
||||
|
||||
check_sal_cache_flush();
|
||||
}
|
||||
|
||||
int
|
||||
|
|
|
@ -71,6 +71,8 @@ unsigned long __per_cpu_offset[NR_CPUS];
|
|||
EXPORT_SYMBOL(__per_cpu_offset);
|
||||
#endif
|
||||
|
||||
extern void ia64_setup_printk_clock(void);
|
||||
|
||||
DEFINE_PER_CPU(struct cpuinfo_ia64, cpu_info);
|
||||
DEFINE_PER_CPU(unsigned long, local_per_cpu_offset);
|
||||
DEFINE_PER_CPU(unsigned long, ia64_phys_stacked_size_p8);
|
||||
|
@ -445,6 +447,8 @@ setup_arch (char **cmdline_p)
|
|||
/* process SAL system table: */
|
||||
ia64_sal_init(efi.sal_systab);
|
||||
|
||||
ia64_setup_printk_clock();
|
||||
|
||||
#ifdef CONFIG_SMP
|
||||
cpu_physical_id(0) = hard_smp_processor_id();
|
||||
|
||||
|
|
|
@ -278,3 +278,30 @@ udelay (unsigned long usecs)
|
|||
}
|
||||
}
|
||||
EXPORT_SYMBOL(udelay);
|
||||
|
||||
static unsigned long long ia64_itc_printk_clock(void)
|
||||
{
|
||||
if (ia64_get_kr(IA64_KR_PER_CPU_DATA))
|
||||
return sched_clock();
|
||||
return 0;
|
||||
}
|
||||
|
||||
static unsigned long long ia64_default_printk_clock(void)
|
||||
{
|
||||
return (unsigned long long)(jiffies_64 - INITIAL_JIFFIES) *
|
||||
(1000000000/HZ);
|
||||
}
|
||||
|
||||
unsigned long long (*ia64_printk_clock)(void) = &ia64_default_printk_clock;
|
||||
|
||||
unsigned long long printk_clock(void)
|
||||
{
|
||||
return ia64_printk_clock();
|
||||
}
|
||||
|
||||
void __init
|
||||
ia64_setup_printk_clock(void)
|
||||
{
|
||||
if (!(sal_platform_features & IA64_SAL_PLATFORM_FEATURE_ITC_DRIFT))
|
||||
ia64_printk_clock = ia64_itc_printk_clock;
|
||||
}
|
||||
|
|
|
@ -9,6 +9,4 @@
|
|||
# Makefile for the sn ia64 subplatform
|
||||
#
|
||||
|
||||
CPPFLAGS += -I$(srctree)/arch/ia64/sn/include
|
||||
|
||||
obj-y += kernel/ pci/
|
||||
|
|
|
@ -7,6 +7,8 @@
|
|||
# Copyright (C) 1999,2001-2005 Silicon Graphics, Inc. All Rights Reserved.
|
||||
#
|
||||
|
||||
CPPFLAGS += -I$(srctree)/arch/ia64/sn/include
|
||||
|
||||
obj-y += setup.o bte.o bte_error.o irq.o mca.o idle.o \
|
||||
huberror.o io_init.o iomv.o klconflib.o sn2/
|
||||
obj-$(CONFIG_IA64_GENERIC) += machvec.o
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
* License. See the file "COPYING" in the main directory of this archive
|
||||
* for more details.
|
||||
*
|
||||
* Copyright (c) 2000-2005 Silicon Graphics, Inc. All Rights Reserved.
|
||||
* Copyright (c) 2000-2006 Silicon Graphics, Inc. All Rights Reserved.
|
||||
*/
|
||||
|
||||
#include <linux/config.h>
|
||||
|
@ -186,18 +186,13 @@ retry_bteop:
|
|||
|
||||
/* Initialize the notification to a known value. */
|
||||
*bte->most_rcnt_na = BTE_WORD_BUSY;
|
||||
notif_phys_addr = TO_PHYS(ia64_tpa((unsigned long)bte->most_rcnt_na));
|
||||
notif_phys_addr = (u64)bte->most_rcnt_na;
|
||||
|
||||
if (is_shub2()) {
|
||||
src = SH2_TIO_PHYS_TO_DMA(src);
|
||||
dest = SH2_TIO_PHYS_TO_DMA(dest);
|
||||
notif_phys_addr = SH2_TIO_PHYS_TO_DMA(notif_phys_addr);
|
||||
}
|
||||
/* Set the source and destination registers */
|
||||
BTE_PRINTKV(("IBSA = 0x%lx)\n", (TO_PHYS(src))));
|
||||
BTE_SRC_STORE(bte, TO_PHYS(src));
|
||||
BTE_PRINTKV(("IBDA = 0x%lx)\n", (TO_PHYS(dest))));
|
||||
BTE_DEST_STORE(bte, TO_PHYS(dest));
|
||||
BTE_PRINTKV(("IBSA = 0x%lx)\n", src));
|
||||
BTE_SRC_STORE(bte, src);
|
||||
BTE_PRINTKV(("IBDA = 0x%lx)\n", dest));
|
||||
BTE_DEST_STORE(bte, dest);
|
||||
|
||||
/* Set the notification register */
|
||||
BTE_PRINTKV(("IBNA = 0x%lx)\n", notif_phys_addr));
|
||||
|
|
|
@ -208,7 +208,7 @@ static s64 sn_device_fixup_war(u64 nasid, u64 widget, int device,
|
|||
* sn_fixup_ionodes() - This routine initializes the HUB data strcuture for
|
||||
* each node in the system.
|
||||
*/
|
||||
static void sn_fixup_ionodes(void)
|
||||
static void __init sn_fixup_ionodes(void)
|
||||
{
|
||||
struct sn_flush_device_kernel *sn_flush_device_kernel;
|
||||
struct sn_flush_device_kernel *dev_entry;
|
||||
|
@ -467,6 +467,13 @@ void sn_pci_fixup_slot(struct pci_dev *dev)
|
|||
pcidev_info->pdi_sn_irq_info = NULL;
|
||||
kfree(sn_irq_info);
|
||||
}
|
||||
|
||||
/*
|
||||
* MSI currently not supported on altix. Remove this when
|
||||
* the MSI abstraction patches are integrated into the kernel
|
||||
* (sometime after 2.6.16 releases)
|
||||
*/
|
||||
dev->no_msi = 1;
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -610,15 +617,15 @@ void sn_bus_store_sysdata(struct pci_dev *dev)
|
|||
void sn_bus_free_sysdata(void)
|
||||
{
|
||||
struct sysdata_el *element;
|
||||
struct list_head *list;
|
||||
struct list_head *list, *safe;
|
||||
|
||||
sn_sysdata_free_start:
|
||||
list_for_each(list, &sn_sysdata_list) {
|
||||
list_for_each_safe(list, safe, &sn_sysdata_list) {
|
||||
element = list_entry(list, struct sysdata_el, entry);
|
||||
list_del(&element->entry);
|
||||
list_del(&(((struct pcidev_info *)
|
||||
(element->sysdata))->pdi_list));
|
||||
kfree(element->sysdata);
|
||||
kfree(element);
|
||||
goto sn_sysdata_free_start;
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
|
|
@ -5,11 +5,12 @@
|
|||
* License. See the file "COPYING" in the main directory of this archive
|
||||
* for more details.
|
||||
*
|
||||
* Copyright (c) 2000-2005 Silicon Graphics, Inc. All Rights Reserved.
|
||||
* Copyright (c) 2000-2006 Silicon Graphics, Inc. All Rights Reserved.
|
||||
*/
|
||||
|
||||
#include <linux/irq.h>
|
||||
#include <linux/spinlock.h>
|
||||
#include <linux/init.h>
|
||||
#include <asm/sn/addrs.h>
|
||||
#include <asm/sn/arch.h>
|
||||
#include <asm/sn/intr.h>
|
||||
|
@ -76,17 +77,15 @@ static void sn_enable_irq(unsigned int irq)
|
|||
|
||||
static void sn_ack_irq(unsigned int irq)
|
||||
{
|
||||
u64 event_occurred, mask = 0;
|
||||
u64 event_occurred, mask;
|
||||
|
||||
irq = irq & 0xff;
|
||||
event_occurred =
|
||||
HUB_L((u64*)LOCAL_MMR_ADDR(SH_EVENT_OCCURRED));
|
||||
event_occurred = HUB_L((u64*)LOCAL_MMR_ADDR(SH_EVENT_OCCURRED));
|
||||
mask = event_occurred & SH_ALL_INT_MASK;
|
||||
HUB_S((u64*)LOCAL_MMR_ADDR(SH_EVENT_OCCURRED_ALIAS),
|
||||
mask);
|
||||
HUB_S((u64*)LOCAL_MMR_ADDR(SH_EVENT_OCCURRED_ALIAS), mask);
|
||||
__set_bit(irq, (volatile void *)pda->sn_in_service_ivecs);
|
||||
|
||||
move_irq(irq);
|
||||
move_native_irq(irq);
|
||||
}
|
||||
|
||||
static void sn_end_irq(unsigned int irq)
|
||||
|
@ -219,10 +218,9 @@ static void register_intr_pda(struct sn_irq_info *sn_irq_info)
|
|||
pdacpu(cpu)->sn_last_irq = irq;
|
||||
}
|
||||
|
||||
if (pdacpu(cpu)->sn_first_irq == 0 || pdacpu(cpu)->sn_first_irq > irq) {
|
||||
if (pdacpu(cpu)->sn_first_irq == 0 || pdacpu(cpu)->sn_first_irq > irq)
|
||||
pdacpu(cpu)->sn_first_irq = irq;
|
||||
}
|
||||
}
|
||||
|
||||
static void unregister_intr_pda(struct sn_irq_info *sn_irq_info)
|
||||
{
|
||||
|
@ -289,7 +287,7 @@ void sn_irq_fixup(struct pci_dev *pci_dev, struct sn_irq_info *sn_irq_info)
|
|||
list_add_rcu(&sn_irq_info->list, sn_irq_lh[sn_irq_info->irq_irq]);
|
||||
spin_unlock(&sn_irq_info_lock);
|
||||
|
||||
(void)register_intr_pda(sn_irq_info);
|
||||
register_intr_pda(sn_irq_info);
|
||||
}
|
||||
|
||||
void sn_irq_unfixup(struct pci_dev *pci_dev)
|
||||
|
@ -301,7 +299,9 @@ void sn_irq_unfixup(struct pci_dev *pci_dev)
|
|||
return;
|
||||
|
||||
sn_irq_info = SN_PCIDEV_INFO(pci_dev)->pdi_sn_irq_info;
|
||||
if (!sn_irq_info || !sn_irq_info->irq_irq) {
|
||||
if (!sn_irq_info)
|
||||
return;
|
||||
if (!sn_irq_info->irq_irq) {
|
||||
kfree(sn_irq_info);
|
||||
return;
|
||||
}
|
||||
|
@ -419,7 +419,7 @@ void sn_lb_int_war_check(void)
|
|||
rcu_read_unlock();
|
||||
}
|
||||
|
||||
void sn_irq_lh_init(void)
|
||||
void __init sn_irq_lh_init(void)
|
||||
{
|
||||
int i;
|
||||
|
||||
|
@ -434,5 +434,4 @@ void sn_irq_lh_init(void)
|
|||
|
||||
INIT_LIST_HEAD(sn_irq_lh[i]);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -104,5 +104,4 @@ format_module_id(char *buffer, moduleid_t m, int fmt)
|
|||
if (position < 10)
|
||||
*buffer++ = '0';
|
||||
sprintf(buffer, "%d", position);
|
||||
|
||||
}
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
* License. See the file "COPYING" in the main directory of this archive
|
||||
* for more details.
|
||||
*
|
||||
* Copyright (c) 2000-2004 Silicon Graphics, Inc. All Rights Reserved.
|
||||
* Copyright (c) 2000-2006 Silicon Graphics, Inc. All Rights Reserved.
|
||||
*/
|
||||
|
||||
#include <linux/types.h>
|
||||
|
@ -137,6 +137,7 @@ int sn_salinfo_platform_oemdata(const u8 *sect_header, u8 **oemdata, u64 *oemdat
|
|||
|
||||
static int __init sn_salinfo_init(void)
|
||||
{
|
||||
if (ia64_platform_is("sn2"))
|
||||
salinfo_platform_oemdata = &sn_salinfo_platform_oemdata;
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -67,6 +67,7 @@ extern unsigned long last_time_offset;
|
|||
extern void (*ia64_mark_idle) (int);
|
||||
extern void snidle(int);
|
||||
extern unsigned char acpi_kbd_controller_present;
|
||||
extern unsigned long long (*ia64_printk_clock)(void);
|
||||
|
||||
unsigned long sn_rtc_cycles_per_second;
|
||||
EXPORT_SYMBOL(sn_rtc_cycles_per_second);
|
||||
|
@ -124,20 +125,6 @@ struct screen_info sn_screen_info = {
|
|||
.orig_video_points = 16
|
||||
};
|
||||
|
||||
/*
|
||||
* This is here so we can use the CMOS detection in ide-probe.c to
|
||||
* determine what drives are present. In theory, we don't need this
|
||||
* as the auto-detection could be done via ide-probe.c:do_probe() but
|
||||
* in practice that would be much slower, which is painful when
|
||||
* running in the simulator. Note that passing zeroes in DRIVE_INFO
|
||||
* is sufficient (the IDE driver will autodetect the drive geometry).
|
||||
*/
|
||||
#ifdef CONFIG_IA64_GENERIC
|
||||
extern char drive_info[4 * 16];
|
||||
#else
|
||||
char drive_info[4 * 16];
|
||||
#endif
|
||||
|
||||
/*
|
||||
* This routine can only be used during init, since
|
||||
* smp_boot_data is an init data structure.
|
||||
|
@ -209,7 +196,7 @@ void __init early_sn_setup(void)
|
|||
}
|
||||
|
||||
extern int platform_intr_list[];
|
||||
static int __initdata shub_1_1_found = 0;
|
||||
static int __initdata shub_1_1_found;
|
||||
|
||||
/*
|
||||
* sn_check_for_wars
|
||||
|
@ -372,6 +359,16 @@ sn_scan_pcdp(void)
|
|||
}
|
||||
}
|
||||
|
||||
static unsigned long sn2_rtc_initial;
|
||||
|
||||
static unsigned long long ia64_sn2_printk_clock(void)
|
||||
{
|
||||
unsigned long rtc_now = rtc_time();
|
||||
|
||||
return (rtc_now - sn2_rtc_initial) *
|
||||
(1000000000 / sn_rtc_cycles_per_second);
|
||||
}
|
||||
|
||||
/**
|
||||
* sn_setup - SN platform setup routine
|
||||
* @cmdline_p: kernel command line
|
||||
|
@ -386,6 +383,7 @@ void __init sn_setup(char **cmdline_p)
|
|||
u32 version = sn_sal_rev();
|
||||
extern void sn_cpu_init(void);
|
||||
|
||||
sn2_rtc_initial = rtc_time();
|
||||
ia64_sn_plat_set_error_handling_features(); // obsolete
|
||||
ia64_sn_set_os_feature(OSF_MCA_SLV_TO_OS_INIT_SLV);
|
||||
ia64_sn_set_os_feature(OSF_FEAT_LOG_SBES);
|
||||
|
@ -437,19 +435,6 @@ void __init sn_setup(char **cmdline_p)
|
|||
*/
|
||||
build_cnode_tables();
|
||||
|
||||
/*
|
||||
* Old PROMs do not provide an ACPI FADT. Disable legacy keyboard
|
||||
* support here so we don't have to listen to failed keyboard probe
|
||||
* messages.
|
||||
*/
|
||||
if (version <= 0x0209 && acpi_kbd_controller_present) {
|
||||
printk(KERN_INFO "Disabling legacy keyboard support as prom "
|
||||
"is too old and doesn't provide FADT\n");
|
||||
acpi_kbd_controller_present = 0;
|
||||
}
|
||||
|
||||
printk("SGI SAL version %x.%02x\n", version >> 8, version & 0x00FF);
|
||||
|
||||
status =
|
||||
ia64_sal_freq_base(SAL_FREQ_BASE_REALTIME_CLOCK, &ticks_per_sec,
|
||||
&drift);
|
||||
|
@ -463,6 +448,21 @@ void __init sn_setup(char **cmdline_p)
|
|||
|
||||
platform_intr_list[ACPI_INTERRUPT_CPEI] = IA64_CPE_VECTOR;
|
||||
|
||||
ia64_printk_clock = ia64_sn2_printk_clock;
|
||||
|
||||
/*
|
||||
* Old PROMs do not provide an ACPI FADT. Disable legacy keyboard
|
||||
* support here so we don't have to listen to failed keyboard probe
|
||||
* messages.
|
||||
*/
|
||||
if (version <= 0x0209 && acpi_kbd_controller_present) {
|
||||
printk(KERN_INFO "Disabling legacy keyboard support as prom "
|
||||
"is too old and doesn't provide FADT\n");
|
||||
acpi_kbd_controller_present = 0;
|
||||
}
|
||||
|
||||
printk("SGI SAL version %x.%02x\n", version >> 8, version & 0x00FF);
|
||||
|
||||
/*
|
||||
* we set the default root device to /dev/hda
|
||||
* to make simulation easy
|
||||
|
@ -578,13 +578,17 @@ void __init sn_cpu_init(void)
|
|||
sn_prom_type = 2;
|
||||
else
|
||||
sn_prom_type = 1;
|
||||
printk("Running on medusa with %s PROM\n", (sn_prom_type == 1) ? "real" : "fake");
|
||||
printk(KERN_INFO "Running on medusa with %s PROM\n",
|
||||
(sn_prom_type == 1) ? "real" : "fake");
|
||||
}
|
||||
|
||||
memset(pda, 0, sizeof(pda));
|
||||
if (ia64_sn_get_sn_info(0, &sn_hub_info->shub2, &sn_hub_info->nasid_bitmask, &sn_hub_info->nasid_shift,
|
||||
&sn_system_size, &sn_sharing_domain_size, &sn_partition_id,
|
||||
&sn_coherency_id, &sn_region_size))
|
||||
if (ia64_sn_get_sn_info(0, &sn_hub_info->shub2,
|
||||
&sn_hub_info->nasid_bitmask,
|
||||
&sn_hub_info->nasid_shift,
|
||||
&sn_system_size, &sn_sharing_domain_size,
|
||||
&sn_partition_id, &sn_coherency_id,
|
||||
&sn_region_size))
|
||||
BUG();
|
||||
sn_hub_info->as_shift = sn_hub_info->nasid_shift - 2;
|
||||
|
||||
|
@ -716,7 +720,8 @@ void __init build_cnode_tables(void)
|
|||
for_each_online_node(node) {
|
||||
kl_config_hdr_t *klgraph_header;
|
||||
nasid = cnodeid_to_nasid(node);
|
||||
if ((klgraph_header = ia64_sn_get_klconfig_addr(nasid)) == NULL)
|
||||
klgraph_header = ia64_sn_get_klconfig_addr(nasid);
|
||||
if (klgraph_header == NULL)
|
||||
BUG();
|
||||
brd = NODE_OFFSET_TO_LBOARD(nasid, klgraph_header->ch_board_info);
|
||||
while (brd) {
|
||||
|
|
|
@ -9,5 +9,7 @@
|
|||
# sn2 specific kernel files
|
||||
#
|
||||
|
||||
CPPFLAGS += -I$(srctree)/arch/ia64/sn/include
|
||||
|
||||
obj-y += cache.o io.o ptc_deadlock.o sn2_smp.o sn_proc_fs.o \
|
||||
prominfo_proc.o timer.o timer_interrupt.o sn_hwperf.o
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
* License. See the file "COPYING" in the main directory of this archive
|
||||
* for more details.
|
||||
*
|
||||
* Copyright (C) 2000-2005 Silicon Graphics, Inc. All rights reserved.
|
||||
* Copyright (C) 2000-2006 Silicon Graphics, Inc. All rights reserved.
|
||||
*/
|
||||
|
||||
#include <linux/init.h>
|
||||
|
@ -46,104 +46,28 @@ DECLARE_PER_CPU(struct ptc_stats, ptcstats);
|
|||
|
||||
static __cacheline_aligned DEFINE_SPINLOCK(sn2_global_ptc_lock);
|
||||
|
||||
void sn2_ptc_deadlock_recovery(short *, short, int, volatile unsigned long *, unsigned long data0,
|
||||
volatile unsigned long *, unsigned long data1);
|
||||
void sn2_ptc_deadlock_recovery(short *, short, short, int, volatile unsigned long *, unsigned long,
|
||||
volatile unsigned long *, unsigned long);
|
||||
|
||||
#ifdef DEBUG_PTC
|
||||
/*
|
||||
* ptctest:
|
||||
*
|
||||
* xyz - 3 digit hex number:
|
||||
* x - Force PTC purges to use shub:
|
||||
* 0 - no force
|
||||
* 1 - force
|
||||
* y - interupt enable
|
||||
* 0 - disable interrupts
|
||||
* 1 - leave interuupts enabled
|
||||
* z - type of lock:
|
||||
* 0 - global lock
|
||||
* 1 - node local lock
|
||||
* 2 - no lock
|
||||
*
|
||||
* Note: on shub1, only ptctest == 0 is supported. Don't try other values!
|
||||
* Note: some is the following is captured here to make degugging easier
|
||||
* (the macros make more sense if you see the debug patch - not posted)
|
||||
*/
|
||||
|
||||
static unsigned int sn2_ptctest = 0;
|
||||
|
||||
static int __init ptc_test(char *str)
|
||||
{
|
||||
get_option(&str, &sn2_ptctest);
|
||||
return 1;
|
||||
}
|
||||
__setup("ptctest=", ptc_test);
|
||||
|
||||
static inline int ptc_lock(unsigned long *flagp)
|
||||
{
|
||||
unsigned long opt = sn2_ptctest & 255;
|
||||
|
||||
switch (opt) {
|
||||
case 0x00:
|
||||
spin_lock_irqsave(&sn2_global_ptc_lock, *flagp);
|
||||
break;
|
||||
case 0x01:
|
||||
spin_lock_irqsave(&sn_nodepda->ptc_lock, *flagp);
|
||||
break;
|
||||
case 0x02:
|
||||
local_irq_save(*flagp);
|
||||
break;
|
||||
case 0x10:
|
||||
spin_lock(&sn2_global_ptc_lock);
|
||||
break;
|
||||
case 0x11:
|
||||
spin_lock(&sn_nodepda->ptc_lock);
|
||||
break;
|
||||
case 0x12:
|
||||
break;
|
||||
default:
|
||||
BUG();
|
||||
}
|
||||
return opt;
|
||||
}
|
||||
|
||||
static inline void ptc_unlock(unsigned long flags, int opt)
|
||||
{
|
||||
switch (opt) {
|
||||
case 0x00:
|
||||
spin_unlock_irqrestore(&sn2_global_ptc_lock, flags);
|
||||
break;
|
||||
case 0x01:
|
||||
spin_unlock_irqrestore(&sn_nodepda->ptc_lock, flags);
|
||||
break;
|
||||
case 0x02:
|
||||
local_irq_restore(flags);
|
||||
break;
|
||||
case 0x10:
|
||||
spin_unlock(&sn2_global_ptc_lock);
|
||||
break;
|
||||
case 0x11:
|
||||
spin_unlock(&sn_nodepda->ptc_lock);
|
||||
break;
|
||||
case 0x12:
|
||||
break;
|
||||
default:
|
||||
BUG();
|
||||
}
|
||||
}
|
||||
#else
|
||||
|
||||
#define sn2_ptctest 0
|
||||
#define local_node_uses_ptc_ga(sh1) ((sh1) ? 1 : 0)
|
||||
#define max_active_pio(sh1) ((sh1) ? 32 : 7)
|
||||
#define reset_max_active_on_deadlock() 1
|
||||
#define PTC_LOCK(sh1) ((sh1) ? &sn2_global_ptc_lock : &sn_nodepda->ptc_lock)
|
||||
|
||||
static inline int ptc_lock(unsigned long *flagp)
|
||||
static inline void ptc_lock(int sh1, unsigned long *flagp)
|
||||
{
|
||||
spin_lock_irqsave(&sn2_global_ptc_lock, *flagp);
|
||||
return 0;
|
||||
spin_lock_irqsave(PTC_LOCK(sh1), *flagp);
|
||||
}
|
||||
|
||||
static inline void ptc_unlock(unsigned long flags, int opt)
|
||||
static inline void ptc_unlock(int sh1, unsigned long flags)
|
||||
{
|
||||
spin_unlock_irqrestore(&sn2_global_ptc_lock, flags);
|
||||
spin_unlock_irqrestore(PTC_LOCK(sh1), flags);
|
||||
}
|
||||
#endif
|
||||
|
||||
struct ptc_stats {
|
||||
unsigned long ptc_l;
|
||||
|
@ -151,27 +75,30 @@ struct ptc_stats {
|
|||
unsigned long shub_ptc_flushes;
|
||||
unsigned long nodes_flushed;
|
||||
unsigned long deadlocks;
|
||||
unsigned long deadlocks2;
|
||||
unsigned long lock_itc_clocks;
|
||||
unsigned long shub_itc_clocks;
|
||||
unsigned long shub_itc_clocks_max;
|
||||
unsigned long shub_ptc_flushes_not_my_mm;
|
||||
};
|
||||
|
||||
static inline unsigned long wait_piowc(void)
|
||||
{
|
||||
volatile unsigned long *piows, zeroval;
|
||||
unsigned long ws;
|
||||
volatile unsigned long *piows;
|
||||
unsigned long zeroval, ws;
|
||||
|
||||
piows = pda->pio_write_status_addr;
|
||||
zeroval = pda->pio_write_status_val;
|
||||
do {
|
||||
cpu_relax();
|
||||
} while (((ws = *piows) & SH_PIO_WRITE_STATUS_PENDING_WRITE_COUNT_MASK) != zeroval);
|
||||
return ws;
|
||||
return (ws & SH_PIO_WRITE_STATUS_WRITE_DEADLOCK_MASK) != 0;
|
||||
}
|
||||
|
||||
void sn_tlb_migrate_finish(struct mm_struct *mm)
|
||||
{
|
||||
if (mm == current->mm)
|
||||
/* flush_tlb_mm is inefficient if more than 1 users of mm */
|
||||
if (mm == current->mm && mm && atomic_read(&mm->mm_users) == 1)
|
||||
flush_tlb_mm(mm);
|
||||
}
|
||||
|
||||
|
@ -201,12 +128,14 @@ void
|
|||
sn2_global_tlb_purge(struct mm_struct *mm, unsigned long start,
|
||||
unsigned long end, unsigned long nbits)
|
||||
{
|
||||
int i, opt, shub1, cnode, mynasid, cpu, lcpu = 0, nasid, flushed = 0;
|
||||
int mymm = (mm == current->active_mm && current->mm);
|
||||
int i, ibegin, shub1, cnode, mynasid, cpu, lcpu = 0, nasid;
|
||||
int mymm = (mm == current->active_mm && mm == current->mm);
|
||||
int use_cpu_ptcga;
|
||||
volatile unsigned long *ptc0, *ptc1;
|
||||
unsigned long itc, itc2, flags, data0 = 0, data1 = 0, rr_value;
|
||||
unsigned long itc, itc2, flags, data0 = 0, data1 = 0, rr_value, old_rr = 0;
|
||||
short nasids[MAX_NUMNODES], nix;
|
||||
nodemask_t nodes_flushed;
|
||||
int active, max_active, deadlock;
|
||||
|
||||
nodes_clear(nodes_flushed);
|
||||
i = 0;
|
||||
|
@ -267,41 +196,56 @@ sn2_global_tlb_purge(struct mm_struct *mm, unsigned long start,
|
|||
|
||||
|
||||
mynasid = get_nasid();
|
||||
use_cpu_ptcga = local_node_uses_ptc_ga(shub1);
|
||||
max_active = max_active_pio(shub1);
|
||||
|
||||
itc = ia64_get_itc();
|
||||
opt = ptc_lock(&flags);
|
||||
ptc_lock(shub1, &flags);
|
||||
itc2 = ia64_get_itc();
|
||||
|
||||
__get_cpu_var(ptcstats).lock_itc_clocks += itc2 - itc;
|
||||
__get_cpu_var(ptcstats).shub_ptc_flushes++;
|
||||
__get_cpu_var(ptcstats).nodes_flushed += nix;
|
||||
if (!mymm)
|
||||
__get_cpu_var(ptcstats).shub_ptc_flushes_not_my_mm++;
|
||||
|
||||
if (use_cpu_ptcga && !mymm) {
|
||||
old_rr = ia64_get_rr(start);
|
||||
ia64_set_rr(start, (old_rr & 0xff) | (rr_value << 8));
|
||||
ia64_srlz_d();
|
||||
}
|
||||
|
||||
wait_piowc();
|
||||
do {
|
||||
if (shub1)
|
||||
data1 = start | (1UL << SH1_PTC_1_START_SHFT);
|
||||
else
|
||||
data0 = (data0 & ~SH2_PTC_ADDR_MASK) | (start & SH2_PTC_ADDR_MASK);
|
||||
for (i = 0; i < nix; i++) {
|
||||
deadlock = 0;
|
||||
active = 0;
|
||||
for (ibegin = 0, i = 0; i < nix; i++) {
|
||||
nasid = nasids[i];
|
||||
if ((!(sn2_ptctest & 3)) && unlikely(nasid == mynasid && mymm)) {
|
||||
if (use_cpu_ptcga && unlikely(nasid == mynasid)) {
|
||||
ia64_ptcga(start, nbits << 2);
|
||||
ia64_srlz_i();
|
||||
} else {
|
||||
ptc0 = CHANGE_NASID(nasid, ptc0);
|
||||
if (ptc1)
|
||||
ptc1 = CHANGE_NASID(nasid, ptc1);
|
||||
pio_atomic_phys_write_mmrs(ptc0, data0, ptc1,
|
||||
data1);
|
||||
flushed = 1;
|
||||
pio_atomic_phys_write_mmrs(ptc0, data0, ptc1, data1);
|
||||
active++;
|
||||
}
|
||||
if (active >= max_active || i == (nix - 1)) {
|
||||
if ((deadlock = wait_piowc())) {
|
||||
sn2_ptc_deadlock_recovery(nasids, ibegin, i, mynasid, ptc0, data0, ptc1, data1);
|
||||
if (reset_max_active_on_deadlock())
|
||||
max_active = 1;
|
||||
}
|
||||
active = 0;
|
||||
ibegin = i + 1;
|
||||
}
|
||||
}
|
||||
if (flushed
|
||||
&& (wait_piowc() &
|
||||
(SH_PIO_WRITE_STATUS_WRITE_DEADLOCK_MASK))) {
|
||||
sn2_ptc_deadlock_recovery(nasids, nix, mynasid, ptc0, data0, ptc1, data1);
|
||||
}
|
||||
|
||||
start += (1UL << nbits);
|
||||
|
||||
} while (start < end);
|
||||
|
||||
itc2 = ia64_get_itc() - itc2;
|
||||
|
@ -309,7 +253,12 @@ sn2_global_tlb_purge(struct mm_struct *mm, unsigned long start,
|
|||
if (itc2 > __get_cpu_var(ptcstats).shub_itc_clocks_max)
|
||||
__get_cpu_var(ptcstats).shub_itc_clocks_max = itc2;
|
||||
|
||||
ptc_unlock(flags, opt);
|
||||
if (old_rr) {
|
||||
ia64_set_rr(start, old_rr);
|
||||
ia64_srlz_d();
|
||||
}
|
||||
|
||||
ptc_unlock(shub1, flags);
|
||||
|
||||
preempt_enable();
|
||||
}
|
||||
|
@ -321,27 +270,30 @@ sn2_global_tlb_purge(struct mm_struct *mm, unsigned long start,
|
|||
* TLB flush transaction. The recovery sequence is somewhat tricky & is
|
||||
* coded in assembly language.
|
||||
*/
|
||||
void sn2_ptc_deadlock_recovery(short *nasids, short nix, int mynasid, volatile unsigned long *ptc0, unsigned long data0,
|
||||
void sn2_ptc_deadlock_recovery(short *nasids, short ib, short ie, int mynasid, volatile unsigned long *ptc0, unsigned long data0,
|
||||
volatile unsigned long *ptc1, unsigned long data1)
|
||||
{
|
||||
extern void sn2_ptc_deadlock_recovery_core(volatile unsigned long *, unsigned long,
|
||||
extern unsigned long sn2_ptc_deadlock_recovery_core(volatile unsigned long *, unsigned long,
|
||||
volatile unsigned long *, unsigned long, volatile unsigned long *, unsigned long);
|
||||
short nasid, i;
|
||||
unsigned long *piows, zeroval;
|
||||
unsigned long *piows, zeroval, n;
|
||||
|
||||
__get_cpu_var(ptcstats).deadlocks++;
|
||||
|
||||
piows = (unsigned long *) pda->pio_write_status_addr;
|
||||
zeroval = pda->pio_write_status_val;
|
||||
|
||||
for (i=0; i < nix; i++) {
|
||||
|
||||
for (i=ib; i <= ie; i++) {
|
||||
nasid = nasids[i];
|
||||
if (!(sn2_ptctest & 3) && nasid == mynasid)
|
||||
if (local_node_uses_ptc_ga(is_shub1()) && nasid == mynasid)
|
||||
continue;
|
||||
ptc0 = CHANGE_NASID(nasid, ptc0);
|
||||
if (ptc1)
|
||||
ptc1 = CHANGE_NASID(nasid, ptc1);
|
||||
sn2_ptc_deadlock_recovery_core(ptc0, data0, ptc1, data1, piows, zeroval);
|
||||
|
||||
n = sn2_ptc_deadlock_recovery_core(ptc0, data0, ptc1, data1, piows, zeroval);
|
||||
__get_cpu_var(ptcstats).deadlocks2 += n;
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -452,20 +404,22 @@ static int sn2_ptc_seq_show(struct seq_file *file, void *data)
|
|||
cpu = *(loff_t *) data;
|
||||
|
||||
if (!cpu) {
|
||||
seq_printf(file, "# ptc_l change_rid shub_ptc_flushes shub_nodes_flushed deadlocks lock_nsec shub_nsec shub_nsec_max\n");
|
||||
seq_printf(file,
|
||||
"# cpu ptc_l newrid ptc_flushes nodes_flushed deadlocks lock_nsec shub_nsec shub_nsec_max not_my_mm deadlock2\n");
|
||||
seq_printf(file, "# ptctest %d\n", sn2_ptctest);
|
||||
}
|
||||
|
||||
if (cpu < NR_CPUS && cpu_online(cpu)) {
|
||||
stat = &per_cpu(ptcstats, cpu);
|
||||
seq_printf(file, "cpu %d %ld %ld %ld %ld %ld %ld %ld %ld\n", cpu, stat->ptc_l,
|
||||
seq_printf(file, "cpu %d %ld %ld %ld %ld %ld %ld %ld %ld %ld %ld\n", cpu, stat->ptc_l,
|
||||
stat->change_rid, stat->shub_ptc_flushes, stat->nodes_flushed,
|
||||
stat->deadlocks,
|
||||
1000 * stat->lock_itc_clocks / per_cpu(cpu_info, cpu).cyc_per_usec,
|
||||
1000 * stat->shub_itc_clocks / per_cpu(cpu_info, cpu).cyc_per_usec,
|
||||
1000 * stat->shub_itc_clocks_max / per_cpu(cpu_info, cpu).cyc_per_usec);
|
||||
1000 * stat->shub_itc_clocks_max / per_cpu(cpu_info, cpu).cyc_per_usec,
|
||||
stat->shub_ptc_flushes_not_my_mm,
|
||||
stat->deadlocks2);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -476,7 +430,7 @@ static struct seq_operations sn2_ptc_seq_ops = {
|
|||
.show = sn2_ptc_seq_show
|
||||
};
|
||||
|
||||
int sn2_ptc_proc_open(struct inode *inode, struct file *file)
|
||||
static int sn2_ptc_proc_open(struct inode *inode, struct file *file)
|
||||
{
|
||||
return seq_open(file, &sn2_ptc_seq_ops);
|
||||
}
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
* License. See the file "COPYING" in the main directory of this archive
|
||||
* for more details.
|
||||
*
|
||||
* Copyright (C) 2004-2005 Silicon Graphics, Inc. All rights reserved.
|
||||
* Copyright (C) 2004-2006 Silicon Graphics, Inc. All rights reserved.
|
||||
*
|
||||
* SGI Altix topology and hardware performance monitoring API.
|
||||
* Mark Goodwin <markgw@sgi.com>.
|
||||
|
@ -973,6 +973,9 @@ static int __devinit sn_hwperf_misc_register_init(void)
|
|||
{
|
||||
int e;
|
||||
|
||||
if (!ia64_platform_is("sn2"))
|
||||
return 0;
|
||||
|
||||
sn_hwperf_init();
|
||||
|
||||
/*
|
||||
|
|
|
@ -575,18 +575,21 @@ xpc_activate_partition(struct xpc_partition *part)
|
|||
|
||||
spin_lock_irqsave(&part->act_lock, irq_flags);
|
||||
|
||||
pid = kernel_thread(xpc_activating, (void *) ((u64) partid), 0);
|
||||
|
||||
DBUG_ON(part->act_state != XPC_P_INACTIVE);
|
||||
|
||||
if (pid > 0) {
|
||||
part->act_state = XPC_P_ACTIVATION_REQ;
|
||||
XPC_SET_REASON(part, xpcCloneKThread, __LINE__);
|
||||
} else {
|
||||
XPC_SET_REASON(part, xpcCloneKThreadFailed, __LINE__);
|
||||
}
|
||||
|
||||
spin_unlock_irqrestore(&part->act_lock, irq_flags);
|
||||
|
||||
pid = kernel_thread(xpc_activating, (void *) ((u64) partid), 0);
|
||||
|
||||
if (unlikely(pid <= 0)) {
|
||||
spin_lock_irqsave(&part->act_lock, irq_flags);
|
||||
part->act_state = XPC_P_INACTIVE;
|
||||
XPC_SET_REASON(part, xpcCloneKThreadFailed, __LINE__);
|
||||
spin_unlock_irqrestore(&part->act_lock, irq_flags);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -7,4 +7,6 @@
|
|||
#
|
||||
# Makefile for the sn pci general routines.
|
||||
|
||||
CPPFLAGS += -I$(srctree)/arch/ia64/sn/include
|
||||
|
||||
obj-y := pci_dma.o tioca_provider.o tioce_provider.o pcibr/
|
||||
|
|
|
@ -7,5 +7,7 @@
|
|||
#
|
||||
# Makefile for the sn2 io routines.
|
||||
|
||||
CPPFLAGS += -I$(srctree)/arch/ia64/sn/include
|
||||
|
||||
obj-y += pcibr_dma.o pcibr_reg.o \
|
||||
pcibr_ate.o pcibr_provider.o
|
||||
|
|
|
@ -18,11 +18,6 @@
|
|||
#include <asm/irq.h>
|
||||
#include <asm/tlbflush.h>
|
||||
|
||||
#if defined(CONFIG_BLK_DEV_IDE) || defined(CONFIG_BLK_DEV_HD) || defined(CONFIG_BLK_DEV_IDE_MODULE) || defined(CONFIG_BLK_DEV_HD_MODULE)
|
||||
extern struct drive_info_struct drive_info;
|
||||
EXPORT_SYMBOL(drive_info);
|
||||
#endif
|
||||
|
||||
/* platform dependent support */
|
||||
EXPORT_SYMBOL(boot_cpu_data);
|
||||
EXPORT_SYMBOL(dump_fpu);
|
||||
|
|
|
@ -37,12 +37,6 @@
|
|||
extern void init_mmu(void);
|
||||
#endif
|
||||
|
||||
#if defined(CONFIG_BLK_DEV_IDE) || defined(CONFIG_BLK_DEV_HD) \
|
||||
|| defined(CONFIG_BLK_DEV_IDE_MODULE) \
|
||||
|| defined(CONFIG_BLK_DEV_HD_MODULE)
|
||||
struct drive_info_struct { char dummy[32]; } drive_info;
|
||||
#endif
|
||||
|
||||
extern char _end[];
|
||||
|
||||
/*
|
||||
|
|
|
@ -39,6 +39,14 @@
|
|||
|
||||
asmlinkage void ret_from_fork(void);
|
||||
|
||||
/*
|
||||
* The following aren't currently used.
|
||||
*/
|
||||
void (*pm_idle)(void);
|
||||
EXPORT_SYMBOL(pm_idle);
|
||||
|
||||
void (*pm_power_off)(void);
|
||||
EXPORT_SYMBOL(pm_power_off);
|
||||
|
||||
/*
|
||||
* The idle loop on an m68knommu..
|
||||
|
|
|
@ -595,6 +595,7 @@ config SGI_IP32
|
|||
select SYS_HAS_CPU_R5000
|
||||
select SYS_HAS_CPU_R10000 if BROKEN
|
||||
select SYS_HAS_CPU_RM7000
|
||||
select SYS_HAS_CPU_NEVADA
|
||||
select SYS_SUPPORTS_64BIT_KERNEL
|
||||
select SYS_SUPPORTS_BIG_ENDIAN
|
||||
help
|
||||
|
|
|
@ -53,14 +53,17 @@ CROSS_COMPILE := $(tool-prefix)
|
|||
endif
|
||||
|
||||
CHECKFLAGS-y += -D__linux__ -D__mips__ \
|
||||
-D_MIPS_SZINT=32 \
|
||||
-D_ABIO32=1 \
|
||||
-D_ABIN32=2 \
|
||||
-D_ABI64=3
|
||||
CHECKFLAGS-$(CONFIG_32BIT) += -D_MIPS_SIM=_ABIO32 \
|
||||
-D_MIPS_SZLONG=32 \
|
||||
-D_MIPS_SZPTR=32 \
|
||||
-D__PTRDIFF_TYPE__=int
|
||||
CHECKFLAGS-$(CONFIG_64BIT) += -m64 -D_MIPS_SIM=_ABI64 \
|
||||
-D_MIPS_SZLONG=64 \
|
||||
-D_MIPS_SZPTR=64 \
|
||||
-D__PTRDIFF_TYPE__="long int"
|
||||
CHECKFLAGS-$(CONFIG_CPU_BIG_ENDIAN) += -D__MIPSEB__
|
||||
CHECKFLAGS-$(CONFIG_CPU_LITTLE_ENDIAN) += -D__MIPSEL__
|
||||
|
@ -166,79 +169,97 @@ echo $$gcc_abi $$gcc_opt$$gcc_cpu $$gcc_isa $$gas_abi $$gas_opt$$gas_cpu $$gas_i
|
|||
#
|
||||
cflags-$(CONFIG_CPU_R3000) += \
|
||||
$(call set_gccflags,r3000,mips1,r3000,mips1,mips1)
|
||||
CHECKFLAGS-$(CONFIG_CPU_R3000) += -D_MIPS_ISA=_MIPS_ISA_MIPS1
|
||||
|
||||
cflags-$(CONFIG_CPU_TX39XX) += \
|
||||
$(call set_gccflags,r3900,mips1,r3000,mips1,mips1)
|
||||
CHECKFLAGS-$(CONFIG_CPU_TX39XX) += -D_MIPS_ISA=_MIPS_ISA_MIPS1
|
||||
|
||||
cflags-$(CONFIG_CPU_R6000) += \
|
||||
$(call set_gccflags,r6000,mips2,r6000,mips2,mips2) \
|
||||
-Wa,--trap
|
||||
CHECKFLAGS-$(CONFIG_CPU_R6000) += -D_MIPS_ISA=_MIPS_ISA_MIPS2
|
||||
|
||||
cflags-$(CONFIG_CPU_R4300) += \
|
||||
$(call set_gccflags,r4300,mips3,r4300,mips3,mips2) \
|
||||
-Wa,--trap
|
||||
CHECKFLAGS-$(CONFIG_CPU_R4300) += -D_MIPS_ISA=_MIPS_ISA_MIPS3
|
||||
|
||||
cflags-$(CONFIG_CPU_VR41XX) += \
|
||||
$(call set_gccflags,r4100,mips3,r4600,mips3,mips2) \
|
||||
-Wa,--trap
|
||||
CHECKFLAGS-$(CONFIG_CPU_VR41XX) += -D_MIPS_ISA=_MIPS_ISA_MIPS3
|
||||
|
||||
cflags-$(CONFIG_CPU_R4X00) += \
|
||||
$(call set_gccflags,r4600,mips3,r4600,mips3,mips2) \
|
||||
-Wa,--trap
|
||||
CHECKFLAGS-$(CONFIG_CPU_R4X00) += -D_MIPS_ISA=_MIPS_ISA_MIPS3
|
||||
|
||||
cflags-$(CONFIG_CPU_TX49XX) += \
|
||||
$(call set_gccflags,r4600,mips3,r4600,mips3,mips2) \
|
||||
-Wa,--trap
|
||||
CHECKFLAGS-$(CONFIG_CPU_TX49XX) += -D_MIPS_ISA=_MIPS_ISA_MIPS3
|
||||
|
||||
cflags-$(CONFIG_CPU_MIPS32_R1) += \
|
||||
$(call set_gccflags,mips32,mips32,r4600,mips3,mips2) \
|
||||
-Wa,--trap
|
||||
CHECKFLAGS-$(CONFIG_CPU_MIPS32_R1) += -D_MIPS_ISA=_MIPS_ISA_MIPS32
|
||||
|
||||
cflags-$(CONFIG_CPU_MIPS32_R2) += \
|
||||
$(call set_gccflags,mips32r2,mips32r2,r4600,mips3,mips2) \
|
||||
-Wa,--trap
|
||||
CHECKFLAGS-$(CONFIG_CPU_MIPS32_R2) += -D_MIPS_ISA=_MIPS_ISA_MIPS32
|
||||
|
||||
cflags-$(CONFIG_CPU_MIPS64_R1) += \
|
||||
$(call set_gccflags,mips64,mips64,r4600,mips3,mips2) \
|
||||
-Wa,--trap
|
||||
CHECKFLAGS-$(CONFIG_CPU_MIPS64_R1) += -D_MIPS_ISA=_MIPS_ISA_MIPS64
|
||||
|
||||
cflags-$(CONFIG_CPU_MIPS64_R2) += \
|
||||
$(call set_gccflags,mips64r2,mips64r2,r4600,mips3,mips2) \
|
||||
-Wa,--trap
|
||||
CHECKFLAGS-$(CONFIG_CPU_MIPS64_R2) += -D_MIPS_ISA=_MIPS_ISA_MIPS64
|
||||
|
||||
cflags-$(CONFIG_CPU_R5000) += \
|
||||
$(call set_gccflags,r5000,mips4,r5000,mips4,mips2) \
|
||||
-Wa,--trap
|
||||
CHECKFLAGS-$(CONFIG_CPU_R5000) += -D_MIPS_ISA=_MIPS_ISA_MIPS4
|
||||
|
||||
cflags-$(CONFIG_CPU_R5432) += \
|
||||
$(call set_gccflags,r5400,mips4,r5000,mips4,mips2) \
|
||||
-Wa,--trap
|
||||
CHECKFLAGS-$(CONFIG_CPU_R5432) += -D_MIPS_ISA=_MIPS_ISA_MIPS4
|
||||
|
||||
cflags-$(CONFIG_CPU_NEVADA) += \
|
||||
$(call set_gccflags,rm5200,mips4,r5000,mips4,mips2) \
|
||||
-Wa,--trap
|
||||
# $(call cc-option,-mmad)
|
||||
CHECKFLAGS-$(CONFIG_CPU_NEVADA) += -D_MIPS_ISA=_MIPS_ISA_MIPS4
|
||||
|
||||
cflags-$(CONFIG_CPU_RM7000) += \
|
||||
$(call set_gccflags,rm7000,mips4,r5000,mips4,mips2) \
|
||||
-Wa,--trap
|
||||
CHECKFLAGS-$(CONFIG_CPU_RM7000) += -D_MIPS_ISA=_MIPS_ISA_MIPS4
|
||||
|
||||
cflags-$(CONFIG_CPU_RM9000) += \
|
||||
$(call set_gccflags,rm9000,mips4,r5000,mips4,mips2) \
|
||||
-Wa,--trap
|
||||
CHECKFLAGS-$(CONFIG_CPU_RM9000) += -D_MIPS_ISA=_MIPS_ISA_MIPS4
|
||||
|
||||
|
||||
cflags-$(CONFIG_CPU_SB1) += \
|
||||
$(call set_gccflags,sb1,mips64,r5000,mips4,mips2) \
|
||||
-Wa,--trap
|
||||
CHECKFLAGS-$(CONFIG_CPU_SB1) += -D_MIPS_ISA=_MIPS_ISA_MIPS64
|
||||
|
||||
cflags-$(CONFIG_CPU_R8000) += \
|
||||
$(call set_gccflags,r8000,mips4,r8000,mips4,mips2) \
|
||||
-Wa,--trap
|
||||
CHECKFLAGS-$(CONFIG_CPU_R8000) += -D_MIPS_ISA=_MIPS_ISA_MIPS4
|
||||
|
||||
cflags-$(CONFIG_CPU_R10000) += \
|
||||
$(call set_gccflags,r10000,mips4,r8000,mips4,mips2) \
|
||||
-Wa,--trap
|
||||
CHECKFLAGS-$(CONFIG_CPU_R10000) += -D_MIPS_ISA=_MIPS_ISA_MIPS4
|
||||
|
||||
ifdef CONFIG_CPU_SB1
|
||||
ifdef CONFIG_SB1_PASS_1_WORKAROUNDS
|
||||
|
@ -369,7 +390,7 @@ load-$(CONFIG_MIPS_XXS1500) += 0xffffffff80100000
|
|||
# Cobalt Server
|
||||
#
|
||||
core-$(CONFIG_MIPS_COBALT) += arch/mips/cobalt/
|
||||
cflags-$(CONFIG_MIPS_COBALT) += -Iinclude/asm-mips/cobalt
|
||||
cflags-$(CONFIG_MIPS_COBALT) += -Iinclude/asm-mips/mach-cobalt
|
||||
load-$(CONFIG_MIPS_COBALT) += 0xffffffff80080000
|
||||
|
||||
#
|
||||
|
|
|
@ -151,7 +151,7 @@ void au1000_restart(char *command)
|
|||
}
|
||||
|
||||
set_c0_status(ST0_BEV | ST0_ERL);
|
||||
set_c0_config(CONF_CM_UNCACHED);
|
||||
change_c0_config(CONF_CM_CMASK, CONF_CM_UNCACHED);
|
||||
flush_cache_all();
|
||||
write_c0_wired(0);
|
||||
|
||||
|
|
|
@ -33,6 +33,7 @@
|
|||
#include <linux/delay.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/pm.h>
|
||||
|
||||
#include <asm/cpu.h>
|
||||
#include <asm/bootinfo.h>
|
||||
|
@ -125,7 +126,7 @@ void __init plat_setup(void)
|
|||
#endif
|
||||
_machine_restart = au1000_restart;
|
||||
_machine_halt = au1000_halt;
|
||||
_machine_power_off = au1000_power_off;
|
||||
pm_power_off = au1000_power_off;
|
||||
board_time_init = au1xxx_time_init;
|
||||
board_timer_setup = au1xxx_timer_setup;
|
||||
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
*/
|
||||
#include <asm/asm.h>
|
||||
#include <asm/mipsregs.h>
|
||||
#include <asm/cobalt/cobalt.h>
|
||||
#include <asm/mach-cobalt/cobalt.h>
|
||||
#include <asm/regdef.h>
|
||||
#include <asm/stackframe.h>
|
||||
|
||||
|
|
|
@ -18,7 +18,7 @@
|
|||
#include <asm/gt64120.h>
|
||||
#include <asm/ptrace.h>
|
||||
|
||||
#include <asm/cobalt/cobalt.h>
|
||||
#include <asm/mach-cobalt/cobalt.h>
|
||||
|
||||
extern void cobalt_handle_int(void);
|
||||
|
||||
|
|
|
@ -16,7 +16,7 @@
|
|||
#include <asm/reboot.h>
|
||||
#include <asm/system.h>
|
||||
#include <asm/mipsregs.h>
|
||||
#include <asm/cobalt/cobalt.h>
|
||||
#include <asm/mach-cobalt/cobalt.h>
|
||||
|
||||
void cobalt_machine_halt(void)
|
||||
{
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
* License. See the file "COPYING" in the main directory of this archive
|
||||
* for more details.
|
||||
*
|
||||
* Copyright (C) 1996, 1997, 2004 by Ralf Baechle (ralf@linux-mips.org)
|
||||
* Copyright (C) 1996, 1997, 2004, 05 by Ralf Baechle (ralf@linux-mips.org)
|
||||
* Copyright (C) 2001, 2002, 2003 by Liam Davies (ldavies@agile.tv)
|
||||
*
|
||||
*/
|
||||
|
@ -13,6 +13,7 @@
|
|||
#include <linux/interrupt.h>
|
||||
#include <linux/pci.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/pm.h>
|
||||
#include <linux/serial.h>
|
||||
#include <linux/serial_core.h>
|
||||
|
||||
|
@ -25,7 +26,7 @@
|
|||
#include <asm/gt64120.h>
|
||||
#include <asm/serial.h>
|
||||
|
||||
#include <asm/cobalt/cobalt.h>
|
||||
#include <asm/mach-cobalt/cobalt.h>
|
||||
|
||||
extern void cobalt_machine_restart(char *command);
|
||||
extern void cobalt_machine_halt(void);
|
||||
|
@ -99,7 +100,7 @@ void __init plat_setup(void)
|
|||
|
||||
_machine_restart = cobalt_machine_restart;
|
||||
_machine_halt = cobalt_machine_halt;
|
||||
_machine_power_off = cobalt_machine_power_off;
|
||||
pm_power_off = cobalt_machine_power_off;
|
||||
|
||||
board_timer_setup = cobalt_timer_setup;
|
||||
|
||||
|
@ -139,7 +140,7 @@ void __init plat_setup(void)
|
|||
uart.type = PORT_UNKNOWN;
|
||||
uart.uartclk = 18432000;
|
||||
uart.irq = COBALT_SERIAL_IRQ;
|
||||
uart.flags = STD_COM_FLAGS;
|
||||
uart.flags = UPF_BOOT_AUTOCONF | UPF_SKIP_TEST;
|
||||
uart.iobase = 0xc800000;
|
||||
uart.iotype = UPIO_PORT;
|
||||
|
||||
|
|
|
@ -102,6 +102,7 @@ CONFIG_CPU_R5000=y
|
|||
# CONFIG_CPU_RM9000 is not set
|
||||
# CONFIG_CPU_SB1 is not set
|
||||
CONFIG_SYS_HAS_CPU_R5000=y
|
||||
CONFIG_SYS_HAS_CPU_NEVADA=y
|
||||
CONFIG_SYS_HAS_CPU_RM7000=y
|
||||
CONFIG_SYS_SUPPORTS_64BIT_KERNEL=y
|
||||
CONFIG_CPU_SUPPORTS_32BIT_KERNEL=y
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
#
|
||||
# Automatically generated make config: don't edit
|
||||
# Linux kernel version: 2.6.15-rc2
|
||||
# Thu Nov 24 01:07:00 2005
|
||||
# Linux kernel version: 2.6.16-rc2
|
||||
# Fri Feb 3 17:14:27 2006
|
||||
#
|
||||
CONFIG_MIPS=y
|
||||
|
||||
|
@ -147,26 +147,27 @@ CONFIG_LOCALVERSION_AUTO=y
|
|||
# CONFIG_BSD_PROCESS_ACCT is not set
|
||||
# CONFIG_SYSCTL is not set
|
||||
# CONFIG_AUDIT is not set
|
||||
# CONFIG_HOTPLUG is not set
|
||||
CONFIG_KOBJECT_UEVENT=y
|
||||
# CONFIG_IKCONFIG is not set
|
||||
CONFIG_INITRAMFS_SOURCE=""
|
||||
CONFIG_EMBEDDED=y
|
||||
CONFIG_KALLSYMS=y
|
||||
# CONFIG_KALLSYMS_EXTRA_PASS is not set
|
||||
# CONFIG_HOTPLUG is not set
|
||||
CONFIG_PRINTK=y
|
||||
# CONFIG_BUG is not set
|
||||
CONFIG_ELF_CORE=y
|
||||
# CONFIG_BASE_FULL is not set
|
||||
# CONFIG_FUTEX is not set
|
||||
# CONFIG_EPOLL is not set
|
||||
# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
|
||||
# CONFIG_SHMEM is not set
|
||||
CONFIG_CC_ALIGN_FUNCTIONS=0
|
||||
CONFIG_CC_ALIGN_LABELS=0
|
||||
CONFIG_CC_ALIGN_LOOPS=0
|
||||
CONFIG_CC_ALIGN_JUMPS=0
|
||||
CONFIG_SLAB=y
|
||||
CONFIG_TINY_SHMEM=y
|
||||
CONFIG_BASE_SMALL=1
|
||||
# CONFIG_SLOB is not set
|
||||
|
||||
#
|
||||
# Loadable module support
|
||||
|
@ -266,11 +267,7 @@ CONFIG_TCP_CONG_BIC=y
|
|||
# CONFIG_HAMRADIO is not set
|
||||
# CONFIG_IRDA is not set
|
||||
# CONFIG_BT is not set
|
||||
CONFIG_IEEE80211=y
|
||||
# CONFIG_IEEE80211_DEBUG is not set
|
||||
CONFIG_IEEE80211_CRYPT_WEP=y
|
||||
CONFIG_IEEE80211_CRYPT_CCMP=y
|
||||
CONFIG_IEEE80211_CRYPT_TKIP=y
|
||||
# CONFIG_IEEE80211 is not set
|
||||
|
||||
#
|
||||
# Device Drivers
|
||||
|
@ -323,7 +320,7 @@ CONFIG_BLK_DEV_RAM_COUNT=16
|
|||
#
|
||||
# SCSI device support
|
||||
#
|
||||
CONFIG_RAID_ATTRS=y
|
||||
# CONFIG_RAID_ATTRS is not set
|
||||
# CONFIG_SCSI is not set
|
||||
|
||||
#
|
||||
|
@ -366,24 +363,16 @@ CONFIG_NETDEVICES=y
|
|||
#
|
||||
# PHY device support
|
||||
#
|
||||
CONFIG_PHYLIB=y
|
||||
|
||||
#
|
||||
# MII PHY device drivers
|
||||
#
|
||||
CONFIG_MARVELL_PHY=y
|
||||
CONFIG_DAVICOM_PHY=y
|
||||
CONFIG_QSEMI_PHY=y
|
||||
CONFIG_LXT_PHY=y
|
||||
CONFIG_CICADA_PHY=y
|
||||
# CONFIG_PHYLIB is not set
|
||||
|
||||
#
|
||||
# Ethernet (10 or 100Mbit)
|
||||
#
|
||||
CONFIG_NET_ETHERNET=y
|
||||
CONFIG_MII=y
|
||||
# CONFIG_MII is not set
|
||||
# CONFIG_NET_VENDOR_3COM is not set
|
||||
# CONFIG_NET_VENDOR_SMC is not set
|
||||
# CONFIG_DM9000 is not set
|
||||
# CONFIG_NET_VENDOR_RACAL is not set
|
||||
# CONFIG_DEPCA is not set
|
||||
# CONFIG_HP100 is not set
|
||||
|
@ -479,6 +468,7 @@ CONFIG_HW_CONSOLE=y
|
|||
CONFIG_SERIAL_8250=y
|
||||
CONFIG_SERIAL_8250_CONSOLE=y
|
||||
CONFIG_SERIAL_8250_NR_UARTS=4
|
||||
CONFIG_SERIAL_8250_RUNTIME_UARTS=4
|
||||
# CONFIG_SERIAL_8250_EXTENDED is not set
|
||||
|
||||
#
|
||||
|
@ -517,6 +507,12 @@ CONFIG_SERIAL_CORE_CONSOLE=y
|
|||
#
|
||||
# CONFIG_I2C is not set
|
||||
|
||||
#
|
||||
# SPI support
|
||||
#
|
||||
# CONFIG_SPI is not set
|
||||
# CONFIG_SPI_MASTER is not set
|
||||
|
||||
#
|
||||
# Dallas's 1-wire bus
|
||||
#
|
||||
|
@ -591,12 +587,15 @@ CONFIG_DUMMY_CONSOLE=y
|
|||
# SN Devices
|
||||
#
|
||||
|
||||
#
|
||||
# EDAC - error detection and reporting (RAS)
|
||||
#
|
||||
|
||||
#
|
||||
# File systems
|
||||
#
|
||||
# CONFIG_EXT2_FS is not set
|
||||
# CONFIG_EXT3_FS is not set
|
||||
# CONFIG_JBD is not set
|
||||
# CONFIG_REISERFS_FS is not set
|
||||
# CONFIG_JFS_FS is not set
|
||||
# CONFIG_FS_POSIX_ACL is not set
|
||||
|
@ -677,6 +676,7 @@ CONFIG_MSDOS_PARTITION=y
|
|||
# Kernel hacking
|
||||
#
|
||||
# CONFIG_PRINTK_TIME is not set
|
||||
# CONFIG_MAGIC_SYSRQ is not set
|
||||
# CONFIG_DEBUG_KERNEL is not set
|
||||
CONFIG_LOG_BUF_SHIFT=14
|
||||
CONFIG_CROSSCOMPILE=y
|
||||
|
@ -690,31 +690,7 @@ CONFIG_CMDLINE="console=ttyS0 debug ip=172.20.0.2:172.20.0.1::255.255.0.0"
|
|||
#
|
||||
# Cryptographic options
|
||||
#
|
||||
CONFIG_CRYPTO=y
|
||||
CONFIG_CRYPTO_HMAC=y
|
||||
CONFIG_CRYPTO_NULL=y
|
||||
CONFIG_CRYPTO_MD4=y
|
||||
CONFIG_CRYPTO_MD5=y
|
||||
CONFIG_CRYPTO_SHA1=y
|
||||
CONFIG_CRYPTO_SHA256=y
|
||||
CONFIG_CRYPTO_SHA512=y
|
||||
CONFIG_CRYPTO_WP512=y
|
||||
CONFIG_CRYPTO_TGR192=y
|
||||
CONFIG_CRYPTO_DES=y
|
||||
CONFIG_CRYPTO_BLOWFISH=y
|
||||
CONFIG_CRYPTO_TWOFISH=y
|
||||
CONFIG_CRYPTO_SERPENT=y
|
||||
CONFIG_CRYPTO_AES=y
|
||||
CONFIG_CRYPTO_CAST5=y
|
||||
CONFIG_CRYPTO_CAST6=y
|
||||
CONFIG_CRYPTO_TEA=y
|
||||
CONFIG_CRYPTO_ARC4=y
|
||||
CONFIG_CRYPTO_KHAZAD=y
|
||||
CONFIG_CRYPTO_ANUBIS=y
|
||||
CONFIG_CRYPTO_DEFLATE=y
|
||||
CONFIG_CRYPTO_MICHAEL_MIC=y
|
||||
CONFIG_CRYPTO_CRC32C=y
|
||||
# CONFIG_CRYPTO_TEST is not set
|
||||
# CONFIG_CRYPTO is not set
|
||||
|
||||
#
|
||||
# Hardware crypto devices
|
||||
|
@ -724,8 +700,6 @@ CONFIG_CRYPTO_CRC32C=y
|
|||
# Library routines
|
||||
#
|
||||
# CONFIG_CRC_CCITT is not set
|
||||
CONFIG_CRC16=y
|
||||
# CONFIG_CRC16 is not set
|
||||
CONFIG_CRC32=y
|
||||
CONFIG_LIBCRC32C=y
|
||||
CONFIG_ZLIB_INFLATE=y
|
||||
CONFIG_ZLIB_DEFLATE=y
|
||||
# CONFIG_LIBCRC32C is not set
|
||||
|
|
|
@ -14,6 +14,7 @@
|
|||
#include <linux/ide.h>
|
||||
#include <linux/ioport.h>
|
||||
#include <linux/irq.h>
|
||||
#include <linux/pm.h>
|
||||
|
||||
#include <asm/addrspace.h>
|
||||
#include <asm/bcache.h>
|
||||
|
@ -95,7 +96,7 @@ void __init plat_setup(void)
|
|||
|
||||
_machine_restart = ddb_machine_restart;
|
||||
_machine_halt = ddb_machine_halt;
|
||||
_machine_power_off = ddb_machine_power_off;
|
||||
pm_power_off = ddb_machine_power_off;
|
||||
|
||||
ddb_out32(DDB_BAR0, 0);
|
||||
|
||||
|
|
|
@ -11,6 +11,7 @@
|
|||
#include <linux/types.h>
|
||||
#include <linux/sched.h>
|
||||
#include <linux/pci.h>
|
||||
#include <linux/pm.h>
|
||||
|
||||
#include <asm/addrspace.h>
|
||||
#include <asm/bcache.h>
|
||||
|
@ -133,7 +134,7 @@ void __init plat_setup(void)
|
|||
|
||||
_machine_restart = ddb_machine_restart;
|
||||
_machine_halt = ddb_machine_halt;
|
||||
_machine_power_off = ddb_machine_power_off;
|
||||
pm_power_off = ddb_machine_power_off;
|
||||
|
||||
/* request io port/mem resources */
|
||||
if (request_resource(&ioport_resource, &ddb5476_ioport.dma1) ||
|
||||
|
|
|
@ -26,6 +26,7 @@
|
|||
#include <linux/major.h>
|
||||
#include <linux/kdev_t.h>
|
||||
#include <linux/root_dev.h>
|
||||
#include <linux/pm.h>
|
||||
|
||||
#include <asm/cpu.h>
|
||||
#include <asm/bootinfo.h>
|
||||
|
@ -182,7 +183,7 @@ void __init plat_setup(void)
|
|||
|
||||
_machine_restart = ddb_machine_restart;
|
||||
_machine_halt = ddb_machine_halt;
|
||||
_machine_power_off = ddb_machine_power_off;
|
||||
pm_power_off = ddb_machine_power_off;
|
||||
|
||||
/* setup resource limits */
|
||||
ioport_resource.end = DDB_PCI0_IO_SIZE + DDB_PCI1_IO_SIZE - 1;
|
||||
|
|
|
@ -17,6 +17,7 @@
|
|||
#include <linux/sched.h>
|
||||
#include <linux/spinlock.h>
|
||||
#include <linux/types.h>
|
||||
#include <linux/pm.h>
|
||||
|
||||
#include <asm/bootinfo.h>
|
||||
#include <asm/cpu.h>
|
||||
|
@ -158,7 +159,7 @@ void __init plat_setup(void)
|
|||
|
||||
_machine_restart = dec_machine_restart;
|
||||
_machine_halt = dec_machine_halt;
|
||||
_machine_power_off = dec_machine_power_off;
|
||||
pm_power_off = dec_machine_power_off;
|
||||
|
||||
ioport_resource.start = ~0UL;
|
||||
ioport_resource.end = 0UL;
|
||||
|
|
|
@ -34,6 +34,8 @@
|
|||
#include <linux/interrupt.h>
|
||||
#include <linux/pci.h>
|
||||
#include <linux/timex.h>
|
||||
#include <linux/pm.h>
|
||||
|
||||
#include <asm/bootinfo.h>
|
||||
#include <asm/page.h>
|
||||
#include <asm/io.h>
|
||||
|
@ -73,7 +75,7 @@ void __init plat_setup(void)
|
|||
{
|
||||
_machine_restart = galileo_machine_restart;
|
||||
_machine_halt = galileo_machine_halt;
|
||||
_machine_power_off = galileo_machine_power_off;
|
||||
pm_power_off = galileo_machine_power_off;
|
||||
|
||||
board_time_init = gt64120_time_init;
|
||||
set_io_port_base(KSEG1);
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
* BRIEF MODULE DESCRIPTION
|
||||
* Momentum Computer Ocelot (CP7000) - board dependent boot routines
|
||||
*
|
||||
* Copyright (C) 1996, 1997, 2001 Ralf Baechle
|
||||
* Copyright (C) 1996, 1997, 2001, 06 Ralf Baechle (ralf@linux-mips.org)
|
||||
* Copyright (C) 2000 RidgeRun, Inc.
|
||||
* Copyright (C) 2001 Red Hat, Inc.
|
||||
* Copyright (C) 2002 Momentum Computer
|
||||
|
@ -47,6 +47,8 @@
|
|||
#include <linux/pci.h>
|
||||
#include <linux/timex.h>
|
||||
#include <linux/vmalloc.h>
|
||||
#include <linux/pm.h>
|
||||
|
||||
#include <asm/time.h>
|
||||
#include <asm/bootinfo.h>
|
||||
#include <asm/page.h>
|
||||
|
@ -159,7 +161,7 @@ void __init plat_setup(void)
|
|||
|
||||
_machine_restart = momenco_ocelot_restart;
|
||||
_machine_halt = momenco_ocelot_halt;
|
||||
_machine_power_off = momenco_ocelot_power_off;
|
||||
pm_power_off = momenco_ocelot_power_off;
|
||||
|
||||
/*
|
||||
* initrd_start = (ulong)ocelot_initrd_start;
|
||||
|
|
|
@ -34,6 +34,7 @@
|
|||
#include <linux/major.h>
|
||||
#include <linux/kdev_t.h>
|
||||
#include <linux/root_dev.h>
|
||||
#include <linux/pm.h>
|
||||
|
||||
#include <asm/cpu.h>
|
||||
#include <asm/time.h>
|
||||
|
@ -125,7 +126,7 @@ void __init plat_setup(void)
|
|||
|
||||
_machine_restart = it8172_restart;
|
||||
_machine_halt = it8172_halt;
|
||||
_machine_power_off = it8172_power_off;
|
||||
pm_power_off = it8172_power_off;
|
||||
|
||||
/*
|
||||
* IO/MEM resources.
|
||||
|
|
|
@ -19,6 +19,8 @@
|
|||
#include <linux/console.h>
|
||||
#include <linux/fb.h>
|
||||
#include <linux/ide.h>
|
||||
#include <linux/pm.h>
|
||||
|
||||
#include <asm/bootinfo.h>
|
||||
#include <asm/irq.h>
|
||||
#include <asm/jazz.h>
|
||||
|
@ -79,7 +81,7 @@ void __init plat_setup(void)
|
|||
|
||||
_machine_restart = jazz_machine_restart;
|
||||
_machine_halt = jazz_machine_halt;
|
||||
_machine_power_off = jazz_machine_power_off;
|
||||
pm_power_off = jazz_machine_power_off;
|
||||
|
||||
#warning "Somebody should check if screen_info is ok for Jazz."
|
||||
|
||||
|
|
|
@ -44,6 +44,7 @@
|
|||
#include <linux/ioport.h>
|
||||
#include <linux/param.h> /* for HZ */
|
||||
#include <linux/delay.h>
|
||||
#include <linux/pm.h>
|
||||
#ifdef CONFIG_SERIAL_TXX9
|
||||
#include <linux/tty.h>
|
||||
#include <linux/serial.h>
|
||||
|
@ -211,7 +212,7 @@ void __init plat_setup(void)
|
|||
|
||||
_machine_restart = jmr3927_machine_restart;
|
||||
_machine_halt = jmr3927_machine_halt;
|
||||
_machine_power_off = jmr3927_machine_power_off;
|
||||
pm_power_off = jmr3927_machine_power_off;
|
||||
|
||||
/*
|
||||
* IO/MEM resources.
|
||||
|
|
|
@ -2,8 +2,8 @@
|
|||
* Processor capabilities determination functions.
|
||||
*
|
||||
* Copyright (C) xxxx the Anonymous
|
||||
* Copyright (C) 1994 - 2006 Ralf Baechle
|
||||
* Copyright (C) 2003, 2004 Maciej W. Rozycki
|
||||
* Copyright (C) 1994 - 2003 Ralf Baechle
|
||||
* Copyright (C) 2001, 2004 MIPS Inc.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
|
@ -641,10 +641,9 @@ static inline void cpu_probe_sibyte(struct cpuinfo_mips *c)
|
|||
switch (c->processor_id & 0xff00) {
|
||||
case PRID_IMP_SB1:
|
||||
c->cputype = CPU_SB1;
|
||||
#ifdef CONFIG_SB1_PASS_1_WORKAROUNDS
|
||||
/* FPU in pass1 is known to have issues. */
|
||||
if ((c->processor_id & 0xff) < 0x20)
|
||||
c->options &= ~(MIPS_CPU_FPU | MIPS_CPU_32FPR);
|
||||
#endif
|
||||
break;
|
||||
case PRID_IMP_SB1A:
|
||||
c->cputype = CPU_SB1A;
|
||||
|
|
|
@ -233,11 +233,11 @@ NESTED(except_vec_nmi, 0, sp)
|
|||
NESTED(nmi_handler, PT_SIZE, sp)
|
||||
.set push
|
||||
.set noat
|
||||
.set mips3
|
||||
SAVE_ALL
|
||||
move a0, sp
|
||||
jal nmi_exception_handler
|
||||
RESTORE_ALL
|
||||
.set mips3
|
||||
eret
|
||||
.set pop
|
||||
END(nmi_handler)
|
||||
|
|
|
@ -4,6 +4,7 @@
|
|||
* for more details.
|
||||
*
|
||||
* Copyright (C) 1994 - 1999, 2000 by Ralf Baechle and others.
|
||||
* Copyright (C) 2005, 2006 by Ralf Baechle (ralf@linux-mips.org)
|
||||
* Copyright (C) 1999, 2000 Silicon Graphics, Inc.
|
||||
* Copyright (C) 2004 Thiemo Seufer
|
||||
*/
|
||||
|
@ -58,8 +59,8 @@ ATTRIB_NORET void cpu_idle(void)
|
|||
}
|
||||
}
|
||||
|
||||
extern int do_signal(sigset_t *oldset, struct pt_regs *regs);
|
||||
extern int do_signal32(sigset_t *oldset, struct pt_regs *regs);
|
||||
extern void do_signal(struct pt_regs *regs);
|
||||
extern void do_signal32(struct pt_regs *regs);
|
||||
|
||||
/*
|
||||
* Native o32 and N64 ABI without DSP ASE
|
||||
|
|
|
@ -88,7 +88,7 @@ asmlinkage int sys32_ptrace(int request, int pid, int addr, int data)
|
|||
ret = -EIO;
|
||||
if (copied != sizeof(tmp))
|
||||
break;
|
||||
ret = put_user(tmp, (unsigned int *) (unsigned long) data);
|
||||
ret = put_user(tmp, (unsigned int __user *) (unsigned long) data);
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -174,8 +174,10 @@ asmlinkage int sys32_ptrace(int request, int pid, int addr, int data)
|
|||
case FPC_EIR: { /* implementation / version register */
|
||||
unsigned int flags;
|
||||
|
||||
if (!cpu_has_fpu)
|
||||
if (!cpu_has_fpu) {
|
||||
tmp = 0;
|
||||
break;
|
||||
}
|
||||
|
||||
preempt_disable();
|
||||
if (cpu_has_mipsmt) {
|
||||
|
@ -194,15 +196,18 @@ asmlinkage int sys32_ptrace(int request, int pid, int addr, int data)
|
|||
preempt_enable();
|
||||
break;
|
||||
}
|
||||
case DSP_BASE ... DSP_BASE + 5:
|
||||
case DSP_BASE ... DSP_BASE + 5: {
|
||||
dspreg_t *dregs;
|
||||
|
||||
if (!cpu_has_dsp) {
|
||||
tmp = 0;
|
||||
ret = -EIO;
|
||||
goto out_tsk;
|
||||
}
|
||||
dspreg_t *dregs = __get_dsp_regs(child);
|
||||
dregs = __get_dsp_regs(child);
|
||||
tmp = (unsigned long) (dregs[addr - DSP_BASE]);
|
||||
break;
|
||||
}
|
||||
case DSP_CONTROL:
|
||||
if (!cpu_has_dsp) {
|
||||
tmp = 0;
|
||||
|
@ -216,7 +221,7 @@ asmlinkage int sys32_ptrace(int request, int pid, int addr, int data)
|
|||
ret = -EIO;
|
||||
goto out_tsk;
|
||||
}
|
||||
ret = put_user(tmp, (unsigned *) (unsigned long) data);
|
||||
ret = put_user(tmp, (unsigned __user *) (unsigned long) data);
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -304,15 +309,18 @@ asmlinkage int sys32_ptrace(int request, int pid, int addr, int data)
|
|||
else
|
||||
child->thread.fpu.soft.fcr31 = data;
|
||||
break;
|
||||
case DSP_BASE ... DSP_BASE + 5:
|
||||
case DSP_BASE ... DSP_BASE + 5: {
|
||||
dspreg_t *dregs;
|
||||
|
||||
if (!cpu_has_dsp) {
|
||||
ret = -EIO;
|
||||
break;
|
||||
}
|
||||
|
||||
dspreg_t *dregs = __get_dsp_regs(child);
|
||||
dregs = __get_dsp_regs(child);
|
||||
dregs[addr - DSP_BASE] = data;
|
||||
break;
|
||||
}
|
||||
case DSP_CONTROL:
|
||||
if (!cpu_has_dsp) {
|
||||
ret = -EIO;
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue