Merge branch 'master' of /repos/git/net-next-2.6
This commit is contained in:
4
CREDITS
4
CREDITS
@@ -2811,8 +2811,8 @@ D: CDROM driver "sonycd535" (Sony CDU-535/531)
|
|||||||
N: Stelian Pop
|
N: Stelian Pop
|
||||||
E: stelian@popies.net
|
E: stelian@popies.net
|
||||||
P: 1024D/EDBB6147 7B36 0E07 04BC 11DC A7A0 D3F7 7185 9E7A EDBB 6147
|
P: 1024D/EDBB6147 7B36 0E07 04BC 11DC A7A0 D3F7 7185 9E7A EDBB 6147
|
||||||
D: sonypi, meye drivers, mct_u232 usb serial hacks
|
D: random kernel hacks
|
||||||
S: Paris, France
|
S: Paimpont, France
|
||||||
|
|
||||||
N: Pete Popov
|
N: Pete Popov
|
||||||
E: pete_popov@yahoo.com
|
E: pete_popov@yahoo.com
|
||||||
|
|||||||
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.
|
||||||
@@ -26,3 +26,12 @@ Description:
|
|||||||
scheduler is chosen. Trigger specific parameters can appear in
|
scheduler is chosen. Trigger specific parameters can appear in
|
||||||
/sys/class/leds/<led> once a given trigger is selected.
|
/sys/class/leds/<led> once a given trigger is selected.
|
||||||
|
|
||||||
|
What: /sys/class/leds/<led>/inverted
|
||||||
|
Date: January 2011
|
||||||
|
KernelVersion: 2.6.38
|
||||||
|
Contact: Richard Purdie <rpurdie@rpsys.net>
|
||||||
|
Description:
|
||||||
|
Invert the LED on/off state. This parameter is specific to
|
||||||
|
gpio and backlight triggers. In case of the backlight trigger,
|
||||||
|
it is usefull when driving a LED which is intended to indicate
|
||||||
|
a device in a standby like state.
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
What: /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/actual_dpi
|
What: /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/<hid-bus>:<vendor-id>:<product-id>.<num>/kone/roccatkone<minor>/actual_dpi
|
||||||
Date: March 2010
|
Date: March 2010
|
||||||
Contact: Stefan Achatz <erazor_de@users.sourceforge.net>
|
Contact: Stefan Achatz <erazor_de@users.sourceforge.net>
|
||||||
Description: It is possible to switch the dpi setting of the mouse with the
|
Description: It is possible to switch the dpi setting of the mouse with the
|
||||||
@@ -17,13 +17,13 @@ Description: It is possible to switch the dpi setting of the mouse with the
|
|||||||
|
|
||||||
This file is readonly.
|
This file is readonly.
|
||||||
|
|
||||||
What: /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/actual_profile
|
What: /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/<hid-bus>:<vendor-id>:<product-id>.<num>/kone/roccatkone<minor>/actual_profile
|
||||||
Date: March 2010
|
Date: March 2010
|
||||||
Contact: Stefan Achatz <erazor_de@users.sourceforge.net>
|
Contact: Stefan Achatz <erazor_de@users.sourceforge.net>
|
||||||
Description: When read, this file returns the number of the actual profile.
|
Description: When read, this file returns the number of the actual profile.
|
||||||
This file is readonly.
|
This file is readonly.
|
||||||
|
|
||||||
What: /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/firmware_version
|
What: /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/<hid-bus>:<vendor-id>:<product-id>.<num>/kone/roccatkone<minor>/firmware_version
|
||||||
Date: March 2010
|
Date: March 2010
|
||||||
Contact: Stefan Achatz <erazor_de@users.sourceforge.net>
|
Contact: Stefan Achatz <erazor_de@users.sourceforge.net>
|
||||||
Description: When read, this file returns the raw integer version number of the
|
Description: When read, this file returns the raw integer version number of the
|
||||||
@@ -33,7 +33,7 @@ Description: When read, this file returns the raw integer version number of the
|
|||||||
left. E.g. a returned value of 138 means 1.38
|
left. E.g. a returned value of 138 means 1.38
|
||||||
This file is readonly.
|
This file is readonly.
|
||||||
|
|
||||||
What: /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/profile[1-5]
|
What: /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/<hid-bus>:<vendor-id>:<product-id>.<num>/kone/roccatkone<minor>/profile[1-5]
|
||||||
Date: March 2010
|
Date: March 2010
|
||||||
Contact: Stefan Achatz <erazor_de@users.sourceforge.net>
|
Contact: Stefan Achatz <erazor_de@users.sourceforge.net>
|
||||||
Description: The mouse can store 5 profiles which can be switched by the
|
Description: The mouse can store 5 profiles which can be switched by the
|
||||||
@@ -48,7 +48,7 @@ Description: The mouse can store 5 profiles which can be switched by the
|
|||||||
stored in the profile doesn't need to fit the number of the
|
stored in the profile doesn't need to fit the number of the
|
||||||
store.
|
store.
|
||||||
|
|
||||||
What: /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/settings
|
What: /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/<hid-bus>:<vendor-id>:<product-id>.<num>/kone/roccatkone<minor>/settings
|
||||||
Date: March 2010
|
Date: March 2010
|
||||||
Contact: Stefan Achatz <erazor_de@users.sourceforge.net>
|
Contact: Stefan Achatz <erazor_de@users.sourceforge.net>
|
||||||
Description: When read, this file returns the settings stored in the mouse.
|
Description: When read, this file returns the settings stored in the mouse.
|
||||||
@@ -58,7 +58,7 @@ Description: When read, this file returns the settings stored in the mouse.
|
|||||||
The data has to be 36 bytes long. The mouse will reject invalid
|
The data has to be 36 bytes long. The mouse will reject invalid
|
||||||
data.
|
data.
|
||||||
|
|
||||||
What: /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/startup_profile
|
What: /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/<hid-bus>:<vendor-id>:<product-id>.<num>/kone/roccatkone<minor>/startup_profile
|
||||||
Date: March 2010
|
Date: March 2010
|
||||||
Contact: Stefan Achatz <erazor_de@users.sourceforge.net>
|
Contact: Stefan Achatz <erazor_de@users.sourceforge.net>
|
||||||
Description: The integer value of this attribute ranges from 1 to 5.
|
Description: The integer value of this attribute ranges from 1 to 5.
|
||||||
@@ -67,7 +67,7 @@ Description: The integer value of this attribute ranges from 1 to 5.
|
|||||||
When written, this file sets the number of the startup profile
|
When written, this file sets the number of the startup profile
|
||||||
and the mouse activates this profile immediately.
|
and the mouse activates this profile immediately.
|
||||||
|
|
||||||
What: /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/tcu
|
What: /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/<hid-bus>:<vendor-id>:<product-id>.<num>/kone/roccatkone<minor>/tcu
|
||||||
Date: March 2010
|
Date: March 2010
|
||||||
Contact: Stefan Achatz <erazor_de@users.sourceforge.net>
|
Contact: Stefan Achatz <erazor_de@users.sourceforge.net>
|
||||||
Description: The mouse has a "Tracking Control Unit" which lets the user
|
Description: The mouse has a "Tracking Control Unit" which lets the user
|
||||||
@@ -78,7 +78,7 @@ Description: The mouse has a "Tracking Control Unit" which lets the user
|
|||||||
Writing 1 in this file will start the calibration which takes
|
Writing 1 in this file will start the calibration which takes
|
||||||
around 6 seconds to complete and activates the TCU.
|
around 6 seconds to complete and activates the TCU.
|
||||||
|
|
||||||
What: /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/weight
|
What: /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/<hid-bus>:<vendor-id>:<product-id>.<num>/kone/roccatkone<minor>/weight
|
||||||
Date: March 2010
|
Date: March 2010
|
||||||
Contact: Stefan Achatz <erazor_de@users.sourceforge.net>
|
Contact: Stefan Achatz <erazor_de@users.sourceforge.net>
|
||||||
Description: The mouse can be equipped with one of four supplied weights
|
Description: The mouse can be equipped with one of four supplied weights
|
||||||
|
|||||||
108
Documentation/ABI/testing/sysfs-driver-hid-roccat-koneplus
Normal file
108
Documentation/ABI/testing/sysfs-driver-hid-roccat-koneplus
Normal file
@@ -0,0 +1,108 @@
|
|||||||
|
What: /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/<hid-bus>:<vendor-id>:<product-id>.<num>/koneplus/roccatkoneplus<minor>/actual_profile
|
||||||
|
Date: October 2010
|
||||||
|
Contact: Stefan Achatz <erazor_de@users.sourceforge.net>
|
||||||
|
Description: When read, this file returns the number of the actual profile in
|
||||||
|
range 0-4.
|
||||||
|
This file is readonly.
|
||||||
|
|
||||||
|
What: /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/<hid-bus>:<vendor-id>:<product-id>.<num>/koneplus/roccatkoneplus<minor>/firmware_version
|
||||||
|
Date: October 2010
|
||||||
|
Contact: Stefan Achatz <erazor_de@users.sourceforge.net>
|
||||||
|
Description: When read, this file returns the raw integer version number of the
|
||||||
|
firmware reported by the mouse. Using the integer value eases
|
||||||
|
further usage in other programs. To receive the real version
|
||||||
|
number the decimal point has to be shifted 2 positions to the
|
||||||
|
left. E.g. a returned value of 121 means 1.21
|
||||||
|
This file is readonly.
|
||||||
|
|
||||||
|
What: /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/<hid-bus>:<vendor-id>:<product-id>.<num>/koneplus/roccatkoneplus<minor>/macro
|
||||||
|
Date: October 2010
|
||||||
|
Contact: Stefan Achatz <erazor_de@users.sourceforge.net>
|
||||||
|
Description: The mouse can store a macro with max 500 key/button strokes
|
||||||
|
internally.
|
||||||
|
When written, this file lets one set the sequence for a specific
|
||||||
|
button for a specific profile. Button and profile numbers are
|
||||||
|
included in written data. The data has to be 2082 bytes long.
|
||||||
|
This file is writeonly.
|
||||||
|
|
||||||
|
What: /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/<hid-bus>:<vendor-id>:<product-id>.<num>/koneplus/roccatkoneplus<minor>/profile_buttons
|
||||||
|
Date: August 2010
|
||||||
|
Contact: Stefan Achatz <erazor_de@users.sourceforge.net>
|
||||||
|
Description: The mouse can store 5 profiles which can be switched by the
|
||||||
|
press of a button. A profile is split in settings and buttons.
|
||||||
|
profile_buttons holds informations about button layout.
|
||||||
|
When written, this file lets one write the respective profile
|
||||||
|
buttons back to the mouse. The data has to be 77 bytes long.
|
||||||
|
The mouse will reject invalid data.
|
||||||
|
Which profile to write is determined by the profile number
|
||||||
|
contained in the data.
|
||||||
|
This file is writeonly.
|
||||||
|
|
||||||
|
What: /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/<hid-bus>:<vendor-id>:<product-id>.<num>/koneplus/roccatkoneplus<minor>/profile[1-5]_buttons
|
||||||
|
Date: August 2010
|
||||||
|
Contact: Stefan Achatz <erazor_de@users.sourceforge.net>
|
||||||
|
Description: The mouse can store 5 profiles which can be switched by the
|
||||||
|
press of a button. A profile is split in settings and buttons.
|
||||||
|
profile_buttons holds informations about button layout.
|
||||||
|
When read, these files return the respective profile buttons.
|
||||||
|
The returned data is 77 bytes in size.
|
||||||
|
This file is readonly.
|
||||||
|
|
||||||
|
What: /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/<hid-bus>:<vendor-id>:<product-id>.<num>/koneplus/roccatkoneplus<minor>/profile_settings
|
||||||
|
Date: October 2010
|
||||||
|
Contact: Stefan Achatz <erazor_de@users.sourceforge.net>
|
||||||
|
Description: The mouse can store 5 profiles which can be switched by the
|
||||||
|
press of a button. A profile is split in settings and buttons.
|
||||||
|
profile_settings holds informations like resolution, sensitivity
|
||||||
|
and light effects.
|
||||||
|
When written, this file lets one write the respective profile
|
||||||
|
settings back to the mouse. The data has to be 43 bytes long.
|
||||||
|
The mouse will reject invalid data.
|
||||||
|
Which profile to write is determined by the profile number
|
||||||
|
contained in the data.
|
||||||
|
This file is writeonly.
|
||||||
|
|
||||||
|
What: /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/<hid-bus>:<vendor-id>:<product-id>.<num>/koneplus/roccatkoneplus<minor>/profile[1-5]_settings
|
||||||
|
Date: August 2010
|
||||||
|
Contact: Stefan Achatz <erazor_de@users.sourceforge.net>
|
||||||
|
Description: The mouse can store 5 profiles which can be switched by the
|
||||||
|
press of a button. A profile is split in settings and buttons.
|
||||||
|
profile_settings holds informations like resolution, sensitivity
|
||||||
|
and light effects.
|
||||||
|
When read, these files return the respective profile settings.
|
||||||
|
The returned data is 43 bytes in size.
|
||||||
|
This file is readonly.
|
||||||
|
|
||||||
|
What: /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/<hid-bus>:<vendor-id>:<product-id>.<num>/koneplus/roccatkoneplus<minor>/sensor
|
||||||
|
Date: October 2010
|
||||||
|
Contact: Stefan Achatz <erazor_de@users.sourceforge.net>
|
||||||
|
Description: The mouse has a tracking- and a distance-control-unit. These
|
||||||
|
can be activated/deactivated and the lift-off distance can be
|
||||||
|
set. The data has to be 6 bytes long.
|
||||||
|
This file is writeonly.
|
||||||
|
|
||||||
|
What: /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/<hid-bus>:<vendor-id>:<product-id>.<num>/koneplus/roccatkoneplus<minor>/startup_profile
|
||||||
|
Date: October 2010
|
||||||
|
Contact: Stefan Achatz <erazor_de@users.sourceforge.net>
|
||||||
|
Description: The integer value of this attribute ranges from 0-4.
|
||||||
|
When read, this attribute returns the number of the profile
|
||||||
|
that's active when the mouse is powered on.
|
||||||
|
When written, this file sets the number of the startup profile
|
||||||
|
and the mouse activates this profile immediately.
|
||||||
|
|
||||||
|
What: /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/<hid-bus>:<vendor-id>:<product-id>.<num>/koneplus/roccatkoneplus<minor>/tcu
|
||||||
|
Date: October 2010
|
||||||
|
Contact: Stefan Achatz <erazor_de@users.sourceforge.net>
|
||||||
|
Description: When written a calibration process for the tracking control unit
|
||||||
|
can be initiated/cancelled.
|
||||||
|
The data has to be 3 bytes long.
|
||||||
|
This file is writeonly.
|
||||||
|
|
||||||
|
What: /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/<hid-bus>:<vendor-id>:<product-id>.<num>/koneplus/roccatkoneplus<minor>/tcu_image
|
||||||
|
Date: October 2010
|
||||||
|
Contact: Stefan Achatz <erazor_de@users.sourceforge.net>
|
||||||
|
Description: When read the mouse returns a 30x30 pixel image of the
|
||||||
|
sampled underground. This works only in the course of a
|
||||||
|
calibration process initiated with tcu.
|
||||||
|
The returned data is 1028 bytes in size.
|
||||||
|
This file is readonly.
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
What: /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/actual_cpi
|
What: /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/<hid-bus>:<vendor-id>:<product-id>.<num>/pyra/roccatpyra<minor>/actual_cpi
|
||||||
Date: August 2010
|
Date: August 2010
|
||||||
Contact: Stefan Achatz <erazor_de@users.sourceforge.net>
|
Contact: Stefan Achatz <erazor_de@users.sourceforge.net>
|
||||||
Description: It is possible to switch the cpi setting of the mouse with the
|
Description: It is possible to switch the cpi setting of the mouse with the
|
||||||
@@ -14,14 +14,14 @@ Description: It is possible to switch the cpi setting of the mouse with the
|
|||||||
|
|
||||||
This file is readonly.
|
This file is readonly.
|
||||||
|
|
||||||
What: /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/actual_profile
|
What: /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/<hid-bus>:<vendor-id>:<product-id>.<num>/pyra/roccatpyra<minor>/actual_profile
|
||||||
Date: August 2010
|
Date: August 2010
|
||||||
Contact: Stefan Achatz <erazor_de@users.sourceforge.net>
|
Contact: Stefan Achatz <erazor_de@users.sourceforge.net>
|
||||||
Description: When read, this file returns the number of the actual profile in
|
Description: When read, this file returns the number of the actual profile in
|
||||||
range 0-4.
|
range 0-4.
|
||||||
This file is readonly.
|
This file is readonly.
|
||||||
|
|
||||||
What: /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/firmware_version
|
What: /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/<hid-bus>:<vendor-id>:<product-id>.<num>/pyra/roccatpyra<minor>/firmware_version
|
||||||
Date: August 2010
|
Date: August 2010
|
||||||
Contact: Stefan Achatz <erazor_de@users.sourceforge.net>
|
Contact: Stefan Achatz <erazor_de@users.sourceforge.net>
|
||||||
Description: When read, this file returns the raw integer version number of the
|
Description: When read, this file returns the raw integer version number of the
|
||||||
@@ -31,7 +31,7 @@ Description: When read, this file returns the raw integer version number of the
|
|||||||
left. E.g. a returned value of 138 means 1.38
|
left. E.g. a returned value of 138 means 1.38
|
||||||
This file is readonly.
|
This file is readonly.
|
||||||
|
|
||||||
What: /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/profile_settings
|
What: /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/<hid-bus>:<vendor-id>:<product-id>.<num>/pyra/roccatpyra<minor>/profile_settings
|
||||||
Date: August 2010
|
Date: August 2010
|
||||||
Contact: Stefan Achatz <erazor_de@users.sourceforge.net>
|
Contact: Stefan Achatz <erazor_de@users.sourceforge.net>
|
||||||
Description: The mouse can store 5 profiles which can be switched by the
|
Description: The mouse can store 5 profiles which can be switched by the
|
||||||
@@ -45,7 +45,7 @@ Description: The mouse can store 5 profiles which can be switched by the
|
|||||||
contained in the data.
|
contained in the data.
|
||||||
This file is writeonly.
|
This file is writeonly.
|
||||||
|
|
||||||
What: /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/profile[1-5]_settings
|
What: /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/<hid-bus>:<vendor-id>:<product-id>.<num>/pyra/roccatpyra<minor>/profile[1-5]_settings
|
||||||
Date: August 2010
|
Date: August 2010
|
||||||
Contact: Stefan Achatz <erazor_de@users.sourceforge.net>
|
Contact: Stefan Achatz <erazor_de@users.sourceforge.net>
|
||||||
Description: The mouse can store 5 profiles which can be switched by the
|
Description: The mouse can store 5 profiles which can be switched by the
|
||||||
@@ -56,7 +56,7 @@ Description: The mouse can store 5 profiles which can be switched by the
|
|||||||
The returned data is 13 bytes in size.
|
The returned data is 13 bytes in size.
|
||||||
This file is readonly.
|
This file is readonly.
|
||||||
|
|
||||||
What: /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/profile_buttons
|
What: /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/<hid-bus>:<vendor-id>:<product-id>.<num>/pyra/roccatpyra<minor>/profile_buttons
|
||||||
Date: August 2010
|
Date: August 2010
|
||||||
Contact: Stefan Achatz <erazor_de@users.sourceforge.net>
|
Contact: Stefan Achatz <erazor_de@users.sourceforge.net>
|
||||||
Description: The mouse can store 5 profiles which can be switched by the
|
Description: The mouse can store 5 profiles which can be switched by the
|
||||||
@@ -69,7 +69,7 @@ Description: The mouse can store 5 profiles which can be switched by the
|
|||||||
contained in the data.
|
contained in the data.
|
||||||
This file is writeonly.
|
This file is writeonly.
|
||||||
|
|
||||||
What: /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/profile[1-5]_buttons
|
What: /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/<hid-bus>:<vendor-id>:<product-id>.<num>/pyra/roccatpyra<minor>/profile[1-5]_buttons
|
||||||
Date: August 2010
|
Date: August 2010
|
||||||
Contact: Stefan Achatz <erazor_de@users.sourceforge.net>
|
Contact: Stefan Achatz <erazor_de@users.sourceforge.net>
|
||||||
Description: The mouse can store 5 profiles which can be switched by the
|
Description: The mouse can store 5 profiles which can be switched by the
|
||||||
@@ -79,7 +79,7 @@ Description: The mouse can store 5 profiles which can be switched by the
|
|||||||
The returned data is 19 bytes in size.
|
The returned data is 19 bytes in size.
|
||||||
This file is readonly.
|
This file is readonly.
|
||||||
|
|
||||||
What: /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/startup_profile
|
What: /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/<hid-bus>:<vendor-id>:<product-id>.<num>/pyra/roccatpyra<minor>/startup_profile
|
||||||
Date: August 2010
|
Date: August 2010
|
||||||
Contact: Stefan Achatz <erazor_de@users.sourceforge.net>
|
Contact: Stefan Achatz <erazor_de@users.sourceforge.net>
|
||||||
Description: The integer value of this attribute ranges from 0-4.
|
Description: The integer value of this attribute ranges from 0-4.
|
||||||
@@ -87,7 +87,7 @@ Description: The integer value of this attribute ranges from 0-4.
|
|||||||
that's active when the mouse is powered on.
|
that's active when the mouse is powered on.
|
||||||
This file is readonly.
|
This file is readonly.
|
||||||
|
|
||||||
What: /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/settings
|
What: /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/<hid-bus>:<vendor-id>:<product-id>.<num>/pyra/roccatpyra<minor>/settings
|
||||||
Date: August 2010
|
Date: August 2010
|
||||||
Contact: Stefan Achatz <erazor_de@users.sourceforge.net>
|
Contact: Stefan Achatz <erazor_de@users.sourceforge.net>
|
||||||
Description: When read, this file returns the settings stored in the mouse.
|
Description: When read, this file returns the settings stored in the mouse.
|
||||||
|
|||||||
6
Documentation/ABI/testing/sysfs-platform-ideapad-laptop
Normal file
6
Documentation/ABI/testing/sysfs-platform-ideapad-laptop
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
What: /sys/devices/platform/ideapad/camera_power
|
||||||
|
Date: Dec 2010
|
||||||
|
KernelVersion: 2.6.37
|
||||||
|
Contact: "Ike Panhc <ike.pan@canonical.com>"
|
||||||
|
Description:
|
||||||
|
Control the power of camera module. 1 means on, 0 means off.
|
||||||
@@ -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
|
||||||
|
|||||||
@@ -250,7 +250,7 @@ static void board_hwcontrol(struct mtd_info *mtd, int cmd)
|
|||||||
<title>Device ready function</title>
|
<title>Device ready function</title>
|
||||||
<para>
|
<para>
|
||||||
If the hardware interface has the ready busy pin of the NAND chip connected to a
|
If the hardware interface has the ready busy pin of the NAND chip connected to a
|
||||||
GPIO or other accesible I/O pin, this function is used to read back the state of the
|
GPIO or other accessible I/O pin, this function is used to read back the state of the
|
||||||
pin. The function has no arguments and should return 0, if the device is busy (R/B pin
|
pin. The function has no arguments and should return 0, if the device is busy (R/B pin
|
||||||
is low) and 1, if the device is ready (R/B pin is high).
|
is low) and 1, if the device is ready (R/B pin is high).
|
||||||
If the hardware interface does not give access to the ready busy pin, then
|
If the hardware interface does not give access to the ready busy pin, then
|
||||||
|
|||||||
@@ -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.
|
||||||
@@ -89,6 +89,33 @@ Throttling/Upper Limit policy
|
|||||||
|
|
||||||
Limits for writes can be put using blkio.write_bps_device file.
|
Limits for writes can be put using blkio.write_bps_device file.
|
||||||
|
|
||||||
|
Hierarchical Cgroups
|
||||||
|
====================
|
||||||
|
- Currently none of the IO control policy supports hierarhical groups. But
|
||||||
|
cgroup interface does allow creation of hierarhical cgroups and internally
|
||||||
|
IO policies treat them as flat hierarchy.
|
||||||
|
|
||||||
|
So this patch will allow creation of cgroup hierarhcy but at the backend
|
||||||
|
everything will be treated as flat. So if somebody created a hierarchy like
|
||||||
|
as follows.
|
||||||
|
|
||||||
|
root
|
||||||
|
/ \
|
||||||
|
test1 test2
|
||||||
|
|
|
||||||
|
test3
|
||||||
|
|
||||||
|
CFQ and throttling will practically treat all groups at same level.
|
||||||
|
|
||||||
|
pivot
|
||||||
|
/ | \ \
|
||||||
|
root test1 test2 test3
|
||||||
|
|
||||||
|
Down the line we can implement hierarchical accounting/control support
|
||||||
|
and also introduce a new cgroup file "use_hierarchy" which will control
|
||||||
|
whether cgroup hierarchy is viewed as flat or hierarchical by the policy..
|
||||||
|
This is how memory controller also has implemented the things.
|
||||||
|
|
||||||
Various user visible config options
|
Various user visible config options
|
||||||
===================================
|
===================================
|
||||||
CONFIG_BLK_CGROUP
|
CONFIG_BLK_CGROUP
|
||||||
|
|||||||
@@ -91,7 +91,7 @@ int main(int argc, char **argv)
|
|||||||
|
|
||||||
if (ret == -1) {
|
if (ret == -1) {
|
||||||
perror("cgroup.event_control "
|
perror("cgroup.event_control "
|
||||||
"is not accessable any more");
|
"is not accessible any more");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -355,13 +355,13 @@ subsystems, type:
|
|||||||
|
|
||||||
To change the set of subsystems bound to a mounted hierarchy, just
|
To change the set of subsystems bound to a mounted hierarchy, just
|
||||||
remount with different options:
|
remount with different options:
|
||||||
# mount -o remount,cpuset,ns hier1 /dev/cgroup
|
# mount -o remount,cpuset,blkio hier1 /dev/cgroup
|
||||||
|
|
||||||
Now memory is removed from the hierarchy and ns is added.
|
Now memory is removed from the hierarchy and blkio is added.
|
||||||
|
|
||||||
Note this will add ns to the hierarchy but won't remove memory or
|
Note this will add blkio to the hierarchy but won't remove memory or
|
||||||
cpuset, because the new options are appended to the old ones:
|
cpuset, because the new options are appended to the old ones:
|
||||||
# mount -o remount,ns /dev/cgroup
|
# mount -o remount,blkio /dev/cgroup
|
||||||
|
|
||||||
To Specify a hierarchy's release_agent:
|
To Specify a hierarchy's release_agent:
|
||||||
# mount -t cgroup -o cpuset,release_agent="/sbin/cpuset_release_agent" \
|
# mount -t cgroup -o cpuset,release_agent="/sbin/cpuset_release_agent" \
|
||||||
|
|||||||
@@ -398,7 +398,7 @@ Under below explanation, we assume CONFIG_MEM_RES_CTRL_SWAP=y.
|
|||||||
written to move_charge_at_immigrate.
|
written to move_charge_at_immigrate.
|
||||||
|
|
||||||
9.10 Memory thresholds
|
9.10 Memory thresholds
|
||||||
Memory controler implements memory thresholds using cgroups notification
|
Memory controller implements memory thresholds using cgroups notification
|
||||||
API. You can use Documentation/cgroups/cgroup_event_listener.c to test
|
API. You can use Documentation/cgroups/cgroup_event_listener.c to test
|
||||||
it.
|
it.
|
||||||
|
|
||||||
|
|||||||
@@ -36,6 +36,10 @@ as a regular user, and install it with
|
|||||||
|
|
||||||
sudo make install
|
sudo make install
|
||||||
|
|
||||||
|
The semantic patches in the kernel will work best with Coccinelle version
|
||||||
|
0.2.4 or later. Using earlier versions may incur some parse errors in the
|
||||||
|
semantic patch code, but any results that are obtained should still be
|
||||||
|
correct.
|
||||||
|
|
||||||
Using Coccinelle on the Linux kernel
|
Using Coccinelle on the Linux kernel
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|||||||
@@ -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.
|
||||||
@@ -104,6 +104,13 @@ Then from the "Message" menu item, select insert file and choose your patch.
|
|||||||
As an added bonus you can customise the message creation toolbar menu
|
As an added bonus you can customise the message creation toolbar menu
|
||||||
and put the "insert file" icon there.
|
and put the "insert file" icon there.
|
||||||
|
|
||||||
|
Make the the composer window wide enough so that no lines wrap. As of
|
||||||
|
KMail 1.13.5 (KDE 4.5.4), KMail will apply word wrapping when sending
|
||||||
|
the email if the lines wrap in the composer window. Having word wrapping
|
||||||
|
disabled in the Options menu isn't enough. Thus, if your patch has very
|
||||||
|
long lines, you must make the composer window very wide before sending
|
||||||
|
the email. See: https://bugs.kde.org/show_bug.cgi?id=174034
|
||||||
|
|
||||||
You can safely GPG sign attachments, but inlined text is preferred for
|
You can safely GPG sign attachments, but inlined text is preferred for
|
||||||
patches so do not GPG sign them. Signing patches that have been inserted
|
patches so do not GPG sign them. Signing patches that have been inserted
|
||||||
as inlined text will make them tricky to extract from their 7-bit encoding.
|
as inlined text will make them tricky to extract from their 7-bit encoding.
|
||||||
@@ -179,26 +186,8 @@ Sylpheed (GUI)
|
|||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
Thunderbird (GUI)
|
Thunderbird (GUI)
|
||||||
|
|
||||||
By default, thunderbird likes to mangle text, but there are ways to
|
Thunderbird is an Outlook clone that likes to mangle text, but there are ways
|
||||||
coerce it into being nice.
|
to coerce it into behaving.
|
||||||
|
|
||||||
- Under account settings, composition and addressing, uncheck "Compose
|
|
||||||
messages in HTML format".
|
|
||||||
|
|
||||||
- Edit your Thunderbird config settings to tell it not to wrap lines:
|
|
||||||
user_pref("mailnews.wraplength", 0);
|
|
||||||
|
|
||||||
- Edit your Thunderbird config settings so that it won't use format=flowed:
|
|
||||||
user_pref("mailnews.send_plaintext_flowed", false);
|
|
||||||
|
|
||||||
- You need to get Thunderbird into preformat mode:
|
|
||||||
. If you compose HTML messages by default, it's not too hard. Just select
|
|
||||||
"Preformat" from the drop-down box just under the subject line.
|
|
||||||
. If you compose in text by default, you have to tell it to compose a new
|
|
||||||
message in HTML (just as a one-off), and then force it from there back to
|
|
||||||
text, else it will wrap lines. To do this, use shift-click on the Write
|
|
||||||
icon to compose to get HTML compose mode, then select "Preformat" from
|
|
||||||
the drop-down box just under the subject line.
|
|
||||||
|
|
||||||
- Allows use of an external editor:
|
- Allows use of an external editor:
|
||||||
The easiest thing to do with Thunderbird and patches is to use an
|
The easiest thing to do with Thunderbird and patches is to use an
|
||||||
@@ -208,6 +197,27 @@ coerce it into being nice.
|
|||||||
View->Toolbars->Customize... and finally just click on it when in the
|
View->Toolbars->Customize... and finally just click on it when in the
|
||||||
Compose dialog.
|
Compose dialog.
|
||||||
|
|
||||||
|
To beat some sense out of the internal editor, do this:
|
||||||
|
|
||||||
|
- Under account settings, composition and addressing, uncheck "Compose
|
||||||
|
messages in HTML format".
|
||||||
|
|
||||||
|
- Edit your Thunderbird config settings so that it won't use format=flowed.
|
||||||
|
Go to "edit->preferences->advanced->config editor" to bring up the
|
||||||
|
thunderbird's registry editor, and set "mailnews.send_plaintext_flowed" to
|
||||||
|
"false".
|
||||||
|
|
||||||
|
- Enable "preformat" mode: Shft-click on the Write icon to bring up the HTML
|
||||||
|
composer, select "Preformat" from the drop-down box just under the subject
|
||||||
|
line, then close the message without saving. (This setting also applies to
|
||||||
|
the text composer, but the only control for it is in the HTML composer.)
|
||||||
|
|
||||||
|
- Install the "toggle wordwrap" extension. Download the file from:
|
||||||
|
https://addons.mozilla.org/thunderbird/addon/2351/
|
||||||
|
Then go to "tools->add ons", select "install" at the bottom of the screen,
|
||||||
|
and browse to where you saved the .xul file. This adds an "Enable
|
||||||
|
Wordwrap" entry under the Options menu of the message composer.
|
||||||
|
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
TkRat (GUI)
|
TkRat (GUI)
|
||||||
|
|
||||||
|
|||||||
@@ -193,6 +193,20 @@ Why: /proc/<pid>/oom_adj allows userspace to influence the oom killer's
|
|||||||
|
|
||||||
---------------------------
|
---------------------------
|
||||||
|
|
||||||
|
What: CS5535/CS5536 obsolete GPIO driver
|
||||||
|
When: June 2011
|
||||||
|
Files: drivers/staging/cs5535_gpio/*
|
||||||
|
Check: drivers/staging/cs5535_gpio/cs5535_gpio.c
|
||||||
|
Why: A newer driver replaces this; it is drivers/gpio/cs5535-gpio.c, and
|
||||||
|
integrates with the Linux GPIO subsystem. The old driver has been
|
||||||
|
moved to staging, and will be removed altogether around 2.6.40.
|
||||||
|
Please test the new driver, and ensure that the functionality you
|
||||||
|
need and any bugfixes from the old driver are available in the new
|
||||||
|
one.
|
||||||
|
Who: Andres Salomon <dilinger@queued.net>
|
||||||
|
|
||||||
|
--------------------------
|
||||||
|
|
||||||
What: remove EXPORT_SYMBOL(kernel_thread)
|
What: remove EXPORT_SYMBOL(kernel_thread)
|
||||||
When: August 2006
|
When: August 2006
|
||||||
Files: arch/*/kernel/*_ksyms.c
|
Files: arch/*/kernel/*_ksyms.c
|
||||||
@@ -234,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
|
||||||
@@ -576,3 +601,13 @@ Why: The functions have been superceded by cancel_delayed_work_sync()
|
|||||||
Who: Tejun Heo <tj@kernel.org>
|
Who: Tejun Heo <tj@kernel.org>
|
||||||
|
|
||||||
----------------------------
|
----------------------------
|
||||||
|
|
||||||
|
What: Legacy, non-standard chassis intrusion detection interface.
|
||||||
|
When: June 2011
|
||||||
|
Why: The adm9240, w83792d and w83793 hardware monitoring drivers have
|
||||||
|
legacy interfaces for chassis intrusion detection. A standard
|
||||||
|
interface has been added to each driver, so the legacy interface
|
||||||
|
can be removed.
|
||||||
|
Who: Jean Delvare <khali@linux-fr.org>
|
||||||
|
|
||||||
|
----------------------------
|
||||||
|
|||||||
@@ -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:
|
||||||
|
|||||||
@@ -457,6 +457,9 @@ ChangeLog
|
|||||||
|
|
||||||
Note, a technical ChangeLog aimed at kernel hackers is in fs/ntfs/ChangeLog.
|
Note, a technical ChangeLog aimed at kernel hackers is in fs/ntfs/ChangeLog.
|
||||||
|
|
||||||
|
2.1.30:
|
||||||
|
- Fix writev() (it kept writing the first segment over and over again
|
||||||
|
instead of moving onto subsequent segments).
|
||||||
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,5 +383,14 @@ 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]
|
||||||
|
In ->fallocate() you must check the mode option passed in. If your
|
||||||
|
filesystem does not support hole punching (deallocating space in the middle of a
|
||||||
|
file) you must return -EOPNOTSUPP if FALLOC_FL_PUNCH_HOLE is set in mode.
|
||||||
|
Currently you can only have FALLOC_FL_PUNCH_HOLE with FALLOC_FL_KEEP_SIZE set,
|
||||||
|
so the i_size should not change when hole punching, even when puching the end of
|
||||||
|
a file off.
|
||||||
|
|||||||
@@ -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,7 +415,7 @@ 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.
|
||||||
|
|
||||||
@@ -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)
|
||||||
|
|||||||
@@ -155,7 +155,7 @@ connected to a normally open switch.
|
|||||||
The ADM9240 provides an internal open drain on this line, and may output
|
The ADM9240 provides an internal open drain on this line, and may output
|
||||||
a 20 ms active low pulse to reset an external Chassis Intrusion latch.
|
a 20 ms active low pulse to reset an external Chassis Intrusion latch.
|
||||||
|
|
||||||
Clear the CI latch by writing value 1 to the sysfs chassis_clear file.
|
Clear the CI latch by writing value 0 to the sysfs intrusion0_alarm file.
|
||||||
|
|
||||||
Alarm flags reported as 16-bit word
|
Alarm flags reported as 16-bit word
|
||||||
|
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ Supported chips:
|
|||||||
http://focus.ti.com/lit/ds/symlink/ads7828.pdf
|
http://focus.ti.com/lit/ds/symlink/ads7828.pdf
|
||||||
|
|
||||||
Authors:
|
Authors:
|
||||||
Steve Hardy <steve@linuxrealtime.co.uk>
|
Steve Hardy <shardy@redhat.com>
|
||||||
|
|
||||||
Module Parameters
|
Module Parameters
|
||||||
-----------------
|
-----------------
|
||||||
|
|||||||
@@ -42,7 +42,7 @@ Description
|
|||||||
This driver implements support for the hardware monitoring capabilities of the
|
This driver implements support for the hardware monitoring capabilities of the
|
||||||
SMSC DME1737 and Asus A8000 (which are the same), SMSC SCH5027, SCH311x,
|
SMSC DME1737 and Asus A8000 (which are the same), SMSC SCH5027, SCH311x,
|
||||||
and SCH5127 Super-I/O chips. These chips feature monitoring of 3 temp sensors
|
and SCH5127 Super-I/O chips. These chips feature monitoring of 3 temp sensors
|
||||||
temp[1-3] (2 remote diodes and 1 internal), 7 voltages in[0-6] (6 external and
|
temp[1-3] (2 remote diodes and 1 internal), 8 voltages in[0-7] (7 external and
|
||||||
1 internal) and up to 6 fan speeds fan[1-6]. Additionally, the chips implement
|
1 internal) and up to 6 fan speeds fan[1-6]. Additionally, the chips implement
|
||||||
up to 5 PWM outputs pwm[1-3,5-6] for controlling fan speeds both manually and
|
up to 5 PWM outputs pwm[1-3,5-6] for controlling fan speeds both manually and
|
||||||
automatically.
|
automatically.
|
||||||
@@ -105,6 +105,7 @@ SCH5127:
|
|||||||
in4: V1_IN 0V - 1.5V
|
in4: V1_IN 0V - 1.5V
|
||||||
in5: VTR (+3.3V standby) 0V - 4.38V
|
in5: VTR (+3.3V standby) 0V - 4.38V
|
||||||
in6: Vbat (+3.0V) 0V - 4.38V
|
in6: Vbat (+3.0V) 0V - 4.38V
|
||||||
|
in7: Vtrip (+1.5V) 0V - 1.99V
|
||||||
|
|
||||||
Each voltage input has associated min and max limits which trigger an alarm
|
Each voltage input has associated min and max limits which trigger an alarm
|
||||||
when crossed.
|
when crossed.
|
||||||
@@ -217,10 +218,10 @@ cpu0_vid RO CPU core reference voltage in
|
|||||||
vrm RW Voltage regulator module version
|
vrm RW Voltage regulator module version
|
||||||
number.
|
number.
|
||||||
|
|
||||||
in[0-6]_input RO Measured voltage in millivolts.
|
in[0-7]_input RO Measured voltage in millivolts.
|
||||||
in[0-6]_min RW Low limit for voltage input.
|
in[0-7]_min RW Low limit for voltage input.
|
||||||
in[0-6]_max RW High limit for voltage input.
|
in[0-7]_max RW High limit for voltage input.
|
||||||
in[0-6]_alarm RO Voltage input alarm. Returns 1 if
|
in[0-7]_alarm RO Voltage input alarm. Returns 1 if
|
||||||
voltage input is or went outside the
|
voltage input is or went outside the
|
||||||
associated min-max range, 0 otherwise.
|
associated min-max range, 0 otherwise.
|
||||||
|
|
||||||
@@ -324,3 +325,4 @@ fan5 opt opt
|
|||||||
pwm5 opt opt
|
pwm5 opt opt
|
||||||
fan6 opt opt
|
fan6 opt opt
|
||||||
pwm6 opt opt
|
pwm6 opt opt
|
||||||
|
in7 yes
|
||||||
|
|||||||
34
Documentation/hwmon/ds620
Normal file
34
Documentation/hwmon/ds620
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
Kernel driver ds620
|
||||||
|
===================
|
||||||
|
|
||||||
|
Supported chips:
|
||||||
|
* Dallas Semiconductor DS620
|
||||||
|
Prefix: 'ds620'
|
||||||
|
Datasheet: Publicly available at the Dallas Semiconductor website
|
||||||
|
http://www.dalsemi.com/
|
||||||
|
|
||||||
|
Authors:
|
||||||
|
Roland Stigge <stigge@antcom.de>
|
||||||
|
based on ds1621.c by
|
||||||
|
Christian W. Zuckschwerdt <zany@triq.net>
|
||||||
|
|
||||||
|
Description
|
||||||
|
-----------
|
||||||
|
|
||||||
|
The DS620 is a (one instance) digital thermometer and thermostat. It has both
|
||||||
|
high and low temperature limits which can be user defined (i.e. programmed
|
||||||
|
into non-volatile on-chip registers). Temperature range is -55 degree Celsius
|
||||||
|
to +125. Between 0 and 70 degree Celsius, accuracy is 0.5 Kelvin. The value
|
||||||
|
returned via sysfs displays post decimal positions.
|
||||||
|
|
||||||
|
The thermostat function works as follows: When configured via platform_data
|
||||||
|
(struct ds620_platform_data) .pomode == 0 (default), the thermostat output pin
|
||||||
|
PO is always low. If .pomode == 1, the thermostat is in PO_LOW mode. I.e., the
|
||||||
|
output pin PO becomes active when the temperature falls below temp1_min and
|
||||||
|
stays active until the temperature goes above temp1_max.
|
||||||
|
|
||||||
|
Likewise, with .pomode == 2, the thermostat is in PO_HIGH mode. I.e., the PO
|
||||||
|
output pin becomes active when the temperature goes above temp1_max and stays
|
||||||
|
active until the temperature falls below temp1_min.
|
||||||
|
|
||||||
|
The PO output pin of the DS620 operates active-low.
|
||||||
@@ -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
|
||||||
--------------
|
--------------
|
||||||
|
|||||||
49
Documentation/hwmon/sht21
Normal file
49
Documentation/hwmon/sht21
Normal file
@@ -0,0 +1,49 @@
|
|||||||
|
Kernel driver sht21
|
||||||
|
===================
|
||||||
|
|
||||||
|
Supported chips:
|
||||||
|
* Sensirion SHT21
|
||||||
|
Prefix: 'sht21'
|
||||||
|
Addresses scanned: none
|
||||||
|
Datasheet: Publicly available at the Sensirion website
|
||||||
|
http://www.sensirion.com/en/pdf/product_information/Datasheet-humidity-sensor-SHT21.pdf
|
||||||
|
|
||||||
|
* Sensirion SHT25
|
||||||
|
Prefix: 'sht21'
|
||||||
|
Addresses scanned: none
|
||||||
|
Datasheet: Publicly available at the Sensirion website
|
||||||
|
http://www.sensirion.com/en/pdf/product_information/Datasheet-humidity-sensor-SHT25.pdf
|
||||||
|
|
||||||
|
Author:
|
||||||
|
Urs Fleisch <urs.fleisch@sensirion.com>
|
||||||
|
|
||||||
|
Description
|
||||||
|
-----------
|
||||||
|
|
||||||
|
The SHT21 and SHT25 are humidity and temperature sensors in a DFN package of
|
||||||
|
only 3 x 3 mm footprint and 1.1 mm height. The difference between the two
|
||||||
|
devices is the higher level of precision of the SHT25 (1.8% relative humidity,
|
||||||
|
0.2 degree Celsius) compared with the SHT21 (2.0% relative humidity,
|
||||||
|
0.3 degree Celsius).
|
||||||
|
|
||||||
|
The devices communicate with the I2C protocol. All sensors are set to the same
|
||||||
|
I2C address 0x40, so an entry with I2C_BOARD_INFO("sht21", 0x40) can be used
|
||||||
|
in the board setup code.
|
||||||
|
|
||||||
|
sysfs-Interface
|
||||||
|
---------------
|
||||||
|
|
||||||
|
temp1_input - temperature input
|
||||||
|
humidity1_input - humidity input
|
||||||
|
|
||||||
|
Notes
|
||||||
|
-----
|
||||||
|
|
||||||
|
The driver uses the default resolution settings of 12 bit for humidity and 14
|
||||||
|
bit for temperature, which results in typical measurement times of 22 ms for
|
||||||
|
humidity and 66 ms for temperature. To keep self heating below 0.1 degree
|
||||||
|
Celsius, the device should not be active for more than 10% of the time,
|
||||||
|
e.g. maximum two measurements per second at the given resolution.
|
||||||
|
|
||||||
|
Different resolutions, the on-chip heater, using the CRC checksum and reading
|
||||||
|
the serial number are not supported yet.
|
||||||
@@ -384,10 +384,20 @@ curr[1-*]_min Current min value.
|
|||||||
Unit: milliampere
|
Unit: milliampere
|
||||||
RW
|
RW
|
||||||
|
|
||||||
|
curr[1-*]_lcrit Current critical low value
|
||||||
|
Unit: milliampere
|
||||||
|
RW
|
||||||
|
|
||||||
|
curr[1-*]_crit Current critical high value.
|
||||||
|
Unit: milliampere
|
||||||
|
RW
|
||||||
|
|
||||||
curr[1-*]_input Current input value
|
curr[1-*]_input Current input value
|
||||||
Unit: milliampere
|
Unit: milliampere
|
||||||
RO
|
RO
|
||||||
|
|
||||||
|
Also see the Alarms section for status flags associated with currents.
|
||||||
|
|
||||||
*********
|
*********
|
||||||
* Power *
|
* Power *
|
||||||
*********
|
*********
|
||||||
@@ -450,13 +460,6 @@ power[1-*]_accuracy Accuracy of the power meter.
|
|||||||
Unit: Percent
|
Unit: Percent
|
||||||
RO
|
RO
|
||||||
|
|
||||||
power[1-*]_alarm 1 if the system is drawing more power than the
|
|
||||||
cap allows; 0 otherwise. A poll notification is
|
|
||||||
sent to this file when the power use exceeds the
|
|
||||||
cap. This file only appears if the cap is known
|
|
||||||
to be enforced by hardware.
|
|
||||||
RO
|
|
||||||
|
|
||||||
power[1-*]_cap If power use rises above this limit, the
|
power[1-*]_cap If power use rises above this limit, the
|
||||||
system should take action to reduce power use.
|
system should take action to reduce power use.
|
||||||
A poll notification is sent to this file if the
|
A poll notification is sent to this file if the
|
||||||
@@ -479,6 +482,20 @@ power[1-*]_cap_min Minimum cap that can be set.
|
|||||||
Unit: microWatt
|
Unit: microWatt
|
||||||
RO
|
RO
|
||||||
|
|
||||||
|
power[1-*]_max Maximum power.
|
||||||
|
Unit: microWatt
|
||||||
|
RW
|
||||||
|
|
||||||
|
power[1-*]_crit Critical maximum power.
|
||||||
|
If power rises to or above this limit, the
|
||||||
|
system is expected take drastic action to reduce
|
||||||
|
power consumption, such as a system shutdown or
|
||||||
|
a forced powerdown of some devices.
|
||||||
|
Unit: microWatt
|
||||||
|
RW
|
||||||
|
|
||||||
|
Also see the Alarms section for status flags associated with power readings.
|
||||||
|
|
||||||
**********
|
**********
|
||||||
* Energy *
|
* Energy *
|
||||||
**********
|
**********
|
||||||
@@ -488,6 +505,15 @@ energy[1-*]_input Cumulative energy use
|
|||||||
RO
|
RO
|
||||||
|
|
||||||
|
|
||||||
|
************
|
||||||
|
* Humidity *
|
||||||
|
************
|
||||||
|
|
||||||
|
humidity[1-*]_input Humidity
|
||||||
|
Unit: milli-percent (per cent mille, pcm)
|
||||||
|
RO
|
||||||
|
|
||||||
|
|
||||||
**********
|
**********
|
||||||
* Alarms *
|
* Alarms *
|
||||||
**********
|
**********
|
||||||
@@ -501,6 +527,7 @@ implementation.
|
|||||||
|
|
||||||
in[0-*]_alarm
|
in[0-*]_alarm
|
||||||
curr[1-*]_alarm
|
curr[1-*]_alarm
|
||||||
|
power[1-*]_alarm
|
||||||
fan[1-*]_alarm
|
fan[1-*]_alarm
|
||||||
temp[1-*]_alarm
|
temp[1-*]_alarm
|
||||||
Channel alarm
|
Channel alarm
|
||||||
@@ -512,12 +539,20 @@ OR
|
|||||||
|
|
||||||
in[0-*]_min_alarm
|
in[0-*]_min_alarm
|
||||||
in[0-*]_max_alarm
|
in[0-*]_max_alarm
|
||||||
|
in[0-*]_lcrit_alarm
|
||||||
|
in[0-*]_crit_alarm
|
||||||
curr[1-*]_min_alarm
|
curr[1-*]_min_alarm
|
||||||
curr[1-*]_max_alarm
|
curr[1-*]_max_alarm
|
||||||
|
curr[1-*]_lcrit_alarm
|
||||||
|
curr[1-*]_crit_alarm
|
||||||
|
power[1-*]_cap_alarm
|
||||||
|
power[1-*]_max_alarm
|
||||||
|
power[1-*]_crit_alarm
|
||||||
fan[1-*]_min_alarm
|
fan[1-*]_min_alarm
|
||||||
fan[1-*]_max_alarm
|
fan[1-*]_max_alarm
|
||||||
temp[1-*]_min_alarm
|
temp[1-*]_min_alarm
|
||||||
temp[1-*]_max_alarm
|
temp[1-*]_max_alarm
|
||||||
|
temp[1-*]_lcrit_alarm
|
||||||
temp[1-*]_crit_alarm
|
temp[1-*]_crit_alarm
|
||||||
temp[1-*]_emergency_alarm
|
temp[1-*]_emergency_alarm
|
||||||
Limit alarm
|
Limit alarm
|
||||||
|
|||||||
@@ -91,3 +91,25 @@ isaset -y -f 0x2e 0xaa
|
|||||||
|
|
||||||
The above sequence assumes a Super-I/O config space at 0x2e/0x2f, but
|
The above sequence assumes a Super-I/O config space at 0x2e/0x2f, but
|
||||||
0x4e/0x4f is also possible.
|
0x4e/0x4f is also possible.
|
||||||
|
|
||||||
|
Voltage pin mapping
|
||||||
|
-------------------
|
||||||
|
|
||||||
|
Here is a summary of the voltage pin mapping for the W83627THF. This
|
||||||
|
can be useful to convert data provided by board manufacturers into
|
||||||
|
working libsensors configuration statements.
|
||||||
|
|
||||||
|
W83627THF |
|
||||||
|
Pin | Name | Register | Sysfs attribute
|
||||||
|
-----------------------------------------------------
|
||||||
|
100 | CPUVCORE | 20h | in0
|
||||||
|
99 | VIN0 | 21h | in1
|
||||||
|
98 | VIN1 | 22h | in2
|
||||||
|
97 | VIN2 | 24h | in4
|
||||||
|
114 | AVCC | 23h | in3
|
||||||
|
61 | 5VSB | 50h (bank 5) | in7
|
||||||
|
74 | VBAT | 51h (bank 5) | in8
|
||||||
|
|
||||||
|
For other supported devices, you'll have to take the hard path and
|
||||||
|
look up the information in the datasheet yourself (and then add it
|
||||||
|
to this document please.)
|
||||||
|
|||||||
@@ -92,7 +92,7 @@ This driver implements support for Winbond W83793G/W83793R chips.
|
|||||||
|
|
||||||
* Chassis
|
* Chassis
|
||||||
If the case open alarm triggers, it will stay in this state unless cleared
|
If the case open alarm triggers, it will stay in this state unless cleared
|
||||||
by any write to the sysfs file "chassis".
|
by writing 0 to the sysfs file "intrusion0_alarm".
|
||||||
|
|
||||||
* VID and VRM
|
* VID and VRM
|
||||||
The VRM version is detected automatically, don't modify the it unless you
|
The VRM version is detected automatically, don't modify the it unless you
|
||||||
|
|||||||
65
Documentation/i2c/muxes/gpio-i2cmux
Normal file
65
Documentation/i2c/muxes/gpio-i2cmux
Normal file
@@ -0,0 +1,65 @@
|
|||||||
|
Kernel driver gpio-i2cmux
|
||||||
|
|
||||||
|
Author: Peter Korsgaard <peter.korsgaard@barco.com>
|
||||||
|
|
||||||
|
Description
|
||||||
|
-----------
|
||||||
|
|
||||||
|
gpio-i2cmux is an i2c mux driver providing access to I2C bus segments
|
||||||
|
from a master I2C bus and a hardware MUX controlled through GPIO pins.
|
||||||
|
|
||||||
|
E.G.:
|
||||||
|
|
||||||
|
---------- ---------- Bus segment 1 - - - - -
|
||||||
|
| | SCL/SDA | |-------------- | |
|
||||||
|
| |------------| |
|
||||||
|
| | | | Bus segment 2 | |
|
||||||
|
| Linux | GPIO 1..N | MUX |--------------- Devices
|
||||||
|
| |------------| | | |
|
||||||
|
| | | | Bus segment M
|
||||||
|
| | | |---------------| |
|
||||||
|
---------- ---------- - - - - -
|
||||||
|
|
||||||
|
SCL/SDA of the master I2C bus is multiplexed to bus segment 1..M
|
||||||
|
according to the settings of the GPIO pins 1..N.
|
||||||
|
|
||||||
|
Usage
|
||||||
|
-----
|
||||||
|
|
||||||
|
gpio-i2cmux uses the platform bus, so you need to provide a struct
|
||||||
|
platform_device with the platform_data pointing to a struct
|
||||||
|
gpio_i2cmux_platform_data with the I2C adapter number of the master
|
||||||
|
bus, the number of bus segments to create and the GPIO pins used
|
||||||
|
to control it. See include/linux/gpio-i2cmux.h for details.
|
||||||
|
|
||||||
|
E.G. something like this for a MUX providing 4 bus segments
|
||||||
|
controlled through 3 GPIO pins:
|
||||||
|
|
||||||
|
#include <linux/gpio-i2cmux.h>
|
||||||
|
#include <linux/platform_device.h>
|
||||||
|
|
||||||
|
static const unsigned myboard_gpiomux_gpios[] = {
|
||||||
|
AT91_PIN_PC26, AT91_PIN_PC25, AT91_PIN_PC24
|
||||||
|
};
|
||||||
|
|
||||||
|
static const unsigned myboard_gpiomux_values[] = {
|
||||||
|
0, 1, 2, 3
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct gpio_i2cmux_platform_data myboard_i2cmux_data = {
|
||||||
|
.parent = 1,
|
||||||
|
.base_nr = 2, /* optional */
|
||||||
|
.values = myboard_gpiomux_values,
|
||||||
|
.n_values = ARRAY_SIZE(myboard_gpiomux_values),
|
||||||
|
.gpios = myboard_gpiomux_gpios,
|
||||||
|
.n_gpios = ARRAY_SIZE(myboard_gpiomux_gpios),
|
||||||
|
.idle = 4, /* optional */
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct platform_device myboard_i2cmux = {
|
||||||
|
.name = "gpio-i2cmux",
|
||||||
|
.id = 0,
|
||||||
|
.dev = {
|
||||||
|
.platform_data = &myboard_i2cmux_data,
|
||||||
|
},
|
||||||
|
};
|
||||||
@@ -49,7 +49,9 @@ This information is subject to change.
|
|||||||
#include <linux/input.h>
|
#include <linux/input.h>
|
||||||
#include <sys/ioctl.h>
|
#include <sys/ioctl.h>
|
||||||
|
|
||||||
unsigned long features[1 + FF_MAX/sizeof(unsigned long)];
|
#define BITS_TO_LONGS(x) \
|
||||||
|
(((x) + 8 * sizeof (unsigned long) - 1) / (8 * sizeof (unsigned long)))
|
||||||
|
unsigned long features[BITS_TO_LONGS(FF_CNT)];
|
||||||
int ioctl(int file_descriptor, int request, unsigned long *features);
|
int ioctl(int file_descriptor, int request, unsigned long *features);
|
||||||
|
|
||||||
"request" must be EVIOCGBIT(EV_FF, size of features array in bytes )
|
"request" must be EVIOCGBIT(EV_FF, size of features array in bytes )
|
||||||
|
|||||||
@@ -247,7 +247,7 @@ Code Seq#(hex) Include File Comments
|
|||||||
'p' 40-7F linux/nvram.h
|
'p' 40-7F linux/nvram.h
|
||||||
'p' 80-9F linux/ppdev.h user-space parport
|
'p' 80-9F linux/ppdev.h user-space parport
|
||||||
<mailto:tim@cyberelk.net>
|
<mailto:tim@cyberelk.net>
|
||||||
'p' A1-A4 linux/pps.h LinuxPPS
|
'p' A1-A5 linux/pps.h LinuxPPS
|
||||||
<mailto:giometti@linux.it>
|
<mailto:giometti@linux.it>
|
||||||
'q' 00-1F linux/serio.h
|
'q' 00-1F linux/serio.h
|
||||||
'q' 80-FF linux/telephony.h Internet PhoneJACK, Internet LineJACK
|
'q' 80-FF linux/telephony.h Internet PhoneJACK, Internet LineJACK
|
||||||
|
|||||||
@@ -81,7 +81,7 @@ Field 9 -- # of I/Os currently in progress
|
|||||||
The only field that should go to zero. Incremented as requests are
|
The only field that should go to zero. Incremented as requests are
|
||||||
given to appropriate struct request_queue and decremented as they finish.
|
given to appropriate struct request_queue and decremented as they finish.
|
||||||
Field 10 -- # of milliseconds spent doing I/Os
|
Field 10 -- # of milliseconds spent doing I/Os
|
||||||
This field is increases so long as field 9 is nonzero.
|
This field increases so long as field 9 is nonzero.
|
||||||
Field 11 -- weighted # of milliseconds spent doing I/Os
|
Field 11 -- weighted # of milliseconds spent doing I/Os
|
||||||
This field is incremented at each I/O start, I/O completion, I/O
|
This field is incremented at each I/O start, I/O completion, I/O
|
||||||
merge, or read of these stats by the number of I/Os in progress
|
merge, or read of these stats by the number of I/Os in progress
|
||||||
|
|||||||
@@ -73,6 +73,14 @@ Specify the output directory when building the kernel.
|
|||||||
The output directory can also be specified using "O=...".
|
The output directory can also be specified using "O=...".
|
||||||
Setting "O=..." takes precedence over KBUILD_OUTPUT.
|
Setting "O=..." takes precedence over KBUILD_OUTPUT.
|
||||||
|
|
||||||
|
KBUILD_DEBARCH
|
||||||
|
--------------------------------------------------
|
||||||
|
For the deb-pkg target, allows overriding the normal heuristics deployed by
|
||||||
|
deb-pkg. Normally deb-pkg attempts to guess the right architecture based on
|
||||||
|
the UTS_MACHINE variable, and on some architectures also the kernel config.
|
||||||
|
The value of KBUILD_DEBARCH is assumed (not checked) to be a valid Debian
|
||||||
|
architecture.
|
||||||
|
|
||||||
ARCH
|
ARCH
|
||||||
--------------------------------------------------
|
--------------------------------------------------
|
||||||
Set ARCH to the architecture to be built.
|
Set ARCH to the architecture to be built.
|
||||||
|
|||||||
@@ -112,7 +112,6 @@ applicable everywhere (see syntax).
|
|||||||
(no prompts anywhere) and for symbols with no dependencies.
|
(no prompts anywhere) and for symbols with no dependencies.
|
||||||
That will limit the usefulness but on the other hand avoid
|
That will limit the usefulness but on the other hand avoid
|
||||||
the illegal configurations all over.
|
the illegal configurations all over.
|
||||||
kconfig should one day warn about such things.
|
|
||||||
|
|
||||||
- numerical ranges: "range" <symbol> <symbol> ["if" <expr>]
|
- numerical ranges: "range" <symbol> <symbol> ["if" <expr>]
|
||||||
This allows to limit the range of possible input values for int
|
This allows to limit the range of possible input values for int
|
||||||
@@ -268,7 +267,7 @@ separate list of options.
|
|||||||
|
|
||||||
choices:
|
choices:
|
||||||
|
|
||||||
"choice"
|
"choice" [symbol]
|
||||||
<choice options>
|
<choice options>
|
||||||
<choice block>
|
<choice block>
|
||||||
"endchoice"
|
"endchoice"
|
||||||
@@ -282,6 +281,10 @@ single driver can be compiled/loaded into the kernel, but all drivers
|
|||||||
can be compiled as modules.
|
can be compiled as modules.
|
||||||
A choice accepts another option "optional", which allows to set the
|
A choice accepts another option "optional", which allows to set the
|
||||||
choice to 'n' and no entry needs to be selected.
|
choice to 'n' and no entry needs to be selected.
|
||||||
|
If no [symbol] is associated with a choice, then you can not have multiple
|
||||||
|
definitions of that choice. If a [symbol] is associated to the choice,
|
||||||
|
then you may define the same choice (ie. with the same entries) in another
|
||||||
|
place.
|
||||||
|
|
||||||
comment:
|
comment:
|
||||||
|
|
||||||
|
|||||||
@@ -1136,6 +1136,21 @@ When kbuild executes, the following steps are followed (roughly):
|
|||||||
resulting in the target file being recompiled for no
|
resulting in the target file being recompiled for no
|
||||||
obvious reason.
|
obvious reason.
|
||||||
|
|
||||||
|
dtc
|
||||||
|
Create flattend device tree blob object suitable for linking
|
||||||
|
into vmlinux. Device tree blobs linked into vmlinux are placed
|
||||||
|
in an init section in the image. Platform code *must* copy the
|
||||||
|
blob to non-init memory prior to calling unflatten_device_tree().
|
||||||
|
|
||||||
|
Example:
|
||||||
|
#arch/x86/platform/ce4100/Makefile
|
||||||
|
clean-files := *dtb.S
|
||||||
|
|
||||||
|
DTC_FLAGS := -p 1024
|
||||||
|
obj-y += foo.dtb.o
|
||||||
|
|
||||||
|
$(obj)/%.dtb: $(src)/%.dts
|
||||||
|
$(call cmd,dtc)
|
||||||
|
|
||||||
--- 6.7 Custom kbuild commands
|
--- 6.7 Custom kbuild commands
|
||||||
|
|
||||||
|
|||||||
@@ -65,18 +65,21 @@ Install kexec-tools
|
|||||||
|
|
||||||
2) Download the kexec-tools user-space package from the following URL:
|
2) Download the kexec-tools user-space package from the following URL:
|
||||||
|
|
||||||
http://www.kernel.org/pub/linux/kernel/people/horms/kexec-tools/kexec-tools.tar.gz
|
http://kernel.org/pub/linux/utils/kernel/kexec/kexec-tools.tar.gz
|
||||||
|
|
||||||
This is a symlink to the latest version.
|
This is a symlink to the latest version.
|
||||||
|
|
||||||
The latest kexec-tools git tree is available at:
|
The latest kexec-tools git tree is available at:
|
||||||
|
|
||||||
git://git.kernel.org/pub/scm/linux/kernel/git/horms/kexec-tools.git
|
git://git.kernel.org/pub/scm/utils/kernel/kexec/kexec-tools.git
|
||||||
or
|
and
|
||||||
http://www.kernel.org/git/?p=linux/kernel/git/horms/kexec-tools.git
|
http://www.kernel.org/pub/scm/utils/kernel/kexec/kexec-tools.git
|
||||||
|
|
||||||
|
There is also a gitweb interface available at
|
||||||
|
http://www.kernel.org/git/?p=utils/kernel/kexec/kexec-tools.git
|
||||||
|
|
||||||
More information about kexec-tools can be found at
|
More information about kexec-tools can be found at
|
||||||
http://www.kernel.org/pub/linux/kernel/people/horms/kexec-tools/README.html
|
http://www.kernel.org/pub/linux/utils/kernel/kexec/README.html
|
||||||
|
|
||||||
3) Unpack the tarball with the tar command, as follows:
|
3) Unpack the tarball with the tar command, as follows:
|
||||||
|
|
||||||
@@ -439,6 +442,6 @@ To Do
|
|||||||
Contact
|
Contact
|
||||||
=======
|
=======
|
||||||
|
|
||||||
Vivek Goyal (vgoyal@in.ibm.com)
|
Vivek Goyal (vgoyal@redhat.com)
|
||||||
Maneesh Soni (maneesh@in.ibm.com)
|
Maneesh Soni (maneesh@in.ibm.com)
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
@@ -403,6 +398,10 @@ and is between 256 and 4096 characters. It is defined in the file
|
|||||||
bttv.pll= See Documentation/video4linux/bttv/Insmod-options
|
bttv.pll= See Documentation/video4linux/bttv/Insmod-options
|
||||||
bttv.tuner= and Documentation/video4linux/bttv/CARDLIST
|
bttv.tuner= and Documentation/video4linux/bttv/CARDLIST
|
||||||
|
|
||||||
|
bulk_remove=off [PPC] This parameter disables the use of the pSeries
|
||||||
|
firmware feature for flushing multiple hpte entries
|
||||||
|
at a time.
|
||||||
|
|
||||||
c101= [NET] Moxa C101 synchronous serial card
|
c101= [NET] Moxa C101 synchronous serial card
|
||||||
|
|
||||||
cachesize= [BUGS=X86-32] Override level 2 CPU cache size detection.
|
cachesize= [BUGS=X86-32] Override level 2 CPU cache size detection.
|
||||||
@@ -655,11 +654,6 @@ and is between 256 and 4096 characters. It is defined in the file
|
|||||||
|
|
||||||
dscc4.setup= [NET]
|
dscc4.setup= [NET]
|
||||||
|
|
||||||
dynamic_printk Enables pr_debug()/dev_dbg() calls if
|
|
||||||
CONFIG_DYNAMIC_PRINTK_DEBUG has been enabled.
|
|
||||||
These can also be switched on/off via
|
|
||||||
<debugfs>/dynamic_printk/modules
|
|
||||||
|
|
||||||
earlycon= [KNL] Output early console device and options.
|
earlycon= [KNL] Output early console device and options.
|
||||||
uart[8250],io,<addr>[,options]
|
uart[8250],io,<addr>[,options]
|
||||||
uart[8250],mmio,<addr>[,options]
|
uart[8250],mmio,<addr>[,options]
|
||||||
@@ -884,6 +878,7 @@ and is between 256 and 4096 characters. It is defined in the file
|
|||||||
controller
|
controller
|
||||||
i8042.nopnp [HW] Don't use ACPIPnP / PnPBIOS to discover KBD/AUX
|
i8042.nopnp [HW] Don't use ACPIPnP / PnPBIOS to discover KBD/AUX
|
||||||
controllers
|
controllers
|
||||||
|
i8042.notimeout [HW] Ignore timeout condition signalled by conroller
|
||||||
i8042.reset [HW] Reset the controller during init and cleanup
|
i8042.reset [HW] Reset the controller during init and cleanup
|
||||||
i8042.unlock [HW] Unlock (ignore) the keylock
|
i8042.unlock [HW] Unlock (ignore) the keylock
|
||||||
|
|
||||||
@@ -1490,6 +1485,10 @@ and is between 256 and 4096 characters. It is defined in the file
|
|||||||
mtdparts= [MTD]
|
mtdparts= [MTD]
|
||||||
See drivers/mtd/cmdlinepart.c.
|
See drivers/mtd/cmdlinepart.c.
|
||||||
|
|
||||||
|
multitce=off [PPC] This parameter disables the use of the pSeries
|
||||||
|
firmware feature for updating multiple TCE entries
|
||||||
|
at a time.
|
||||||
|
|
||||||
onenand.bdry= [HW,MTD] Flex-OneNAND Boundary Configuration
|
onenand.bdry= [HW,MTD] Flex-OneNAND Boundary Configuration
|
||||||
|
|
||||||
Format: [die0_boundary][,die0_lock][,die1_boundary][,die1_lock]
|
Format: [die0_boundary][,die0_lock][,die1_boundary][,die1_lock]
|
||||||
@@ -1701,6 +1700,9 @@ and is between 256 and 4096 characters. It is defined in the file
|
|||||||
|
|
||||||
no-kvmclock [X86,KVM] Disable paravirtualized KVM clock driver
|
no-kvmclock [X86,KVM] Disable paravirtualized KVM clock driver
|
||||||
|
|
||||||
|
no-kvmapf [X86,KVM] Disable paravirtualized asynchronous page
|
||||||
|
fault handling.
|
||||||
|
|
||||||
nolapic [X86-32,APIC] Do not enable or use the local APIC.
|
nolapic [X86-32,APIC] Do not enable or use the local APIC.
|
||||||
|
|
||||||
nolapic_timer [X86-32,APIC] Do not use the local APIC timer.
|
nolapic_timer [X86-32,APIC] Do not use the local APIC timer.
|
||||||
|
|||||||
145
Documentation/keys-trusted-encrypted.txt
Normal file
145
Documentation/keys-trusted-encrypted.txt
Normal file
@@ -0,0 +1,145 @@
|
|||||||
|
Trusted and Encrypted Keys
|
||||||
|
|
||||||
|
Trusted and Encrypted Keys are two new key types added to the existing kernel
|
||||||
|
key ring service. Both of these new types are variable length symmetic keys,
|
||||||
|
and in both cases all keys are created in the kernel, and user space sees,
|
||||||
|
stores, and loads only encrypted blobs. Trusted Keys require the availability
|
||||||
|
of a Trusted Platform Module (TPM) chip for greater security, while Encrypted
|
||||||
|
Keys can be used on any system. All user level blobs, are displayed and loaded
|
||||||
|
in hex ascii for convenience, and are integrity verified.
|
||||||
|
|
||||||
|
Trusted Keys use a TPM both to generate and to seal the keys. Keys are sealed
|
||||||
|
under a 2048 bit RSA key in the TPM, and optionally sealed to specified PCR
|
||||||
|
(integrity measurement) values, and only unsealed by the TPM, if PCRs and blob
|
||||||
|
integrity verifications match. A loaded Trusted Key can be updated with new
|
||||||
|
(future) PCR values, so keys are easily migrated to new pcr values, such as
|
||||||
|
when the kernel and initramfs are updated. The same key can have many saved
|
||||||
|
blobs under different PCR values, so multiple boots are easily supported.
|
||||||
|
|
||||||
|
By default, trusted keys are sealed under the SRK, which has the default
|
||||||
|
authorization value (20 zeros). This can be set at takeownership time with the
|
||||||
|
trouser's utility: "tpm_takeownership -u -z".
|
||||||
|
|
||||||
|
Usage:
|
||||||
|
keyctl add trusted name "new keylen [options]" ring
|
||||||
|
keyctl add trusted name "load hex_blob [pcrlock=pcrnum]" ring
|
||||||
|
keyctl update key "update [options]"
|
||||||
|
keyctl print keyid
|
||||||
|
|
||||||
|
options:
|
||||||
|
keyhandle= ascii hex value of sealing key default 0x40000000 (SRK)
|
||||||
|
keyauth= ascii hex auth for sealing key default 0x00...i
|
||||||
|
(40 ascii zeros)
|
||||||
|
blobauth= ascii hex auth for sealed data default 0x00...
|
||||||
|
(40 ascii zeros)
|
||||||
|
blobauth= ascii hex auth for sealed data default 0x00...
|
||||||
|
(40 ascii zeros)
|
||||||
|
pcrinfo= ascii hex of PCR_INFO or PCR_INFO_LONG (no default)
|
||||||
|
pcrlock= pcr number to be extended to "lock" blob
|
||||||
|
migratable= 0|1 indicating permission to reseal to new PCR values,
|
||||||
|
default 1 (resealing allowed)
|
||||||
|
|
||||||
|
"keyctl print" returns an ascii hex copy of the sealed key, which is in standard
|
||||||
|
TPM_STORED_DATA format. The key length for new keys are always in bytes.
|
||||||
|
Trusted Keys can be 32 - 128 bytes (256 - 1024 bits), the upper limit is to fit
|
||||||
|
within the 2048 bit SRK (RSA) keylength, with all necessary structure/padding.
|
||||||
|
|
||||||
|
Encrypted keys do not depend on a TPM, and are faster, as they use AES for
|
||||||
|
encryption/decryption. New keys are created from kernel generated random
|
||||||
|
numbers, and are encrypted/decrypted using a specified 'master' key. The
|
||||||
|
'master' key can either be a trusted-key or user-key type. The main
|
||||||
|
disadvantage of encrypted keys is that if they are not rooted in a trusted key,
|
||||||
|
they are only as secure as the user key encrypting them. The master user key
|
||||||
|
should therefore be loaded in as secure a way as possible, preferably early in
|
||||||
|
boot.
|
||||||
|
|
||||||
|
Usage:
|
||||||
|
keyctl add encrypted name "new key-type:master-key-name keylen" ring
|
||||||
|
keyctl add encrypted name "load hex_blob" ring
|
||||||
|
keyctl update keyid "update key-type:master-key-name"
|
||||||
|
|
||||||
|
where 'key-type' is either 'trusted' or 'user'.
|
||||||
|
|
||||||
|
Examples of trusted and encrypted key usage:
|
||||||
|
|
||||||
|
Create and save a trusted key named "kmk" of length 32 bytes:
|
||||||
|
|
||||||
|
$ keyctl add trusted kmk "new 32" @u
|
||||||
|
440502848
|
||||||
|
|
||||||
|
$ keyctl show
|
||||||
|
Session Keyring
|
||||||
|
-3 --alswrv 500 500 keyring: _ses
|
||||||
|
97833714 --alswrv 500 -1 \_ keyring: _uid.500
|
||||||
|
440502848 --alswrv 500 500 \_ trusted: kmk
|
||||||
|
|
||||||
|
$ keyctl print 440502848
|
||||||
|
0101000000000000000001005d01b7e3f4a6be5709930f3b70a743cbb42e0cc95e18e915
|
||||||
|
3f60da455bbf1144ad12e4f92b452f966929f6105fd29ca28e4d4d5a031d068478bacb0b
|
||||||
|
27351119f822911b0a11ba3d3498ba6a32e50dac7f32894dd890eb9ad578e4e292c83722
|
||||||
|
a52e56a097e6a68b3f56f7a52ece0cdccba1eb62cad7d817f6dc58898b3ac15f36026fec
|
||||||
|
d568bd4a706cb60bb37be6d8f1240661199d640b66fb0fe3b079f97f450b9ef9c22c6d5d
|
||||||
|
dd379f0facd1cd020281dfa3c70ba21a3fa6fc2471dc6d13ecf8298b946f65345faa5ef0
|
||||||
|
f1f8fff03ad0acb083725535636addb08d73dedb9832da198081e5deae84bfaf0409c22b
|
||||||
|
e4a8aea2b607ec96931e6f4d4fe563ba
|
||||||
|
|
||||||
|
$ keyctl pipe 440502848 > kmk.blob
|
||||||
|
|
||||||
|
Load a trusted key from the saved blob:
|
||||||
|
|
||||||
|
$ keyctl add trusted kmk "load `cat kmk.blob`" @u
|
||||||
|
268728824
|
||||||
|
|
||||||
|
$ keyctl print 268728824
|
||||||
|
0101000000000000000001005d01b7e3f4a6be5709930f3b70a743cbb42e0cc95e18e915
|
||||||
|
3f60da455bbf1144ad12e4f92b452f966929f6105fd29ca28e4d4d5a031d068478bacb0b
|
||||||
|
27351119f822911b0a11ba3d3498ba6a32e50dac7f32894dd890eb9ad578e4e292c83722
|
||||||
|
a52e56a097e6a68b3f56f7a52ece0cdccba1eb62cad7d817f6dc58898b3ac15f36026fec
|
||||||
|
d568bd4a706cb60bb37be6d8f1240661199d640b66fb0fe3b079f97f450b9ef9c22c6d5d
|
||||||
|
dd379f0facd1cd020281dfa3c70ba21a3fa6fc2471dc6d13ecf8298b946f65345faa5ef0
|
||||||
|
f1f8fff03ad0acb083725535636addb08d73dedb9832da198081e5deae84bfaf0409c22b
|
||||||
|
e4a8aea2b607ec96931e6f4d4fe563ba
|
||||||
|
|
||||||
|
Reseal a trusted key under new pcr values:
|
||||||
|
|
||||||
|
$ keyctl update 268728824 "update pcrinfo=`cat pcr.blob`"
|
||||||
|
$ keyctl print 268728824
|
||||||
|
010100000000002c0002800093c35a09b70fff26e7a98ae786c641e678ec6ffb6b46d805
|
||||||
|
77c8a6377aed9d3219c6dfec4b23ffe3000001005d37d472ac8a44023fbb3d18583a4f73
|
||||||
|
d3a076c0858f6f1dcaa39ea0f119911ff03f5406df4f7f27f41da8d7194f45c9f4e00f2e
|
||||||
|
df449f266253aa3f52e55c53de147773e00f0f9aca86c64d94c95382265968c354c5eab4
|
||||||
|
9638c5ae99c89de1e0997242edfb0b501744e11ff9762dfd951cffd93227cc513384e7e6
|
||||||
|
e782c29435c7ec2edafaa2f4c1fe6e7a781b59549ff5296371b42133777dcc5b8b971610
|
||||||
|
94bc67ede19e43ddb9dc2baacad374a36feaf0314d700af0a65c164b7082401740e489c9
|
||||||
|
7ef6a24defe4846104209bf0c3eced7fa1a672ed5b125fc9d8cd88b476a658a4434644ef
|
||||||
|
df8ae9a178e9f83ba9f08d10fa47e4226b98b0702f06b3b8
|
||||||
|
|
||||||
|
Create and save an encrypted key "evm" using the above trusted key "kmk":
|
||||||
|
|
||||||
|
$ keyctl add encrypted evm "new trusted:kmk 32" @u
|
||||||
|
159771175
|
||||||
|
|
||||||
|
$ keyctl print 159771175
|
||||||
|
trusted:kmk 32 2375725ad57798846a9bbd240de8906f006e66c03af53b1b382dbbc55
|
||||||
|
be2a44616e4959430436dc4f2a7a9659aa60bb4652aeb2120f149ed197c564e024717c64
|
||||||
|
5972dcb82ab2dde83376d82b2e3c09ffc
|
||||||
|
|
||||||
|
$ keyctl pipe 159771175 > evm.blob
|
||||||
|
|
||||||
|
Load an encrypted key "evm" from saved blob:
|
||||||
|
|
||||||
|
$ keyctl add encrypted evm "load `cat evm.blob`" @u
|
||||||
|
831684262
|
||||||
|
|
||||||
|
$ keyctl print 831684262
|
||||||
|
trusted:kmk 32 2375725ad57798846a9bbd240de8906f006e66c03af53b1b382dbbc55
|
||||||
|
be2a44616e4959430436dc4f2a7a9659aa60bb4652aeb2120f149ed197c564e024717c64
|
||||||
|
5972dcb82ab2dde83376d82b2e3c09ffc
|
||||||
|
|
||||||
|
|
||||||
|
The initial consumer of trusted keys is EVM, which at boot time needs a high
|
||||||
|
quality symmetric key for HMAC protection of file metadata. The use of a
|
||||||
|
trusted key provides strong guarantees that the EVM key has not been
|
||||||
|
compromised by a user level problem, and when sealed to specific boot PCR
|
||||||
|
values, protects against boot and offline attacks. Other uses for trusted and
|
||||||
|
encrypted keys, such as for disk and file encryption are anticipated.
|
||||||
@@ -391,8 +391,8 @@ bugme-new 메일링 리스트나(새로운 버그 리포트들만이 이곳에
|
|||||||
bugme-janitor 메일링 리스트(bugzilla에 모든 변화들이 여기서 메일로 전해진다)
|
bugme-janitor 메일링 리스트(bugzilla에 모든 변화들이 여기서 메일로 전해진다)
|
||||||
에 등록하면 된다.
|
에 등록하면 된다.
|
||||||
|
|
||||||
http://lists.osdl.org/mailman/listinfo/bugme-new
|
https://lists.linux-foundation.org/mailman/listinfo/bugme-new
|
||||||
http://lists.osdl.org/mailman/listinfo/bugme-janitors
|
https://lists.linux-foundation.org/mailman/listinfo/bugme-janitors
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -598,7 +598,7 @@ a 5-byte jump instruction. So there are several limitations.
|
|||||||
a) The instructions in DCR must be relocatable.
|
a) The instructions in DCR must be relocatable.
|
||||||
b) The instructions in DCR must not include a call instruction.
|
b) The instructions in DCR must not include a call instruction.
|
||||||
c) JTPR must not be targeted by any jump or call instruction.
|
c) JTPR must not be targeted by any jump or call instruction.
|
||||||
d) DCR must not straddle the border betweeen functions.
|
d) DCR must not straddle the border between functions.
|
||||||
|
|
||||||
Anyway, these limitations are checked by the in-kernel instruction
|
Anyway, these limitations are checked by the in-kernel instruction
|
||||||
decoder, so you don't need to worry about that.
|
decoder, so you don't need to worry about that.
|
||||||
|
|||||||
@@ -874,7 +874,7 @@ Possible values are:
|
|||||||
- KVM_MP_STATE_HALTED: the vcpu has executed a HLT instruction and
|
- KVM_MP_STATE_HALTED: the vcpu has executed a HLT instruction and
|
||||||
is waiting for an interrupt
|
is waiting for an interrupt
|
||||||
- KVM_MP_STATE_SIPI_RECEIVED: the vcpu has just received a SIPI (vector
|
- KVM_MP_STATE_SIPI_RECEIVED: the vcpu has just received a SIPI (vector
|
||||||
accesible via KVM_GET_VCPU_EVENTS)
|
accessible via KVM_GET_VCPU_EVENTS)
|
||||||
|
|
||||||
This ioctl is only useful after KVM_CREATE_IRQCHIP. Without an in-kernel
|
This ioctl is only useful after KVM_CREATE_IRQCHIP. Without an in-kernel
|
||||||
irqchip, the multiprocessing state must be maintained by userspace.
|
irqchip, the multiprocessing state must be maintained by userspace.
|
||||||
@@ -1085,6 +1085,184 @@ of 4 instructions that make up a hypercall.
|
|||||||
If any additional field gets added to this structure later on, a bit for that
|
If any additional field gets added to this structure later on, a bit for that
|
||||||
additional piece of information will be set in the flags bitmap.
|
additional piece of information will be set in the flags bitmap.
|
||||||
|
|
||||||
|
4.47 KVM_ASSIGN_PCI_DEVICE
|
||||||
|
|
||||||
|
Capability: KVM_CAP_DEVICE_ASSIGNMENT
|
||||||
|
Architectures: x86 ia64
|
||||||
|
Type: vm ioctl
|
||||||
|
Parameters: struct kvm_assigned_pci_dev (in)
|
||||||
|
Returns: 0 on success, -1 on error
|
||||||
|
|
||||||
|
Assigns a host PCI device to the VM.
|
||||||
|
|
||||||
|
struct kvm_assigned_pci_dev {
|
||||||
|
__u32 assigned_dev_id;
|
||||||
|
__u32 busnr;
|
||||||
|
__u32 devfn;
|
||||||
|
__u32 flags;
|
||||||
|
__u32 segnr;
|
||||||
|
union {
|
||||||
|
__u32 reserved[11];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
The PCI device is specified by the triple segnr, busnr, and devfn.
|
||||||
|
Identification in succeeding service requests is done via assigned_dev_id. The
|
||||||
|
following flags are specified:
|
||||||
|
|
||||||
|
/* Depends on KVM_CAP_IOMMU */
|
||||||
|
#define KVM_DEV_ASSIGN_ENABLE_IOMMU (1 << 0)
|
||||||
|
|
||||||
|
4.48 KVM_DEASSIGN_PCI_DEVICE
|
||||||
|
|
||||||
|
Capability: KVM_CAP_DEVICE_DEASSIGNMENT
|
||||||
|
Architectures: x86 ia64
|
||||||
|
Type: vm ioctl
|
||||||
|
Parameters: struct kvm_assigned_pci_dev (in)
|
||||||
|
Returns: 0 on success, -1 on error
|
||||||
|
|
||||||
|
Ends PCI device assignment, releasing all associated resources.
|
||||||
|
|
||||||
|
See KVM_CAP_DEVICE_ASSIGNMENT for the data structure. Only assigned_dev_id is
|
||||||
|
used in kvm_assigned_pci_dev to identify the device.
|
||||||
|
|
||||||
|
4.49 KVM_ASSIGN_DEV_IRQ
|
||||||
|
|
||||||
|
Capability: KVM_CAP_ASSIGN_DEV_IRQ
|
||||||
|
Architectures: x86 ia64
|
||||||
|
Type: vm ioctl
|
||||||
|
Parameters: struct kvm_assigned_irq (in)
|
||||||
|
Returns: 0 on success, -1 on error
|
||||||
|
|
||||||
|
Assigns an IRQ to a passed-through device.
|
||||||
|
|
||||||
|
struct kvm_assigned_irq {
|
||||||
|
__u32 assigned_dev_id;
|
||||||
|
__u32 host_irq;
|
||||||
|
__u32 guest_irq;
|
||||||
|
__u32 flags;
|
||||||
|
union {
|
||||||
|
struct {
|
||||||
|
__u32 addr_lo;
|
||||||
|
__u32 addr_hi;
|
||||||
|
__u32 data;
|
||||||
|
} guest_msi;
|
||||||
|
__u32 reserved[12];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
The following flags are defined:
|
||||||
|
|
||||||
|
#define KVM_DEV_IRQ_HOST_INTX (1 << 0)
|
||||||
|
#define KVM_DEV_IRQ_HOST_MSI (1 << 1)
|
||||||
|
#define KVM_DEV_IRQ_HOST_MSIX (1 << 2)
|
||||||
|
|
||||||
|
#define KVM_DEV_IRQ_GUEST_INTX (1 << 8)
|
||||||
|
#define KVM_DEV_IRQ_GUEST_MSI (1 << 9)
|
||||||
|
#define KVM_DEV_IRQ_GUEST_MSIX (1 << 10)
|
||||||
|
|
||||||
|
It is not valid to specify multiple types per host or guest IRQ. However, the
|
||||||
|
IRQ type of host and guest can differ or can even be null.
|
||||||
|
|
||||||
|
4.50 KVM_DEASSIGN_DEV_IRQ
|
||||||
|
|
||||||
|
Capability: KVM_CAP_ASSIGN_DEV_IRQ
|
||||||
|
Architectures: x86 ia64
|
||||||
|
Type: vm ioctl
|
||||||
|
Parameters: struct kvm_assigned_irq (in)
|
||||||
|
Returns: 0 on success, -1 on error
|
||||||
|
|
||||||
|
Ends an IRQ assignment to a passed-through device.
|
||||||
|
|
||||||
|
See KVM_ASSIGN_DEV_IRQ for the data structure. The target device is specified
|
||||||
|
by assigned_dev_id, flags must correspond to the IRQ type specified on
|
||||||
|
KVM_ASSIGN_DEV_IRQ. Partial deassignment of host or guest IRQ is allowed.
|
||||||
|
|
||||||
|
4.51 KVM_SET_GSI_ROUTING
|
||||||
|
|
||||||
|
Capability: KVM_CAP_IRQ_ROUTING
|
||||||
|
Architectures: x86 ia64
|
||||||
|
Type: vm ioctl
|
||||||
|
Parameters: struct kvm_irq_routing (in)
|
||||||
|
Returns: 0 on success, -1 on error
|
||||||
|
|
||||||
|
Sets the GSI routing table entries, overwriting any previously set entries.
|
||||||
|
|
||||||
|
struct kvm_irq_routing {
|
||||||
|
__u32 nr;
|
||||||
|
__u32 flags;
|
||||||
|
struct kvm_irq_routing_entry entries[0];
|
||||||
|
};
|
||||||
|
|
||||||
|
No flags are specified so far, the corresponding field must be set to zero.
|
||||||
|
|
||||||
|
struct kvm_irq_routing_entry {
|
||||||
|
__u32 gsi;
|
||||||
|
__u32 type;
|
||||||
|
__u32 flags;
|
||||||
|
__u32 pad;
|
||||||
|
union {
|
||||||
|
struct kvm_irq_routing_irqchip irqchip;
|
||||||
|
struct kvm_irq_routing_msi msi;
|
||||||
|
__u32 pad[8];
|
||||||
|
} u;
|
||||||
|
};
|
||||||
|
|
||||||
|
/* gsi routing entry types */
|
||||||
|
#define KVM_IRQ_ROUTING_IRQCHIP 1
|
||||||
|
#define KVM_IRQ_ROUTING_MSI 2
|
||||||
|
|
||||||
|
No flags are specified so far, the corresponding field must be set to zero.
|
||||||
|
|
||||||
|
struct kvm_irq_routing_irqchip {
|
||||||
|
__u32 irqchip;
|
||||||
|
__u32 pin;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct kvm_irq_routing_msi {
|
||||||
|
__u32 address_lo;
|
||||||
|
__u32 address_hi;
|
||||||
|
__u32 data;
|
||||||
|
__u32 pad;
|
||||||
|
};
|
||||||
|
|
||||||
|
4.52 KVM_ASSIGN_SET_MSIX_NR
|
||||||
|
|
||||||
|
Capability: KVM_CAP_DEVICE_MSIX
|
||||||
|
Architectures: x86 ia64
|
||||||
|
Type: vm ioctl
|
||||||
|
Parameters: struct kvm_assigned_msix_nr (in)
|
||||||
|
Returns: 0 on success, -1 on error
|
||||||
|
|
||||||
|
Set the number of MSI-X interrupts for an assigned device. This service can
|
||||||
|
only be called once in the lifetime of an assigned device.
|
||||||
|
|
||||||
|
struct kvm_assigned_msix_nr {
|
||||||
|
__u32 assigned_dev_id;
|
||||||
|
__u16 entry_nr;
|
||||||
|
__u16 padding;
|
||||||
|
};
|
||||||
|
|
||||||
|
#define KVM_MAX_MSIX_PER_DEV 256
|
||||||
|
|
||||||
|
4.53 KVM_ASSIGN_SET_MSIX_ENTRY
|
||||||
|
|
||||||
|
Capability: KVM_CAP_DEVICE_MSIX
|
||||||
|
Architectures: x86 ia64
|
||||||
|
Type: vm ioctl
|
||||||
|
Parameters: struct kvm_assigned_msix_entry (in)
|
||||||
|
Returns: 0 on success, -1 on error
|
||||||
|
|
||||||
|
Specifies the routing of an MSI-X assigned device interrupt to a GSI. Setting
|
||||||
|
the GSI vector to zero means disabling the interrupt.
|
||||||
|
|
||||||
|
struct kvm_assigned_msix_entry {
|
||||||
|
__u32 assigned_dev_id;
|
||||||
|
__u32 gsi;
|
||||||
|
__u16 entry; /* The index of entry in the MSI-X table */
|
||||||
|
__u16 padding[3];
|
||||||
|
};
|
||||||
|
|
||||||
5. The kvm_run structure
|
5. The kvm_run structure
|
||||||
|
|
||||||
Application code obtains a pointer to the kvm_run structure by
|
Application code obtains a pointer to the kvm_run structure by
|
||||||
|
|||||||
@@ -36,6 +36,9 @@ KVM_FEATURE_MMU_OP || 2 || deprecated.
|
|||||||
KVM_FEATURE_CLOCKSOURCE2 || 3 || kvmclock available at msrs
|
KVM_FEATURE_CLOCKSOURCE2 || 3 || kvmclock available at msrs
|
||||||
|| || 0x4b564d00 and 0x4b564d01
|
|| || 0x4b564d00 and 0x4b564d01
|
||||||
------------------------------------------------------------------------------
|
------------------------------------------------------------------------------
|
||||||
|
KVM_FEATURE_ASYNC_PF || 4 || async pf can be enabled by
|
||||||
|
|| || writing to msr 0x4b564d02
|
||||||
|
------------------------------------------------------------------------------
|
||||||
KVM_FEATURE_CLOCKSOURCE_STABLE_BIT || 24 || host will warn if no guest-side
|
KVM_FEATURE_CLOCKSOURCE_STABLE_BIT || 24 || host will warn if no guest-side
|
||||||
|| || per-cpu warps are expected in
|
|| || per-cpu warps are expected in
|
||||||
|| || kvmclock.
|
|| || kvmclock.
|
||||||
|
|||||||
@@ -3,7 +3,6 @@ Glauber Costa <glommer@redhat.com>, Red Hat Inc, 2010
|
|||||||
=====================================================
|
=====================================================
|
||||||
|
|
||||||
KVM makes use of some custom MSRs to service some requests.
|
KVM makes use of some custom MSRs to service some requests.
|
||||||
At present, this facility is only used by kvmclock.
|
|
||||||
|
|
||||||
Custom MSRs have a range reserved for them, that goes from
|
Custom MSRs have a range reserved for them, that goes from
|
||||||
0x4b564d00 to 0x4b564dff. There are MSRs outside this area,
|
0x4b564d00 to 0x4b564dff. There are MSRs outside this area,
|
||||||
@@ -151,3 +150,38 @@ MSR_KVM_SYSTEM_TIME: 0x12
|
|||||||
return PRESENT;
|
return PRESENT;
|
||||||
} else
|
} else
|
||||||
return NON_PRESENT;
|
return NON_PRESENT;
|
||||||
|
|
||||||
|
MSR_KVM_ASYNC_PF_EN: 0x4b564d02
|
||||||
|
data: Bits 63-6 hold 64-byte aligned physical address of a
|
||||||
|
64 byte memory area which must be in guest RAM and must be
|
||||||
|
zeroed. Bits 5-2 are reserved and should be zero. Bit 0 is 1
|
||||||
|
when asynchronous page faults are enabled on the vcpu 0 when
|
||||||
|
disabled. Bit 2 is 1 if asynchronous page faults can be injected
|
||||||
|
when vcpu is in cpl == 0.
|
||||||
|
|
||||||
|
First 4 byte of 64 byte memory location will be written to by
|
||||||
|
the hypervisor at the time of asynchronous page fault (APF)
|
||||||
|
injection to indicate type of asynchronous page fault. Value
|
||||||
|
of 1 means that the page referred to by the page fault is not
|
||||||
|
present. Value 2 means that the page is now available. Disabling
|
||||||
|
interrupt inhibits APFs. Guest must not enable interrupt
|
||||||
|
before the reason is read, or it may be overwritten by another
|
||||||
|
APF. Since APF uses the same exception vector as regular page
|
||||||
|
fault guest must reset the reason to 0 before it does
|
||||||
|
something that can generate normal page fault. If during page
|
||||||
|
fault APF reason is 0 it means that this is regular page
|
||||||
|
fault.
|
||||||
|
|
||||||
|
During delivery of type 1 APF cr2 contains a token that will
|
||||||
|
be used to notify a guest when missing page becomes
|
||||||
|
available. When page becomes available type 2 APF is sent with
|
||||||
|
cr2 set to the token associated with the page. There is special
|
||||||
|
kind of token 0xffffffff which tells vcpu that it should wake
|
||||||
|
up all processes waiting for APFs and no individual type 2 APFs
|
||||||
|
will be sent.
|
||||||
|
|
||||||
|
If APF is disabled while there are outstanding APFs, they will
|
||||||
|
not be delivered.
|
||||||
|
|
||||||
|
Currently type 2 APF will be always delivered on the same vcpu as
|
||||||
|
type 1 was, but guest should not rely on that.
|
||||||
|
|||||||
@@ -111,8 +111,11 @@ Running Lguest:
|
|||||||
|
|
||||||
Then use --tunnet=bridge:lg0 when launching the guest.
|
Then use --tunnet=bridge:lg0 when launching the guest.
|
||||||
|
|
||||||
See http://linux-net.osdl.org/index.php/Bridge for general information
|
See:
|
||||||
on how to get bridging working.
|
|
||||||
|
http://www.linuxfoundation.org/collaborate/workgroups/networking/bridge
|
||||||
|
|
||||||
|
for general information on how to get bridging to work.
|
||||||
|
|
||||||
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
|
||||||
|
|
||||||
|
|||||||
@@ -150,7 +150,7 @@ NBD_REPLY_MAGIC 0x96744668 nbd_reply include/linux/nbd.h
|
|||||||
STL_BOARDMAGIC 0xa2267f52 stlbrd include/linux/stallion.h
|
STL_BOARDMAGIC 0xa2267f52 stlbrd include/linux/stallion.h
|
||||||
ENI155_MAGIC 0xa54b872d midway_eprom drivers/atm/eni.h
|
ENI155_MAGIC 0xa54b872d midway_eprom drivers/atm/eni.h
|
||||||
SCI_MAGIC 0xbabeface gs_port drivers/char/sh-sci.h
|
SCI_MAGIC 0xbabeface gs_port drivers/char/sh-sci.h
|
||||||
CODA_MAGIC 0xC0DAC0DA coda_file_info include/linux/coda_fs_i.h
|
CODA_MAGIC 0xC0DAC0DA coda_file_info fs/coda/coda_fs_i.h
|
||||||
DPMEM_MAGIC 0xc0ffee11 gdt_pci_sram drivers/scsi/gdth.h
|
DPMEM_MAGIC 0xc0ffee11 gdt_pci_sram drivers/scsi/gdth.h
|
||||||
STLI_PORTMAGIC 0xe671c7a1 stliport include/linux/istallion.h
|
STLI_PORTMAGIC 0xe671c7a1 stliport include/linux/istallion.h
|
||||||
YAM_MAGIC 0xF10A7654 yam_port drivers/net/hamradio/yam.c
|
YAM_MAGIC 0xF10A7654 yam_port drivers/net/hamradio/yam.c
|
||||||
|
|||||||
@@ -39,8 +39,9 @@ INSTALL_HDR_PATH indicates where to install the headers. It defaults to
|
|||||||
The command "make headers_install_all" exports headers for all architectures
|
The command "make headers_install_all" exports headers for all architectures
|
||||||
simultaneously. (This is mostly of interest to distribution maintainers,
|
simultaneously. (This is mostly of interest to distribution maintainers,
|
||||||
who create an architecture-independent tarball from the resulting include
|
who create an architecture-independent tarball from the resulting include
|
||||||
directory.) Remember to provide the appropriate linux/asm directory via "mv"
|
directory.) You also can use HDR_ARCH_LIST to specify list of architectures.
|
||||||
or "ln -s" before building a C library with headers exported this way.
|
Remember to provide the appropriate linux/asm directory via "mv" or "ln -s"
|
||||||
|
before building a C library with headers exported this way.
|
||||||
|
|
||||||
The kernel header export infrastructure is maintained by David Woodhouse
|
The kernel header export infrastructure is maintained by David Woodhouse
|
||||||
<dwmw2@infradead.org>.
|
<dwmw2@infradead.org>.
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
In order to use the Ethernet bridging functionality, you'll need the
|
In order to use the Ethernet bridging functionality, you'll need the
|
||||||
userspace tools. These programs and documentation are available
|
userspace tools. These programs and documentation are available
|
||||||
at http://www.linux-foundation.org/en/Net:Bridge. The download page is
|
at http://www.linuxfoundation.org/en/Net:Bridge. The download page is
|
||||||
http://prdownloads.sourceforge.net/bridge.
|
http://prdownloads.sourceforge.net/bridge.
|
||||||
|
|
||||||
If you still have questions, don't hesitate to post to the mailing list
|
If you still have questions, don't hesitate to post to the mailing list
|
||||||
(more info http://lists.osdl.org/mailman/listinfo/bridge).
|
(more info https://lists.linux-foundation.org/mailman/listinfo/bridge).
|
||||||
|
|
||||||
|
|||||||
@@ -32,7 +32,7 @@ the physical hardware, both with regard to SPI and to GPIOs.
|
|||||||
This function is called by the CAIF SPI interface to give
|
This function is called by the CAIF SPI interface to give
|
||||||
you a chance to set up your hardware to be ready to receive
|
you a chance to set up your hardware to be ready to receive
|
||||||
a stream of data from the master. The xfer structure contains
|
a stream of data from the master. The xfer structure contains
|
||||||
both physical and logical adresses, as well as the total length
|
both physical and logical addresses, as well as the total length
|
||||||
of the transfer in both directions.The dev parameter can be used
|
of the transfer in both directions.The dev parameter can be used
|
||||||
to map to different CAIF SPI slave devices.
|
to map to different CAIF SPI slave devices.
|
||||||
|
|
||||||
|
|||||||
@@ -38,11 +38,11 @@ The Linux DCCP implementation does not currently support all the features that a
|
|||||||
specified in RFCs 4340...42.
|
specified in RFCs 4340...42.
|
||||||
|
|
||||||
The known bugs are at:
|
The known bugs are at:
|
||||||
http://linux-net.osdl.org/index.php/TODO#DCCP
|
http://www.linuxfoundation.org/collaborate/workgroups/networking/todo#DCCP
|
||||||
|
|
||||||
For more up-to-date versions of the DCCP implementation, please consider using
|
For more up-to-date versions of the DCCP implementation, please consider using
|
||||||
the experimental DCCP test tree; instructions for checking this out are on:
|
the experimental DCCP test tree; instructions for checking this out are on:
|
||||||
http://linux-net.osdl.org/index.php/DCCP_Testing#Experimental_DCCP_source_tree
|
http://www.linuxfoundation.org/collaborate/workgroups/networking/dccp_testing#Experimental_DCCP_source_tree
|
||||||
|
|
||||||
|
|
||||||
Socket options
|
Socket options
|
||||||
@@ -167,6 +167,7 @@ rx_ccid = 2
|
|||||||
seq_window = 100
|
seq_window = 100
|
||||||
The initial sequence window (sec. 7.5.2) of the sender. This influences
|
The initial sequence window (sec. 7.5.2) of the sender. This influences
|
||||||
the local ackno validity and the remote seqno validity windows (7.5.1).
|
the local ackno validity and the remote seqno validity windows (7.5.1).
|
||||||
|
Values in the range Wmin = 32 (RFC 4340, 7.5.2) up to 2^32-1 can be set.
|
||||||
|
|
||||||
tx_qlen = 5
|
tx_qlen = 5
|
||||||
The size of the transmit buffer in packets. A value of 0 corresponds
|
The size of the transmit buffer in packets. A value of 0 corresponds
|
||||||
|
|||||||
@@ -1,3 +1,3 @@
|
|||||||
A wiki document on how to use Generic Netlink can be found here:
|
A wiki document on how to use Generic Netlink can be found here:
|
||||||
|
|
||||||
* http://linux-net.osdl.org/index.php/Generic_Netlink_HOWTO
|
* http://www.linuxfoundation.org/collaborate/workgroups/networking/generic_netlink_howto
|
||||||
|
|||||||
114
Documentation/nfc/nfc-pn544.txt
Normal file
114
Documentation/nfc/nfc-pn544.txt
Normal file
@@ -0,0 +1,114 @@
|
|||||||
|
Kernel driver for the NXP Semiconductors PN544 Near Field
|
||||||
|
Communication chip
|
||||||
|
|
||||||
|
Author: Jari Vanhala
|
||||||
|
Contact: Matti Aaltonen (matti.j.aaltonen at nokia.com)
|
||||||
|
|
||||||
|
General
|
||||||
|
-------
|
||||||
|
|
||||||
|
The PN544 is an integrated transmission module for contactless
|
||||||
|
communication. The driver goes under drives/nfc/ and is compiled as a
|
||||||
|
module named "pn544". It registers a misc device and creates a device
|
||||||
|
file named "/dev/pn544".
|
||||||
|
|
||||||
|
Host Interfaces: I2C, SPI and HSU, this driver supports currently only I2C.
|
||||||
|
|
||||||
|
The Interface
|
||||||
|
-------------
|
||||||
|
|
||||||
|
The driver offers a sysfs interface for a hardware test and an IOCTL
|
||||||
|
interface for selecting between two operating modes. There are read,
|
||||||
|
write and poll functions for transferring messages. The two operating
|
||||||
|
modes are the normal (HCI) mode and the firmware update mode.
|
||||||
|
|
||||||
|
PN544 is controlled by sending messages from the userspace to the
|
||||||
|
chip. The main function of the driver is just to pass those messages
|
||||||
|
without caring about the message content.
|
||||||
|
|
||||||
|
|
||||||
|
Protocols
|
||||||
|
---------
|
||||||
|
|
||||||
|
In the normal (HCI) mode and in the firmware update mode read and
|
||||||
|
write functions behave a bit differently because the message formats
|
||||||
|
or the protocols are different.
|
||||||
|
|
||||||
|
In the normal (HCI) mode the protocol used is derived from the ETSI
|
||||||
|
HCI specification. The firmware is updated using a specific protocol,
|
||||||
|
which is different from HCI.
|
||||||
|
|
||||||
|
HCI messages consist of an eight bit header and the message body. The
|
||||||
|
header contains the message length. Maximum size for an HCI message is
|
||||||
|
33. In HCI mode sent messages are tested for a correct
|
||||||
|
checksum. Firmware update messages have the length in the second (MSB)
|
||||||
|
and third (LSB) bytes of the message. The maximum FW message length is
|
||||||
|
1024 bytes.
|
||||||
|
|
||||||
|
For the ETSI HCI specification see
|
||||||
|
http://www.etsi.org/WebSite/Technologies/ProtocolSpecification.aspx
|
||||||
|
|
||||||
|
The Hardware Test
|
||||||
|
-----------------
|
||||||
|
|
||||||
|
The idea of the test is that it can performed by reading from the
|
||||||
|
corresponding sysfs file. The test is implemented in the board file
|
||||||
|
and it should test that PN544 can be put into the firmware update
|
||||||
|
mode. If the test is not implemented the sysfs file does not get
|
||||||
|
created.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
> cat /sys/module/pn544/drivers/i2c\:pn544/3-002b/nfc_test
|
||||||
|
1
|
||||||
|
|
||||||
|
Normal Operation
|
||||||
|
----------------
|
||||||
|
|
||||||
|
PN544 is powered up when the device file is opened, otherwise it's
|
||||||
|
turned off. Only one instance can use the device at a time.
|
||||||
|
|
||||||
|
Userspace applications control PN544 with HCI messages. The hardware
|
||||||
|
sends an interrupt when data is available for reading. Data is
|
||||||
|
physically read when the read function is called by a userspace
|
||||||
|
application. Poll() checks the read interrupt state. Configuration and
|
||||||
|
self testing are also done from the userspace using read and write.
|
||||||
|
|
||||||
|
Example platform data:
|
||||||
|
|
||||||
|
static int rx71_pn544_nfc_request_resources(struct i2c_client *client)
|
||||||
|
{
|
||||||
|
/* Get and setup the HW resources for the device */
|
||||||
|
}
|
||||||
|
|
||||||
|
static void rx71_pn544_nfc_free_resources(void)
|
||||||
|
{
|
||||||
|
/* Release the HW resources */
|
||||||
|
}
|
||||||
|
|
||||||
|
static void rx71_pn544_nfc_enable(int fw)
|
||||||
|
{
|
||||||
|
/* Turn the device on */
|
||||||
|
}
|
||||||
|
|
||||||
|
static int rx71_pn544_nfc_test(void)
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* Put the device into the FW update mode
|
||||||
|
* and then back to the normal mode.
|
||||||
|
* Check the behavior and return one on success,
|
||||||
|
* zero on failure.
|
||||||
|
*/
|
||||||
|
}
|
||||||
|
|
||||||
|
static void rx71_pn544_nfc_disable(void)
|
||||||
|
{
|
||||||
|
/* turn the power off */
|
||||||
|
}
|
||||||
|
|
||||||
|
static struct pn544_nfc_platform_data rx71_nfc_data = {
|
||||||
|
.request_resources = rx71_pn544_nfc_request_resources,
|
||||||
|
.free_resources = rx71_pn544_nfc_free_resources,
|
||||||
|
.enable = rx71_pn544_nfc_enable,
|
||||||
|
.test = rx71_pn544_nfc_test,
|
||||||
|
.disable = rx71_pn544_nfc_disable,
|
||||||
|
};
|
||||||
@@ -23,10 +23,10 @@ Once you have resolved the suspend/resume-related problems with your test system
|
|||||||
without the new driver, you are ready to test it:
|
without the new driver, you are ready to test it:
|
||||||
|
|
||||||
a) Build the driver as a module, load it and try the test modes of hibernation
|
a) Build the driver as a module, load it and try the test modes of hibernation
|
||||||
(see: Documents/power/basic-pm-debugging.txt, 1).
|
(see: Documentation/power/basic-pm-debugging.txt, 1).
|
||||||
|
|
||||||
b) Load the driver and attempt to hibernate in the "reboot", "shutdown" and
|
b) Load the driver and attempt to hibernate in the "reboot", "shutdown" and
|
||||||
"platform" modes (see: Documents/power/basic-pm-debugging.txt, 1).
|
"platform" modes (see: Documentation/power/basic-pm-debugging.txt, 1).
|
||||||
|
|
||||||
c) Compile the driver directly into the kernel and try the test modes of
|
c) Compile the driver directly into the kernel and try the test modes of
|
||||||
hibernation.
|
hibernation.
|
||||||
@@ -34,12 +34,12 @@ c) Compile the driver directly into the kernel and try the test modes of
|
|||||||
d) Attempt to hibernate with the driver compiled directly into the kernel
|
d) Attempt to hibernate with the driver compiled directly into the kernel
|
||||||
in the "reboot", "shutdown" and "platform" modes.
|
in the "reboot", "shutdown" and "platform" modes.
|
||||||
|
|
||||||
e) Try the test modes of suspend (see: Documents/power/basic-pm-debugging.txt,
|
e) Try the test modes of suspend (see: Documentation/power/basic-pm-debugging.txt,
|
||||||
2). [As far as the STR tests are concerned, it should not matter whether or
|
2). [As far as the STR tests are concerned, it should not matter whether or
|
||||||
not the driver is built as a module.]
|
not the driver is built as a module.]
|
||||||
|
|
||||||
f) Attempt to suspend to RAM using the s2ram tool with the driver loaded
|
f) Attempt to suspend to RAM using the s2ram tool with the driver loaded
|
||||||
(see: Documents/power/basic-pm-debugging.txt, 2).
|
(see: Documentation/power/basic-pm-debugging.txt, 2).
|
||||||
|
|
||||||
Each of the above tests should be repeated several times and the STD tests
|
Each of the above tests should be repeated several times and the STD tests
|
||||||
should be mixed with the STR tests. If any of them fails, the driver cannot be
|
should be mixed with the STR tests. If any of them fails, the driver cannot be
|
||||||
|
|||||||
@@ -50,6 +50,15 @@ type's callbacks are not defined) of given device. The bus type, device type
|
|||||||
and device class callbacks are referred to as subsystem-level callbacks in what
|
and device class callbacks are referred to as subsystem-level callbacks in what
|
||||||
follows.
|
follows.
|
||||||
|
|
||||||
|
By default, the callbacks are always invoked in process context with interrupts
|
||||||
|
enabled. However, subsystems can use the pm_runtime_irq_safe() helper function
|
||||||
|
to tell the PM core that a device's ->runtime_suspend() and ->runtime_resume()
|
||||||
|
callbacks should be invoked in atomic context with interrupts disabled
|
||||||
|
(->runtime_idle() is still invoked the default way). This implies that these
|
||||||
|
callback routines must not block or sleep, but it also means that the
|
||||||
|
synchronous helper functions listed at the end of Section 4 can be used within
|
||||||
|
an interrupt handler or in an atomic context.
|
||||||
|
|
||||||
The subsystem-level suspend callback is _entirely_ _responsible_ for handling
|
The subsystem-level suspend callback is _entirely_ _responsible_ for handling
|
||||||
the suspend of the device as appropriate, which may, but need not include
|
the suspend of the device as appropriate, which may, but need not include
|
||||||
executing the device driver's own ->runtime_suspend() callback (from the
|
executing the device driver's own ->runtime_suspend() callback (from the
|
||||||
@@ -237,6 +246,10 @@ defined in include/linux/pm.h:
|
|||||||
Section 8); it may be modified only by the pm_runtime_no_callbacks()
|
Section 8); it may be modified only by the pm_runtime_no_callbacks()
|
||||||
helper function
|
helper function
|
||||||
|
|
||||||
|
unsigned int irq_safe;
|
||||||
|
- indicates that the ->runtime_suspend() and ->runtime_resume() callbacks
|
||||||
|
will be invoked with the spinlock held and interrupts disabled
|
||||||
|
|
||||||
unsigned int use_autosuspend;
|
unsigned int use_autosuspend;
|
||||||
- indicates that the device's driver supports delayed autosuspend (see
|
- indicates that the device's driver supports delayed autosuspend (see
|
||||||
Section 9); it may be modified only by the
|
Section 9); it may be modified only by the
|
||||||
@@ -344,6 +357,10 @@ drivers/base/power/runtime.c and include/linux/pm_runtime.h:
|
|||||||
- decrement the device's usage counter; if the result is 0 then run
|
- decrement the device's usage counter; if the result is 0 then run
|
||||||
pm_runtime_idle(dev) and return its result
|
pm_runtime_idle(dev) and return its result
|
||||||
|
|
||||||
|
int pm_runtime_put_sync_suspend(struct device *dev);
|
||||||
|
- decrement the device's usage counter; if the result is 0 then run
|
||||||
|
pm_runtime_suspend(dev) and return its result
|
||||||
|
|
||||||
int pm_runtime_put_sync_autosuspend(struct device *dev);
|
int pm_runtime_put_sync_autosuspend(struct device *dev);
|
||||||
- decrement the device's usage counter; if the result is 0 then run
|
- decrement the device's usage counter; if the result is 0 then run
|
||||||
pm_runtime_autosuspend(dev) and return its result
|
pm_runtime_autosuspend(dev) and return its result
|
||||||
@@ -397,6 +414,11 @@ drivers/base/power/runtime.c and include/linux/pm_runtime.h:
|
|||||||
PM attributes from /sys/devices/.../power (or prevent them from being
|
PM attributes from /sys/devices/.../power (or prevent them from being
|
||||||
added when the device is registered)
|
added when the device is registered)
|
||||||
|
|
||||||
|
void pm_runtime_irq_safe(struct device *dev);
|
||||||
|
- set the power.irq_safe flag for the device, causing the runtime-PM
|
||||||
|
suspend and resume callbacks (but not the idle callback) to be invoked
|
||||||
|
with interrupts disabled
|
||||||
|
|
||||||
void pm_runtime_mark_last_busy(struct device *dev);
|
void pm_runtime_mark_last_busy(struct device *dev);
|
||||||
- set the power.last_busy field to the current time
|
- set the power.last_busy field to the current time
|
||||||
|
|
||||||
@@ -438,6 +460,15 @@ pm_runtime_suspended()
|
|||||||
pm_runtime_mark_last_busy()
|
pm_runtime_mark_last_busy()
|
||||||
pm_runtime_autosuspend_expiration()
|
pm_runtime_autosuspend_expiration()
|
||||||
|
|
||||||
|
If pm_runtime_irq_safe() has been called for a device then the following helper
|
||||||
|
functions may also be used in interrupt context:
|
||||||
|
|
||||||
|
pm_runtime_suspend()
|
||||||
|
pm_runtime_autosuspend()
|
||||||
|
pm_runtime_resume()
|
||||||
|
pm_runtime_get_sync()
|
||||||
|
pm_runtime_put_sync_suspend()
|
||||||
|
|
||||||
5. Run-time PM Initialization, Device Probing and Removal
|
5. Run-time PM Initialization, Device Probing and Removal
|
||||||
|
|
||||||
Initially, the run-time PM is disabled for all devices, which means that the
|
Initially, the run-time PM is disabled for all devices, which means that the
|
||||||
|
|||||||
@@ -131,7 +131,7 @@ order to avoid the degeneration that had become the ppc32 kernel entry
|
|||||||
point and the way a new platform should be added to the kernel. The
|
point and the way a new platform should be added to the kernel. The
|
||||||
legacy iSeries platform breaks those rules as it predates this scheme,
|
legacy iSeries platform breaks those rules as it predates this scheme,
|
||||||
but no new board support will be accepted in the main tree that
|
but no new board support will be accepted in the main tree that
|
||||||
doesn't follows them properly. In addition, since the advent of the
|
doesn't follow them properly. In addition, since the advent of the
|
||||||
arch/powerpc merged architecture for ppc32 and ppc64, new 32-bit
|
arch/powerpc merged architecture for ppc32 and ppc64, new 32-bit
|
||||||
platforms and 32-bit platforms which move into arch/powerpc will be
|
platforms and 32-bit platforms which move into arch/powerpc will be
|
||||||
required to use these rules as well.
|
required to use these rules as well.
|
||||||
@@ -1025,7 +1025,7 @@ dtc source code can be found at
|
|||||||
|
|
||||||
WARNING: This version is still in early development stage; the
|
WARNING: This version is still in early development stage; the
|
||||||
resulting device-tree "blobs" have not yet been validated with the
|
resulting device-tree "blobs" have not yet been validated with the
|
||||||
kernel. The current generated bloc lacks a useful reserve map (it will
|
kernel. The current generated block lacks a useful reserve map (it will
|
||||||
be fixed to generate an empty one, it's up to the bootloader to fill
|
be fixed to generate an empty one, it's up to the bootloader to fill
|
||||||
it up) among others. The error handling needs work, bugs are lurking,
|
it up) among others. The error handling needs work, bugs are lurking,
|
||||||
etc...
|
etc...
|
||||||
@@ -1098,7 +1098,7 @@ supported currently at the toplevel.
|
|||||||
* an arbitrary array of bytes
|
* an arbitrary array of bytes
|
||||||
*/
|
*/
|
||||||
|
|
||||||
childnode@addresss { /* define a child node named "childnode"
|
childnode@address { /* define a child node named "childnode"
|
||||||
* whose unit name is "childnode at
|
* whose unit name is "childnode at
|
||||||
* address"
|
* address"
|
||||||
*/
|
*/
|
||||||
|
|||||||
52
Documentation/powerpc/dts-bindings/4xx/cpm.txt
Normal file
52
Documentation/powerpc/dts-bindings/4xx/cpm.txt
Normal file
@@ -0,0 +1,52 @@
|
|||||||
|
PPC4xx Clock Power Management (CPM) node
|
||||||
|
|
||||||
|
Required properties:
|
||||||
|
- compatible : compatible list, currently only "ibm,cpm"
|
||||||
|
- dcr-access-method : "native"
|
||||||
|
- dcr-reg : < DCR register range >
|
||||||
|
|
||||||
|
Optional properties:
|
||||||
|
- er-offset : All 4xx SoCs with a CPM controller have
|
||||||
|
one of two different order for the CPM
|
||||||
|
registers. Some have the CPM registers
|
||||||
|
in the following order (ER,FR,SR). The
|
||||||
|
others have them in the following order
|
||||||
|
(SR,ER,FR). For the second case set
|
||||||
|
er-offset = <1>.
|
||||||
|
- unused-units : specifier consist of one cell. For each
|
||||||
|
bit in the cell, the corresponding bit
|
||||||
|
in CPM will be set to turn off unused
|
||||||
|
devices.
|
||||||
|
- idle-doze : specifier consist of one cell. For each
|
||||||
|
bit in the cell, the corresponding bit
|
||||||
|
in CPM will be set to turn off unused
|
||||||
|
devices. This is usually just CPM[CPU].
|
||||||
|
- standby : specifier consist of one cell. For each
|
||||||
|
bit in the cell, the corresponding bit
|
||||||
|
in CPM will be set on standby and
|
||||||
|
restored on resume.
|
||||||
|
- suspend : specifier consist of one cell. For each
|
||||||
|
bit in the cell, the corresponding bit
|
||||||
|
in CPM will be set on suspend (mem) and
|
||||||
|
restored on resume. Note, for standby
|
||||||
|
and suspend the corresponding bits can
|
||||||
|
be different or the same. Usually for
|
||||||
|
standby only class 2 and 3 units are set.
|
||||||
|
However, the interface does not care.
|
||||||
|
If they are the same, the additional
|
||||||
|
power saving will be seeing if support
|
||||||
|
is available to put the DDR in self
|
||||||
|
refresh mode and any additional power
|
||||||
|
saving techniques for the specific SoC.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
CPM0: cpm {
|
||||||
|
compatible = "ibm,cpm";
|
||||||
|
dcr-access-method = "native";
|
||||||
|
dcr-reg = <0x160 0x003>;
|
||||||
|
er-offset = <0>;
|
||||||
|
unused-units = <0x00000100>;
|
||||||
|
idle-doze = <0x02000000>;
|
||||||
|
standby = <0xfeff0000>;
|
||||||
|
suspend = <0xfeff791d>;
|
||||||
|
};
|
||||||
28
Documentation/powerpc/dts-bindings/eeprom.txt
Normal file
28
Documentation/powerpc/dts-bindings/eeprom.txt
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
EEPROMs (I2C)
|
||||||
|
|
||||||
|
Required properties:
|
||||||
|
|
||||||
|
- compatible : should be "<manufacturer>,<type>"
|
||||||
|
If there is no specific driver for <manufacturer>, a generic
|
||||||
|
driver based on <type> is selected. Possible types are:
|
||||||
|
24c00, 24c01, 24c02, 24c04, 24c08, 24c16, 24c32, 24c64,
|
||||||
|
24c128, 24c256, 24c512, 24c1024, spd
|
||||||
|
|
||||||
|
- reg : the I2C address of the EEPROM
|
||||||
|
|
||||||
|
Optional properties:
|
||||||
|
|
||||||
|
- pagesize : the length of the pagesize for writing. Please consult the
|
||||||
|
manual of your device, that value varies a lot. A wrong value
|
||||||
|
may result in data loss! If not specified, a safety value of
|
||||||
|
'1' is used which will be very slow.
|
||||||
|
|
||||||
|
- read-only: this parameterless property disables writes to the eeprom
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
eeprom@52 {
|
||||||
|
compatible = "atmel,24c32";
|
||||||
|
reg = <0x52>;
|
||||||
|
pagesize = <32>;
|
||||||
|
};
|
||||||
@@ -170,3 +170,49 @@ and the run ppstest as follow:
|
|||||||
|
|
||||||
Please, note that to compile userland programs you need the file timepps.h
|
Please, note that to compile userland programs you need the file timepps.h
|
||||||
(see Documentation/pps/).
|
(see Documentation/pps/).
|
||||||
|
|
||||||
|
|
||||||
|
Generators
|
||||||
|
----------
|
||||||
|
|
||||||
|
Sometimes one needs to be able not only to catch PPS signals but to produce
|
||||||
|
them also. For example, running a distributed simulation, which requires
|
||||||
|
computers' clock to be synchronized very tightly. One way to do this is to
|
||||||
|
invent some complicated hardware solutions but it may be neither necessary
|
||||||
|
nor affordable. The cheap way is to load a PPS generator on one of the
|
||||||
|
computers (master) and PPS clients on others (slaves), and use very simple
|
||||||
|
cables to deliver signals using parallel ports, for example.
|
||||||
|
|
||||||
|
Parallel port cable pinout:
|
||||||
|
pin name master slave
|
||||||
|
1 STROBE *------ *
|
||||||
|
2 D0 * | *
|
||||||
|
3 D1 * | *
|
||||||
|
4 D2 * | *
|
||||||
|
5 D3 * | *
|
||||||
|
6 D4 * | *
|
||||||
|
7 D5 * | *
|
||||||
|
8 D6 * | *
|
||||||
|
9 D7 * | *
|
||||||
|
10 ACK * ------*
|
||||||
|
11 BUSY * *
|
||||||
|
12 PE * *
|
||||||
|
13 SEL * *
|
||||||
|
14 AUTOFD * *
|
||||||
|
15 ERROR * *
|
||||||
|
16 INIT * *
|
||||||
|
17 SELIN * *
|
||||||
|
18-25 GND *-----------*
|
||||||
|
|
||||||
|
Please note that parallel port interrupt occurs only on high->low transition,
|
||||||
|
so it is used for PPS assert edge. PPS clear edge can be determined only
|
||||||
|
using polling in the interrupt handler which actually can be done way more
|
||||||
|
precisely because interrupt handling delays can be quite big and random. So
|
||||||
|
current parport PPS generator implementation (pps_gen_parport module) is
|
||||||
|
geared towards using the clear edge for time synchronization.
|
||||||
|
|
||||||
|
Clear edge polling is done with disabled interrupts so it's better to select
|
||||||
|
delay between assert and clear edge as small as possible to reduce system
|
||||||
|
latencies. But if it is too small slave won't be able to capture clear edge
|
||||||
|
transition. The default of 30us should be good enough in most situations.
|
||||||
|
The delay can be selected using 'delay' pps_gen_parport module parameter.
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
sched-arch.txt
|
sched-arch.txt
|
||||||
- CPU Scheduler implementation hints for architecture specific code.
|
- CPU Scheduler implementation hints for architecture specific code.
|
||||||
sched-design-CFS.txt
|
sched-design-CFS.txt
|
||||||
- goals, design and implementation of the Complete Fair Scheduler.
|
- goals, design and implementation of the Completely Fair Scheduler.
|
||||||
sched-domains.txt
|
sched-domains.txt
|
||||||
- information on scheduling domains.
|
- information on scheduling domains.
|
||||||
sched-nice-design.txt
|
sched-nice-design.txt
|
||||||
|
|||||||
@@ -573,7 +573,7 @@ Changes from 20041018 to 20041123
|
|||||||
* Backround nodev_timeout processing to DPC This enables us to
|
* Backround nodev_timeout processing to DPC This enables us to
|
||||||
unblock (stop dev_loss_tmo) when appopriate.
|
unblock (stop dev_loss_tmo) when appopriate.
|
||||||
* Fix array discovery with multiple luns. The max_luns was 0 at
|
* Fix array discovery with multiple luns. The max_luns was 0 at
|
||||||
the time the host structure was intialized. lpfc_cfg_params
|
the time the host structure was initialized. lpfc_cfg_params
|
||||||
then set the max_luns to the correct value afterwards.
|
then set the max_luns to the correct value afterwards.
|
||||||
* Remove unused define LPFC_MAX_LUN and set the default value of
|
* Remove unused define LPFC_MAX_LUN and set the default value of
|
||||||
lpfc_max_lun parameter to 512.
|
lpfc_max_lun parameter to 512.
|
||||||
|
|||||||
@@ -107,7 +107,7 @@ write_wakeup() - May be called at any point between open and close.
|
|||||||
|
|
||||||
dcd_change() - Report to the tty line the current DCD pin status
|
dcd_change() - Report to the tty line the current DCD pin status
|
||||||
changes and the relative timestamp. The timestamp
|
changes and the relative timestamp. The timestamp
|
||||||
can be NULL.
|
cannot be NULL.
|
||||||
|
|
||||||
|
|
||||||
Driver Access
|
Driver Access
|
||||||
|
|||||||
@@ -974,13 +974,6 @@ Prior to version 0.9.0rc4 options had a 'snd_' prefix. This was removed.
|
|||||||
|
|
||||||
See hdspm.txt for details.
|
See hdspm.txt for details.
|
||||||
|
|
||||||
Module snd-hifier
|
|
||||||
-----------------
|
|
||||||
|
|
||||||
Module for the MediaTek/TempoTec HiFier Fantasia sound card.
|
|
||||||
|
|
||||||
This module supports autoprobe and multiple cards.
|
|
||||||
|
|
||||||
Module snd-ice1712
|
Module snd-ice1712
|
||||||
------------------
|
------------------
|
||||||
|
|
||||||
@@ -1531,15 +1524,20 @@ Prior to version 0.9.0rc4 options had a 'snd_' prefix. This was removed.
|
|||||||
Module snd-oxygen
|
Module snd-oxygen
|
||||||
-----------------
|
-----------------
|
||||||
|
|
||||||
Module for sound cards based on the C-Media CMI8788 chip:
|
Module for sound cards based on the C-Media CMI8786/8787/8788 chip:
|
||||||
* Asound A-8788
|
* Asound A-8788
|
||||||
|
* Asus Xonar DG
|
||||||
* AuzenTech X-Meridian
|
* AuzenTech X-Meridian
|
||||||
|
* AuzenTech X-Meridian 2G
|
||||||
* Bgears b-Enspirer
|
* Bgears b-Enspirer
|
||||||
* Club3D Theatron DTS
|
* Club3D Theatron DTS
|
||||||
* HT-Omega Claro (plus)
|
* HT-Omega Claro (plus)
|
||||||
* HT-Omega Claro halo (XT)
|
* HT-Omega Claro halo (XT)
|
||||||
|
* Kuroutoshikou CMI8787-HG2PCI
|
||||||
* Razer Barracuda AC-1
|
* Razer Barracuda AC-1
|
||||||
* Sondigo Inferno
|
* Sondigo Inferno
|
||||||
|
* TempoTec HiFier Fantasia
|
||||||
|
* TempoTec HiFier Serenade
|
||||||
|
|
||||||
This module supports autoprobe and multiple cards.
|
This module supports autoprobe and multiple cards.
|
||||||
|
|
||||||
@@ -2006,9 +2004,9 @@ Prior to version 0.9.0rc4 options had a 'snd_' prefix. This was removed.
|
|||||||
Module snd-virtuoso
|
Module snd-virtuoso
|
||||||
-------------------
|
-------------------
|
||||||
|
|
||||||
Module for sound cards based on the Asus AV100/AV200 chips,
|
Module for sound cards based on the Asus AV66/AV100/AV200 chips,
|
||||||
i.e., Xonar D1, DX, D2, D2X, DS, HDAV1.3 (Deluxe), Essence ST
|
i.e., Xonar D1, DX, D2, D2X, DS, Essence ST (Deluxe), Essence STX,
|
||||||
(Deluxe) and Essence STX.
|
HDAV1.3 (Deluxe), and HDAV1.3 Slim.
|
||||||
|
|
||||||
This module supports autoprobe and multiple cards.
|
This module supports autoprobe and multiple cards.
|
||||||
|
|
||||||
|
|||||||
@@ -149,7 +149,6 @@ ALC882/883/885/888/889
|
|||||||
acer-aspire-7730g Acer Aspire 7730G
|
acer-aspire-7730g Acer Aspire 7730G
|
||||||
acer-aspire-8930g Acer Aspire 8930G
|
acer-aspire-8930g Acer Aspire 8930G
|
||||||
medion Medion Laptops
|
medion Medion Laptops
|
||||||
medion-md2 Medion MD2
|
|
||||||
targa-dig Targa/MSI
|
targa-dig Targa/MSI
|
||||||
targa-2ch-dig Targa/MSI with 2-channel
|
targa-2ch-dig Targa/MSI with 2-channel
|
||||||
targa-8ch-dig Targa/MSI with 8-channel (MSI GX620)
|
targa-8ch-dig Targa/MSI with 8-channel (MSI GX620)
|
||||||
|
|||||||
@@ -4,8 +4,6 @@ README
|
|||||||
- general information about /proc/sys/ sysctl files.
|
- general information about /proc/sys/ sysctl files.
|
||||||
abi.txt
|
abi.txt
|
||||||
- documentation for /proc/sys/abi/*.
|
- documentation for /proc/sys/abi/*.
|
||||||
ctl_unnumbered.txt
|
|
||||||
- explanation of why one should not add new binary sysctl numbers.
|
|
||||||
fs.txt
|
fs.txt
|
||||||
- documentation for /proc/sys/fs/*.
|
- documentation for /proc/sys/fs/*.
|
||||||
kernel.txt
|
kernel.txt
|
||||||
|
|||||||
@@ -34,6 +34,7 @@ show up in /proc/sys/kernel:
|
|||||||
- hotplug
|
- hotplug
|
||||||
- java-appletviewer [ binfmt_java, obsolete ]
|
- java-appletviewer [ binfmt_java, obsolete ]
|
||||||
- java-interpreter [ binfmt_java, obsolete ]
|
- java-interpreter [ binfmt_java, obsolete ]
|
||||||
|
- kptr_restrict
|
||||||
- kstack_depth_to_print [ X86 only ]
|
- kstack_depth_to_print [ X86 only ]
|
||||||
- l2cr [ PPC only ]
|
- l2cr [ PPC only ]
|
||||||
- modprobe ==> Documentation/debugging-modules.txt
|
- modprobe ==> Documentation/debugging-modules.txt
|
||||||
@@ -219,7 +220,7 @@ dmesg_restrict:
|
|||||||
This toggle indicates whether unprivileged users are prevented from using
|
This toggle indicates whether unprivileged users are prevented from using
|
||||||
dmesg(8) to view messages from the kernel's log buffer. When
|
dmesg(8) to view messages from the kernel's log buffer. When
|
||||||
dmesg_restrict is set to (0) there are no restrictions. When
|
dmesg_restrict is set to (0) there are no restrictions. When
|
||||||
dmesg_restrict is set set to (1), users must have CAP_SYS_ADMIN to use
|
dmesg_restrict is set set to (1), users must have CAP_SYSLOG to use
|
||||||
dmesg(8).
|
dmesg(8).
|
||||||
|
|
||||||
The kernel config option CONFIG_SECURITY_DMESG_RESTRICT sets the default
|
The kernel config option CONFIG_SECURITY_DMESG_RESTRICT sets the default
|
||||||
@@ -261,6 +262,19 @@ This flag controls the L2 cache of G3 processor boards. If
|
|||||||
|
|
||||||
==============================================================
|
==============================================================
|
||||||
|
|
||||||
|
kptr_restrict:
|
||||||
|
|
||||||
|
This toggle indicates whether restrictions are placed on
|
||||||
|
exposing kernel addresses via /proc and other interfaces. When
|
||||||
|
kptr_restrict is set to (0), there are no restrictions. When
|
||||||
|
kptr_restrict is set to (1), the default, kernel pointers
|
||||||
|
printed using the %pK format specifier will be replaced with 0's
|
||||||
|
unless the user has CAP_SYSLOG. When kptr_restrict is set to
|
||||||
|
(2), kernel pointers printed using %pK will be replaced with 0's
|
||||||
|
regardless of privileges.
|
||||||
|
|
||||||
|
==============================================================
|
||||||
|
|
||||||
kstack_depth_to_print: (X86 only)
|
kstack_depth_to_print: (X86 only)
|
||||||
|
|
||||||
Controls the number of words to print when dumping the raw
|
Controls the number of words to print when dumping the raw
|
||||||
|
|||||||
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.
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ Linux system over a sample period:
|
|||||||
|
|
||||||
- the pid of the task(process) which initialized the timer
|
- the pid of the task(process) which initialized the timer
|
||||||
- the name of the process which initialized the timer
|
- the name of the process which initialized the timer
|
||||||
- the function where the timer was intialized
|
- the function where the timer was initialized
|
||||||
- the callback function which is associated to the timer
|
- the callback function which is associated to the timer
|
||||||
- the number of events (callbacks)
|
- the number of events (callbacks)
|
||||||
|
|
||||||
|
|||||||
@@ -125,7 +125,7 @@ is the size of the data item, in bytes.
|
|||||||
For example, here's the information displayed for the 'sched_wakeup'
|
For example, here's the information displayed for the 'sched_wakeup'
|
||||||
event:
|
event:
|
||||||
|
|
||||||
# cat /debug/tracing/events/sched/sched_wakeup/format
|
# cat /sys/kernel/debug/tracing/events/sched/sched_wakeup/format
|
||||||
|
|
||||||
name: sched_wakeup
|
name: sched_wakeup
|
||||||
ID: 60
|
ID: 60
|
||||||
@@ -201,19 +201,19 @@ to the 'filter' file for the given event.
|
|||||||
|
|
||||||
For example:
|
For example:
|
||||||
|
|
||||||
# cd /debug/tracing/events/sched/sched_wakeup
|
# cd /sys/kernel/debug/tracing/events/sched/sched_wakeup
|
||||||
# echo "common_preempt_count > 4" > filter
|
# echo "common_preempt_count > 4" > filter
|
||||||
|
|
||||||
A slightly more involved example:
|
A slightly more involved example:
|
||||||
|
|
||||||
# cd /debug/tracing/events/sched/sched_signal_send
|
# cd /sys/kernel/debug/tracing/events/signal/signal_generate
|
||||||
# echo "((sig >= 10 && sig < 15) || sig == 17) && comm != bash" > filter
|
# echo "((sig >= 10 && sig < 15) || sig == 17) && comm != bash" > filter
|
||||||
|
|
||||||
If there is an error in the expression, you'll get an 'Invalid
|
If there is an error in the expression, you'll get an 'Invalid
|
||||||
argument' error when setting it, and the erroneous string along with
|
argument' error when setting it, and the erroneous string along with
|
||||||
an error message can be seen by looking at the filter e.g.:
|
an error message can be seen by looking at the filter e.g.:
|
||||||
|
|
||||||
# cd /debug/tracing/events/sched/sched_signal_send
|
# cd /sys/kernel/debug/tracing/events/signal/signal_generate
|
||||||
# echo "((sig >= 10 && sig < 15) || dsig == 17) && comm != bash" > filter
|
# echo "((sig >= 10 && sig < 15) || dsig == 17) && comm != bash" > filter
|
||||||
-bash: echo: write error: Invalid argument
|
-bash: echo: write error: Invalid argument
|
||||||
# cat filter
|
# cat filter
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
obj- := dummy.o
|
obj- := dummy.o
|
||||||
|
|
||||||
# List of programs to build
|
# List of programs to build
|
||||||
hostprogs-y := slabinfo page-types hugepage-mmap hugepage-shm map_hugetlb
|
hostprogs-y := page-types hugepage-mmap hugepage-shm map_hugetlb
|
||||||
|
|
||||||
# Tell kbuild to always build the programs
|
# Tell kbuild to always build the programs
|
||||||
always := $(hostprogs-y)
|
always := $(hostprogs-y)
|
||||||
|
|||||||
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.
|
||||||
@@ -2,3 +2,5 @@
|
|||||||
- This file
|
- This file
|
||||||
w1_therm
|
w1_therm
|
||||||
- The Maxim/Dallas Semiconductor ds18*20 temperature sensor.
|
- The Maxim/Dallas Semiconductor ds18*20 temperature sensor.
|
||||||
|
w1_ds2423
|
||||||
|
- The Maxim/Dallas Semiconductor ds2423 counter device.
|
||||||
|
|||||||
47
Documentation/w1/slaves/w1_ds2423
Normal file
47
Documentation/w1/slaves/w1_ds2423
Normal file
@@ -0,0 +1,47 @@
|
|||||||
|
Kernel driver w1_ds2423
|
||||||
|
=======================
|
||||||
|
|
||||||
|
Supported chips:
|
||||||
|
* Maxim DS2423 based counter devices.
|
||||||
|
|
||||||
|
supported family codes:
|
||||||
|
W1_THERM_DS2423 0x1D
|
||||||
|
|
||||||
|
Author: Mika Laitio <lamikr@pilppa.org>
|
||||||
|
|
||||||
|
Description
|
||||||
|
-----------
|
||||||
|
|
||||||
|
Support is provided through the sysfs w1_slave file. Each opening and
|
||||||
|
read sequence of w1_slave file initiates the read of counters and ram
|
||||||
|
available in DS2423 pages 12 - 15.
|
||||||
|
|
||||||
|
Result of each page is provided as an ASCII output where each counter
|
||||||
|
value and associated ram buffer is outpputed to own line.
|
||||||
|
|
||||||
|
Each lines will contain the values of 42 bytes read from the counter and
|
||||||
|
memory page along the crc=YES or NO for indicating whether the read operation
|
||||||
|
was successfull and CRC matched.
|
||||||
|
If the operation was successfull, there is also in the end of each line
|
||||||
|
a counter value expressed as an integer after c=
|
||||||
|
|
||||||
|
Meaning of 42 bytes represented is following:
|
||||||
|
- 1 byte from ram page
|
||||||
|
- 4 bytes for the counter value
|
||||||
|
- 4 zero bytes
|
||||||
|
- 2 bytes for crc16 which was calculated from the data read since the previous crc bytes
|
||||||
|
- 31 remaining bytes from the ram page
|
||||||
|
- crc=YES/NO indicating whether read was ok and crc matched
|
||||||
|
- c=<int> current counter value
|
||||||
|
|
||||||
|
example from the successfull read:
|
||||||
|
00 02 00 00 00 00 00 00 00 6d 38 00 ff ff 00 00 fe ff 00 00 ff ff 00 00 ff ff 00 00 ff ff 00 00 ff ff 00 00 ff ff 00 00 ff ff crc=YES c=2
|
||||||
|
00 02 00 00 00 00 00 00 00 e0 1f 00 ff ff 00 00 ff ff 00 00 ff ff 00 00 ff ff 00 00 ff ff 00 00 ff ff 00 00 ff ff 00 00 ff ff crc=YES c=2
|
||||||
|
00 29 c6 5d 18 00 00 00 00 04 37 00 ff ff 00 00 ff ff 00 00 ff ff 00 00 ff ff 00 00 ff ff 00 00 ff ff 00 00 ff ff 00 00 ff ff crc=YES c=408798761
|
||||||
|
00 05 00 00 00 00 00 00 00 8d 39 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff crc=YES c=5
|
||||||
|
|
||||||
|
example from the read with crc errors:
|
||||||
|
00 02 00 00 00 00 00 00 00 6d 38 00 ff ff 00 00 fe ff 00 00 ff ff 00 00 ff ff 00 00 ff ff 00 00 ff ff 00 00 ff ff 00 00 ff ff crc=YES c=2
|
||||||
|
00 02 00 00 22 00 00 00 00 e0 1f 00 ff ff 00 00 ff ff 00 00 ff ff 00 00 ff ff 00 00 ff ff 00 00 ff ff 00 00 ff ff 00 00 ff ff crc=NO
|
||||||
|
00 e1 61 5d 19 00 00 00 00 df 0b 00 ff ff 00 00 ff ff 00 00 ff ff 00 00 ff ff 00 00 ff ff 00 00 ff ff 00 00 ff ff 00 00 ff ff crc=NO
|
||||||
|
00 05 00 00 20 00 00 00 00 8d 39 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff crc=NO
|
||||||
@@ -622,9 +622,9 @@ Protocol: 2.08+
|
|||||||
The payload may be compressed. The format of both the compressed and
|
The payload may be compressed. The format of both the compressed and
|
||||||
uncompressed data should be determined using the standard magic
|
uncompressed data should be determined using the standard magic
|
||||||
numbers. The currently supported compression formats are gzip
|
numbers. The currently supported compression formats are gzip
|
||||||
(magic numbers 1F 8B or 1F 9E), bzip2 (magic number 42 5A) and LZMA
|
(magic numbers 1F 8B or 1F 9E), bzip2 (magic number 42 5A), LZMA
|
||||||
(magic number 5D 00). The uncompressed payload is currently always ELF
|
(magic number 5D 00), and XZ (magic number FD 37). The uncompressed
|
||||||
(magic number 7F 45 4C 46).
|
payload is currently always ELF (magic number 7F 45 4C 46).
|
||||||
|
|
||||||
Field name: payload_length
|
Field name: payload_length
|
||||||
Type: read
|
Type: read
|
||||||
|
|||||||
121
Documentation/xz.txt
Normal file
121
Documentation/xz.txt
Normal file
@@ -0,0 +1,121 @@
|
|||||||
|
|
||||||
|
XZ data compression in Linux
|
||||||
|
============================
|
||||||
|
|
||||||
|
Introduction
|
||||||
|
|
||||||
|
XZ is a general purpose data compression format with high compression
|
||||||
|
ratio and relatively fast decompression. The primary compression
|
||||||
|
algorithm (filter) is LZMA2. Additional filters can be used to improve
|
||||||
|
compression ratio even further. E.g. Branch/Call/Jump (BCJ) filters
|
||||||
|
improve compression ratio of executable data.
|
||||||
|
|
||||||
|
The XZ decompressor in Linux is called XZ Embedded. It supports
|
||||||
|
the LZMA2 filter and optionally also BCJ filters. CRC32 is supported
|
||||||
|
for integrity checking. The home page of XZ Embedded is at
|
||||||
|
<http://tukaani.org/xz/embedded.html>, where you can find the
|
||||||
|
latest version and also information about using the code outside
|
||||||
|
the Linux kernel.
|
||||||
|
|
||||||
|
For userspace, XZ Utils provide a zlib-like compression library
|
||||||
|
and a gzip-like command line tool. XZ Utils can be downloaded from
|
||||||
|
<http://tukaani.org/xz/>.
|
||||||
|
|
||||||
|
XZ related components in the kernel
|
||||||
|
|
||||||
|
The xz_dec module provides XZ decompressor with single-call (buffer
|
||||||
|
to buffer) and multi-call (stateful) APIs. The usage of the xz_dec
|
||||||
|
module is documented in include/linux/xz.h.
|
||||||
|
|
||||||
|
The xz_dec_test module is for testing xz_dec. xz_dec_test is not
|
||||||
|
useful unless you are hacking the XZ decompressor. xz_dec_test
|
||||||
|
allocates a char device major dynamically to which one can write
|
||||||
|
.xz files from userspace. The decompressed output is thrown away.
|
||||||
|
Keep an eye on dmesg to see diagnostics printed by xz_dec_test.
|
||||||
|
See the xz_dec_test source code for the details.
|
||||||
|
|
||||||
|
For decompressing the kernel image, initramfs, and initrd, there
|
||||||
|
is a wrapper function in lib/decompress_unxz.c. Its API is the
|
||||||
|
same as in other decompress_*.c files, which is defined in
|
||||||
|
include/linux/decompress/generic.h.
|
||||||
|
|
||||||
|
scripts/xz_wrap.sh is a wrapper for the xz command line tool found
|
||||||
|
from XZ Utils. The wrapper sets compression options to values suitable
|
||||||
|
for compressing the kernel image.
|
||||||
|
|
||||||
|
For kernel makefiles, two commands are provided for use with
|
||||||
|
$(call if_needed). The kernel image should be compressed with
|
||||||
|
$(call if_needed,xzkern) which will use a BCJ filter and a big LZMA2
|
||||||
|
dictionary. It will also append a four-byte trailer containing the
|
||||||
|
uncompressed size of the file, which is needed by the boot code.
|
||||||
|
Other things should be compressed with $(call if_needed,xzmisc)
|
||||||
|
which will use no BCJ filter and 1 MiB LZMA2 dictionary.
|
||||||
|
|
||||||
|
Notes on compression options
|
||||||
|
|
||||||
|
Since the XZ Embedded supports only streams with no integrity check or
|
||||||
|
CRC32, make sure that you don't use some other integrity check type
|
||||||
|
when encoding files that are supposed to be decoded by the kernel. With
|
||||||
|
liblzma, you need to use either LZMA_CHECK_NONE or LZMA_CHECK_CRC32
|
||||||
|
when encoding. With the xz command line tool, use --check=none or
|
||||||
|
--check=crc32.
|
||||||
|
|
||||||
|
Using CRC32 is strongly recommended unless there is some other layer
|
||||||
|
which will verify the integrity of the uncompressed data anyway.
|
||||||
|
Double checking the integrity would probably be waste of CPU cycles.
|
||||||
|
Note that the headers will always have a CRC32 which will be validated
|
||||||
|
by the decoder; you can only change the integrity check type (or
|
||||||
|
disable it) for the actual uncompressed data.
|
||||||
|
|
||||||
|
In userspace, LZMA2 is typically used with dictionary sizes of several
|
||||||
|
megabytes. The decoder needs to have the dictionary in RAM, thus big
|
||||||
|
dictionaries cannot be used for files that are intended to be decoded
|
||||||
|
by the kernel. 1 MiB is probably the maximum reasonable dictionary
|
||||||
|
size for in-kernel use (maybe more is OK for initramfs). The presets
|
||||||
|
in XZ Utils may not be optimal when creating files for the kernel,
|
||||||
|
so don't hesitate to use custom settings. Example:
|
||||||
|
|
||||||
|
xz --check=crc32 --lzma2=dict=512KiB inputfile
|
||||||
|
|
||||||
|
An exception to above dictionary size limitation is when the decoder
|
||||||
|
is used in single-call mode. Decompressing the kernel itself is an
|
||||||
|
example of this situation. In single-call mode, the memory usage
|
||||||
|
doesn't depend on the dictionary size, and it is perfectly fine to
|
||||||
|
use a big dictionary: for maximum compression, the dictionary should
|
||||||
|
be at least as big as the uncompressed data itself.
|
||||||
|
|
||||||
|
Future plans
|
||||||
|
|
||||||
|
Creating a limited XZ encoder may be considered if people think it is
|
||||||
|
useful. LZMA2 is slower to compress than e.g. Deflate or LZO even at
|
||||||
|
the fastest settings, so it isn't clear if LZMA2 encoder is wanted
|
||||||
|
into the kernel.
|
||||||
|
|
||||||
|
Support for limited random-access reading is planned for the
|
||||||
|
decompression code. I don't know if it could have any use in the
|
||||||
|
kernel, but I know that it would be useful in some embedded projects
|
||||||
|
outside the Linux kernel.
|
||||||
|
|
||||||
|
Conformance to the .xz file format specification
|
||||||
|
|
||||||
|
There are a couple of corner cases where things have been simplified
|
||||||
|
at expense of detecting errors as early as possible. These should not
|
||||||
|
matter in practice all, since they don't cause security issues. But
|
||||||
|
it is good to know this if testing the code e.g. with the test files
|
||||||
|
from XZ Utils.
|
||||||
|
|
||||||
|
Reporting bugs
|
||||||
|
|
||||||
|
Before reporting a bug, please check that it's not fixed already
|
||||||
|
at upstream. See <http://tukaani.org/xz/embedded.html> to get the
|
||||||
|
latest code.
|
||||||
|
|
||||||
|
Report bugs to <lasse.collin@tukaani.org> or visit #tukaani on
|
||||||
|
Freenode and talk to Larhzu. I don't actively read LKML or other
|
||||||
|
kernel-related mailing lists, so if there's something I should know,
|
||||||
|
you should email to me personally or use IRC.
|
||||||
|
|
||||||
|
Don't bother Igor Pavlov with questions about the XZ implementation
|
||||||
|
in the kernel or about XZ Utils. While these two implementations
|
||||||
|
include essential code that is directly based on Igor Pavlov's code,
|
||||||
|
these implementations aren't maintained nor supported by him.
|
||||||
@@ -347,8 +347,8 @@ bugzilla.kernel.org是Linux内核开发者们用来跟踪内核Bug的网站。
|
|||||||
最新bug的通知,可以订阅bugme-new邮件列表(只有新的bug报告会被寄到这里)
|
最新bug的通知,可以订阅bugme-new邮件列表(只有新的bug报告会被寄到这里)
|
||||||
或者订阅bugme-janitor邮件列表(所有bugzilla的变动都会被寄到这里)。
|
或者订阅bugme-janitor邮件列表(所有bugzilla的变动都会被寄到这里)。
|
||||||
|
|
||||||
http://lists.osdl.org/mailman/listinfo/bugme-new
|
https://lists.linux-foundation.org/mailman/listinfo/bugme-new
|
||||||
http://lists.osdl.org/mailman/listinfo/bugme-janitors
|
https://lists.linux-foundation.org/mailman/listinfo/bugme-janitors
|
||||||
|
|
||||||
|
|
||||||
邮件列表
|
邮件列表
|
||||||
|
|||||||
@@ -61,7 +61,7 @@ Linux 2.4:
|
|||||||
Linux 2.6:
|
Linux 2.6:
|
||||||
除了遵循和 2.4 版内核同样的规则外,你还需要在 linux-kernel 邮件
|
除了遵循和 2.4 版内核同样的规则外,你还需要在 linux-kernel 邮件
|
||||||
列表上跟踪最新的 API 变化。向 Linux 2.6 内核提交驱动的顶级联系人
|
列表上跟踪最新的 API 变化。向 Linux 2.6 内核提交驱动的顶级联系人
|
||||||
是 Andrew Morton <akpm@osdl.org>。
|
是 Andrew Morton <akpm@linux-foundation.org>。
|
||||||
|
|
||||||
决定设备驱动能否被接受的条件
|
决定设备驱动能否被接受的条件
|
||||||
----------------------------
|
----------------------------
|
||||||
|
|||||||
193
MAINTAINERS
193
MAINTAINERS
@@ -285,6 +285,41 @@ L: linux-parisc@vger.kernel.org
|
|||||||
S: Maintained
|
S: Maintained
|
||||||
F: sound/pci/ad1889.*
|
F: sound/pci/ad1889.*
|
||||||
|
|
||||||
|
AD525X ANALOG DEVICES DIGITAL POTENTIOMETERS DRIVER
|
||||||
|
M: Michael Hennerich <michael.hennerich@analog.com>
|
||||||
|
L: device-driver-devel@blackfin.uclinux.org
|
||||||
|
W: http://wiki-analog.com/AD5254
|
||||||
|
S: Supported
|
||||||
|
F: drivers/misc/ad525x_dpot.c
|
||||||
|
|
||||||
|
AD5398 CURRENT REGULATOR DRIVER (AD5398/AD5821)
|
||||||
|
M: Michael Hennerich <michael.hennerich@analog.com>
|
||||||
|
L: device-driver-devel@blackfin.uclinux.org
|
||||||
|
W: http://wiki-analog.com/AD5398
|
||||||
|
S: Supported
|
||||||
|
F: drivers/regulator/ad5398.c
|
||||||
|
|
||||||
|
AD714X CAPACITANCE TOUCH SENSOR DRIVER (AD7142/3/7/8/7A)
|
||||||
|
M: Michael Hennerich <michael.hennerich@analog.com>
|
||||||
|
L: device-driver-devel@blackfin.uclinux.org
|
||||||
|
W: http://wiki-analog.com/AD7142
|
||||||
|
S: Supported
|
||||||
|
F: drivers/input/misc/ad714x.c
|
||||||
|
|
||||||
|
AD7877 TOUCHSCREEN DRIVER
|
||||||
|
M: Michael Hennerich <michael.hennerich@analog.com>
|
||||||
|
L: device-driver-devel@blackfin.uclinux.org
|
||||||
|
W: http://wiki-analog.com/AD7877
|
||||||
|
S: Supported
|
||||||
|
F: drivers/input/touchscreen/ad7877.c
|
||||||
|
|
||||||
|
AD7879 TOUCHSCREEN DRIVER (AD7879/AD7889)
|
||||||
|
M: Michael Hennerich <michael.hennerich@analog.com>
|
||||||
|
L: device-driver-devel@blackfin.uclinux.org
|
||||||
|
W: http://wiki-analog.com/AD7879
|
||||||
|
S: Supported
|
||||||
|
F: drivers/input/touchscreen/ad7879.c
|
||||||
|
|
||||||
ADM1025 HARDWARE MONITOR DRIVER
|
ADM1025 HARDWARE MONITOR DRIVER
|
||||||
M: Jean Delvare <khali@linux-fr.org>
|
M: Jean Delvare <khali@linux-fr.org>
|
||||||
L: lm-sensors@lm-sensors.org
|
L: lm-sensors@lm-sensors.org
|
||||||
@@ -304,6 +339,32 @@ W: http://linuxwireless.org/
|
|||||||
S: Orphan
|
S: Orphan
|
||||||
F: drivers/net/wireless/adm8211.*
|
F: drivers/net/wireless/adm8211.*
|
||||||
|
|
||||||
|
ADP5520 BACKLIGHT DRIVER WITH IO EXPANDER (ADP5520/ADP5501)
|
||||||
|
M: Michael Hennerich <michael.hennerich@analog.com>
|
||||||
|
L: device-driver-devel@blackfin.uclinux.org
|
||||||
|
W: http://wiki-analog.com/ADP5520
|
||||||
|
S: Supported
|
||||||
|
F: drivers/mfd/adp5520.c
|
||||||
|
F: drivers/video/backlight/adp5520_bl.c
|
||||||
|
F: drivers/led/leds-adp5520.c
|
||||||
|
F: drivers/gpio/adp5520-gpio.c
|
||||||
|
F: drivers/input/keyboard/adp5520-keys.c
|
||||||
|
|
||||||
|
ADP5588 QWERTY KEYPAD AND IO EXPANDER DRIVER (ADP5588/ADP5587)
|
||||||
|
M: Michael Hennerich <michael.hennerich@analog.com>
|
||||||
|
L: device-driver-devel@blackfin.uclinux.org
|
||||||
|
W: http://wiki-analog.com/ADP5588
|
||||||
|
S: Supported
|
||||||
|
F: drivers/input/keyboard/adp5588-keys.c
|
||||||
|
F: drivers/gpio/adp5588-gpio.c
|
||||||
|
|
||||||
|
ADP8860 BACKLIGHT DRIVER (ADP8860/ADP8861/ADP8863)
|
||||||
|
M: Michael Hennerich <michael.hennerich@analog.com>
|
||||||
|
L: device-driver-devel@blackfin.uclinux.org
|
||||||
|
W: http://wiki-analog.com/ADP8860
|
||||||
|
S: Supported
|
||||||
|
F: drivers/video/backlight/adp8860_bl.c
|
||||||
|
|
||||||
ADT746X FAN DRIVER
|
ADT746X FAN DRIVER
|
||||||
M: Colin Leroy <colin@colino.net>
|
M: Colin Leroy <colin@colino.net>
|
||||||
S: Maintained
|
S: Maintained
|
||||||
@@ -316,6 +377,13 @@ S: Maintained
|
|||||||
F: Documentation/hwmon/adt7475
|
F: Documentation/hwmon/adt7475
|
||||||
F: drivers/hwmon/adt7475.c
|
F: drivers/hwmon/adt7475.c
|
||||||
|
|
||||||
|
ADXL34X THREE-AXIS DIGITAL ACCELEROMETER DRIVER (ADXL345/ADXL346)
|
||||||
|
M: Michael Hennerich <michael.hennerich@analog.com>
|
||||||
|
L: device-driver-devel@blackfin.uclinux.org
|
||||||
|
W: http://wiki-analog.com/ADXL345
|
||||||
|
S: Supported
|
||||||
|
F: drivers/input/misc/adxl34x.c
|
||||||
|
|
||||||
ADVANSYS SCSI DRIVER
|
ADVANSYS SCSI DRIVER
|
||||||
M: Matthew Wilcox <matthew@wil.cx>
|
M: Matthew Wilcox <matthew@wil.cx>
|
||||||
L: linux-scsi@vger.kernel.org
|
L: linux-scsi@vger.kernel.org
|
||||||
@@ -428,7 +496,6 @@ S: Supported
|
|||||||
F: arch/x86/kernel/microcode_amd.c
|
F: arch/x86/kernel/microcode_amd.c
|
||||||
|
|
||||||
AMS (Apple Motion Sensor) DRIVER
|
AMS (Apple Motion Sensor) DRIVER
|
||||||
M: Stelian Pop <stelian@popies.net>
|
|
||||||
M: Michael Hanselmann <linux-kernel@hansmi.ch>
|
M: Michael Hanselmann <linux-kernel@hansmi.ch>
|
||||||
S: Supported
|
S: Supported
|
||||||
F: drivers/macintosh/ams/
|
F: drivers/macintosh/ams/
|
||||||
@@ -440,16 +507,22 @@ L: linux-rdma@vger.kernel.org
|
|||||||
S: Maintained
|
S: Maintained
|
||||||
F: drivers/infiniband/hw/amso1100/
|
F: drivers/infiniband/hw/amso1100/
|
||||||
|
|
||||||
|
ANALOG DEVICES INC ASOC CODEC DRIVERS
|
||||||
|
L: device-driver-devel@blackfin.uclinux.org
|
||||||
|
L: alsa-devel@alsa-project.org (moderated for non-subscribers)
|
||||||
|
W: http://wiki-analog.com/
|
||||||
|
S: Supported
|
||||||
|
F: sound/soc/codecs/ad1*
|
||||||
|
F: sound/soc/codecs/adau*
|
||||||
|
F: sound/soc/codecs/adav*
|
||||||
|
F: sound/soc/codecs/ssm*
|
||||||
|
|
||||||
ANALOG DEVICES INC ASOC DRIVERS
|
ANALOG DEVICES INC ASOC DRIVERS
|
||||||
L: uclinux-dist-devel@blackfin.uclinux.org
|
L: uclinux-dist-devel@blackfin.uclinux.org
|
||||||
L: alsa-devel@alsa-project.org (moderated for non-subscribers)
|
L: alsa-devel@alsa-project.org (moderated for non-subscribers)
|
||||||
W: http://blackfin.uclinux.org/
|
W: http://blackfin.uclinux.org/
|
||||||
S: Supported
|
S: Supported
|
||||||
F: sound/soc/blackfin/*
|
F: sound/soc/blackfin/*
|
||||||
F: sound/soc/codecs/ad1*
|
|
||||||
F: sound/soc/codecs/adau*
|
|
||||||
F: sound/soc/codecs/adav*
|
|
||||||
F: sound/soc/codecs/ssm*
|
|
||||||
|
|
||||||
AOA (Apple Onboard Audio) ALSA DRIVER
|
AOA (Apple Onboard Audio) ALSA DRIVER
|
||||||
M: Johannes Berg <johannes@sipsolutions.net>
|
M: Johannes Berg <johannes@sipsolutions.net>
|
||||||
@@ -1423,7 +1496,9 @@ F: drivers/net/tg3.*
|
|||||||
BROADCOM BRCM80211 IEEE802.11n WIRELESS DRIVER
|
BROADCOM BRCM80211 IEEE802.11n WIRELESS DRIVER
|
||||||
M: Brett Rudley <brudley@broadcom.com>
|
M: Brett Rudley <brudley@broadcom.com>
|
||||||
M: Henry Ptasinski <henryp@broadcom.com>
|
M: Henry Ptasinski <henryp@broadcom.com>
|
||||||
M: Nohee Ko <noheek@broadcom.com>
|
M: Dowan Kim <dowan@broadcom.com>
|
||||||
|
M: Roland Vossen <rvossen@broadcom.com>
|
||||||
|
M: Arend van Spriel <arend@broadcom.com>
|
||||||
L: linux-wireless@vger.kernel.org
|
L: linux-wireless@vger.kernel.org
|
||||||
S: Supported
|
S: Supported
|
||||||
F: drivers/staging/brcm80211/
|
F: drivers/staging/brcm80211/
|
||||||
@@ -1448,6 +1523,14 @@ S: Supported
|
|||||||
F: block/bsg.c
|
F: block/bsg.c
|
||||||
F: include/linux/bsg.h
|
F: include/linux/bsg.h
|
||||||
|
|
||||||
|
BT87X AUDIO DRIVER
|
||||||
|
M: Clemens Ladisch <clemens@ladisch.de>
|
||||||
|
L: alsa-devel@alsa-project.org (moderated for non-subscribers)
|
||||||
|
T: git git://git.alsa-project.org/alsa-kernel.git
|
||||||
|
S: Maintained
|
||||||
|
F: Documentation/sound/alsa/Bt87x.txt
|
||||||
|
F: sound/pci/bt87x.c
|
||||||
|
|
||||||
BT8XXGPIO DRIVER
|
BT8XXGPIO DRIVER
|
||||||
M: Michael Buesch <mb@bu3sch.de>
|
M: Michael Buesch <mb@bu3sch.de>
|
||||||
W: http://bu3sch.de/btgpio.php
|
W: http://bu3sch.de/btgpio.php
|
||||||
@@ -1473,6 +1556,13 @@ S: Maintained
|
|||||||
F: Documentation/video4linux/bttv/
|
F: Documentation/video4linux/bttv/
|
||||||
F: drivers/media/video/bt8xx/bttv*
|
F: drivers/media/video/bt8xx/bttv*
|
||||||
|
|
||||||
|
C-MEDIA CMI8788 DRIVER
|
||||||
|
M: Clemens Ladisch <clemens@ladisch.de>
|
||||||
|
L: alsa-devel@alsa-project.org (moderated for non-subscribers)
|
||||||
|
T: git git://git.alsa-project.org/alsa-kernel.git
|
||||||
|
S: Maintained
|
||||||
|
F: sound/pci/oxygen/
|
||||||
|
|
||||||
CACHEFILES: FS-CACHE BACKEND FOR CACHING ON MOUNTED FILESYSTEMS
|
CACHEFILES: FS-CACHE BACKEND FOR CACHING ON MOUNTED FILESYSTEMS
|
||||||
M: David Howells <dhowells@redhat.com>
|
M: David Howells <dhowells@redhat.com>
|
||||||
L: linux-cachefs@redhat.com
|
L: linux-cachefs@redhat.com
|
||||||
@@ -1709,7 +1799,8 @@ S: Maintained
|
|||||||
F: drivers/usb/atm/cxacru.c
|
F: drivers/usb/atm/cxacru.c
|
||||||
|
|
||||||
CONFIGFS
|
CONFIGFS
|
||||||
M: Joel Becker <joel.becker@oracle.com>
|
M: Joel Becker <jlbec@evilplan.org>
|
||||||
|
T: git git://git.kernel.org/pub/scm/linux/kernel/git/jlbec/configfs.git
|
||||||
S: Supported
|
S: Supported
|
||||||
F: fs/configfs/
|
F: fs/configfs/
|
||||||
F: include/linux/configfs.h
|
F: include/linux/configfs.h
|
||||||
@@ -1931,7 +2022,7 @@ F: drivers/scsi/dc395x.*
|
|||||||
DCCP PROTOCOL
|
DCCP PROTOCOL
|
||||||
M: Arnaldo Carvalho de Melo <acme@ghostprotocols.net>
|
M: Arnaldo Carvalho de Melo <acme@ghostprotocols.net>
|
||||||
L: dccp@vger.kernel.org
|
L: dccp@vger.kernel.org
|
||||||
W: http://linux-net.osdl.org/index.php/DCCP
|
W: http://www.linuxfoundation.org/collaborate/workgroups/networking/dccp
|
||||||
S: Maintained
|
S: Maintained
|
||||||
F: include/linux/dccp.h
|
F: include/linux/dccp.h
|
||||||
F: include/linux/tfrc.h
|
F: include/linux/tfrc.h
|
||||||
@@ -2263,6 +2354,13 @@ W: bluesmoke.sourceforge.net
|
|||||||
S: Maintained
|
S: Maintained
|
||||||
F: drivers/edac/r82600_edac.c
|
F: drivers/edac/r82600_edac.c
|
||||||
|
|
||||||
|
EDIROL UA-101/UA-1000 DRIVER
|
||||||
|
M: Clemens Ladisch <clemens@ladisch.de>
|
||||||
|
L: alsa-devel@alsa-project.org (moderated for non-subscribers)
|
||||||
|
T: git git://git.alsa-project.org/alsa-kernel.git
|
||||||
|
S: Maintained
|
||||||
|
F: sound/usb/misc/ua101.c
|
||||||
|
|
||||||
EEEPC LAPTOP EXTRAS DRIVER
|
EEEPC LAPTOP EXTRAS DRIVER
|
||||||
M: Corentin Chary <corentincj@iksaif.net>
|
M: Corentin Chary <corentincj@iksaif.net>
|
||||||
L: acpi4asus-user@lists.sourceforge.net
|
L: acpi4asus-user@lists.sourceforge.net
|
||||||
@@ -2271,6 +2369,14 @@ W: http://acpi4asus.sf.net
|
|||||||
S: Maintained
|
S: Maintained
|
||||||
F: drivers/platform/x86/eeepc-laptop.c
|
F: drivers/platform/x86/eeepc-laptop.c
|
||||||
|
|
||||||
|
EEEPC WMI EXTRAS DRIVER
|
||||||
|
M: Corentin Chary <corentincj@iksaif.net>
|
||||||
|
L: acpi4asus-user@lists.sourceforge.net
|
||||||
|
L: platform-driver-x86@vger.kernel.org
|
||||||
|
W: http://acpi4asus.sf.net
|
||||||
|
S: Maintained
|
||||||
|
F: drivers/platform/x86/eeepc-wmi.c
|
||||||
|
|
||||||
EFIFB FRAMEBUFFER DRIVER
|
EFIFB FRAMEBUFFER DRIVER
|
||||||
L: linux-fbdev@vger.kernel.org
|
L: linux-fbdev@vger.kernel.org
|
||||||
M: Peter Jones <pjones@redhat.com>
|
M: Peter Jones <pjones@redhat.com>
|
||||||
@@ -2345,7 +2451,7 @@ ETHERNET BRIDGE
|
|||||||
M: Stephen Hemminger <shemminger@linux-foundation.org>
|
M: Stephen Hemminger <shemminger@linux-foundation.org>
|
||||||
L: bridge@lists.linux-foundation.org
|
L: bridge@lists.linux-foundation.org
|
||||||
L: netdev@vger.kernel.org
|
L: netdev@vger.kernel.org
|
||||||
W: http://www.linux-foundation.org/en/Net:Bridge
|
W: http://www.linuxfoundation.org/en/Net:Bridge
|
||||||
S: Maintained
|
S: Maintained
|
||||||
F: include/linux/netfilter_bridge/
|
F: include/linux/netfilter_bridge/
|
||||||
F: net/bridge/
|
F: net/bridge/
|
||||||
@@ -2608,6 +2714,14 @@ S: Supported
|
|||||||
F: drivers/i2c/busses/i2c-gpio.c
|
F: drivers/i2c/busses/i2c-gpio.c
|
||||||
F: include/linux/i2c-gpio.h
|
F: include/linux/i2c-gpio.h
|
||||||
|
|
||||||
|
GENERIC GPIO I2C MULTIPLEXER DRIVER
|
||||||
|
M: Peter Korsgaard <peter.korsgaard@barco.com>
|
||||||
|
L: linux-i2c@vger.kernel.org
|
||||||
|
S: Supported
|
||||||
|
F: drivers/i2c/muxes/gpio-i2cmux.c
|
||||||
|
F: include/linux/gpio-i2cmux.h
|
||||||
|
F: Documentation/i2c/muxes/gpio-i2cmux
|
||||||
|
|
||||||
GENERIC HDLC (WAN) DRIVERS
|
GENERIC HDLC (WAN) DRIVERS
|
||||||
M: Krzysztof Halasa <khc@pm.waw.pl>
|
M: Krzysztof Halasa <khc@pm.waw.pl>
|
||||||
W: http://www.kernel.org/pub/linux/utils/net/hdlc/
|
W: http://www.kernel.org/pub/linux/utils/net/hdlc/
|
||||||
@@ -3415,6 +3529,13 @@ L: linux-serial@vger.kernel.org
|
|||||||
S: Maintained
|
S: Maintained
|
||||||
F: drivers/serial/jsm/
|
F: drivers/serial/jsm/
|
||||||
|
|
||||||
|
K10TEMP HARDWARE MONITORING DRIVER
|
||||||
|
M: Clemens Ladisch <clemens@ladisch.de>
|
||||||
|
L: lm-sensors@lm-sensors.org
|
||||||
|
S: Maintained
|
||||||
|
F: Documentation/hwmon/k10temp
|
||||||
|
F: drivers/hwmon/k10temp.c
|
||||||
|
|
||||||
K8TEMP HARDWARE MONITORING DRIVER
|
K8TEMP HARDWARE MONITORING DRIVER
|
||||||
M: Rudolf Marek <r.marek@assembler.cz>
|
M: Rudolf Marek <r.marek@assembler.cz>
|
||||||
L: lm-sensors@lm-sensors.org
|
L: lm-sensors@lm-sensors.org
|
||||||
@@ -3563,7 +3684,7 @@ 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
|
||||||
@@ -4000,9 +4121,8 @@ F: include/linux/module.h
|
|||||||
F: kernel/module.c
|
F: kernel/module.c
|
||||||
|
|
||||||
MOTION EYE VAIO PICTUREBOOK CAMERA DRIVER
|
MOTION EYE VAIO PICTUREBOOK CAMERA DRIVER
|
||||||
M: Stelian Pop <stelian@popies.net>
|
|
||||||
W: http://popies.net/meye/
|
W: http://popies.net/meye/
|
||||||
S: Maintained
|
S: Orphan
|
||||||
F: Documentation/video4linux/meye.txt
|
F: Documentation/video4linux/meye.txt
|
||||||
F: drivers/media/video/meye.*
|
F: drivers/media/video/meye.*
|
||||||
F: include/linux/meye.h
|
F: include/linux/meye.h
|
||||||
@@ -4268,6 +4388,7 @@ NILFS2 FILESYSTEM
|
|||||||
M: KONISHI Ryusuke <konishi.ryusuke@lab.ntt.co.jp>
|
M: KONISHI Ryusuke <konishi.ryusuke@lab.ntt.co.jp>
|
||||||
L: linux-nilfs@vger.kernel.org
|
L: linux-nilfs@vger.kernel.org
|
||||||
W: http://www.nilfs.org/en/
|
W: http://www.nilfs.org/en/
|
||||||
|
T: git git://git.kernel.org/pub/scm/linux/kernel/git/ryusuke/nilfs2.git
|
||||||
S: Supported
|
S: Supported
|
||||||
F: Documentation/filesystems/nilfs2.txt
|
F: Documentation/filesystems/nilfs2.txt
|
||||||
F: fs/nilfs2/
|
F: fs/nilfs2/
|
||||||
@@ -4289,11 +4410,11 @@ F: Documentation/scsi/NinjaSCSI.txt
|
|||||||
F: drivers/scsi/nsp32*
|
F: drivers/scsi/nsp32*
|
||||||
|
|
||||||
NTFS FILESYSTEM
|
NTFS FILESYSTEM
|
||||||
M: Anton Altaparmakov <aia21@cantab.net>
|
M: Anton Altaparmakov <anton@tuxera.com>
|
||||||
L: linux-ntfs-dev@lists.sourceforge.net
|
L: linux-ntfs-dev@lists.sourceforge.net
|
||||||
W: http://www.linux-ntfs.org/
|
W: http://www.tuxera.com/
|
||||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/aia21/ntfs-2.6.git
|
T: git git://git.kernel.org/pub/scm/linux/kernel/git/aia21/ntfs-2.6.git
|
||||||
S: Maintained
|
S: Supported
|
||||||
F: Documentation/filesystems/ntfs.txt
|
F: Documentation/filesystems/ntfs.txt
|
||||||
F: fs/ntfs/
|
F: fs/ntfs/
|
||||||
|
|
||||||
@@ -4445,6 +4566,13 @@ F: drivers/of
|
|||||||
F: include/linux/of*.h
|
F: include/linux/of*.h
|
||||||
K: of_get_property
|
K: of_get_property
|
||||||
|
|
||||||
|
OPL4 DRIVER
|
||||||
|
M: Clemens Ladisch <clemens@ladisch.de>
|
||||||
|
L: alsa-devel@alsa-project.org (moderated for non-subscribers)
|
||||||
|
T: git git://git.alsa-project.org/alsa-kernel.git
|
||||||
|
S: Maintained
|
||||||
|
F: sound/drivers/opl4/
|
||||||
|
|
||||||
OPROFILE
|
OPROFILE
|
||||||
M: Robert Richter <robert.richter@amd.com>
|
M: Robert Richter <robert.richter@amd.com>
|
||||||
L: oprofile-list@lists.sf.net
|
L: oprofile-list@lists.sf.net
|
||||||
@@ -4456,7 +4584,7 @@ F: include/linux/oprofile.h
|
|||||||
|
|
||||||
ORACLE CLUSTER FILESYSTEM 2 (OCFS2)
|
ORACLE CLUSTER FILESYSTEM 2 (OCFS2)
|
||||||
M: Mark Fasheh <mfasheh@suse.com>
|
M: Mark Fasheh <mfasheh@suse.com>
|
||||||
M: Joel Becker <joel.becker@oracle.com>
|
M: Joel Becker <jlbec@evilplan.org>
|
||||||
L: ocfs2-devel@oss.oracle.com (moderated for non-subscribers)
|
L: ocfs2-devel@oss.oracle.com (moderated for non-subscribers)
|
||||||
W: http://oss.oracle.com/projects/ocfs2/
|
W: http://oss.oracle.com/projects/ocfs2/
|
||||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/jlbec/ocfs2.git
|
T: git git://git.kernel.org/pub/scm/linux/kernel/git/jlbec/ocfs2.git
|
||||||
@@ -4541,7 +4669,7 @@ M: Jeremy Fitzhardinge <jeremy@xensource.com>
|
|||||||
M: Chris Wright <chrisw@sous-sol.org>
|
M: Chris Wright <chrisw@sous-sol.org>
|
||||||
M: Alok Kataria <akataria@vmware.com>
|
M: Alok Kataria <akataria@vmware.com>
|
||||||
M: Rusty Russell <rusty@rustcorp.com.au>
|
M: Rusty Russell <rusty@rustcorp.com.au>
|
||||||
L: virtualization@lists.osdl.org
|
L: virtualization@lists.linux-foundation.org
|
||||||
S: Supported
|
S: Supported
|
||||||
F: Documentation/ia64/paravirt_ops.txt
|
F: Documentation/ia64/paravirt_ops.txt
|
||||||
F: arch/*/kernel/paravirt*
|
F: arch/*/kernel/paravirt*
|
||||||
@@ -5039,11 +5167,6 @@ F: kernel/rcu*
|
|||||||
F: kernel/srcu*
|
F: kernel/srcu*
|
||||||
X: kernel/rcutorture.c
|
X: kernel/rcutorture.c
|
||||||
|
|
||||||
REAL TIME CLOCK DRIVER (LEGACY)
|
|
||||||
M: Paul Gortmaker <p_gortmaker@yahoo.com>
|
|
||||||
S: Maintained
|
|
||||||
F: drivers/char/rtc.c
|
|
||||||
|
|
||||||
REAL TIME CLOCK (RTC) SUBSYSTEM
|
REAL TIME CLOCK (RTC) SUBSYSTEM
|
||||||
M: Alessandro Zummo <a.zummo@towertech.it>
|
M: Alessandro Zummo <a.zummo@towertech.it>
|
||||||
L: rtc-linux@googlegroups.com
|
L: rtc-linux@googlegroups.com
|
||||||
@@ -5149,8 +5272,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/
|
||||||
@@ -5196,7 +5318,7 @@ SAMSUNG AUDIO (ASoC) DRIVERS
|
|||||||
M: Jassi Brar <jassi.brar@samsung.com>
|
M: Jassi Brar <jassi.brar@samsung.com>
|
||||||
L: alsa-devel@alsa-project.org (moderated for non-subscribers)
|
L: alsa-devel@alsa-project.org (moderated for non-subscribers)
|
||||||
S: Supported
|
S: Supported
|
||||||
F: sound/soc/s3c24xx
|
F: sound/soc/samsung
|
||||||
|
|
||||||
TIMEKEEPING, NTP
|
TIMEKEEPING, NTP
|
||||||
M: John Stultz <johnstul@us.ibm.com>
|
M: John Stultz <johnstul@us.ibm.com>
|
||||||
@@ -5524,7 +5646,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
|
||||||
@@ -5929,7 +6051,8 @@ F: drivers/net/tlan.*
|
|||||||
TOMOYO SECURITY MODULE
|
TOMOYO SECURITY MODULE
|
||||||
M: Kentaro Takeda <takedakn@nttdata.co.jp>
|
M: Kentaro Takeda <takedakn@nttdata.co.jp>
|
||||||
M: Tetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp>
|
M: Tetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp>
|
||||||
L: tomoyo-users-en@lists.sourceforge.jp (subscribers-only, for developers and users in English)
|
L: tomoyo-dev-en@lists.sourceforge.jp (subscribers-only, for developers in English)
|
||||||
|
L: tomoyo-users-en@lists.sourceforge.jp (subscribers-only, for users in English)
|
||||||
L: tomoyo-dev@lists.sourceforge.jp (subscribers-only, for developers in Japanese)
|
L: tomoyo-dev@lists.sourceforge.jp (subscribers-only, for developers in Japanese)
|
||||||
L: tomoyo-users@lists.sourceforge.jp (subscribers-only, for users in Japanese)
|
L: tomoyo-users@lists.sourceforge.jp (subscribers-only, for users in Japanese)
|
||||||
W: http://tomoyo.sourceforge.jp/
|
W: http://tomoyo.sourceforge.jp/
|
||||||
@@ -6203,6 +6326,13 @@ S: Maintained
|
|||||||
W: http://www.one-eyed-alien.net/~mdharm/linux-usb/
|
W: http://www.one-eyed-alien.net/~mdharm/linux-usb/
|
||||||
F: drivers/usb/storage/
|
F: drivers/usb/storage/
|
||||||
|
|
||||||
|
USB MIDI DRIVER
|
||||||
|
M: Clemens Ladisch <clemens@ladisch.de>
|
||||||
|
L: alsa-devel@alsa-project.org (moderated for non-subscribers)
|
||||||
|
T: git git://git.alsa-project.org/alsa-kernel.git
|
||||||
|
S: Maintained
|
||||||
|
F: sound/usb/midi.*
|
||||||
|
|
||||||
USB OHCI DRIVER
|
USB OHCI DRIVER
|
||||||
M: David Brownell <dbrownell@users.sourceforge.net>
|
M: David Brownell <dbrownell@users.sourceforge.net>
|
||||||
L: linux-usb@vger.kernel.org
|
L: linux-usb@vger.kernel.org
|
||||||
@@ -6442,7 +6572,7 @@ F: include/linux/virtio_console.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
|
||||||
L: virtualization@lists.osdl.org
|
L: virtualization@lists.linux-foundation.org
|
||||||
L: netdev@vger.kernel.org
|
L: netdev@vger.kernel.org
|
||||||
S: Maintained
|
S: Maintained
|
||||||
F: drivers/vhost/
|
F: drivers/vhost/
|
||||||
@@ -6461,13 +6591,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
|
||||||
@@ -6492,7 +6621,7 @@ F: net/8021q/
|
|||||||
|
|
||||||
VLYNQ BUS
|
VLYNQ BUS
|
||||||
M: Florian Fainelli <florian@openwrt.org>
|
M: Florian Fainelli <florian@openwrt.org>
|
||||||
L: openwrt-devel@lists.openwrt.org
|
L: openwrt-devel@lists.openwrt.org (subscribers-only)
|
||||||
S: Maintained
|
S: Maintained
|
||||||
F: drivers/vlynq/vlynq.c
|
F: drivers/vlynq/vlynq.c
|
||||||
F: include/linux/vlynq.h
|
F: include/linux/vlynq.h
|
||||||
@@ -6712,7 +6841,7 @@ XEN HYPERVISOR INTERFACE
|
|||||||
M: Jeremy Fitzhardinge <jeremy.fitzhardinge@citrix.com>
|
M: Jeremy Fitzhardinge <jeremy.fitzhardinge@citrix.com>
|
||||||
M: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
|
M: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
|
||||||
L: xen-devel@lists.xensource.com (moderated for non-subscribers)
|
L: xen-devel@lists.xensource.com (moderated for non-subscribers)
|
||||||
L: virtualization@lists.osdl.org
|
L: virtualization@lists.linux-foundation.org
|
||||||
S: Supported
|
S: Supported
|
||||||
F: arch/x86/xen/
|
F: arch/x86/xen/
|
||||||
F: drivers/*/xen-*front.c
|
F: drivers/*/xen-*front.c
|
||||||
|
|||||||
5
Makefile
5
Makefile
@@ -1,7 +1,7 @@
|
|||||||
VERSION = 2
|
VERSION = 2
|
||||||
PATCHLEVEL = 6
|
PATCHLEVEL = 6
|
||||||
SUBLEVEL = 37
|
SUBLEVEL = 38
|
||||||
EXTRAVERSION =
|
EXTRAVERSION = -rc1
|
||||||
NAME = Flesh-Eating Bats with Fangs
|
NAME = Flesh-Eating Bats with Fangs
|
||||||
|
|
||||||
# *DOCUMENTATION*
|
# *DOCUMENTATION*
|
||||||
@@ -224,6 +224,7 @@ ifeq ($(ARCH),m68knommu)
|
|||||||
endif
|
endif
|
||||||
|
|
||||||
KCONFIG_CONFIG ?= .config
|
KCONFIG_CONFIG ?= .config
|
||||||
|
export KCONFIG_CONFIG
|
||||||
|
|
||||||
# SHELL used by kbuild
|
# SHELL used by kbuild
|
||||||
CONFIG_SHELL := $(shell if [ -x "$$BASH" ]; then echo $$BASH; \
|
CONFIG_SHELL := $(shell if [ -x "$$BASH" ]; then echo $$BASH; \
|
||||||
|
|||||||
@@ -68,6 +68,9 @@ config GENERIC_IOMAP
|
|||||||
bool
|
bool
|
||||||
default n
|
default n
|
||||||
|
|
||||||
|
config GENERIC_HARDIRQS_NO__DO_IRQ
|
||||||
|
def_bool y
|
||||||
|
|
||||||
config GENERIC_HARDIRQS
|
config GENERIC_HARDIRQS
|
||||||
bool
|
bool
|
||||||
default y
|
default y
|
||||||
|
|||||||
@@ -37,8 +37,9 @@
|
|||||||
*/
|
*/
|
||||||
extern inline void __set_hae(unsigned long new_hae)
|
extern inline void __set_hae(unsigned long new_hae)
|
||||||
{
|
{
|
||||||
unsigned long flags;
|
unsigned long flags = swpipl(IPL_MAX);
|
||||||
local_irq_save(flags);
|
|
||||||
|
barrier();
|
||||||
|
|
||||||
alpha_mv.hae_cache = new_hae;
|
alpha_mv.hae_cache = new_hae;
|
||||||
*alpha_mv.hae_register = new_hae;
|
*alpha_mv.hae_register = new_hae;
|
||||||
@@ -46,7 +47,8 @@ extern inline void __set_hae(unsigned long new_hae)
|
|||||||
/* Re-read to make sure it was written. */
|
/* Re-read to make sure it was written. */
|
||||||
new_hae = *alpha_mv.hae_register;
|
new_hae = *alpha_mv.hae_register;
|
||||||
|
|
||||||
local_irq_restore(flags);
|
setipl(flags);
|
||||||
|
barrier();
|
||||||
}
|
}
|
||||||
|
|
||||||
extern inline void set_hae(unsigned long new_hae)
|
extern inline void set_hae(unsigned long new_hae)
|
||||||
|
|||||||
@@ -53,6 +53,9 @@
|
|||||||
#define MADV_MERGEABLE 12 /* KSM may merge identical pages */
|
#define MADV_MERGEABLE 12 /* KSM may merge identical pages */
|
||||||
#define MADV_UNMERGEABLE 13 /* KSM may not merge identical pages */
|
#define MADV_UNMERGEABLE 13 /* KSM may not merge identical pages */
|
||||||
|
|
||||||
|
#define MADV_HUGEPAGE 14 /* Worth backing with hugepages */
|
||||||
|
#define MADV_NOHUGEPAGE 15 /* Not worth backing with hugepages */
|
||||||
|
|
||||||
/* compatibility flags */
|
/* compatibility flags */
|
||||||
#define MAP_FILE 0
|
#define MAP_FILE 0
|
||||||
|
|
||||||
|
|||||||
@@ -3,8 +3,8 @@
|
|||||||
#
|
#
|
||||||
|
|
||||||
extra-y := head.o vmlinux.lds
|
extra-y := head.o vmlinux.lds
|
||||||
EXTRA_AFLAGS := $(KBUILD_CFLAGS)
|
asflags-y := $(KBUILD_CFLAGS)
|
||||||
EXTRA_CFLAGS := -Werror -Wno-sign-compare
|
ccflags-y := -Werror -Wno-sign-compare
|
||||||
|
|
||||||
obj-y := entry.o traps.o process.o init_task.o osf_sys.o irq.o \
|
obj-y := entry.o traps.o process.o init_task.o osf_sys.o irq.o \
|
||||||
irq_alpha.o signal.o setup.o ptrace.o time.o \
|
irq_alpha.o signal.o setup.o ptrace.o time.o \
|
||||||
|
|||||||
@@ -44,10 +44,11 @@ static char irq_user_affinity[NR_IRQS];
|
|||||||
|
|
||||||
int irq_select_affinity(unsigned int irq)
|
int irq_select_affinity(unsigned int irq)
|
||||||
{
|
{
|
||||||
|
struct irq_desc *desc = irq_to_desc[irq];
|
||||||
static int last_cpu;
|
static int last_cpu;
|
||||||
int cpu = last_cpu + 1;
|
int cpu = last_cpu + 1;
|
||||||
|
|
||||||
if (!irq_desc[irq].chip->set_affinity || irq_user_affinity[irq])
|
if (!desc || !get_irq_desc_chip(desc)->set_affinity || irq_user_affinity[irq])
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
while (!cpu_possible(cpu) ||
|
while (!cpu_possible(cpu) ||
|
||||||
@@ -55,8 +56,8 @@ int irq_select_affinity(unsigned int irq)
|
|||||||
cpu = (cpu < (NR_CPUS-1) ? cpu + 1 : 0);
|
cpu = (cpu < (NR_CPUS-1) ? cpu + 1 : 0);
|
||||||
last_cpu = cpu;
|
last_cpu = cpu;
|
||||||
|
|
||||||
cpumask_copy(irq_desc[irq].affinity, cpumask_of(cpu));
|
cpumask_copy(desc->affinity, cpumask_of(cpu));
|
||||||
irq_desc[irq].chip->set_affinity(irq, cpumask_of(cpu));
|
get_irq_desc_chip(desc)->set_affinity(irq, cpumask_of(cpu));
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
#endif /* CONFIG_SMP */
|
#endif /* CONFIG_SMP */
|
||||||
@@ -67,6 +68,7 @@ show_interrupts(struct seq_file *p, void *v)
|
|||||||
int j;
|
int j;
|
||||||
int irq = *(loff_t *) v;
|
int irq = *(loff_t *) v;
|
||||||
struct irqaction * action;
|
struct irqaction * action;
|
||||||
|
struct irq_desc *desc;
|
||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
|
|
||||||
#ifdef CONFIG_SMP
|
#ifdef CONFIG_SMP
|
||||||
@@ -79,8 +81,13 @@ show_interrupts(struct seq_file *p, void *v)
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (irq < ACTUAL_NR_IRQS) {
|
if (irq < ACTUAL_NR_IRQS) {
|
||||||
raw_spin_lock_irqsave(&irq_desc[irq].lock, flags);
|
desc = irq_to_desc(irq);
|
||||||
action = irq_desc[irq].action;
|
|
||||||
|
if (!desc)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
raw_spin_lock_irqsave(&desc->lock, flags);
|
||||||
|
action = desc->action;
|
||||||
if (!action)
|
if (!action)
|
||||||
goto unlock;
|
goto unlock;
|
||||||
seq_printf(p, "%3d: ", irq);
|
seq_printf(p, "%3d: ", irq);
|
||||||
@@ -90,7 +97,7 @@ show_interrupts(struct seq_file *p, void *v)
|
|||||||
for_each_online_cpu(j)
|
for_each_online_cpu(j)
|
||||||
seq_printf(p, "%10u ", kstat_irqs_cpu(irq, j));
|
seq_printf(p, "%10u ", kstat_irqs_cpu(irq, j));
|
||||||
#endif
|
#endif
|
||||||
seq_printf(p, " %14s", irq_desc[irq].chip->name);
|
seq_printf(p, " %14s", get_irq_desc_chip(desc)->name);
|
||||||
seq_printf(p, " %c%s",
|
seq_printf(p, " %c%s",
|
||||||
(action->flags & IRQF_DISABLED)?'+':' ',
|
(action->flags & IRQF_DISABLED)?'+':' ',
|
||||||
action->name);
|
action->name);
|
||||||
@@ -103,7 +110,7 @@ show_interrupts(struct seq_file *p, void *v)
|
|||||||
|
|
||||||
seq_putc(p, '\n');
|
seq_putc(p, '\n');
|
||||||
unlock:
|
unlock:
|
||||||
raw_spin_unlock_irqrestore(&irq_desc[irq].lock, flags);
|
raw_spin_unlock_irqrestore(&desc->lock, flags);
|
||||||
} else if (irq == ACTUAL_NR_IRQS) {
|
} else if (irq == ACTUAL_NR_IRQS) {
|
||||||
#ifdef CONFIG_SMP
|
#ifdef CONFIG_SMP
|
||||||
seq_puts(p, "IPI: ");
|
seq_puts(p, "IPI: ");
|
||||||
@@ -142,8 +149,10 @@ handle_irq(int irq)
|
|||||||
* handled by some other CPU. (or is disabled)
|
* handled by some other CPU. (or is disabled)
|
||||||
*/
|
*/
|
||||||
static unsigned int illegal_count=0;
|
static unsigned int illegal_count=0;
|
||||||
|
struct irq_desc *desc = irq_to_desc(irq);
|
||||||
|
|
||||||
if ((unsigned) irq > ACTUAL_NR_IRQS && illegal_count < MAX_ILLEGAL_IRQS ) {
|
if (!desc || ((unsigned) irq > ACTUAL_NR_IRQS &&
|
||||||
|
illegal_count < MAX_ILLEGAL_IRQS)) {
|
||||||
irq_err_count++;
|
irq_err_count++;
|
||||||
illegal_count++;
|
illegal_count++;
|
||||||
printk(KERN_CRIT "device_interrupt: invalid interrupt %d\n",
|
printk(KERN_CRIT "device_interrupt: invalid interrupt %d\n",
|
||||||
@@ -151,14 +160,14 @@ handle_irq(int irq)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
irq_enter();
|
|
||||||
/*
|
/*
|
||||||
* __do_IRQ() must be called with IPL_MAX. Note that we do not
|
* From here we must proceed with IPL_MAX. Note that we do not
|
||||||
* explicitly enable interrupts afterwards - some MILO PALcode
|
* explicitly enable interrupts afterwards - some MILO PALcode
|
||||||
* (namely LX164 one) seems to have severe problems with RTI
|
* (namely LX164 one) seems to have severe problems with RTI
|
||||||
* at IPL 0.
|
* at IPL 0.
|
||||||
*/
|
*/
|
||||||
local_irq_disable();
|
local_irq_disable();
|
||||||
__do_IRQ(irq);
|
irq_enter();
|
||||||
|
generic_handle_irq_desc(irq, desc);
|
||||||
irq_exit();
|
irq_exit();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -219,32 +219,24 @@ process_mcheck_info(unsigned long vector, unsigned long la_ptr,
|
|||||||
* processed by PALcode, and comes in via entInt vector 1.
|
* processed by PALcode, and comes in via entInt vector 1.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static void rtc_enable_disable(unsigned int irq) { }
|
|
||||||
static unsigned int rtc_startup(unsigned int irq) { return 0; }
|
|
||||||
|
|
||||||
struct irqaction timer_irqaction = {
|
struct irqaction timer_irqaction = {
|
||||||
.handler = timer_interrupt,
|
.handler = timer_interrupt,
|
||||||
.flags = IRQF_DISABLED,
|
.flags = IRQF_DISABLED,
|
||||||
.name = "timer",
|
.name = "timer",
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct irq_chip rtc_irq_type = {
|
|
||||||
.name = "RTC",
|
|
||||||
.startup = rtc_startup,
|
|
||||||
.shutdown = rtc_enable_disable,
|
|
||||||
.enable = rtc_enable_disable,
|
|
||||||
.disable = rtc_enable_disable,
|
|
||||||
.ack = rtc_enable_disable,
|
|
||||||
.end = rtc_enable_disable,
|
|
||||||
};
|
|
||||||
|
|
||||||
void __init
|
void __init
|
||||||
init_rtc_irq(void)
|
init_rtc_irq(void)
|
||||||
{
|
{
|
||||||
irq_desc[RTC_IRQ].status = IRQ_DISABLED;
|
struct irq_desc *desc = irq_to_desc(RTC_IRQ);
|
||||||
irq_desc[RTC_IRQ].chip = &rtc_irq_type;
|
|
||||||
|
if (desc) {
|
||||||
|
desc->status |= IRQ_DISABLED;
|
||||||
|
set_irq_chip_and_handler_name(RTC_IRQ, &no_irq_chip,
|
||||||
|
handle_simple_irq, "RTC");
|
||||||
setup_irq(RTC_IRQ, &timer_irqaction);
|
setup_irq(RTC_IRQ, &timer_irqaction);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* Dummy irqactions. */
|
/* Dummy irqactions. */
|
||||||
struct irqaction isa_cascade_irqaction = {
|
struct irqaction isa_cascade_irqaction = {
|
||||||
|
|||||||
@@ -69,28 +69,11 @@ i8259a_mask_and_ack_irq(unsigned int irq)
|
|||||||
spin_unlock(&i8259_irq_lock);
|
spin_unlock(&i8259_irq_lock);
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned int
|
|
||||||
i8259a_startup_irq(unsigned int irq)
|
|
||||||
{
|
|
||||||
i8259a_enable_irq(irq);
|
|
||||||
return 0; /* never anything pending */
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
i8259a_end_irq(unsigned int irq)
|
|
||||||
{
|
|
||||||
if (!(irq_desc[irq].status & (IRQ_DISABLED|IRQ_INPROGRESS)))
|
|
||||||
i8259a_enable_irq(irq);
|
|
||||||
}
|
|
||||||
|
|
||||||
struct irq_chip i8259a_irq_type = {
|
struct irq_chip i8259a_irq_type = {
|
||||||
.name = "XT-PIC",
|
.name = "XT-PIC",
|
||||||
.startup = i8259a_startup_irq,
|
.unmask = i8259a_enable_irq,
|
||||||
.shutdown = i8259a_disable_irq,
|
.mask = i8259a_disable_irq,
|
||||||
.enable = i8259a_enable_irq,
|
.mask_ack = i8259a_mask_and_ack_irq,
|
||||||
.disable = i8259a_disable_irq,
|
|
||||||
.ack = i8259a_mask_and_ack_irq,
|
|
||||||
.end = i8259a_end_irq,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
void __init
|
void __init
|
||||||
@@ -107,8 +90,7 @@ init_i8259a_irqs(void)
|
|||||||
outb(0xff, 0xA1); /* mask all of 8259A-2 */
|
outb(0xff, 0xA1); /* mask all of 8259A-2 */
|
||||||
|
|
||||||
for (i = 0; i < 16; i++) {
|
for (i = 0; i < 16; i++) {
|
||||||
irq_desc[i].status = IRQ_DISABLED;
|
set_irq_chip_and_handler(i, &i8259a_irq_type, handle_level_irq);
|
||||||
irq_desc[i].chip = &i8259a_irq_type;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
setup_irq(2, &cascade);
|
setup_irq(2, &cascade);
|
||||||
|
|||||||
@@ -40,20 +40,6 @@ pyxis_disable_irq(unsigned int irq)
|
|||||||
pyxis_update_irq_hw(cached_irq_mask &= ~(1UL << (irq - 16)));
|
pyxis_update_irq_hw(cached_irq_mask &= ~(1UL << (irq - 16)));
|
||||||
}
|
}
|
||||||
|
|
||||||
static unsigned int
|
|
||||||
pyxis_startup_irq(unsigned int irq)
|
|
||||||
{
|
|
||||||
pyxis_enable_irq(irq);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
pyxis_end_irq(unsigned int irq)
|
|
||||||
{
|
|
||||||
if (!(irq_desc[irq].status & (IRQ_DISABLED|IRQ_INPROGRESS)))
|
|
||||||
pyxis_enable_irq(irq);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
pyxis_mask_and_ack_irq(unsigned int irq)
|
pyxis_mask_and_ack_irq(unsigned int irq)
|
||||||
{
|
{
|
||||||
@@ -72,12 +58,9 @@ pyxis_mask_and_ack_irq(unsigned int irq)
|
|||||||
|
|
||||||
static struct irq_chip pyxis_irq_type = {
|
static struct irq_chip pyxis_irq_type = {
|
||||||
.name = "PYXIS",
|
.name = "PYXIS",
|
||||||
.startup = pyxis_startup_irq,
|
.mask_ack = pyxis_mask_and_ack_irq,
|
||||||
.shutdown = pyxis_disable_irq,
|
.mask = pyxis_disable_irq,
|
||||||
.enable = pyxis_enable_irq,
|
.unmask = pyxis_enable_irq,
|
||||||
.disable = pyxis_disable_irq,
|
|
||||||
.ack = pyxis_mask_and_ack_irq,
|
|
||||||
.end = pyxis_end_irq,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
void
|
void
|
||||||
@@ -119,8 +102,8 @@ init_pyxis_irqs(unsigned long ignore_mask)
|
|||||||
for (i = 16; i < 48; ++i) {
|
for (i = 16; i < 48; ++i) {
|
||||||
if ((ignore_mask >> i) & 1)
|
if ((ignore_mask >> i) & 1)
|
||||||
continue;
|
continue;
|
||||||
irq_desc[i].status = IRQ_DISABLED | IRQ_LEVEL;
|
set_irq_chip_and_handler(i, &pyxis_irq_type, handle_level_irq);
|
||||||
irq_desc[i].chip = &pyxis_irq_type;
|
irq_to_desc(i)->status |= IRQ_LEVEL;
|
||||||
}
|
}
|
||||||
|
|
||||||
setup_irq(16+7, &isa_cascade_irqaction);
|
setup_irq(16+7, &isa_cascade_irqaction);
|
||||||
|
|||||||
@@ -33,29 +33,12 @@ srm_disable_irq(unsigned int irq)
|
|||||||
spin_unlock(&srm_irq_lock);
|
spin_unlock(&srm_irq_lock);
|
||||||
}
|
}
|
||||||
|
|
||||||
static unsigned int
|
|
||||||
srm_startup_irq(unsigned int irq)
|
|
||||||
{
|
|
||||||
srm_enable_irq(irq);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
srm_end_irq(unsigned int irq)
|
|
||||||
{
|
|
||||||
if (!(irq_desc[irq].status & (IRQ_DISABLED|IRQ_INPROGRESS)))
|
|
||||||
srm_enable_irq(irq);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Handle interrupts from the SRM, assuming no additional weirdness. */
|
/* Handle interrupts from the SRM, assuming no additional weirdness. */
|
||||||
static struct irq_chip srm_irq_type = {
|
static struct irq_chip srm_irq_type = {
|
||||||
.name = "SRM",
|
.name = "SRM",
|
||||||
.startup = srm_startup_irq,
|
.unmask = srm_enable_irq,
|
||||||
.shutdown = srm_disable_irq,
|
.mask = srm_disable_irq,
|
||||||
.enable = srm_enable_irq,
|
.mask_ack = srm_disable_irq,
|
||||||
.disable = srm_disable_irq,
|
|
||||||
.ack = srm_disable_irq,
|
|
||||||
.end = srm_end_irq,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
void __init
|
void __init
|
||||||
@@ -68,8 +51,8 @@ init_srm_irqs(long max, unsigned long ignore_mask)
|
|||||||
for (i = 16; i < max; ++i) {
|
for (i = 16; i < max; ++i) {
|
||||||
if (i < 64 && ((ignore_mask >> i) & 1))
|
if (i < 64 && ((ignore_mask >> i) & 1))
|
||||||
continue;
|
continue;
|
||||||
irq_desc[i].status = IRQ_DISABLED | IRQ_LEVEL;
|
set_irq_chip_and_handler(i, &srm_irq_type, handle_level_irq);
|
||||||
irq_desc[i].chip = &srm_irq_type;
|
irq_to_desc(i)->status |= IRQ_LEVEL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -951,9 +951,6 @@ SYSCALL_DEFINE2(osf_utimes, const char __user *, filename,
|
|||||||
return do_utimes(AT_FDCWD, filename, tvs ? tv : NULL, 0);
|
return do_utimes(AT_FDCWD, filename, tvs ? tv : NULL, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
#define MAX_SELECT_SECONDS \
|
|
||||||
((unsigned long) (MAX_SCHEDULE_TIMEOUT / HZ)-1)
|
|
||||||
|
|
||||||
SYSCALL_DEFINE5(osf_select, int, n, fd_set __user *, inp, fd_set __user *, outp,
|
SYSCALL_DEFINE5(osf_select, int, n, fd_set __user *, inp, fd_set __user *, outp,
|
||||||
fd_set __user *, exp, struct timeval32 __user *, tvp)
|
fd_set __user *, exp, struct timeval32 __user *, tvp)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -65,13 +65,6 @@ alcor_mask_and_ack_irq(unsigned int irq)
|
|||||||
*(vuip)GRU_INT_CLEAR = 0; mb();
|
*(vuip)GRU_INT_CLEAR = 0; mb();
|
||||||
}
|
}
|
||||||
|
|
||||||
static unsigned int
|
|
||||||
alcor_startup_irq(unsigned int irq)
|
|
||||||
{
|
|
||||||
alcor_enable_irq(irq);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
alcor_isa_mask_and_ack_irq(unsigned int irq)
|
alcor_isa_mask_and_ack_irq(unsigned int irq)
|
||||||
{
|
{
|
||||||
@@ -82,21 +75,11 @@ alcor_isa_mask_and_ack_irq(unsigned int irq)
|
|||||||
*(vuip)GRU_INT_CLEAR = 0; mb();
|
*(vuip)GRU_INT_CLEAR = 0; mb();
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
|
||||||
alcor_end_irq(unsigned int irq)
|
|
||||||
{
|
|
||||||
if (!(irq_desc[irq].status & (IRQ_DISABLED|IRQ_INPROGRESS)))
|
|
||||||
alcor_enable_irq(irq);
|
|
||||||
}
|
|
||||||
|
|
||||||
static struct irq_chip alcor_irq_type = {
|
static struct irq_chip alcor_irq_type = {
|
||||||
.name = "ALCOR",
|
.name = "ALCOR",
|
||||||
.startup = alcor_startup_irq,
|
.unmask = alcor_enable_irq,
|
||||||
.shutdown = alcor_disable_irq,
|
.mask = alcor_disable_irq,
|
||||||
.enable = alcor_enable_irq,
|
.mask_ack = alcor_mask_and_ack_irq,
|
||||||
.disable = alcor_disable_irq,
|
|
||||||
.ack = alcor_mask_and_ack_irq,
|
|
||||||
.end = alcor_end_irq,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@@ -142,8 +125,8 @@ alcor_init_irq(void)
|
|||||||
on while IRQ probing. */
|
on while IRQ probing. */
|
||||||
if (i >= 16+20 && i <= 16+30)
|
if (i >= 16+20 && i <= 16+30)
|
||||||
continue;
|
continue;
|
||||||
irq_desc[i].status = IRQ_DISABLED | IRQ_LEVEL;
|
set_irq_chip_and_handler(i, &alcor_irq_type, handle_level_irq);
|
||||||
irq_desc[i].chip = &alcor_irq_type;
|
irq_to_desc(i)->status |= IRQ_LEVEL;
|
||||||
}
|
}
|
||||||
i8259a_irq_type.ack = alcor_isa_mask_and_ack_irq;
|
i8259a_irq_type.ack = alcor_isa_mask_and_ack_irq;
|
||||||
|
|
||||||
|
|||||||
@@ -57,28 +57,11 @@ cabriolet_disable_irq(unsigned int irq)
|
|||||||
cabriolet_update_irq_hw(irq, cached_irq_mask |= 1UL << irq);
|
cabriolet_update_irq_hw(irq, cached_irq_mask |= 1UL << irq);
|
||||||
}
|
}
|
||||||
|
|
||||||
static unsigned int
|
|
||||||
cabriolet_startup_irq(unsigned int irq)
|
|
||||||
{
|
|
||||||
cabriolet_enable_irq(irq);
|
|
||||||
return 0; /* never anything pending */
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
cabriolet_end_irq(unsigned int irq)
|
|
||||||
{
|
|
||||||
if (!(irq_desc[irq].status & (IRQ_DISABLED|IRQ_INPROGRESS)))
|
|
||||||
cabriolet_enable_irq(irq);
|
|
||||||
}
|
|
||||||
|
|
||||||
static struct irq_chip cabriolet_irq_type = {
|
static struct irq_chip cabriolet_irq_type = {
|
||||||
.name = "CABRIOLET",
|
.name = "CABRIOLET",
|
||||||
.startup = cabriolet_startup_irq,
|
.unmask = cabriolet_enable_irq,
|
||||||
.shutdown = cabriolet_disable_irq,
|
.mask = cabriolet_disable_irq,
|
||||||
.enable = cabriolet_enable_irq,
|
.mask_ack = cabriolet_disable_irq,
|
||||||
.disable = cabriolet_disable_irq,
|
|
||||||
.ack = cabriolet_disable_irq,
|
|
||||||
.end = cabriolet_end_irq,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@@ -122,8 +105,9 @@ common_init_irq(void (*srm_dev_int)(unsigned long v))
|
|||||||
outb(0xff, 0x806);
|
outb(0xff, 0x806);
|
||||||
|
|
||||||
for (i = 16; i < 35; ++i) {
|
for (i = 16; i < 35; ++i) {
|
||||||
irq_desc[i].status = IRQ_DISABLED | IRQ_LEVEL;
|
set_irq_chip_and_handler(i, &cabriolet_irq_type,
|
||||||
irq_desc[i].chip = &cabriolet_irq_type;
|
handle_level_irq);
|
||||||
|
irq_to_desc(i)->status |= IRQ_LEVEL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -115,20 +115,6 @@ dp264_disable_irq(unsigned int irq)
|
|||||||
spin_unlock(&dp264_irq_lock);
|
spin_unlock(&dp264_irq_lock);
|
||||||
}
|
}
|
||||||
|
|
||||||
static unsigned int
|
|
||||||
dp264_startup_irq(unsigned int irq)
|
|
||||||
{
|
|
||||||
dp264_enable_irq(irq);
|
|
||||||
return 0; /* never anything pending */
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
dp264_end_irq(unsigned int irq)
|
|
||||||
{
|
|
||||||
if (!(irq_desc[irq].status & (IRQ_DISABLED|IRQ_INPROGRESS)))
|
|
||||||
dp264_enable_irq(irq);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
clipper_enable_irq(unsigned int irq)
|
clipper_enable_irq(unsigned int irq)
|
||||||
{
|
{
|
||||||
@@ -147,20 +133,6 @@ clipper_disable_irq(unsigned int irq)
|
|||||||
spin_unlock(&dp264_irq_lock);
|
spin_unlock(&dp264_irq_lock);
|
||||||
}
|
}
|
||||||
|
|
||||||
static unsigned int
|
|
||||||
clipper_startup_irq(unsigned int irq)
|
|
||||||
{
|
|
||||||
clipper_enable_irq(irq);
|
|
||||||
return 0; /* never anything pending */
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
clipper_end_irq(unsigned int irq)
|
|
||||||
{
|
|
||||||
if (!(irq_desc[irq].status & (IRQ_DISABLED|IRQ_INPROGRESS)))
|
|
||||||
clipper_enable_irq(irq);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
cpu_set_irq_affinity(unsigned int irq, cpumask_t affinity)
|
cpu_set_irq_affinity(unsigned int irq, cpumask_t affinity)
|
||||||
{
|
{
|
||||||
@@ -200,23 +172,17 @@ clipper_set_affinity(unsigned int irq, const struct cpumask *affinity)
|
|||||||
|
|
||||||
static struct irq_chip dp264_irq_type = {
|
static struct irq_chip dp264_irq_type = {
|
||||||
.name = "DP264",
|
.name = "DP264",
|
||||||
.startup = dp264_startup_irq,
|
.unmask = dp264_enable_irq,
|
||||||
.shutdown = dp264_disable_irq,
|
.mask = dp264_disable_irq,
|
||||||
.enable = dp264_enable_irq,
|
.mask_ack = dp264_disable_irq,
|
||||||
.disable = dp264_disable_irq,
|
|
||||||
.ack = dp264_disable_irq,
|
|
||||||
.end = dp264_end_irq,
|
|
||||||
.set_affinity = dp264_set_affinity,
|
.set_affinity = dp264_set_affinity,
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct irq_chip clipper_irq_type = {
|
static struct irq_chip clipper_irq_type = {
|
||||||
.name = "CLIPPER",
|
.name = "CLIPPER",
|
||||||
.startup = clipper_startup_irq,
|
.unmask = clipper_enable_irq,
|
||||||
.shutdown = clipper_disable_irq,
|
.mask = clipper_disable_irq,
|
||||||
.enable = clipper_enable_irq,
|
.mask_ack = clipper_disable_irq,
|
||||||
.disable = clipper_disable_irq,
|
|
||||||
.ack = clipper_disable_irq,
|
|
||||||
.end = clipper_end_irq,
|
|
||||||
.set_affinity = clipper_set_affinity,
|
.set_affinity = clipper_set_affinity,
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -302,8 +268,8 @@ init_tsunami_irqs(struct irq_chip * ops, int imin, int imax)
|
|||||||
{
|
{
|
||||||
long i;
|
long i;
|
||||||
for (i = imin; i <= imax; ++i) {
|
for (i = imin; i <= imax; ++i) {
|
||||||
irq_desc[i].status = IRQ_DISABLED | IRQ_LEVEL;
|
irq_to_desc(i)->status |= IRQ_LEVEL;
|
||||||
irq_desc[i].chip = ops;
|
set_irq_chip_and_handler(i, ops, handle_level_irq);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -55,28 +55,11 @@ eb64p_disable_irq(unsigned int irq)
|
|||||||
eb64p_update_irq_hw(irq, cached_irq_mask |= 1 << irq);
|
eb64p_update_irq_hw(irq, cached_irq_mask |= 1 << irq);
|
||||||
}
|
}
|
||||||
|
|
||||||
static unsigned int
|
|
||||||
eb64p_startup_irq(unsigned int irq)
|
|
||||||
{
|
|
||||||
eb64p_enable_irq(irq);
|
|
||||||
return 0; /* never anything pending */
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
eb64p_end_irq(unsigned int irq)
|
|
||||||
{
|
|
||||||
if (!(irq_desc[irq].status & (IRQ_DISABLED|IRQ_INPROGRESS)))
|
|
||||||
eb64p_enable_irq(irq);
|
|
||||||
}
|
|
||||||
|
|
||||||
static struct irq_chip eb64p_irq_type = {
|
static struct irq_chip eb64p_irq_type = {
|
||||||
.name = "EB64P",
|
.name = "EB64P",
|
||||||
.startup = eb64p_startup_irq,
|
.unmask = eb64p_enable_irq,
|
||||||
.shutdown = eb64p_disable_irq,
|
.mask = eb64p_disable_irq,
|
||||||
.enable = eb64p_enable_irq,
|
.mask_ack = eb64p_disable_irq,
|
||||||
.disable = eb64p_disable_irq,
|
|
||||||
.ack = eb64p_disable_irq,
|
|
||||||
.end = eb64p_end_irq,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@@ -135,8 +118,8 @@ eb64p_init_irq(void)
|
|||||||
init_i8259a_irqs();
|
init_i8259a_irqs();
|
||||||
|
|
||||||
for (i = 16; i < 32; ++i) {
|
for (i = 16; i < 32; ++i) {
|
||||||
irq_desc[i].status = IRQ_DISABLED | IRQ_LEVEL;
|
irq_to_desc(i)->status |= IRQ_LEVEL;
|
||||||
irq_desc[i].chip = &eb64p_irq_type;
|
set_irq_chip_and_handler(i, &eb64p_irq_type, handle_level_irq);
|
||||||
}
|
}
|
||||||
|
|
||||||
common_init_isa_dma();
|
common_init_isa_dma();
|
||||||
|
|||||||
@@ -66,28 +66,11 @@ eiger_disable_irq(unsigned int irq)
|
|||||||
eiger_update_irq_hw(irq, mask);
|
eiger_update_irq_hw(irq, mask);
|
||||||
}
|
}
|
||||||
|
|
||||||
static unsigned int
|
|
||||||
eiger_startup_irq(unsigned int irq)
|
|
||||||
{
|
|
||||||
eiger_enable_irq(irq);
|
|
||||||
return 0; /* never anything pending */
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
eiger_end_irq(unsigned int irq)
|
|
||||||
{
|
|
||||||
if (!(irq_desc[irq].status & (IRQ_DISABLED|IRQ_INPROGRESS)))
|
|
||||||
eiger_enable_irq(irq);
|
|
||||||
}
|
|
||||||
|
|
||||||
static struct irq_chip eiger_irq_type = {
|
static struct irq_chip eiger_irq_type = {
|
||||||
.name = "EIGER",
|
.name = "EIGER",
|
||||||
.startup = eiger_startup_irq,
|
.unmask = eiger_enable_irq,
|
||||||
.shutdown = eiger_disable_irq,
|
.mask = eiger_disable_irq,
|
||||||
.enable = eiger_enable_irq,
|
.mask_ack = eiger_disable_irq,
|
||||||
.disable = eiger_disable_irq,
|
|
||||||
.ack = eiger_disable_irq,
|
|
||||||
.end = eiger_end_irq,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@@ -153,8 +136,8 @@ eiger_init_irq(void)
|
|||||||
init_i8259a_irqs();
|
init_i8259a_irqs();
|
||||||
|
|
||||||
for (i = 16; i < 128; ++i) {
|
for (i = 16; i < 128; ++i) {
|
||||||
irq_desc[i].status = IRQ_DISABLED | IRQ_LEVEL;
|
irq_to_desc(i)->status |= IRQ_LEVEL;
|
||||||
irq_desc[i].chip = &eiger_irq_type;
|
set_irq_chip_and_handler(i, &eiger_irq_type, handle_level_irq);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user