Merge branch 'master' into for-next
This commit is contained in:
1
.mailmap
1
.mailmap
@@ -23,6 +23,7 @@ Andy Adamson <andros@citi.umich.edu>
|
|||||||
Arnaud Patard <arnaud.patard@rtp-net.org>
|
Arnaud Patard <arnaud.patard@rtp-net.org>
|
||||||
Arnd Bergmann <arnd@arndb.de>
|
Arnd Bergmann <arnd@arndb.de>
|
||||||
Axel Dyks <xl@xlsigned.net>
|
Axel Dyks <xl@xlsigned.net>
|
||||||
|
Axel Lin <axel.lin@gmail.com>
|
||||||
Ben Gardner <bgardner@wabtec.com>
|
Ben Gardner <bgardner@wabtec.com>
|
||||||
Ben M Cahill <ben.m.cahill@intel.com>
|
Ben M Cahill <ben.m.cahill@intel.com>
|
||||||
Björn Steinbrink <B.Steinbrink@gmx.de>
|
Björn Steinbrink <B.Steinbrink@gmx.de>
|
||||||
|
4
Documentation/ABI/stable/thermal-notification
Normal file
4
Documentation/ABI/stable/thermal-notification
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
What: A notification mechanism for thermal related events
|
||||||
|
Description:
|
||||||
|
This interface enables notification for thermal related events.
|
||||||
|
The notification is in the form of a netlink event.
|
25
Documentation/ABI/testing/sysfs-platform-at91
Normal file
25
Documentation/ABI/testing/sysfs-platform-at91
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
What: /sys/devices/platform/at91_can/net/<iface>/mb0_id
|
||||||
|
Date: January 2011
|
||||||
|
KernelVersion: 2.6.38
|
||||||
|
Contact: Marc Kleine-Budde <kernel@pengutronix.de>
|
||||||
|
Description:
|
||||||
|
Value representing the can_id of mailbox 0.
|
||||||
|
|
||||||
|
Default: 0x7ff (standard frame)
|
||||||
|
|
||||||
|
Due to a chip bug (errata 50.2.6.3 & 50.3.5.3 in
|
||||||
|
"AT91SAM9263 Preliminary 6249H-ATARM-27-Jul-09") the
|
||||||
|
contents of mailbox 0 may be send under certain
|
||||||
|
conditions (even if disabled or in rx mode).
|
||||||
|
|
||||||
|
The workaround in the errata suggests not to use the
|
||||||
|
mailbox and load it with an unused identifier.
|
||||||
|
|
||||||
|
In order to use an extended can_id add the
|
||||||
|
CAN_EFF_FLAG (0x80000000U) to the can_id. Example:
|
||||||
|
|
||||||
|
- standard id 0x7ff:
|
||||||
|
echo 0x7ff > /sys/class/net/can0/mb0_id
|
||||||
|
|
||||||
|
- extended id 0x1fffffff:
|
||||||
|
echo 0x9fffffff > /sys/class/net/can0/mb0_id
|
@@ -268,10 +268,6 @@
|
|||||||
!Finclude/net/mac80211.h ieee80211_ops
|
!Finclude/net/mac80211.h ieee80211_ops
|
||||||
!Finclude/net/mac80211.h ieee80211_alloc_hw
|
!Finclude/net/mac80211.h ieee80211_alloc_hw
|
||||||
!Finclude/net/mac80211.h ieee80211_register_hw
|
!Finclude/net/mac80211.h ieee80211_register_hw
|
||||||
!Finclude/net/mac80211.h ieee80211_get_tx_led_name
|
|
||||||
!Finclude/net/mac80211.h ieee80211_get_rx_led_name
|
|
||||||
!Finclude/net/mac80211.h ieee80211_get_assoc_led_name
|
|
||||||
!Finclude/net/mac80211.h ieee80211_get_radio_led_name
|
|
||||||
!Finclude/net/mac80211.h ieee80211_unregister_hw
|
!Finclude/net/mac80211.h ieee80211_unregister_hw
|
||||||
!Finclude/net/mac80211.h ieee80211_free_hw
|
!Finclude/net/mac80211.h ieee80211_free_hw
|
||||||
</chapter>
|
</chapter>
|
||||||
@@ -382,6 +378,23 @@
|
|||||||
</para>
|
</para>
|
||||||
</partintro>
|
</partintro>
|
||||||
|
|
||||||
|
<chapter id="led-support">
|
||||||
|
<title>LED support</title>
|
||||||
|
<para>
|
||||||
|
Mac80211 supports various ways of blinking LEDs. Wherever possible,
|
||||||
|
device LEDs should be exposed as LED class devices and hooked up to
|
||||||
|
the appropriate trigger, which will then be triggered appropriately
|
||||||
|
by mac80211.
|
||||||
|
</para>
|
||||||
|
!Finclude/net/mac80211.h ieee80211_get_tx_led_name
|
||||||
|
!Finclude/net/mac80211.h ieee80211_get_rx_led_name
|
||||||
|
!Finclude/net/mac80211.h ieee80211_get_assoc_led_name
|
||||||
|
!Finclude/net/mac80211.h ieee80211_get_radio_led_name
|
||||||
|
!Finclude/net/mac80211.h ieee80211_tpt_blink
|
||||||
|
!Finclude/net/mac80211.h ieee80211_tpt_led_trigger_flags
|
||||||
|
!Finclude/net/mac80211.h ieee80211_create_tpt_led_trigger
|
||||||
|
</chapter>
|
||||||
|
|
||||||
<chapter id="hardware-crypto-offload">
|
<chapter id="hardware-crypto-offload">
|
||||||
<title>Hardware crypto acceleration</title>
|
<title>Hardware crypto acceleration</title>
|
||||||
!Pinclude/net/mac80211.h Hardware crypto acceleration
|
!Pinclude/net/mac80211.h Hardware crypto acceleration
|
||||||
|
@@ -217,8 +217,8 @@ X!Isound/sound_firmware.c
|
|||||||
<chapter id="uart16x50">
|
<chapter id="uart16x50">
|
||||||
<title>16x50 UART Driver</title>
|
<title>16x50 UART Driver</title>
|
||||||
!Iinclude/linux/serial_core.h
|
!Iinclude/linux/serial_core.h
|
||||||
!Edrivers/serial/serial_core.c
|
!Edrivers/tty/serial/serial_core.c
|
||||||
!Edrivers/serial/8250.c
|
!Edrivers/tty/serial/8250.c
|
||||||
</chapter>
|
</chapter>
|
||||||
|
|
||||||
<chapter id="fbdev">
|
<chapter id="fbdev">
|
||||||
|
@@ -28,7 +28,7 @@
|
|||||||
<holder>Convergence GmbH</holder>
|
<holder>Convergence GmbH</holder>
|
||||||
</copyright>
|
</copyright>
|
||||||
<copyright>
|
<copyright>
|
||||||
<year>2009-2010</year>
|
<year>2009-2011</year>
|
||||||
<holder>Mauro Carvalho Chehab</holder>
|
<holder>Mauro Carvalho Chehab</holder>
|
||||||
</copyright>
|
</copyright>
|
||||||
|
|
||||||
|
@@ -28,7 +28,7 @@
|
|||||||
<title>LINUX MEDIA INFRASTRUCTURE API</title>
|
<title>LINUX MEDIA INFRASTRUCTURE API</title>
|
||||||
|
|
||||||
<copyright>
|
<copyright>
|
||||||
<year>2009-2010</year>
|
<year>2009-2011</year>
|
||||||
<holder>LinuxTV Developers</holder>
|
<holder>LinuxTV Developers</holder>
|
||||||
</copyright>
|
</copyright>
|
||||||
|
|
||||||
@@ -86,7 +86,7 @@ Foundation. A copy of the license is included in the chapter entitled
|
|||||||
</author>
|
</author>
|
||||||
</authorgroup>
|
</authorgroup>
|
||||||
<copyright>
|
<copyright>
|
||||||
<year>2009-2010</year>
|
<year>2009-2011</year>
|
||||||
<holder>Mauro Carvalho Chehab</holder>
|
<holder>Mauro Carvalho Chehab</holder>
|
||||||
</copyright>
|
</copyright>
|
||||||
|
|
||||||
|
@@ -75,6 +75,7 @@ as follows:</para>
|
|||||||
</section>
|
</section>
|
||||||
|
|
||||||
<section>
|
<section>
|
||||||
|
<title>RDS datastructures</title>
|
||||||
<table frame="none" pgwide="1" id="v4l2-rds-data">
|
<table frame="none" pgwide="1" id="v4l2-rds-data">
|
||||||
<title>struct
|
<title>struct
|
||||||
<structname>v4l2_rds_data</structname></title>
|
<structname>v4l2_rds_data</structname></title>
|
||||||
@@ -129,10 +130,11 @@ as follows:</para>
|
|||||||
|
|
||||||
<table frame="none" pgwide="1" id="v4l2-rds-block-codes">
|
<table frame="none" pgwide="1" id="v4l2-rds-block-codes">
|
||||||
<title>Block defines</title>
|
<title>Block defines</title>
|
||||||
<tgroup cols="3">
|
<tgroup cols="4">
|
||||||
<colspec colname="c1" colwidth="1*" />
|
<colspec colname="c1" colwidth="1*" />
|
||||||
<colspec colname="c2" colwidth="1*" />
|
<colspec colname="c2" colwidth="1*" />
|
||||||
<colspec colname="c3" colwidth="5*" />
|
<colspec colname="c3" colwidth="1*" />
|
||||||
|
<colspec colname="c4" colwidth="5*" />
|
||||||
<tbody valign="top">
|
<tbody valign="top">
|
||||||
<row>
|
<row>
|
||||||
<entry>V4L2_RDS_BLOCK_MSK</entry>
|
<entry>V4L2_RDS_BLOCK_MSK</entry>
|
||||||
|
@@ -100,6 +100,7 @@ Remote Controller chapter.</contrib>
|
|||||||
<year>2008</year>
|
<year>2008</year>
|
||||||
<year>2009</year>
|
<year>2009</year>
|
||||||
<year>2010</year>
|
<year>2010</year>
|
||||||
|
<year>2011</year>
|
||||||
<holder>Bill Dirks, Michael H. Schimek, Hans Verkuil, Martin
|
<holder>Bill Dirks, Michael H. Schimek, Hans Verkuil, Martin
|
||||||
Rubli, Andy Walls, Muralidharan Karicheri, Mauro Carvalho Chehab</holder>
|
Rubli, Andy Walls, Muralidharan Karicheri, Mauro Carvalho Chehab</holder>
|
||||||
</copyright>
|
</copyright>
|
||||||
@@ -381,7 +382,7 @@ and discussions on the V4L mailing list.</revremark>
|
|||||||
</partinfo>
|
</partinfo>
|
||||||
|
|
||||||
<title>Video for Linux Two API Specification</title>
|
<title>Video for Linux Two API Specification</title>
|
||||||
<subtitle>Revision 2.6.33</subtitle>
|
<subtitle>Revision 2.6.38</subtitle>
|
||||||
|
|
||||||
<chapter id="common">
|
<chapter id="common">
|
||||||
&sub-common;
|
&sub-common;
|
||||||
|
@@ -533,6 +533,33 @@ completion during sending a panic event.
|
|||||||
Other Pieces
|
Other Pieces
|
||||||
------------
|
------------
|
||||||
|
|
||||||
|
Get the detailed info related with the IPMI device
|
||||||
|
--------------------------------------------------
|
||||||
|
|
||||||
|
Some users need more detailed information about a device, like where
|
||||||
|
the address came from or the raw base device for the IPMI interface.
|
||||||
|
You can use the IPMI smi_watcher to catch the IPMI interfaces as they
|
||||||
|
come or go, and to grab the information, you can use the function
|
||||||
|
ipmi_get_smi_info(), which returns the following structure:
|
||||||
|
|
||||||
|
struct ipmi_smi_info {
|
||||||
|
enum ipmi_addr_src addr_src;
|
||||||
|
struct device *dev;
|
||||||
|
union {
|
||||||
|
struct {
|
||||||
|
void *acpi_handle;
|
||||||
|
} acpi_info;
|
||||||
|
} addr_info;
|
||||||
|
};
|
||||||
|
|
||||||
|
Currently special info for only for SI_ACPI address sources is
|
||||||
|
returned. Others may be added as necessary.
|
||||||
|
|
||||||
|
Note that the dev pointer is included in the above structure, and
|
||||||
|
assuming ipmi_smi_get_info returns success, you must call put_device
|
||||||
|
on the dev pointer.
|
||||||
|
|
||||||
|
|
||||||
Watchdog
|
Watchdog
|
||||||
--------
|
--------
|
||||||
|
|
||||||
|
122
Documentation/acpi/apei/output_format.txt
Normal file
122
Documentation/acpi/apei/output_format.txt
Normal file
@@ -0,0 +1,122 @@
|
|||||||
|
APEI output format
|
||||||
|
~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
APEI uses printk as hardware error reporting interface, the output
|
||||||
|
format is as follow.
|
||||||
|
|
||||||
|
<error record> :=
|
||||||
|
APEI generic hardware error status
|
||||||
|
severity: <integer>, <severity string>
|
||||||
|
section: <integer>, severity: <integer>, <severity string>
|
||||||
|
flags: <integer>
|
||||||
|
<section flags strings>
|
||||||
|
fru_id: <uuid string>
|
||||||
|
fru_text: <string>
|
||||||
|
section_type: <section type string>
|
||||||
|
<section data>
|
||||||
|
|
||||||
|
<severity string>* := recoverable | fatal | corrected | info
|
||||||
|
|
||||||
|
<section flags strings># :=
|
||||||
|
[primary][, containment warning][, reset][, threshold exceeded]\
|
||||||
|
[, resource not accessible][, latent error]
|
||||||
|
|
||||||
|
<section type string> := generic processor error | memory error | \
|
||||||
|
PCIe error | unknown, <uuid string>
|
||||||
|
|
||||||
|
<section data> :=
|
||||||
|
<generic processor section data> | <memory section data> | \
|
||||||
|
<pcie section data> | <null>
|
||||||
|
|
||||||
|
<generic processor section data> :=
|
||||||
|
[processor_type: <integer>, <proc type string>]
|
||||||
|
[processor_isa: <integer>, <proc isa string>]
|
||||||
|
[error_type: <integer>
|
||||||
|
<proc error type strings>]
|
||||||
|
[operation: <integer>, <proc operation string>]
|
||||||
|
[flags: <integer>
|
||||||
|
<proc flags strings>]
|
||||||
|
[level: <integer>]
|
||||||
|
[version_info: <integer>]
|
||||||
|
[processor_id: <integer>]
|
||||||
|
[target_address: <integer>]
|
||||||
|
[requestor_id: <integer>]
|
||||||
|
[responder_id: <integer>]
|
||||||
|
[IP: <integer>]
|
||||||
|
|
||||||
|
<proc type string>* := IA32/X64 | IA64
|
||||||
|
|
||||||
|
<proc isa string>* := IA32 | IA64 | X64
|
||||||
|
|
||||||
|
<processor error type strings># :=
|
||||||
|
[cache error][, TLB error][, bus error][, micro-architectural error]
|
||||||
|
|
||||||
|
<proc operation string>* := unknown or generic | data read | data write | \
|
||||||
|
instruction execution
|
||||||
|
|
||||||
|
<proc flags strings># :=
|
||||||
|
[restartable][, precise IP][, overflow][, corrected]
|
||||||
|
|
||||||
|
<memory section data> :=
|
||||||
|
[error_status: <integer>]
|
||||||
|
[physical_address: <integer>]
|
||||||
|
[physical_address_mask: <integer>]
|
||||||
|
[node: <integer>]
|
||||||
|
[card: <integer>]
|
||||||
|
[module: <integer>]
|
||||||
|
[bank: <integer>]
|
||||||
|
[device: <integer>]
|
||||||
|
[row: <integer>]
|
||||||
|
[column: <integer>]
|
||||||
|
[bit_position: <integer>]
|
||||||
|
[requestor_id: <integer>]
|
||||||
|
[responder_id: <integer>]
|
||||||
|
[target_id: <integer>]
|
||||||
|
[error_type: <integer>, <mem error type string>]
|
||||||
|
|
||||||
|
<mem error type string>* :=
|
||||||
|
unknown | no error | single-bit ECC | multi-bit ECC | \
|
||||||
|
single-symbol chipkill ECC | multi-symbol chipkill ECC | master abort | \
|
||||||
|
target abort | parity error | watchdog timeout | invalid address | \
|
||||||
|
mirror Broken | memory sparing | scrub corrected error | \
|
||||||
|
scrub uncorrected error
|
||||||
|
|
||||||
|
<pcie section data> :=
|
||||||
|
[port_type: <integer>, <pcie port type string>]
|
||||||
|
[version: <integer>.<integer>]
|
||||||
|
[command: <integer>, status: <integer>]
|
||||||
|
[device_id: <integer>:<integer>:<integer>.<integer>
|
||||||
|
slot: <integer>
|
||||||
|
secondary_bus: <integer>
|
||||||
|
vendor_id: <integer>, device_id: <integer>
|
||||||
|
class_code: <integer>]
|
||||||
|
[serial number: <integer>, <integer>]
|
||||||
|
[bridge: secondary_status: <integer>, control: <integer>]
|
||||||
|
|
||||||
|
<pcie port type string>* := PCIe end point | legacy PCI end point | \
|
||||||
|
unknown | unknown | root port | upstream switch port | \
|
||||||
|
downstream switch port | PCIe to PCI/PCI-X bridge | \
|
||||||
|
PCI/PCI-X to PCIe bridge | root complex integrated endpoint device | \
|
||||||
|
root complex event collector
|
||||||
|
|
||||||
|
Where, [] designate corresponding content is optional
|
||||||
|
|
||||||
|
All <field string> description with * has the following format:
|
||||||
|
|
||||||
|
field: <integer>, <field string>
|
||||||
|
|
||||||
|
Where value of <integer> should be the position of "string" in <field
|
||||||
|
string> description. Otherwise, <field string> will be "unknown".
|
||||||
|
|
||||||
|
All <field strings> description with # has the following format:
|
||||||
|
|
||||||
|
field: <integer>
|
||||||
|
<field strings>
|
||||||
|
|
||||||
|
Where each string in <fields strings> corresponding to one set bit of
|
||||||
|
<integer>. The bit position is the position of "string" in <field
|
||||||
|
strings> description.
|
||||||
|
|
||||||
|
For more detailed explanation of every field, please refer to UEFI
|
||||||
|
specification version 2.3 or later, section Appendix N: Common
|
||||||
|
Platform Error Record.
|
@@ -65,13 +65,19 @@ looks at the connected hardware is beyond the scope of this document.
|
|||||||
The boot loader must ultimately be able to provide a MACH_TYPE_xxx
|
The boot loader must ultimately be able to provide a MACH_TYPE_xxx
|
||||||
value to the kernel. (see linux/arch/arm/tools/mach-types).
|
value to the kernel. (see linux/arch/arm/tools/mach-types).
|
||||||
|
|
||||||
|
4. Setup boot data
|
||||||
4. Setup the kernel tagged list
|
------------------
|
||||||
-------------------------------
|
|
||||||
|
|
||||||
Existing boot loaders: OPTIONAL, HIGHLY RECOMMENDED
|
Existing boot loaders: OPTIONAL, HIGHLY RECOMMENDED
|
||||||
New boot loaders: MANDATORY
|
New boot loaders: MANDATORY
|
||||||
|
|
||||||
|
The boot loader must provide either a tagged list or a dtb image for
|
||||||
|
passing configuration data to the kernel. The physical address of the
|
||||||
|
boot data is passed to the kernel in register r2.
|
||||||
|
|
||||||
|
4a. Setup the kernel tagged list
|
||||||
|
--------------------------------
|
||||||
|
|
||||||
The boot loader must create and initialise the kernel tagged list.
|
The boot loader must create and initialise the kernel tagged list.
|
||||||
A valid tagged list starts with ATAG_CORE and ends with ATAG_NONE.
|
A valid tagged list starts with ATAG_CORE and ends with ATAG_NONE.
|
||||||
The ATAG_CORE tag may or may not be empty. An empty ATAG_CORE tag
|
The ATAG_CORE tag may or may not be empty. An empty ATAG_CORE tag
|
||||||
@@ -101,6 +107,24 @@ The tagged list must be placed in a region of memory where neither
|
|||||||
the kernel decompressor nor initrd 'bootp' program will overwrite
|
the kernel decompressor nor initrd 'bootp' program will overwrite
|
||||||
it. The recommended placement is in the first 16KiB of RAM.
|
it. The recommended placement is in the first 16KiB of RAM.
|
||||||
|
|
||||||
|
4b. Setup the device tree
|
||||||
|
-------------------------
|
||||||
|
|
||||||
|
The boot loader must load a device tree image (dtb) into system ram
|
||||||
|
at a 64bit aligned address and initialize it with the boot data. The
|
||||||
|
dtb format is documented in Documentation/devicetree/booting-without-of.txt.
|
||||||
|
The kernel will look for the dtb magic value of 0xd00dfeed at the dtb
|
||||||
|
physical address to determine if a dtb has been passed instead of a
|
||||||
|
tagged list.
|
||||||
|
|
||||||
|
The boot loader must pass at a minimum the size and location of the
|
||||||
|
system memory, and the root filesystem location. The dtb must be
|
||||||
|
placed in a region of memory where the kernel decompressor will not
|
||||||
|
overwrite it. The recommended placement is in the first 16KiB of RAM
|
||||||
|
with the caveat that it may not be located at physical address 0 since
|
||||||
|
the kernel interprets a value of 0 in r2 to mean neither a tagged list
|
||||||
|
nor a dtb were passed.
|
||||||
|
|
||||||
5. Calling the kernel image
|
5. Calling the kernel image
|
||||||
---------------------------
|
---------------------------
|
||||||
|
|
||||||
@@ -125,7 +149,8 @@ In either case, the following conditions must be met:
|
|||||||
- CPU register settings
|
- CPU register settings
|
||||||
r0 = 0,
|
r0 = 0,
|
||||||
r1 = machine type number discovered in (3) above.
|
r1 = machine type number discovered in (3) above.
|
||||||
r2 = physical address of tagged list in system RAM.
|
r2 = physical address of tagged list in system RAM, or
|
||||||
|
physical address of device tree block (dtb) in system RAM
|
||||||
|
|
||||||
- CPU mode
|
- CPU mode
|
||||||
All forms of interrupts must be disabled (IRQs and FIQs)
|
All forms of interrupts must be disabled (IRQs and FIQs)
|
||||||
|
@@ -8,7 +8,7 @@ Parameters: <cipher> <key> <iv_offset> <device path> <offset>
|
|||||||
|
|
||||||
<cipher>
|
<cipher>
|
||||||
Encryption cipher and an optional IV generation mode.
|
Encryption cipher and an optional IV generation mode.
|
||||||
(In format cipher-chainmode-ivopts:ivmode).
|
(In format cipher[:keycount]-chainmode-ivopts:ivmode).
|
||||||
Examples:
|
Examples:
|
||||||
des
|
des
|
||||||
aes-cbc-essiv:sha256
|
aes-cbc-essiv:sha256
|
||||||
@@ -20,6 +20,11 @@ Parameters: <cipher> <key> <iv_offset> <device path> <offset>
|
|||||||
Key used for encryption. It is encoded as a hexadecimal number.
|
Key used for encryption. It is encoded as a hexadecimal number.
|
||||||
You can only use key sizes that are valid for the selected cipher.
|
You can only use key sizes that are valid for the selected cipher.
|
||||||
|
|
||||||
|
<keycount>
|
||||||
|
Multi-key compatibility mode. You can define <keycount> keys and
|
||||||
|
then sectors are encrypted according to their offsets (sector 0 uses key0;
|
||||||
|
sector 1 uses key1 etc.). <keycount> must be a power of two.
|
||||||
|
|
||||||
<iv_offset>
|
<iv_offset>
|
||||||
The IV offset is a sector count that is added to the sector number
|
The IV offset is a sector count that is added to the sector number
|
||||||
before creating the IV.
|
before creating the IV.
|
||||||
|
70
Documentation/device-mapper/dm-raid.txt
Normal file
70
Documentation/device-mapper/dm-raid.txt
Normal file
@@ -0,0 +1,70 @@
|
|||||||
|
Device-mapper RAID (dm-raid) is a bridge from DM to MD. It
|
||||||
|
provides a way to use device-mapper interfaces to access the MD RAID
|
||||||
|
drivers.
|
||||||
|
|
||||||
|
As with all device-mapper targets, the nominal public interfaces are the
|
||||||
|
constructor (CTR) tables and the status outputs (both STATUSTYPE_INFO
|
||||||
|
and STATUSTYPE_TABLE). The CTR table looks like the following:
|
||||||
|
|
||||||
|
1: <s> <l> raid \
|
||||||
|
2: <raid_type> <#raid_params> <raid_params> \
|
||||||
|
3: <#raid_devs> <meta_dev1> <dev1> .. <meta_devN> <devN>
|
||||||
|
|
||||||
|
Line 1 contains the standard first three arguments to any device-mapper
|
||||||
|
target - the start, length, and target type fields. The target type in
|
||||||
|
this case is "raid".
|
||||||
|
|
||||||
|
Line 2 contains the arguments that define the particular raid
|
||||||
|
type/personality/level, the required arguments for that raid type, and
|
||||||
|
any optional arguments. Possible raid types include: raid4, raid5_la,
|
||||||
|
raid5_ls, raid5_rs, raid6_zr, raid6_nr, and raid6_nc. (raid1 is
|
||||||
|
planned for the future.) The list of required and optional parameters
|
||||||
|
is the same for all the current raid types. The required parameters are
|
||||||
|
positional, while the optional parameters are given as key/value pairs.
|
||||||
|
The possible parameters are as follows:
|
||||||
|
<chunk_size> Chunk size in sectors.
|
||||||
|
[[no]sync] Force/Prevent RAID initialization
|
||||||
|
[rebuild <idx>] Rebuild the drive indicated by the index
|
||||||
|
[daemon_sleep <ms>] Time between bitmap daemon work to clear bits
|
||||||
|
[min_recovery_rate <kB/sec/disk>] Throttle RAID initialization
|
||||||
|
[max_recovery_rate <kB/sec/disk>] Throttle RAID initialization
|
||||||
|
[max_write_behind <sectors>] See '-write-behind=' (man mdadm)
|
||||||
|
[stripe_cache <sectors>] Stripe cache size for higher RAIDs
|
||||||
|
|
||||||
|
Line 3 contains the list of devices that compose the array in
|
||||||
|
metadata/data device pairs. If the metadata is stored separately, a '-'
|
||||||
|
is given for the metadata device position. If a drive has failed or is
|
||||||
|
missing at creation time, a '-' can be given for both the metadata and
|
||||||
|
data drives for a given position.
|
||||||
|
|
||||||
|
NB. Currently all metadata devices must be specified as '-'.
|
||||||
|
|
||||||
|
Examples:
|
||||||
|
# RAID4 - 4 data drives, 1 parity
|
||||||
|
# No metadata devices specified to hold superblock/bitmap info
|
||||||
|
# Chunk size of 1MiB
|
||||||
|
# (Lines separated for easy reading)
|
||||||
|
0 1960893648 raid \
|
||||||
|
raid4 1 2048 \
|
||||||
|
5 - 8:17 - 8:33 - 8:49 - 8:65 - 8:81
|
||||||
|
|
||||||
|
# RAID4 - 4 data drives, 1 parity (no metadata devices)
|
||||||
|
# Chunk size of 1MiB, force RAID initialization,
|
||||||
|
# min recovery rate at 20 kiB/sec/disk
|
||||||
|
0 1960893648 raid \
|
||||||
|
raid4 4 2048 min_recovery_rate 20 sync\
|
||||||
|
5 - 8:17 - 8:33 - 8:49 - 8:65 - 8:81
|
||||||
|
|
||||||
|
Performing a 'dmsetup table' should display the CTR table used to
|
||||||
|
construct the mapping (with possible reordering of optional
|
||||||
|
parameters).
|
||||||
|
|
||||||
|
Performing a 'dmsetup status' will yield information on the state and
|
||||||
|
health of the array. The output is as follows:
|
||||||
|
1: <s> <l> raid \
|
||||||
|
2: <raid_type> <#devices> <1 health char for each dev> <resync_ratio>
|
||||||
|
|
||||||
|
Line 1 is standard DM output. Line 2 is best shown by example:
|
||||||
|
0 1960893648 raid raid4 5 AAAAA 2/490221568
|
||||||
|
Here we can see the RAID type is raid4, there are 5 devices - all of
|
||||||
|
which are 'A'live, and the array is 2/490221568 complete with recovery.
|
@@ -13,7 +13,7 @@ Table of Contents
|
|||||||
|
|
||||||
I - Introduction
|
I - Introduction
|
||||||
1) Entry point for arch/powerpc
|
1) Entry point for arch/powerpc
|
||||||
2) Board support
|
2) Entry point for arch/arm
|
||||||
|
|
||||||
II - The DT block format
|
II - The DT block format
|
||||||
1) Header
|
1) Header
|
||||||
@@ -41,13 +41,6 @@ Table of Contents
|
|||||||
VI - System-on-a-chip devices and nodes
|
VI - System-on-a-chip devices and nodes
|
||||||
1) Defining child nodes of an SOC
|
1) Defining child nodes of an SOC
|
||||||
2) Representing devices without a current OF specification
|
2) Representing devices without a current OF specification
|
||||||
a) PHY nodes
|
|
||||||
b) Interrupt controllers
|
|
||||||
c) 4xx/Axon EMAC ethernet nodes
|
|
||||||
d) Xilinx IP cores
|
|
||||||
e) USB EHCI controllers
|
|
||||||
f) MDIO on GPIOs
|
|
||||||
g) SPI busses
|
|
||||||
|
|
||||||
VII - Specifying interrupt information for devices
|
VII - Specifying interrupt information for devices
|
||||||
1) interrupts property
|
1) interrupts property
|
||||||
@@ -123,7 +116,7 @@ Revision Information
|
|||||||
I - Introduction
|
I - Introduction
|
||||||
================
|
================
|
||||||
|
|
||||||
During the recent development of the Linux/ppc64 kernel, and more
|
During the development of the Linux/ppc64 kernel, and more
|
||||||
specifically, the addition of new platform types outside of the old
|
specifically, the addition of new platform types outside of the old
|
||||||
IBM pSeries/iSeries pair, it was decided to enforce some strict rules
|
IBM pSeries/iSeries pair, it was decided to enforce some strict rules
|
||||||
regarding the kernel entry and bootloader <-> kernel interfaces, in
|
regarding the kernel entry and bootloader <-> kernel interfaces, in
|
||||||
@@ -146,7 +139,7 @@ section III, but, for example, the kernel does not require you to
|
|||||||
create a node for every PCI device in the system. It is a requirement
|
create a node for every PCI device in the system. It is a requirement
|
||||||
to have a node for PCI host bridges in order to provide interrupt
|
to have a node for PCI host bridges in order to provide interrupt
|
||||||
routing informations and memory/IO ranges, among others. It is also
|
routing informations and memory/IO ranges, among others. It is also
|
||||||
recommended to define nodes for on chip devices and other busses that
|
recommended to define nodes for on chip devices and other buses that
|
||||||
don't specifically fit in an existing OF specification. This creates a
|
don't specifically fit in an existing OF specification. This creates a
|
||||||
great flexibility in the way the kernel can then probe those and match
|
great flexibility in the way the kernel can then probe those and match
|
||||||
drivers to device, without having to hard code all sorts of tables. It
|
drivers to device, without having to hard code all sorts of tables. It
|
||||||
@@ -158,7 +151,7 @@ it with special cases.
|
|||||||
1) Entry point for arch/powerpc
|
1) Entry point for arch/powerpc
|
||||||
-------------------------------
|
-------------------------------
|
||||||
|
|
||||||
There is one and one single entry point to the kernel, at the start
|
There is one single entry point to the kernel, at the start
|
||||||
of the kernel image. That entry point supports two calling
|
of the kernel image. That entry point supports two calling
|
||||||
conventions:
|
conventions:
|
||||||
|
|
||||||
@@ -210,12 +203,6 @@ it with special cases.
|
|||||||
with all CPUs. The way to do that with method b) will be
|
with all CPUs. The way to do that with method b) will be
|
||||||
described in a later revision of this document.
|
described in a later revision of this document.
|
||||||
|
|
||||||
|
|
||||||
2) Board support
|
|
||||||
----------------
|
|
||||||
|
|
||||||
64-bit kernels:
|
|
||||||
|
|
||||||
Board supports (platforms) are not exclusive config options. An
|
Board supports (platforms) are not exclusive config options. An
|
||||||
arbitrary set of board supports can be built in a single kernel
|
arbitrary set of board supports can be built in a single kernel
|
||||||
image. The kernel will "know" what set of functions to use for a
|
image. The kernel will "know" what set of functions to use for a
|
||||||
@@ -234,47 +221,49 @@ it with special cases.
|
|||||||
containing the various callbacks that the generic code will
|
containing the various callbacks that the generic code will
|
||||||
use to get to your platform specific code
|
use to get to your platform specific code
|
||||||
|
|
||||||
c) Add a reference to your "ppc_md" structure in the
|
A kernel image may support multiple platforms, but only if the
|
||||||
"machines" table in arch/powerpc/kernel/setup_64.c if you are
|
|
||||||
a 64-bit platform.
|
|
||||||
|
|
||||||
d) request and get assigned a platform number (see PLATFORM_*
|
|
||||||
constants in arch/powerpc/include/asm/processor.h
|
|
||||||
|
|
||||||
32-bit embedded kernels:
|
|
||||||
|
|
||||||
Currently, board support is essentially an exclusive config option.
|
|
||||||
The kernel is configured for a single platform. Part of the reason
|
|
||||||
for this is to keep kernels on embedded systems small and efficient;
|
|
||||||
part of this is due to the fact the code is already that way. In the
|
|
||||||
future, a kernel may support multiple platforms, but only if the
|
|
||||||
platforms feature the same core architecture. A single kernel build
|
platforms feature the same core architecture. A single kernel build
|
||||||
cannot support both configurations with Book E and configurations
|
cannot support both configurations with Book E and configurations
|
||||||
with classic Powerpc architectures.
|
with classic Powerpc architectures.
|
||||||
|
|
||||||
32-bit embedded platforms that are moved into arch/powerpc using a
|
2) Entry point for arch/arm
|
||||||
flattened device tree should adopt the merged tree practice of
|
---------------------------
|
||||||
setting ppc_md up dynamically, even though the kernel is currently
|
|
||||||
built with support for only a single platform at a time. This allows
|
|
||||||
unification of the setup code, and will make it easier to go to a
|
|
||||||
multiple-platform-support model in the future.
|
|
||||||
|
|
||||||
NOTE: I believe the above will be true once Ben's done with the merge
|
There is one single entry point to the kernel, at the start
|
||||||
of the boot sequences.... someone speak up if this is wrong!
|
of the kernel image. That entry point supports two calling
|
||||||
|
conventions. A summary of the interface is described here. A full
|
||||||
|
description of the boot requirements is documented in
|
||||||
|
Documentation/arm/Booting
|
||||||
|
|
||||||
To add a 32-bit embedded platform support, follow the instructions
|
a) ATAGS interface. Minimal information is passed from firmware
|
||||||
for 64-bit platforms above, with the exception that the Kconfig
|
to the kernel with a tagged list of predefined parameters.
|
||||||
option should be set up such that the kernel builds exclusively for
|
|
||||||
the platform selected. The processor type for the platform should
|
|
||||||
enable another config option to select the specific board
|
|
||||||
supported.
|
|
||||||
|
|
||||||
NOTE: If Ben doesn't merge the setup files, may need to change this to
|
r0 : 0
|
||||||
point to setup_32.c
|
|
||||||
|
|
||||||
|
r1 : Machine type number
|
||||||
|
|
||||||
I will describe later the boot process and various callbacks that
|
r2 : Physical address of tagged list in system RAM
|
||||||
your platform should implement.
|
|
||||||
|
b) Entry with a flattened device-tree block. Firmware loads the
|
||||||
|
physical address of the flattened device tree block (dtb) into r2,
|
||||||
|
r1 is not used, but it is considered good practise to use a valid
|
||||||
|
machine number as described in Documentation/arm/Booting.
|
||||||
|
|
||||||
|
r0 : 0
|
||||||
|
|
||||||
|
r1 : Valid machine type number. When using a device tree,
|
||||||
|
a single machine type number will often be assigned to
|
||||||
|
represent a class or family of SoCs.
|
||||||
|
|
||||||
|
r2 : physical pointer to the device-tree block
|
||||||
|
(defined in chapter II) in RAM. Device tree can be located
|
||||||
|
anywhere in system RAM, but it should be aligned on a 32 bit
|
||||||
|
boundary.
|
||||||
|
|
||||||
|
The kernel will differentiate between ATAGS and device tree booting by
|
||||||
|
reading the memory pointed to by r1 and looking for either the flattened
|
||||||
|
device tree block magic value (0xd00dfeed) or the ATAG_CORE value at
|
||||||
|
offset 0x4 from r2 (0x54410001).
|
||||||
|
|
||||||
|
|
||||||
II - The DT block format
|
II - The DT block format
|
||||||
@@ -300,8 +289,8 @@ the block to RAM before passing it to the kernel.
|
|||||||
1) Header
|
1) Header
|
||||||
---------
|
---------
|
||||||
|
|
||||||
The kernel is entered with r3 pointing to an area of memory that is
|
The kernel is passed the physical address pointing to an area of memory
|
||||||
roughly described in arch/powerpc/include/asm/prom.h by the structure
|
that is roughly described in include/linux/of_fdt.h by the structure
|
||||||
boot_param_header:
|
boot_param_header:
|
||||||
|
|
||||||
struct boot_param_header {
|
struct boot_param_header {
|
||||||
@@ -339,7 +328,7 @@ struct boot_param_header {
|
|||||||
All values in this header are in big endian format, the various
|
All values in this header are in big endian format, the various
|
||||||
fields in this header are defined more precisely below. All
|
fields in this header are defined more precisely below. All
|
||||||
"offset" values are in bytes from the start of the header; that is
|
"offset" values are in bytes from the start of the header; that is
|
||||||
from the value of r3.
|
from the physical base address of the device tree block.
|
||||||
|
|
||||||
- magic
|
- magic
|
||||||
|
|
||||||
@@ -437,7 +426,7 @@ struct boot_param_header {
|
|||||||
|
|
||||||
|
|
||||||
------------------------------
|
------------------------------
|
||||||
r3 -> | struct boot_param_header |
|
base -> | struct boot_param_header |
|
||||||
------------------------------
|
------------------------------
|
||||||
| (alignment gap) (*) |
|
| (alignment gap) (*) |
|
||||||
------------------------------
|
------------------------------
|
||||||
@@ -457,7 +446,7 @@ struct boot_param_header {
|
|||||||
-----> ------------------------------
|
-----> ------------------------------
|
||||||
|
|
|
|
||||||
|
|
|
|
||||||
--- (r3 + totalsize)
|
--- (base + totalsize)
|
||||||
|
|
||||||
(*) The alignment gaps are not necessarily present; their presence
|
(*) The alignment gaps are not necessarily present; their presence
|
||||||
and size are dependent on the various alignment requirements of
|
and size are dependent on the various alignment requirements of
|
||||||
@@ -500,7 +489,7 @@ the device-tree structure. It is typically used to represent "path" in
|
|||||||
the device-tree. More details about the actual format of these will be
|
the device-tree. More details about the actual format of these will be
|
||||||
below.
|
below.
|
||||||
|
|
||||||
The kernel powerpc generic code does not make any formal use of the
|
The kernel generic code does not make any formal use of the
|
||||||
unit address (though some board support code may do) so the only real
|
unit address (though some board support code may do) so the only real
|
||||||
requirement here for the unit address is to ensure uniqueness of
|
requirement here for the unit address is to ensure uniqueness of
|
||||||
the node unit name at a given level of the tree. Nodes with no notion
|
the node unit name at a given level of the tree. Nodes with no notion
|
||||||
@@ -518,20 +507,21 @@ path to the root node is "/".
|
|||||||
|
|
||||||
Every node which actually represents an actual device (that is, a node
|
Every node which actually represents an actual device (that is, a node
|
||||||
which isn't only a virtual "container" for more nodes, like "/cpus"
|
which isn't only a virtual "container" for more nodes, like "/cpus"
|
||||||
is) is also required to have a "device_type" property indicating the
|
is) is also required to have a "compatible" property indicating the
|
||||||
type of node .
|
specific hardware and an optional list of devices it is fully
|
||||||
|
backwards compatible with.
|
||||||
|
|
||||||
Finally, every node that can be referenced from a property in another
|
Finally, every node that can be referenced from a property in another
|
||||||
node is required to have a "linux,phandle" property. Real open
|
node is required to have either a "phandle" or a "linux,phandle"
|
||||||
firmware implementations provide a unique "phandle" value for every
|
property. Real Open Firmware implementations provide a unique
|
||||||
node that the "prom_init()" trampoline code turns into
|
"phandle" value for every node that the "prom_init()" trampoline code
|
||||||
"linux,phandle" properties. However, this is made optional if the
|
turns into "linux,phandle" properties. However, this is made optional
|
||||||
flattened device tree is used directly. An example of a node
|
if the flattened device tree is used directly. An example of a node
|
||||||
referencing another node via "phandle" is when laying out the
|
referencing another node via "phandle" is when laying out the
|
||||||
interrupt tree which will be described in a further version of this
|
interrupt tree which will be described in a further version of this
|
||||||
document.
|
document.
|
||||||
|
|
||||||
This "linux, phandle" property is a 32-bit value that uniquely
|
The "phandle" property is a 32-bit value that uniquely
|
||||||
identifies a node. You are free to use whatever values or system of
|
identifies a node. You are free to use whatever values or system of
|
||||||
values, internal pointers, or whatever to generate these, the only
|
values, internal pointers, or whatever to generate these, the only
|
||||||
requirement is that every node for which you provide that property has
|
requirement is that every node for which you provide that property has
|
||||||
@@ -694,7 +684,7 @@ made of 3 cells, the bottom two containing the actual address itself
|
|||||||
while the top cell contains address space indication, flags, and pci
|
while the top cell contains address space indication, flags, and pci
|
||||||
bus & device numbers.
|
bus & device numbers.
|
||||||
|
|
||||||
For busses that support dynamic allocation, it's the accepted practice
|
For buses that support dynamic allocation, it's the accepted practice
|
||||||
to then not provide the address in "reg" (keep it 0) though while
|
to then not provide the address in "reg" (keep it 0) though while
|
||||||
providing a flag indicating the address is dynamically allocated, and
|
providing a flag indicating the address is dynamically allocated, and
|
||||||
then, to provide a separate "assigned-addresses" property that
|
then, to provide a separate "assigned-addresses" property that
|
||||||
@@ -711,7 +701,7 @@ prom_parse.c file of the recent kernels for your bus type.
|
|||||||
The "reg" property only defines addresses and sizes (if #size-cells is
|
The "reg" property only defines addresses and sizes (if #size-cells is
|
||||||
non-0) within a given bus. In order to translate addresses upward
|
non-0) within a given bus. In order to translate addresses upward
|
||||||
(that is into parent bus addresses, and possibly into CPU physical
|
(that is into parent bus addresses, and possibly into CPU physical
|
||||||
addresses), all busses must contain a "ranges" property. If the
|
addresses), all buses must contain a "ranges" property. If the
|
||||||
"ranges" property is missing at a given level, it's assumed that
|
"ranges" property is missing at a given level, it's assumed that
|
||||||
translation isn't possible, i.e., the registers are not visible on the
|
translation isn't possible, i.e., the registers are not visible on the
|
||||||
parent bus. The format of the "ranges" property for a bus is a list
|
parent bus. The format of the "ranges" property for a bus is a list
|
||||||
@@ -727,9 +717,9 @@ example, for a PCI host controller, that would be a CPU address. For a
|
|||||||
PCI<->ISA bridge, that would be a PCI address. It defines the base
|
PCI<->ISA bridge, that would be a PCI address. It defines the base
|
||||||
address in the parent bus where the beginning of that range is mapped.
|
address in the parent bus where the beginning of that range is mapped.
|
||||||
|
|
||||||
For a new 64-bit powerpc board, I recommend either the 2/2 format or
|
For new 64-bit board support, I recommend either the 2/2 format or
|
||||||
Apple's 2/1 format which is slightly more compact since sizes usually
|
Apple's 2/1 format which is slightly more compact since sizes usually
|
||||||
fit in a single 32-bit word. New 32-bit powerpc boards should use a
|
fit in a single 32-bit word. New 32-bit board support should use a
|
||||||
1/1 format, unless the processor supports physical addresses greater
|
1/1 format, unless the processor supports physical addresses greater
|
||||||
than 32-bits, in which case a 2/1 format is recommended.
|
than 32-bits, in which case a 2/1 format is recommended.
|
||||||
|
|
||||||
@@ -754,7 +744,7 @@ of their actual names.
|
|||||||
While earlier users of Open Firmware like OldWorld macintoshes tended
|
While earlier users of Open Firmware like OldWorld macintoshes tended
|
||||||
to use the actual device name for the "name" property, it's nowadays
|
to use the actual device name for the "name" property, it's nowadays
|
||||||
considered a good practice to use a name that is closer to the device
|
considered a good practice to use a name that is closer to the device
|
||||||
class (often equal to device_type). For example, nowadays, ethernet
|
class (often equal to device_type). For example, nowadays, Ethernet
|
||||||
controllers are named "ethernet", an additional "model" property
|
controllers are named "ethernet", an additional "model" property
|
||||||
defining precisely the chip type/model, and "compatible" property
|
defining precisely the chip type/model, and "compatible" property
|
||||||
defining the family in case a single driver can driver more than one
|
defining the family in case a single driver can driver more than one
|
||||||
@@ -772,7 +762,7 @@ is present).
|
|||||||
4) Note about node and property names and character set
|
4) Note about node and property names and character set
|
||||||
-------------------------------------------------------
|
-------------------------------------------------------
|
||||||
|
|
||||||
While open firmware provides more flexible usage of 8859-1, this
|
While Open Firmware provides more flexible usage of 8859-1, this
|
||||||
specification enforces more strict rules. Nodes and properties should
|
specification enforces more strict rules. Nodes and properties should
|
||||||
be comprised only of ASCII characters 'a' to 'z', '0' to
|
be comprised only of ASCII characters 'a' to 'z', '0' to
|
||||||
'9', ',', '.', '_', '+', '#', '?', and '-'. Node names additionally
|
'9', ',', '.', '_', '+', '#', '?', and '-'. Node names additionally
|
||||||
@@ -792,7 +782,7 @@ address which can extend beyond that limit.
|
|||||||
--------------------------------
|
--------------------------------
|
||||||
These are all that are currently required. However, it is strongly
|
These are all that are currently required. However, it is strongly
|
||||||
recommended that you expose PCI host bridges as documented in the
|
recommended that you expose PCI host bridges as documented in the
|
||||||
PCI binding to open firmware, and your interrupt tree as documented
|
PCI binding to Open Firmware, and your interrupt tree as documented
|
||||||
in OF interrupt tree specification.
|
in OF interrupt tree specification.
|
||||||
|
|
||||||
a) The root node
|
a) The root node
|
||||||
@@ -802,20 +792,12 @@ address which can extend beyond that limit.
|
|||||||
- model : this is your board name/model
|
- model : this is your board name/model
|
||||||
- #address-cells : address representation for "root" devices
|
- #address-cells : address representation for "root" devices
|
||||||
- #size-cells: the size representation for "root" devices
|
- #size-cells: the size representation for "root" devices
|
||||||
- device_type : This property shouldn't be necessary. However, if
|
|
||||||
you decide to create a device_type for your root node, make sure it
|
|
||||||
is _not_ "chrp" unless your platform is a pSeries or PAPR compliant
|
|
||||||
one for 64-bit, or a CHRP-type machine for 32-bit as this will
|
|
||||||
matched by the kernel this way.
|
|
||||||
|
|
||||||
Additionally, some recommended properties are:
|
|
||||||
|
|
||||||
- compatible : the board "family" generally finds its way here,
|
- compatible : the board "family" generally finds its way here,
|
||||||
for example, if you have 2 board models with a similar layout,
|
for example, if you have 2 board models with a similar layout,
|
||||||
that typically get driven by the same platform code in the
|
that typically get driven by the same platform code in the
|
||||||
kernel, you would use a different "model" property but put a
|
kernel, you would specify the exact board model in the
|
||||||
value in "compatible". The kernel doesn't directly use that
|
compatible property followed by an entry that represents the SoC
|
||||||
value but it is generally useful.
|
model.
|
||||||
|
|
||||||
The root node is also generally where you add additional properties
|
The root node is also generally where you add additional properties
|
||||||
specific to your board like the serial number if any, that sort of
|
specific to your board like the serial number if any, that sort of
|
||||||
@@ -841,8 +823,11 @@ address which can extend beyond that limit.
|
|||||||
|
|
||||||
So under /cpus, you are supposed to create a node for every CPU on
|
So under /cpus, you are supposed to create a node for every CPU on
|
||||||
the machine. There is no specific restriction on the name of the
|
the machine. There is no specific restriction on the name of the
|
||||||
CPU, though It's common practice to call it PowerPC,<name>. For
|
CPU, though it's common to call it <architecture>,<core>. For
|
||||||
example, Apple uses PowerPC,G5 while IBM uses PowerPC,970FX.
|
example, Apple uses PowerPC,G5 while IBM uses PowerPC,970FX.
|
||||||
|
However, the Generic Names convention suggests that it would be
|
||||||
|
better to simply use 'cpu' for each cpu node and use the compatible
|
||||||
|
property to identify the specific cpu core.
|
||||||
|
|
||||||
Required properties:
|
Required properties:
|
||||||
|
|
||||||
@@ -923,7 +908,7 @@ compatibility.
|
|||||||
|
|
||||||
e) The /chosen node
|
e) The /chosen node
|
||||||
|
|
||||||
This node is a bit "special". Normally, that's where open firmware
|
This node is a bit "special". Normally, that's where Open Firmware
|
||||||
puts some variable environment information, like the arguments, or
|
puts some variable environment information, like the arguments, or
|
||||||
the default input/output devices.
|
the default input/output devices.
|
||||||
|
|
||||||
@@ -940,11 +925,7 @@ compatibility.
|
|||||||
console device if any. Typically, if you have serial devices on
|
console device if any. Typically, if you have serial devices on
|
||||||
your board, you may want to put the full path to the one set as
|
your board, you may want to put the full path to the one set as
|
||||||
the default console in the firmware here, for the kernel to pick
|
the default console in the firmware here, for the kernel to pick
|
||||||
it up as its own default console. If you look at the function
|
it up as its own default console.
|
||||||
set_preferred_console() in arch/ppc64/kernel/setup.c, you'll see
|
|
||||||
that the kernel tries to find out the default console and has
|
|
||||||
knowledge of various types like 8250 serial ports. You may want
|
|
||||||
to extend this function to add your own.
|
|
||||||
|
|
||||||
Note that u-boot creates and fills in the chosen node for platforms
|
Note that u-boot creates and fills in the chosen node for platforms
|
||||||
that use it.
|
that use it.
|
||||||
@@ -955,23 +936,23 @@ compatibility.
|
|||||||
|
|
||||||
f) the /soc<SOCname> node
|
f) the /soc<SOCname> node
|
||||||
|
|
||||||
This node is used to represent a system-on-a-chip (SOC) and must be
|
This node is used to represent a system-on-a-chip (SoC) and must be
|
||||||
present if the processor is a SOC. The top-level soc node contains
|
present if the processor is a SoC. The top-level soc node contains
|
||||||
information that is global to all devices on the SOC. The node name
|
information that is global to all devices on the SoC. The node name
|
||||||
should contain a unit address for the SOC, which is the base address
|
should contain a unit address for the SoC, which is the base address
|
||||||
of the memory-mapped register set for the SOC. The name of an soc
|
of the memory-mapped register set for the SoC. The name of an SoC
|
||||||
node should start with "soc", and the remainder of the name should
|
node should start with "soc", and the remainder of the name should
|
||||||
represent the part number for the soc. For example, the MPC8540's
|
represent the part number for the soc. For example, the MPC8540's
|
||||||
soc node would be called "soc8540".
|
soc node would be called "soc8540".
|
||||||
|
|
||||||
Required properties:
|
Required properties:
|
||||||
|
|
||||||
- device_type : Should be "soc"
|
|
||||||
- ranges : Should be defined as specified in 1) to describe the
|
- ranges : Should be defined as specified in 1) to describe the
|
||||||
translation of SOC addresses for memory mapped SOC registers.
|
translation of SoC addresses for memory mapped SoC registers.
|
||||||
- bus-frequency: Contains the bus frequency for the SOC node.
|
- bus-frequency: Contains the bus frequency for the SoC node.
|
||||||
Typically, the value of this field is filled in by the boot
|
Typically, the value of this field is filled in by the boot
|
||||||
loader.
|
loader.
|
||||||
|
- compatible : Exact model of the SoC
|
||||||
|
|
||||||
|
|
||||||
Recommended properties:
|
Recommended properties:
|
||||||
@@ -1155,12 +1136,13 @@ while all this has been defined and implemented.
|
|||||||
|
|
||||||
- An example of code for iterating nodes & retrieving properties
|
- An example of code for iterating nodes & retrieving properties
|
||||||
directly from the flattened tree format can be found in the kernel
|
directly from the flattened tree format can be found in the kernel
|
||||||
file arch/ppc64/kernel/prom.c, look at scan_flat_dt() function,
|
file drivers/of/fdt.c. Look at the of_scan_flat_dt() function,
|
||||||
its usage in early_init_devtree(), and the corresponding various
|
its usage in early_init_devtree(), and the corresponding various
|
||||||
early_init_dt_scan_*() callbacks. That code can be re-used in a
|
early_init_dt_scan_*() callbacks. That code can be re-used in a
|
||||||
GPL bootloader, and as the author of that code, I would be happy
|
GPL bootloader, and as the author of that code, I would be happy
|
||||||
to discuss possible free licensing to any vendor who wishes to
|
to discuss possible free licensing to any vendor who wishes to
|
||||||
integrate all or part of this code into a non-GPL bootloader.
|
integrate all or part of this code into a non-GPL bootloader.
|
||||||
|
(reference needed; who is 'I' here? ---gcl Jan 31, 2011)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -1203,18 +1185,19 @@ MPC8540.
|
|||||||
2) Representing devices without a current OF specification
|
2) Representing devices without a current OF specification
|
||||||
----------------------------------------------------------
|
----------------------------------------------------------
|
||||||
|
|
||||||
Currently, there are many devices on SOCs that do not have a standard
|
Currently, there are many devices on SoCs that do not have a standard
|
||||||
representation pre-defined as part of the open firmware
|
representation defined as part of the Open Firmware specifications,
|
||||||
specifications, mainly because the boards that contain these SOCs are
|
mainly because the boards that contain these SoCs are not currently
|
||||||
not currently booted using open firmware. This section contains
|
booted using Open Firmware. Binding documentation for new devices
|
||||||
descriptions for the SOC devices for which new nodes have been
|
should be added to the Documentation/devicetree/bindings directory.
|
||||||
defined; this list will expand as more and more SOC-containing
|
That directory will expand as device tree support is added to more and
|
||||||
platforms are moved over to use the flattened-device-tree model.
|
more SoCs.
|
||||||
|
|
||||||
|
|
||||||
VII - Specifying interrupt information for devices
|
VII - Specifying interrupt information for devices
|
||||||
===================================================
|
===================================================
|
||||||
|
|
||||||
The device tree represents the busses and devices of a hardware
|
The device tree represents the buses and devices of a hardware
|
||||||
system in a form similar to the physical bus topology of the
|
system in a form similar to the physical bus topology of the
|
||||||
hardware.
|
hardware.
|
||||||
|
|
@@ -248,6 +248,17 @@ Who: Zhang Rui <rui.zhang@intel.com>
|
|||||||
|
|
||||||
---------------------------
|
---------------------------
|
||||||
|
|
||||||
|
What: CONFIG_ACPI_PROCFS_POWER
|
||||||
|
When: 2.6.39
|
||||||
|
Why: sysfs I/F for ACPI power devices, including AC and Battery,
|
||||||
|
has been working in upstream kenrel since 2.6.24, Sep 2007.
|
||||||
|
In 2.6.37, we make the sysfs I/F always built in and this option
|
||||||
|
disabled by default.
|
||||||
|
Remove this option and the ACPI power procfs interface in 2.6.39.
|
||||||
|
Who: Zhang Rui <rui.zhang@intel.com>
|
||||||
|
|
||||||
|
---------------------------
|
||||||
|
|
||||||
What: /proc/acpi/button
|
What: /proc/acpi/button
|
||||||
When: August 2007
|
When: August 2007
|
||||||
Why: /proc/acpi/button has been replaced by events to the input layer
|
Why: /proc/acpi/button has been replaced by events to the input layer
|
||||||
@@ -346,14 +357,6 @@ Who: Dave Jones <davej@redhat.com>, Matthew Garrett <mjg@redhat.com>
|
|||||||
|
|
||||||
-----------------------------
|
-----------------------------
|
||||||
|
|
||||||
What: __do_IRQ all in one fits nothing interrupt handler
|
|
||||||
When: 2.6.32
|
|
||||||
Why: __do_IRQ was kept for easy migration to the type flow handlers.
|
|
||||||
More than two years of migration time is enough.
|
|
||||||
Who: Thomas Gleixner <tglx@linutronix.de>
|
|
||||||
|
|
||||||
-----------------------------
|
|
||||||
|
|
||||||
What: fakephp and associated sysfs files in /sys/bus/pci/slots/
|
What: fakephp and associated sysfs files in /sys/bus/pci/slots/
|
||||||
When: 2011
|
When: 2011
|
||||||
Why: In 2.6.27, the semantics of /sys/bus/pci/slots was redefined to
|
Why: In 2.6.27, the semantics of /sys/bus/pci/slots was redefined to
|
||||||
@@ -600,3 +603,19 @@ Why: The adm9240, w83792d and w83793 hardware monitoring drivers have
|
|||||||
Who: Jean Delvare <khali@linux-fr.org>
|
Who: Jean Delvare <khali@linux-fr.org>
|
||||||
|
|
||||||
----------------------------
|
----------------------------
|
||||||
|
|
||||||
|
What: noswapaccount kernel command line parameter
|
||||||
|
When: 2.6.40
|
||||||
|
Why: The original implementation of memsw feature enabled by
|
||||||
|
CONFIG_CGROUP_MEM_RES_CTLR_SWAP could be disabled by the noswapaccount
|
||||||
|
kernel parameter (introduced in 2.6.29-rc1). Later on, this decision
|
||||||
|
turned out to be not ideal because we cannot have the feature compiled
|
||||||
|
in and disabled by default and let only interested to enable it
|
||||||
|
(e.g. general distribution kernels might need it). Therefore we have
|
||||||
|
added swapaccount[=0|1] parameter (introduced in 2.6.37) which provides
|
||||||
|
the both possibilities. If we remove noswapaccount we will have
|
||||||
|
less command line parameters with the same functionality and we
|
||||||
|
can also cleanup the parameter handling a bit ().
|
||||||
|
Who: Michal Hocko <mhocko@suse.cz>
|
||||||
|
|
||||||
|
----------------------------
|
||||||
|
@@ -19,6 +19,8 @@ prototypes:
|
|||||||
void (*d_release)(struct dentry *);
|
void (*d_release)(struct dentry *);
|
||||||
void (*d_iput)(struct dentry *, struct inode *);
|
void (*d_iput)(struct dentry *, struct inode *);
|
||||||
char *(*d_dname)((struct dentry *dentry, char *buffer, int buflen);
|
char *(*d_dname)((struct dentry *dentry, char *buffer, int buflen);
|
||||||
|
struct vfsmount *(*d_automount)(struct path *path);
|
||||||
|
int (*d_manage)(struct dentry *, bool);
|
||||||
|
|
||||||
locking rules:
|
locking rules:
|
||||||
rename_lock ->d_lock may block rcu-walk
|
rename_lock ->d_lock may block rcu-walk
|
||||||
@@ -29,6 +31,8 @@ d_delete: no yes no no
|
|||||||
d_release: no no yes no
|
d_release: no no yes no
|
||||||
d_iput: no no yes no
|
d_iput: no no yes no
|
||||||
d_dname: no no no no
|
d_dname: no no no no
|
||||||
|
d_automount: no no yes no
|
||||||
|
d_manage: no no yes (ref-walk) maybe
|
||||||
|
|
||||||
--------------------------- inode_operations ---------------------------
|
--------------------------- inode_operations ---------------------------
|
||||||
prototypes:
|
prototypes:
|
||||||
@@ -56,7 +60,6 @@ ata *);
|
|||||||
ssize_t (*listxattr) (struct dentry *, char *, size_t);
|
ssize_t (*listxattr) (struct dentry *, char *, size_t);
|
||||||
int (*removexattr) (struct dentry *, const char *);
|
int (*removexattr) (struct dentry *, const char *);
|
||||||
void (*truncate_range)(struct inode *, loff_t, loff_t);
|
void (*truncate_range)(struct inode *, loff_t, loff_t);
|
||||||
long (*fallocate)(struct inode *inode, int mode, loff_t offset, loff_t len);
|
|
||||||
int (*fiemap)(struct inode *, struct fiemap_extent_info *, u64 start, u64 len);
|
int (*fiemap)(struct inode *, struct fiemap_extent_info *, u64 start, u64 len);
|
||||||
|
|
||||||
locking rules:
|
locking rules:
|
||||||
@@ -84,7 +87,6 @@ getxattr: no
|
|||||||
listxattr: no
|
listxattr: no
|
||||||
removexattr: yes
|
removexattr: yes
|
||||||
truncate_range: yes
|
truncate_range: yes
|
||||||
fallocate: no
|
|
||||||
fiemap: no
|
fiemap: no
|
||||||
Additionally, ->rmdir(), ->unlink() and ->rename() have ->i_mutex on
|
Additionally, ->rmdir(), ->unlink() and ->rename() have ->i_mutex on
|
||||||
victim.
|
victim.
|
||||||
@@ -343,7 +345,6 @@ prototypes:
|
|||||||
int (*fl_grant)(struct file_lock *, struct file_lock *, int);
|
int (*fl_grant)(struct file_lock *, struct file_lock *, int);
|
||||||
void (*fl_release_private)(struct file_lock *);
|
void (*fl_release_private)(struct file_lock *);
|
||||||
void (*fl_break)(struct file_lock *); /* break_lease callback */
|
void (*fl_break)(struct file_lock *); /* break_lease callback */
|
||||||
int (*fl_mylease)(struct file_lock *, struct file_lock *);
|
|
||||||
int (*fl_change)(struct file_lock **, int);
|
int (*fl_change)(struct file_lock **, int);
|
||||||
|
|
||||||
locking rules:
|
locking rules:
|
||||||
@@ -353,7 +354,6 @@ fl_notify: yes no
|
|||||||
fl_grant: no no
|
fl_grant: no no
|
||||||
fl_release_private: maybe no
|
fl_release_private: maybe no
|
||||||
fl_break: yes no
|
fl_break: yes no
|
||||||
fl_mylease: yes no
|
|
||||||
fl_change yes no
|
fl_change yes no
|
||||||
|
|
||||||
--------------------------- buffer_head -----------------------------------
|
--------------------------- buffer_head -----------------------------------
|
||||||
@@ -435,6 +435,7 @@ prototypes:
|
|||||||
ssize_t (*splice_read)(struct file *, loff_t *, struct pipe_inode_info *,
|
ssize_t (*splice_read)(struct file *, loff_t *, struct pipe_inode_info *,
|
||||||
size_t, unsigned int);
|
size_t, unsigned int);
|
||||||
int (*setlease)(struct file *, long, struct file_lock **);
|
int (*setlease)(struct file *, long, struct file_lock **);
|
||||||
|
long (*fallocate)(struct file *, int, loff_t, loff_t);
|
||||||
};
|
};
|
||||||
|
|
||||||
locking rules:
|
locking rules:
|
||||||
|
@@ -460,6 +460,8 @@ Note, a technical ChangeLog aimed at kernel hackers is in fs/ntfs/ChangeLog.
|
|||||||
2.1.30:
|
2.1.30:
|
||||||
- Fix writev() (it kept writing the first segment over and over again
|
- Fix writev() (it kept writing the first segment over and over again
|
||||||
instead of moving onto subsequent segments).
|
instead of moving onto subsequent segments).
|
||||||
|
- Fix crash in ntfs_mft_record_alloc() when mapping the new extent mft
|
||||||
|
record failed.
|
||||||
2.1.29:
|
2.1.29:
|
||||||
- Fix a deadlock when mounting read-write.
|
- Fix a deadlock when mounting read-write.
|
||||||
2.1.28:
|
2.1.28:
|
||||||
|
@@ -365,8 +365,8 @@ must be done in the RCU callback.
|
|||||||
[recommended]
|
[recommended]
|
||||||
vfs now tries to do path walking in "rcu-walk mode", which avoids
|
vfs now tries to do path walking in "rcu-walk mode", which avoids
|
||||||
atomic operations and scalability hazards on dentries and inodes (see
|
atomic operations and scalability hazards on dentries and inodes (see
|
||||||
Documentation/filesystems/path-walk.txt). d_hash and d_compare changes (above)
|
Documentation/filesystems/path-lookup.txt). d_hash and d_compare changes
|
||||||
are examples of the changes required to support this. For more complex
|
(above) are examples of the changes required to support this. For more complex
|
||||||
filesystem callbacks, the vfs drops out of rcu-walk mode before the fs call, so
|
filesystem callbacks, the vfs drops out of rcu-walk mode before the fs call, so
|
||||||
no changes are required to the filesystem. However, this is costly and loses
|
no changes are required to the filesystem. However, this is costly and loses
|
||||||
the benefits of rcu-walk mode. We will begin to add filesystem callbacks that
|
the benefits of rcu-walk mode. We will begin to add filesystem callbacks that
|
||||||
@@ -383,8 +383,8 @@ Documentation/filesystems/vfs.txt for more details.
|
|||||||
|
|
||||||
permission and check_acl are inode permission checks that are called
|
permission and check_acl are inode permission checks that are called
|
||||||
on many or all directory inodes on the way down a path walk (to check for
|
on many or all directory inodes on the way down a path walk (to check for
|
||||||
exec permission). These must now be rcu-walk aware (flags & IPERM_RCU). See
|
exec permission). These must now be rcu-walk aware (flags & IPERM_FLAG_RCU).
|
||||||
Documentation/filesystems/vfs.txt for more details.
|
See Documentation/filesystems/vfs.txt for more details.
|
||||||
|
|
||||||
--
|
--
|
||||||
[mandatory]
|
[mandatory]
|
||||||
|
@@ -375,6 +375,7 @@ Anonymous: 0 kB
|
|||||||
Swap: 0 kB
|
Swap: 0 kB
|
||||||
KernelPageSize: 4 kB
|
KernelPageSize: 4 kB
|
||||||
MMUPageSize: 4 kB
|
MMUPageSize: 4 kB
|
||||||
|
Locked: 374 kB
|
||||||
|
|
||||||
The first of these lines shows the same information as is displayed for the
|
The first of these lines shows the same information as is displayed for the
|
||||||
mapping in /proc/PID/maps. The remaining lines show the size of the mapping
|
mapping in /proc/PID/maps. The remaining lines show the size of the mapping
|
||||||
@@ -670,6 +671,8 @@ varies by architecture and compile options. The following is from a
|
|||||||
|
|
||||||
> cat /proc/meminfo
|
> cat /proc/meminfo
|
||||||
|
|
||||||
|
The "Locked" indicates whether the mapping is locked in memory or not.
|
||||||
|
|
||||||
|
|
||||||
MemTotal: 16344972 kB
|
MemTotal: 16344972 kB
|
||||||
MemFree: 13634064 kB
|
MemFree: 13634064 kB
|
||||||
@@ -1320,6 +1323,10 @@ scaled linearly with /proc/<pid>/oom_score_adj.
|
|||||||
Writing to /proc/<pid>/oom_score_adj or /proc/<pid>/oom_adj will change the
|
Writing to /proc/<pid>/oom_score_adj or /proc/<pid>/oom_adj will change the
|
||||||
other with its scaled value.
|
other with its scaled value.
|
||||||
|
|
||||||
|
The value of /proc/<pid>/oom_score_adj may be reduced no lower than the last
|
||||||
|
value set by a CAP_SYS_RESOURCE process. To reduce the value any lower
|
||||||
|
requires CAP_SYS_RESOURCE.
|
||||||
|
|
||||||
NOTICE: /proc/<pid>/oom_adj is deprecated and will be removed, please see
|
NOTICE: /proc/<pid>/oom_adj is deprecated and will be removed, please see
|
||||||
Documentation/feature-removal-schedule.txt.
|
Documentation/feature-removal-schedule.txt.
|
||||||
|
|
||||||
|
@@ -415,8 +415,8 @@ otherwise noted.
|
|||||||
permission: called by the VFS to check for access rights on a POSIX-like
|
permission: called by the VFS to check for access rights on a POSIX-like
|
||||||
filesystem.
|
filesystem.
|
||||||
|
|
||||||
May be called in rcu-walk mode (flags & IPERM_RCU). If in rcu-walk
|
May be called in rcu-walk mode (flags & IPERM_FLAG_RCU). If in rcu-walk
|
||||||
mode, the filesystem must check the permission without blocking or
|
mode, the filesystem must check the permission without blocking or
|
||||||
storing to the inode.
|
storing to the inode.
|
||||||
|
|
||||||
If a situation is encountered that rcu-walk cannot handle, return
|
If a situation is encountered that rcu-walk cannot handle, return
|
||||||
@@ -864,6 +864,8 @@ struct dentry_operations {
|
|||||||
void (*d_release)(struct dentry *);
|
void (*d_release)(struct dentry *);
|
||||||
void (*d_iput)(struct dentry *, struct inode *);
|
void (*d_iput)(struct dentry *, struct inode *);
|
||||||
char *(*d_dname)(struct dentry *, char *, int);
|
char *(*d_dname)(struct dentry *, char *, int);
|
||||||
|
struct vfsmount *(*d_automount)(struct path *);
|
||||||
|
int (*d_manage)(struct dentry *, bool, bool);
|
||||||
};
|
};
|
||||||
|
|
||||||
d_revalidate: called when the VFS needs to revalidate a dentry. This
|
d_revalidate: called when the VFS needs to revalidate a dentry. This
|
||||||
@@ -930,6 +932,47 @@ struct dentry_operations {
|
|||||||
at the end of the buffer, and returns a pointer to the first char.
|
at the end of the buffer, and returns a pointer to the first char.
|
||||||
dynamic_dname() helper function is provided to take care of this.
|
dynamic_dname() helper function is provided to take care of this.
|
||||||
|
|
||||||
|
d_automount: called when an automount dentry is to be traversed (optional).
|
||||||
|
This should create a new VFS mount record and return the record to the
|
||||||
|
caller. The caller is supplied with a path parameter giving the
|
||||||
|
automount directory to describe the automount target and the parent
|
||||||
|
VFS mount record to provide inheritable mount parameters. NULL should
|
||||||
|
be returned if someone else managed to make the automount first. If
|
||||||
|
the vfsmount creation failed, then an error code should be returned.
|
||||||
|
If -EISDIR is returned, then the directory will be treated as an
|
||||||
|
ordinary directory and returned to pathwalk to continue walking.
|
||||||
|
|
||||||
|
If a vfsmount is returned, the caller will attempt to mount it on the
|
||||||
|
mountpoint and will remove the vfsmount from its expiration list in
|
||||||
|
the case of failure. The vfsmount should be returned with 2 refs on
|
||||||
|
it to prevent automatic expiration - the caller will clean up the
|
||||||
|
additional ref.
|
||||||
|
|
||||||
|
This function is only used if DCACHE_NEED_AUTOMOUNT is set on the
|
||||||
|
dentry. This is set by __d_instantiate() if S_AUTOMOUNT is set on the
|
||||||
|
inode being added.
|
||||||
|
|
||||||
|
d_manage: called to allow the filesystem to manage the transition from a
|
||||||
|
dentry (optional). This allows autofs, for example, to hold up clients
|
||||||
|
waiting to explore behind a 'mountpoint' whilst letting the daemon go
|
||||||
|
past and construct the subtree there. 0 should be returned to let the
|
||||||
|
calling process continue. -EISDIR can be returned to tell pathwalk to
|
||||||
|
use this directory as an ordinary directory and to ignore anything
|
||||||
|
mounted on it and not to check the automount flag. Any other error
|
||||||
|
code will abort pathwalk completely.
|
||||||
|
|
||||||
|
If the 'mounting_here' parameter is true, then namespace_sem is being
|
||||||
|
held by the caller and the function should not initiate any mounts or
|
||||||
|
unmounts that it will then wait for.
|
||||||
|
|
||||||
|
If the 'rcu_walk' parameter is true, then the caller is doing a
|
||||||
|
pathwalk in RCU-walk mode. Sleeping is not permitted in this mode,
|
||||||
|
and the caller can be asked to leave it and call again by returing
|
||||||
|
-ECHILD.
|
||||||
|
|
||||||
|
This function is only used if DCACHE_MANAGE_TRANSIT is set on the
|
||||||
|
dentry being transited from.
|
||||||
|
|
||||||
Example :
|
Example :
|
||||||
|
|
||||||
static char *pipefs_dname(struct dentry *dent, char *buffer, int buflen)
|
static char *pipefs_dname(struct dentry *dent, char *buffer, int buflen)
|
||||||
|
@@ -135,7 +135,7 @@ setting up a platform_device using the GPIO, is mark its direction:
|
|||||||
int gpio_direction_input(unsigned gpio);
|
int gpio_direction_input(unsigned gpio);
|
||||||
int gpio_direction_output(unsigned gpio, int value);
|
int gpio_direction_output(unsigned gpio, int value);
|
||||||
|
|
||||||
The return value is zero for success, else a negative errno. It must
|
The return value is zero for success, else a negative errno. It should
|
||||||
be checked, since the get/set calls don't have error returns and since
|
be checked, since the get/set calls don't have error returns and since
|
||||||
misconfiguration is possible. You should normally issue these calls from
|
misconfiguration is possible. You should normally issue these calls from
|
||||||
a task context. However, for spinlock-safe GPIOs it's OK to use them
|
a task context. However, for spinlock-safe GPIOs it's OK to use them
|
||||||
|
@@ -6,6 +6,10 @@ Supported chips:
|
|||||||
Prefix 'lm93'
|
Prefix 'lm93'
|
||||||
Addresses scanned: I2C 0x2c-0x2e
|
Addresses scanned: I2C 0x2c-0x2e
|
||||||
Datasheet: http://www.national.com/ds.cgi/LM/LM93.pdf
|
Datasheet: http://www.national.com/ds.cgi/LM/LM93.pdf
|
||||||
|
* National Semiconductor LM94
|
||||||
|
Prefix 'lm94'
|
||||||
|
Addresses scanned: I2C 0x2c-0x2e
|
||||||
|
Datasheet: http://www.national.com/ds.cgi/LM/LM94.pdf
|
||||||
|
|
||||||
Authors:
|
Authors:
|
||||||
Mark M. Hoffman <mhoffman@lightlink.com>
|
Mark M. Hoffman <mhoffman@lightlink.com>
|
||||||
@@ -56,6 +60,9 @@ previous motherboard management ASICs and uses some of the LM85's features
|
|||||||
for dynamic Vccp monitoring and PROCHOT. It is designed to monitor a dual
|
for dynamic Vccp monitoring and PROCHOT. It is designed to monitor a dual
|
||||||
processor Xeon class motherboard with a minimum of external components.
|
processor Xeon class motherboard with a minimum of external components.
|
||||||
|
|
||||||
|
LM94 is also supported in LM93 compatible mode. Extra sensors and features of
|
||||||
|
LM94 are not supported.
|
||||||
|
|
||||||
|
|
||||||
User Interface
|
User Interface
|
||||||
--------------
|
--------------
|
||||||
|
@@ -43,11 +43,11 @@ parameter is applicable:
|
|||||||
AVR32 AVR32 architecture is enabled.
|
AVR32 AVR32 architecture is enabled.
|
||||||
AX25 Appropriate AX.25 support is enabled.
|
AX25 Appropriate AX.25 support is enabled.
|
||||||
BLACKFIN Blackfin architecture is enabled.
|
BLACKFIN Blackfin architecture is enabled.
|
||||||
|
DRM Direct Rendering Management support is enabled.
|
||||||
|
DYNAMIC_DEBUG Build in debug messages and enable them at runtime
|
||||||
EDD BIOS Enhanced Disk Drive Services (EDD) is enabled
|
EDD BIOS Enhanced Disk Drive Services (EDD) is enabled
|
||||||
EFI EFI Partitioning (GPT) is enabled
|
EFI EFI Partitioning (GPT) is enabled
|
||||||
EIDE EIDE/ATAPI support is enabled.
|
EIDE EIDE/ATAPI support is enabled.
|
||||||
DRM Direct Rendering Management support is enabled.
|
|
||||||
DYNAMIC_DEBUG Build in debug messages and enable them at runtime
|
|
||||||
FB The frame buffer device is enabled.
|
FB The frame buffer device is enabled.
|
||||||
GCOV GCOV profiling is enabled.
|
GCOV GCOV profiling is enabled.
|
||||||
HW Appropriate hardware is enabled.
|
HW Appropriate hardware is enabled.
|
||||||
@@ -199,11 +199,6 @@ and is between 256 and 4096 characters. It is defined in the file
|
|||||||
unusable. The "log_buf_len" parameter may be useful
|
unusable. The "log_buf_len" parameter may be useful
|
||||||
if you need to capture more output.
|
if you need to capture more output.
|
||||||
|
|
||||||
acpi_display_output= [HW,ACPI]
|
|
||||||
acpi_display_output=vendor
|
|
||||||
acpi_display_output=video
|
|
||||||
See above.
|
|
||||||
|
|
||||||
acpi_irq_balance [HW,ACPI]
|
acpi_irq_balance [HW,ACPI]
|
||||||
ACPI will balance active IRQs
|
ACPI will balance active IRQs
|
||||||
default in APIC mode
|
default in APIC mode
|
||||||
|
@@ -39,6 +39,9 @@
|
|||||||
#include <limits.h>
|
#include <limits.h>
|
||||||
#include <stddef.h>
|
#include <stddef.h>
|
||||||
#include <signal.h>
|
#include <signal.h>
|
||||||
|
#include <pwd.h>
|
||||||
|
#include <grp.h>
|
||||||
|
|
||||||
#include <linux/virtio_config.h>
|
#include <linux/virtio_config.h>
|
||||||
#include <linux/virtio_net.h>
|
#include <linux/virtio_net.h>
|
||||||
#include <linux/virtio_blk.h>
|
#include <linux/virtio_blk.h>
|
||||||
@@ -298,20 +301,27 @@ static void *map_zeroed_pages(unsigned int num)
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
* We use a private mapping (ie. if we write to the page, it will be
|
* We use a private mapping (ie. if we write to the page, it will be
|
||||||
* copied).
|
* copied). We allocate an extra two pages PROT_NONE to act as guard
|
||||||
|
* pages against read/write attempts that exceed allocated space.
|
||||||
*/
|
*/
|
||||||
addr = mmap(NULL, getpagesize() * num,
|
addr = mmap(NULL, getpagesize() * (num+2),
|
||||||
PROT_READ|PROT_WRITE|PROT_EXEC, MAP_PRIVATE, fd, 0);
|
PROT_NONE, MAP_PRIVATE, fd, 0);
|
||||||
|
|
||||||
if (addr == MAP_FAILED)
|
if (addr == MAP_FAILED)
|
||||||
err(1, "Mmapping %u pages of /dev/zero", num);
|
err(1, "Mmapping %u pages of /dev/zero", num);
|
||||||
|
|
||||||
|
if (mprotect(addr + getpagesize(), getpagesize() * num,
|
||||||
|
PROT_READ|PROT_WRITE) == -1)
|
||||||
|
err(1, "mprotect rw %u pages failed", num);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* One neat mmap feature is that you can close the fd, and it
|
* One neat mmap feature is that you can close the fd, and it
|
||||||
* stays mapped.
|
* stays mapped.
|
||||||
*/
|
*/
|
||||||
close(fd);
|
close(fd);
|
||||||
|
|
||||||
return addr;
|
/* Return address after PROT_NONE page */
|
||||||
|
return addr + getpagesize();
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Get some more pages for a device. */
|
/* Get some more pages for a device. */
|
||||||
@@ -343,7 +353,7 @@ static void map_at(int fd, void *addr, unsigned long offset, unsigned long len)
|
|||||||
* done to it. This allows us to share untouched memory between
|
* done to it. This allows us to share untouched memory between
|
||||||
* Guests.
|
* Guests.
|
||||||
*/
|
*/
|
||||||
if (mmap(addr, len, PROT_READ|PROT_WRITE|PROT_EXEC,
|
if (mmap(addr, len, PROT_READ|PROT_WRITE,
|
||||||
MAP_FIXED|MAP_PRIVATE, fd, offset) != MAP_FAILED)
|
MAP_FIXED|MAP_PRIVATE, fd, offset) != MAP_FAILED)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@@ -573,10 +583,10 @@ static void *_check_pointer(unsigned long addr, unsigned int size,
|
|||||||
unsigned int line)
|
unsigned int line)
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
* We have to separately check addr and addr+size, because size could
|
* Check if the requested address and size exceeds the allocated memory,
|
||||||
* be huge and addr + size might wrap around.
|
* or addr + size wraps around.
|
||||||
*/
|
*/
|
||||||
if (addr >= guest_limit || addr + size >= guest_limit)
|
if ((addr + size) > guest_limit || (addr + size) < addr)
|
||||||
errx(1, "%s:%i: Invalid address %#lx", __FILE__, line, addr);
|
errx(1, "%s:%i: Invalid address %#lx", __FILE__, line, addr);
|
||||||
/*
|
/*
|
||||||
* We return a pointer for the caller's convenience, now we know it's
|
* We return a pointer for the caller's convenience, now we know it's
|
||||||
@@ -1872,6 +1882,8 @@ static struct option opts[] = {
|
|||||||
{ "block", 1, NULL, 'b' },
|
{ "block", 1, NULL, 'b' },
|
||||||
{ "rng", 0, NULL, 'r' },
|
{ "rng", 0, NULL, 'r' },
|
||||||
{ "initrd", 1, NULL, 'i' },
|
{ "initrd", 1, NULL, 'i' },
|
||||||
|
{ "username", 1, NULL, 'u' },
|
||||||
|
{ "chroot", 1, NULL, 'c' },
|
||||||
{ NULL },
|
{ NULL },
|
||||||
};
|
};
|
||||||
static void usage(void)
|
static void usage(void)
|
||||||
@@ -1894,6 +1906,12 @@ int main(int argc, char *argv[])
|
|||||||
/* If they specify an initrd file to load. */
|
/* If they specify an initrd file to load. */
|
||||||
const char *initrd_name = NULL;
|
const char *initrd_name = NULL;
|
||||||
|
|
||||||
|
/* Password structure for initgroups/setres[gu]id */
|
||||||
|
struct passwd *user_details = NULL;
|
||||||
|
|
||||||
|
/* Directory to chroot to */
|
||||||
|
char *chroot_path = NULL;
|
||||||
|
|
||||||
/* Save the args: we "reboot" by execing ourselves again. */
|
/* Save the args: we "reboot" by execing ourselves again. */
|
||||||
main_args = argv;
|
main_args = argv;
|
||||||
|
|
||||||
@@ -1950,6 +1968,14 @@ int main(int argc, char *argv[])
|
|||||||
case 'i':
|
case 'i':
|
||||||
initrd_name = optarg;
|
initrd_name = optarg;
|
||||||
break;
|
break;
|
||||||
|
case 'u':
|
||||||
|
user_details = getpwnam(optarg);
|
||||||
|
if (!user_details)
|
||||||
|
err(1, "getpwnam failed, incorrect username?");
|
||||||
|
break;
|
||||||
|
case 'c':
|
||||||
|
chroot_path = optarg;
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
warnx("Unknown argument %s", argv[optind]);
|
warnx("Unknown argument %s", argv[optind]);
|
||||||
usage();
|
usage();
|
||||||
@@ -2021,6 +2047,37 @@ int main(int argc, char *argv[])
|
|||||||
/* If we exit via err(), this kills all the threads, restores tty. */
|
/* If we exit via err(), this kills all the threads, restores tty. */
|
||||||
atexit(cleanup_devices);
|
atexit(cleanup_devices);
|
||||||
|
|
||||||
|
/* If requested, chroot to a directory */
|
||||||
|
if (chroot_path) {
|
||||||
|
if (chroot(chroot_path) != 0)
|
||||||
|
err(1, "chroot(\"%s\") failed", chroot_path);
|
||||||
|
|
||||||
|
if (chdir("/") != 0)
|
||||||
|
err(1, "chdir(\"/\") failed");
|
||||||
|
|
||||||
|
verbose("chroot done\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
/* If requested, drop privileges */
|
||||||
|
if (user_details) {
|
||||||
|
uid_t u;
|
||||||
|
gid_t g;
|
||||||
|
|
||||||
|
u = user_details->pw_uid;
|
||||||
|
g = user_details->pw_gid;
|
||||||
|
|
||||||
|
if (initgroups(user_details->pw_name, g) != 0)
|
||||||
|
err(1, "initgroups failed");
|
||||||
|
|
||||||
|
if (setresgid(g, g, g) != 0)
|
||||||
|
err(1, "setresgid failed");
|
||||||
|
|
||||||
|
if (setresuid(u, u, u) != 0)
|
||||||
|
err(1, "setresuid failed");
|
||||||
|
|
||||||
|
verbose("Dropping privileges completed\n");
|
||||||
|
}
|
||||||
|
|
||||||
/* Finally, run the Guest. This doesn't return. */
|
/* Finally, run the Guest. This doesn't return. */
|
||||||
run_guest();
|
run_guest();
|
||||||
}
|
}
|
||||||
|
@@ -117,6 +117,11 @@ Running Lguest:
|
|||||||
|
|
||||||
for general information on how to get bridging to work.
|
for general information on how to get bridging to work.
|
||||||
|
|
||||||
|
- Random number generation. Using the --rng option will provide a
|
||||||
|
/dev/hwrng in the guest that will read from the host's /dev/random.
|
||||||
|
Use this option in conjunction with rng-tools (see ../hw_random.txt)
|
||||||
|
to provide entropy to the guest kernel's /dev/random.
|
||||||
|
|
||||||
There is a helpful mailing list at http://ozlabs.org/mailman/listinfo/lguest
|
There is a helpful mailing list at http://ozlabs.org/mailman/listinfo/lguest
|
||||||
|
|
||||||
Good luck!
|
Good luck!
|
||||||
|
@@ -49,7 +49,8 @@ Table of Contents
|
|||||||
3.3 Configuring Bonding Manually with Ifenslave
|
3.3 Configuring Bonding Manually with Ifenslave
|
||||||
3.3.1 Configuring Multiple Bonds Manually
|
3.3.1 Configuring Multiple Bonds Manually
|
||||||
3.4 Configuring Bonding Manually via Sysfs
|
3.4 Configuring Bonding Manually via Sysfs
|
||||||
3.5 Overriding Configuration for Special Cases
|
3.5 Configuration with Interfaces Support
|
||||||
|
3.6 Overriding Configuration for Special Cases
|
||||||
|
|
||||||
4. Querying Bonding Configuration
|
4. Querying Bonding Configuration
|
||||||
4.1 Bonding Configuration
|
4.1 Bonding Configuration
|
||||||
@@ -161,8 +162,8 @@ onwards) do not have /usr/include/linux symbolically linked to the
|
|||||||
default kernel source include directory.
|
default kernel source include directory.
|
||||||
|
|
||||||
SECOND IMPORTANT NOTE:
|
SECOND IMPORTANT NOTE:
|
||||||
If you plan to configure bonding using sysfs, you do not need
|
If you plan to configure bonding using sysfs or using the
|
||||||
to use ifenslave.
|
/etc/network/interfaces file, you do not need to use ifenslave.
|
||||||
|
|
||||||
2. Bonding Driver Options
|
2. Bonding Driver Options
|
||||||
=========================
|
=========================
|
||||||
@@ -779,22 +780,26 @@ resend_igmp
|
|||||||
|
|
||||||
You can configure bonding using either your distro's network
|
You can configure bonding using either your distro's network
|
||||||
initialization scripts, or manually using either ifenslave or the
|
initialization scripts, or manually using either ifenslave or the
|
||||||
sysfs interface. Distros generally use one of two packages for the
|
sysfs interface. Distros generally use one of three packages for the
|
||||||
network initialization scripts: initscripts or sysconfig. Recent
|
network initialization scripts: initscripts, sysconfig or interfaces.
|
||||||
versions of these packages have support for bonding, while older
|
Recent versions of these packages have support for bonding, while older
|
||||||
versions do not.
|
versions do not.
|
||||||
|
|
||||||
We will first describe the options for configuring bonding for
|
We will first describe the options for configuring bonding for
|
||||||
distros using versions of initscripts and sysconfig with full or
|
distros using versions of initscripts, sysconfig and interfaces with full
|
||||||
partial support for bonding, then provide information on enabling
|
or partial support for bonding, then provide information on enabling
|
||||||
bonding without support from the network initialization scripts (i.e.,
|
bonding without support from the network initialization scripts (i.e.,
|
||||||
older versions of initscripts or sysconfig).
|
older versions of initscripts or sysconfig).
|
||||||
|
|
||||||
If you're unsure whether your distro uses sysconfig or
|
If you're unsure whether your distro uses sysconfig,
|
||||||
initscripts, or don't know if it's new enough, have no fear.
|
initscripts or interfaces, or don't know if it's new enough, have no fear.
|
||||||
Determining this is fairly straightforward.
|
Determining this is fairly straightforward.
|
||||||
|
|
||||||
First, issue the command:
|
First, look for a file called interfaces in /etc/network directory.
|
||||||
|
If this file is present in your system, then your system use interfaces. See
|
||||||
|
Configuration with Interfaces Support.
|
||||||
|
|
||||||
|
Else, issue the command:
|
||||||
|
|
||||||
$ rpm -qf /sbin/ifup
|
$ rpm -qf /sbin/ifup
|
||||||
|
|
||||||
@@ -1327,8 +1332,62 @@ echo 2000 > /sys/class/net/bond1/bonding/arp_interval
|
|||||||
echo +eth2 > /sys/class/net/bond1/bonding/slaves
|
echo +eth2 > /sys/class/net/bond1/bonding/slaves
|
||||||
echo +eth3 > /sys/class/net/bond1/bonding/slaves
|
echo +eth3 > /sys/class/net/bond1/bonding/slaves
|
||||||
|
|
||||||
3.5 Overriding Configuration for Special Cases
|
3.5 Configuration with Interfaces Support
|
||||||
|
-----------------------------------------
|
||||||
|
|
||||||
|
This section applies to distros which use /etc/network/interfaces file
|
||||||
|
to describe network interface configuration, most notably Debian and it's
|
||||||
|
derivatives.
|
||||||
|
|
||||||
|
The ifup and ifdown commands on Debian don't support bonding out of
|
||||||
|
the box. The ifenslave-2.6 package should be installed to provide bonding
|
||||||
|
support. Once installed, this package will provide bond-* options to be used
|
||||||
|
into /etc/network/interfaces.
|
||||||
|
|
||||||
|
Note that ifenslave-2.6 package will load the bonding module and use
|
||||||
|
the ifenslave command when appropriate.
|
||||||
|
|
||||||
|
Example Configurations
|
||||||
|
----------------------
|
||||||
|
|
||||||
|
In /etc/network/interfaces, the following stanza will configure bond0, in
|
||||||
|
active-backup mode, with eth0 and eth1 as slaves.
|
||||||
|
|
||||||
|
auto bond0
|
||||||
|
iface bond0 inet dhcp
|
||||||
|
bond-slaves eth0 eth1
|
||||||
|
bond-mode active-backup
|
||||||
|
bond-miimon 100
|
||||||
|
bond-primary eth0 eth1
|
||||||
|
|
||||||
|
If the above configuration doesn't work, you might have a system using
|
||||||
|
upstart for system startup. This is most notably true for recent
|
||||||
|
Ubuntu versions. The following stanza in /etc/network/interfaces will
|
||||||
|
produce the same result on those systems.
|
||||||
|
|
||||||
|
auto bond0
|
||||||
|
iface bond0 inet dhcp
|
||||||
|
bond-slaves none
|
||||||
|
bond-mode active-backup
|
||||||
|
bond-miimon 100
|
||||||
|
|
||||||
|
auto eth0
|
||||||
|
iface eth0 inet manual
|
||||||
|
bond-master bond0
|
||||||
|
bond-primary eth0 eth1
|
||||||
|
|
||||||
|
auto eth1
|
||||||
|
iface eth1 inet manual
|
||||||
|
bond-master bond0
|
||||||
|
bond-primary eth0 eth1
|
||||||
|
|
||||||
|
For a full list of bond-* supported options in /etc/network/interfaces and some
|
||||||
|
more advanced examples tailored to you particular distros, see the files in
|
||||||
|
/usr/share/doc/ifenslave-2.6.
|
||||||
|
|
||||||
|
3.6 Overriding Configuration for Special Cases
|
||||||
----------------------------------------------
|
----------------------------------------------
|
||||||
|
|
||||||
When using the bonding driver, the physical port which transmits a frame is
|
When using the bonding driver, the physical port which transmits a frame is
|
||||||
typically selected by the bonding driver, and is not relevant to the user or
|
typically selected by the bonding driver, and is not relevant to the user or
|
||||||
system administrator. The output port is simply selected using the policies of
|
system administrator. The output port is simply selected using the policies of
|
||||||
|
@@ -187,7 +187,7 @@ tcp_cookie_size - INTEGER
|
|||||||
tcp_dsack - BOOLEAN
|
tcp_dsack - BOOLEAN
|
||||||
Allows TCP to send "duplicate" SACKs.
|
Allows TCP to send "duplicate" SACKs.
|
||||||
|
|
||||||
tcp_ecn - BOOLEAN
|
tcp_ecn - INTEGER
|
||||||
Enable Explicit Congestion Notification (ECN) in TCP. ECN is only
|
Enable Explicit Congestion Notification (ECN) in TCP. ECN is only
|
||||||
used when both ends of the TCP flow support it. It is useful to
|
used when both ends of the TCP flow support it. It is useful to
|
||||||
avoid losses due to congestion (when the bottleneck router supports
|
avoid losses due to congestion (when the bottleneck router supports
|
||||||
|
@@ -1,3 +1,7 @@
|
|||||||
|
Version 15 of schedstats dropped counters for some sched_yield:
|
||||||
|
yld_exp_empty, yld_act_empty and yld_both_empty. Otherwise, it is
|
||||||
|
identical to version 14.
|
||||||
|
|
||||||
Version 14 of schedstats includes support for sched_domains, which hit the
|
Version 14 of schedstats includes support for sched_domains, which hit the
|
||||||
mainline kernel in 2.6.20 although it is identical to the stats from version
|
mainline kernel in 2.6.20 although it is identical to the stats from version
|
||||||
12 which was in the kernel from 2.6.13-2.6.19 (version 13 never saw a kernel
|
12 which was in the kernel from 2.6.13-2.6.19 (version 13 never saw a kernel
|
||||||
@@ -28,32 +32,25 @@ to write their own scripts, the fields are described here.
|
|||||||
|
|
||||||
CPU statistics
|
CPU statistics
|
||||||
--------------
|
--------------
|
||||||
cpu<N> 1 2 3 4 5 6 7 8 9 10 11 12
|
cpu<N> 1 2 3 4 5 6 7 8 9
|
||||||
|
|
||||||
NOTE: In the sched_yield() statistics, the active queue is considered empty
|
First field is a sched_yield() statistic:
|
||||||
if it has only one process in it, since obviously the process calling
|
1) # of times sched_yield() was called
|
||||||
sched_yield() is that process.
|
|
||||||
|
|
||||||
First four fields are sched_yield() statistics:
|
|
||||||
1) # of times both the active and the expired queue were empty
|
|
||||||
2) # of times just the active queue was empty
|
|
||||||
3) # of times just the expired queue was empty
|
|
||||||
4) # of times sched_yield() was called
|
|
||||||
|
|
||||||
Next three are schedule() statistics:
|
Next three are schedule() statistics:
|
||||||
5) # of times we switched to the expired queue and reused it
|
2) # of times we switched to the expired queue and reused it
|
||||||
6) # of times schedule() was called
|
3) # of times schedule() was called
|
||||||
7) # of times schedule() left the processor idle
|
4) # of times schedule() left the processor idle
|
||||||
|
|
||||||
Next two are try_to_wake_up() statistics:
|
Next two are try_to_wake_up() statistics:
|
||||||
8) # of times try_to_wake_up() was called
|
5) # of times try_to_wake_up() was called
|
||||||
9) # of times try_to_wake_up() was called to wake up the local cpu
|
6) # of times try_to_wake_up() was called to wake up the local cpu
|
||||||
|
|
||||||
Next three are statistics describing scheduling latency:
|
Next three are statistics describing scheduling latency:
|
||||||
10) sum of all time spent running by tasks on this processor (in jiffies)
|
7) sum of all time spent running by tasks on this processor (in jiffies)
|
||||||
11) sum of all time spent waiting to run by tasks on this processor (in
|
8) sum of all time spent waiting to run by tasks on this processor (in
|
||||||
jiffies)
|
jiffies)
|
||||||
12) # of timeslices run on this cpu
|
9) # of timeslices run on this cpu
|
||||||
|
|
||||||
|
|
||||||
Domain statistics
|
Domain statistics
|
||||||
|
@@ -296,6 +296,7 @@ Conexant 5066
|
|||||||
=============
|
=============
|
||||||
laptop Basic Laptop config (default)
|
laptop Basic Laptop config (default)
|
||||||
hp-laptop HP laptops, e g G60
|
hp-laptop HP laptops, e g G60
|
||||||
|
asus Asus K52JU, Lenovo G560
|
||||||
dell-laptop Dell laptops
|
dell-laptop Dell laptops
|
||||||
dell-vostro Dell Vostro
|
dell-vostro Dell Vostro
|
||||||
olpc-xo-1_5 OLPC XO 1.5
|
olpc-xo-1_5 OLPC XO 1.5
|
||||||
|
@@ -27,42 +27,38 @@ ASoC Codec driver breakdown
|
|||||||
|
|
||||||
1 - Codec DAI and PCM configuration
|
1 - Codec DAI and PCM configuration
|
||||||
-----------------------------------
|
-----------------------------------
|
||||||
Each codec driver must have a struct snd_soc_codec_dai to define its DAI and
|
Each codec driver must have a struct snd_soc_dai_driver to define its DAI and
|
||||||
PCM capabilities and operations. This struct is exported so that it can be
|
PCM capabilities and operations. This struct is exported so that it can be
|
||||||
registered with the core by your machine driver.
|
registered with the core by your machine driver.
|
||||||
|
|
||||||
e.g.
|
e.g.
|
||||||
|
|
||||||
struct snd_soc_codec_dai wm8731_dai = {
|
static struct snd_soc_dai_ops wm8731_dai_ops = {
|
||||||
.name = "WM8731",
|
.prepare = wm8731_pcm_prepare,
|
||||||
/* playback capabilities */
|
.hw_params = wm8731_hw_params,
|
||||||
|
.shutdown = wm8731_shutdown,
|
||||||
|
.digital_mute = wm8731_mute,
|
||||||
|
.set_sysclk = wm8731_set_dai_sysclk,
|
||||||
|
.set_fmt = wm8731_set_dai_fmt,
|
||||||
|
};
|
||||||
|
|
||||||
|
struct snd_soc_dai_driver wm8731_dai = {
|
||||||
|
.name = "wm8731-hifi",
|
||||||
.playback = {
|
.playback = {
|
||||||
.stream_name = "Playback",
|
.stream_name = "Playback",
|
||||||
.channels_min = 1,
|
.channels_min = 1,
|
||||||
.channels_max = 2,
|
.channels_max = 2,
|
||||||
.rates = WM8731_RATES,
|
.rates = WM8731_RATES,
|
||||||
.formats = WM8731_FORMATS,},
|
.formats = WM8731_FORMATS,},
|
||||||
/* capture capabilities */
|
|
||||||
.capture = {
|
.capture = {
|
||||||
.stream_name = "Capture",
|
.stream_name = "Capture",
|
||||||
.channels_min = 1,
|
.channels_min = 1,
|
||||||
.channels_max = 2,
|
.channels_max = 2,
|
||||||
.rates = WM8731_RATES,
|
.rates = WM8731_RATES,
|
||||||
.formats = WM8731_FORMATS,},
|
.formats = WM8731_FORMATS,},
|
||||||
/* pcm operations - see section 4 below */
|
.ops = &wm8731_dai_ops,
|
||||||
.ops = {
|
.symmetric_rates = 1,
|
||||||
.prepare = wm8731_pcm_prepare,
|
|
||||||
.hw_params = wm8731_hw_params,
|
|
||||||
.shutdown = wm8731_shutdown,
|
|
||||||
},
|
|
||||||
/* DAI operations - see DAI.txt */
|
|
||||||
.dai_ops = {
|
|
||||||
.digital_mute = wm8731_mute,
|
|
||||||
.set_sysclk = wm8731_set_dai_sysclk,
|
|
||||||
.set_fmt = wm8731_set_dai_fmt,
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
EXPORT_SYMBOL_GPL(wm8731_dai);
|
|
||||||
|
|
||||||
|
|
||||||
2 - Codec control IO
|
2 - Codec control IO
|
||||||
@@ -186,13 +182,14 @@ when the mute is applied or freed.
|
|||||||
|
|
||||||
i.e.
|
i.e.
|
||||||
|
|
||||||
static int wm8974_mute(struct snd_soc_codec *codec,
|
static int wm8974_mute(struct snd_soc_dai *dai, int mute)
|
||||||
struct snd_soc_codec_dai *dai, int mute)
|
|
||||||
{
|
{
|
||||||
u16 mute_reg = wm8974_read_reg_cache(codec, WM8974_DAC) & 0xffbf;
|
struct snd_soc_codec *codec = dai->codec;
|
||||||
if(mute)
|
u16 mute_reg = snd_soc_read(codec, WM8974_DAC) & 0xffbf;
|
||||||
wm8974_write(codec, WM8974_DAC, mute_reg | 0x40);
|
|
||||||
|
if (mute)
|
||||||
|
snd_soc_write(codec, WM8974_DAC, mute_reg | 0x40);
|
||||||
else
|
else
|
||||||
wm8974_write(codec, WM8974_DAC, mute_reg);
|
snd_soc_write(codec, WM8974_DAC, mute_reg);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@@ -12,6 +12,8 @@ the following struct:-
|
|||||||
struct snd_soc_card {
|
struct snd_soc_card {
|
||||||
char *name;
|
char *name;
|
||||||
|
|
||||||
|
...
|
||||||
|
|
||||||
int (*probe)(struct platform_device *pdev);
|
int (*probe)(struct platform_device *pdev);
|
||||||
int (*remove)(struct platform_device *pdev);
|
int (*remove)(struct platform_device *pdev);
|
||||||
|
|
||||||
@@ -22,12 +24,13 @@ struct snd_soc_card {
|
|||||||
int (*resume_pre)(struct platform_device *pdev);
|
int (*resume_pre)(struct platform_device *pdev);
|
||||||
int (*resume_post)(struct platform_device *pdev);
|
int (*resume_post)(struct platform_device *pdev);
|
||||||
|
|
||||||
/* machine stream operations */
|
...
|
||||||
struct snd_soc_ops *ops;
|
|
||||||
|
|
||||||
/* CPU <--> Codec DAI links */
|
/* CPU <--> Codec DAI links */
|
||||||
struct snd_soc_dai_link *dai_link;
|
struct snd_soc_dai_link *dai_link;
|
||||||
int num_links;
|
int num_links;
|
||||||
|
|
||||||
|
...
|
||||||
};
|
};
|
||||||
|
|
||||||
probe()/remove()
|
probe()/remove()
|
||||||
@@ -42,11 +45,6 @@ of any machine audio tasks that have to be done before or after the codec, DAIs
|
|||||||
and DMA is suspended and resumed. Optional.
|
and DMA is suspended and resumed. Optional.
|
||||||
|
|
||||||
|
|
||||||
Machine operations
|
|
||||||
------------------
|
|
||||||
The machine specific audio operations can be set here. Again this is optional.
|
|
||||||
|
|
||||||
|
|
||||||
Machine DAI Configuration
|
Machine DAI Configuration
|
||||||
-------------------------
|
-------------------------
|
||||||
The machine DAI configuration glues all the codec and CPU DAIs together. It can
|
The machine DAI configuration glues all the codec and CPU DAIs together. It can
|
||||||
@@ -61,8 +59,10 @@ struct snd_soc_dai_link is used to set up each DAI in your machine. e.g.
|
|||||||
static struct snd_soc_dai_link corgi_dai = {
|
static struct snd_soc_dai_link corgi_dai = {
|
||||||
.name = "WM8731",
|
.name = "WM8731",
|
||||||
.stream_name = "WM8731",
|
.stream_name = "WM8731",
|
||||||
.cpu_dai = &pxa_i2s_dai,
|
.cpu_dai_name = "pxa-is2-dai",
|
||||||
.codec_dai = &wm8731_dai,
|
.codec_dai_name = "wm8731-hifi",
|
||||||
|
.platform_name = "pxa-pcm-audio",
|
||||||
|
.codec_name = "wm8713-codec.0-001a",
|
||||||
.init = corgi_wm8731_init,
|
.init = corgi_wm8731_init,
|
||||||
.ops = &corgi_ops,
|
.ops = &corgi_ops,
|
||||||
};
|
};
|
||||||
@@ -77,26 +77,6 @@ static struct snd_soc_card snd_soc_corgi = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
Machine Audio Subsystem
|
|
||||||
-----------------------
|
|
||||||
|
|
||||||
The machine soc device glues the platform, machine and codec driver together.
|
|
||||||
Private data can also be set here. e.g.
|
|
||||||
|
|
||||||
/* corgi audio private data */
|
|
||||||
static struct wm8731_setup_data corgi_wm8731_setup = {
|
|
||||||
.i2c_address = 0x1b,
|
|
||||||
};
|
|
||||||
|
|
||||||
/* corgi audio subsystem */
|
|
||||||
static struct snd_soc_device corgi_snd_devdata = {
|
|
||||||
.machine = &snd_soc_corgi,
|
|
||||||
.platform = &pxa2xx_soc_platform,
|
|
||||||
.codec_dev = &soc_codec_dev_wm8731,
|
|
||||||
.codec_data = &corgi_wm8731_setup,
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
Machine Power Map
|
Machine Power Map
|
||||||
-----------------
|
-----------------
|
||||||
|
|
||||||
|
@@ -20,9 +20,10 @@ struct snd_soc_ops {
|
|||||||
int (*trigger)(struct snd_pcm_substream *, int);
|
int (*trigger)(struct snd_pcm_substream *, int);
|
||||||
};
|
};
|
||||||
|
|
||||||
The platform driver exports its DMA functionality via struct snd_soc_platform:-
|
The platform driver exports its DMA functionality via struct
|
||||||
|
snd_soc_platform_driver:-
|
||||||
|
|
||||||
struct snd_soc_platform {
|
struct snd_soc_platform_driver {
|
||||||
char *name;
|
char *name;
|
||||||
|
|
||||||
int (*probe)(struct platform_device *pdev);
|
int (*probe)(struct platform_device *pdev);
|
||||||
@@ -34,6 +35,13 @@ struct snd_soc_platform {
|
|||||||
int (*pcm_new)(struct snd_card *, struct snd_soc_codec_dai *, struct snd_pcm *);
|
int (*pcm_new)(struct snd_card *, struct snd_soc_codec_dai *, struct snd_pcm *);
|
||||||
void (*pcm_free)(struct snd_pcm *);
|
void (*pcm_free)(struct snd_pcm *);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* For platform caused delay reporting.
|
||||||
|
* Optional.
|
||||||
|
*/
|
||||||
|
snd_pcm_sframes_t (*delay)(struct snd_pcm_substream *,
|
||||||
|
struct snd_soc_dai *);
|
||||||
|
|
||||||
/* platform stream ops */
|
/* platform stream ops */
|
||||||
struct snd_pcm_ops *pcm_ops;
|
struct snd_pcm_ops *pcm_ops;
|
||||||
};
|
};
|
||||||
|
1094
Documentation/target/tcm_mod_builder.py
Executable file
1094
Documentation/target/tcm_mod_builder.py
Executable file
File diff suppressed because it is too large
Load Diff
145
Documentation/target/tcm_mod_builder.txt
Normal file
145
Documentation/target/tcm_mod_builder.txt
Normal file
@@ -0,0 +1,145 @@
|
|||||||
|
>>>>>>>>>> The TCM v4 fabric module script generator <<<<<<<<<<
|
||||||
|
|
||||||
|
Greetings all,
|
||||||
|
|
||||||
|
This document is intended to be a mini-HOWTO for using the tcm_mod_builder.py
|
||||||
|
script to generate a brand new functional TCM v4 fabric .ko module of your very own,
|
||||||
|
that once built can be immediately be loaded to start access the new TCM/ConfigFS
|
||||||
|
fabric skeleton, by simply using:
|
||||||
|
|
||||||
|
modprobe $TCM_NEW_MOD
|
||||||
|
mkdir -p /sys/kernel/config/target/$TCM_NEW_MOD
|
||||||
|
|
||||||
|
This script will create a new drivers/target/$TCM_NEW_MOD/, and will do the following
|
||||||
|
|
||||||
|
*) Generate new API callers for drivers/target/target_core_fabric_configs.c logic
|
||||||
|
->make_nodeacl(), ->drop_nodeacl(), ->make_tpg(), ->drop_tpg()
|
||||||
|
->make_wwn(), ->drop_wwn(). These are created into $TCM_NEW_MOD/$TCM_NEW_MOD_configfs.c
|
||||||
|
*) Generate basic infrastructure for loading/unloading LKMs and TCM/ConfigFS fabric module
|
||||||
|
using a skeleton struct target_core_fabric_ops API template.
|
||||||
|
*) Based on user defined T10 Proto_Ident for the new fabric module being built,
|
||||||
|
the TransportID / Initiator and Target WWPN related handlers for
|
||||||
|
SPC-3 persistent reservation are automatically generated in $TCM_NEW_MOD/$TCM_NEW_MOD_fabric.c
|
||||||
|
using drivers/target/target_core_fabric_lib.c logic.
|
||||||
|
*) NOP API calls for all other Data I/O path and fabric dependent attribute logic
|
||||||
|
in $TCM_NEW_MOD/$TCM_NEW_MOD_fabric.c
|
||||||
|
|
||||||
|
tcm_mod_builder.py depends upon the mandatory '-p $PROTO_IDENT' and '-m
|
||||||
|
$FABRIC_MOD_name' parameters, and actually running the script looks like:
|
||||||
|
|
||||||
|
target:/mnt/sdb/lio-core-2.6.git/Documentation/target# python tcm_mod_builder.py -p iSCSI -m tcm_nab5000
|
||||||
|
tcm_dir: /mnt/sdb/lio-core-2.6.git/Documentation/target/../../
|
||||||
|
Set fabric_mod_name: tcm_nab5000
|
||||||
|
Set fabric_mod_dir:
|
||||||
|
/mnt/sdb/lio-core-2.6.git/Documentation/target/../../drivers/target/tcm_nab5000
|
||||||
|
Using proto_ident: iSCSI
|
||||||
|
Creating fabric_mod_dir:
|
||||||
|
/mnt/sdb/lio-core-2.6.git/Documentation/target/../../drivers/target/tcm_nab5000
|
||||||
|
Writing file:
|
||||||
|
/mnt/sdb/lio-core-2.6.git/Documentation/target/../../drivers/target/tcm_nab5000/tcm_nab5000_base.h
|
||||||
|
Using tcm_mod_scan_fabric_ops:
|
||||||
|
/mnt/sdb/lio-core-2.6.git/Documentation/target/../../include/target/target_core_fabric_ops.h
|
||||||
|
Writing file:
|
||||||
|
/mnt/sdb/lio-core-2.6.git/Documentation/target/../../drivers/target/tcm_nab5000/tcm_nab5000_fabric.c
|
||||||
|
Writing file:
|
||||||
|
/mnt/sdb/lio-core-2.6.git/Documentation/target/../../drivers/target/tcm_nab5000/tcm_nab5000_fabric.h
|
||||||
|
Writing file:
|
||||||
|
/mnt/sdb/lio-core-2.6.git/Documentation/target/../../drivers/target/tcm_nab5000/tcm_nab5000_configfs.c
|
||||||
|
Writing file:
|
||||||
|
/mnt/sdb/lio-core-2.6.git/Documentation/target/../../drivers/target/tcm_nab5000/Kbuild
|
||||||
|
Writing file:
|
||||||
|
/mnt/sdb/lio-core-2.6.git/Documentation/target/../../drivers/target/tcm_nab5000/Kconfig
|
||||||
|
Would you like to add tcm_nab5000to drivers/target/Kbuild..? [yes,no]: yes
|
||||||
|
Would you like to add tcm_nab5000to drivers/target/Kconfig..? [yes,no]: yes
|
||||||
|
|
||||||
|
At the end of tcm_mod_builder.py. the script will ask to add the following
|
||||||
|
line to drivers/target/Kbuild:
|
||||||
|
|
||||||
|
obj-$(CONFIG_TCM_NAB5000) += tcm_nab5000/
|
||||||
|
|
||||||
|
and the same for drivers/target/Kconfig:
|
||||||
|
|
||||||
|
source "drivers/target/tcm_nab5000/Kconfig"
|
||||||
|
|
||||||
|
*) Run 'make menuconfig' and select the new CONFIG_TCM_NAB5000 item:
|
||||||
|
|
||||||
|
<M> TCM_NAB5000 fabric module
|
||||||
|
|
||||||
|
*) Build using 'make modules', once completed you will have:
|
||||||
|
|
||||||
|
target:/mnt/sdb/lio-core-2.6.git# ls -la drivers/target/tcm_nab5000/
|
||||||
|
total 1348
|
||||||
|
drwxr-xr-x 2 root root 4096 2010-10-05 03:23 .
|
||||||
|
drwxr-xr-x 9 root root 4096 2010-10-05 03:22 ..
|
||||||
|
-rw-r--r-- 1 root root 282 2010-10-05 03:22 Kbuild
|
||||||
|
-rw-r--r-- 1 root root 171 2010-10-05 03:22 Kconfig
|
||||||
|
-rw-r--r-- 1 root root 49 2010-10-05 03:23 modules.order
|
||||||
|
-rw-r--r-- 1 root root 738 2010-10-05 03:22 tcm_nab5000_base.h
|
||||||
|
-rw-r--r-- 1 root root 9096 2010-10-05 03:22 tcm_nab5000_configfs.c
|
||||||
|
-rw-r--r-- 1 root root 191200 2010-10-05 03:23 tcm_nab5000_configfs.o
|
||||||
|
-rw-r--r-- 1 root root 40504 2010-10-05 03:23 .tcm_nab5000_configfs.o.cmd
|
||||||
|
-rw-r--r-- 1 root root 5414 2010-10-05 03:22 tcm_nab5000_fabric.c
|
||||||
|
-rw-r--r-- 1 root root 2016 2010-10-05 03:22 tcm_nab5000_fabric.h
|
||||||
|
-rw-r--r-- 1 root root 190932 2010-10-05 03:23 tcm_nab5000_fabric.o
|
||||||
|
-rw-r--r-- 1 root root 40713 2010-10-05 03:23 .tcm_nab5000_fabric.o.cmd
|
||||||
|
-rw-r--r-- 1 root root 401861 2010-10-05 03:23 tcm_nab5000.ko
|
||||||
|
-rw-r--r-- 1 root root 265 2010-10-05 03:23 .tcm_nab5000.ko.cmd
|
||||||
|
-rw-r--r-- 1 root root 459 2010-10-05 03:23 tcm_nab5000.mod.c
|
||||||
|
-rw-r--r-- 1 root root 23896 2010-10-05 03:23 tcm_nab5000.mod.o
|
||||||
|
-rw-r--r-- 1 root root 22655 2010-10-05 03:23 .tcm_nab5000.mod.o.cmd
|
||||||
|
-rw-r--r-- 1 root root 379022 2010-10-05 03:23 tcm_nab5000.o
|
||||||
|
-rw-r--r-- 1 root root 211 2010-10-05 03:23 .tcm_nab5000.o.cmd
|
||||||
|
|
||||||
|
*) Load the new module, create a lun_0 configfs group, and add new TCM Core
|
||||||
|
IBLOCK backstore symlink to port:
|
||||||
|
|
||||||
|
target:/mnt/sdb/lio-core-2.6.git# insmod drivers/target/tcm_nab5000.ko
|
||||||
|
target:/mnt/sdb/lio-core-2.6.git# mkdir -p /sys/kernel/config/target/nab5000/iqn.foo/tpgt_1/lun/lun_0
|
||||||
|
target:/mnt/sdb/lio-core-2.6.git# cd /sys/kernel/config/target/nab5000/iqn.foo/tpgt_1/lun/lun_0/
|
||||||
|
target:/sys/kernel/config/target/nab5000/iqn.foo/tpgt_1/lun/lun_0# ln -s /sys/kernel/config/target/core/iblock_0/lvm_test0 nab5000_port
|
||||||
|
|
||||||
|
target:/sys/kernel/config/target/nab5000/iqn.foo/tpgt_1/lun/lun_0# cd -
|
||||||
|
target:/mnt/sdb/lio-core-2.6.git# tree /sys/kernel/config/target/nab5000/
|
||||||
|
/sys/kernel/config/target/nab5000/
|
||||||
|
|-- discovery_auth
|
||||||
|
|-- iqn.foo
|
||||||
|
| `-- tpgt_1
|
||||||
|
| |-- acls
|
||||||
|
| |-- attrib
|
||||||
|
| |-- lun
|
||||||
|
| | `-- lun_0
|
||||||
|
| | |-- alua_tg_pt_gp
|
||||||
|
| | |-- alua_tg_pt_offline
|
||||||
|
| | |-- alua_tg_pt_status
|
||||||
|
| | |-- alua_tg_pt_write_md
|
||||||
|
| | `-- nab5000_port -> ../../../../../../target/core/iblock_0/lvm_test0
|
||||||
|
| |-- np
|
||||||
|
| `-- param
|
||||||
|
`-- version
|
||||||
|
|
||||||
|
target:/mnt/sdb/lio-core-2.6.git# lsmod
|
||||||
|
Module Size Used by
|
||||||
|
tcm_nab5000 3935 4
|
||||||
|
iscsi_target_mod 193211 0
|
||||||
|
target_core_stgt 8090 0
|
||||||
|
target_core_pscsi 11122 1
|
||||||
|
target_core_file 9172 2
|
||||||
|
target_core_iblock 9280 1
|
||||||
|
target_core_mod 228575 31
|
||||||
|
tcm_nab5000,iscsi_target_mod,target_core_stgt,target_core_pscsi,target_core_file,target_core_iblock
|
||||||
|
libfc 73681 0
|
||||||
|
scsi_debug 56265 0
|
||||||
|
scsi_tgt 8666 1 target_core_stgt
|
||||||
|
configfs 20644 2 target_core_mod
|
||||||
|
|
||||||
|
----------------------------------------------------------------------
|
||||||
|
|
||||||
|
Future TODO items:
|
||||||
|
|
||||||
|
*) Add more T10 proto_idents
|
||||||
|
*) Make tcm_mod_dump_fabric_ops() smarter and generate function pointer
|
||||||
|
defs directly from include/target/target_core_fabric_ops.h:struct target_core_fabric_ops
|
||||||
|
structure members.
|
||||||
|
|
||||||
|
October 5th, 2010
|
||||||
|
Nicholas A. Bellinger <nab@linux-iscsi.org>
|
@@ -278,3 +278,15 @@ method, the sys I/F structure will be built like this:
|
|||||||
|---name: acpitz
|
|---name: acpitz
|
||||||
|---temp1_input: 37000
|
|---temp1_input: 37000
|
||||||
|---temp1_crit: 100000
|
|---temp1_crit: 100000
|
||||||
|
|
||||||
|
4. Event Notification
|
||||||
|
|
||||||
|
The framework includes a simple notification mechanism, in the form of a
|
||||||
|
netlink event. Netlink socket initialization is done during the _init_
|
||||||
|
of the framework. Drivers which intend to use the notification mechanism
|
||||||
|
just need to call generate_netlink_event() with two arguments viz
|
||||||
|
(originator, event). Typically the originator will be an integer assigned
|
||||||
|
to a thermal_zone_device when it registers itself with the framework. The
|
||||||
|
event will be one of:{THERMAL_AUX0, THERMAL_AUX1, THERMAL_CRITICAL,
|
||||||
|
THERMAL_DEV_FAULT}. Notification can be sent when the current temperature
|
||||||
|
crosses any of the configured thresholds.
|
||||||
|
@@ -285,6 +285,9 @@ implement g_volatile_ctrl like this:
|
|||||||
The 'new value' union is not used in g_volatile_ctrl. In general controls
|
The 'new value' union is not used in g_volatile_ctrl. In general controls
|
||||||
that need to implement g_volatile_ctrl are read-only controls.
|
that need to implement g_volatile_ctrl are read-only controls.
|
||||||
|
|
||||||
|
Note that if one or more controls in a control cluster are marked as volatile,
|
||||||
|
then all the controls in the cluster are seen as volatile.
|
||||||
|
|
||||||
To mark a control as volatile you have to set the is_volatile flag:
|
To mark a control as volatile you have to set the is_volatile flag:
|
||||||
|
|
||||||
ctrl = v4l2_ctrl_new_std(&sd->ctrl_handler, ...);
|
ctrl = v4l2_ctrl_new_std(&sd->ctrl_handler, ...);
|
||||||
@@ -462,6 +465,15 @@ pointer to the v4l2_ctrl_ops struct that is used for that cluster.
|
|||||||
Obviously, all controls in the cluster array must be initialized to either
|
Obviously, all controls in the cluster array must be initialized to either
|
||||||
a valid control or to NULL.
|
a valid control or to NULL.
|
||||||
|
|
||||||
|
In rare cases you might want to know which controls of a cluster actually
|
||||||
|
were set explicitly by the user. For this you can check the 'is_new' flag of
|
||||||
|
each control. For example, in the case of a volume/mute cluster the 'is_new'
|
||||||
|
flag of the mute control would be set if the user called VIDIOC_S_CTRL for
|
||||||
|
mute only. If the user would call VIDIOC_S_EXT_CTRLS for both mute and volume
|
||||||
|
controls, then the 'is_new' flag would be 1 for both controls.
|
||||||
|
|
||||||
|
The 'is_new' flag is always 1 when called from v4l2_ctrl_handler_setup().
|
||||||
|
|
||||||
|
|
||||||
VIDIOC_LOG_STATUS Support
|
VIDIOC_LOG_STATUS Support
|
||||||
=========================
|
=========================
|
||||||
|
298
Documentation/vm/transhuge.txt
Normal file
298
Documentation/vm/transhuge.txt
Normal file
@@ -0,0 +1,298 @@
|
|||||||
|
= Transparent Hugepage Support =
|
||||||
|
|
||||||
|
== Objective ==
|
||||||
|
|
||||||
|
Performance critical computing applications dealing with large memory
|
||||||
|
working sets are already running on top of libhugetlbfs and in turn
|
||||||
|
hugetlbfs. Transparent Hugepage Support is an alternative means of
|
||||||
|
using huge pages for the backing of virtual memory with huge pages
|
||||||
|
that supports the automatic promotion and demotion of page sizes and
|
||||||
|
without the shortcomings of hugetlbfs.
|
||||||
|
|
||||||
|
Currently it only works for anonymous memory mappings but in the
|
||||||
|
future it can expand over the pagecache layer starting with tmpfs.
|
||||||
|
|
||||||
|
The reason applications are running faster is because of two
|
||||||
|
factors. The first factor is almost completely irrelevant and it's not
|
||||||
|
of significant interest because it'll also have the downside of
|
||||||
|
requiring larger clear-page copy-page in page faults which is a
|
||||||
|
potentially negative effect. The first factor consists in taking a
|
||||||
|
single page fault for each 2M virtual region touched by userland (so
|
||||||
|
reducing the enter/exit kernel frequency by a 512 times factor). This
|
||||||
|
only matters the first time the memory is accessed for the lifetime of
|
||||||
|
a memory mapping. The second long lasting and much more important
|
||||||
|
factor will affect all subsequent accesses to the memory for the whole
|
||||||
|
runtime of the application. The second factor consist of two
|
||||||
|
components: 1) the TLB miss will run faster (especially with
|
||||||
|
virtualization using nested pagetables but almost always also on bare
|
||||||
|
metal without virtualization) and 2) a single TLB entry will be
|
||||||
|
mapping a much larger amount of virtual memory in turn reducing the
|
||||||
|
number of TLB misses. With virtualization and nested pagetables the
|
||||||
|
TLB can be mapped of larger size only if both KVM and the Linux guest
|
||||||
|
are using hugepages but a significant speedup already happens if only
|
||||||
|
one of the two is using hugepages just because of the fact the TLB
|
||||||
|
miss is going to run faster.
|
||||||
|
|
||||||
|
== Design ==
|
||||||
|
|
||||||
|
- "graceful fallback": mm components which don't have transparent
|
||||||
|
hugepage knowledge fall back to breaking a transparent hugepage and
|
||||||
|
working on the regular pages and their respective regular pmd/pte
|
||||||
|
mappings
|
||||||
|
|
||||||
|
- if a hugepage allocation fails because of memory fragmentation,
|
||||||
|
regular pages should be gracefully allocated instead and mixed in
|
||||||
|
the same vma without any failure or significant delay and without
|
||||||
|
userland noticing
|
||||||
|
|
||||||
|
- if some task quits and more hugepages become available (either
|
||||||
|
immediately in the buddy or through the VM), guest physical memory
|
||||||
|
backed by regular pages should be relocated on hugepages
|
||||||
|
automatically (with khugepaged)
|
||||||
|
|
||||||
|
- it doesn't require memory reservation and in turn it uses hugepages
|
||||||
|
whenever possible (the only possible reservation here is kernelcore=
|
||||||
|
to avoid unmovable pages to fragment all the memory but such a tweak
|
||||||
|
is not specific to transparent hugepage support and it's a generic
|
||||||
|
feature that applies to all dynamic high order allocations in the
|
||||||
|
kernel)
|
||||||
|
|
||||||
|
- this initial support only offers the feature in the anonymous memory
|
||||||
|
regions but it'd be ideal to move it to tmpfs and the pagecache
|
||||||
|
later
|
||||||
|
|
||||||
|
Transparent Hugepage Support maximizes the usefulness of free memory
|
||||||
|
if compared to the reservation approach of hugetlbfs by allowing all
|
||||||
|
unused memory to be used as cache or other movable (or even unmovable
|
||||||
|
entities). It doesn't require reservation to prevent hugepage
|
||||||
|
allocation failures to be noticeable from userland. It allows paging
|
||||||
|
and all other advanced VM features to be available on the
|
||||||
|
hugepages. It requires no modifications for applications to take
|
||||||
|
advantage of it.
|
||||||
|
|
||||||
|
Applications however can be further optimized to take advantage of
|
||||||
|
this feature, like for example they've been optimized before to avoid
|
||||||
|
a flood of mmap system calls for every malloc(4k). Optimizing userland
|
||||||
|
is by far not mandatory and khugepaged already can take care of long
|
||||||
|
lived page allocations even for hugepage unaware applications that
|
||||||
|
deals with large amounts of memory.
|
||||||
|
|
||||||
|
In certain cases when hugepages are enabled system wide, application
|
||||||
|
may end up allocating more memory resources. An application may mmap a
|
||||||
|
large region but only touch 1 byte of it, in that case a 2M page might
|
||||||
|
be allocated instead of a 4k page for no good. This is why it's
|
||||||
|
possible to disable hugepages system-wide and to only have them inside
|
||||||
|
MADV_HUGEPAGE madvise regions.
|
||||||
|
|
||||||
|
Embedded systems should enable hugepages only inside madvise regions
|
||||||
|
to eliminate any risk of wasting any precious byte of memory and to
|
||||||
|
only run faster.
|
||||||
|
|
||||||
|
Applications that gets a lot of benefit from hugepages and that don't
|
||||||
|
risk to lose memory by using hugepages, should use
|
||||||
|
madvise(MADV_HUGEPAGE) on their critical mmapped regions.
|
||||||
|
|
||||||
|
== sysfs ==
|
||||||
|
|
||||||
|
Transparent Hugepage Support can be entirely disabled (mostly for
|
||||||
|
debugging purposes) or only enabled inside MADV_HUGEPAGE regions (to
|
||||||
|
avoid the risk of consuming more memory resources) or enabled system
|
||||||
|
wide. This can be achieved with one of:
|
||||||
|
|
||||||
|
echo always >/sys/kernel/mm/transparent_hugepage/enabled
|
||||||
|
echo madvise >/sys/kernel/mm/transparent_hugepage/enabled
|
||||||
|
echo never >/sys/kernel/mm/transparent_hugepage/enabled
|
||||||
|
|
||||||
|
It's also possible to limit defrag efforts in the VM to generate
|
||||||
|
hugepages in case they're not immediately free to madvise regions or
|
||||||
|
to never try to defrag memory and simply fallback to regular pages
|
||||||
|
unless hugepages are immediately available. Clearly if we spend CPU
|
||||||
|
time to defrag memory, we would expect to gain even more by the fact
|
||||||
|
we use hugepages later instead of regular pages. This isn't always
|
||||||
|
guaranteed, but it may be more likely in case the allocation is for a
|
||||||
|
MADV_HUGEPAGE region.
|
||||||
|
|
||||||
|
echo always >/sys/kernel/mm/transparent_hugepage/defrag
|
||||||
|
echo madvise >/sys/kernel/mm/transparent_hugepage/defrag
|
||||||
|
echo never >/sys/kernel/mm/transparent_hugepage/defrag
|
||||||
|
|
||||||
|
khugepaged will be automatically started when
|
||||||
|
transparent_hugepage/enabled is set to "always" or "madvise, and it'll
|
||||||
|
be automatically shutdown if it's set to "never".
|
||||||
|
|
||||||
|
khugepaged runs usually at low frequency so while one may not want to
|
||||||
|
invoke defrag algorithms synchronously during the page faults, it
|
||||||
|
should be worth invoking defrag at least in khugepaged. However it's
|
||||||
|
also possible to disable defrag in khugepaged:
|
||||||
|
|
||||||
|
echo yes >/sys/kernel/mm/transparent_hugepage/khugepaged/defrag
|
||||||
|
echo no >/sys/kernel/mm/transparent_hugepage/khugepaged/defrag
|
||||||
|
|
||||||
|
You can also control how many pages khugepaged should scan at each
|
||||||
|
pass:
|
||||||
|
|
||||||
|
/sys/kernel/mm/transparent_hugepage/khugepaged/pages_to_scan
|
||||||
|
|
||||||
|
and how many milliseconds to wait in khugepaged between each pass (you
|
||||||
|
can set this to 0 to run khugepaged at 100% utilization of one core):
|
||||||
|
|
||||||
|
/sys/kernel/mm/transparent_hugepage/khugepaged/scan_sleep_millisecs
|
||||||
|
|
||||||
|
and how many milliseconds to wait in khugepaged if there's an hugepage
|
||||||
|
allocation failure to throttle the next allocation attempt.
|
||||||
|
|
||||||
|
/sys/kernel/mm/transparent_hugepage/khugepaged/alloc_sleep_millisecs
|
||||||
|
|
||||||
|
The khugepaged progress can be seen in the number of pages collapsed:
|
||||||
|
|
||||||
|
/sys/kernel/mm/transparent_hugepage/khugepaged/pages_collapsed
|
||||||
|
|
||||||
|
for each pass:
|
||||||
|
|
||||||
|
/sys/kernel/mm/transparent_hugepage/khugepaged/full_scans
|
||||||
|
|
||||||
|
== Boot parameter ==
|
||||||
|
|
||||||
|
You can change the sysfs boot time defaults of Transparent Hugepage
|
||||||
|
Support by passing the parameter "transparent_hugepage=always" or
|
||||||
|
"transparent_hugepage=madvise" or "transparent_hugepage=never"
|
||||||
|
(without "") to the kernel command line.
|
||||||
|
|
||||||
|
== Need of application restart ==
|
||||||
|
|
||||||
|
The transparent_hugepage/enabled values only affect future
|
||||||
|
behavior. So to make them effective you need to restart any
|
||||||
|
application that could have been using hugepages. This also applies to
|
||||||
|
the regions registered in khugepaged.
|
||||||
|
|
||||||
|
== get_user_pages and follow_page ==
|
||||||
|
|
||||||
|
get_user_pages and follow_page if run on a hugepage, will return the
|
||||||
|
head or tail pages as usual (exactly as they would do on
|
||||||
|
hugetlbfs). Most gup users will only care about the actual physical
|
||||||
|
address of the page and its temporary pinning to release after the I/O
|
||||||
|
is complete, so they won't ever notice the fact the page is huge. But
|
||||||
|
if any driver is going to mangle over the page structure of the tail
|
||||||
|
page (like for checking page->mapping or other bits that are relevant
|
||||||
|
for the head page and not the tail page), it should be updated to jump
|
||||||
|
to check head page instead (while serializing properly against
|
||||||
|
split_huge_page() to avoid the head and tail pages to disappear from
|
||||||
|
under it, see the futex code to see an example of that, hugetlbfs also
|
||||||
|
needed special handling in futex code for similar reasons).
|
||||||
|
|
||||||
|
NOTE: these aren't new constraints to the GUP API, and they match the
|
||||||
|
same constrains that applies to hugetlbfs too, so any driver capable
|
||||||
|
of handling GUP on hugetlbfs will also work fine on transparent
|
||||||
|
hugepage backed mappings.
|
||||||
|
|
||||||
|
In case you can't handle compound pages if they're returned by
|
||||||
|
follow_page, the FOLL_SPLIT bit can be specified as parameter to
|
||||||
|
follow_page, so that it will split the hugepages before returning
|
||||||
|
them. Migration for example passes FOLL_SPLIT as parameter to
|
||||||
|
follow_page because it's not hugepage aware and in fact it can't work
|
||||||
|
at all on hugetlbfs (but it instead works fine on transparent
|
||||||
|
hugepages thanks to FOLL_SPLIT). migration simply can't deal with
|
||||||
|
hugepages being returned (as it's not only checking the pfn of the
|
||||||
|
page and pinning it during the copy but it pretends to migrate the
|
||||||
|
memory in regular page sizes and with regular pte/pmd mappings).
|
||||||
|
|
||||||
|
== Optimizing the applications ==
|
||||||
|
|
||||||
|
To be guaranteed that the kernel will map a 2M page immediately in any
|
||||||
|
memory region, the mmap region has to be hugepage naturally
|
||||||
|
aligned. posix_memalign() can provide that guarantee.
|
||||||
|
|
||||||
|
== Hugetlbfs ==
|
||||||
|
|
||||||
|
You can use hugetlbfs on a kernel that has transparent hugepage
|
||||||
|
support enabled just fine as always. No difference can be noted in
|
||||||
|
hugetlbfs other than there will be less overall fragmentation. All
|
||||||
|
usual features belonging to hugetlbfs are preserved and
|
||||||
|
unaffected. libhugetlbfs will also work fine as usual.
|
||||||
|
|
||||||
|
== Graceful fallback ==
|
||||||
|
|
||||||
|
Code walking pagetables but unware about huge pmds can simply call
|
||||||
|
split_huge_page_pmd(mm, pmd) where the pmd is the one returned by
|
||||||
|
pmd_offset. It's trivial to make the code transparent hugepage aware
|
||||||
|
by just grepping for "pmd_offset" and adding split_huge_page_pmd where
|
||||||
|
missing after pmd_offset returns the pmd. Thanks to the graceful
|
||||||
|
fallback design, with a one liner change, you can avoid to write
|
||||||
|
hundred if not thousand of lines of complex code to make your code
|
||||||
|
hugepage aware.
|
||||||
|
|
||||||
|
If you're not walking pagetables but you run into a physical hugepage
|
||||||
|
but you can't handle it natively in your code, you can split it by
|
||||||
|
calling split_huge_page(page). This is what the Linux VM does before
|
||||||
|
it tries to swapout the hugepage for example.
|
||||||
|
|
||||||
|
Example to make mremap.c transparent hugepage aware with a one liner
|
||||||
|
change:
|
||||||
|
|
||||||
|
diff --git a/mm/mremap.c b/mm/mremap.c
|
||||||
|
--- a/mm/mremap.c
|
||||||
|
+++ b/mm/mremap.c
|
||||||
|
@@ -41,6 +41,7 @@ static pmd_t *get_old_pmd(struct mm_stru
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
pmd = pmd_offset(pud, addr);
|
||||||
|
+ split_huge_page_pmd(mm, pmd);
|
||||||
|
if (pmd_none_or_clear_bad(pmd))
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
== Locking in hugepage aware code ==
|
||||||
|
|
||||||
|
We want as much code as possible hugepage aware, as calling
|
||||||
|
split_huge_page() or split_huge_page_pmd() has a cost.
|
||||||
|
|
||||||
|
To make pagetable walks huge pmd aware, all you need to do is to call
|
||||||
|
pmd_trans_huge() on the pmd returned by pmd_offset. You must hold the
|
||||||
|
mmap_sem in read (or write) mode to be sure an huge pmd cannot be
|
||||||
|
created from under you by khugepaged (khugepaged collapse_huge_page
|
||||||
|
takes the mmap_sem in write mode in addition to the anon_vma lock). If
|
||||||
|
pmd_trans_huge returns false, you just fallback in the old code
|
||||||
|
paths. If instead pmd_trans_huge returns true, you have to take the
|
||||||
|
mm->page_table_lock and re-run pmd_trans_huge. Taking the
|
||||||
|
page_table_lock will prevent the huge pmd to be converted into a
|
||||||
|
regular pmd from under you (split_huge_page can run in parallel to the
|
||||||
|
pagetable walk). If the second pmd_trans_huge returns false, you
|
||||||
|
should just drop the page_table_lock and fallback to the old code as
|
||||||
|
before. Otherwise you should run pmd_trans_splitting on the pmd. In
|
||||||
|
case pmd_trans_splitting returns true, it means split_huge_page is
|
||||||
|
already in the middle of splitting the page. So if pmd_trans_splitting
|
||||||
|
returns true it's enough to drop the page_table_lock and call
|
||||||
|
wait_split_huge_page and then fallback the old code paths. You are
|
||||||
|
guaranteed by the time wait_split_huge_page returns, the pmd isn't
|
||||||
|
huge anymore. If pmd_trans_splitting returns false, you can proceed to
|
||||||
|
process the huge pmd and the hugepage natively. Once finished you can
|
||||||
|
drop the page_table_lock.
|
||||||
|
|
||||||
|
== compound_lock, get_user_pages and put_page ==
|
||||||
|
|
||||||
|
split_huge_page internally has to distribute the refcounts in the head
|
||||||
|
page to the tail pages before clearing all PG_head/tail bits from the
|
||||||
|
page structures. It can do that easily for refcounts taken by huge pmd
|
||||||
|
mappings. But the GUI API as created by hugetlbfs (that returns head
|
||||||
|
and tail pages if running get_user_pages on an address backed by any
|
||||||
|
hugepage), requires the refcount to be accounted on the tail pages and
|
||||||
|
not only in the head pages, if we want to be able to run
|
||||||
|
split_huge_page while there are gup pins established on any tail
|
||||||
|
page. Failure to be able to run split_huge_page if there's any gup pin
|
||||||
|
on any tail page, would mean having to split all hugepages upfront in
|
||||||
|
get_user_pages which is unacceptable as too many gup users are
|
||||||
|
performance critical and they must work natively on hugepages like
|
||||||
|
they work natively on hugetlbfs already (hugetlbfs is simpler because
|
||||||
|
hugetlbfs pages cannot be splitted so there wouldn't be requirement of
|
||||||
|
accounting the pins on the tail pages for hugetlbfs). If we wouldn't
|
||||||
|
account the gup refcounts on the tail pages during gup, we won't know
|
||||||
|
anymore which tail page is pinned by gup and which is not while we run
|
||||||
|
split_huge_page. But we still have to add the gup pin to the head page
|
||||||
|
too, to know when we can free the compound page in case it's never
|
||||||
|
splitted during its lifetime. That requires changing not just
|
||||||
|
get_page, but put_page as well so that when put_page runs on a tail
|
||||||
|
page (and only on a tail page) it will find its respective head page,
|
||||||
|
and then it will decrease the head page refcount in addition to the
|
||||||
|
tail page refcount. To obtain a head page reliably and to decrease its
|
||||||
|
refcount without race conditions, put_page has to serialize against
|
||||||
|
__split_huge_page_refcount using a special per-page lock called
|
||||||
|
compound_lock.
|
149
MAINTAINERS
149
MAINTAINERS
@@ -162,7 +162,7 @@ L: linux-serial@vger.kernel.org
|
|||||||
W: http://serial.sourceforge.net
|
W: http://serial.sourceforge.net
|
||||||
S: Maintained
|
S: Maintained
|
||||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/tty-2.6.git
|
T: git git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/tty-2.6.git
|
||||||
F: drivers/serial/8250*
|
F: drivers/tty/serial/8250*
|
||||||
F: include/linux/serial_8250.h
|
F: include/linux/serial_8250.h
|
||||||
|
|
||||||
8390 NETWORK DRIVERS [WD80x3/SMC-ELITE, SMC-ULTRA, NE2000, 3C503, etc.]
|
8390 NETWORK DRIVERS [WD80x3/SMC-ELITE, SMC-ULTRA, NE2000, 3C503, etc.]
|
||||||
@@ -624,11 +624,15 @@ M: Lennert Buytenhek <kernel@wantstofly.org>
|
|||||||
L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
|
L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
|
||||||
S: Maintained
|
S: Maintained
|
||||||
|
|
||||||
ARM/ATMEL AT91RM9200 ARM ARCHITECTURE
|
ARM/ATMEL AT91RM9200 AND AT91SAM ARM ARCHITECTURES
|
||||||
M: Andrew Victor <linux@maxim.org.za>
|
M: Andrew Victor <linux@maxim.org.za>
|
||||||
|
M: Nicolas Ferre <nicolas.ferre@atmel.com>
|
||||||
|
M: Jean-Christophe Plagniol-Villard <plagnioj@jcrosoft.com>
|
||||||
L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
|
L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
|
||||||
W: http://maxim.org.za/at91_26.html
|
W: http://maxim.org.za/at91_26.html
|
||||||
S: Maintained
|
W: http://www.linux4sam.org
|
||||||
|
S: Supported
|
||||||
|
F: arch/arm/mach-at91/
|
||||||
|
|
||||||
ARM/BCMRING ARM ARCHITECTURE
|
ARM/BCMRING ARM ARCHITECTURE
|
||||||
M: Jiandong Zheng <jdzheng@broadcom.com>
|
M: Jiandong Zheng <jdzheng@broadcom.com>
|
||||||
@@ -888,8 +892,8 @@ F: arch/arm/mach-msm/
|
|||||||
F: drivers/video/msm/
|
F: drivers/video/msm/
|
||||||
F: drivers/mmc/host/msm_sdcc.c
|
F: drivers/mmc/host/msm_sdcc.c
|
||||||
F: drivers/mmc/host/msm_sdcc.h
|
F: drivers/mmc/host/msm_sdcc.h
|
||||||
F: drivers/serial/msm_serial.h
|
F: drivers/tty/serial/msm_serial.h
|
||||||
F: drivers/serial/msm_serial.c
|
F: drivers/tty/serial/msm_serial.c
|
||||||
T: git git://codeaurora.org/quic/kernel/davidb/linux-msm.git
|
T: git git://codeaurora.org/quic/kernel/davidb/linux-msm.git
|
||||||
S: Maintained
|
S: Maintained
|
||||||
|
|
||||||
@@ -974,6 +978,8 @@ S: Maintained
|
|||||||
F: arch/arm/plat-samsung/
|
F: arch/arm/plat-samsung/
|
||||||
F: arch/arm/plat-s3c24xx/
|
F: arch/arm/plat-s3c24xx/
|
||||||
F: arch/arm/plat-s5p/
|
F: arch/arm/plat-s5p/
|
||||||
|
F: drivers/*/*s3c2410*
|
||||||
|
F: drivers/*/*/*s3c2410*
|
||||||
|
|
||||||
ARM/S3C2410 ARM ARCHITECTURE
|
ARM/S3C2410 ARM ARCHITECTURE
|
||||||
M: Ben Dooks <ben-linux@fluff.org>
|
M: Ben Dooks <ben-linux@fluff.org>
|
||||||
@@ -1256,7 +1262,7 @@ F: drivers/mmc/host/atmel-mci-regs.h
|
|||||||
ATMEL AT91 / AT32 SERIAL DRIVER
|
ATMEL AT91 / AT32 SERIAL DRIVER
|
||||||
M: Nicolas Ferre <nicolas.ferre@atmel.com>
|
M: Nicolas Ferre <nicolas.ferre@atmel.com>
|
||||||
S: Supported
|
S: Supported
|
||||||
F: drivers/serial/atmel_serial.c
|
F: drivers/tty/serial/atmel_serial.c
|
||||||
|
|
||||||
ATMEL LCDFB DRIVER
|
ATMEL LCDFB DRIVER
|
||||||
M: Nicolas Ferre <nicolas.ferre@atmel.com>
|
M: Nicolas Ferre <nicolas.ferre@atmel.com>
|
||||||
@@ -1412,7 +1418,7 @@ M: Sonic Zhang <sonic.zhang@analog.com>
|
|||||||
L: uclinux-dist-devel@blackfin.uclinux.org
|
L: uclinux-dist-devel@blackfin.uclinux.org
|
||||||
W: http://blackfin.uclinux.org
|
W: http://blackfin.uclinux.org
|
||||||
S: Supported
|
S: Supported
|
||||||
F: drivers/serial/bfin_5xx.c
|
F: drivers/tty/serial/bfin_5xx.c
|
||||||
|
|
||||||
BLACKFIN WATCHDOG DRIVER
|
BLACKFIN WATCHDOG DRIVER
|
||||||
M: Mike Frysinger <vapier.adi@gmail.com>
|
M: Mike Frysinger <vapier.adi@gmail.com>
|
||||||
@@ -1877,7 +1883,7 @@ L: linux-cris-kernel@axis.com
|
|||||||
W: http://developer.axis.com
|
W: http://developer.axis.com
|
||||||
S: Maintained
|
S: Maintained
|
||||||
F: arch/cris/
|
F: arch/cris/
|
||||||
F: drivers/serial/crisv10.*
|
F: drivers/tty/serial/crisv10.*
|
||||||
|
|
||||||
CRYPTO API
|
CRYPTO API
|
||||||
M: Herbert Xu <herbert@gondor.apana.org.au>
|
M: Herbert Xu <herbert@gondor.apana.org.au>
|
||||||
@@ -2216,7 +2222,7 @@ F: drivers/net/wan/dscc4.c
|
|||||||
DZ DECSTATION DZ11 SERIAL DRIVER
|
DZ DECSTATION DZ11 SERIAL DRIVER
|
||||||
M: "Maciej W. Rozycki" <macro@linux-mips.org>
|
M: "Maciej W. Rozycki" <macro@linux-mips.org>
|
||||||
S: Maintained
|
S: Maintained
|
||||||
F: drivers/serial/dz.*
|
F: drivers/tty/serial/dz.*
|
||||||
|
|
||||||
EATA-DMA SCSI DRIVER
|
EATA-DMA SCSI DRIVER
|
||||||
M: Michael Neuffer <mike@i-Connect.Net>
|
M: Michael Neuffer <mike@i-Connect.Net>
|
||||||
@@ -2643,7 +2649,7 @@ FREESCALE QUICC ENGINE UCC UART DRIVER
|
|||||||
M: Timur Tabi <timur@freescale.com>
|
M: Timur Tabi <timur@freescale.com>
|
||||||
L: linuxppc-dev@lists.ozlabs.org
|
L: linuxppc-dev@lists.ozlabs.org
|
||||||
S: Supported
|
S: Supported
|
||||||
F: drivers/serial/ucc_uart.c
|
F: drivers/tty/serial/ucc_uart.c
|
||||||
|
|
||||||
FREESCALE SOC SOUND DRIVERS
|
FREESCALE SOC SOUND DRIVERS
|
||||||
M: Timur Tabi <timur@freescale.com>
|
M: Timur Tabi <timur@freescale.com>
|
||||||
@@ -2768,6 +2774,15 @@ F: Documentation/isdn/README.gigaset
|
|||||||
F: drivers/isdn/gigaset/
|
F: drivers/isdn/gigaset/
|
||||||
F: include/linux/gigaset_dev.h
|
F: include/linux/gigaset_dev.h
|
||||||
|
|
||||||
|
GPIO SUBSYSTEM
|
||||||
|
M: Grant Likely <grant.likely@secretlab.ca>
|
||||||
|
L: linux-kernel@vger.kernel.org
|
||||||
|
S: Maintained
|
||||||
|
T: git git://git.secretlab.ca/git/linux-2.6.git
|
||||||
|
F: Documentation/gpio/gpio.txt
|
||||||
|
F: drivers/gpio/
|
||||||
|
F: include/linux/gpio*
|
||||||
|
|
||||||
GRETH 10/100/1G Ethernet MAC device driver
|
GRETH 10/100/1G Ethernet MAC device driver
|
||||||
M: Kristoffer Glembo <kristoffer@gaisler.com>
|
M: Kristoffer Glembo <kristoffer@gaisler.com>
|
||||||
L: netdev@vger.kernel.org
|
L: netdev@vger.kernel.org
|
||||||
@@ -3135,6 +3150,12 @@ S: Maintained
|
|||||||
F: net/ieee802154/
|
F: net/ieee802154/
|
||||||
F: drivers/ieee802154/
|
F: drivers/ieee802154/
|
||||||
|
|
||||||
|
IKANOS/ADI EAGLE ADSL USB DRIVER
|
||||||
|
M: Matthieu Castet <castet.matthieu@free.fr>
|
||||||
|
M: Stanislaw Gruszka <stf_xl@wp.pl>
|
||||||
|
S: Maintained
|
||||||
|
F: drivers/usb/atm/ueagle-atm.c
|
||||||
|
|
||||||
INTEGRITY MEASUREMENT ARCHITECTURE (IMA)
|
INTEGRITY MEASUREMENT ARCHITECTURE (IMA)
|
||||||
M: Mimi Zohar <zohar@us.ibm.com>
|
M: Mimi Zohar <zohar@us.ibm.com>
|
||||||
S: Supported
|
S: Supported
|
||||||
@@ -3146,7 +3167,7 @@ S: Orphan
|
|||||||
F: drivers/video/imsttfb.c
|
F: drivers/video/imsttfb.c
|
||||||
|
|
||||||
INFINIBAND SUBSYSTEM
|
INFINIBAND SUBSYSTEM
|
||||||
M: Roland Dreier <rolandd@cisco.com>
|
M: Roland Dreier <roland@kernel.org>
|
||||||
M: Sean Hefty <sean.hefty@intel.com>
|
M: Sean Hefty <sean.hefty@intel.com>
|
||||||
M: Hal Rosenstock <hal.rosenstock@gmail.com>
|
M: Hal Rosenstock <hal.rosenstock@gmail.com>
|
||||||
L: linux-rdma@vger.kernel.org
|
L: linux-rdma@vger.kernel.org
|
||||||
@@ -3323,7 +3344,6 @@ F: drivers/net/wimax/i2400m/
|
|||||||
F: include/linux/wimax/i2400m.h
|
F: include/linux/wimax/i2400m.h
|
||||||
|
|
||||||
INTEL WIRELESS WIFI LINK (iwlwifi)
|
INTEL WIRELESS WIFI LINK (iwlwifi)
|
||||||
M: Reinette Chatre <reinette.chatre@intel.com>
|
|
||||||
M: Wey-Yi Guy <wey-yi.w.guy@intel.com>
|
M: Wey-Yi Guy <wey-yi.w.guy@intel.com>
|
||||||
M: Intel Linux Wireless <ilw@linux.intel.com>
|
M: Intel Linux Wireless <ilw@linux.intel.com>
|
||||||
L: linux-wireless@vger.kernel.org
|
L: linux-wireless@vger.kernel.org
|
||||||
@@ -3350,7 +3370,7 @@ IOC3 SERIAL DRIVER
|
|||||||
M: Pat Gefre <pfg@sgi.com>
|
M: Pat Gefre <pfg@sgi.com>
|
||||||
L: linux-serial@vger.kernel.org
|
L: linux-serial@vger.kernel.org
|
||||||
S: Maintained
|
S: Maintained
|
||||||
F: drivers/serial/ioc3_serial.c
|
F: drivers/tty/serial/ioc3_serial.c
|
||||||
|
|
||||||
IP MASQUERADING
|
IP MASQUERADING
|
||||||
M: Juanjo Ciarlante <jjciarla@raiz.uncu.edu.ar>
|
M: Juanjo Ciarlante <jjciarla@raiz.uncu.edu.ar>
|
||||||
@@ -3528,7 +3548,7 @@ JSM Neo PCI based serial card
|
|||||||
M: Breno Leitao <leitao@linux.vnet.ibm.com>
|
M: Breno Leitao <leitao@linux.vnet.ibm.com>
|
||||||
L: linux-serial@vger.kernel.org
|
L: linux-serial@vger.kernel.org
|
||||||
S: Maintained
|
S: Maintained
|
||||||
F: drivers/serial/jsm/
|
F: drivers/tty/serial/jsm/
|
||||||
|
|
||||||
K10TEMP HARDWARE MONITORING DRIVER
|
K10TEMP HARDWARE MONITORING DRIVER
|
||||||
M: Clemens Ladisch <clemens@ladisch.de>
|
M: Clemens Ladisch <clemens@ladisch.de>
|
||||||
@@ -3671,6 +3691,28 @@ F: include/linux/key-type.h
|
|||||||
F: include/keys/
|
F: include/keys/
|
||||||
F: security/keys/
|
F: security/keys/
|
||||||
|
|
||||||
|
KEYS-TRUSTED
|
||||||
|
M: David Safford <safford@watson.ibm.com>
|
||||||
|
M: Mimi Zohar <zohar@us.ibm.com>
|
||||||
|
L: linux-security-module@vger.kernel.org
|
||||||
|
L: keyrings@linux-nfs.org
|
||||||
|
S: Supported
|
||||||
|
F: Documentation/keys-trusted-encrypted.txt
|
||||||
|
F: include/keys/trusted-type.h
|
||||||
|
F: security/keys/trusted.c
|
||||||
|
F: security/keys/trusted.h
|
||||||
|
|
||||||
|
KEYS-ENCRYPTED
|
||||||
|
M: Mimi Zohar <zohar@us.ibm.com>
|
||||||
|
M: David Safford <safford@watson.ibm.com>
|
||||||
|
L: linux-security-module@vger.kernel.org
|
||||||
|
L: keyrings@linux-nfs.org
|
||||||
|
S: Supported
|
||||||
|
F: Documentation/keys-trusted-encrypted.txt
|
||||||
|
F: include/keys/encrypted-type.h
|
||||||
|
F: security/keys/encrypted.c
|
||||||
|
F: security/keys/encrypted.h
|
||||||
|
|
||||||
KGDB / KDB /debug_core
|
KGDB / KDB /debug_core
|
||||||
M: Jason Wessel <jason.wessel@windriver.com>
|
M: Jason Wessel <jason.wessel@windriver.com>
|
||||||
W: http://kgdb.wiki.kernel.org/
|
W: http://kgdb.wiki.kernel.org/
|
||||||
@@ -3678,14 +3720,14 @@ L: kgdb-bugreport@lists.sourceforge.net
|
|||||||
S: Maintained
|
S: Maintained
|
||||||
F: Documentation/DocBook/kgdb.tmpl
|
F: Documentation/DocBook/kgdb.tmpl
|
||||||
F: drivers/misc/kgdbts.c
|
F: drivers/misc/kgdbts.c
|
||||||
F: drivers/serial/kgdboc.c
|
F: drivers/tty/serial/kgdboc.c
|
||||||
F: include/linux/kdb.h
|
F: include/linux/kdb.h
|
||||||
F: include/linux/kgdb.h
|
F: include/linux/kgdb.h
|
||||||
F: kernel/debug/
|
F: kernel/debug/
|
||||||
|
|
||||||
KMEMCHECK
|
KMEMCHECK
|
||||||
M: Vegard Nossum <vegardno@ifi.uio.no>
|
M: Vegard Nossum <vegardno@ifi.uio.no>
|
||||||
M: Pekka Enberg <penberg@cs.helsinki.fi>
|
M: Pekka Enberg <penberg@kernel.org>
|
||||||
S: Maintained
|
S: Maintained
|
||||||
F: Documentation/kmemcheck.txt
|
F: Documentation/kmemcheck.txt
|
||||||
F: arch/x86/include/asm/kmemcheck.h
|
F: arch/x86/include/asm/kmemcheck.h
|
||||||
@@ -4559,7 +4601,7 @@ F: drivers/i2c/busses/i2c-ocores.c
|
|||||||
|
|
||||||
OPEN FIRMWARE AND FLATTENED DEVICE TREE
|
OPEN FIRMWARE AND FLATTENED DEVICE TREE
|
||||||
M: Grant Likely <grant.likely@secretlab.ca>
|
M: Grant Likely <grant.likely@secretlab.ca>
|
||||||
L: devicetree-discuss@lists.ozlabs.org
|
L: devicetree-discuss@lists.ozlabs.org (moderated for non-subscribers)
|
||||||
W: http://fdt.secretlab.ca
|
W: http://fdt.secretlab.ca
|
||||||
T: git git://git.secretlab.ca/git/linux-2.6.git
|
T: git git://git.secretlab.ca/git/linux-2.6.git
|
||||||
S: Maintained
|
S: Maintained
|
||||||
@@ -5273,8 +5315,7 @@ S: Supported
|
|||||||
F: drivers/s390/net/
|
F: drivers/s390/net/
|
||||||
|
|
||||||
S390 ZCRYPT DRIVER
|
S390 ZCRYPT DRIVER
|
||||||
M: Felix Beck <felix.beck@de.ibm.com>
|
M: Holger Dengler <hd@linux.vnet.ibm.com>
|
||||||
M: Ralph Wuerthner <ralph.wuerthner@de.ibm.com>
|
|
||||||
M: linux390@de.ibm.com
|
M: linux390@de.ibm.com
|
||||||
L: linux-s390@vger.kernel.org
|
L: linux-s390@vger.kernel.org
|
||||||
W: http://www.ibm.com/developerworks/linux/linux390/
|
W: http://www.ibm.com/developerworks/linux/linux390/
|
||||||
@@ -5520,12 +5561,11 @@ S: Supported
|
|||||||
F: drivers/scsi/be2iscsi/
|
F: drivers/scsi/be2iscsi/
|
||||||
|
|
||||||
SERVER ENGINES 10Gbps NIC - BladeEngine 2 DRIVER
|
SERVER ENGINES 10Gbps NIC - BladeEngine 2 DRIVER
|
||||||
M: Sathya Perla <sathyap@serverengines.com>
|
M: Sathya Perla <sathya.perla@emulex.com>
|
||||||
M: Subbu Seetharaman <subbus@serverengines.com>
|
M: Subbu Seetharaman <subbu.seetharaman@emulex.com>
|
||||||
M: Sarveshwar Bandi <sarveshwarb@serverengines.com>
|
M: Ajit Khaparde <ajit.khaparde@emulex.com>
|
||||||
M: Ajit Khaparde <ajitk@serverengines.com>
|
|
||||||
L: netdev@vger.kernel.org
|
L: netdev@vger.kernel.org
|
||||||
W: http://www.serverengines.com
|
W: http://www.emulex.com
|
||||||
S: Supported
|
S: Supported
|
||||||
F: drivers/net/benet/
|
F: drivers/net/benet/
|
||||||
|
|
||||||
@@ -5547,7 +5587,7 @@ M: Pat Gefre <pfg@sgi.com>
|
|||||||
L: linux-ia64@vger.kernel.org
|
L: linux-ia64@vger.kernel.org
|
||||||
S: Supported
|
S: Supported
|
||||||
F: Documentation/ia64/serial.txt
|
F: Documentation/ia64/serial.txt
|
||||||
F: drivers/serial/ioc?_serial.c
|
F: drivers/tty/serial/ioc?_serial.c
|
||||||
F: include/linux/ioc?.h
|
F: include/linux/ioc?.h
|
||||||
|
|
||||||
SGI VISUAL WORKSTATION 320 AND 540
|
SGI VISUAL WORKSTATION 320 AND 540
|
||||||
@@ -5569,7 +5609,7 @@ L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
|
|||||||
S: Maintained
|
S: Maintained
|
||||||
F: Documentation/arm/Sharp-LH/ADC-LH7-Touchscreen
|
F: Documentation/arm/Sharp-LH/ADC-LH7-Touchscreen
|
||||||
F: arch/arm/mach-lh7a40x/
|
F: arch/arm/mach-lh7a40x/
|
||||||
F: drivers/serial/serial_lh7a40x.c
|
F: drivers/tty/serial/serial_lh7a40x.c
|
||||||
F: drivers/usb/gadget/lh7a40*
|
F: drivers/usb/gadget/lh7a40*
|
||||||
F: drivers/usb/host/ohci-lh7a40*
|
F: drivers/usb/host/ohci-lh7a40*
|
||||||
|
|
||||||
@@ -5585,18 +5625,20 @@ F: include/linux/sfi*.h
|
|||||||
|
|
||||||
SIMTEC EB110ATX (Chalice CATS)
|
SIMTEC EB110ATX (Chalice CATS)
|
||||||
P: Ben Dooks
|
P: Ben Dooks
|
||||||
M: Vincent Sanders <support@simtec.co.uk>
|
P: Vincent Sanders <vince@simtec.co.uk>
|
||||||
|
M: Simtec Linux Team <linux@simtec.co.uk>
|
||||||
W: http://www.simtec.co.uk/products/EB110ATX/
|
W: http://www.simtec.co.uk/products/EB110ATX/
|
||||||
S: Supported
|
S: Supported
|
||||||
|
|
||||||
SIMTEC EB2410ITX (BAST)
|
SIMTEC EB2410ITX (BAST)
|
||||||
P: Ben Dooks
|
P: Ben Dooks
|
||||||
M: Vincent Sanders <support@simtec.co.uk>
|
P: Vincent Sanders <vince@simtec.co.uk>
|
||||||
|
M: Simtec Linux Team <linux@simtec.co.uk>
|
||||||
W: http://www.simtec.co.uk/products/EB2410ITX/
|
W: http://www.simtec.co.uk/products/EB2410ITX/
|
||||||
S: Supported
|
S: Supported
|
||||||
F: arch/arm/mach-s3c2410/
|
F: arch/arm/mach-s3c2410/mach-bast.c
|
||||||
F: drivers/*/*s3c2410*
|
F: arch/arm/mach-s3c2410/bast-ide.c
|
||||||
F: drivers/*/*/*s3c2410*
|
F: arch/arm/mach-s3c2410/bast-irq.c
|
||||||
|
|
||||||
TI DAVINCI MACHINE SUPPORT
|
TI DAVINCI MACHINE SUPPORT
|
||||||
M: Kevin Hilman <khilman@deeprootsystems.com>
|
M: Kevin Hilman <khilman@deeprootsystems.com>
|
||||||
@@ -5648,7 +5690,7 @@ F: drivers/net/sky2.*
|
|||||||
|
|
||||||
SLAB ALLOCATOR
|
SLAB ALLOCATOR
|
||||||
M: Christoph Lameter <cl@linux-foundation.org>
|
M: Christoph Lameter <cl@linux-foundation.org>
|
||||||
M: Pekka Enberg <penberg@cs.helsinki.fi>
|
M: Pekka Enberg <penberg@kernel.org>
|
||||||
M: Matt Mackall <mpm@selenic.com>
|
M: Matt Mackall <mpm@selenic.com>
|
||||||
L: linux-mm@kvack.org
|
L: linux-mm@kvack.org
|
||||||
S: Maintained
|
S: Maintained
|
||||||
@@ -5789,14 +5831,14 @@ L: sparclinux@vger.kernel.org
|
|||||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/davem/sparc-2.6.git
|
T: git git://git.kernel.org/pub/scm/linux/kernel/git/davem/sparc-2.6.git
|
||||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/davem/sparc-next-2.6.git
|
T: git git://git.kernel.org/pub/scm/linux/kernel/git/davem/sparc-next-2.6.git
|
||||||
S: Maintained
|
S: Maintained
|
||||||
F: drivers/serial/suncore.c
|
F: drivers/tty/serial/suncore.c
|
||||||
F: drivers/serial/suncore.h
|
F: drivers/tty/serial/suncore.h
|
||||||
F: drivers/serial/sunhv.c
|
F: drivers/tty/serial/sunhv.c
|
||||||
F: drivers/serial/sunsab.c
|
F: drivers/tty/serial/sunsab.c
|
||||||
F: drivers/serial/sunsab.h
|
F: drivers/tty/serial/sunsab.h
|
||||||
F: drivers/serial/sunsu.c
|
F: drivers/tty/serial/sunsu.c
|
||||||
F: drivers/serial/sunzilog.c
|
F: drivers/tty/serial/sunzilog.c
|
||||||
F: drivers/serial/sunzilog.h
|
F: drivers/tty/serial/sunzilog.h
|
||||||
|
|
||||||
SPEAR PLATFORM SUPPORT
|
SPEAR PLATFORM SUPPORT
|
||||||
M: Viresh Kumar <viresh.kumar@st.com>
|
M: Viresh Kumar <viresh.kumar@st.com>
|
||||||
@@ -6126,8 +6168,8 @@ TTY LAYER
|
|||||||
M: Greg Kroah-Hartman <gregkh@suse.de>
|
M: Greg Kroah-Hartman <gregkh@suse.de>
|
||||||
S: Maintained
|
S: Maintained
|
||||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/tty-2.6.git
|
T: git git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/tty-2.6.git
|
||||||
F: drivers/char/tty_*
|
F: drivers/tty/*
|
||||||
F: drivers/serial/serial_core.c
|
F: drivers/tty/serial/serial_core.c
|
||||||
F: include/linux/serial_core.h
|
F: include/linux/serial_core.h
|
||||||
F: include/linux/serial.h
|
F: include/linux/serial.h
|
||||||
F: include/linux/tty.h
|
F: include/linux/tty.h
|
||||||
@@ -6571,6 +6613,16 @@ S: Maintained
|
|||||||
F: drivers/char/virtio_console.c
|
F: drivers/char/virtio_console.c
|
||||||
F: include/linux/virtio_console.h
|
F: include/linux/virtio_console.h
|
||||||
|
|
||||||
|
VIRTIO CORE, NET AND BLOCK DRIVERS
|
||||||
|
M: Rusty Russell <rusty@rustcorp.com.au>
|
||||||
|
M: "Michael S. Tsirkin" <mst@redhat.com>
|
||||||
|
L: virtualization@lists.linux-foundation.org
|
||||||
|
S: Maintained
|
||||||
|
F: drivers/virtio/
|
||||||
|
F: drivers/net/virtio_net.c
|
||||||
|
F: drivers/block/virtio_blk.c
|
||||||
|
F: include/linux/virtio_*.h
|
||||||
|
|
||||||
VIRTIO HOST (VHOST)
|
VIRTIO HOST (VHOST)
|
||||||
M: "Michael S. Tsirkin" <mst@redhat.com>
|
M: "Michael S. Tsirkin" <mst@redhat.com>
|
||||||
L: kvm@vger.kernel.org
|
L: kvm@vger.kernel.org
|
||||||
@@ -6593,13 +6645,12 @@ F: Documentation/i2c/busses/i2c-viapro
|
|||||||
F: drivers/i2c/busses/i2c-viapro.c
|
F: drivers/i2c/busses/i2c-viapro.c
|
||||||
|
|
||||||
VIA SD/MMC CARD CONTROLLER DRIVER
|
VIA SD/MMC CARD CONTROLLER DRIVER
|
||||||
M: Joseph Chan <JosephChan@via.com.tw>
|
M: Bruce Chang <brucechang@via.com.tw>
|
||||||
M: Harald Welte <HaraldWelte@viatech.com>
|
M: Harald Welte <HaraldWelte@viatech.com>
|
||||||
S: Maintained
|
S: Maintained
|
||||||
F: drivers/mmc/host/via-sdmmc.c
|
F: drivers/mmc/host/via-sdmmc.c
|
||||||
|
|
||||||
VIA UNICHROME(PRO)/CHROME9 FRAMEBUFFER DRIVER
|
VIA UNICHROME(PRO)/CHROME9 FRAMEBUFFER DRIVER
|
||||||
M: Joseph Chan <JosephChan@via.com.tw>
|
|
||||||
M: Florian Tobias Schandinat <FlorianSchandinat@gmx.de>
|
M: Florian Tobias Schandinat <FlorianSchandinat@gmx.de>
|
||||||
L: linux-fbdev@vger.kernel.org
|
L: linux-fbdev@vger.kernel.org
|
||||||
S: Maintained
|
S: Maintained
|
||||||
@@ -6745,12 +6796,12 @@ S: Maintained
|
|||||||
F: drivers/net/wireless/wl1251/*
|
F: drivers/net/wireless/wl1251/*
|
||||||
|
|
||||||
WL1271 WIRELESS DRIVER
|
WL1271 WIRELESS DRIVER
|
||||||
M: Luciano Coelho <luciano.coelho@nokia.com>
|
M: Luciano Coelho <coelho@ti.com>
|
||||||
L: linux-wireless@vger.kernel.org
|
L: linux-wireless@vger.kernel.org
|
||||||
W: http://wireless.kernel.org
|
W: http://wireless.kernel.org/en/users/Drivers/wl12xx
|
||||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/luca/wl12xx.git
|
T: git git://git.kernel.org/pub/scm/linux/kernel/git/luca/wl12xx.git
|
||||||
S: Maintained
|
S: Maintained
|
||||||
F: drivers/net/wireless/wl12xx/wl1271*
|
F: drivers/net/wireless/wl12xx/
|
||||||
F: include/linux/wl12xx.h
|
F: include/linux/wl12xx.h
|
||||||
|
|
||||||
WL3501 WIRELESS PCMCIA CARD DRIVER
|
WL3501 WIRELESS PCMCIA CARD DRIVER
|
||||||
@@ -6873,7 +6924,7 @@ XILINX UARTLITE SERIAL DRIVER
|
|||||||
M: Peter Korsgaard <jacmet@sunsite.dk>
|
M: Peter Korsgaard <jacmet@sunsite.dk>
|
||||||
L: linux-serial@vger.kernel.org
|
L: linux-serial@vger.kernel.org
|
||||||
S: Maintained
|
S: Maintained
|
||||||
F: drivers/serial/uartlite.c
|
F: drivers/tty/serial/uartlite.c
|
||||||
|
|
||||||
YAM DRIVER FOR AX.25
|
YAM DRIVER FOR AX.25
|
||||||
M: Jean-Paul Roubelat <jpr@f6fbb.org>
|
M: Jean-Paul Roubelat <jpr@f6fbb.org>
|
||||||
@@ -6919,7 +6970,7 @@ F: drivers/media/video/zoran/
|
|||||||
ZS DECSTATION Z85C30 SERIAL DRIVER
|
ZS DECSTATION Z85C30 SERIAL DRIVER
|
||||||
M: "Maciej W. Rozycki" <macro@linux-mips.org>
|
M: "Maciej W. Rozycki" <macro@linux-mips.org>
|
||||||
S: Maintained
|
S: Maintained
|
||||||
F: drivers/serial/zs.*
|
F: drivers/tty/serial/zs.*
|
||||||
|
|
||||||
GRE DEMULTIPLEXER DRIVER
|
GRE DEMULTIPLEXER DRIVER
|
||||||
M: Dmitry Kozlov <xeb@mail.ru>
|
M: Dmitry Kozlov <xeb@mail.ru>
|
||||||
|
4
Makefile
4
Makefile
@@ -1,7 +1,7 @@
|
|||||||
VERSION = 2
|
VERSION = 2
|
||||||
PATCHLEVEL = 6
|
PATCHLEVEL = 6
|
||||||
SUBLEVEL = 37
|
SUBLEVEL = 38
|
||||||
EXTRAVERSION =
|
EXTRAVERSION = -rc4
|
||||||
NAME = Flesh-Eating Bats with Fangs
|
NAME = Flesh-Eating Bats with Fangs
|
||||||
|
|
||||||
# *DOCUMENTATION*
|
# *DOCUMENTATION*
|
||||||
|
@@ -8,6 +8,9 @@ config ALPHA
|
|||||||
select HAVE_IRQ_WORK
|
select HAVE_IRQ_WORK
|
||||||
select HAVE_PERF_EVENTS
|
select HAVE_PERF_EVENTS
|
||||||
select HAVE_DMA_ATTRS
|
select HAVE_DMA_ATTRS
|
||||||
|
select HAVE_GENERIC_HARDIRQS
|
||||||
|
select GENERIC_IRQ_PROBE
|
||||||
|
select AUTO_IRQ_AFFINITY if SMP
|
||||||
help
|
help
|
||||||
The Alpha is a 64-bit general-purpose processor designed and
|
The Alpha is a 64-bit general-purpose processor designed and
|
||||||
marketed by the Digital Equipment Corporation of blessed memory,
|
marketed by the Digital Equipment Corporation of blessed memory,
|
||||||
@@ -68,19 +71,6 @@ config GENERIC_IOMAP
|
|||||||
bool
|
bool
|
||||||
default n
|
default n
|
||||||
|
|
||||||
config GENERIC_HARDIRQS
|
|
||||||
bool
|
|
||||||
default y
|
|
||||||
|
|
||||||
config GENERIC_IRQ_PROBE
|
|
||||||
bool
|
|
||||||
default y
|
|
||||||
|
|
||||||
config AUTO_IRQ_AFFINITY
|
|
||||||
bool
|
|
||||||
depends on SMP
|
|
||||||
default y
|
|
||||||
|
|
||||||
source "init/Kconfig"
|
source "init/Kconfig"
|
||||||
source "kernel/Kconfig.freezer"
|
source "kernel/Kconfig.freezer"
|
||||||
|
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user