Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6 into for-upstream
This commit is contained in:
commit
a23e66f3b8
1
.mailmap
1
.mailmap
@ -32,6 +32,7 @@ Christoph Hellwig <hch@lst.de>
|
|||||||
Corey Minyard <minyard@acm.org>
|
Corey Minyard <minyard@acm.org>
|
||||||
David Brownell <david-b@pacbell.net>
|
David Brownell <david-b@pacbell.net>
|
||||||
David Woodhouse <dwmw2@shinybook.infradead.org>
|
David Woodhouse <dwmw2@shinybook.infradead.org>
|
||||||
|
Dmitry Eremin-Solenikov <dbaryshkov@gmail.com>
|
||||||
Domen Puncer <domen@coderock.org>
|
Domen Puncer <domen@coderock.org>
|
||||||
Douglas Gilbert <dougg@torque.net>
|
Douglas Gilbert <dougg@torque.net>
|
||||||
Ed L. Cashin <ecashin@coraid.com>
|
Ed L. Cashin <ecashin@coraid.com>
|
||||||
|
@ -6,7 +6,6 @@ Description:
|
|||||||
internal state of the kernel memory blocks. Files could be
|
internal state of the kernel memory blocks. Files could be
|
||||||
added or removed dynamically to represent hot-add/remove
|
added or removed dynamically to represent hot-add/remove
|
||||||
operations.
|
operations.
|
||||||
|
|
||||||
Users: hotplug memory add/remove tools
|
Users: hotplug memory add/remove tools
|
||||||
https://w3.opensource.ibm.com/projects/powerpc-utils/
|
https://w3.opensource.ibm.com/projects/powerpc-utils/
|
||||||
|
|
||||||
@ -19,6 +18,56 @@ Description:
|
|||||||
This is useful for a user-level agent to determine
|
This is useful for a user-level agent to determine
|
||||||
identify removable sections of the memory before attempting
|
identify removable sections of the memory before attempting
|
||||||
potentially expensive hot-remove memory operation
|
potentially expensive hot-remove memory operation
|
||||||
|
|
||||||
Users: hotplug memory remove tools
|
Users: hotplug memory remove tools
|
||||||
https://w3.opensource.ibm.com/projects/powerpc-utils/
|
https://w3.opensource.ibm.com/projects/powerpc-utils/
|
||||||
|
|
||||||
|
What: /sys/devices/system/memory/memoryX/phys_device
|
||||||
|
Date: September 2008
|
||||||
|
Contact: Badari Pulavarty <pbadari@us.ibm.com>
|
||||||
|
Description:
|
||||||
|
The file /sys/devices/system/memory/memoryX/phys_device
|
||||||
|
is read-only and is designed to show the name of physical
|
||||||
|
memory device. Implementation is currently incomplete.
|
||||||
|
|
||||||
|
What: /sys/devices/system/memory/memoryX/phys_index
|
||||||
|
Date: September 2008
|
||||||
|
Contact: Badari Pulavarty <pbadari@us.ibm.com>
|
||||||
|
Description:
|
||||||
|
The file /sys/devices/system/memory/memoryX/phys_index
|
||||||
|
is read-only and contains the section ID in hexadecimal
|
||||||
|
which is equivalent to decimal X contained in the
|
||||||
|
memory section directory name.
|
||||||
|
|
||||||
|
What: /sys/devices/system/memory/memoryX/state
|
||||||
|
Date: September 2008
|
||||||
|
Contact: Badari Pulavarty <pbadari@us.ibm.com>
|
||||||
|
Description:
|
||||||
|
The file /sys/devices/system/memory/memoryX/state
|
||||||
|
is read-write. When read, it's contents show the
|
||||||
|
online/offline state of the memory section. When written,
|
||||||
|
root can toggle the the online/offline state of a removable
|
||||||
|
memory section (see removable file description above)
|
||||||
|
using the following commands.
|
||||||
|
# echo online > /sys/devices/system/memory/memoryX/state
|
||||||
|
# echo offline > /sys/devices/system/memory/memoryX/state
|
||||||
|
|
||||||
|
For example, if /sys/devices/system/memory/memory22/removable
|
||||||
|
contains a value of 1 and
|
||||||
|
/sys/devices/system/memory/memory22/state contains the
|
||||||
|
string "online" the following command can be executed by
|
||||||
|
by root to offline that section.
|
||||||
|
# echo offline > /sys/devices/system/memory/memory22/state
|
||||||
|
Users: hotplug memory remove tools
|
||||||
|
https://w3.opensource.ibm.com/projects/powerpc-utils/
|
||||||
|
|
||||||
|
What: /sys/devices/system/node/nodeX/memoryY
|
||||||
|
Date: September 2008
|
||||||
|
Contact: Gary Hade <garyhade@us.ibm.com>
|
||||||
|
Description:
|
||||||
|
When CONFIG_NUMA is enabled
|
||||||
|
/sys/devices/system/node/nodeX/memoryY is a symbolic link that
|
||||||
|
points to the corresponding /sys/devices/system/memory/memoryY
|
||||||
|
memory section directory. For example, the following symbolic
|
||||||
|
link is created for memory section 9 on node0.
|
||||||
|
/sys/devices/system/node/node0/memory9 -> ../../memory/memory9
|
||||||
|
|
||||||
|
@ -26,7 +26,7 @@ mapped only for the time they are actually used and unmapped after the DMA
|
|||||||
transfer.
|
transfer.
|
||||||
|
|
||||||
The following API will work of course even on platforms where no such
|
The following API will work of course even on platforms where no such
|
||||||
hardware exists, see e.g. include/asm-i386/pci.h for how it is implemented on
|
hardware exists, see e.g. arch/x86/include/asm/pci.h for how it is implemented on
|
||||||
top of the virt_to_bus interface.
|
top of the virt_to_bus interface.
|
||||||
|
|
||||||
First of all, you should make sure
|
First of all, you should make sure
|
||||||
|
@ -41,6 +41,12 @@ GPL version 2.
|
|||||||
</abstract>
|
</abstract>
|
||||||
|
|
||||||
<revhistory>
|
<revhistory>
|
||||||
|
<revision>
|
||||||
|
<revnumber>0.6</revnumber>
|
||||||
|
<date>2008-12-05</date>
|
||||||
|
<authorinitials>hjk</authorinitials>
|
||||||
|
<revremark>Added description of portio sysfs attributes.</revremark>
|
||||||
|
</revision>
|
||||||
<revision>
|
<revision>
|
||||||
<revnumber>0.5</revnumber>
|
<revnumber>0.5</revnumber>
|
||||||
<date>2008-05-22</date>
|
<date>2008-05-22</date>
|
||||||
@ -318,6 +324,54 @@ interested in translating it, please email me
|
|||||||
offset = N * getpagesize();
|
offset = N * getpagesize();
|
||||||
</programlisting>
|
</programlisting>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
Sometimes there is hardware with memory-like regions that can not be
|
||||||
|
mapped with the technique described here, but there are still ways to
|
||||||
|
access them from userspace. The most common example are x86 ioports.
|
||||||
|
On x86 systems, userspace can access these ioports using
|
||||||
|
<function>ioperm()</function>, <function>iopl()</function>,
|
||||||
|
<function>inb()</function>, <function>outb()</function>, and similar
|
||||||
|
functions.
|
||||||
|
</para>
|
||||||
|
<para>
|
||||||
|
Since these ioport regions can not be mapped, they will not appear under
|
||||||
|
<filename>/sys/class/uio/uioX/maps/</filename> like the normal memory
|
||||||
|
described above. Without information about the port regions a hardware
|
||||||
|
has to offer, it becomes difficult for the userspace part of the
|
||||||
|
driver to find out which ports belong to which UIO device.
|
||||||
|
</para>
|
||||||
|
<para>
|
||||||
|
To address this situation, the new directory
|
||||||
|
<filename>/sys/class/uio/uioX/portio/</filename> was added. It only
|
||||||
|
exists if the driver wants to pass information about one or more port
|
||||||
|
regions to userspace. If that is the case, subdirectories named
|
||||||
|
<filename>port0</filename>, <filename>port1</filename>, and so on,
|
||||||
|
will appear underneath
|
||||||
|
<filename>/sys/class/uio/uioX/portio/</filename>.
|
||||||
|
</para>
|
||||||
|
<para>
|
||||||
|
Each <filename>portX/</filename> directory contains three read-only
|
||||||
|
files that show start, size, and type of the port region:
|
||||||
|
</para>
|
||||||
|
<itemizedlist>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
<filename>start</filename>: The first port of this region.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
<filename>size</filename>: The number of ports in this region.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
<filename>porttype</filename>: A string describing the type of port.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</itemizedlist>
|
||||||
|
|
||||||
|
|
||||||
</sect1>
|
</sect1>
|
||||||
</chapter>
|
</chapter>
|
||||||
|
|
||||||
@ -339,12 +393,12 @@ offset = N * getpagesize();
|
|||||||
|
|
||||||
<itemizedlist>
|
<itemizedlist>
|
||||||
<listitem><para>
|
<listitem><para>
|
||||||
<varname>char *name</varname>: Required. The name of your driver as
|
<varname>const char *name</varname>: Required. The name of your driver as
|
||||||
it will appear in sysfs. I recommend using the name of your module for this.
|
it will appear in sysfs. I recommend using the name of your module for this.
|
||||||
</para></listitem>
|
</para></listitem>
|
||||||
|
|
||||||
<listitem><para>
|
<listitem><para>
|
||||||
<varname>char *version</varname>: Required. This string appears in
|
<varname>const char *version</varname>: Required. This string appears in
|
||||||
<filename>/sys/class/uio/uioX/version</filename>.
|
<filename>/sys/class/uio/uioX/version</filename>.
|
||||||
</para></listitem>
|
</para></listitem>
|
||||||
|
|
||||||
@ -355,6 +409,13 @@ mapping you need to fill one of the <varname>uio_mem</varname> structures.
|
|||||||
See the description below for details.
|
See the description below for details.
|
||||||
</para></listitem>
|
</para></listitem>
|
||||||
|
|
||||||
|
<listitem><para>
|
||||||
|
<varname>struct uio_port port[ MAX_UIO_PORTS_REGIONS ]</varname>: Required
|
||||||
|
if you want to pass information about ioports to userspace. For each port
|
||||||
|
region you need to fill one of the <varname>uio_port</varname> structures.
|
||||||
|
See the description below for details.
|
||||||
|
</para></listitem>
|
||||||
|
|
||||||
<listitem><para>
|
<listitem><para>
|
||||||
<varname>long irq</varname>: Required. If your hardware generates an
|
<varname>long irq</varname>: Required. If your hardware generates an
|
||||||
interrupt, it's your modules task to determine the irq number during
|
interrupt, it's your modules task to determine the irq number during
|
||||||
@ -448,6 +509,42 @@ Please do not touch the <varname>kobj</varname> element of
|
|||||||
<varname>struct uio_mem</varname>! It is used by the UIO framework
|
<varname>struct uio_mem</varname>! It is used by the UIO framework
|
||||||
to set up sysfs files for this mapping. Simply leave it alone.
|
to set up sysfs files for this mapping. Simply leave it alone.
|
||||||
</para>
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
Sometimes, your device can have one or more port regions which can not be
|
||||||
|
mapped to userspace. But if there are other possibilities for userspace to
|
||||||
|
access these ports, it makes sense to make information about the ports
|
||||||
|
available in sysfs. For each region, you have to set up a
|
||||||
|
<varname>struct uio_port</varname> in the <varname>port[]</varname> array.
|
||||||
|
Here's a description of the fields of <varname>struct uio_port</varname>:
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<itemizedlist>
|
||||||
|
<listitem><para>
|
||||||
|
<varname>char *porttype</varname>: Required. Set this to one of the predefined
|
||||||
|
constants. Use <varname>UIO_PORT_X86</varname> for the ioports found in x86
|
||||||
|
architectures.
|
||||||
|
</para></listitem>
|
||||||
|
|
||||||
|
<listitem><para>
|
||||||
|
<varname>unsigned long start</varname>: Required if the port region is used.
|
||||||
|
Fill in the number of the first port of this region.
|
||||||
|
</para></listitem>
|
||||||
|
|
||||||
|
<listitem><para>
|
||||||
|
<varname>unsigned long size</varname>: Fill in the number of ports in this
|
||||||
|
region. If <varname>size</varname> is zero, the region is considered unused.
|
||||||
|
Note that you <emphasis>must</emphasis> initialize <varname>size</varname>
|
||||||
|
with zero for all unused regions.
|
||||||
|
</para></listitem>
|
||||||
|
</itemizedlist>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
Please do not touch the <varname>portio</varname> element of
|
||||||
|
<varname>struct uio_port</varname>! It is used internally by the UIO
|
||||||
|
framework to set up sysfs files for this region. Simply leave it alone.
|
||||||
|
</para>
|
||||||
|
|
||||||
</sect1>
|
</sect1>
|
||||||
|
|
||||||
<sect1 id="adding_irq_handler">
|
<sect1 id="adding_irq_handler">
|
||||||
|
@ -315,3 +315,15 @@ When: 2.6.29 (ideally) or 2.6.30 (more likely)
|
|||||||
Why: Deprecated by the new (standard) device driver binding model. Use
|
Why: Deprecated by the new (standard) device driver binding model. Use
|
||||||
i2c_driver->probe() and ->remove() instead.
|
i2c_driver->probe() and ->remove() instead.
|
||||||
Who: Jean Delvare <khali@linux-fr.org>
|
Who: Jean Delvare <khali@linux-fr.org>
|
||||||
|
|
||||||
|
---------------------------
|
||||||
|
|
||||||
|
What: SELinux "compat_net" functionality
|
||||||
|
When: 2.6.30 at the earliest
|
||||||
|
Why: In 2.6.18 the Secmark concept was introduced to replace the "compat_net"
|
||||||
|
network access control functionality of SELinux. Secmark offers both
|
||||||
|
better performance and greater flexibility than the "compat_net"
|
||||||
|
mechanism. Now that the major Linux distributions have moved to
|
||||||
|
Secmark, it is time to deprecate the older mechanism and start the
|
||||||
|
process of removing the old code.
|
||||||
|
Who: Paul Moore <paul.moore@hp.com>
|
||||||
|
@ -397,7 +397,7 @@ prototypes:
|
|||||||
};
|
};
|
||||||
|
|
||||||
locking rules:
|
locking rules:
|
||||||
All except ->poll() may block.
|
All may block.
|
||||||
BKL
|
BKL
|
||||||
llseek: no (see below)
|
llseek: no (see below)
|
||||||
read: no
|
read: no
|
||||||
|
@ -1385,6 +1385,15 @@ swapcache reclaim. Decreasing vfs_cache_pressure causes the kernel to prefer
|
|||||||
to retain dentry and inode caches. Increasing vfs_cache_pressure beyond 100
|
to retain dentry and inode caches. Increasing vfs_cache_pressure beyond 100
|
||||||
causes the kernel to prefer to reclaim dentries and inodes.
|
causes the kernel to prefer to reclaim dentries and inodes.
|
||||||
|
|
||||||
|
dirty_background_bytes
|
||||||
|
----------------------
|
||||||
|
|
||||||
|
Contains the amount of dirty memory at which the pdflush background writeback
|
||||||
|
daemon will start writeback.
|
||||||
|
|
||||||
|
If dirty_background_bytes is written, dirty_background_ratio becomes a function
|
||||||
|
of its value (dirty_background_bytes / the amount of dirtyable system memory).
|
||||||
|
|
||||||
dirty_background_ratio
|
dirty_background_ratio
|
||||||
----------------------
|
----------------------
|
||||||
|
|
||||||
@ -1393,14 +1402,29 @@ pages + file cache, not including locked pages and HugePages), the number of
|
|||||||
pages at which the pdflush background writeback daemon will start writing out
|
pages at which the pdflush background writeback daemon will start writing out
|
||||||
dirty data.
|
dirty data.
|
||||||
|
|
||||||
|
If dirty_background_ratio is written, dirty_background_bytes becomes a function
|
||||||
|
of its value (dirty_background_ratio * the amount of dirtyable system memory).
|
||||||
|
|
||||||
|
dirty_bytes
|
||||||
|
-----------
|
||||||
|
|
||||||
|
Contains the amount of dirty memory at which a process generating disk writes
|
||||||
|
will itself start writeback.
|
||||||
|
|
||||||
|
If dirty_bytes is written, dirty_ratio becomes a function of its value
|
||||||
|
(dirty_bytes / the amount of dirtyable system memory).
|
||||||
|
|
||||||
dirty_ratio
|
dirty_ratio
|
||||||
-----------------
|
-----------
|
||||||
|
|
||||||
Contains, as a percentage of the dirtyable system memory (free pages + mapped
|
Contains, as a percentage of the dirtyable system memory (free pages + mapped
|
||||||
pages + file cache, not including locked pages and HugePages), the number of
|
pages + file cache, not including locked pages and HugePages), the number of
|
||||||
pages at which a process which is generating disk writes will itself start
|
pages at which a process which is generating disk writes will itself start
|
||||||
writing out dirty data.
|
writing out dirty data.
|
||||||
|
|
||||||
|
If dirty_ratio is written, dirty_bytes becomes a function of its value
|
||||||
|
(dirty_ratio * the amount of dirtyable system memory).
|
||||||
|
|
||||||
dirty_writeback_centisecs
|
dirty_writeback_centisecs
|
||||||
-------------------------
|
-------------------------
|
||||||
|
|
||||||
|
@ -31,15 +31,11 @@ Each of the measured inputs (temperature, fan speed) has corresponding high/low
|
|||||||
limit values. The ADT7470 will signal an ALARM if any measured value exceeds
|
limit values. The ADT7470 will signal an ALARM if any measured value exceeds
|
||||||
either limit.
|
either limit.
|
||||||
|
|
||||||
The ADT7470 DOES NOT sample all inputs continuously. A single pin on the
|
The ADT7470 samples all inputs continuously. A kernel thread is started up for
|
||||||
ADT7470 is connected to a multitude of thermal diodes, but the chip must be
|
the purpose of periodically querying the temperature sensors, thus allowing the
|
||||||
instructed explicitly to read the multitude of diodes. If you want to use
|
automatic fan pwm control to set the fan speed. The driver will not read the
|
||||||
automatic fan control mode, you must manually read any of the temperature
|
registers more often than once every 5 seconds. Further, configuration data is
|
||||||
sensors or the fan control algorithm will not run. The chip WILL NOT DO THIS
|
only read once per minute.
|
||||||
AUTOMATICALLY; this must be done from userspace. This may be a bug in the chip
|
|
||||||
design, given that many other AD chips take care of this. The driver will not
|
|
||||||
read the registers more often than once every 5 seconds. Further,
|
|
||||||
configuration data is only read once per minute.
|
|
||||||
|
|
||||||
Special Features
|
Special Features
|
||||||
----------------
|
----------------
|
||||||
@ -72,5 +68,6 @@ pwm#_auto_point2_temp.
|
|||||||
Notes
|
Notes
|
||||||
-----
|
-----
|
||||||
|
|
||||||
As stated above, the temperature inputs must be read periodically from
|
The temperature inputs no longer need to be read periodically from userspace in
|
||||||
userspace in order for the automatic pwm algorithm to run.
|
order for the automatic pwm algorithm to run. This was the case for earlier
|
||||||
|
versions of the driver.
|
||||||
|
@ -11,3 +11,8 @@ unplug old device(s) and plug new device(s)
|
|||||||
# echo -n "1" > /sys/class/ide_port/idex/scan
|
# echo -n "1" > /sys/class/ide_port/idex/scan
|
||||||
|
|
||||||
done
|
done
|
||||||
|
|
||||||
|
NOTE: please make sure that partitions are unmounted and that there are
|
||||||
|
no other active references to devices before doing "delete_devices" step,
|
||||||
|
also do not attempt "scan" step on devices currently in use -- otherwise
|
||||||
|
results may be unpredictable and lead to data loss if you're unlucky
|
||||||
|
109
Documentation/input/walkera0701.txt
Normal file
109
Documentation/input/walkera0701.txt
Normal file
@ -0,0 +1,109 @@
|
|||||||
|
|
||||||
|
Walkera WK-0701 transmitter is supplied with a ready to fly Walkera
|
||||||
|
helicopters such as HM36, HM37, HM60. The walkera0701 module enables to use
|
||||||
|
this transmitter as joystick
|
||||||
|
|
||||||
|
Devel homepage and download:
|
||||||
|
http://zub.fei.tuke.sk/walkera-wk0701/
|
||||||
|
|
||||||
|
or use cogito:
|
||||||
|
cg-clone http://zub.fei.tuke.sk/GIT/walkera0701-joystick
|
||||||
|
|
||||||
|
|
||||||
|
Connecting to PC:
|
||||||
|
|
||||||
|
At back side of transmitter S-video connector can be found. Modulation
|
||||||
|
pulses from processor to HF part can be found at pin 2 of this connector,
|
||||||
|
pin 3 is GND. Between pin 3 and CPU 5k6 resistor can be found. To get
|
||||||
|
modulation pulses to PC, signal pulses must be amplified.
|
||||||
|
|
||||||
|
Cable: (walkera TX to parport)
|
||||||
|
|
||||||
|
Walkera WK-0701 TX S-VIDEO connector:
|
||||||
|
(back side of TX)
|
||||||
|
__ __ S-video: canon25
|
||||||
|
/ |_| \ pin 2 (signal) NPN parport
|
||||||
|
/ O 4 3 O \ pin 3 (GND) LED ________________ 10 ACK
|
||||||
|
( O 2 1 O ) | C
|
||||||
|
\ ___ / 2 ________________________|\|_____|/
|
||||||
|
| [___] | |/| B |\
|
||||||
|
------- 3 __________________________________|________________ 25 GND
|
||||||
|
E
|
||||||
|
|
||||||
|
|
||||||
|
I use green LED and BC109 NPN transistor.
|
||||||
|
|
||||||
|
Software:
|
||||||
|
|
||||||
|
Build kernel with walkera0701 module. Module walkera0701 need exclusive
|
||||||
|
access to parport, modules like lp must be unloaded before loading
|
||||||
|
walkera0701 module, check dmesg for error messages. Connect TX to PC by
|
||||||
|
cable and run jstest /dev/input/js0 to see values from TX. If no value can
|
||||||
|
be changed by TX "joystick", check output from /proc/interrupts. Value for
|
||||||
|
(usually irq7) parport must increase if TX is on.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Technical details:
|
||||||
|
|
||||||
|
Driver use interrupt from parport ACK input bit to measure pulse length
|
||||||
|
using hrtimers.
|
||||||
|
|
||||||
|
Frame format:
|
||||||
|
Based on walkera WK-0701 PCM Format description by Shaul Eizikovich.
|
||||||
|
(downloaded from http://www.smartpropoplus.com/Docs/Walkera_Wk-0701_PCM.pdf)
|
||||||
|
|
||||||
|
Signal pulses:
|
||||||
|
(ANALOG)
|
||||||
|
SYNC BIN OCT
|
||||||
|
+---------+ +------+
|
||||||
|
| | | |
|
||||||
|
--+ +------+ +---
|
||||||
|
|
||||||
|
Frame:
|
||||||
|
SYNC , BIN1, OCT1, BIN2, OCT2 ... BIN24, OCT24, BIN25, next frame SYNC ..
|
||||||
|
|
||||||
|
pulse length:
|
||||||
|
Binary values: Analog octal values:
|
||||||
|
|
||||||
|
288 uS Binary 0 318 uS 000
|
||||||
|
438 uS Binary 1 398 uS 001
|
||||||
|
478 uS 010
|
||||||
|
558 uS 011
|
||||||
|
638 uS 100
|
||||||
|
1306 uS SYNC 718 uS 101
|
||||||
|
798 uS 110
|
||||||
|
878 uS 111
|
||||||
|
|
||||||
|
24 bin+oct values + 1 bin value = 24*4+1 bits = 97 bits
|
||||||
|
|
||||||
|
(Warning, pulses on ACK ar inverted by transistor, irq is rised up on sync
|
||||||
|
to bin change or octal value to bin change).
|
||||||
|
|
||||||
|
Binary data representations:
|
||||||
|
|
||||||
|
One binary and octal value can be grouped to nibble. 24 nibbles + one binary
|
||||||
|
values can be sampled between sync pulses.
|
||||||
|
|
||||||
|
Values for first four channels (analog joystick values) can be found in
|
||||||
|
first 10 nibbles. Analog value is represented by one sign bit and 9 bit
|
||||||
|
absolute binary value. (10 bits per channel). Next nibble is checksum for
|
||||||
|
first ten nibbles.
|
||||||
|
|
||||||
|
Next nibbles 12 .. 21 represents four channels (not all channels can be
|
||||||
|
directly controlled from TX). Binary representations ar the same as in first
|
||||||
|
four channels. In nibbles 22 and 23 is a special magic number. Nibble 24 is
|
||||||
|
checksum for nibbles 12..23.
|
||||||
|
|
||||||
|
After last octal value for nibble 24 and next sync pulse one additional
|
||||||
|
binary value can be sampled. This bit and magic number is not used in
|
||||||
|
software driver. Some details about this magic numbers can be found in
|
||||||
|
Walkera_Wk-0701_PCM.pdf.
|
||||||
|
|
||||||
|
Checksum calculation:
|
||||||
|
|
||||||
|
Summary of octal values in nibbles must be same as octal value in checksum
|
||||||
|
nibble (only first 3 bits are used). Binary value for checksum nibble is
|
||||||
|
calculated by sum of binary values in checked nibbles + sum of octal values
|
||||||
|
in checked nibbles divided by 8. Only bit 0 of this sum is used.
|
||||||
|
|
@ -84,7 +84,7 @@ Code Seq# Include File Comments
|
|||||||
'B' C0-FF advanced bbus
|
'B' C0-FF advanced bbus
|
||||||
<mailto:maassen@uni-freiburg.de>
|
<mailto:maassen@uni-freiburg.de>
|
||||||
'C' all linux/soundcard.h
|
'C' all linux/soundcard.h
|
||||||
'D' all asm-s390/dasd.h
|
'D' all arch/s390/include/asm/dasd.h
|
||||||
'E' all linux/input.h
|
'E' all linux/input.h
|
||||||
'F' all linux/fb.h
|
'F' all linux/fb.h
|
||||||
'H' all linux/hiddev.h
|
'H' all linux/hiddev.h
|
||||||
@ -105,7 +105,7 @@ Code Seq# Include File Comments
|
|||||||
'S' 80-81 scsi/scsi_ioctl.h conflict!
|
'S' 80-81 scsi/scsi_ioctl.h conflict!
|
||||||
'S' 82-FF scsi/scsi.h conflict!
|
'S' 82-FF scsi/scsi.h conflict!
|
||||||
'T' all linux/soundcard.h conflict!
|
'T' all linux/soundcard.h conflict!
|
||||||
'T' all asm-i386/ioctls.h conflict!
|
'T' all arch/x86/include/asm/ioctls.h conflict!
|
||||||
'U' 00-EF linux/drivers/usb/usb.h
|
'U' 00-EF linux/drivers/usb/usb.h
|
||||||
'V' all linux/vt.h
|
'V' all linux/vt.h
|
||||||
'W' 00-1F linux/watchdog.h conflict!
|
'W' 00-1F linux/watchdog.h conflict!
|
||||||
@ -120,7 +120,7 @@ Code Seq# Include File Comments
|
|||||||
<mailto:natalia@nikhefk.nikhef.nl>
|
<mailto:natalia@nikhefk.nikhef.nl>
|
||||||
'c' 00-7F linux/comstats.h conflict!
|
'c' 00-7F linux/comstats.h conflict!
|
||||||
'c' 00-7F linux/coda.h conflict!
|
'c' 00-7F linux/coda.h conflict!
|
||||||
'c' 80-9F asm-s390/chsc.h
|
'c' 80-9F arch/s390/include/asm/chsc.h
|
||||||
'd' 00-FF linux/char/drm/drm/h conflict!
|
'd' 00-FF linux/char/drm/drm/h conflict!
|
||||||
'd' 00-DF linux/video_decoder.h conflict!
|
'd' 00-DF linux/video_decoder.h conflict!
|
||||||
'd' F0-FF linux/digi1.h
|
'd' F0-FF linux/digi1.h
|
||||||
@ -170,7 +170,7 @@ Code Seq# Include File Comments
|
|||||||
<mailto:oe@port.de>
|
<mailto:oe@port.de>
|
||||||
0x80 00-1F linux/fb.h
|
0x80 00-1F linux/fb.h
|
||||||
0x81 00-1F linux/videotext.h
|
0x81 00-1F linux/videotext.h
|
||||||
0x89 00-06 asm-i386/sockios.h
|
0x89 00-06 arch/x86/include/asm/sockios.h
|
||||||
0x89 0B-DF linux/sockios.h
|
0x89 0B-DF linux/sockios.h
|
||||||
0x89 E0-EF linux/sockios.h SIOCPROTOPRIVATE range
|
0x89 E0-EF linux/sockios.h SIOCPROTOPRIVATE range
|
||||||
0x89 F0-FF linux/sockios.h SIOCDEVPRIVATE range
|
0x89 F0-FF linux/sockios.h SIOCDEVPRIVATE range
|
||||||
|
@ -71,6 +71,11 @@ The @argument descriptions must begin on the very next line following
|
|||||||
this opening short function description line, with no intervening
|
this opening short function description line, with no intervening
|
||||||
empty comment lines.
|
empty comment lines.
|
||||||
|
|
||||||
|
If a function parameter is "..." (varargs), it should be listed in
|
||||||
|
kernel-doc notation as:
|
||||||
|
* @...: description
|
||||||
|
|
||||||
|
|
||||||
Example kernel-doc data structure comment.
|
Example kernel-doc data structure comment.
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -282,6 +287,32 @@ struct my_struct {
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
Including documentation blocks in source files
|
||||||
|
----------------------------------------------
|
||||||
|
|
||||||
|
To facilitate having source code and comments close together, you can
|
||||||
|
include kernel-doc documentation blocks that are free-form comments
|
||||||
|
instead of being kernel-doc for functions, structures, unions,
|
||||||
|
enums, or typedefs. This could be used for something like a
|
||||||
|
theory of operation for a driver or library code, for example.
|
||||||
|
|
||||||
|
This is done by using a DOC: section keyword with a section title. E.g.:
|
||||||
|
|
||||||
|
/**
|
||||||
|
* DOC: Theory of Operation
|
||||||
|
*
|
||||||
|
* The whizbang foobar is a dilly of a gizmo. It can do whatever you
|
||||||
|
* want it to do, at any time. It reads your mind. Here's how it works.
|
||||||
|
*
|
||||||
|
* foo bar splat
|
||||||
|
*
|
||||||
|
* The only drawback to this gizmo is that is can sometimes damage
|
||||||
|
* hardware, software, or its subject(s).
|
||||||
|
*/
|
||||||
|
|
||||||
|
DOC: sections are used in SGML templates files as indicated below.
|
||||||
|
|
||||||
|
|
||||||
How to make new SGML template files
|
How to make new SGML template files
|
||||||
-----------------------------------
|
-----------------------------------
|
||||||
|
|
||||||
@ -302,6 +333,9 @@ exported using EXPORT_SYMBOL.
|
|||||||
!F<filename> <function [functions...]> is replaced by the
|
!F<filename> <function [functions...]> is replaced by the
|
||||||
documentation, in <filename>, for the functions listed.
|
documentation, in <filename>, for the functions listed.
|
||||||
|
|
||||||
|
!P<filename> <section title> is replaced by the contents of the DOC:
|
||||||
|
section titled <section title> from <filename>.
|
||||||
|
Spaces are allowed in <section title>; do not quote the <section title>.
|
||||||
|
|
||||||
Tim.
|
Tim.
|
||||||
*/ <twaugh@redhat.com>
|
*/ <twaugh@redhat.com>
|
||||||
|
@ -469,8 +469,8 @@ and is between 256 and 4096 characters. It is defined in the file
|
|||||||
|
|
||||||
clearcpuid=BITNUM [X86]
|
clearcpuid=BITNUM [X86]
|
||||||
Disable CPUID feature X for the kernel. See
|
Disable CPUID feature X for the kernel. See
|
||||||
include/asm-x86/cpufeature.h for the valid bit numbers.
|
arch/x86/include/asm/cpufeature.h for the valid bit
|
||||||
Note the Linux specific bits are not necessarily
|
numbers. Note the Linux specific bits are not necessarily
|
||||||
stable over kernel options, but the vendor specific
|
stable over kernel options, but the vendor specific
|
||||||
ones should be.
|
ones should be.
|
||||||
Also note that user programs calling CPUID directly
|
Also note that user programs calling CPUID directly
|
||||||
@ -551,6 +551,11 @@ and is between 256 and 4096 characters. It is defined in the file
|
|||||||
not work reliably with all consoles, but is known
|
not work reliably with all consoles, but is known
|
||||||
to work with serial and VGA consoles.
|
to work with serial and VGA consoles.
|
||||||
|
|
||||||
|
coredump_filter=
|
||||||
|
[KNL] Change the default value for
|
||||||
|
/proc/<pid>/coredump_filter.
|
||||||
|
See also Documentation/filesystems/proc.txt.
|
||||||
|
|
||||||
cpcihp_generic= [HW,PCI] Generic port I/O CompactPCI driver
|
cpcihp_generic= [HW,PCI] Generic port I/O CompactPCI driver
|
||||||
Format:
|
Format:
|
||||||
<first_slot>,<last_slot>,<port>,<enum_bit>[,<debug>]
|
<first_slot>,<last_slot>,<port>,<enum_bit>[,<debug>]
|
||||||
@ -1117,6 +1122,8 @@ and is between 256 and 4096 characters. It is defined in the file
|
|||||||
If there are multiple matching configurations changing
|
If there are multiple matching configurations changing
|
||||||
the same attribute, the last one is used.
|
the same attribute, the last one is used.
|
||||||
|
|
||||||
|
lmb=debug [KNL] Enable lmb debug messages.
|
||||||
|
|
||||||
load_ramdisk= [RAM] List of ramdisks to load from floppy
|
load_ramdisk= [RAM] List of ramdisks to load from floppy
|
||||||
See Documentation/blockdev/ramdisk.txt.
|
See Documentation/blockdev/ramdisk.txt.
|
||||||
|
|
||||||
@ -1569,6 +1576,10 @@ and is between 256 and 4096 characters. It is defined in the file
|
|||||||
|
|
||||||
nr_uarts= [SERIAL] maximum number of UARTs to be registered.
|
nr_uarts= [SERIAL] maximum number of UARTs to be registered.
|
||||||
|
|
||||||
|
ohci1394_dma=early [HW] enable debugging via the ohci1394 driver.
|
||||||
|
See Documentation/debugging-via-ohci1394.txt for more
|
||||||
|
info.
|
||||||
|
|
||||||
olpc_ec_timeout= [OLPC] ms delay when issuing EC commands
|
olpc_ec_timeout= [OLPC] ms delay when issuing EC commands
|
||||||
Rather than timing out after 20 ms if an EC
|
Rather than timing out after 20 ms if an EC
|
||||||
command is not properly ACKed, override the length
|
command is not properly ACKed, override the length
|
||||||
@ -1793,10 +1804,10 @@ and is between 256 and 4096 characters. It is defined in the file
|
|||||||
autoconfiguration.
|
autoconfiguration.
|
||||||
Ranges are in pairs (memory base and size).
|
Ranges are in pairs (memory base and size).
|
||||||
|
|
||||||
dynamic_printk
|
dynamic_printk Enables pr_debug()/dev_dbg() calls if
|
||||||
Enables pr_debug()/dev_dbg() calls if
|
CONFIG_DYNAMIC_PRINTK_DEBUG has been enabled.
|
||||||
CONFIG_DYNAMIC_PRINTK_DEBUG has been enabled. These can also
|
These can also be switched on/off via
|
||||||
be switched on/off via <debugfs>/dynamic_printk/modules
|
<debugfs>/dynamic_printk/modules
|
||||||
|
|
||||||
print-fatal-signals=
|
print-fatal-signals=
|
||||||
[KNL] debug: print fatal signals
|
[KNL] debug: print fatal signals
|
||||||
@ -1884,7 +1895,7 @@ and is between 256 and 4096 characters. It is defined in the file
|
|||||||
|
|
||||||
reboot= [BUGS=X86-32,BUGS=ARM,BUGS=IA-64] Rebooting mode
|
reboot= [BUGS=X86-32,BUGS=ARM,BUGS=IA-64] Rebooting mode
|
||||||
Format: <reboot_mode>[,<reboot_mode2>[,...]]
|
Format: <reboot_mode>[,<reboot_mode2>[,...]]
|
||||||
See arch/*/kernel/reboot.c or arch/*/kernel/process.c
|
See arch/*/kernel/reboot.c or arch/*/kernel/process.c
|
||||||
|
|
||||||
relax_domain_level=
|
relax_domain_level=
|
||||||
[KNL, SMP] Set scheduler's default relax_domain_level.
|
[KNL, SMP] Set scheduler's default relax_domain_level.
|
||||||
@ -2432,8 +2443,8 @@ and is between 256 and 4096 characters. It is defined in the file
|
|||||||
Format:
|
Format:
|
||||||
<irq>,<irq_mask>,<io>,<full_duplex>,<do_sound>,<lockup_hack>[,<irq2>[,<irq3>[,<irq4>]]]
|
<irq>,<irq_mask>,<io>,<full_duplex>,<do_sound>,<lockup_hack>[,<irq2>[,<irq3>[,<irq4>]]]
|
||||||
|
|
||||||
norandmaps Don't use address space randomization
|
norandmaps Don't use address space randomization. Equivalent to
|
||||||
Equivalent to echo 0 > /proc/sys/kernel/randomize_va_space
|
echo 0 > /proc/sys/kernel/randomize_va_space
|
||||||
|
|
||||||
______________________________________________________________________
|
______________________________________________________________________
|
||||||
|
|
||||||
|
@ -118,8 +118,8 @@ the name of the kobject, call kobject_rename():
|
|||||||
|
|
||||||
int kobject_rename(struct kobject *kobj, const char *new_name);
|
int kobject_rename(struct kobject *kobj, const char *new_name);
|
||||||
|
|
||||||
Note kobject_rename does perform any locking or have a solid notion of
|
kobject_rename does not perform any locking or have a solid notion of
|
||||||
what names are valid so the provide must provide their own sanity checking
|
what names are valid so the caller must provide their own sanity checking
|
||||||
and serialization.
|
and serialization.
|
||||||
|
|
||||||
There is a function called kobject_set_name() but that is legacy cruft and
|
There is a function called kobject_set_name() but that is legacy cruft and
|
||||||
|
@ -497,7 +497,10 @@ The first column provides the kernel address where the probe is inserted.
|
|||||||
The second column identifies the type of probe (k - kprobe, r - kretprobe
|
The second column identifies the type of probe (k - kprobe, r - kretprobe
|
||||||
and j - jprobe), while the third column specifies the symbol+offset of
|
and j - jprobe), while the third column specifies the symbol+offset of
|
||||||
the probe. If the probed function belongs to a module, the module name
|
the probe. If the probed function belongs to a module, the module name
|
||||||
is also specified.
|
is also specified. Following columns show probe status. If the probe is on
|
||||||
|
a virtual address that is no longer valid (module init sections, module
|
||||||
|
virtual addresses that correspond to modules that've been unloaded),
|
||||||
|
such probes are marked with [GONE].
|
||||||
|
|
||||||
/debug/kprobes/enabled: Turn kprobes ON/OFF
|
/debug/kprobes/enabled: Turn kprobes ON/OFF
|
||||||
|
|
||||||
|
@ -125,14 +125,14 @@ TRIDENT_CARD_MAGIC 0x5072696E trident_card sound/oss/trident.c
|
|||||||
ROUTER_MAGIC 0x524d4157 wan_device include/linux/wanrouter.h
|
ROUTER_MAGIC 0x524d4157 wan_device include/linux/wanrouter.h
|
||||||
SCC_MAGIC 0x52696368 gs_port drivers/char/scc.h
|
SCC_MAGIC 0x52696368 gs_port drivers/char/scc.h
|
||||||
SAVEKMSG_MAGIC1 0x53415645 savekmsg arch/*/amiga/config.c
|
SAVEKMSG_MAGIC1 0x53415645 savekmsg arch/*/amiga/config.c
|
||||||
GDA_MAGIC 0x58464552 gda include/asm-mips64/sn/gda.h
|
GDA_MAGIC 0x58464552 gda arch/mips/include/asm/sn/gda.h
|
||||||
RED_MAGIC1 0x5a2cf071 (any) mm/slab.c
|
RED_MAGIC1 0x5a2cf071 (any) mm/slab.c
|
||||||
STL_PORTMAGIC 0x5a7182c9 stlport include/linux/stallion.h
|
STL_PORTMAGIC 0x5a7182c9 stlport include/linux/stallion.h
|
||||||
EEPROM_MAGIC_VALUE 0x5ab478d2 lanai_dev drivers/atm/lanai.c
|
EEPROM_MAGIC_VALUE 0x5ab478d2 lanai_dev drivers/atm/lanai.c
|
||||||
HDLCDRV_MAGIC 0x5ac6e778 hdlcdrv_state include/linux/hdlcdrv.h
|
HDLCDRV_MAGIC 0x5ac6e778 hdlcdrv_state include/linux/hdlcdrv.h
|
||||||
EPCA_MAGIC 0x5c6df104 channel include/linux/epca.h
|
EPCA_MAGIC 0x5c6df104 channel include/linux/epca.h
|
||||||
PCXX_MAGIC 0x5c6df104 channel drivers/char/pcxx.h
|
PCXX_MAGIC 0x5c6df104 channel drivers/char/pcxx.h
|
||||||
KV_MAGIC 0x5f4b565f kernel_vars_s include/asm-mips64/sn/klkernvars.h
|
KV_MAGIC 0x5f4b565f kernel_vars_s arch/mips/include/asm/sn/klkernvars.h
|
||||||
I810_STATE_MAGIC 0x63657373 i810_state sound/oss/i810_audio.c
|
I810_STATE_MAGIC 0x63657373 i810_state sound/oss/i810_audio.c
|
||||||
TRIDENT_STATE_MAGIC 0x63657373 trient_state sound/oss/trident.c
|
TRIDENT_STATE_MAGIC 0x63657373 trient_state sound/oss/trident.c
|
||||||
M3_CARD_MAGIC 0x646e6f50 m3_card sound/oss/maestro3.c
|
M3_CARD_MAGIC 0x646e6f50 m3_card sound/oss/maestro3.c
|
||||||
@ -158,7 +158,7 @@ CCB_MAGIC 0xf2691ad2 ccb drivers/scsi/ncr53c8xx.c
|
|||||||
QUEUE_MAGIC_FREE 0xf7e1c9a3 queue_entry drivers/scsi/arm/queue.c
|
QUEUE_MAGIC_FREE 0xf7e1c9a3 queue_entry drivers/scsi/arm/queue.c
|
||||||
QUEUE_MAGIC_USED 0xf7e1cc33 queue_entry drivers/scsi/arm/queue.c
|
QUEUE_MAGIC_USED 0xf7e1cc33 queue_entry drivers/scsi/arm/queue.c
|
||||||
HTB_CMAGIC 0xFEFAFEF1 htb_class net/sched/sch_htb.c
|
HTB_CMAGIC 0xFEFAFEF1 htb_class net/sched/sch_htb.c
|
||||||
NMI_MAGIC 0x48414d4d455201 nmi_s include/asm-mips64/sn/nmi.h
|
NMI_MAGIC 0x48414d4d455201 nmi_s arch/mips/include/asm/sn/nmi.h
|
||||||
|
|
||||||
Note that there are also defined special per-driver magic numbers in sound
|
Note that there are also defined special per-driver magic numbers in sound
|
||||||
memory management. See include/sound/sndmagic.h for complete list of them. Many
|
memory management. See include/sound/sndmagic.h for complete list of them. Many
|
||||||
|
@ -124,7 +124,7 @@ config options.
|
|||||||
This option can be kernel module too.
|
This option can be kernel module too.
|
||||||
|
|
||||||
--------------------------------
|
--------------------------------
|
||||||
3 sysfs files for memory hotplug
|
4 sysfs files for memory hotplug
|
||||||
--------------------------------
|
--------------------------------
|
||||||
All sections have their device information under /sys/devices/system/memory as
|
All sections have their device information under /sys/devices/system/memory as
|
||||||
|
|
||||||
@ -138,11 +138,12 @@ For example, assume 1GiB section size. A device for a memory starting at
|
|||||||
(0x100000000 / 1Gib = 4)
|
(0x100000000 / 1Gib = 4)
|
||||||
This device covers address range [0x100000000 ... 0x140000000)
|
This device covers address range [0x100000000 ... 0x140000000)
|
||||||
|
|
||||||
Under each section, you can see 3 files.
|
Under each section, you can see 4 files.
|
||||||
|
|
||||||
/sys/devices/system/memory/memoryXXX/phys_index
|
/sys/devices/system/memory/memoryXXX/phys_index
|
||||||
/sys/devices/system/memory/memoryXXX/phys_device
|
/sys/devices/system/memory/memoryXXX/phys_device
|
||||||
/sys/devices/system/memory/memoryXXX/state
|
/sys/devices/system/memory/memoryXXX/state
|
||||||
|
/sys/devices/system/memory/memoryXXX/removable
|
||||||
|
|
||||||
'phys_index' : read-only and contains section id, same as XXX.
|
'phys_index' : read-only and contains section id, same as XXX.
|
||||||
'state' : read-write
|
'state' : read-write
|
||||||
@ -150,10 +151,20 @@ Under each section, you can see 3 files.
|
|||||||
at write: user can specify "online", "offline" command
|
at write: user can specify "online", "offline" command
|
||||||
'phys_device': read-only: designed to show the name of physical memory device.
|
'phys_device': read-only: designed to show the name of physical memory device.
|
||||||
This is not well implemented now.
|
This is not well implemented now.
|
||||||
|
'removable' : read-only: contains an integer value indicating
|
||||||
|
whether the memory section is removable or not
|
||||||
|
removable. A value of 1 indicates that the memory
|
||||||
|
section is removable and a value of 0 indicates that
|
||||||
|
it is not removable.
|
||||||
|
|
||||||
NOTE:
|
NOTE:
|
||||||
These directories/files appear after physical memory hotplug phase.
|
These directories/files appear after physical memory hotplug phase.
|
||||||
|
|
||||||
|
If CONFIG_NUMA is enabled the
|
||||||
|
/sys/devices/system/memory/memoryXXX memory section
|
||||||
|
directories can also be accessed via symbolic links located in
|
||||||
|
the /sys/devices/system/node/node* directories. For example:
|
||||||
|
/sys/devices/system/node/node0/memory9 -> ../../memory/memory9
|
||||||
|
|
||||||
--------------------------------
|
--------------------------------
|
||||||
4. Physical memory hot-add phase
|
4. Physical memory hot-add phase
|
||||||
@ -365,7 +376,6 @@ node if necessary.
|
|||||||
- allowing memory hot-add to ZONE_MOVABLE. maybe we need some switch like
|
- allowing memory hot-add to ZONE_MOVABLE. maybe we need some switch like
|
||||||
sysctl or new control file.
|
sysctl or new control file.
|
||||||
- showing memory section and physical device relationship.
|
- showing memory section and physical device relationship.
|
||||||
- showing memory section and node relationship (maybe good for NUMA)
|
|
||||||
- showing memory section is under ZONE_MOVABLE or not
|
- showing memory section is under ZONE_MOVABLE or not
|
||||||
- test and make it better memory offlining.
|
- test and make it better memory offlining.
|
||||||
- support HugeTLB page migration and offlining.
|
- support HugeTLB page migration and offlining.
|
||||||
|
@ -44,7 +44,7 @@ FILES, CONFIGS AND COMPATABILITY
|
|||||||
|
|
||||||
Two files are introduced:
|
Two files are introduced:
|
||||||
|
|
||||||
a) 'include/asm-mips/mach-au1x00/au1xxx_ide.h'
|
a) 'arch/mips/include/asm/mach-au1x00/au1xxx_ide.h'
|
||||||
containes : struct _auide_hwif
|
containes : struct _auide_hwif
|
||||||
timing parameters for PIO mode 0/1/2/3/4
|
timing parameters for PIO mode 0/1/2/3/4
|
||||||
timing parameters for MWDMA 0/1/2
|
timing parameters for MWDMA 0/1/2
|
||||||
|
@ -31,7 +31,7 @@ anyways).
|
|||||||
|
|
||||||
After detecting the processor type, the kernel patches out sections of code
|
After detecting the processor type, the kernel patches out sections of code
|
||||||
that shouldn't be used by writing nop's over it. Using cpufeatures requires
|
that shouldn't be used by writing nop's over it. Using cpufeatures requires
|
||||||
just 2 macros (found in include/asm-ppc/cputable.h), as seen in head.S
|
just 2 macros (found in arch/powerpc/include/asm/cputable.h), as seen in head.S
|
||||||
transfer_to_handler:
|
transfer_to_handler:
|
||||||
|
|
||||||
#ifdef CONFIG_ALTIVEC
|
#ifdef CONFIG_ALTIVEC
|
||||||
|
@ -1402,7 +1402,7 @@ Syscalls are implemented on Linux for S390 by the Supervisor call instruction (S
|
|||||||
possibilities of these as the instruction is made up of a 0xA opcode & the second byte being
|
possibilities of these as the instruction is made up of a 0xA opcode & the second byte being
|
||||||
the syscall number. They are traced using the simple command.
|
the syscall number. They are traced using the simple command.
|
||||||
TR SVC <Optional value or range>
|
TR SVC <Optional value or range>
|
||||||
the syscalls are defined in linux/include/asm-s390/unistd.h
|
the syscalls are defined in linux/arch/s390/include/asm/unistd.h
|
||||||
e.g. to trace all file opens just do
|
e.g. to trace all file opens just do
|
||||||
TR SVC 5 ( as this is the syscall number of open )
|
TR SVC 5 ( as this is the syscall number of open )
|
||||||
|
|
||||||
|
@ -98,7 +98,7 @@ platform. Some of the interface routines are specific to Linux/390 and some
|
|||||||
of them can be found on other Linux platforms implementations too.
|
of them can be found on other Linux platforms implementations too.
|
||||||
Miscellaneous function prototypes, data declarations, and macro definitions
|
Miscellaneous function prototypes, data declarations, and macro definitions
|
||||||
can be found in the architecture specific C header file
|
can be found in the architecture specific C header file
|
||||||
linux/include/asm-s390/irq.h.
|
linux/arch/s390/include/asm/irq.h.
|
||||||
|
|
||||||
Overview of CDS interface concepts
|
Overview of CDS interface concepts
|
||||||
|
|
||||||
|
@ -2,7 +2,7 @@ S390 Debug Feature
|
|||||||
==================
|
==================
|
||||||
|
|
||||||
files: arch/s390/kernel/debug.c
|
files: arch/s390/kernel/debug.c
|
||||||
include/asm-s390/debug.h
|
arch/s390/include/asm/debug.h
|
||||||
|
|
||||||
Description:
|
Description:
|
||||||
------------
|
------------
|
||||||
|
@ -41,7 +41,8 @@ Currently, these files are in /proc/sys/vm:
|
|||||||
|
|
||||||
==============================================================
|
==============================================================
|
||||||
|
|
||||||
dirty_ratio, dirty_background_ratio, dirty_expire_centisecs,
|
dirty_bytes, dirty_ratio, dirty_background_bytes,
|
||||||
|
dirty_background_ratio, dirty_expire_centisecs,
|
||||||
dirty_writeback_centisecs, highmem_is_dirtyable,
|
dirty_writeback_centisecs, highmem_is_dirtyable,
|
||||||
vfs_cache_pressure, laptop_mode, block_dump, swap_token_timeout,
|
vfs_cache_pressure, laptop_mode, block_dump, swap_token_timeout,
|
||||||
drop-caches, hugepages_treat_as_movable:
|
drop-caches, hugepages_treat_as_movable:
|
||||||
|
@ -137,13 +137,6 @@ shrink_page_list() where they will be detected when vmscan walks the reverse
|
|||||||
map in try_to_unmap(). If try_to_unmap() returns SWAP_MLOCK, shrink_page_list()
|
map in try_to_unmap(). If try_to_unmap() returns SWAP_MLOCK, shrink_page_list()
|
||||||
will cull the page at that point.
|
will cull the page at that point.
|
||||||
|
|
||||||
Note that for anonymous pages, shrink_page_list() attempts to add the page to
|
|
||||||
the swap cache before it tries to unmap the page. To avoid this unnecessary
|
|
||||||
consumption of swap space, shrink_page_list() calls try_to_munlock() to check
|
|
||||||
whether any VM_LOCKED vmas map the page without attempting to unmap the page.
|
|
||||||
If try_to_munlock() returns SWAP_MLOCK, shrink_page_list() will cull the page
|
|
||||||
without consuming swap space. try_to_munlock() will be described below.
|
|
||||||
|
|
||||||
To "cull" an unevictable page, vmscan simply puts the page back on the lru
|
To "cull" an unevictable page, vmscan simply puts the page back on the lru
|
||||||
list using putback_lru_page()--the inverse operation to isolate_lru_page()--
|
list using putback_lru_page()--the inverse operation to isolate_lru_page()--
|
||||||
after dropping the page lock. Because the condition which makes the page
|
after dropping the page lock. Because the condition which makes the page
|
||||||
@ -190,8 +183,8 @@ several places:
|
|||||||
in the VM_LOCKED flag being set for the vma.
|
in the VM_LOCKED flag being set for the vma.
|
||||||
3) in the fault path, if mlocked pages are "culled" in the fault path,
|
3) in the fault path, if mlocked pages are "culled" in the fault path,
|
||||||
and when a VM_LOCKED stack segment is expanded.
|
and when a VM_LOCKED stack segment is expanded.
|
||||||
4) as mentioned above, in vmscan:shrink_page_list() with attempting to
|
4) as mentioned above, in vmscan:shrink_page_list() when attempting to
|
||||||
reclaim a page in a VM_LOCKED vma--via try_to_unmap() or try_to_munlock().
|
reclaim a page in a VM_LOCKED vma via try_to_unmap().
|
||||||
|
|
||||||
Mlocked pages become unlocked and rescued from the unevictable list when:
|
Mlocked pages become unlocked and rescued from the unevictable list when:
|
||||||
|
|
||||||
@ -260,9 +253,9 @@ mlock_fixup() filters several classes of "special" vmas:
|
|||||||
|
|
||||||
2) vmas mapping hugetlbfs page are already effectively pinned into memory.
|
2) vmas mapping hugetlbfs page are already effectively pinned into memory.
|
||||||
We don't need nor want to mlock() these pages. However, to preserve the
|
We don't need nor want to mlock() these pages. However, to preserve the
|
||||||
prior behavior of mlock()--before the unevictable/mlock changes--mlock_fixup()
|
prior behavior of mlock()--before the unevictable/mlock changes--
|
||||||
will call make_pages_present() in the hugetlbfs vma range to allocate the
|
mlock_fixup() will call make_pages_present() in the hugetlbfs vma range
|
||||||
huge pages and populate the ptes.
|
to allocate the huge pages and populate the ptes.
|
||||||
|
|
||||||
3) vmas with VM_DONTEXPAND|VM_RESERVED are generally user space mappings of
|
3) vmas with VM_DONTEXPAND|VM_RESERVED are generally user space mappings of
|
||||||
kernel pages, such as the vdso page, relay channel pages, etc. These pages
|
kernel pages, such as the vdso page, relay channel pages, etc. These pages
|
||||||
@ -322,7 +315,7 @@ __mlock_vma_pages_range()--the same function used to mlock a vma range--
|
|||||||
passing a flag to indicate that munlock() is being performed.
|
passing a flag to indicate that munlock() is being performed.
|
||||||
|
|
||||||
Because the vma access protections could have been changed to PROT_NONE after
|
Because the vma access protections could have been changed to PROT_NONE after
|
||||||
faulting in and mlocking some pages, get_user_pages() was unreliable for visiting
|
faulting in and mlocking pages, get_user_pages() was unreliable for visiting
|
||||||
these pages for munlocking. Because we don't want to leave pages mlocked(),
|
these pages for munlocking. Because we don't want to leave pages mlocked(),
|
||||||
get_user_pages() was enhanced to accept a flag to ignore the permissions when
|
get_user_pages() was enhanced to accept a flag to ignore the permissions when
|
||||||
fetching the pages--all of which should be resident as a result of previous
|
fetching the pages--all of which should be resident as a result of previous
|
||||||
@ -416,8 +409,8 @@ Mlocked Pages: munmap()/exit()/exec() System Call Handling
|
|||||||
When unmapping an mlocked region of memory, whether by an explicit call to
|
When unmapping an mlocked region of memory, whether by an explicit call to
|
||||||
munmap() or via an internal unmap from exit() or exec() processing, we must
|
munmap() or via an internal unmap from exit() or exec() processing, we must
|
||||||
munlock the pages if we're removing the last VM_LOCKED vma that maps the pages.
|
munlock the pages if we're removing the last VM_LOCKED vma that maps the pages.
|
||||||
Before the unevictable/mlock changes, mlocking did not mark the pages in any way,
|
Before the unevictable/mlock changes, mlocking did not mark the pages in any
|
||||||
so unmapping them required no processing.
|
way, so unmapping them required no processing.
|
||||||
|
|
||||||
To munlock a range of memory under the unevictable/mlock infrastructure, the
|
To munlock a range of memory under the unevictable/mlock infrastructure, the
|
||||||
munmap() hander and task address space tear down function call
|
munmap() hander and task address space tear down function call
|
||||||
@ -517,12 +510,10 @@ couldn't be mlocked.
|
|||||||
Mlocked pages: try_to_munlock() Reverse Map Scan
|
Mlocked pages: try_to_munlock() Reverse Map Scan
|
||||||
|
|
||||||
TODO/FIXME: a better name might be page_mlocked()--analogous to the
|
TODO/FIXME: a better name might be page_mlocked()--analogous to the
|
||||||
page_referenced() reverse map walker--especially if we continue to call this
|
page_referenced() reverse map walker.
|
||||||
from shrink_page_list(). See related TODO/FIXME below.
|
|
||||||
|
|
||||||
When munlock_vma_page()--see "Mlocked Pages: munlock()/munlockall() System
|
When munlock_vma_page()--see "Mlocked Pages: munlock()/munlockall()
|
||||||
Call Handling" above--tries to munlock a page, or when shrink_page_list()
|
System Call Handling" above--tries to munlock a page, it needs to
|
||||||
encounters an anonymous page that is not yet in the swap cache, they need to
|
|
||||||
determine whether or not the page is mapped by any VM_LOCKED vma, without
|
determine whether or not the page is mapped by any VM_LOCKED vma, without
|
||||||
actually attempting to unmap all ptes from the page. For this purpose, the
|
actually attempting to unmap all ptes from the page. For this purpose, the
|
||||||
unevictable/mlock infrastructure introduced a variant of try_to_unmap() called
|
unevictable/mlock infrastructure introduced a variant of try_to_unmap() called
|
||||||
@ -535,10 +526,7 @@ for VM_LOCKED vmas. When such a vma is found for anonymous pages and file
|
|||||||
pages mapped in linear VMAs, as in the try_to_unmap() case, the functions
|
pages mapped in linear VMAs, as in the try_to_unmap() case, the functions
|
||||||
attempt to acquire the associated mmap semphore, mlock the page via
|
attempt to acquire the associated mmap semphore, mlock the page via
|
||||||
mlock_vma_page() and return SWAP_MLOCK. This effectively undoes the
|
mlock_vma_page() and return SWAP_MLOCK. This effectively undoes the
|
||||||
pre-clearing of the page's PG_mlocked done by munlock_vma_page() and informs
|
pre-clearing of the page's PG_mlocked done by munlock_vma_page.
|
||||||
shrink_page_list() that the anonymous page should be culled rather than added
|
|
||||||
to the swap cache in preparation for a try_to_unmap() that will almost
|
|
||||||
certainly fail.
|
|
||||||
|
|
||||||
If try_to_unmap() is unable to acquire a VM_LOCKED vma's associated mmap
|
If try_to_unmap() is unable to acquire a VM_LOCKED vma's associated mmap
|
||||||
semaphore, it will return SWAP_AGAIN. This will allow shrink_page_list()
|
semaphore, it will return SWAP_AGAIN. This will allow shrink_page_list()
|
||||||
@ -557,10 +545,7 @@ However, the scan can terminate when it encounters a VM_LOCKED vma and can
|
|||||||
successfully acquire the vma's mmap semphore for read and mlock the page.
|
successfully acquire the vma's mmap semphore for read and mlock the page.
|
||||||
Although try_to_munlock() can be called many [very many!] times when
|
Although try_to_munlock() can be called many [very many!] times when
|
||||||
munlock()ing a large region or tearing down a large address space that has been
|
munlock()ing a large region or tearing down a large address space that has been
|
||||||
mlocked via mlockall(), overall this is a fairly rare event. In addition,
|
mlocked via mlockall(), overall this is a fairly rare event.
|
||||||
although shrink_page_list() calls try_to_munlock() for every anonymous page that
|
|
||||||
it handles that is not yet in the swap cache, on average anonymous pages will
|
|
||||||
have very short reverse map lists.
|
|
||||||
|
|
||||||
Mlocked Page: Page Reclaim in shrink_*_list()
|
Mlocked Page: Page Reclaim in shrink_*_list()
|
||||||
|
|
||||||
@ -588,8 +573,8 @@ Some examples of these unevictable pages on the LRU lists are:
|
|||||||
munlock_vma_page() was forced to let the page back on to the normal
|
munlock_vma_page() was forced to let the page back on to the normal
|
||||||
LRU list for vmscan to handle.
|
LRU list for vmscan to handle.
|
||||||
|
|
||||||
shrink_inactive_list() also culls any unevictable pages that it finds
|
shrink_inactive_list() also culls any unevictable pages that it finds on
|
||||||
on the inactive lists, again diverting them to the appropriate zone's unevictable
|
the inactive lists, again diverting them to the appropriate zone's unevictable
|
||||||
lru list. shrink_inactive_list() should only see SHM_LOCKed pages that became
|
lru list. shrink_inactive_list() should only see SHM_LOCKed pages that became
|
||||||
SHM_LOCKed after shrink_active_list() had moved them to the inactive list, or
|
SHM_LOCKed after shrink_active_list() had moved them to the inactive list, or
|
||||||
pages mapped into VM_LOCKED vmas that munlock_vma_page() couldn't isolate from
|
pages mapped into VM_LOCKED vmas that munlock_vma_page() couldn't isolate from
|
||||||
@ -597,19 +582,7 @@ the lru to recheck via try_to_munlock(). shrink_inactive_list() won't notice
|
|||||||
the latter, but will pass on to shrink_page_list().
|
the latter, but will pass on to shrink_page_list().
|
||||||
|
|
||||||
shrink_page_list() again culls obviously unevictable pages that it could
|
shrink_page_list() again culls obviously unevictable pages that it could
|
||||||
encounter for similar reason to shrink_inactive_list(). As already discussed,
|
encounter for similar reason to shrink_inactive_list(). Pages mapped into
|
||||||
shrink_page_list() proactively looks for anonymous pages that should have
|
|
||||||
PG_mlocked set but don't--these would not be detected by page_evictable()--to
|
|
||||||
avoid adding them to the swap cache unnecessarily. File pages mapped into
|
|
||||||
VM_LOCKED vmas but without PG_mlocked set will make it all the way to
|
VM_LOCKED vmas but without PG_mlocked set will make it all the way to
|
||||||
try_to_unmap(). shrink_page_list() will divert them to the unevictable list when
|
try_to_unmap(). shrink_page_list() will divert them to the unevictable list
|
||||||
try_to_unmap() returns SWAP_MLOCK, as discussed above.
|
when try_to_unmap() returns SWAP_MLOCK, as discussed above.
|
||||||
|
|
||||||
TODO/FIXME: If we can enhance the swap cache to reliably remove entries
|
|
||||||
with page_count(page) > 2, as long as all ptes are mapped to the page and
|
|
||||||
not the swap entry, we can probably remove the call to try_to_munlock() in
|
|
||||||
shrink_page_list() and just remove the page from the swap cache when
|
|
||||||
try_to_unmap() returns SWAP_MLOCK. Currently, remove_exclusive_swap_page()
|
|
||||||
doesn't seem to allow that.
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -3,7 +3,7 @@ protocol of kernel. These should be filled by bootloader or 16-bit
|
|||||||
real-mode setup code of the kernel. References/settings to it mainly
|
real-mode setup code of the kernel. References/settings to it mainly
|
||||||
are in:
|
are in:
|
||||||
|
|
||||||
include/asm-x86/bootparam.h
|
arch/x86/include/asm/bootparam.h
|
||||||
|
|
||||||
|
|
||||||
Offset Proto Name Meaning
|
Offset Proto Name Meaning
|
||||||
|
@ -616,7 +616,7 @@ M: mkpetch@internode.on.net
|
|||||||
S: Maintained
|
S: Maintained
|
||||||
|
|
||||||
ARM/TOSA MACHINE SUPPORT
|
ARM/TOSA MACHINE SUPPORT
|
||||||
P: Dmitry Baryshkov
|
P: Dmitry Eremin-Solenikov
|
||||||
M: dbaryshkov@gmail.com
|
M: dbaryshkov@gmail.com
|
||||||
P: Dirk Opfer
|
P: Dirk Opfer
|
||||||
M: dirk@opfer-online.de
|
M: dirk@opfer-online.de
|
||||||
@ -1092,11 +1092,8 @@ S: Maintained
|
|||||||
|
|
||||||
CHECKPATCH
|
CHECKPATCH
|
||||||
P: Andy Whitcroft
|
P: Andy Whitcroft
|
||||||
M: apw@shadowen.org
|
M: apw@canonical.com
|
||||||
P: Randy Dunlap
|
L: linux-kernel@vger.kernel.org
|
||||||
M: rdunlap@xenotime.net
|
|
||||||
P: Joel Schopp
|
|
||||||
M: jschopp@austin.ibm.com
|
|
||||||
S: Supported
|
S: Supported
|
||||||
|
|
||||||
CISCO 10G ETHERNET DRIVER
|
CISCO 10G ETHERNET DRIVER
|
||||||
|
@ -9,3 +9,4 @@ unifdef-y += console.h
|
|||||||
unifdef-y += fpu.h
|
unifdef-y += fpu.h
|
||||||
unifdef-y += sysinfo.h
|
unifdef-y += sysinfo.h
|
||||||
unifdef-y += compiler.h
|
unifdef-y += compiler.h
|
||||||
|
unifdef-y += swab.h
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
#ifndef _ALPHA_ATOMIC_H
|
#ifndef _ALPHA_ATOMIC_H
|
||||||
#define _ALPHA_ATOMIC_H
|
#define _ALPHA_ATOMIC_H
|
||||||
|
|
||||||
|
#include <linux/types.h>
|
||||||
#include <asm/barrier.h>
|
#include <asm/barrier.h>
|
||||||
#include <asm/system.h>
|
#include <asm/system.h>
|
||||||
|
|
||||||
@ -13,14 +14,6 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Counter is volatile to make sure gcc doesn't try to be clever
|
|
||||||
* and move things around on us. We need to use _exactly_ the address
|
|
||||||
* the user gave us, not some alias that contains the same information.
|
|
||||||
*/
|
|
||||||
typedef struct { volatile int counter; } atomic_t;
|
|
||||||
typedef struct { volatile long counter; } atomic64_t;
|
|
||||||
|
|
||||||
#define ATOMIC_INIT(i) ( (atomic_t) { (i) } )
|
#define ATOMIC_INIT(i) ( (atomic_t) { (i) } )
|
||||||
#define ATOMIC64_INIT(i) ( (atomic64_t) { (i) } )
|
#define ATOMIC64_INIT(i) ( (atomic64_t) { (i) } )
|
||||||
|
|
||||||
|
@ -1,47 +1,7 @@
|
|||||||
#ifndef _ALPHA_BYTEORDER_H
|
#ifndef _ALPHA_BYTEORDER_H
|
||||||
#define _ALPHA_BYTEORDER_H
|
#define _ALPHA_BYTEORDER_H
|
||||||
|
|
||||||
#include <asm/types.h>
|
#include <asm/swab.h>
|
||||||
#include <linux/compiler.h>
|
|
||||||
#include <asm/compiler.h>
|
|
||||||
|
|
||||||
#ifdef __GNUC__
|
|
||||||
|
|
||||||
static inline __attribute_const__ __u32 __arch__swab32(__u32 x)
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
* Unfortunately, we can't use the 6 instruction sequence
|
|
||||||
* on ev6 since the latency of the UNPKBW is 3, which is
|
|
||||||
* pretty hard to hide. Just in case a future implementation
|
|
||||||
* has a lower latency, here's the sequence (also by Mike Burrows)
|
|
||||||
*
|
|
||||||
* UNPKBW a0, v0 v0: 00AA00BB00CC00DD
|
|
||||||
* SLL v0, 24, a0 a0: BB00CC00DD000000
|
|
||||||
* BIS v0, a0, a0 a0: BBAACCBBDDCC00DD
|
|
||||||
* EXTWL a0, 6, v0 v0: 000000000000BBAA
|
|
||||||
* ZAP a0, 0xf3, a0 a0: 00000000DDCC0000
|
|
||||||
* ADDL a0, v0, v0 v0: ssssssssDDCCBBAA
|
|
||||||
*/
|
|
||||||
|
|
||||||
__u64 t0, t1, t2, t3;
|
|
||||||
|
|
||||||
t0 = __kernel_inslh(x, 7); /* t0 : 0000000000AABBCC */
|
|
||||||
t1 = __kernel_inswl(x, 3); /* t1 : 000000CCDD000000 */
|
|
||||||
t1 |= t0; /* t1 : 000000CCDDAABBCC */
|
|
||||||
t2 = t1 >> 16; /* t2 : 0000000000CCDDAA */
|
|
||||||
t0 = t1 & 0xFF00FF00; /* t0 : 00000000DD00BB00 */
|
|
||||||
t3 = t2 & 0x00FF00FF; /* t3 : 0000000000CC00AA */
|
|
||||||
t1 = t0 + t3; /* t1 : ssssssssDDCCBBAA */
|
|
||||||
|
|
||||||
return t1;
|
|
||||||
}
|
|
||||||
|
|
||||||
#define __arch__swab32 __arch__swab32
|
|
||||||
|
|
||||||
#endif /* __GNUC__ */
|
|
||||||
|
|
||||||
#define __BYTEORDER_HAS_U64__
|
|
||||||
|
|
||||||
#include <linux/byteorder/little_endian.h>
|
#include <linux/byteorder/little_endian.h>
|
||||||
|
|
||||||
#endif /* _ALPHA_BYTEORDER_H */
|
#endif /* _ALPHA_BYTEORDER_H */
|
||||||
|
42
arch/alpha/include/asm/swab.h
Normal file
42
arch/alpha/include/asm/swab.h
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
#ifndef _ALPHA_SWAB_H
|
||||||
|
#define _ALPHA_SWAB_H
|
||||||
|
|
||||||
|
#include <asm/types.h>
|
||||||
|
#include <linux/compiler.h>
|
||||||
|
#include <asm/compiler.h>
|
||||||
|
|
||||||
|
#ifdef __GNUC__
|
||||||
|
|
||||||
|
static inline __attribute_const__ __u32 __arch_swab32(__u32 x)
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* Unfortunately, we can't use the 6 instruction sequence
|
||||||
|
* on ev6 since the latency of the UNPKBW is 3, which is
|
||||||
|
* pretty hard to hide. Just in case a future implementation
|
||||||
|
* has a lower latency, here's the sequence (also by Mike Burrows)
|
||||||
|
*
|
||||||
|
* UNPKBW a0, v0 v0: 00AA00BB00CC00DD
|
||||||
|
* SLL v0, 24, a0 a0: BB00CC00DD000000
|
||||||
|
* BIS v0, a0, a0 a0: BBAACCBBDDCC00DD
|
||||||
|
* EXTWL a0, 6, v0 v0: 000000000000BBAA
|
||||||
|
* ZAP a0, 0xf3, a0 a0: 00000000DDCC0000
|
||||||
|
* ADDL a0, v0, v0 v0: ssssssssDDCCBBAA
|
||||||
|
*/
|
||||||
|
|
||||||
|
__u64 t0, t1, t2, t3;
|
||||||
|
|
||||||
|
t0 = __kernel_inslh(x, 7); /* t0 : 0000000000AABBCC */
|
||||||
|
t1 = __kernel_inswl(x, 3); /* t1 : 000000CCDD000000 */
|
||||||
|
t1 |= t0; /* t1 : 000000CCDDAABBCC */
|
||||||
|
t2 = t1 >> 16; /* t2 : 0000000000CCDDAA */
|
||||||
|
t0 = t1 & 0xFF00FF00; /* t0 : 00000000DD00BB00 */
|
||||||
|
t3 = t2 & 0x00FF00FF; /* t3 : 0000000000CC00AA */
|
||||||
|
t1 = t0 + t3; /* t1 : ssssssssDDCCBBAA */
|
||||||
|
|
||||||
|
return t1;
|
||||||
|
}
|
||||||
|
#define __arch_swab32 __arch_swab32
|
||||||
|
|
||||||
|
#endif /* __GNUC__ */
|
||||||
|
|
||||||
|
#endif /* _ALPHA_SWAB_H */
|
@ -1325,6 +1325,8 @@ source "drivers/regulator/Kconfig"
|
|||||||
|
|
||||||
source "drivers/uio/Kconfig"
|
source "drivers/uio/Kconfig"
|
||||||
|
|
||||||
|
source "drivers/staging/Kconfig"
|
||||||
|
|
||||||
endmenu
|
endmenu
|
||||||
|
|
||||||
source "fs/Kconfig"
|
source "fs/Kconfig"
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
include include/asm-generic/Kbuild.asm
|
include include/asm-generic/Kbuild.asm
|
||||||
|
|
||||||
unifdef-y += hwcap.h
|
unifdef-y += hwcap.h
|
||||||
|
unifdef-y += swab.h
|
||||||
|
@ -12,10 +12,9 @@
|
|||||||
#define __ASM_ARM_ATOMIC_H
|
#define __ASM_ARM_ATOMIC_H
|
||||||
|
|
||||||
#include <linux/compiler.h>
|
#include <linux/compiler.h>
|
||||||
|
#include <linux/types.h>
|
||||||
#include <asm/system.h>
|
#include <asm/system.h>
|
||||||
|
|
||||||
typedef struct { volatile int counter; } atomic_t;
|
|
||||||
|
|
||||||
#define ATOMIC_INIT(i) { (i) }
|
#define ATOMIC_INIT(i) { (i) }
|
||||||
|
|
||||||
#ifdef __KERNEL__
|
#ifdef __KERNEL__
|
||||||
|
@ -15,38 +15,7 @@
|
|||||||
#ifndef __ASM_ARM_BYTEORDER_H
|
#ifndef __ASM_ARM_BYTEORDER_H
|
||||||
#define __ASM_ARM_BYTEORDER_H
|
#define __ASM_ARM_BYTEORDER_H
|
||||||
|
|
||||||
#include <linux/compiler.h>
|
#include <asm/swab.h>
|
||||||
#include <asm/types.h>
|
|
||||||
|
|
||||||
static inline __attribute_const__ __u32 ___arch__swab32(__u32 x)
|
|
||||||
{
|
|
||||||
__u32 t;
|
|
||||||
|
|
||||||
#ifndef __thumb__
|
|
||||||
if (!__builtin_constant_p(x)) {
|
|
||||||
/*
|
|
||||||
* The compiler needs a bit of a hint here to always do the
|
|
||||||
* right thing and not screw it up to different degrees
|
|
||||||
* depending on the gcc version.
|
|
||||||
*/
|
|
||||||
asm ("eor\t%0, %1, %1, ror #16" : "=r" (t) : "r" (x));
|
|
||||||
} else
|
|
||||||
#endif
|
|
||||||
t = x ^ ((x << 16) | (x >> 16)); /* eor r1,r0,r0,ror #16 */
|
|
||||||
|
|
||||||
x = (x << 24) | (x >> 8); /* mov r0,r0,ror #8 */
|
|
||||||
t &= ~0x00FF0000; /* bic r1,r1,#0x00FF0000 */
|
|
||||||
x ^= (t >> 8); /* eor r0,r0,r1,lsr #8 */
|
|
||||||
|
|
||||||
return x;
|
|
||||||
}
|
|
||||||
|
|
||||||
#define __arch__swab32(x) ___arch__swab32(x)
|
|
||||||
|
|
||||||
#if !defined(__STRICT_ANSI__) || defined(__KERNEL__)
|
|
||||||
# define __BYTEORDER_HAS_U64__
|
|
||||||
# define __SWAB_64_THRU_32__
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef __ARMEB__
|
#ifdef __ARMEB__
|
||||||
#include <linux/byteorder/big_endian.h>
|
#include <linux/byteorder/big_endian.h>
|
||||||
|
50
arch/arm/include/asm/swab.h
Normal file
50
arch/arm/include/asm/swab.h
Normal file
@ -0,0 +1,50 @@
|
|||||||
|
/*
|
||||||
|
* arch/arm/include/asm/byteorder.h
|
||||||
|
*
|
||||||
|
* ARM Endian-ness. In little endian mode, the data bus is connected such
|
||||||
|
* that byte accesses appear as:
|
||||||
|
* 0 = d0...d7, 1 = d8...d15, 2 = d16...d23, 3 = d24...d31
|
||||||
|
* and word accesses (data or instruction) appear as:
|
||||||
|
* d0...d31
|
||||||
|
*
|
||||||
|
* When in big endian mode, byte accesses appear as:
|
||||||
|
* 0 = d24...d31, 1 = d16...d23, 2 = d8...d15, 3 = d0...d7
|
||||||
|
* and word accesses (data or instruction) appear as:
|
||||||
|
* d0...d31
|
||||||
|
*/
|
||||||
|
#ifndef __ASM_ARM_SWAB_H
|
||||||
|
#define __ASM_ARM_SWAB_H
|
||||||
|
|
||||||
|
#include <linux/compiler.h>
|
||||||
|
#include <asm/types.h>
|
||||||
|
|
||||||
|
#if !defined(__STRICT_ANSI__) || defined(__KERNEL__)
|
||||||
|
# define __SWAB_64_THRU_32__
|
||||||
|
#endif
|
||||||
|
|
||||||
|
static inline __attribute_const__ __u32 __arch_swab32(__u32 x)
|
||||||
|
{
|
||||||
|
__u32 t;
|
||||||
|
|
||||||
|
#ifndef __thumb__
|
||||||
|
if (!__builtin_constant_p(x)) {
|
||||||
|
/*
|
||||||
|
* The compiler needs a bit of a hint here to always do the
|
||||||
|
* right thing and not screw it up to different degrees
|
||||||
|
* depending on the gcc version.
|
||||||
|
*/
|
||||||
|
asm ("eor\t%0, %1, %1, ror #16" : "=r" (t) : "r" (x));
|
||||||
|
} else
|
||||||
|
#endif
|
||||||
|
t = x ^ ((x << 16) | (x >> 16)); /* eor r1,r0,r0,ror #16 */
|
||||||
|
|
||||||
|
x = (x << 24) | (x >> 8); /* mov r0,r0,ror #8 */
|
||||||
|
t &= ~0x00FF0000; /* bic r1,r1,#0x00FF0000 */
|
||||||
|
x ^= (t >> 8); /* eor r0,r0,r1,lsr #8 */
|
||||||
|
|
||||||
|
return x;
|
||||||
|
}
|
||||||
|
#define __arch_swab32 __arch_swab32
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
@ -817,7 +817,7 @@ static struct expansion_card *__init ecard_alloc_card(int type, int slot)
|
|||||||
ec->dma = NO_DMA;
|
ec->dma = NO_DMA;
|
||||||
ec->ops = &ecard_default_ops;
|
ec->ops = &ecard_default_ops;
|
||||||
|
|
||||||
snprintf(ec->dev.bus_id, sizeof(ec->dev.bus_id), "ecard%d", slot);
|
dev_set_name(&ec->dev, "ecard%d", slot);
|
||||||
ec->dev.parent = NULL;
|
ec->dev.parent = NULL;
|
||||||
ec->dev.bus = &ecard_bus_type;
|
ec->dev.bus = &ecard_bus_type;
|
||||||
ec->dev.dma_mask = &ec->dma_mask;
|
ec->dev.dma_mask = &ec->dma_mask;
|
||||||
|
@ -92,9 +92,7 @@ void __kprobes arch_disarm_kprobe(struct kprobe *p)
|
|||||||
void __kprobes arch_remove_kprobe(struct kprobe *p)
|
void __kprobes arch_remove_kprobe(struct kprobe *p)
|
||||||
{
|
{
|
||||||
if (p->ainsn.insn) {
|
if (p->ainsn.insn) {
|
||||||
mutex_lock(&kprobe_mutex);
|
|
||||||
free_insn_slot(p->ainsn.insn, 0);
|
free_insn_slot(p->ainsn.insn, 0);
|
||||||
mutex_unlock(&kprobe_mutex);
|
|
||||||
p->ainsn.insn = NULL;
|
p->ainsn.insn = NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -212,7 +212,7 @@ static struct clcd_board clcd_plat_data = {
|
|||||||
|
|
||||||
static struct amba_device clcd_device = {
|
static struct amba_device clcd_device = {
|
||||||
.dev = {
|
.dev = {
|
||||||
.bus_id = "mb:16",
|
.init_name = "mb:16",
|
||||||
.coherent_dma_mask = ~0,
|
.coherent_dma_mask = ~0,
|
||||||
.platform_data = &clcd_plat_data,
|
.platform_data = &clcd_plat_data,
|
||||||
},
|
},
|
||||||
|
@ -409,7 +409,7 @@ static struct amba_pl010_data ep93xx_uart_data = {
|
|||||||
|
|
||||||
static struct amba_device uart1_device = {
|
static struct amba_device uart1_device = {
|
||||||
.dev = {
|
.dev = {
|
||||||
.bus_id = "apb:uart1",
|
.init_name = "apb:uart1",
|
||||||
.platform_data = &ep93xx_uart_data,
|
.platform_data = &ep93xx_uart_data,
|
||||||
},
|
},
|
||||||
.res = {
|
.res = {
|
||||||
@ -423,7 +423,7 @@ static struct amba_device uart1_device = {
|
|||||||
|
|
||||||
static struct amba_device uart2_device = {
|
static struct amba_device uart2_device = {
|
||||||
.dev = {
|
.dev = {
|
||||||
.bus_id = "apb:uart2",
|
.init_name = "apb:uart2",
|
||||||
.platform_data = &ep93xx_uart_data,
|
.platform_data = &ep93xx_uart_data,
|
||||||
},
|
},
|
||||||
.res = {
|
.res = {
|
||||||
@ -437,7 +437,7 @@ static struct amba_device uart2_device = {
|
|||||||
|
|
||||||
static struct amba_device uart3_device = {
|
static struct amba_device uart3_device = {
|
||||||
.dev = {
|
.dev = {
|
||||||
.bus_id = "apb:uart3",
|
.init_name = "apb:uart3",
|
||||||
.platform_data = &ep93xx_uart_data,
|
.platform_data = &ep93xx_uart_data,
|
||||||
},
|
},
|
||||||
.res = {
|
.res = {
|
||||||
|
@ -37,7 +37,7 @@ static struct amba_pl010_data integrator_uart_data;
|
|||||||
|
|
||||||
static struct amba_device rtc_device = {
|
static struct amba_device rtc_device = {
|
||||||
.dev = {
|
.dev = {
|
||||||
.bus_id = "mb:15",
|
.init_name = "mb:15",
|
||||||
},
|
},
|
||||||
.res = {
|
.res = {
|
||||||
.start = INTEGRATOR_RTC_BASE,
|
.start = INTEGRATOR_RTC_BASE,
|
||||||
@ -50,7 +50,7 @@ static struct amba_device rtc_device = {
|
|||||||
|
|
||||||
static struct amba_device uart0_device = {
|
static struct amba_device uart0_device = {
|
||||||
.dev = {
|
.dev = {
|
||||||
.bus_id = "mb:16",
|
.init_name = "mb:16",
|
||||||
.platform_data = &integrator_uart_data,
|
.platform_data = &integrator_uart_data,
|
||||||
},
|
},
|
||||||
.res = {
|
.res = {
|
||||||
@ -64,7 +64,7 @@ static struct amba_device uart0_device = {
|
|||||||
|
|
||||||
static struct amba_device uart1_device = {
|
static struct amba_device uart1_device = {
|
||||||
.dev = {
|
.dev = {
|
||||||
.bus_id = "mb:17",
|
.init_name = "mb:17",
|
||||||
.platform_data = &integrator_uart_data,
|
.platform_data = &integrator_uart_data,
|
||||||
},
|
},
|
||||||
.res = {
|
.res = {
|
||||||
@ -78,7 +78,7 @@ static struct amba_device uart1_device = {
|
|||||||
|
|
||||||
static struct amba_device kmi0_device = {
|
static struct amba_device kmi0_device = {
|
||||||
.dev = {
|
.dev = {
|
||||||
.bus_id = "mb:18",
|
.init_name = "mb:18",
|
||||||
},
|
},
|
||||||
.res = {
|
.res = {
|
||||||
.start = KMI0_BASE,
|
.start = KMI0_BASE,
|
||||||
@ -91,7 +91,7 @@ static struct amba_device kmi0_device = {
|
|||||||
|
|
||||||
static struct amba_device kmi1_device = {
|
static struct amba_device kmi1_device = {
|
||||||
.dev = {
|
.dev = {
|
||||||
.bus_id = "mb:19",
|
.init_name = "mb:19",
|
||||||
},
|
},
|
||||||
.res = {
|
.res = {
|
||||||
.start = KMI1_BASE,
|
.start = KMI1_BASE,
|
||||||
|
@ -407,7 +407,7 @@ static struct mmc_platform_data mmc_data = {
|
|||||||
|
|
||||||
static struct amba_device mmc_device = {
|
static struct amba_device mmc_device = {
|
||||||
.dev = {
|
.dev = {
|
||||||
.bus_id = "mb:1c",
|
.init_name = "mb:1c",
|
||||||
.platform_data = &mmc_data,
|
.platform_data = &mmc_data,
|
||||||
},
|
},
|
||||||
.res = {
|
.res = {
|
||||||
@ -421,7 +421,7 @@ static struct amba_device mmc_device = {
|
|||||||
|
|
||||||
static struct amba_device aaci_device = {
|
static struct amba_device aaci_device = {
|
||||||
.dev = {
|
.dev = {
|
||||||
.bus_id = "mb:1d",
|
.init_name = "mb:1d",
|
||||||
},
|
},
|
||||||
.res = {
|
.res = {
|
||||||
.start = INTCP_PA_AACI_BASE,
|
.start = INTCP_PA_AACI_BASE,
|
||||||
@ -532,7 +532,7 @@ static struct clcd_board clcd_data = {
|
|||||||
|
|
||||||
static struct amba_device clcd_device = {
|
static struct amba_device clcd_device = {
|
||||||
.dev = {
|
.dev = {
|
||||||
.bus_id = "mb:c0",
|
.init_name = "mb:c0",
|
||||||
.coherent_dma_mask = ~0,
|
.coherent_dma_mask = ~0,
|
||||||
.platform_data = &clcd_data,
|
.platform_data = &clcd_data,
|
||||||
},
|
},
|
||||||
|
@ -207,7 +207,7 @@ static struct clcd_board clcd_platform_data = {
|
|||||||
static struct amba_device name##_device = { \
|
static struct amba_device name##_device = { \
|
||||||
.dev = { \
|
.dev = { \
|
||||||
.coherent_dma_mask = ~0, \
|
.coherent_dma_mask = ~0, \
|
||||||
.bus_id = busid, \
|
.init_name = busid, \
|
||||||
.platform_data = plat, \
|
.platform_data = plat, \
|
||||||
}, \
|
}, \
|
||||||
.res = { \
|
.res = { \
|
||||||
|
@ -91,7 +91,7 @@ void clk_put(struct clk *clk)
|
|||||||
|
|
||||||
static struct amba_device fb_device = {
|
static struct amba_device fb_device = {
|
||||||
.dev = {
|
.dev = {
|
||||||
.bus_id = "fb",
|
.init_name = "fb",
|
||||||
.coherent_dma_mask = ~0,
|
.coherent_dma_mask = ~0,
|
||||||
},
|
},
|
||||||
.res = {
|
.res = {
|
||||||
|
20
arch/arm/mach-pxa/include/mach/pxa930_rotary.h
Normal file
20
arch/arm/mach-pxa/include/mach/pxa930_rotary.h
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
#ifndef __ASM_ARCH_PXA930_ROTARY_H
|
||||||
|
#define __ASM_ARCH_PXA930_ROTARY_H
|
||||||
|
|
||||||
|
/* NOTE:
|
||||||
|
*
|
||||||
|
* rotary can be either interpreted as a ralative input event (e.g.
|
||||||
|
* REL_WHEEL or REL_HWHEEL) or a specific key event (e.g. UP/DOWN
|
||||||
|
* or LEFT/RIGHT), depending on if up_key & down_key are assigned
|
||||||
|
* or rel_code is assigned a non-zero value. When all are non-zero,
|
||||||
|
* up_key and down_key will be preferred.
|
||||||
|
*/
|
||||||
|
struct pxa930_rotary_platform_data {
|
||||||
|
int up_key;
|
||||||
|
int down_key;
|
||||||
|
int rel_code;
|
||||||
|
};
|
||||||
|
|
||||||
|
void __init pxa930_set_rotarykey_info(struct pxa930_rotary_platform_data *info);
|
||||||
|
|
||||||
|
#endif /* __ASM_ARCH_PXA930_ROTARY_H */
|
10
arch/arm/mach-pxa/include/mach/pxa930_trkball.h
Normal file
10
arch/arm/mach-pxa/include/mach/pxa930_trkball.h
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
#ifndef __ASM_ARCH_PXA930_TRKBALL_H
|
||||||
|
#define __ASM_ARCH_PXA930_TRKBALL_H
|
||||||
|
|
||||||
|
struct pxa930_trkball_platform_data {
|
||||||
|
int x_filter;
|
||||||
|
int y_filter;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif /* __ASM_ARCH_PXA930_TRKBALL_H */
|
||||||
|
|
@ -31,7 +31,7 @@
|
|||||||
static struct amba_device name##_device = { \
|
static struct amba_device name##_device = { \
|
||||||
.dev = { \
|
.dev = { \
|
||||||
.coherent_dma_mask = ~0, \
|
.coherent_dma_mask = ~0, \
|
||||||
.bus_id = busid, \
|
.init_name = busid, \
|
||||||
.platform_data = plat, \
|
.platform_data = plat, \
|
||||||
}, \
|
}, \
|
||||||
.res = { \
|
.res = { \
|
||||||
|
@ -14,7 +14,7 @@
|
|||||||
#define __ASM_ARCH_SPI_H __FILE__
|
#define __ASM_ARCH_SPI_H __FILE__
|
||||||
|
|
||||||
struct s3c2410_spi_info {
|
struct s3c2410_spi_info {
|
||||||
unsigned long pin_cs; /* simple gpio cs */
|
int pin_cs; /* simple gpio cs */
|
||||||
unsigned int num_cs; /* total chipselects */
|
unsigned int num_cs; /* total chipselects */
|
||||||
int bus_num; /* bus number to use. */
|
int bus_num; /* bus number to use. */
|
||||||
|
|
||||||
|
@ -34,7 +34,7 @@ extern unsigned int mmc_status(struct device *dev);
|
|||||||
static struct amba_device name##_device = { \
|
static struct amba_device name##_device = { \
|
||||||
.dev = { \
|
.dev = { \
|
||||||
.coherent_dma_mask = ~0, \
|
.coherent_dma_mask = ~0, \
|
||||||
.bus_id = busid, \
|
.init_name = busid, \
|
||||||
.platform_data = plat, \
|
.platform_data = plat, \
|
||||||
}, \
|
}, \
|
||||||
.res = { \
|
.res = { \
|
||||||
|
@ -59,7 +59,7 @@
|
|||||||
|
|
||||||
#define virt_to_lbus(x) ((x) - PAGE_OFFSET + OMAP1510_LB_OFFSET)
|
#define virt_to_lbus(x) ((x) - PAGE_OFFSET + OMAP1510_LB_OFFSET)
|
||||||
#define lbus_to_virt(x) ((x) - OMAP1510_LB_OFFSET + PAGE_OFFSET)
|
#define lbus_to_virt(x) ((x) - OMAP1510_LB_OFFSET + PAGE_OFFSET)
|
||||||
#define is_lbus_device(dev) (cpu_is_omap15xx() && dev && (strncmp(dev->bus_id, "ohci", 4) == 0))
|
#define is_lbus_device(dev) (cpu_is_omap15xx() && dev && (strncmp(dev_name(dev), "ohci", 4) == 0))
|
||||||
|
|
||||||
#define __arch_page_to_dma(dev, page) ({is_lbus_device(dev) ? \
|
#define __arch_page_to_dma(dev, page) ({is_lbus_device(dev) ? \
|
||||||
(dma_addr_t)virt_to_lbus(page_address(page)) : \
|
(dma_addr_t)virt_to_lbus(page_address(page)) : \
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
include include/asm-generic/Kbuild.asm
|
include include/asm-generic/Kbuild.asm
|
||||||
|
|
||||||
|
header-y += swab.h
|
||||||
header-y += cachectl.h
|
header-y += cachectl.h
|
||||||
|
@ -14,9 +14,9 @@
|
|||||||
#ifndef __ASM_AVR32_ATOMIC_H
|
#ifndef __ASM_AVR32_ATOMIC_H
|
||||||
#define __ASM_AVR32_ATOMIC_H
|
#define __ASM_AVR32_ATOMIC_H
|
||||||
|
|
||||||
|
#include <linux/types.h>
|
||||||
#include <asm/system.h>
|
#include <asm/system.h>
|
||||||
|
|
||||||
typedef struct { volatile int counter; } atomic_t;
|
|
||||||
#define ATOMIC_INIT(i) { (i) }
|
#define ATOMIC_INIT(i) { (i) }
|
||||||
|
|
||||||
#define atomic_read(v) ((v)->counter)
|
#define atomic_read(v) ((v)->counter)
|
||||||
|
@ -4,34 +4,7 @@
|
|||||||
#ifndef __ASM_AVR32_BYTEORDER_H
|
#ifndef __ASM_AVR32_BYTEORDER_H
|
||||||
#define __ASM_AVR32_BYTEORDER_H
|
#define __ASM_AVR32_BYTEORDER_H
|
||||||
|
|
||||||
#include <asm/types.h>
|
#include <asm/swab.h>
|
||||||
#include <linux/compiler.h>
|
#include <linux/byteorder/big_endian.h>
|
||||||
|
|
||||||
#define __BIG_ENDIAN
|
|
||||||
#define __SWAB_64_THRU_32__
|
|
||||||
|
|
||||||
#ifdef __CHECKER__
|
|
||||||
extern unsigned long __builtin_bswap_32(unsigned long x);
|
|
||||||
extern unsigned short __builtin_bswap_16(unsigned short x);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/*
|
|
||||||
* avr32-linux-gcc versions earlier than 4.2 improperly sign-extends
|
|
||||||
* the result.
|
|
||||||
*/
|
|
||||||
#if !(__GNUC__ == 4 && __GNUC_MINOR__ < 2)
|
|
||||||
static inline __attribute_const__ __u16 __arch_swab16(__u16 val)
|
|
||||||
{
|
|
||||||
return __builtin_bswap_16(val);
|
|
||||||
}
|
|
||||||
#define __arch_swab16 __arch_swab16
|
|
||||||
|
|
||||||
static inline __attribute_const__ __u32 __arch_swab32(__u32 val)
|
|
||||||
{
|
|
||||||
return __builtin_bswap_32(val);
|
|
||||||
}
|
|
||||||
#define __arch_swab32 __arch_swab32
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include <linux/byteorder.h>
|
|
||||||
#endif /* __ASM_AVR32_BYTEORDER_H */
|
#endif /* __ASM_AVR32_BYTEORDER_H */
|
||||||
|
35
arch/avr32/include/asm/swab.h
Normal file
35
arch/avr32/include/asm/swab.h
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
/*
|
||||||
|
* AVR32 byteswapping functions.
|
||||||
|
*/
|
||||||
|
#ifndef __ASM_AVR32_SWAB_H
|
||||||
|
#define __ASM_AVR32_SWAB_H
|
||||||
|
|
||||||
|
#include <asm/types.h>
|
||||||
|
#include <linux/compiler.h>
|
||||||
|
|
||||||
|
#define __SWAB_64_THRU_32__
|
||||||
|
|
||||||
|
#ifdef __CHECKER__
|
||||||
|
extern unsigned long __builtin_bswap_32(unsigned long x);
|
||||||
|
extern unsigned short __builtin_bswap_16(unsigned short x);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
* avr32-linux-gcc versions earlier than 4.2 improperly sign-extends
|
||||||
|
* the result.
|
||||||
|
*/
|
||||||
|
#if !(__GNUC__ == 4 && __GNUC_MINOR__ < 2)
|
||||||
|
static inline __attribute_const__ __u16 __arch_swab16(__u16 val)
|
||||||
|
{
|
||||||
|
return __builtin_bswap_16(val);
|
||||||
|
}
|
||||||
|
#define __arch_swab16 __arch_swab16
|
||||||
|
|
||||||
|
static inline __attribute_const__ __u32 __arch_swab32(__u32 val)
|
||||||
|
{
|
||||||
|
return __builtin_bswap_32(val);
|
||||||
|
}
|
||||||
|
#define __arch_swab32 __arch_swab32
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* __ASM_AVR32_SWAB_H */
|
@ -7,6 +7,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include <linux/bug.h>
|
#include <linux/bug.h>
|
||||||
|
#include <linux/hardirq.h>
|
||||||
#include <linux/init.h>
|
#include <linux/init.h>
|
||||||
#include <linux/kallsyms.h>
|
#include <linux/kallsyms.h>
|
||||||
#include <linux/kdebug.h>
|
#include <linux/kdebug.h>
|
||||||
|
@ -198,7 +198,7 @@ dump_clock(struct clk *parent, struct clkinf *r)
|
|||||||
unsigned i;
|
unsigned i;
|
||||||
|
|
||||||
/* skip clocks coupled to devices that aren't registered */
|
/* skip clocks coupled to devices that aren't registered */
|
||||||
if (parent->dev && !parent->dev->bus_id[0] && !parent->users)
|
if (parent->dev && !dev_name(parent->dev) && !parent->users)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
/* <nest spaces> name <pad to end> */
|
/* <nest spaces> name <pad to end> */
|
||||||
@ -214,7 +214,7 @@ dump_clock(struct clk *parent, struct clkinf *r)
|
|||||||
parent->users ? "on" : "off", /* NOTE: not-paranoid!! */
|
parent->users ? "on" : "off", /* NOTE: not-paranoid!! */
|
||||||
clk_get_rate(parent));
|
clk_get_rate(parent));
|
||||||
if (parent->dev)
|
if (parent->dev)
|
||||||
seq_printf(r->s, ", for %s", parent->dev->bus_id);
|
seq_printf(r->s, ", for %s", dev_name(parent->dev));
|
||||||
seq_printf(r->s, "\n");
|
seq_printf(r->s, "\n");
|
||||||
|
|
||||||
/* cost of this scan is small, but not linear... */
|
/* cost of this scan is small, but not linear... */
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
include include/asm-generic/Kbuild.asm
|
include include/asm-generic/Kbuild.asm
|
||||||
|
|
||||||
unifdef-y += fixed_code.h
|
unifdef-y += fixed_code.h
|
||||||
|
unifdef-y += swab.h
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
#ifndef __ARCH_BLACKFIN_ATOMIC__
|
#ifndef __ARCH_BLACKFIN_ATOMIC__
|
||||||
#define __ARCH_BLACKFIN_ATOMIC__
|
#define __ARCH_BLACKFIN_ATOMIC__
|
||||||
|
|
||||||
|
#include <linux/types.h>
|
||||||
#include <asm/system.h> /* local_irq_XXX() */
|
#include <asm/system.h> /* local_irq_XXX() */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -13,9 +14,6 @@
|
|||||||
* Tony Kou (tonyko@lineo.ca) Lineo Inc. 2001
|
* Tony Kou (tonyko@lineo.ca) Lineo Inc. 2001
|
||||||
*/
|
*/
|
||||||
|
|
||||||
typedef struct {
|
|
||||||
int counter;
|
|
||||||
} atomic_t;
|
|
||||||
#define ATOMIC_INIT(i) { (i) }
|
#define ATOMIC_INIT(i) { (i) }
|
||||||
|
|
||||||
#define atomic_read(v) ((v)->counter)
|
#define atomic_read(v) ((v)->counter)
|
||||||
|
@ -1,48 +1,7 @@
|
|||||||
#ifndef _BLACKFIN_BYTEORDER_H
|
#ifndef _BLACKFIN_BYTEORDER_H
|
||||||
#define _BLACKFIN_BYTEORDER_H
|
#define _BLACKFIN_BYTEORDER_H
|
||||||
|
|
||||||
#include <asm/types.h>
|
#include <asm/swab.h>
|
||||||
#include <linux/compiler.h>
|
|
||||||
|
|
||||||
#ifdef __GNUC__
|
|
||||||
|
|
||||||
static __inline__ __attribute_const__ __u32 ___arch__swahb32(__u32 xx)
|
|
||||||
{
|
|
||||||
__u32 tmp;
|
|
||||||
__asm__("%1 = %0 >> 8 (V);\n\t"
|
|
||||||
"%0 = %0 << 8 (V);\n\t"
|
|
||||||
"%0 = %0 | %1;\n\t"
|
|
||||||
: "+d"(xx), "=&d"(tmp));
|
|
||||||
return xx;
|
|
||||||
}
|
|
||||||
|
|
||||||
static __inline__ __attribute_const__ __u32 ___arch__swahw32(__u32 xx)
|
|
||||||
{
|
|
||||||
__u32 rv;
|
|
||||||
__asm__("%0 = PACK(%1.L, %1.H);\n\t": "=d"(rv): "d"(xx));
|
|
||||||
return rv;
|
|
||||||
}
|
|
||||||
|
|
||||||
#define __arch__swahb32(x) ___arch__swahb32(x)
|
|
||||||
#define __arch__swahw32(x) ___arch__swahw32(x)
|
|
||||||
#define __arch__swab32(x) ___arch__swahb32(___arch__swahw32(x))
|
|
||||||
|
|
||||||
static __inline__ __attribute_const__ __u16 ___arch__swab16(__u16 xx)
|
|
||||||
{
|
|
||||||
__u32 xw = xx;
|
|
||||||
__asm__("%0 <<= 8;\n %0.L = %0.L + %0.H (NS);\n": "+d"(xw));
|
|
||||||
return (__u16)xw;
|
|
||||||
}
|
|
||||||
|
|
||||||
#define __arch__swab16(x) ___arch__swab16(x)
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined(__GNUC__) && !defined(__STRICT_ANSI__) || defined(__KERNEL__)
|
|
||||||
# define __BYTEORDER_HAS_U64__
|
|
||||||
# define __SWAB_64_THRU_32__
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include <linux/byteorder/little_endian.h>
|
#include <linux/byteorder/little_endian.h>
|
||||||
|
|
||||||
#endif /* _BLACKFIN_BYTEORDER_H */
|
#endif /* _BLACKFIN_BYTEORDER_H */
|
||||||
|
48
arch/blackfin/include/asm/swab.h
Normal file
48
arch/blackfin/include/asm/swab.h
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
#ifndef _BLACKFIN_SWAB_H
|
||||||
|
#define _BLACKFIN_SWAB_H
|
||||||
|
|
||||||
|
#include <asm/types.h>
|
||||||
|
#include <linux/compiler.h>
|
||||||
|
|
||||||
|
#if defined(__GNUC__) && !defined(__STRICT_ANSI__) || defined(__KERNEL__)
|
||||||
|
# define __SWAB_64_THRU_32__
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __GNUC__
|
||||||
|
|
||||||
|
static __inline__ __attribute_const__ __u32 __arch_swahb32(__u32 xx)
|
||||||
|
{
|
||||||
|
__u32 tmp;
|
||||||
|
__asm__("%1 = %0 >> 8 (V);\n\t"
|
||||||
|
"%0 = %0 << 8 (V);\n\t"
|
||||||
|
"%0 = %0 | %1;\n\t"
|
||||||
|
: "+d"(xx), "=&d"(tmp));
|
||||||
|
return xx;
|
||||||
|
}
|
||||||
|
#define __arch_swahb32 __arch_swahb32
|
||||||
|
|
||||||
|
static __inline__ __attribute_const__ __u32 __arch_swahw32(__u32 xx)
|
||||||
|
{
|
||||||
|
__u32 rv;
|
||||||
|
__asm__("%0 = PACK(%1.L, %1.H);\n\t": "=d"(rv): "d"(xx));
|
||||||
|
return rv;
|
||||||
|
}
|
||||||
|
#define __arch_swahw32 __arch_swahw32
|
||||||
|
|
||||||
|
static __inline__ __attribute_const__ __u32 __arch_swab32(__u32 xx)
|
||||||
|
{
|
||||||
|
return __arch_swahb32(__arch_swahw32(xx));
|
||||||
|
}
|
||||||
|
#define __arch_swab32 __arch_swab32
|
||||||
|
|
||||||
|
static __inline__ __attribute_const__ __u16 __arch_swab16(__u16 xx)
|
||||||
|
{
|
||||||
|
__u32 xw = xx;
|
||||||
|
__asm__("%0 <<= 8;\n %0.L = %0.L + %0.H (NS);\n": "+d"(xw));
|
||||||
|
return (__u16)xw;
|
||||||
|
}
|
||||||
|
#define __arch_swab16 __arch_swab16
|
||||||
|
|
||||||
|
#endif /* __GNUC__ */
|
||||||
|
|
||||||
|
#endif /* _BLACKFIN_SWAB_H */
|
@ -681,6 +681,8 @@ source "drivers/usb/Kconfig"
|
|||||||
|
|
||||||
source "drivers/uwb/Kconfig"
|
source "drivers/uwb/Kconfig"
|
||||||
|
|
||||||
|
source "drivers/staging/Kconfig"
|
||||||
|
|
||||||
source "arch/cris/Kconfig.debug"
|
source "arch/cris/Kconfig.debug"
|
||||||
|
|
||||||
source "security/Kconfig"
|
source "security/Kconfig"
|
||||||
|
@ -24,12 +24,12 @@
|
|||||||
#error "Please contact <greg@kroah.com> for details on how to fix it properly."
|
#error "Please contact <greg@kroah.com> for details on how to fix it properly."
|
||||||
|
|
||||||
static struct device iop_spu_device[2] = {
|
static struct device iop_spu_device[2] = {
|
||||||
{ .bus_id = "iop-spu0", },
|
{ .init_name = "iop-spu0", },
|
||||||
{ .bus_id = "iop-spu1", },
|
{ .init_name = "iop-spu1", },
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct device iop_mpu_device = {
|
static struct device iop_mpu_device = {
|
||||||
.bus_id = "iop-mpu",
|
.init_name = "iop-mpu",
|
||||||
};
|
};
|
||||||
|
|
||||||
static int wait_mpu_idle(void)
|
static int wait_mpu_idle(void)
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
#define __ASM_CRIS_ATOMIC__
|
#define __ASM_CRIS_ATOMIC__
|
||||||
|
|
||||||
#include <linux/compiler.h>
|
#include <linux/compiler.h>
|
||||||
|
#include <linux/types.h>
|
||||||
#include <asm/system.h>
|
#include <asm/system.h>
|
||||||
#include <arch/atomic.h>
|
#include <arch/atomic.h>
|
||||||
|
|
||||||
@ -13,8 +13,6 @@
|
|||||||
* resource counting etc..
|
* resource counting etc..
|
||||||
*/
|
*/
|
||||||
|
|
||||||
typedef struct { volatile int counter; } atomic_t;
|
|
||||||
|
|
||||||
#define ATOMIC_INIT(i) { (i) }
|
#define ATOMIC_INIT(i) { (i) }
|
||||||
|
|
||||||
#define atomic_read(v) ((v)->counter)
|
#define atomic_read(v) ((v)->counter)
|
||||||
|
@ -220,6 +220,8 @@ source "drivers/uwb/Kconfig"
|
|||||||
|
|
||||||
endmenu
|
endmenu
|
||||||
|
|
||||||
|
source "drivers/staging/Kconfig"
|
||||||
|
|
||||||
source "fs/Kconfig"
|
source "fs/Kconfig"
|
||||||
|
|
||||||
source "arch/h8300/Kconfig.debug"
|
source "arch/h8300/Kconfig.debug"
|
||||||
|
@ -1 +1,2 @@
|
|||||||
include include/asm-generic/Kbuild.asm
|
include include/asm-generic/Kbuild.asm
|
||||||
|
unifdef-y += swab.h
|
||||||
|
@ -1,12 +1,13 @@
|
|||||||
#ifndef __ARCH_H8300_ATOMIC__
|
#ifndef __ARCH_H8300_ATOMIC__
|
||||||
#define __ARCH_H8300_ATOMIC__
|
#define __ARCH_H8300_ATOMIC__
|
||||||
|
|
||||||
|
#include <linux/types.h>
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Atomic operations that C can't guarantee us. Useful for
|
* Atomic operations that C can't guarantee us. Useful for
|
||||||
* resource counting etc..
|
* resource counting etc..
|
||||||
*/
|
*/
|
||||||
|
|
||||||
typedef struct { int counter; } atomic_t;
|
|
||||||
#define ATOMIC_INIT(i) { (i) }
|
#define ATOMIC_INIT(i) { (i) }
|
||||||
|
|
||||||
#define atomic_read(v) ((v)->counter)
|
#define atomic_read(v) ((v)->counter)
|
||||||
|
@ -1,13 +1,7 @@
|
|||||||
#ifndef _H8300_BYTEORDER_H
|
#ifndef _H8300_BYTEORDER_H
|
||||||
#define _H8300_BYTEORDER_H
|
#define _H8300_BYTEORDER_H
|
||||||
|
|
||||||
#include <asm/types.h>
|
#include <asm/swab.h>
|
||||||
|
|
||||||
#if defined(__GNUC__) && !defined(__STRICT_ANSI__) || defined(__KERNEL__)
|
|
||||||
# define __BYTEORDER_HAS_U64__
|
|
||||||
# define __SWAB_64_THRU_32__
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include <linux/byteorder/big_endian.h>
|
#include <linux/byteorder/big_endian.h>
|
||||||
|
|
||||||
#endif /* _H8300_BYTEORDER_H */
|
#endif /* _H8300_BYTEORDER_H */
|
||||||
|
10
arch/h8300/include/asm/swab.h
Normal file
10
arch/h8300/include/asm/swab.h
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
#ifndef _H8300_SWAB_H
|
||||||
|
#define _H8300_SWAB_H
|
||||||
|
|
||||||
|
#include <asm/types.h>
|
||||||
|
|
||||||
|
#if defined(__GNUC__) && !defined(__STRICT_ANSI__) || defined(__KERNEL__)
|
||||||
|
# define __SWAB_64_THRU_32__
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* _H8300_SWAB_H */
|
@ -14,3 +14,4 @@ unifdef-y += gcc_intrin.h
|
|||||||
unifdef-y += intrinsics.h
|
unifdef-y += intrinsics.h
|
||||||
unifdef-y += perfmon.h
|
unifdef-y += perfmon.h
|
||||||
unifdef-y += ustack.h
|
unifdef-y += ustack.h
|
||||||
|
unifdef-y += swab.h
|
||||||
|
@ -17,12 +17,6 @@
|
|||||||
#include <asm/intrinsics.h>
|
#include <asm/intrinsics.h>
|
||||||
#include <asm/system.h>
|
#include <asm/system.h>
|
||||||
|
|
||||||
/*
|
|
||||||
* On IA-64, counter must always be volatile to ensure that that the
|
|
||||||
* memory accesses are ordered.
|
|
||||||
*/
|
|
||||||
typedef struct { volatile __s32 counter; } atomic_t;
|
|
||||||
typedef struct { volatile __s64 counter; } atomic64_t;
|
|
||||||
|
|
||||||
#define ATOMIC_INIT(i) ((atomic_t) { (i) })
|
#define ATOMIC_INIT(i) ((atomic_t) { (i) })
|
||||||
#define ATOMIC64_INIT(i) ((atomic64_t) { (i) })
|
#define ATOMIC64_INIT(i) ((atomic64_t) { (i) })
|
||||||
|
@ -1,42 +1,7 @@
|
|||||||
#ifndef _ASM_IA64_BYTEORDER_H
|
#ifndef _ASM_IA64_BYTEORDER_H
|
||||||
#define _ASM_IA64_BYTEORDER_H
|
#define _ASM_IA64_BYTEORDER_H
|
||||||
|
|
||||||
/*
|
#include <asm/swab.h>
|
||||||
* Modified 1998, 1999
|
|
||||||
* David Mosberger-Tang <davidm@hpl.hp.com>, Hewlett-Packard Co.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <asm/types.h>
|
|
||||||
#include <asm/intrinsics.h>
|
|
||||||
#include <linux/compiler.h>
|
|
||||||
|
|
||||||
static __inline__ __attribute_const__ __u64
|
|
||||||
__ia64_swab64 (__u64 x)
|
|
||||||
{
|
|
||||||
__u64 result;
|
|
||||||
|
|
||||||
result = ia64_mux1(x, ia64_mux1_rev);
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
static __inline__ __attribute_const__ __u32
|
|
||||||
__ia64_swab32 (__u32 x)
|
|
||||||
{
|
|
||||||
return __ia64_swab64(x) >> 32;
|
|
||||||
}
|
|
||||||
|
|
||||||
static __inline__ __attribute_const__ __u16
|
|
||||||
__ia64_swab16(__u16 x)
|
|
||||||
{
|
|
||||||
return __ia64_swab64(x) >> 48;
|
|
||||||
}
|
|
||||||
|
|
||||||
#define __arch__swab64(x) __ia64_swab64(x)
|
|
||||||
#define __arch__swab32(x) __ia64_swab32(x)
|
|
||||||
#define __arch__swab16(x) __ia64_swab16(x)
|
|
||||||
|
|
||||||
#define __BYTEORDER_HAS_U64__
|
|
||||||
|
|
||||||
#include <linux/byteorder/little_endian.h>
|
#include <linux/byteorder/little_endian.h>
|
||||||
|
|
||||||
#endif /* _ASM_IA64_BYTEORDER_H */
|
#endif /* _ASM_IA64_BYTEORDER_H */
|
||||||
|
34
arch/ia64/include/asm/swab.h
Normal file
34
arch/ia64/include/asm/swab.h
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
#ifndef _ASM_IA64_SWAB_H
|
||||||
|
#define _ASM_IA64_SWAB_H
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Modified 1998, 1999
|
||||||
|
* David Mosberger-Tang <davidm@hpl.hp.com>, Hewlett-Packard Co.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <asm/types.h>
|
||||||
|
#include <asm/intrinsics.h>
|
||||||
|
#include <linux/compiler.h>
|
||||||
|
|
||||||
|
static __inline__ __attribute_const__ __u64 __arch_swab64(__u64 x)
|
||||||
|
{
|
||||||
|
__u64 result;
|
||||||
|
|
||||||
|
result = ia64_mux1(x, ia64_mux1_rev);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
#define __arch_swab64 __arch_swab64
|
||||||
|
|
||||||
|
static __inline__ __attribute_const__ __u32 __arch_swab32(__u32 x)
|
||||||
|
{
|
||||||
|
return __arch_swab64(x) >> 32;
|
||||||
|
}
|
||||||
|
#define __arch_swab32 __arch_swab32
|
||||||
|
|
||||||
|
static __inline__ __attribute_const__ __u16 __arch_swab16(__u16 x)
|
||||||
|
{
|
||||||
|
return __arch_swab64(x) >> 48;
|
||||||
|
}
|
||||||
|
#define __arch_swab16 __arch_swab16
|
||||||
|
|
||||||
|
#endif /* _ASM_IA64_SWAB_H */
|
@ -2,44 +2,7 @@
|
|||||||
#define ASM_IA64__SWIOTLB_H
|
#define ASM_IA64__SWIOTLB_H
|
||||||
|
|
||||||
#include <linux/dma-mapping.h>
|
#include <linux/dma-mapping.h>
|
||||||
|
#include <linux/swiotlb.h>
|
||||||
/* SWIOTLB interface */
|
|
||||||
|
|
||||||
extern dma_addr_t swiotlb_map_single(struct device *hwdev, void *ptr,
|
|
||||||
size_t size, int dir);
|
|
||||||
extern void *swiotlb_alloc_coherent(struct device *hwdev, size_t size,
|
|
||||||
dma_addr_t *dma_handle, gfp_t flags);
|
|
||||||
extern void swiotlb_unmap_single(struct device *hwdev, dma_addr_t dev_addr,
|
|
||||||
size_t size, int dir);
|
|
||||||
extern void swiotlb_sync_single_for_cpu(struct device *hwdev,
|
|
||||||
dma_addr_t dev_addr,
|
|
||||||
size_t size, int dir);
|
|
||||||
extern void swiotlb_sync_single_for_device(struct device *hwdev,
|
|
||||||
dma_addr_t dev_addr,
|
|
||||||
size_t size, int dir);
|
|
||||||
extern void swiotlb_sync_single_range_for_cpu(struct device *hwdev,
|
|
||||||
dma_addr_t dev_addr,
|
|
||||||
unsigned long offset,
|
|
||||||
size_t size, int dir);
|
|
||||||
extern void swiotlb_sync_single_range_for_device(struct device *hwdev,
|
|
||||||
dma_addr_t dev_addr,
|
|
||||||
unsigned long offset,
|
|
||||||
size_t size, int dir);
|
|
||||||
extern void swiotlb_sync_sg_for_cpu(struct device *hwdev,
|
|
||||||
struct scatterlist *sg, int nelems,
|
|
||||||
int dir);
|
|
||||||
extern void swiotlb_sync_sg_for_device(struct device *hwdev,
|
|
||||||
struct scatterlist *sg, int nelems,
|
|
||||||
int dir);
|
|
||||||
extern int swiotlb_map_sg(struct device *hwdev, struct scatterlist *sg,
|
|
||||||
int nents, int direction);
|
|
||||||
extern void swiotlb_unmap_sg(struct device *hwdev, struct scatterlist *sg,
|
|
||||||
int nents, int direction);
|
|
||||||
extern int swiotlb_dma_mapping_error(struct device *hwdev, dma_addr_t dma_addr);
|
|
||||||
extern void swiotlb_free_coherent(struct device *hwdev, size_t size,
|
|
||||||
void *vaddr, dma_addr_t dma_handle);
|
|
||||||
extern int swiotlb_dma_supported(struct device *hwdev, u64 mask);
|
|
||||||
extern void swiotlb_init(void);
|
|
||||||
|
|
||||||
extern int swiotlb_force;
|
extern int swiotlb_force;
|
||||||
|
|
||||||
|
@ -670,9 +670,11 @@ void __kprobes arch_disarm_kprobe(struct kprobe *p)
|
|||||||
|
|
||||||
void __kprobes arch_remove_kprobe(struct kprobe *p)
|
void __kprobes arch_remove_kprobe(struct kprobe *p)
|
||||||
{
|
{
|
||||||
mutex_lock(&kprobe_mutex);
|
if (p->ainsn.insn) {
|
||||||
free_insn_slot(p->ainsn.insn, p->ainsn.inst_flag & INST_FLAG_BOOSTABLE);
|
free_insn_slot(p->ainsn.insn,
|
||||||
mutex_unlock(&kprobe_mutex);
|
p->ainsn.inst_flag & INST_FLAG_BOOSTABLE);
|
||||||
|
p->ainsn.insn = NULL;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
/*
|
/*
|
||||||
* We are resuming execution after a single step fault, so the pt_regs
|
* We are resuming execution after a single step fault, so the pt_regs
|
||||||
|
@ -39,7 +39,7 @@ int iommu_detected __read_mostly;
|
|||||||
be probably a smaller DMA mask, but this is bug-to-bug compatible
|
be probably a smaller DMA mask, but this is bug-to-bug compatible
|
||||||
to i386. */
|
to i386. */
|
||||||
struct device fallback_dev = {
|
struct device fallback_dev = {
|
||||||
.bus_id = "fallback device",
|
.init_name = "fallback device",
|
||||||
.coherent_dma_mask = DMA_32BIT_MASK,
|
.coherent_dma_mask = DMA_32BIT_MASK,
|
||||||
.dma_mask = &fallback_dev.coherent_dma_mask,
|
.dma_mask = &fallback_dev.coherent_dma_mask,
|
||||||
};
|
};
|
||||||
|
@ -692,7 +692,7 @@ int arch_add_memory(int nid, u64 start, u64 size)
|
|||||||
pgdat = NODE_DATA(nid);
|
pgdat = NODE_DATA(nid);
|
||||||
|
|
||||||
zone = pgdat->node_zones + ZONE_NORMAL;
|
zone = pgdat->node_zones + ZONE_NORMAL;
|
||||||
ret = __add_pages(zone, start_pfn, nr_pages);
|
ret = __add_pages(nid, zone, start_pfn, nr_pages);
|
||||||
|
|
||||||
if (ret)
|
if (ret)
|
||||||
printk("%s: Problem encountered in __add_pages() as ret=%d\n",
|
printk("%s: Problem encountered in __add_pages() as ret=%d\n",
|
||||||
|
@ -206,8 +206,7 @@ cx_device_register(nasid_t nasid, int part_num, int mfg_num,
|
|||||||
cx_dev->dev.parent = NULL;
|
cx_dev->dev.parent = NULL;
|
||||||
cx_dev->dev.bus = &tiocx_bus_type;
|
cx_dev->dev.bus = &tiocx_bus_type;
|
||||||
cx_dev->dev.release = tiocx_bus_release;
|
cx_dev->dev.release = tiocx_bus_release;
|
||||||
snprintf(cx_dev->dev.bus_id, BUS_ID_SIZE, "%d",
|
dev_set_name(&cx_dev->dev, "%d", cx_dev->cx_id.nasid);
|
||||||
cx_dev->cx_id.nasid);
|
|
||||||
device_register(&cx_dev->dev);
|
device_register(&cx_dev->dev);
|
||||||
get_device(&cx_dev->dev);
|
get_device(&cx_dev->dev);
|
||||||
|
|
||||||
|
@ -1 +1,3 @@
|
|||||||
include include/asm-generic/Kbuild.asm
|
include include/asm-generic/Kbuild.asm
|
||||||
|
|
||||||
|
unifdef-y += swab.h
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
#ifndef __ARCH_M68KNOMMU_ATOMIC__
|
#ifndef __ARCH_M68KNOMMU_ATOMIC__
|
||||||
#define __ARCH_M68KNOMMU_ATOMIC__
|
#define __ARCH_M68KNOMMU_ATOMIC__
|
||||||
|
|
||||||
|
#include <linux/types.h>
|
||||||
#include <asm/system.h>
|
#include <asm/system.h>
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -12,7 +13,6 @@
|
|||||||
* We do not have SMP m68k systems, so we don't have to deal with that.
|
* We do not have SMP m68k systems, so we don't have to deal with that.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
typedef struct { int counter; } atomic_t;
|
|
||||||
#define ATOMIC_INIT(i) { (i) }
|
#define ATOMIC_INIT(i) { (i) }
|
||||||
|
|
||||||
#define atomic_read(v) ((v)->counter)
|
#define atomic_read(v) ((v)->counter)
|
||||||
|
@ -1,27 +1,7 @@
|
|||||||
#ifndef _M68KNOMMU_BYTEORDER_H
|
#ifndef _M68KNOMMU_BYTEORDER_H
|
||||||
#define _M68KNOMMU_BYTEORDER_H
|
#define _M68KNOMMU_BYTEORDER_H
|
||||||
|
|
||||||
#include <linux/types.h>
|
#include <asm/swab.h>
|
||||||
|
|
||||||
#if defined(__GNUC__) && !defined(__STRICT_ANSI__) || defined(__KERNEL__)
|
|
||||||
# define __BYTEORDER_HAS_U64__
|
|
||||||
# define __SWAB_64_THRU_32__
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined (__mcfisaaplus__) || defined (__mcfisac__)
|
|
||||||
static inline __attribute_const__ __u32 ___arch__swab32(__u32 val)
|
|
||||||
{
|
|
||||||
asm(
|
|
||||||
"byterev %0"
|
|
||||||
: "=d" (val)
|
|
||||||
: "0" (val)
|
|
||||||
);
|
|
||||||
return val;
|
|
||||||
}
|
|
||||||
|
|
||||||
#define __arch__swab32(x) ___arch__swab32(x)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include <linux/byteorder/big_endian.h>
|
#include <linux/byteorder/big_endian.h>
|
||||||
|
|
||||||
#endif /* _M68KNOMMU_BYTEORDER_H */
|
#endif /* _M68KNOMMU_BYTEORDER_H */
|
||||||
|
24
arch/m68knommu/include/asm/swab.h
Normal file
24
arch/m68knommu/include/asm/swab.h
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
#ifndef _M68KNOMMU_SWAB_H
|
||||||
|
#define _M68KNOMMU_SWAB_H
|
||||||
|
|
||||||
|
#include <linux/types.h>
|
||||||
|
|
||||||
|
#if defined(__GNUC__) && !defined(__STRICT_ANSI__) || defined(__KERNEL__)
|
||||||
|
# define __SWAB_64_THRU_32__
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined (__mcfisaaplus__) || defined (__mcfisac__)
|
||||||
|
static inline __attribute_const__ __u32 __arch_swab32(__u32 val)
|
||||||
|
{
|
||||||
|
asm(
|
||||||
|
"byterev %0"
|
||||||
|
: "=d" (val)
|
||||||
|
: "0" (val)
|
||||||
|
);
|
||||||
|
return val;
|
||||||
|
}
|
||||||
|
|
||||||
|
#define __arch_swab32 __arch_swab32
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* _M68KNOMMU_SWAB_H */
|
@ -1,3 +1,4 @@
|
|||||||
include include/asm-generic/Kbuild.asm
|
include include/asm-generic/Kbuild.asm
|
||||||
|
|
||||||
header-y += cachectl.h sgidefs.h sysmips.h
|
header-y += cachectl.h sgidefs.h sysmips.h
|
||||||
|
header-y += swab.h
|
||||||
|
@ -15,13 +15,12 @@
|
|||||||
#define _ASM_ATOMIC_H
|
#define _ASM_ATOMIC_H
|
||||||
|
|
||||||
#include <linux/irqflags.h>
|
#include <linux/irqflags.h>
|
||||||
|
#include <linux/types.h>
|
||||||
#include <asm/barrier.h>
|
#include <asm/barrier.h>
|
||||||
#include <asm/cpu-features.h>
|
#include <asm/cpu-features.h>
|
||||||
#include <asm/war.h>
|
#include <asm/war.h>
|
||||||
#include <asm/system.h>
|
#include <asm/system.h>
|
||||||
|
|
||||||
typedef struct { volatile int counter; } atomic_t;
|
|
||||||
|
|
||||||
#define ATOMIC_INIT(i) { (i) }
|
#define ATOMIC_INIT(i) { (i) }
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -404,8 +403,6 @@ static __inline__ int atomic_add_unless(atomic_t *v, int a, int u)
|
|||||||
|
|
||||||
#ifdef CONFIG_64BIT
|
#ifdef CONFIG_64BIT
|
||||||
|
|
||||||
typedef struct { volatile long counter; } atomic64_t;
|
|
||||||
|
|
||||||
#define ATOMIC64_INIT(i) { (i) }
|
#define ATOMIC64_INIT(i) { (i) }
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -8,60 +8,14 @@
|
|||||||
#ifndef _ASM_BYTEORDER_H
|
#ifndef _ASM_BYTEORDER_H
|
||||||
#define _ASM_BYTEORDER_H
|
#define _ASM_BYTEORDER_H
|
||||||
|
|
||||||
#include <linux/compiler.h>
|
#include <asm/swab.h>
|
||||||
#include <asm/types.h>
|
|
||||||
|
|
||||||
#if defined(__MIPSEB__)
|
#if defined(__MIPSEB__)
|
||||||
# define __BIG_ENDIAN
|
#include <linux/byteorder/big_endian.h>
|
||||||
#elif defined(__MIPSEL__)
|
#elif defined(__MIPSEL__)
|
||||||
# define __LITTLE_ENDIAN
|
#include <linux/byteorder/little_endian.h>
|
||||||
#else
|
#else
|
||||||
# error "MIPS, but neither __MIPSEB__, nor __MIPSEL__???"
|
# error "MIPS, but neither __MIPSEB__, nor __MIPSEL__???"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define __SWAB_64_THRU_32__
|
|
||||||
|
|
||||||
#ifdef CONFIG_CPU_MIPSR2
|
|
||||||
|
|
||||||
static inline __attribute_const__ __u16 __arch_swab16(__u16 x)
|
|
||||||
{
|
|
||||||
__asm__(
|
|
||||||
" wsbh %0, %1 \n"
|
|
||||||
: "=r" (x)
|
|
||||||
: "r" (x));
|
|
||||||
|
|
||||||
return x;
|
|
||||||
}
|
|
||||||
#define __arch_swab16 __arch_swab16
|
|
||||||
|
|
||||||
static inline __attribute_const__ __u32 __arch_swab32(__u32 x)
|
|
||||||
{
|
|
||||||
__asm__(
|
|
||||||
" wsbh %0, %1 \n"
|
|
||||||
" rotr %0, %0, 16 \n"
|
|
||||||
: "=r" (x)
|
|
||||||
: "r" (x));
|
|
||||||
|
|
||||||
return x;
|
|
||||||
}
|
|
||||||
#define __arch_swab32 __arch_swab32
|
|
||||||
|
|
||||||
#ifdef CONFIG_CPU_MIPS64_R2
|
|
||||||
static inline __attribute_const__ __u64 __arch_swab64(__u64 x)
|
|
||||||
{
|
|
||||||
__asm__(
|
|
||||||
" dsbh %0, %1\n"
|
|
||||||
" dshd %0, %0"
|
|
||||||
: "=r" (x)
|
|
||||||
: "r" (x));
|
|
||||||
|
|
||||||
return x;
|
|
||||||
}
|
|
||||||
#define __arch_swab64 __arch_swab64
|
|
||||||
#endif /* CONFIG_CPU_MIPS64_R2 */
|
|
||||||
|
|
||||||
#endif /* CONFIG_CPU_MIPSR2 */
|
|
||||||
|
|
||||||
#include <linux/byteorder.h>
|
|
||||||
|
|
||||||
#endif /* _ASM_BYTEORDER_H */
|
#endif /* _ASM_BYTEORDER_H */
|
||||||
|
55
arch/mips/include/asm/swab.h
Normal file
55
arch/mips/include/asm/swab.h
Normal file
@ -0,0 +1,55 @@
|
|||||||
|
/*
|
||||||
|
* This file is subject to the terms and conditions of the GNU General Public
|
||||||
|
* License. See the file "COPYING" in the main directory of this archive
|
||||||
|
* for more details.
|
||||||
|
*
|
||||||
|
* Copyright (C) 1996, 99, 2003 by Ralf Baechle
|
||||||
|
*/
|
||||||
|
#ifndef _ASM_SWAB_H
|
||||||
|
#define _ASM_SWAB_H
|
||||||
|
|
||||||
|
#include <linux/compiler.h>
|
||||||
|
#include <asm/types.h>
|
||||||
|
|
||||||
|
#define __SWAB_64_THRU_32__
|
||||||
|
|
||||||
|
#ifdef CONFIG_CPU_MIPSR2
|
||||||
|
|
||||||
|
static inline __attribute_const__ __u16 __arch_swab16(__u16 x)
|
||||||
|
{
|
||||||
|
__asm__(
|
||||||
|
" wsbh %0, %1 \n"
|
||||||
|
: "=r" (x)
|
||||||
|
: "r" (x));
|
||||||
|
|
||||||
|
return x;
|
||||||
|
}
|
||||||
|
#define __arch_swab16 __arch_swab16
|
||||||
|
|
||||||
|
static inline __attribute_const__ __u32 __arch_swab32(__u32 x)
|
||||||
|
{
|
||||||
|
__asm__(
|
||||||
|
" wsbh %0, %1 \n"
|
||||||
|
" rotr %0, %0, 16 \n"
|
||||||
|
: "=r" (x)
|
||||||
|
: "r" (x));
|
||||||
|
|
||||||
|
return x;
|
||||||
|
}
|
||||||
|
#define __arch_swab32 __arch_swab32
|
||||||
|
|
||||||
|
#ifdef CONFIG_CPU_MIPS64_R2
|
||||||
|
static inline __attribute_const__ __u64 __arch_swab64(__u64 x)
|
||||||
|
{
|
||||||
|
__asm__(
|
||||||
|
" dsbh %0, %1\n"
|
||||||
|
" dshd %0, %0"
|
||||||
|
: "=r" (x)
|
||||||
|
: "r" (x));
|
||||||
|
|
||||||
|
return x;
|
||||||
|
}
|
||||||
|
#define __arch_swab64 __arch_swab64
|
||||||
|
#endif /* CONFIG_CPU_MIPS64_R2 */
|
||||||
|
#endif /* CONFIG_CPU_MIPSR2 */
|
||||||
|
#endif /* _ASM_SWAB_H */
|
@ -1454,7 +1454,7 @@ static int __init vpe_module_init(void)
|
|||||||
device_initialize(&vpe_device);
|
device_initialize(&vpe_device);
|
||||||
vpe_device.class = &vpe_class,
|
vpe_device.class = &vpe_class,
|
||||||
vpe_device.parent = NULL,
|
vpe_device.parent = NULL,
|
||||||
strlcpy(vpe_device.bus_id, "vpe1", BUS_ID_SIZE);
|
dev_set_name(&vpe_device, "vpe1");
|
||||||
vpe_device.devt = MKDEV(major, minor);
|
vpe_device.devt = MKDEV(major, minor);
|
||||||
err = device_add(&vpe_device);
|
err = device_add(&vpe_device);
|
||||||
if (err) {
|
if (err) {
|
||||||
|
@ -155,14 +155,11 @@ static inline unsigned long __cmpxchg_local(volatile void *ptr,
|
|||||||
#define cmpxchg64_local(ptr, o, n) __cmpxchg64_local_generic((ptr), (o), (n))
|
#define cmpxchg64_local(ptr, o, n) __cmpxchg64_local_generic((ptr), (o), (n))
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Note that we need not lock read accesses - aligned word writes/reads
|
/*
|
||||||
* are atomic, so a reader never sees unconsistent values.
|
* Note that we need not lock read accesses - aligned word writes/reads
|
||||||
*
|
* are atomic, so a reader never sees inconsistent values.
|
||||||
* Cache-line alignment would conflict with, for example, linux/module.h
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
typedef struct { volatile int counter; } atomic_t;
|
|
||||||
|
|
||||||
/* It's possible to reduce all atomic operations to either
|
/* It's possible to reduce all atomic operations to either
|
||||||
* __atomic_add_return, atomic_set and atomic_read (the latter
|
* __atomic_add_return, atomic_set and atomic_read (the latter
|
||||||
* is there only for consistency).
|
* is there only for consistency).
|
||||||
@ -260,8 +257,6 @@ static __inline__ int atomic_add_unless(atomic_t *v, int a, int u)
|
|||||||
|
|
||||||
#ifdef CONFIG_64BIT
|
#ifdef CONFIG_64BIT
|
||||||
|
|
||||||
typedef struct { volatile s64 counter; } atomic64_t;
|
|
||||||
|
|
||||||
#define ATOMIC64_INIT(i) ((atomic64_t) { (i) })
|
#define ATOMIC64_INIT(i) ((atomic64_t) { (i) })
|
||||||
|
|
||||||
static __inline__ int
|
static __inline__ int
|
||||||
|
@ -35,3 +35,4 @@ unifdef-y += spu_info.h
|
|||||||
unifdef-y += termios.h
|
unifdef-y += termios.h
|
||||||
unifdef-y += types.h
|
unifdef-y += types.h
|
||||||
unifdef-y += unistd.h
|
unifdef-y += unistd.h
|
||||||
|
unifdef-y += swab.h
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
* PowerPC atomic operations
|
* PowerPC atomic operations
|
||||||
*/
|
*/
|
||||||
|
|
||||||
typedef struct { int counter; } atomic_t;
|
#include <linux/types.h>
|
||||||
|
|
||||||
#ifdef __KERNEL__
|
#ifdef __KERNEL__
|
||||||
#include <linux/compiler.h>
|
#include <linux/compiler.h>
|
||||||
@ -251,8 +251,6 @@ static __inline__ int atomic_dec_if_positive(atomic_t *v)
|
|||||||
|
|
||||||
#ifdef __powerpc64__
|
#ifdef __powerpc64__
|
||||||
|
|
||||||
typedef struct { long counter; } atomic64_t;
|
|
||||||
|
|
||||||
#define ATOMIC64_INIT(i) { (i) }
|
#define ATOMIC64_INIT(i) { (i) }
|
||||||
|
|
||||||
static __inline__ long atomic64_read(const atomic64_t *v)
|
static __inline__ long atomic64_read(const atomic64_t *v)
|
||||||
|
@ -8,86 +8,7 @@
|
|||||||
* 2 of the License, or (at your option) any later version.
|
* 2 of the License, or (at your option) any later version.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <asm/types.h>
|
#include <asm/swab.h>
|
||||||
#include <linux/compiler.h>
|
#include <linux/byteorder/big_endian.h>
|
||||||
|
|
||||||
#define __BIG_ENDIAN
|
|
||||||
|
|
||||||
#ifdef __GNUC__
|
|
||||||
#ifdef __KERNEL__
|
|
||||||
|
|
||||||
static __inline__ __u16 ld_le16(const volatile __u16 *addr)
|
|
||||||
{
|
|
||||||
__u16 val;
|
|
||||||
|
|
||||||
__asm__ __volatile__ ("lhbrx %0,0,%1" : "=r" (val) : "r" (addr), "m" (*addr));
|
|
||||||
return val;
|
|
||||||
}
|
|
||||||
#define __arch_swab16p ld_le16
|
|
||||||
|
|
||||||
static __inline__ void st_le16(volatile __u16 *addr, const __u16 val)
|
|
||||||
{
|
|
||||||
__asm__ __volatile__ ("sthbrx %1,0,%2" : "=m" (*addr) : "r" (val), "r" (addr));
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline void __arch_swab16s(__u16 *addr)
|
|
||||||
{
|
|
||||||
st_le16(addr, *addr);
|
|
||||||
}
|
|
||||||
#define __arch_swab16s __arch_swab16s
|
|
||||||
|
|
||||||
static __inline__ __u32 ld_le32(const volatile __u32 *addr)
|
|
||||||
{
|
|
||||||
__u32 val;
|
|
||||||
|
|
||||||
__asm__ __volatile__ ("lwbrx %0,0,%1" : "=r" (val) : "r" (addr), "m" (*addr));
|
|
||||||
return val;
|
|
||||||
}
|
|
||||||
#define __arch_swab32p ld_le32
|
|
||||||
|
|
||||||
static __inline__ void st_le32(volatile __u32 *addr, const __u32 val)
|
|
||||||
{
|
|
||||||
__asm__ __volatile__ ("stwbrx %1,0,%2" : "=m" (*addr) : "r" (val), "r" (addr));
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline void __arch_swab32s(__u32 *addr)
|
|
||||||
{
|
|
||||||
st_le32(addr, *addr);
|
|
||||||
}
|
|
||||||
#define __arch_swab32s __arch_swab32s
|
|
||||||
|
|
||||||
static inline __attribute_const__ __u16 __arch_swab16(__u16 value)
|
|
||||||
{
|
|
||||||
__u16 result;
|
|
||||||
|
|
||||||
__asm__("rlwimi %0,%1,8,16,23"
|
|
||||||
: "=r" (result)
|
|
||||||
: "r" (value), "0" (value >> 8));
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
#define __arch_swab16 __arch_swab16
|
|
||||||
|
|
||||||
static inline __attribute_const__ __u32 __arch_swab32(__u32 value)
|
|
||||||
{
|
|
||||||
__u32 result;
|
|
||||||
|
|
||||||
__asm__("rlwimi %0,%1,24,16,23\n\t"
|
|
||||||
"rlwimi %0,%1,8,8,15\n\t"
|
|
||||||
"rlwimi %0,%1,24,0,7"
|
|
||||||
: "=r" (result)
|
|
||||||
: "r" (value), "0" (value >> 24));
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
#define __arch_swab32 __arch_swab32
|
|
||||||
|
|
||||||
#endif /* __KERNEL__ */
|
|
||||||
|
|
||||||
#ifndef __powerpc64__
|
|
||||||
#define __SWAB_64_THRU_32__
|
|
||||||
#endif /* __powerpc64__ */
|
|
||||||
|
|
||||||
#endif /* __GNUC__ */
|
|
||||||
|
|
||||||
#include <linux/byteorder.h>
|
|
||||||
|
|
||||||
#endif /* _ASM_POWERPC_BYTEORDER_H */
|
#endif /* _ASM_POWERPC_BYTEORDER_H */
|
||||||
|
@ -17,6 +17,12 @@ void set_huge_pte_at(struct mm_struct *mm, unsigned long addr,
|
|||||||
pte_t huge_ptep_get_and_clear(struct mm_struct *mm, unsigned long addr,
|
pte_t huge_ptep_get_and_clear(struct mm_struct *mm, unsigned long addr,
|
||||||
pte_t *ptep);
|
pte_t *ptep);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The version of vma_mmu_pagesize() in arch/powerpc/mm/hugetlbpage.c needs
|
||||||
|
* to override the version in mm/hugetlb.c
|
||||||
|
*/
|
||||||
|
#define vma_mmu_pagesize vma_mmu_pagesize
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* If the arch doesn't supply something else, assume that hugepage
|
* If the arch doesn't supply something else, assume that hugepage
|
||||||
* size aligned regions are ok without further preparation.
|
* size aligned regions are ok without further preparation.
|
||||||
|
90
arch/powerpc/include/asm/swab.h
Normal file
90
arch/powerpc/include/asm/swab.h
Normal file
@ -0,0 +1,90 @@
|
|||||||
|
#ifndef _ASM_POWERPC_SWAB_H
|
||||||
|
#define _ASM_POWERPC_SWAB_H
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This program is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU General Public License
|
||||||
|
* as published by the Free Software Foundation; either version
|
||||||
|
* 2 of the License, or (at your option) any later version.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <asm/types.h>
|
||||||
|
#include <linux/compiler.h>
|
||||||
|
|
||||||
|
#ifdef __GNUC__
|
||||||
|
|
||||||
|
#ifndef __powerpc64__
|
||||||
|
#define __SWAB_64_THRU_32__
|
||||||
|
#endif /* __powerpc64__ */
|
||||||
|
|
||||||
|
#ifdef __KERNEL__
|
||||||
|
|
||||||
|
static __inline__ __u16 ld_le16(const volatile __u16 *addr)
|
||||||
|
{
|
||||||
|
__u16 val;
|
||||||
|
|
||||||
|
__asm__ __volatile__ ("lhbrx %0,0,%1" : "=r" (val) : "r" (addr), "m" (*addr));
|
||||||
|
return val;
|
||||||
|
}
|
||||||
|
#define __arch_swab16p ld_le16
|
||||||
|
|
||||||
|
static __inline__ void st_le16(volatile __u16 *addr, const __u16 val)
|
||||||
|
{
|
||||||
|
__asm__ __volatile__ ("sthbrx %1,0,%2" : "=m" (*addr) : "r" (val), "r" (addr));
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline void __arch_swab16s(__u16 *addr)
|
||||||
|
{
|
||||||
|
st_le16(addr, *addr);
|
||||||
|
}
|
||||||
|
#define __arch_swab16s __arch_swab16s
|
||||||
|
|
||||||
|
static __inline__ __u32 ld_le32(const volatile __u32 *addr)
|
||||||
|
{
|
||||||
|
__u32 val;
|
||||||
|
|
||||||
|
__asm__ __volatile__ ("lwbrx %0,0,%1" : "=r" (val) : "r" (addr), "m" (*addr));
|
||||||
|
return val;
|
||||||
|
}
|
||||||
|
#define __arch_swab32p ld_le32
|
||||||
|
|
||||||
|
static __inline__ void st_le32(volatile __u32 *addr, const __u32 val)
|
||||||
|
{
|
||||||
|
__asm__ __volatile__ ("stwbrx %1,0,%2" : "=m" (*addr) : "r" (val), "r" (addr));
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline void __arch_swab32s(__u32 *addr)
|
||||||
|
{
|
||||||
|
st_le32(addr, *addr);
|
||||||
|
}
|
||||||
|
#define __arch_swab32s __arch_swab32s
|
||||||
|
|
||||||
|
static inline __attribute_const__ __u16 __arch_swab16(__u16 value)
|
||||||
|
{
|
||||||
|
__u16 result;
|
||||||
|
|
||||||
|
__asm__("rlwimi %0,%1,8,16,23"
|
||||||
|
: "=r" (result)
|
||||||
|
: "r" (value), "0" (value >> 8));
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
#define __arch_swab16 __arch_swab16
|
||||||
|
|
||||||
|
static inline __attribute_const__ __u32 __arch_swab32(__u32 value)
|
||||||
|
{
|
||||||
|
__u32 result;
|
||||||
|
|
||||||
|
__asm__("rlwimi %0,%1,24,16,23\n\t"
|
||||||
|
"rlwimi %0,%1,8,8,15\n\t"
|
||||||
|
"rlwimi %0,%1,24,0,7"
|
||||||
|
: "=r" (result)
|
||||||
|
: "r" (value), "0" (value >> 24));
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
#define __arch_swab32 __arch_swab32
|
||||||
|
|
||||||
|
#endif /* __KERNEL__ */
|
||||||
|
|
||||||
|
#endif /* __GNUC__ */
|
||||||
|
|
||||||
|
#endif /* _ASM_POWERPC_SWAB_H */
|
@ -96,9 +96,10 @@ void __kprobes arch_disarm_kprobe(struct kprobe *p)
|
|||||||
|
|
||||||
void __kprobes arch_remove_kprobe(struct kprobe *p)
|
void __kprobes arch_remove_kprobe(struct kprobe *p)
|
||||||
{
|
{
|
||||||
mutex_lock(&kprobe_mutex);
|
if (p->ainsn.insn) {
|
||||||
free_insn_slot(p->ainsn.insn, 0);
|
free_insn_slot(p->ainsn.insn, 0);
|
||||||
mutex_unlock(&kprobe_mutex);
|
p->ainsn.insn = NULL;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void __kprobes prepare_singlestep(struct kprobe *p, struct pt_regs *regs)
|
static void __kprobes prepare_singlestep(struct kprobe *p, struct pt_regs *regs)
|
||||||
|
@ -512,6 +512,13 @@ unsigned long hugetlb_get_unmapped_area(struct file *file, unsigned long addr,
|
|||||||
return slice_get_unmapped_area(addr, len, flags, mmu_psize, 1, 0);
|
return slice_get_unmapped_area(addr, len, flags, mmu_psize, 1, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
unsigned long vma_mmu_pagesize(struct vm_area_struct *vma)
|
||||||
|
{
|
||||||
|
unsigned int psize = get_slice_psize(vma->vm_mm, vma->vm_start);
|
||||||
|
|
||||||
|
return 1UL << mmu_psize_to_shift(psize);
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Called by asm hashtable.S for doing lazy icache flush
|
* Called by asm hashtable.S for doing lazy icache flush
|
||||||
*/
|
*/
|
||||||
|
@ -132,7 +132,7 @@ int arch_add_memory(int nid, u64 start, u64 size)
|
|||||||
/* this should work for most non-highmem platforms */
|
/* this should work for most non-highmem platforms */
|
||||||
zone = pgdata->node_zones;
|
zone = pgdata->node_zones;
|
||||||
|
|
||||||
return __add_pages(zone, start_pfn, nr_pages);
|
return __add_pages(nid, zone, start_pfn, nr_pages);
|
||||||
}
|
}
|
||||||
#endif /* CONFIG_MEMORY_HOTPLUG */
|
#endif /* CONFIG_MEMORY_HOTPLUG */
|
||||||
|
|
||||||
|
@ -13,3 +13,4 @@ unifdef-y += cmb.h
|
|||||||
unifdef-y += debug.h
|
unifdef-y += debug.h
|
||||||
unifdef-y += chpid.h
|
unifdef-y += chpid.h
|
||||||
unifdef-y += schid.h
|
unifdef-y += schid.h
|
||||||
|
unifdef-y += swab.h
|
||||||
|
@ -2,6 +2,7 @@
|
|||||||
#define __ARCH_S390_ATOMIC__
|
#define __ARCH_S390_ATOMIC__
|
||||||
|
|
||||||
#include <linux/compiler.h>
|
#include <linux/compiler.h>
|
||||||
|
#include <linux/types.h>
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* include/asm-s390/atomic.h
|
* include/asm-s390/atomic.h
|
||||||
@ -23,9 +24,6 @@
|
|||||||
* S390 uses 'Compare And Swap' for atomicity in SMP enviroment
|
* S390 uses 'Compare And Swap' for atomicity in SMP enviroment
|
||||||
*/
|
*/
|
||||||
|
|
||||||
typedef struct {
|
|
||||||
int counter;
|
|
||||||
} __attribute__ ((aligned (4))) atomic_t;
|
|
||||||
#define ATOMIC_INIT(i) { (i) }
|
#define ATOMIC_INIT(i) { (i) }
|
||||||
|
|
||||||
#ifdef __KERNEL__
|
#ifdef __KERNEL__
|
||||||
@ -149,9 +147,6 @@ static __inline__ int atomic_add_unless(atomic_t *v, int a, int u)
|
|||||||
#undef __CS_LOOP
|
#undef __CS_LOOP
|
||||||
|
|
||||||
#ifdef __s390x__
|
#ifdef __s390x__
|
||||||
typedef struct {
|
|
||||||
long long counter;
|
|
||||||
} __attribute__ ((aligned (8))) atomic64_t;
|
|
||||||
#define ATOMIC64_INIT(i) { (i) }
|
#define ATOMIC64_INIT(i) { (i) }
|
||||||
|
|
||||||
#if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ > 2)
|
#if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ > 2)
|
||||||
|
@ -1,95 +1,7 @@
|
|||||||
#ifndef _S390_BYTEORDER_H
|
#ifndef _S390_BYTEORDER_H
|
||||||
#define _S390_BYTEORDER_H
|
#define _S390_BYTEORDER_H
|
||||||
|
|
||||||
/*
|
#include <asm/swab.h>
|
||||||
* include/asm-s390/byteorder.h
|
#include <linux/byteorder/big_endian.h>
|
||||||
*
|
|
||||||
* S390 version
|
|
||||||
* Copyright (C) 1999 IBM Deutschland Entwicklung GmbH, IBM Corporation
|
|
||||||
* Author(s): Martin Schwidefsky (schwidefsky@de.ibm.com)
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <asm/types.h>
|
|
||||||
|
|
||||||
#define __BIG_ENDIAN
|
|
||||||
|
|
||||||
#ifndef __s390x__
|
|
||||||
# define __SWAB_64_THRU_32__
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef __s390x__
|
|
||||||
static inline __u64 __arch_swab64p(const __u64 *x)
|
|
||||||
{
|
|
||||||
__u64 result;
|
|
||||||
|
|
||||||
asm volatile("lrvg %0,%1" : "=d" (result) : "m" (*x));
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
#define __arch_swab64p __arch_swab64p
|
|
||||||
|
|
||||||
static inline __u64 __arch_swab64(__u64 x)
|
|
||||||
{
|
|
||||||
__u64 result;
|
|
||||||
|
|
||||||
asm volatile("lrvgr %0,%1" : "=d" (result) : "d" (x));
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
#define __arch_swab64 __arch_swab64
|
|
||||||
|
|
||||||
static inline void __arch_swab64s(__u64 *x)
|
|
||||||
{
|
|
||||||
*x = __arch_swab64p(x);
|
|
||||||
}
|
|
||||||
#define __arch_swab64s __arch_swab64s
|
|
||||||
#endif /* __s390x__ */
|
|
||||||
|
|
||||||
static inline __u32 __arch_swab32p(const __u32 *x)
|
|
||||||
{
|
|
||||||
__u32 result;
|
|
||||||
|
|
||||||
asm volatile(
|
|
||||||
#ifndef __s390x__
|
|
||||||
" icm %0,8,3(%1)\n"
|
|
||||||
" icm %0,4,2(%1)\n"
|
|
||||||
" icm %0,2,1(%1)\n"
|
|
||||||
" ic %0,0(%1)"
|
|
||||||
: "=&d" (result) : "a" (x), "m" (*x) : "cc");
|
|
||||||
#else /* __s390x__ */
|
|
||||||
" lrv %0,%1"
|
|
||||||
: "=d" (result) : "m" (*x));
|
|
||||||
#endif /* __s390x__ */
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
#define __arch_swab32p __arch_swab32p
|
|
||||||
|
|
||||||
#ifdef __s390x__
|
|
||||||
static inline __u32 __arch_swab32(__u32 x)
|
|
||||||
{
|
|
||||||
__u32 result;
|
|
||||||
|
|
||||||
asm volatile("lrvr %0,%1" : "=d" (result) : "d" (x));
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
#define __arch_swab32 __arch_swab32
|
|
||||||
#endif /* __s390x__ */
|
|
||||||
|
|
||||||
static inline __u16 __arch_swab16p(const __u16 *x)
|
|
||||||
{
|
|
||||||
__u16 result;
|
|
||||||
|
|
||||||
asm volatile(
|
|
||||||
#ifndef __s390x__
|
|
||||||
" icm %0,2,1(%1)\n"
|
|
||||||
" ic %0,0(%1)\n"
|
|
||||||
: "=&d" (result) : "a" (x), "m" (*x) : "cc");
|
|
||||||
#else /* __s390x__ */
|
|
||||||
" lrvh %0,%1"
|
|
||||||
: "=d" (result) : "m" (*x));
|
|
||||||
#endif /* __s390x__ */
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
#define __arch_swab16p __arch_swab16p
|
|
||||||
|
|
||||||
#include <linux/byteorder.h>
|
|
||||||
|
|
||||||
#endif /* _S390_BYTEORDER_H */
|
#endif /* _S390_BYTEORDER_H */
|
||||||
|
@ -1,15 +0,0 @@
|
|||||||
/*
|
|
||||||
* include/asm-s390/ccwdev.h
|
|
||||||
*
|
|
||||||
* Copyright (C) 2002,2005 IBM Deutschland Entwicklung GmbH, IBM Corporation
|
|
||||||
* Author(s): Cornelia Huck <cornelia.huck@de.ibm.com>
|
|
||||||
* Carsten Otte <cotte@de.ibm.com>
|
|
||||||
*
|
|
||||||
* Interface for s390 root device
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef _S390_RDEV_H_
|
|
||||||
#define _S390_RDEV_H_
|
|
||||||
extern struct device *s390_root_dev_register(const char *);
|
|
||||||
extern void s390_root_dev_unregister(struct device *);
|
|
||||||
#endif /* _S390_RDEV_H_ */
|
|
91
arch/s390/include/asm/swab.h
Normal file
91
arch/s390/include/asm/swab.h
Normal file
@ -0,0 +1,91 @@
|
|||||||
|
#ifndef _S390_SWAB_H
|
||||||
|
#define _S390_SWAB_H
|
||||||
|
|
||||||
|
/*
|
||||||
|
* include/asm-s390/swab.h
|
||||||
|
*
|
||||||
|
* S390 version
|
||||||
|
* Copyright (C) 1999 IBM Deutschland Entwicklung GmbH, IBM Corporation
|
||||||
|
* Author(s): Martin Schwidefsky (schwidefsky@de.ibm.com)
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <asm/types.h>
|
||||||
|
|
||||||
|
#ifndef __s390x__
|
||||||
|
# define __SWAB_64_THRU_32__
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __s390x__
|
||||||
|
static inline __u64 __arch_swab64p(const __u64 *x)
|
||||||
|
{
|
||||||
|
__u64 result;
|
||||||
|
|
||||||
|
asm volatile("lrvg %0,%1" : "=d" (result) : "m" (*x));
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
#define __arch_swab64p __arch_swab64p
|
||||||
|
|
||||||
|
static inline __u64 __arch_swab64(__u64 x)
|
||||||
|
{
|
||||||
|
__u64 result;
|
||||||
|
|
||||||
|
asm volatile("lrvgr %0,%1" : "=d" (result) : "d" (x));
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
#define __arch_swab64 __arch_swab64
|
||||||
|
|
||||||
|
static inline void __arch_swab64s(__u64 *x)
|
||||||
|
{
|
||||||
|
*x = __arch_swab64p(x);
|
||||||
|
}
|
||||||
|
#define __arch_swab64s __arch_swab64s
|
||||||
|
#endif /* __s390x__ */
|
||||||
|
|
||||||
|
static inline __u32 __arch_swab32p(const __u32 *x)
|
||||||
|
{
|
||||||
|
__u32 result;
|
||||||
|
|
||||||
|
asm volatile(
|
||||||
|
#ifndef __s390x__
|
||||||
|
" icm %0,8,3(%1)\n"
|
||||||
|
" icm %0,4,2(%1)\n"
|
||||||
|
" icm %0,2,1(%1)\n"
|
||||||
|
" ic %0,0(%1)"
|
||||||
|
: "=&d" (result) : "a" (x), "m" (*x) : "cc");
|
||||||
|
#else /* __s390x__ */
|
||||||
|
" lrv %0,%1"
|
||||||
|
: "=d" (result) : "m" (*x));
|
||||||
|
#endif /* __s390x__ */
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
#define __arch_swab32p __arch_swab32p
|
||||||
|
|
||||||
|
#ifdef __s390x__
|
||||||
|
static inline __u32 __arch_swab32(__u32 x)
|
||||||
|
{
|
||||||
|
__u32 result;
|
||||||
|
|
||||||
|
asm volatile("lrvr %0,%1" : "=d" (result) : "d" (x));
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
#define __arch_swab32 __arch_swab32
|
||||||
|
#endif /* __s390x__ */
|
||||||
|
|
||||||
|
static inline __u16 __arch_swab16p(const __u16 *x)
|
||||||
|
{
|
||||||
|
__u16 result;
|
||||||
|
|
||||||
|
asm volatile(
|
||||||
|
#ifndef __s390x__
|
||||||
|
" icm %0,2,1(%1)\n"
|
||||||
|
" ic %0,0(%1)\n"
|
||||||
|
: "=&d" (result) : "a" (x), "m" (*x) : "cc");
|
||||||
|
#else /* __s390x__ */
|
||||||
|
" lrvh %0,%1"
|
||||||
|
: "=d" (result) : "m" (*x));
|
||||||
|
#endif /* __s390x__ */
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
#define __arch_swab16p __arch_swab16p
|
||||||
|
|
||||||
|
#endif /* _S390_SWAB_H */
|
@ -218,9 +218,10 @@ void __kprobes arch_disarm_kprobe(struct kprobe *p)
|
|||||||
|
|
||||||
void __kprobes arch_remove_kprobe(struct kprobe *p)
|
void __kprobes arch_remove_kprobe(struct kprobe *p)
|
||||||
{
|
{
|
||||||
mutex_lock(&kprobe_mutex);
|
if (p->ainsn.insn) {
|
||||||
free_insn_slot(p->ainsn.insn, 0);
|
free_insn_slot(p->ainsn.insn, 0);
|
||||||
mutex_unlock(&kprobe_mutex);
|
p->ainsn.insn = NULL;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void __kprobes prepare_singlestep(struct kprobe *p, struct pt_regs *regs)
|
static void __kprobes prepare_singlestep(struct kprobe *p, struct pt_regs *regs)
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user