提交 75779112 编写于 作者: M Mauro Carvalho Chehab

Merge tag 'v3.1-rc6' into staging/for_v3.2

* tag 'v3.1-rc6': (1902 commits)
  Linux 3.1-rc6
  ioctl: register LTTng ioctl
  fuse: fix memory leak
  fuse: fix flock breakage
  Btrfs: add dummy extent if dst offset excceeds file end in
  Btrfs: calc file extent num_bytes correctly in file clone
  btrfs: xattr: fix attribute removal
  Btrfs: fix wrong nbytes information of the inode
  Btrfs: fix the file extent gap when doing direct IO
  Btrfs: fix unclosed transaction handle in btrfs_cont_expand
  Btrfs: fix misuse of trans block rsv
  Btrfs: reset to appropriate block rsv after orphan operations
  Btrfs: skip locking if searching the commit root in csum lookup
  btrfs: fix warning in iput for bad-inode
  Btrfs: fix an oops when deleting snapshots
  [media] vp7045: fix buffer setup
  [media] nuvoton-cir: simplify raw IR sample handling
  [media] [Resend] viacam: Don't explode if pci_find_bus() returns NULL
  [media] v4l2: Fix documentation of the codec device controls
  [media] gspca - sonixj: Fix the darkness of sensor om6802 in 320x240
  ...

要显示的变更太多。

To preserve performance only 1000 of 1000+ files are displayed.
...@@ -504,7 +504,7 @@ N: Dominik Brodowski ...@@ -504,7 +504,7 @@ N: Dominik Brodowski
E: linux@brodo.de E: linux@brodo.de
W: http://www.brodo.de/ W: http://www.brodo.de/
P: 1024D/725B37C6 190F 3E77 9C89 3B6D BECD 46EE 67C3 0308 725B 37C6 P: 1024D/725B37C6 190F 3E77 9C89 3B6D BECD 46EE 67C3 0308 725B 37C6
D: parts of CPUFreq code, ACPI bugfixes D: parts of CPUFreq code, ACPI bugfixes, PCMCIA rewrite, cpufrequtils
S: Tuebingen, Germany S: Tuebingen, Germany
N: Andries Brouwer N: Andries Brouwer
...@@ -857,6 +857,10 @@ S: One Dell Way ...@@ -857,6 +857,10 @@ S: One Dell Way
S: Round Rock, TX 78682 S: Round Rock, TX 78682
S: USA S: USA
N: Mattia Dongili
E: malattia@gmail.com
D: cpufrequtils (precursor to cpupowerutils)
N: Ben Dooks N: Ben Dooks
E: ben-linux@fluff.org E: ben-linux@fluff.org
E: ben@simtec.co.uk E: ben@simtec.co.uk
...@@ -1883,6 +1887,11 @@ S: Kruislaan 419 ...@@ -1883,6 +1887,11 @@ S: Kruislaan 419
S: 1098 VA Amsterdam S: 1098 VA Amsterdam
S: The Netherlands S: The Netherlands
N: Goran Koruga
E: korugag@siol.net
D: cpufrequtils (precursor to cpupowerutils)
S: Slovenia
N: Jiri Kosina N: Jiri Kosina
E: jikos@jikos.cz E: jikos@jikos.cz
E: jkosina@suse.cz E: jkosina@suse.cz
...@@ -2916,6 +2925,12 @@ S: Schlossbergring 9 ...@@ -2916,6 +2925,12 @@ S: Schlossbergring 9
S: 79098 Freiburg S: 79098 Freiburg
S: Germany S: Germany
N: Thomas Renninger
E: trenn@suse.de
D: cpupowerutils
S: SUSE Linux GmbH
S: Germany
N: Joerg Reuter N: Joerg Reuter
E: jreuter@yaina.de E: jreuter@yaina.de
W: http://yaina.de/jreuter/ W: http://yaina.de/jreuter/
......
...@@ -272,6 +272,8 @@ printk-formats.txt ...@@ -272,6 +272,8 @@ printk-formats.txt
- how to get printk format specifiers right - how to get printk format specifiers right
prio_tree.txt prio_tree.txt
- info on radix-priority-search-tree use for indexing vmas. - info on radix-priority-search-tree use for indexing vmas.
ramoops.txt
- documentation of the ramoops oops/panic logging module.
rbtree.txt rbtree.txt
- info on what red-black trees are and what they are for. - info on what red-black trees are and what they are for.
robust-futex-ABI.txt robust-futex-ABI.txt
......
...@@ -39,3 +39,9 @@ Description: Generic interface to platform dependent persistent storage. ...@@ -39,3 +39,9 @@ Description: Generic interface to platform dependent persistent storage.
multiple) files based on the record size of the underlying multiple) files based on the record size of the underlying
persistent storage until at least this amount is reached. persistent storage until at least this amount is reached.
Default is 10 Kbytes. Default is 10 Kbytes.
Pstore only supports one backend at a time. If multiple
backends are available, the preferred backend may be
set by passing the pstore.backend= argument to the kernel at
boot time.
...@@ -4,3 +4,20 @@ KernelVersion: 2.6.37 ...@@ -4,3 +4,20 @@ KernelVersion: 2.6.37
Contact: "Ike Panhc <ike.pan@canonical.com>" Contact: "Ike Panhc <ike.pan@canonical.com>"
Description: Description:
Control the power of camera module. 1 means on, 0 means off. Control the power of camera module. 1 means on, 0 means off.
What: /sys/devices/platform/ideapad/cfg
Date: Jun 2011
KernelVersion: 3.1
Contact: "Ike Panhc <ike.pan@canonical.com>"
Description:
Ideapad capability bits.
Bit 8-10: 1 - Intel graphic only
2 - ATI graphic only
3 - Nvidia graphic only
4 - Intel and ATI graphic
5 - Intel and Nvidia graphic
Bit 16: Bluetooth exist (1 for exist)
Bit 17: 3G exist (1 for exist)
Bit 18: Wifi exist (1 for exist)
Bit 19: Camera exist (1 for exist)
...@@ -80,22 +80,13 @@ available tools. ...@@ -80,22 +80,13 @@ available tools.
The limit on the length of lines is 80 columns and this is a strongly The limit on the length of lines is 80 columns and this is a strongly
preferred limit. preferred limit.
Statements longer than 80 columns will be broken into sensible chunks. Statements longer than 80 columns will be broken into sensible chunks, unless
Descendants are always substantially shorter than the parent and are placed exceeding 80 columns significantly increases readability and does not hide
substantially to the right. The same applies to function headers with a long information. Descendants are always substantially shorter than the parent and
argument list. Long strings are as well broken into shorter strings. The are placed substantially to the right. The same applies to function headers
only exception to this is where exceeding 80 columns significantly increases with a long argument list. However, never break user-visible strings such as
readability and does not hide information. printk messages, because that breaks the ability to grep for them.
void fun(int a, int b, int c)
{
if (condition)
printk(KERN_WARNING "Warning this is a long printk with "
"3 parameters a: %u b: %u "
"c: %u \n", a, b, c);
else
next_statement;
}
Chapter 3: Placing Braces and Spaces Chapter 3: Placing Braces and Spaces
......
...@@ -1455,7 +1455,7 @@ Applicable to the H264 encoder.</entry> ...@@ -1455,7 +1455,7 @@ Applicable to the H264 encoder.</entry>
</row> </row>
<row><entry></entry></row> <row><entry></entry></row>
<row> <row id="v4l2-mpeg-video-h264-vui-sar-idc">
<entry spanname="id"><constant>V4L2_CID_MPEG_VIDEO_H264_VUI_SAR_IDC</constant>&nbsp;</entry> <entry spanname="id"><constant>V4L2_CID_MPEG_VIDEO_H264_VUI_SAR_IDC</constant>&nbsp;</entry>
<entry>enum&nbsp;v4l2_mpeg_video_h264_vui_sar_idc</entry> <entry>enum&nbsp;v4l2_mpeg_video_h264_vui_sar_idc</entry>
</row> </row>
...@@ -1561,7 +1561,7 @@ Applicable to the H264 encoder.</entry> ...@@ -1561,7 +1561,7 @@ Applicable to the H264 encoder.</entry>
</row> </row>
<row><entry></entry></row> <row><entry></entry></row>
<row> <row id="v4l2-mpeg-video-h264-level">
<entry spanname="id"><constant>V4L2_CID_MPEG_VIDEO_H264_LEVEL</constant>&nbsp;</entry> <entry spanname="id"><constant>V4L2_CID_MPEG_VIDEO_H264_LEVEL</constant>&nbsp;</entry>
<entry>enum&nbsp;v4l2_mpeg_video_h264_level</entry> <entry>enum&nbsp;v4l2_mpeg_video_h264_level</entry>
</row> </row>
...@@ -1641,7 +1641,7 @@ Possible values are:</entry> ...@@ -1641,7 +1641,7 @@ Possible values are:</entry>
</row> </row>
<row><entry></entry></row> <row><entry></entry></row>
<row> <row id="v4l2-mpeg-video-mpeg4-level">
<entry spanname="id"><constant>V4L2_CID_MPEG_VIDEO_MPEG4_LEVEL</constant>&nbsp;</entry> <entry spanname="id"><constant>V4L2_CID_MPEG_VIDEO_MPEG4_LEVEL</constant>&nbsp;</entry>
<entry>enum&nbsp;v4l2_mpeg_video_mpeg4_level</entry> <entry>enum&nbsp;v4l2_mpeg_video_mpeg4_level</entry>
</row> </row>
...@@ -1689,9 +1689,9 @@ Possible values are:</entry> ...@@ -1689,9 +1689,9 @@ Possible values are:</entry>
</row> </row>
<row><entry></entry></row> <row><entry></entry></row>
<row> <row id="v4l2-mpeg-video-h264-profile">
<entry spanname="id"><constant>V4L2_CID_MPEG_VIDEO_H264_PROFILE</constant>&nbsp;</entry> <entry spanname="id"><constant>V4L2_CID_MPEG_VIDEO_H264_PROFILE</constant>&nbsp;</entry>
<entry>enum&nbsp;v4l2_mpeg_h264_profile</entry> <entry>enum&nbsp;v4l2_mpeg_video_h264_profile</entry>
</row> </row>
<row><entry spanname="descr">The profile information for H264. <row><entry spanname="descr">The profile information for H264.
Applicable to the H264 encoder. Applicable to the H264 encoder.
...@@ -1774,9 +1774,9 @@ Possible values are:</entry> ...@@ -1774,9 +1774,9 @@ Possible values are:</entry>
</row> </row>
<row><entry></entry></row> <row><entry></entry></row>
<row> <row id="v4l2-mpeg-video-mpeg4-profile">
<entry spanname="id"><constant>V4L2_CID_MPEG_VIDEO_MPEG4_PROFILE</constant>&nbsp;</entry> <entry spanname="id"><constant>V4L2_CID_MPEG_VIDEO_MPEG4_PROFILE</constant>&nbsp;</entry>
<entry>enum&nbsp;v4l2_mpeg_mpeg4_profile</entry> <entry>enum&nbsp;v4l2_mpeg_video_mpeg4_profile</entry>
</row> </row>
<row><entry spanname="descr">The profile information for MPEG4. <row><entry spanname="descr">The profile information for MPEG4.
Applicable to the MPEG4 encoder. Applicable to the MPEG4 encoder.
...@@ -1820,9 +1820,9 @@ Applicable to the encoder. ...@@ -1820,9 +1820,9 @@ Applicable to the encoder.
</row> </row>
<row><entry></entry></row> <row><entry></entry></row>
<row> <row id="v4l2-mpeg-video-multi-slice-mode">
<entry spanname="id"><constant>V4L2_CID_MPEG_VIDEO_MULTI_SLICE_MODE</constant>&nbsp;</entry> <entry spanname="id"><constant>V4L2_CID_MPEG_VIDEO_MULTI_SLICE_MODE</constant>&nbsp;</entry>
<entry>enum&nbsp;v4l2_mpeg_multi_slice_mode</entry> <entry>enum&nbsp;v4l2_mpeg_video_multi_slice_mode</entry>
</row> </row>
<row><entry spanname="descr">Determines how the encoder should handle division of frame into slices. <row><entry spanname="descr">Determines how the encoder should handle division of frame into slices.
Applicable to the encoder. Applicable to the encoder.
...@@ -1868,9 +1868,9 @@ Applicable to the encoder.</entry> ...@@ -1868,9 +1868,9 @@ Applicable to the encoder.</entry>
</row> </row>
<row><entry></entry></row> <row><entry></entry></row>
<row> <row id="v4l2-mpeg-video-h264-loop-filter-mode">
<entry spanname="id"><constant>V4L2_CID_MPEG_VIDEO_H264_LOOP_FILTER_MODE</constant>&nbsp;</entry> <entry spanname="id"><constant>V4L2_CID_MPEG_VIDEO_H264_LOOP_FILTER_MODE</constant>&nbsp;</entry>
<entry>enum&nbsp;v4l2_mpeg_h264_loop_filter_mode</entry> <entry>enum&nbsp;v4l2_mpeg_video_h264_loop_filter_mode</entry>
</row> </row>
<row><entry spanname="descr">Loop filter mode for H264 encoder. <row><entry spanname="descr">Loop filter mode for H264 encoder.
Possible values are:</entry> Possible values are:</entry>
...@@ -1913,9 +1913,9 @@ Applicable to the H264 encoder.</entry> ...@@ -1913,9 +1913,9 @@ Applicable to the H264 encoder.</entry>
</row> </row>
<row><entry></entry></row> <row><entry></entry></row>
<row> <row id="v4l2-mpeg-video-h264-entropy-mode">
<entry spanname="id"><constant>V4L2_CID_MPEG_VIDEO_H264_ENTROPY_MODE</constant>&nbsp;</entry> <entry spanname="id"><constant>V4L2_CID_MPEG_VIDEO_H264_ENTROPY_MODE</constant>&nbsp;</entry>
<entry>enum&nbsp;v4l2_mpeg_h264_symbol_mode</entry> <entry>enum&nbsp;v4l2_mpeg_video_h264_entropy_mode</entry>
</row> </row>
<row><entry spanname="descr">Entropy coding mode for H264 - CABAC/CAVALC. <row><entry spanname="descr">Entropy coding mode for H264 - CABAC/CAVALC.
Applicable to the H264 encoder. Applicable to the H264 encoder.
...@@ -2140,9 +2140,9 @@ previous frames. Applicable to the H264 encoder.</entry> ...@@ -2140,9 +2140,9 @@ previous frames. Applicable to the H264 encoder.</entry>
</row> </row>
<row><entry></entry></row> <row><entry></entry></row>
<row> <row id="v4l2-mpeg-video-header-mode">
<entry spanname="id"><constant>V4L2_CID_MPEG_VIDEO_HEADER_MODE</constant>&nbsp;</entry> <entry spanname="id"><constant>V4L2_CID_MPEG_VIDEO_HEADER_MODE</constant>&nbsp;</entry>
<entry>enum&nbsp;v4l2_mpeg_header_mode</entry> <entry>enum&nbsp;v4l2_mpeg_video_header_mode</entry>
</row> </row>
<row><entry spanname="descr">Determines whether the header is returned as the first buffer or is <row><entry spanname="descr">Determines whether the header is returned as the first buffer or is
it returned together with the first frame. Applicable to encoders. it returned together with the first frame. Applicable to encoders.
...@@ -2320,9 +2320,9 @@ Valid only when H.264 and macroblock level RC is enabled (<constant>V4L2_CID_MPE ...@@ -2320,9 +2320,9 @@ Valid only when H.264 and macroblock level RC is enabled (<constant>V4L2_CID_MPE
Applicable to the H264 encoder.</entry> Applicable to the H264 encoder.</entry>
</row> </row>
<row><entry></entry></row> <row><entry></entry></row>
<row> <row id="v4l2-mpeg-mfc51-video-frame-skip-mode">
<entry spanname="id"><constant>V4L2_CID_MPEG_MFC51_VIDEO_FRAME_SKIP_MODE</constant>&nbsp;</entry> <entry spanname="id"><constant>V4L2_CID_MPEG_MFC51_VIDEO_FRAME_SKIP_MODE</constant>&nbsp;</entry>
<entry>enum&nbsp;v4l2_mpeg_mfc51_frame_skip_mode</entry> <entry>enum&nbsp;v4l2_mpeg_mfc51_video_frame_skip_mode</entry>
</row> </row>
<row><entry spanname="descr"> <row><entry spanname="descr">
Indicates in what conditions the encoder should skip frames. If encoding a frame would cause the encoded stream to be larger then Indicates in what conditions the encoder should skip frames. If encoding a frame would cause the encoded stream to be larger then
...@@ -2361,9 +2361,9 @@ the stream will meet tight bandwidth contraints. Applicable to encoders. ...@@ -2361,9 +2361,9 @@ the stream will meet tight bandwidth contraints. Applicable to encoders.
</entry> </entry>
</row> </row>
<row><entry></entry></row> <row><entry></entry></row>
<row> <row id="v4l2-mpeg-mfc51-video-force-frame-type">
<entry spanname="id"><constant>V4L2_CID_MPEG_MFC51_VIDEO_FORCE_FRAME_TYPE</constant>&nbsp;</entry> <entry spanname="id"><constant>V4L2_CID_MPEG_MFC51_VIDEO_FORCE_FRAME_TYPE</constant>&nbsp;</entry>
<entry>enum&nbsp;v4l2_mpeg_mfc51_force_frame_type</entry> <entry>enum&nbsp;v4l2_mpeg_mfc51_video_force_frame_type</entry>
</row> </row>
<row><entry spanname="descr">Force a frame type for the next queued buffer. Applicable to encoders. <row><entry spanname="descr">Force a frame type for the next queued buffer. Applicable to encoders.
Possible values are:</entry> Possible values are:</entry>
......
...@@ -45,7 +45,7 @@ arrived in memory (this becomes more likely with devices behind PCI-PCI ...@@ -45,7 +45,7 @@ arrived in memory (this becomes more likely with devices behind PCI-PCI
bridges). In order to ensure that all the data has arrived in memory, bridges). In order to ensure that all the data has arrived in memory,
the interrupt handler must read a register on the device which raised the interrupt handler must read a register on the device which raised
the interrupt. PCI transaction ordering rules require that all the data the interrupt. PCI transaction ordering rules require that all the data
arrives in memory before the value can be returned from the register. arrive in memory before the value may be returned from the register.
Using MSIs avoids this problem as the interrupt-generating write cannot Using MSIs avoids this problem as the interrupt-generating write cannot
pass the data writes, so by the time the interrupt is raised, the driver pass the data writes, so by the time the interrupt is raised, the driver
knows that all the data has arrived in memory. knows that all the data has arrived in memory.
...@@ -86,13 +86,13 @@ device. ...@@ -86,13 +86,13 @@ device.
int pci_enable_msi(struct pci_dev *dev) int pci_enable_msi(struct pci_dev *dev)
A successful call will allocate ONE interrupt to the device, regardless A successful call allocates ONE interrupt to the device, regardless
of how many MSIs the device supports. The device will be switched from of how many MSIs the device supports. The device is switched from
pin-based interrupt mode to MSI mode. The dev->irq number is changed pin-based interrupt mode to MSI mode. The dev->irq number is changed
to a new number which represents the message signaled interrupt. to a new number which represents the message signaled interrupt;
This function should be called before the driver calls request_irq() consequently, this function should be called before the driver calls
since enabling MSIs disables the pin-based IRQ and the driver will not request_irq(), because an MSI is delivered via a vector that is
receive interrupts on the old interrupt. different from the vector of a pin-based interrupt.
4.2.2 pci_enable_msi_block 4.2.2 pci_enable_msi_block
...@@ -111,20 +111,20 @@ the device are in the range dev->irq to dev->irq + count - 1. ...@@ -111,20 +111,20 @@ the device are in the range dev->irq to dev->irq + count - 1.
If this function returns a negative number, it indicates an error and If this function returns a negative number, it indicates an error and
the driver should not attempt to request any more MSI interrupts for the driver should not attempt to request any more MSI interrupts for
this device. If this function returns a positive number, it will be this device. If this function returns a positive number, it is
less than 'count' and indicate the number of interrupts that could have less than 'count' and indicates the number of interrupts that could have
been allocated. In neither case will the irq value have been been allocated. In neither case is the irq value updated or the device
updated, nor will the device have been switched into MSI mode. switched into MSI mode.
The device driver must decide what action to take if The device driver must decide what action to take if
pci_enable_msi_block() returns a value less than the number asked for. pci_enable_msi_block() returns a value less than the number requested.
Some devices can make use of fewer interrupts than the maximum they For instance, the driver could still make use of fewer interrupts;
request; in this case the driver should call pci_enable_msi_block() in this case the driver should call pci_enable_msi_block()
again. Note that it is not guaranteed to succeed, even when the again. Note that it is not guaranteed to succeed, even when the
'count' has been reduced to the value returned from a previous call to 'count' has been reduced to the value returned from a previous call to
pci_enable_msi_block(). This is because there are multiple constraints pci_enable_msi_block(). This is because there are multiple constraints
on the number of vectors that can be allocated; pci_enable_msi_block() on the number of vectors that can be allocated; pci_enable_msi_block()
will return as soon as it finds any constraint that doesn't allow the returns as soon as it finds any constraint that doesn't allow the
call to succeed. call to succeed.
4.2.3 pci_disable_msi 4.2.3 pci_disable_msi
...@@ -137,10 +137,10 @@ interrupt number and frees the previously allocated message signaled ...@@ -137,10 +137,10 @@ interrupt number and frees the previously allocated message signaled
interrupt(s). The interrupt may subsequently be assigned to another interrupt(s). The interrupt may subsequently be assigned to another
device, so drivers should not cache the value of dev->irq. device, so drivers should not cache the value of dev->irq.
A device driver must always call free_irq() on the interrupt(s) Before calling this function, a device driver must always call free_irq()
for which it has called request_irq() before calling this function. on any interrupt for which it previously called request_irq().
Failure to do so will result in a BUG_ON(), the device will be left with Failure to do so results in a BUG_ON(), leaving the device with
MSI enabled and will leak its vector. MSI enabled and thus leaking its vector.
4.3 Using MSI-X 4.3 Using MSI-X
...@@ -155,10 +155,10 @@ struct msix_entry { ...@@ -155,10 +155,10 @@ struct msix_entry {
}; };
This allows for the device to use these interrupts in a sparse fashion; This allows for the device to use these interrupts in a sparse fashion;
for example it could use interrupts 3 and 1027 and allocate only a for example, it could use interrupts 3 and 1027 and yet allocate only a
two-element array. The driver is expected to fill in the 'entry' value two-element array. The driver is expected to fill in the 'entry' value
in each element of the array to indicate which entries it wants the kernel in each element of the array to indicate for which entries the kernel
to assign interrupts for. It is invalid to fill in two entries with the should assign interrupts; it is invalid to fill in two entries with the
same number. same number.
4.3.1 pci_enable_msix 4.3.1 pci_enable_msix
...@@ -168,10 +168,11 @@ int pci_enable_msix(struct pci_dev *dev, struct msix_entry *entries, int nvec) ...@@ -168,10 +168,11 @@ int pci_enable_msix(struct pci_dev *dev, struct msix_entry *entries, int nvec)
Calling this function asks the PCI subsystem to allocate 'nvec' MSIs. Calling this function asks the PCI subsystem to allocate 'nvec' MSIs.
The 'entries' argument is a pointer to an array of msix_entry structs The 'entries' argument is a pointer to an array of msix_entry structs
which should be at least 'nvec' entries in size. On success, the which should be at least 'nvec' entries in size. On success, the
function will return 0 and the device will have been switched into device is switched into MSI-X mode and the function returns 0.
MSI-X interrupt mode. The 'vector' elements in each entry will have The 'vector' member in each entry is populated with the interrupt number;
been filled in with the interrupt number. The driver should then call the driver should then call request_irq() for each 'vector' that it
request_irq() for each 'vector' that it decides to use. decides to use. The device driver is responsible for keeping track of the
interrupts assigned to the MSI-X vectors so it can free them again later.
If this function returns a negative number, it indicates an error and If this function returns a negative number, it indicates an error and
the driver should not attempt to allocate any more MSI-X interrupts for the driver should not attempt to allocate any more MSI-X interrupts for
...@@ -181,16 +182,14 @@ below. ...@@ -181,16 +182,14 @@ below.
This function, in contrast with pci_enable_msi(), does not adjust This function, in contrast with pci_enable_msi(), does not adjust
dev->irq. The device will not generate interrupts for this interrupt dev->irq. The device will not generate interrupts for this interrupt
number once MSI-X is enabled. The device driver is responsible for number once MSI-X is enabled.
keeping track of the interrupts assigned to the MSI-X vectors so it can
free them again later.
Device drivers should normally call this function once per device Device drivers should normally call this function once per device
during the initialization phase. during the initialization phase.
It is ideal if drivers can cope with a variable number of MSI-X interrupts, It is ideal if drivers can cope with a variable number of MSI-X interrupts;
there are many reasons why the platform may not be able to provide the there are many reasons why the platform may not be able to provide the
exact number a driver asks for. exact number that a driver asks for.
A request loop to achieve that might look like: A request loop to achieve that might look like:
...@@ -212,15 +211,15 @@ static int foo_driver_enable_msix(struct foo_adapter *adapter, int nvec) ...@@ -212,15 +211,15 @@ static int foo_driver_enable_msix(struct foo_adapter *adapter, int nvec)
void pci_disable_msix(struct pci_dev *dev) void pci_disable_msix(struct pci_dev *dev)
This API should be used to undo the effect of pci_enable_msix(). It frees This function should be used to undo the effect of pci_enable_msix(). It frees
the previously allocated message signaled interrupts. The interrupts may the previously allocated message signaled interrupts. The interrupts may
subsequently be assigned to another device, so drivers should not cache subsequently be assigned to another device, so drivers should not cache
the value of the 'vector' elements over a call to pci_disable_msix(). the value of the 'vector' elements over a call to pci_disable_msix().
A device driver must always call free_irq() on the interrupt(s) Before calling this function, a device driver must always call free_irq()
for which it has called request_irq() before calling this function. on any interrupt for which it previously called request_irq().
Failure to do so will result in a BUG_ON(), the device will be left with Failure to do so results in a BUG_ON(), leaving the device with
MSI enabled and will leak its vector. MSI-X enabled and thus leaking its vector.
4.3.3 The MSI-X Table 4.3.3 The MSI-X Table
...@@ -232,10 +231,10 @@ mask or unmask an interrupt, it should call disable_irq() / enable_irq(). ...@@ -232,10 +231,10 @@ mask or unmask an interrupt, it should call disable_irq() / enable_irq().
4.4 Handling devices implementing both MSI and MSI-X capabilities 4.4 Handling devices implementing both MSI and MSI-X capabilities
If a device implements both MSI and MSI-X capabilities, it can If a device implements both MSI and MSI-X capabilities, it can
run in either MSI mode or MSI-X mode but not both simultaneously. run in either MSI mode or MSI-X mode, but not both simultaneously.
This is a requirement of the PCI spec, and it is enforced by the This is a requirement of the PCI spec, and it is enforced by the
PCI layer. Calling pci_enable_msi() when MSI-X is already enabled or PCI layer. Calling pci_enable_msi() when MSI-X is already enabled or
pci_enable_msix() when MSI is already enabled will result in an error. pci_enable_msix() when MSI is already enabled results in an error.
If a device driver wishes to switch between MSI and MSI-X at runtime, If a device driver wishes to switch between MSI and MSI-X at runtime,
it must first quiesce the device, then switch it back to pin-interrupt it must first quiesce the device, then switch it back to pin-interrupt
mode, before calling pci_enable_msi() or pci_enable_msix() and resuming mode, before calling pci_enable_msi() or pci_enable_msix() and resuming
...@@ -251,7 +250,7 @@ the MSI-X facilities in preference to the MSI facilities. As mentioned ...@@ -251,7 +250,7 @@ the MSI-X facilities in preference to the MSI facilities. As mentioned
above, MSI-X supports any number of interrupts between 1 and 2048. above, MSI-X supports any number of interrupts between 1 and 2048.
In constrast, MSI is restricted to a maximum of 32 interrupts (and In constrast, MSI is restricted to a maximum of 32 interrupts (and
must be a power of two). In addition, the MSI interrupt vectors must must be a power of two). In addition, the MSI interrupt vectors must
be allocated consecutively, so the system may not be able to allocate be allocated consecutively, so the system might not be able to allocate
as many vectors for MSI as it could for MSI-X. On some platforms, MSI as many vectors for MSI as it could for MSI-X. On some platforms, MSI
interrupts must all be targeted at the same set of CPUs whereas MSI-X interrupts must all be targeted at the same set of CPUs whereas MSI-X
interrupts can all be targeted at different CPUs. interrupts can all be targeted at different CPUs.
...@@ -281,7 +280,7 @@ disabled to enabled and back again. ...@@ -281,7 +280,7 @@ disabled to enabled and back again.
Using 'lspci -v' (as root) may show some devices with "MSI", "Message Using 'lspci -v' (as root) may show some devices with "MSI", "Message
Signalled Interrupts" or "MSI-X" capabilities. Each of these capabilities Signalled Interrupts" or "MSI-X" capabilities. Each of these capabilities
has an 'Enable' flag which will be followed with either "+" (enabled) has an 'Enable' flag which is followed with either "+" (enabled)
or "-" (disabled). or "-" (disabled).
...@@ -298,7 +297,7 @@ The PCI stack provides three ways to disable MSIs: ...@@ -298,7 +297,7 @@ The PCI stack provides three ways to disable MSIs:
Some host chipsets simply don't support MSIs properly. If we're Some host chipsets simply don't support MSIs properly. If we're
lucky, the manufacturer knows this and has indicated it in the ACPI lucky, the manufacturer knows this and has indicated it in the ACPI
FADT table. In this case, Linux will automatically disable MSIs. FADT table. In this case, Linux automatically disables MSIs.
Some boards don't include this information in the table and so we have Some boards don't include this information in the table and so we have
to detect them ourselves. The complete list of these is found near the to detect them ourselves. The complete list of these is found near the
quirk_disable_all_msi() function in drivers/pci/quirks.c. quirk_disable_all_msi() function in drivers/pci/quirks.c.
...@@ -317,7 +316,7 @@ Some bridges allow you to enable MSIs by changing some bits in their ...@@ -317,7 +316,7 @@ Some bridges allow you to enable MSIs by changing some bits in their
PCI configuration space (especially the Hypertransport chipsets such PCI configuration space (especially the Hypertransport chipsets such
as the nVidia nForce and Serverworks HT2000). As with host chipsets, as the nVidia nForce and Serverworks HT2000). As with host chipsets,
Linux mostly knows about them and automatically enables MSIs if it can. Linux mostly knows about them and automatically enables MSIs if it can.
If you have a bridge which Linux doesn't yet know about, you can enable If you have a bridge unknown to Linux, you can enable
MSIs in configuration space using whatever method you know works, then MSIs in configuration space using whatever method you know works, then
enable MSIs on that bridge by doing: enable MSIs on that bridge by doing:
...@@ -327,7 +326,7 @@ where $bridge is the PCI address of the bridge you've enabled (eg ...@@ -327,7 +326,7 @@ where $bridge is the PCI address of the bridge you've enabled (eg
0000:00:0e.0). 0000:00:0e.0).
To disable MSIs, echo 0 instead of 1. Changing this value should be To disable MSIs, echo 0 instead of 1. Changing this value should be
done with caution as it can break interrupt handling for all devices done with caution as it could break interrupt handling for all devices
below this bridge. below this bridge.
Again, please notify linux-pci@vger.kernel.org of any bridges that need Again, please notify linux-pci@vger.kernel.org of any bridges that need
...@@ -336,7 +335,7 @@ special handling. ...@@ -336,7 +335,7 @@ special handling.
5.3. Disabling MSIs on a single device 5.3. Disabling MSIs on a single device
Some devices are known to have faulty MSI implementations. Usually this Some devices are known to have faulty MSI implementations. Usually this
is handled in the individual device driver but occasionally it's necessary is handled in the individual device driver, but occasionally it's necessary
to handle this with a quirk. Some drivers have an option to disable use to handle this with a quirk. Some drivers have an option to disable use
of MSI. While this is a convenient workaround for the driver author, of MSI. While this is a convenient workaround for the driver author,
it is not good practise, and should not be emulated. it is not good practise, and should not be emulated.
...@@ -350,7 +349,7 @@ for your machine. You should also check your .config to be sure you ...@@ -350,7 +349,7 @@ for your machine. You should also check your .config to be sure you
have enabled CONFIG_PCI_MSI. have enabled CONFIG_PCI_MSI.
Then, 'lspci -t' gives the list of bridges above a device. Reading Then, 'lspci -t' gives the list of bridges above a device. Reading
/sys/bus/pci/devices/*/msi_bus will tell you whether MSI are enabled (1) /sys/bus/pci/devices/*/msi_bus will tell you whether MSIs are enabled (1)
or disabled (0). If 0 is found in any of the msi_bus files belonging or disabled (0). If 0 is found in any of the msi_bus files belonging
to bridges between the PCI root and the device, MSIs are disabled. to bridges between the PCI root and the device, MSIs are disabled.
......
...@@ -130,7 +130,7 @@ Linux kernel master tree: ...@@ -130,7 +130,7 @@ Linux kernel master tree:
ftp.??.kernel.org:/pub/linux/kernel/... ftp.??.kernel.org:/pub/linux/kernel/...
?? == your country code, such as "us", "uk", "fr", etc. ?? == your country code, such as "us", "uk", "fr", etc.
http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git http://git.kernel.org/?p=linux/kernel/git/torvalds/linux.git
Linux kernel mailing list: Linux kernel mailing list:
linux-kernel@vger.kernel.org linux-kernel@vger.kernel.org
......
...@@ -303,7 +303,7 @@ patches that are being emailed around. ...@@ -303,7 +303,7 @@ patches that are being emailed around.
The sign-off is a simple line at the end of the explanation for the The sign-off is a simple line at the end of the explanation for the
patch, which certifies that you wrote it or otherwise have the right to patch, which certifies that you wrote it or otherwise have the right to
pass it on as a open-source patch. The rules are pretty simple: if you pass it on as an open-source patch. The rules are pretty simple: if you
can certify the below: can certify the below:
Developer's Certificate of Origin 1.1 Developer's Certificate of Origin 1.1
......
...@@ -48,12 +48,19 @@ directory apei/einj. The following files are provided. ...@@ -48,12 +48,19 @@ directory apei/einj. The following files are provided.
- param1 - param1
This file is used to set the first error parameter value. Effect of This file is used to set the first error parameter value. Effect of
parameter depends on error_type specified. For memory error, this is parameter depends on error_type specified. For memory error, this is
physical memory address. physical memory address. Only available if param_extension module
parameter is specified.
- param2 - param2
This file is used to set the second error parameter value. Effect of This file is used to set the second error parameter value. Effect of
parameter depends on error_type specified. For memory error, this is parameter depends on error_type specified. For memory error, this is
physical memory address mask. physical memory address mask. Only available if param_extension
module parameter is specified.
Injecting parameter support is a BIOS version specific extension, that
is, it only works on some BIOS version. If you want to use it, please
make sure your BIOS version has the proper support and specify
"param_extension=y" in module parameter.
For more information about EINJ, please refer to ACPI specification For more information about EINJ, please refer to ACPI specification
version 4.0, section 17.5. version 4.0, section 17.5.
...@@ -43,3 +43,74 @@ If one sets slice_idle=0 and if storage supports NCQ, CFQ internally switches ...@@ -43,3 +43,74 @@ If one sets slice_idle=0 and if storage supports NCQ, CFQ internally switches
to IOPS mode and starts providing fairness in terms of number of requests to IOPS mode and starts providing fairness in terms of number of requests
dispatched. Note that this mode switching takes effect only for group dispatched. Note that this mode switching takes effect only for group
scheduling. For non-cgroup users nothing should change. scheduling. For non-cgroup users nothing should change.
CFQ IO scheduler Idling Theory
===============================
Idling on a queue is primarily about waiting for the next request to come
on same queue after completion of a request. In this process CFQ will not
dispatch requests from other cfq queues even if requests are pending there.
The rationale behind idling is that it can cut down on number of seeks
on rotational media. For example, if a process is doing dependent
sequential reads (next read will come on only after completion of previous
one), then not dispatching request from other queue should help as we
did not move the disk head and kept on dispatching sequential IO from
one queue.
CFQ has following service trees and various queues are put on these trees.
sync-idle sync-noidle async
All cfq queues doing synchronous sequential IO go on to sync-idle tree.
On this tree we idle on each queue individually.
All synchronous non-sequential queues go on sync-noidle tree. Also any
request which are marked with REQ_NOIDLE go on this service tree. On this
tree we do not idle on individual queues instead idle on the whole group
of queues or the tree. So if there are 4 queues waiting for IO to dispatch
we will idle only once last queue has dispatched the IO and there is
no more IO on this service tree.
All async writes go on async service tree. There is no idling on async
queues.
CFQ has some optimizations for SSDs and if it detects a non-rotational
media which can support higher queue depth (multiple requests at in
flight at a time), then it cuts down on idling of individual queues and
all the queues move to sync-noidle tree and only tree idle remains. This
tree idling provides isolation with buffered write queues on async tree.
FAQ
===
Q1. Why to idle at all on queues marked with REQ_NOIDLE.
A1. We only do tree idle (all queues on sync-noidle tree) on queues marked
with REQ_NOIDLE. This helps in providing isolation with all the sync-idle
queues. Otherwise in presence of many sequential readers, other
synchronous IO might not get fair share of disk.
For example, if there are 10 sequential readers doing IO and they get
100ms each. If a REQ_NOIDLE request comes in, it will be scheduled
roughly after 1 second. If after completion of REQ_NOIDLE request we
do not idle, and after a couple of milli seconds a another REQ_NOIDLE
request comes in, again it will be scheduled after 1second. Repeat it
and notice how a workload can lose its disk share and suffer due to
multiple sequential readers.
fsync can generate dependent IO where bunch of data is written in the
context of fsync, and later some journaling data is written. Journaling
data comes in only after fsync has finished its IO (atleast for ext4
that seemed to be the case). Now if one decides not to idle on fsync
thread due to REQ_NOIDLE, then next journaling write will not get
scheduled for another second. A process doing small fsync, will suffer
badly in presence of multiple sequential readers.
Hence doing tree idling on threads using REQ_NOIDLE flag on requests
provides isolation from multiple sequential readers and at the same
time we do not idle on individual threads.
Q2. When to specify REQ_NOIDLE
A2. I would think whenever one is doing synchronous write and not expecting
more writes to be dispatched from same context soon, should be able
to specify REQ_NOIDLE on writes and that probably should work well for
most of the cases.
...@@ -4,7 +4,8 @@ dm-crypt ...@@ -4,7 +4,8 @@ dm-crypt
Device-Mapper's "crypt" target provides transparent encryption of block devices Device-Mapper's "crypt" target provides transparent encryption of block devices
using the kernel crypto API. using the kernel crypto API.
Parameters: <cipher> <key> <iv_offset> <device path> <offset> Parameters: <cipher> <key> <iv_offset> <device path> \
<offset> [<#opt_params> <opt_params>]
<cipher> <cipher>
Encryption cipher and an optional IV generation mode. Encryption cipher and an optional IV generation mode.
...@@ -37,6 +38,24 @@ Parameters: <cipher> <key> <iv_offset> <device path> <offset> ...@@ -37,6 +38,24 @@ Parameters: <cipher> <key> <iv_offset> <device path> <offset>
<offset> <offset>
Starting sector within the device where the encrypted data begins. Starting sector within the device where the encrypted data begins.
<#opt_params>
Number of optional parameters. If there are no optional parameters,
the optional paramaters section can be skipped or #opt_params can be zero.
Otherwise #opt_params is the number of following arguments.
Example of optional parameters section:
1 allow_discards
allow_discards
Block discard requests (a.k.a. TRIM) are passed through the crypt device.
The default is to ignore discard requests.
WARNING: Assess the specific security risks carefully before enabling this
option. For example, allowing discards on encrypted devices may lead to
the leak of information about the ciphertext device (filesystem type,
used space etc.) if the discarded blocks can be located easily on the
device later.
Example scripts Example scripts
=============== ===============
LUKS (Linux Unified Key Setup) is now the preferred way to set up disk LUKS (Linux Unified Key Setup) is now the preferred way to set up disk
......
dm-flakey dm-flakey
========= =========
This target is the same as the linear target except that it returns I/O This target is the same as the linear target except that it exhibits
errors periodically. It's been found useful in simulating failing unreliable behaviour periodically. It's been found useful in simulating
devices for testing purposes. failing devices for testing purposes.
Starting from the time the table is loaded, the device is available for Starting from the time the table is loaded, the device is available for
<up interval> seconds, then returns errors for <down interval> seconds, <up interval> seconds, then exhibits unreliable behaviour for <down
and then this cycle repeats. interval> seconds, and then this cycle repeats.
Parameters: <dev path> <offset> <up interval> <down interval> Also, consider using this in combination with the dm-delay target too,
which can delay reads and writes and/or send them to different
underlying devices.
Table parameters
----------------
<dev path> <offset> <up interval> <down interval> \
[<num_features> [<feature arguments>]]
Mandatory parameters:
<dev path>: Full pathname to the underlying block-device, or a <dev path>: Full pathname to the underlying block-device, or a
"major:minor" device-number. "major:minor" device-number.
<offset>: Starting sector within the device. <offset>: Starting sector within the device.
<up interval>: Number of seconds device is available. <up interval>: Number of seconds device is available.
<down interval>: Number of seconds device returns errors. <down interval>: Number of seconds device returns errors.
Optional feature parameters:
If no feature parameters are present, during the periods of
unreliability, all I/O returns errors.
drop_writes:
All write I/O is silently ignored.
Read I/O is handled correctly.
corrupt_bio_byte <Nth_byte> <direction> <value> <flags>:
During <down interval>, replace <Nth_byte> of the data of
each matching bio with <value>.
<Nth_byte>: The offset of the byte to replace.
Counting starts at 1, to replace the first byte.
<direction>: Either 'r' to corrupt reads or 'w' to corrupt writes.
'w' is incompatible with drop_writes.
<value>: The value (from 0-255) to write.
<flags>: Perform the replacement only if bio->bi_rw has all the
selected flags set.
Examples:
corrupt_bio_byte 32 r 1 0
- replaces the 32nd byte of READ bios with the value 1
corrupt_bio_byte 224 w 0 32
- replaces the 224th byte of REQ_META (=32) bios with the value 0
Device-mapper RAID (dm-raid) is a bridge from DM to MD. It dm-raid
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 The device-mapper RAID (dm-raid) target provides a bridge from DM to MD.
constructor (CTR) tables and the status outputs (both STATUSTYPE_INFO It allows the MD RAID drivers to be accessed using a device-mapper
and STATUSTYPE_TABLE). The CTR table looks like the following: interface.
1: <s> <l> raid \ The target is named "raid" and it accepts the following parameters:
2: <raid_type> <#raid_params> <raid_params> \
3: <#raid_devs> <meta_dev1> <dev1> .. <meta_devN> <devN> <raid_type> <#raid_params> <raid_params> \
<#raid_devs> <metadata_dev0> <dev0> [.. <metadata_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 <raid_type>:
this case is "raid". raid1 RAID1 mirroring
raid4 RAID4 dedicated parity disk
Line 2 contains the arguments that define the particular raid raid5_la RAID5 left asymmetric
type/personality/level, the required arguments for that raid type, and - rotating parity 0 with data continuation
any optional arguments. Possible raid types include: raid4, raid5_la, raid5_ra RAID5 right asymmetric
raid5_ls, raid5_rs, raid6_zr, raid6_nr, and raid6_nc. (raid1 is - rotating parity N with data continuation
planned for the future.) The list of required and optional parameters raid5_ls RAID5 left symmetric
is the same for all the current raid types. The required parameters are - rotating parity 0 with data restart
positional, while the optional parameters are given as key/value pairs. raid5_rs RAID5 right symmetric
The possible parameters are as follows: - rotating parity N with data restart
<chunk_size> Chunk size in sectors. raid6_zr RAID6 zero restart
[[no]sync] Force/Prevent RAID initialization - rotating parity zero (left-to-right) with data restart
[rebuild <idx>] Rebuild the drive indicated by the index raid6_nr RAID6 N restart
[daemon_sleep <ms>] Time between bitmap daemon work to clear bits - rotating parity N (right-to-left) with data restart
[min_recovery_rate <kB/sec/disk>] Throttle RAID initialization raid6_nc RAID6 N continue
[max_recovery_rate <kB/sec/disk>] Throttle RAID initialization - rotating parity N (right-to-left) with data continuation
[max_write_behind <sectors>] See '-write-behind=' (man mdadm)
[stripe_cache <sectors>] Stripe cache size for higher RAIDs Refererence: Chapter 4 of
http://www.snia.org/sites/default/files/SNIA_DDF_Technical_Position_v2.0.pdf
Line 3 contains the list of devices that compose the array in
metadata/data device pairs. If the metadata is stored separately, a '-' <#raid_params>: The number of parameters that follow.
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 <raid_params> consists of
data drives for a given position. Mandatory parameters:
<chunk_size>: Chunk size in sectors. This parameter is often known as
NB. Currently all metadata devices must be specified as '-'. "stripe size". It is the only mandatory parameter and
is placed first.
Examples:
# RAID4 - 4 data drives, 1 parity followed by optional parameters (in any order):
[sync|nosync] Force or prevent RAID initialization.
[rebuild <idx>] Rebuild drive number idx (first drive is 0).
[daemon_sleep <ms>]
Interval between runs of the bitmap daemon that
clear bits. A longer interval means less bitmap I/O but
resyncing after a failure is likely to take longer.
[min_recovery_rate <kB/sec/disk>] Throttle RAID initialization
[max_recovery_rate <kB/sec/disk>] Throttle RAID initialization
[write_mostly <idx>] Drive index is write-mostly
[max_write_behind <sectors>] See '-write-behind=' (man mdadm)
[stripe_cache <sectors>] Stripe cache size (higher RAIDs only)
[region_size <sectors>]
The region_size multiplied by the number of regions is the
logical size of the array. The bitmap records the device
synchronisation state for each region.
<#raid_devs>: The number of devices composing the array.
Each device consists of two entries. The first is the device
containing the metadata (if any); the second is the one containing the
data.
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.
Example tables
--------------
# RAID4 - 4 data drives, 1 parity (no metadata devices)
# No metadata devices specified to hold superblock/bitmap info # No metadata devices specified to hold superblock/bitmap info
# Chunk size of 1MiB # Chunk size of 1MiB
# (Lines separated for easy reading) # (Lines separated for easy reading)
0 1960893648 raid \ 0 1960893648 raid \
raid4 1 2048 \ raid4 1 2048 \
5 - 8:17 - 8:33 - 8:49 - 8:65 - 8:81 5 - 8:17 - 8:33 - 8:49 - 8:65 - 8:81
# RAID4 - 4 data drives, 1 parity (no metadata devices) # RAID4 - 4 data drives, 1 parity (with metadata devices)
# Chunk size of 1MiB, force RAID initialization, # Chunk size of 1MiB, force RAID initialization,
# min recovery rate at 20 kiB/sec/disk # min recovery rate at 20 kiB/sec/disk
0 1960893648 raid \ 0 1960893648 raid \
raid4 4 2048 min_recovery_rate 20 sync\ raid4 4 2048 sync min_recovery_rate 20 \
5 - 8:17 - 8:33 - 8:49 - 8:65 - 8:81 5 8:17 8:18 8:33 8:34 8:49 8:50 8:65 8:66 8:81 8:82
Performing a 'dmsetup table' should display the CTR table used to 'dmsetup table' displays the table used to construct the mapping.
construct the mapping (with possible reordering of optional The optional parameters are always printed in the order listed
parameters). above with "sync" or "nosync" always output ahead of the other
arguments, regardless of the order used when originally loading the table.
Arguments that can be repeated are ordered by value.
Performing a 'dmsetup status' will yield information on the state and 'dmsetup status' yields information on the state and health of the
health of the array. The output is as follows: array.
The output is as follows:
1: <s> <l> raid \ 1: <s> <l> raid \
2: <raid_type> <#devices> <1 health char for each dev> <resync_ratio> 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: Line 1 is the standard output produced by device-mapper.
Line 2 is produced by the raid target, and best explained by example:
0 1960893648 raid raid4 5 AAAAA 2/490221568 0 1960893648 raid raid4 5 AAAAA 2/490221568
Here we can see the RAID type is raid4, there are 5 devices - all of 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. which are 'A'live, and the array is 2/490221568 complete with recovery.
Faulty or missing devices are marked 'D'. Devices that are out-of-sync
are marked 'a'.
...@@ -10,7 +10,7 @@ Optional properties: ...@@ -10,7 +10,7 @@ Optional properties:
Each button (key) is represented as a sub-node of "gpio-keys": Each button (key) is represented as a sub-node of "gpio-keys":
Subnode properties: Subnode properties:
- gpios: OF devcie-tree gpio specificatin. - gpios: OF device-tree gpio specification.
- label: Descriptive name of the key. - label: Descriptive name of the key.
- linux,code: Keycode to emit. - linux,code: Keycode to emit.
......
* Freescale MMA8450 3-Axis Accelerometer
Required properties:
- compatible : "fsl,mma8450".
Example:
accelerometer: mma8450@1c {
compatible = "fsl,mma8450";
reg = <0x1c>;
};
...@@ -10,87 +10,181 @@ NOTE: For DMA Engine usage in async_tx please see: ...@@ -10,87 +10,181 @@ NOTE: For DMA Engine usage in async_tx please see:
Below is a guide to device driver writers on how to use the Slave-DMA API of the Below is a guide to device driver writers on how to use the Slave-DMA API of the
DMA Engine. This is applicable only for slave DMA usage only. DMA Engine. This is applicable only for slave DMA usage only.
The slave DMA usage consists of following steps The slave DMA usage consists of following steps:
1. Allocate a DMA slave channel 1. Allocate a DMA slave channel
2. Set slave and controller specific parameters 2. Set slave and controller specific parameters
3. Get a descriptor for transaction 3. Get a descriptor for transaction
4. Submit the transaction and wait for callback notification 4. Submit the transaction
5. Issue pending requests and wait for callback notification
1. Allocate a DMA slave channel 1. Allocate a DMA slave channel
Channel allocation is slightly different in the slave DMA context, client
drivers typically need a channel from a particular DMA controller only and even Channel allocation is slightly different in the slave DMA context,
in some cases a specific channel is desired. To request a channel client drivers typically need a channel from a particular DMA
dma_request_channel() API is used. controller only and even in some cases a specific channel is desired.
To request a channel dma_request_channel() API is used.
Interface:
struct dma_chan *dma_request_channel(dma_cap_mask_t mask, Interface:
dma_filter_fn filter_fn, struct dma_chan *dma_request_channel(dma_cap_mask_t mask,
void *filter_param); dma_filter_fn filter_fn,
where dma_filter_fn is defined as: void *filter_param);
typedef bool (*dma_filter_fn)(struct dma_chan *chan, void *filter_param); where dma_filter_fn is defined as:
typedef bool (*dma_filter_fn)(struct dma_chan *chan, void *filter_param);
When the optional 'filter_fn' parameter is set to NULL dma_request_channel
simply returns the first channel that satisfies the capability mask. Otherwise, The 'filter_fn' parameter is optional, but highly recommended for
when the mask parameter is insufficient for specifying the necessary channel, slave and cyclic channels as they typically need to obtain a specific
the filter_fn routine can be used to disposition the available channels in the DMA channel.
system. The filter_fn routine is called once for each free channel in the
system. Upon seeing a suitable channel filter_fn returns DMA_ACK which flags When the optional 'filter_fn' parameter is NULL, dma_request_channel()
that channel to be the return value from dma_request_channel. A channel simply returns the first channel that satisfies the capability mask.
allocated via this interface is exclusive to the caller, until
dma_release_channel() is called. Otherwise, the 'filter_fn' routine will be called once for each free
channel which has a capability in 'mask'. 'filter_fn' is expected to
return 'true' when the desired DMA channel is found.
A channel allocated via this interface is exclusive to the caller,
until dma_release_channel() is called.
2. Set slave and controller specific parameters 2. Set slave and controller specific parameters
Next step is always to pass some specific information to the DMA driver. Most of
the generic information which a slave DMA can use is in struct dma_slave_config. Next step is always to pass some specific information to the DMA
It allows the clients to specify DMA direction, DMA addresses, bus widths, DMA driver. Most of the generic information which a slave DMA can use
burst lengths etc. If some DMA controllers have more parameters to be sent then is in struct dma_slave_config. This allows the clients to specify
they should try to embed struct dma_slave_config in their controller specific DMA direction, DMA addresses, bus widths, DMA burst lengths etc
structure. That gives flexibility to client to pass more parameters, if for the peripheral.
required.
If some DMA controllers have more parameters to be sent then they
Interface: should try to embed struct dma_slave_config in their controller
int dmaengine_slave_config(struct dma_chan *chan, specific structure. That gives flexibility to client to pass more
struct dma_slave_config *config) parameters, if required.
Interface:
int dmaengine_slave_config(struct dma_chan *chan,
struct dma_slave_config *config)
Please see the dma_slave_config structure definition in dmaengine.h
for a detailed explaination of the struct members. Please note
that the 'direction' member will be going away as it duplicates the
direction given in the prepare call.
3. Get a descriptor for transaction 3. Get a descriptor for transaction
For slave usage the various modes of slave transfers supported by the
DMA-engine are: For slave usage the various modes of slave transfers supported by the
slave_sg - DMA a list of scatter gather buffers from/to a peripheral DMA-engine are:
dma_cyclic - Perform a cyclic DMA operation from/to a peripheral till the
slave_sg - DMA a list of scatter gather buffers from/to a peripheral
dma_cyclic - Perform a cyclic DMA operation from/to a peripheral till the
operation is explicitly stopped. operation is explicitly stopped.
The non NULL return of this transfer API represents a "descriptor" for the given
transaction. A non-NULL return of this transfer API represents a "descriptor" for
the given transaction.
Interface:
struct dma_async_tx_descriptor *(*chan->device->device_prep_dma_sg)( Interface:
struct dma_chan *chan, struct dma_async_tx_descriptor *(*chan->device->device_prep_slave_sg)(
struct scatterlist *dst_sg, unsigned int dst_nents, struct dma_chan *chan, struct scatterlist *sgl,
struct scatterlist *src_sg, unsigned int src_nents, unsigned int sg_len, enum dma_data_direction direction,
unsigned long flags); unsigned long flags);
struct dma_async_tx_descriptor *(*chan->device->device_prep_dma_cyclic)(
struct dma_async_tx_descriptor *(*chan->device->device_prep_dma_cyclic)(
struct dma_chan *chan, dma_addr_t buf_addr, size_t buf_len, struct dma_chan *chan, dma_addr_t buf_addr, size_t buf_len,
size_t period_len, enum dma_data_direction direction); size_t period_len, enum dma_data_direction direction);
4. Submit the transaction and wait for callback notification The peripheral driver is expected to have mapped the scatterlist for
To schedule the transaction to be scheduled by dma device, the "descriptor" the DMA operation prior to calling device_prep_slave_sg, and must
returned in above (3) needs to be submitted. keep the scatterlist mapped until the DMA operation has completed.
To tell the dma driver that a transaction is ready to be serviced, the The scatterlist must be mapped using the DMA struct device. So,
descriptor->submit() callback needs to be invoked. This chains the descriptor to normal setup should look like this:
the pending queue.
The transactions in the pending queue can be activated by calling the nr_sg = dma_map_sg(chan->device->dev, sgl, sg_len);
issue_pending API. If channel is idle then the first transaction in queue is if (nr_sg == 0)
started and subsequent ones queued up. /* error */
On completion of the DMA operation the next in queue is submitted and a tasklet
triggered. The tasklet would then call the client driver completion callback desc = chan->device->device_prep_slave_sg(chan, sgl, nr_sg,
routine for notification, if set. direction, flags);
Interface:
void dma_async_issue_pending(struct dma_chan *chan); Once a descriptor has been obtained, the callback information can be
added and the descriptor must then be submitted. Some DMA engine
============================================================================== drivers may hold a spinlock between a successful preparation and
submission so it is important that these two operations are closely
Additional usage notes for dma driver writers paired.
1/ Although DMA engine specifies that completion callback routines cannot submit
any new operations, but typically for slave DMA subsequent transaction may not Note:
be available for submit prior to callback routine being called. This requirement Although the async_tx API specifies that completion callback
is not a requirement for DMA-slave devices. But they should take care to drop routines cannot submit any new operations, this is not the
the spin-lock they might be holding before calling the callback routine case for slave/cyclic DMA.
For slave DMA, the subsequent transaction may not be available
for submission prior to callback function being invoked, so
slave DMA callbacks are permitted to prepare and submit a new
transaction.
For cyclic DMA, a callback function may wish to terminate the
DMA via dmaengine_terminate_all().
Therefore, it is important that DMA engine drivers drop any
locks before calling the callback function which may cause a
deadlock.
Note that callbacks will always be invoked from the DMA
engines tasklet, never from interrupt context.
4. Submit the transaction
Once the descriptor has been prepared and the callback information
added, it must be placed on the DMA engine drivers pending queue.
Interface:
dma_cookie_t dmaengine_submit(struct dma_async_tx_descriptor *desc)
This returns a cookie can be used to check the progress of DMA engine
activity via other DMA engine calls not covered in this document.
dmaengine_submit() will not start the DMA operation, it merely adds
it to the pending queue. For this, see step 5, dma_async_issue_pending.
5. Issue pending DMA requests and wait for callback notification
The transactions in the pending queue can be activated by calling the
issue_pending API. If channel is idle then the first transaction in
queue is started and subsequent ones queued up.
On completion of each DMA operation, the next in queue is started and
a tasklet triggered. The tasklet will then call the client driver
completion callback routine for notification, if set.
Interface:
void dma_async_issue_pending(struct dma_chan *chan);
Further APIs:
1. int dmaengine_terminate_all(struct dma_chan *chan)
This causes all activity for the DMA channel to be stopped, and may
discard data in the DMA FIFO which hasn't been fully transferred.
No callback functions will be called for any incomplete transfers.
2. int dmaengine_pause(struct dma_chan *chan)
This pauses activity on the DMA channel without data loss.
3. int dmaengine_resume(struct dma_chan *chan)
Resume a previously paused DMA channel. It is invalid to resume a
channel which is not currently paused.
4. enum dma_status dma_async_is_tx_complete(struct dma_chan *chan,
dma_cookie_t cookie, dma_cookie_t *last, dma_cookie_t *used)
This can be used to check the status of the channel. Please see
the documentation in include/linux/dmaengine.h for a more complete
description of this API.
This can be used in conjunction with dma_async_is_complete() and
the cookie returned from 'descriptor->submit()' to check for
completion of a specific DMA transaction.
Note:
Not all DMA engine drivers can return reliable information for
a running DMA channel. It is recommended that DMA engine users
pause or stop (via dmaengine_terminate_all) the channel before
using this API.
...@@ -199,18 +199,16 @@ to coerce it into behaving. ...@@ -199,18 +199,16 @@ to coerce it into behaving.
To beat some sense out of the internal editor, do this: 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. - Edit your Thunderbird config settings so that it won't use format=flowed.
Go to "edit->preferences->advanced->config editor" to bring up the Go to "edit->preferences->advanced->config editor" to bring up the
thunderbird's registry editor, and set "mailnews.send_plaintext_flowed" to thunderbird's registry editor, and set "mailnews.send_plaintext_flowed" to
"false". "false".
- Enable "preformat" mode: Shft-click on the Write icon to bring up the HTML - Disable HTML Format: Set "mail.identity.id1.compose_html" to "false".
composer, select "Preformat" from the drop-down box just under the subject
line, then close the message without saving. (This setting also applies to - Enable "preformat" mode: Set "editor.quotesPreformatted" to "true".
the text composer, but the only control for it is in the HTML composer.)
- Enable UTF8: Set "prefs.converted-to-utf8" to "true".
- Install the "toggle wordwrap" extension. Download the file from: - Install the "toggle wordwrap" extension. Download the file from:
https://addons.mozilla.org/thunderbird/addon/2351/ https://addons.mozilla.org/thunderbird/addon/2351/
......
...@@ -143,8 +143,7 @@ o provide a way to configure fault attributes ...@@ -143,8 +143,7 @@ o provide a way to configure fault attributes
failslab, fail_page_alloc, and fail_make_request use this way. failslab, fail_page_alloc, and fail_make_request use this way.
Helper functions: Helper functions:
init_fault_attr_dentries(entries, attr, name); fault_create_debugfs_attr(name, parent, attr);
void cleanup_fault_attr_dentries(entries);
- module parameters - module parameters
......
...@@ -296,15 +296,6 @@ Who: Ravikiran Thirumalai <kiran@scalex86.org> ...@@ -296,15 +296,6 @@ Who: Ravikiran Thirumalai <kiran@scalex86.org>
--------------------------- ---------------------------
What: CONFIG_THERMAL_HWMON
When: January 2009
Why: This option was introduced just to allow older lm-sensors userspace
to keep working over the upgrade to 2.6.26. At the scheduled time of
removal fixed lm-sensors (2.x or 3.x) should be readily available.
Who: Rene Herman <rene.herman@gmail.com>
---------------------------
What: Code that is now under CONFIG_WIRELESS_EXT_SYSFS What: Code that is now under CONFIG_WIRELESS_EXT_SYSFS
(in net/core/net-sysfs.c) (in net/core/net-sysfs.c)
When: After the only user (hal) has seen a release with the patches When: After the only user (hal) has seen a release with the patches
...@@ -590,3 +581,22 @@ Why: This driver has been superseded by g_mass_storage. ...@@ -590,3 +581,22 @@ Why: This driver has been superseded by g_mass_storage.
Who: Alan Stern <stern@rowland.harvard.edu> Who: Alan Stern <stern@rowland.harvard.edu>
---------------------------- ----------------------------
What: threeg and interface sysfs files in /sys/devices/platform/acer-wmi
When: 2012
Why: In 3.0, we can now autodetect internal 3G device and already have
the threeg rfkill device. So, we plan to remove threeg sysfs support
for it's no longer necessary.
We also plan to remove interface sysfs file that exposed which ACPI-WMI
interface that was used by acer-wmi driver. It will replaced by
information log when acer-wmi initial.
Who: Lee, Chun-Yi <jlee@novell.com>
----------------------------
What: The XFS nodelaylog mount option
When: 3.3
Why: The delaylog mode that has been the default since 2.6.39 has proven
stable, and the old code is in the way of additional improvements in
the log code.
Who: Christoph Hellwig <hch@lst.de>
...@@ -27,7 +27,7 @@ His original code can still be found at: ...@@ -27,7 +27,7 @@ His original code can still be found at:
Does anyone know of a more current email address for Makoto? He doesn't Does anyone know of a more current email address for Makoto? He doesn't
respond to the address given above... respond to the address given above...
Current maintainer: Sergey S. Kostyliov <rathamahata@php4.ru> This filesystem doesn't have a maintainer.
WHAT IS THIS DRIVER? WHAT IS THIS DRIVER?
================== ==================
......
...@@ -106,13 +106,20 @@ separated by spaces: ...@@ -106,13 +106,20 @@ separated by spaces:
To use the first on-chip serial port at baud rate 115200, no parity, 8 To use the first on-chip serial port at baud rate 115200, no parity, 8
bits, and no flow control. bits, and no flow control.
(*) root=/dev/<xxxx> (*) root=<xxxx>
This specifies the device upon which the root filesystem resides. For This specifies the device upon which the root filesystem resides. It
example: may be specified by major and minor number, device path, or even
partition uuid, if supported. For example:
/dev/nfs NFS root filesystem /dev/nfs NFS root filesystem
/dev/mtdblock3 Fourth RedBoot partition on the System Flash /dev/mtdblock3 Fourth RedBoot partition on the System Flash
PARTUUID=00112233-4455-6677-8899-AABBCCDDEEFF/PARTNROFF=1
first partition after the partition with the given UUID
253:0 Device with major 253 and minor 0
Authoritative information can be found in
"Documentation/kernel-parameters.txt".
(*) rw (*) rw
......
...@@ -43,8 +43,8 @@ Documentation/hwmon/pmbus for details. ...@@ -43,8 +43,8 @@ Documentation/hwmon/pmbus for details.
Sysfs entries Sysfs entries
------------- -------------
The following attributes are supported. Limits are read-write; all other The following attributes are supported. Limits are read-write, history reset
attributes are read-only. attributes are write-only, all other attributes are read-only.
in1_label "vin1" or "vout1" depending on chip variant and in1_label "vin1" or "vout1" depending on chip variant and
configuration. configuration.
...@@ -53,8 +53,12 @@ in1_min Minumum Voltage. From VOUT_UV_WARN_LIMIT register. ...@@ -53,8 +53,12 @@ in1_min Minumum Voltage. From VOUT_UV_WARN_LIMIT register.
in1_max Maximum voltage. From VOUT_OV_WARN_LIMIT register. in1_max Maximum voltage. From VOUT_OV_WARN_LIMIT register.
in1_min_alarm Voltage low alarm. From VOLTAGE_UV_WARNING status. in1_min_alarm Voltage low alarm. From VOLTAGE_UV_WARNING status.
in1_max_alarm Voltage high alarm. From VOLTAGE_OV_WARNING status. in1_max_alarm Voltage high alarm. From VOLTAGE_OV_WARNING status.
in1_highest Historical maximum voltage.
in1_reset_history Write any value to reset history.
curr1_label "iout1" curr1_label "iout1"
curr1_input Measured current. From READ_IOUT register. curr1_input Measured current. From READ_IOUT register.
curr1_max Maximum current. From IOUT_OC_WARN_LIMIT register. curr1_max Maximum current. From IOUT_OC_WARN_LIMIT register.
curr1_max_alarm Current high alarm. From IOUT_OC_WARN_LIMIT register. curr1_max_alarm Current high alarm. From IOUT_OC_WARN_LIMIT register.
curr1_highest Historical maximum current.
curr1_reset_history Write any value to reset history.
...@@ -35,6 +35,13 @@ the Out-Of-Spec bit. Following table summarizes the exported sysfs files: ...@@ -35,6 +35,13 @@ the Out-Of-Spec bit. Following table summarizes the exported sysfs files:
All Sysfs entries are named with their core_id (represented here by 'X'). All Sysfs entries are named with their core_id (represented here by 'X').
tempX_input - Core temperature (in millidegrees Celsius). tempX_input - Core temperature (in millidegrees Celsius).
tempX_max - All cooling devices should be turned on (on Core2). tempX_max - All cooling devices should be turned on (on Core2).
Initialized with IA32_THERM_INTERRUPT. When the CPU
temperature reaches this temperature, an interrupt is
generated and tempX_max_alarm is set.
tempX_max_hyst - If the CPU temperature falls below than temperature,
an interrupt is generated and tempX_max_alarm is reset.
tempX_max_alarm - Set if the temperature reaches or exceeds tempX_max.
Reset if the temperature drops to or below tempX_max_hyst.
tempX_crit - Maximum junction temperature (in millidegrees Celsius). tempX_crit - Maximum junction temperature (in millidegrees Celsius).
tempX_crit_alarm - Set when Out-of-spec bit is set, never clears. tempX_crit_alarm - Set when Out-of-spec bit is set, never clears.
Correct CPU operation is no longer guaranteed. Correct CPU operation is no longer guaranteed.
......
Kernel driver max8688
=====================
Supported chips:
* National Semiconductor LM25066
Prefix: 'lm25066'
Addresses scanned: -
Datasheets:
http://www.national.com/pf/LM/LM25066.html
http://www.national.com/pf/LM/LM25066A.html
* National Semiconductor LM5064
Prefix: 'lm5064'
Addresses scanned: -
Datasheet:
http://www.national.com/pf/LM/LM5064.html
* National Semiconductor LM5066
Prefix: 'lm5066'
Addresses scanned: -
Datasheet:
http://www.national.com/pf/LM/LM5066.html
Author: Guenter Roeck <guenter.roeck@ericsson.com>
Description
-----------
This driver supports hardware montoring for National Semiconductor LM25066,
LM5064, and LM5064 Power Management, Monitoring, Control, and Protection ICs.
The driver is a client driver to the core PMBus driver. Please see
Documentation/hwmon/pmbus for details on PMBus client drivers.
Usage Notes
-----------
This driver does not auto-detect devices. You will have to instantiate the
devices explicitly. Please see Documentation/i2c/instantiating-devices for
details.
Platform data support
---------------------
The driver supports standard PMBus driver platform data.
Sysfs entries
-------------
The following attributes are supported. Limits are read-write; all other
attributes are read-only.
in1_label "vin"
in1_input Measured input voltage.
in1_average Average measured input voltage.
in1_min Minimum input voltage.
in1_max Maximum input voltage.
in1_min_alarm Input voltage low alarm.
in1_max_alarm Input voltage high alarm.
in2_label "vout1"
in2_input Measured output voltage.
in2_average Average measured output voltage.
in2_min Minimum output voltage.
in2_min_alarm Output voltage low alarm.
in3_label "vout2"
in3_input Measured voltage on vaux pin
curr1_label "iin"
curr1_input Measured input current.
curr1_average Average measured input current.
curr1_max Maximum input current.
curr1_max_alarm Input current high alarm.
power1_label "pin"
power1_input Measured input power.
power1_average Average measured input power.
power1_max Maximum input power limit.
power1_alarm Input power alarm
power1_input_highest Historical maximum power.
power1_reset_history Write any value to reset maximum power history.
temp1_input Measured temperature.
temp1_max Maximum temperature.
temp1_crit Critical high temperature.
temp1_max_alarm Chip temperature high alarm.
temp1_crit_alarm Chip temperature critical high alarm.
...@@ -113,7 +113,11 @@ Supported chips: ...@@ -113,7 +113,11 @@ Supported chips:
Prefix: 'w83l771' Prefix: 'w83l771'
Addresses scanned: I2C 0x4c Addresses scanned: I2C 0x4c
Datasheet: Not publicly available, can be requested from Nuvoton Datasheet: Not publicly available, can be requested from Nuvoton
* Philips/NXP SA56004X
Prefix: 'sa56004'
Addresses scanned: I2C 0x48 through 0x4F
Datasheet: Publicly available at NXP website
http://ics.nxp.com/products/interface/datasheet/sa56004x.pdf
Author: Jean Delvare <khali@linux-fr.org> Author: Jean Delvare <khali@linux-fr.org>
...@@ -193,6 +197,9 @@ W83L771AWG/ASG ...@@ -193,6 +197,9 @@ W83L771AWG/ASG
* The AWG and ASG variants only differ in package format. * The AWG and ASG variants only differ in package format.
* Diode ideality factor configuration (remote sensor) at 0xE3 * Diode ideality factor configuration (remote sensor) at 0xE3
SA56004X:
* Better local resolution
All temperature values are given in degrees Celsius. Resolution All temperature values are given in degrees Celsius. Resolution
is 1.0 degree for the local temperature, 0.125 degree for the remote is 1.0 degree for the local temperature, 0.125 degree for the remote
temperature, except for the MAX6657, MAX6658 and MAX6659 which have a temperature, except for the MAX6657, MAX6658 and MAX6659 which have a
......
Kernel driver lm95245
==================
Supported chips:
* National Semiconductor LM95245
Addresses scanned: I2C 0x18, 0x19, 0x29, 0x4c, 0x4d
Datasheet: Publicly available at the National Semiconductor website
http://www.national.com/mpf/LM/LM95245.html
Author: Alexander Stein <alexander.stein@systec-electronic.com>
Description
-----------
The LM95245 is an 11-bit digital temperature sensor with a 2-wire System
Management Bus (SMBus) interface and TruTherm technology that can monitor
the temperature of a remote diode as well as its own temperature.
The LM95245 can be used to very accurately monitor the temperature of
external devices such as microprocessors.
All temperature values are given in millidegrees Celsius. Local temperature
is given within a range of -127 to +127.875 degrees. Remote temperatures are
given within a range of -127 to +255 degrees. Resolution depends on
temperature input and range.
Each sensor has its own critical limit, but the hysteresis is common to all
two channels.
The lm95245 driver can change its update interval to a fixed set of values.
It will round up to the next selectable interval. See the datasheet for exact
values. Reading sensor values more often will do no harm, but will return
'old' values.
...@@ -50,6 +50,8 @@ in[1-4]_min_alarm Voltage low alarm. From VOLTAGE_UV_WARNING status. ...@@ -50,6 +50,8 @@ in[1-4]_min_alarm Voltage low alarm. From VOLTAGE_UV_WARNING status.
in[1-4]_max_alarm Voltage high alarm. From VOLTAGE_OV_WARNING status. in[1-4]_max_alarm Voltage high alarm. From VOLTAGE_OV_WARNING status.
in[1-4]_lcrit_alarm Voltage critical low alarm. From VOLTAGE_UV_FAULT status. in[1-4]_lcrit_alarm Voltage critical low alarm. From VOLTAGE_UV_FAULT status.
in[1-4]_crit_alarm Voltage critical high alarm. From VOLTAGE_OV_FAULT status. in[1-4]_crit_alarm Voltage critical high alarm. From VOLTAGE_OV_FAULT status.
in[1-4]_highest Historical maximum voltage.
in[1-4]_reset_history Write any value to reset history.
temp1_input Measured temperature. From READ_TEMPERATURE_1 register. temp1_input Measured temperature. From READ_TEMPERATURE_1 register.
temp1_max Maximum temperature. From OT_WARN_LIMIT register. temp1_max Maximum temperature. From OT_WARN_LIMIT register.
...@@ -60,3 +62,5 @@ temp1_max_alarm Chip temperature high alarm. Set by comparing ...@@ -60,3 +62,5 @@ temp1_max_alarm Chip temperature high alarm. Set by comparing
temp1_crit_alarm Chip temperature critical high alarm. Set by comparing temp1_crit_alarm Chip temperature critical high alarm. Set by comparing
READ_TEMPERATURE_1 with OT_FAULT_LIMIT if TEMP_OT_FAULT READ_TEMPERATURE_1 with OT_FAULT_LIMIT if TEMP_OT_FAULT
status is set. status is set.
temp1_highest Historical maximum temperature.
temp1_reset_history Write any value to reset history.
...@@ -62,6 +62,13 @@ can be safely used to identify the chip. You will have to instantiate ...@@ -62,6 +62,13 @@ can be safely used to identify the chip. You will have to instantiate
the devices explicitly. Please see Documentation/i2c/instantiating-devices for the devices explicitly. Please see Documentation/i2c/instantiating-devices for
details. details.
WARNING: Do not access chip registers using the i2cdump command, and do not use
any of the i2ctools commands on a command register (0xa5 to 0xac). The chips
supported by this driver interpret any access to a command register (including
read commands) as request to execute the command in question. This may result in
power loss, board resets, and/or Flash corruption. Worst case, your board may
turn into a brick.
Sysfs entries Sysfs entries
------------- -------------
......
Kernel driver max1668
=====================
Supported chips:
* Maxim MAX1668, MAX1805 and MAX1989
Prefix: 'max1668'
Addresses scanned: I2C 0x18, 0x19, 0x1a, 0x29, 0x2a, 0x2b, 0x4c, 0x4d, 0x4e
Datasheet: http://datasheets.maxim-ic.com/en/ds/MAX1668-MAX1989.pdf
Author:
David George <david.george@ska.ac.za>
Description
-----------
This driver implements support for the Maxim MAX1668, MAX1805 and MAX1989
chips.
The three devices are very similar, but the MAX1805 has a reduced feature
set; only two remote temperature inputs vs the four avaible on the other
two ICs.
The driver is able to distinguish between the devices and creates sysfs
entries as follows:
MAX1805, MAX1668 and MAX1989:
temp1_input ro local (ambient) temperature
temp1_max rw local temperature maximum threshold for alarm
temp1_max_alarm ro local temperature maximum threshold alarm
temp1_min rw local temperature minimum threshold for alarm
temp1_min_alarm ro local temperature minimum threshold alarm
temp2_input ro remote temperature 1
temp2_max rw remote temperature 1 maximum threshold for alarm
temp2_max_alarm ro remote temperature 1 maximum threshold alarm
temp2_min rw remote temperature 1 minimum threshold for alarm
temp2_min_alarm ro remote temperature 1 minimum threshold alarm
temp3_input ro remote temperature 2
temp3_max rw remote temperature 2 maximum threshold for alarm
temp3_max_alarm ro remote temperature 2 maximum threshold alarm
temp3_min rw remote temperature 2 minimum threshold for alarm
temp3_min_alarm ro remote temperature 2 minimum threshold alarm
MAX1668 and MAX1989 only:
temp4_input ro remote temperature 3
temp4_max rw remote temperature 3 maximum threshold for alarm
temp4_max_alarm ro remote temperature 3 maximum threshold alarm
temp4_min rw remote temperature 3 minimum threshold for alarm
temp4_min_alarm ro remote temperature 3 minimum threshold alarm
temp5_input ro remote temperature 4
temp5_max rw remote temperature 4 maximum threshold for alarm
temp5_max_alarm ro remote temperature 4 maximum threshold alarm
temp5_min rw remote temperature 4 minimum threshold for alarm
temp5_min_alarm ro remote temperature 4 minimum threshold alarm
Module Parameters
-----------------
* read_only: int
Set to non-zero if you wish to prevent write access to alarm thresholds.
...@@ -56,6 +56,8 @@ in[1-6]_min_alarm Voltage low alarm. From VOLTAGE_UV_WARNING status. ...@@ -56,6 +56,8 @@ in[1-6]_min_alarm Voltage low alarm. From VOLTAGE_UV_WARNING status.
in[1-6]_max_alarm Voltage high alarm. From VOLTAGE_OV_WARNING status. in[1-6]_max_alarm Voltage high alarm. From VOLTAGE_OV_WARNING status.
in[1-6]_lcrit_alarm Voltage critical low alarm. From VOLTAGE_UV_FAULT status. in[1-6]_lcrit_alarm Voltage critical low alarm. From VOLTAGE_UV_FAULT status.
in[1-6]_crit_alarm Voltage critical high alarm. From VOLTAGE_OV_FAULT status. in[1-6]_crit_alarm Voltage critical high alarm. From VOLTAGE_OV_FAULT status.
in[1-6]_highest Historical maximum voltage.
in[1-6]_reset_history Write any value to reset history.
curr[1-6]_label "iout[1-6]". curr[1-6]_label "iout[1-6]".
curr[1-6]_input Measured current. From READ_IOUT register. curr[1-6]_input Measured current. From READ_IOUT register.
...@@ -63,6 +65,8 @@ curr[1-6]_max Maximum current. From IOUT_OC_WARN_LIMIT register. ...@@ -63,6 +65,8 @@ curr[1-6]_max Maximum current. From IOUT_OC_WARN_LIMIT register.
curr[1-6]_crit Critical maximum current. From IOUT_OC_FAULT_LIMIT register. curr[1-6]_crit Critical maximum current. From IOUT_OC_FAULT_LIMIT register.
curr[1-6]_max_alarm Current high alarm. From IOUT_OC_WARNING status. curr[1-6]_max_alarm Current high alarm. From IOUT_OC_WARNING status.
curr[1-6]_crit_alarm Current critical high alarm. From IOUT_OC_FAULT status. curr[1-6]_crit_alarm Current critical high alarm. From IOUT_OC_FAULT status.
curr[1-6]_highest Historical maximum current.
curr[1-6]_reset_history Write any value to reset history.
in6 and curr6 attributes only exist for MAX34440. in6 and curr6 attributes only exist for MAX34440.
...@@ -75,5 +79,7 @@ temp[1-8]_max Maximum temperature. From OT_WARN_LIMIT register. ...@@ -75,5 +79,7 @@ temp[1-8]_max Maximum temperature. From OT_WARN_LIMIT register.
temp[1-8]_crit Critical high temperature. From OT_FAULT_LIMIT register. temp[1-8]_crit Critical high temperature. From OT_FAULT_LIMIT register.
temp[1-8]_max_alarm Temperature high alarm. temp[1-8]_max_alarm Temperature high alarm.
temp[1-8]_crit_alarm Temperature critical high alarm. temp[1-8]_crit_alarm Temperature critical high alarm.
temp[1-8]_highest Historical maximum temperature.
temp[1-8]_reset_history Write any value to reset history.
temp7 and temp8 attributes only exist for MAX34440. temp7 and temp8 attributes only exist for MAX34440.
...@@ -50,6 +50,8 @@ in1_min_alarm Voltage low alarm. From VOLTAGE_UV_WARNING status. ...@@ -50,6 +50,8 @@ in1_min_alarm Voltage low alarm. From VOLTAGE_UV_WARNING status.
in1_max_alarm Voltage high alarm. From VOLTAGE_OV_WARNING status. in1_max_alarm Voltage high alarm. From VOLTAGE_OV_WARNING status.
in1_lcrit_alarm Voltage critical low alarm. From VOLTAGE_UV_FAULT status. in1_lcrit_alarm Voltage critical low alarm. From VOLTAGE_UV_FAULT status.
in1_crit_alarm Voltage critical high alarm. From VOLTAGE_OV_FAULT status. in1_crit_alarm Voltage critical high alarm. From VOLTAGE_OV_FAULT status.
in1_highest Historical maximum voltage.
in1_reset_history Write any value to reset history.
curr1_label "iout1" curr1_label "iout1"
curr1_input Measured current. From READ_IOUT register. curr1_input Measured current. From READ_IOUT register.
...@@ -57,6 +59,8 @@ curr1_max Maximum current. From IOUT_OC_WARN_LIMIT register. ...@@ -57,6 +59,8 @@ curr1_max Maximum current. From IOUT_OC_WARN_LIMIT register.
curr1_crit Critical maximum current. From IOUT_OC_FAULT_LIMIT register. curr1_crit Critical maximum current. From IOUT_OC_FAULT_LIMIT register.
curr1_max_alarm Current high alarm. From IOUT_OC_WARN_LIMIT register. curr1_max_alarm Current high alarm. From IOUT_OC_WARN_LIMIT register.
curr1_crit_alarm Current critical high alarm. From IOUT_OC_FAULT status. curr1_crit_alarm Current critical high alarm. From IOUT_OC_FAULT status.
curr1_highest Historical maximum current.
curr1_reset_history Write any value to reset history.
temp1_input Measured temperature. From READ_TEMPERATURE_1 register. temp1_input Measured temperature. From READ_TEMPERATURE_1 register.
temp1_max Maximum temperature. From OT_WARN_LIMIT register. temp1_max Maximum temperature. From OT_WARN_LIMIT register.
...@@ -67,3 +71,5 @@ temp1_max_alarm Chip temperature high alarm. Set by comparing ...@@ -67,3 +71,5 @@ temp1_max_alarm Chip temperature high alarm. Set by comparing
temp1_crit_alarm Chip temperature critical high alarm. Set by comparing temp1_crit_alarm Chip temperature critical high alarm. Set by comparing
READ_TEMPERATURE_1 with OT_FAULT_LIMIT if TEMP_OT_FAULT READ_TEMPERATURE_1 with OT_FAULT_LIMIT if TEMP_OT_FAULT
status is set. status is set.
temp1_highest Historical maximum temperature.
temp1_reset_history Write any value to reset history.
Kernel driver ntc_thermistor
=================
Supported thermistors:
* Murata NTC Thermistors NCP15WB473, NCP18WB473, NCP21WB473, NCP03WB473, NCP15WL333
Prefixes: 'ncp15wb473', 'ncp18wb473', 'ncp21wb473', 'ncp03wb473', 'ncp15wl333'
Datasheet: Publicly available at Murata
Other NTC thermistors can be supported simply by adding compensation
tables; e.g., NCP15WL333 support is added by the table ncpXXwl333.
Authors:
MyungJoo Ham <myungjoo.ham@samsung.com>
Description
-----------
The NTC thermistor is a simple thermistor that requires users to provide the
resistance and lookup the corresponding compensation table to get the
temperature input.
The NTC driver provides lookup tables with a linear approximation function
and four circuit models with an option not to use any of the four models.
The four circuit models provided are:
$: resister, [TH]: the thermistor
1. connect = NTC_CONNECTED_POSITIVE, pullup_ohm > 0
[pullup_uV]
| |
[TH] $ (pullup_ohm)
| |
+----+-----------------------[read_uV]
|
$ (pulldown_ohm)
|
--- (ground)
2. connect = NTC_CONNECTED_POSITIVE, pullup_ohm = 0 (not-connected)
[pullup_uV]
|
[TH]
|
+----------------------------[read_uV]
|
$ (pulldown_ohm)
|
--- (ground)
3. connect = NTC_CONNECTED_GROUND, pulldown_ohm > 0
[pullup_uV]
|
$ (pullup_ohm)
|
+----+-----------------------[read_uV]
| |
[TH] $ (pulldown_ohm)
| |
-------- (ground)
4. connect = NTC_CONNECTED_GROUND, pulldown_ohm = 0 (not-connected)
[pullup_uV]
|
$ (pullup_ohm)
|
+----------------------------[read_uV]
|
[TH]
|
--- (ground)
When one of the four circuit models is used, read_uV, pullup_uV, pullup_ohm,
pulldown_ohm, and connect should be provided. When none of the four models
are suitable or the user can get the resistance directly, the user should
provide read_ohm and _not_ provide the others.
Sysfs Interface
---------------
name the mandatory global attribute, the thermistor name.
temp1_type always 4 (thermistor)
RO
temp1_input measure the temperature and provide the measured value.
(reading this file initiates the reading procedure.)
RO
Note that each NTC thermistor has only _one_ thermistor; thus, only temp1 exists.
...@@ -13,6 +13,13 @@ Supported chips: ...@@ -13,6 +13,13 @@ Supported chips:
Prefix: 'ltc2978' Prefix: 'ltc2978'
Addresses scanned: - Addresses scanned: -
Datasheet: http://cds.linear.com/docs/Datasheet/2978fa.pdf Datasheet: http://cds.linear.com/docs/Datasheet/2978fa.pdf
* ON Semiconductor ADP4000, NCP4200, NCP4208
Prefixes: 'adp4000', 'ncp4200', 'ncp4208'
Addresses scanned: -
Datasheets:
http://www.onsemi.com/pub_link/Collateral/ADP4000-D.PDF
http://www.onsemi.com/pub_link/Collateral/NCP4200-D.PDF
http://www.onsemi.com/pub_link/Collateral/JUNE%202009-%20REV.%200.PDF
* Generic PMBus devices * Generic PMBus devices
Prefix: 'pmbus' Prefix: 'pmbus'
Addresses scanned: - Addresses scanned: -
......
...@@ -139,6 +139,29 @@ in[0-*]_input Voltage input value. ...@@ -139,6 +139,29 @@ in[0-*]_input Voltage input value.
thumb: drivers should report the voltage values at the thumb: drivers should report the voltage values at the
"pins" of the chip. "pins" of the chip.
in[0-*]_average
Average voltage
Unit: millivolt
RO
in[0-*]_lowest
Historical minimum voltage
Unit: millivolt
RO
in[0-*]_highest
Historical maximum voltage
Unit: millivolt
RO
in[0-*]_reset_history
Reset inX_lowest and inX_highest
WO
in_reset_history
Reset inX_lowest and inX_highest for all sensors
WO
in[0-*]_label Suggested voltage channel label. in[0-*]_label Suggested voltage channel label.
Text string Text string
Should only be created if the driver has hints about what Should only be created if the driver has hints about what
...@@ -407,6 +430,29 @@ curr[1-*]_input Current input value ...@@ -407,6 +430,29 @@ curr[1-*]_input Current input value
Unit: milliampere Unit: milliampere
RO RO
curr[1-*]_average
Average current use
Unit: milliampere
RO
curr[1-*]_lowest
Historical minimum current
Unit: milliampere
RO
curr[1-*]_highest
Historical maximum current
Unit: milliampere
RO
curr[1-*]_reset_history
Reset currX_lowest and currX_highest
WO
curr_reset_history
Reset currX_lowest and currX_highest for all sensors
WO
Also see the Alarms section for status flags associated with currents. Also see the Alarms section for status flags associated with currents.
********* *********
......
...@@ -292,6 +292,7 @@ Code Seq#(hex) Include File Comments ...@@ -292,6 +292,7 @@ Code Seq#(hex) Include File Comments
<mailto:buk@buks.ipn.de> <mailto:buk@buks.ipn.de>
0xA0 all linux/sdp/sdp.h Industrial Device Project 0xA0 all linux/sdp/sdp.h Industrial Device Project
<mailto:kenji@bitgate.com> <mailto:kenji@bitgate.com>
0xA2 00-0F arch/tile/include/asm/hardwall.h
0xA3 80-8F Port ACL in development: 0xA3 80-8F Port ACL in development:
<mailto:tlewis@mindspring.com> <mailto:tlewis@mindspring.com>
0xA3 90-9F linux/dtlk.h 0xA3 90-9F linux/dtlk.h
...@@ -318,4 +319,6 @@ Code Seq#(hex) Include File Comments ...@@ -318,4 +319,6 @@ Code Seq#(hex) Include File Comments
<mailto:thomas@winischhofer.net> <mailto:thomas@winischhofer.net>
0xF4 00-1F video/mbxfb.h mbxfb 0xF4 00-1F video/mbxfb.h mbxfb
<mailto:raph@8d.com> <mailto:raph@8d.com>
0xF6 all LTTng Linux Trace Toolkit Next Generation
<mailto:mathieu.desnoyers@efficios.com>
0xFD all linux/dm-ioctl.h 0xFD all linux/dm-ioctl.h
...@@ -620,17 +620,6 @@ ...@@ -620,17 +620,6 @@
(including this document itself) have been moved there, and might (including this document itself) have been moved there, and might
be more up to date than the web version. be more up to date than the web version.
* Name: "Linux Source Driver"
URL: http://lsd.linux.cz
Keywords: Browsing source code.
Description: "Linux Source Driver (LSD) is an application, which
can make browsing source codes of Linux kernel easier than you can
imagine. You can select between multiple versions of kernel (e.g.
0.01, 1.0.0, 2.0.33, 2.0.34pre13, 2.0.0, 2.1.101 etc.). With LSD
you can search Linux kernel (fulltext, macros, types, functions
and variables) and LSD can generate patches for you on the fly
(files, directories or kernel)".
* Name: "Linux Kernel Source Reference" * Name: "Linux Kernel Source Reference"
Author: Thomas Graichen. Author: Thomas Graichen.
URL: http://marc.info/?l=linux-kernel&m=96446640102205&w=4 URL: http://marc.info/?l=linux-kernel&m=96446640102205&w=4
......
...@@ -40,6 +40,7 @@ parameter is applicable: ...@@ -40,6 +40,7 @@ parameter is applicable:
ALSA ALSA sound support is enabled. ALSA ALSA sound support is enabled.
APIC APIC support is enabled. APIC APIC support is enabled.
APM Advanced Power Management support is enabled. APM Advanced Power Management support is enabled.
ARM ARM architecture is enabled.
AVR32 AVR32 architecture is enabled. AVR32 AVR32 architecture is enabled.
AX25 Appropriate AX.25 support is enabled. AX25 Appropriate AX.25 support is enabled.
BLACKFIN Blackfin architecture is enabled. BLACKFIN Blackfin architecture is enabled.
...@@ -49,6 +50,7 @@ parameter is applicable: ...@@ -49,6 +50,7 @@ parameter is applicable:
EFI EFI Partitioning (GPT) is enabled EFI EFI Partitioning (GPT) is enabled
EIDE EIDE/ATAPI support is enabled. EIDE EIDE/ATAPI support is enabled.
FB The frame buffer device is enabled. FB The frame buffer device is enabled.
FTRACE Function tracing enabled.
GCOV GCOV profiling is enabled. GCOV GCOV profiling is enabled.
HW Appropriate hardware is enabled. HW Appropriate hardware is enabled.
IA-64 IA-64 architecture is enabled. IA-64 IA-64 architecture is enabled.
...@@ -69,6 +71,7 @@ parameter is applicable: ...@@ -69,6 +71,7 @@ parameter is applicable:
Documentation/m68k/kernel-options.txt. Documentation/m68k/kernel-options.txt.
MCA MCA bus support is enabled. MCA MCA bus support is enabled.
MDA MDA console support is enabled. MDA MDA console support is enabled.
MIPS MIPS architecture is enabled.
MOUSE Appropriate mouse support is enabled. MOUSE Appropriate mouse support is enabled.
MSI Message Signaled Interrupts (PCI). MSI Message Signaled Interrupts (PCI).
MTD MTD (Memory Technology Device) support is enabled. MTD MTD (Memory Technology Device) support is enabled.
...@@ -100,7 +103,6 @@ parameter is applicable: ...@@ -100,7 +103,6 @@ parameter is applicable:
SPARC Sparc architecture is enabled. SPARC Sparc architecture is enabled.
SWSUSP Software suspend (hibernation) is enabled. SWSUSP Software suspend (hibernation) is enabled.
SUSPEND System suspend states are enabled. SUSPEND System suspend states are enabled.
FTRACE Function tracing enabled.
TPM TPM drivers are enabled. TPM TPM drivers are enabled.
TS Appropriate touchscreen support is enabled. TS Appropriate touchscreen support is enabled.
UMS USB Mass Storage support is enabled. UMS USB Mass Storage support is enabled.
...@@ -115,7 +117,7 @@ parameter is applicable: ...@@ -115,7 +117,7 @@ parameter is applicable:
X86-64 X86-64 architecture is enabled. X86-64 X86-64 architecture is enabled.
More X86-64 boot options can be found in More X86-64 boot options can be found in
Documentation/x86/x86_64/boot-options.txt . Documentation/x86/x86_64/boot-options.txt .
X86 Either 32bit or 64bit x86 (same as X86-32+X86-64) X86 Either 32-bit or 64-bit x86 (same as X86-32+X86-64)
XEN Xen support is enabled XEN Xen support is enabled
In addition, the following text indicates that the option: In addition, the following text indicates that the option:
...@@ -163,6 +165,11 @@ bytes respectively. Such letter suffixes can also be entirely omitted. ...@@ -163,6 +165,11 @@ bytes respectively. Such letter suffixes can also be entirely omitted.
See also Documentation/power/pm.txt, pci=noacpi See also Documentation/power/pm.txt, pci=noacpi
acpi_rsdp= [ACPI,EFI,KEXEC]
Pass the RSDP address to the kernel, mostly used
on machines running EFI runtime service to boot the
second kernel for kdump.
acpi_apic_instance= [ACPI, IOAPIC] acpi_apic_instance= [ACPI, IOAPIC]
Format: <int> Format: <int>
2: use 2nd APIC table, if available 2: use 2nd APIC table, if available
...@@ -371,7 +378,7 @@ bytes respectively. Such letter suffixes can also be entirely omitted. ...@@ -371,7 +378,7 @@ bytes respectively. Such letter suffixes can also be entirely omitted.
atkbd.softrepeat= [HW] atkbd.softrepeat= [HW]
Use software keyboard repeat Use software keyboard repeat
autotest [IA64] autotest [IA-64]
baycom_epp= [HW,AX25] baycom_epp= [HW,AX25]
Format: <io>,<mode> Format: <io>,<mode>
...@@ -546,6 +553,9 @@ bytes respectively. Such letter suffixes can also be entirely omitted. ...@@ -546,6 +553,9 @@ bytes respectively. Such letter suffixes can also be entirely omitted.
/proc/<pid>/coredump_filter. /proc/<pid>/coredump_filter.
See also Documentation/filesystems/proc.txt. See also Documentation/filesystems/proc.txt.
cpuidle.off=1 [CPU_IDLE]
disable the cpuidle sub-system
cpcihp_generic= [HW,PCI] Generic port I/O CompactPCI driver cpcihp_generic= [HW,PCI] Generic port I/O CompactPCI driver
Format: Format:
<first_slot>,<last_slot>,<port>,<enum_bit>[,<debug>] <first_slot>,<last_slot>,<port>,<enum_bit>[,<debug>]
...@@ -673,8 +683,8 @@ bytes respectively. Such letter suffixes can also be entirely omitted. ...@@ -673,8 +683,8 @@ bytes respectively. Such letter suffixes can also be entirely omitted.
uart[8250],mmio32,<addr>[,options] uart[8250],mmio32,<addr>[,options]
Start an early, polled-mode console on the 8250/16550 Start an early, polled-mode console on the 8250/16550
UART at the specified I/O port or MMIO address. UART at the specified I/O port or MMIO address.
MMIO inter-register address stride is either 8bit (mmio) MMIO inter-register address stride is either 8-bit
or 32bit (mmio32). (mmio) or 32-bit (mmio32).
The options are the same as for ttyS, above. The options are the same as for ttyS, above.
earlyprintk= [X86,SH,BLACKFIN] earlyprintk= [X86,SH,BLACKFIN]
...@@ -717,7 +727,7 @@ bytes respectively. Such letter suffixes can also be entirely omitted. ...@@ -717,7 +727,7 @@ bytes respectively. Such letter suffixes can also be entirely omitted.
See Documentation/block/as-iosched.txt and See Documentation/block/as-iosched.txt and
Documentation/block/deadline-iosched.txt for details. Documentation/block/deadline-iosched.txt for details.
elfcorehdr= [IA64,PPC,SH,X86] elfcorehdr= [IA-64,PPC,SH,X86]
Specifies physical address of start of kernel core Specifies physical address of start of kernel core
image elf header. Generally kexec loader will image elf header. Generally kexec loader will
pass this option to capture kernel. pass this option to capture kernel.
...@@ -783,7 +793,7 @@ bytes respectively. Such letter suffixes can also be entirely omitted. ...@@ -783,7 +793,7 @@ bytes respectively. Such letter suffixes can also be entirely omitted.
tracer at boot up. function-list is a comma separated tracer at boot up. function-list is a comma separated
list of functions. This list can be changed at run list of functions. This list can be changed at run
time by the set_ftrace_filter file in the debugfs time by the set_ftrace_filter file in the debugfs
tracing directory. tracing directory.
ftrace_notrace=[function-list] ftrace_notrace=[function-list]
[FTRACE] Do not trace the functions specified in [FTRACE] Do not trace the functions specified in
...@@ -821,7 +831,7 @@ bytes respectively. Such letter suffixes can also be entirely omitted. ...@@ -821,7 +831,7 @@ bytes respectively. Such letter suffixes can also be entirely omitted.
hashdist= [KNL,NUMA] Large hashes allocated during boot hashdist= [KNL,NUMA] Large hashes allocated during boot
are distributed across NUMA nodes. Defaults on are distributed across NUMA nodes. Defaults on
for 64bit NUMA, off otherwise. for 64-bit NUMA, off otherwise.
Format: 0 | 1 (for off | on) Format: 0 | 1 (for off | on)
hcl= [IA-64] SGI's Hardware Graph compatibility layer hcl= [IA-64] SGI's Hardware Graph compatibility layer
...@@ -990,10 +1000,10 @@ bytes respectively. Such letter suffixes can also be entirely omitted. ...@@ -990,10 +1000,10 @@ bytes respectively. Such letter suffixes can also be entirely omitted.
DMA. DMA.
forcedac [x86_64] forcedac [x86_64]
With this option iommu will not optimize to look With this option iommu will not optimize to look
for io virtual address below 32 bit forcing dual for io virtual address below 32-bit forcing dual
address cycle on pci bus for cards supporting greater address cycle on pci bus for cards supporting greater
than 32 bit addressing. The default is to look than 32-bit addressing. The default is to look
for translation below 32 bit and if not available for translation below 32-bit and if not available
then look in the higher range. then look in the higher range.
strict [Default Off] strict [Default Off]
With this option on every unmap_single operation will With this option on every unmap_single operation will
...@@ -1009,7 +1019,7 @@ bytes respectively. Such letter suffixes can also be entirely omitted. ...@@ -1009,7 +1019,7 @@ bytes respectively. Such letter suffixes can also be entirely omitted.
off disable Interrupt Remapping off disable Interrupt Remapping
nosid disable Source ID checking nosid disable Source ID checking
inttest= [IA64] inttest= [IA-64]
iomem= Disable strict checking of access to MMIO memory iomem= Disable strict checking of access to MMIO memory
strict regions from userspace. strict regions from userspace.
...@@ -1026,7 +1036,7 @@ bytes respectively. Such letter suffixes can also be entirely omitted. ...@@ -1026,7 +1036,7 @@ bytes respectively. Such letter suffixes can also be entirely omitted.
nomerge nomerge
forcesac forcesac
soft soft
pt [x86, IA64] pt [x86, IA-64]
io7= [HW] IO7 for Marvel based alpha systems io7= [HW] IO7 for Marvel based alpha systems
See comment before marvel_specify_io7 in See comment before marvel_specify_io7 in
...@@ -1157,7 +1167,7 @@ bytes respectively. Such letter suffixes can also be entirely omitted. ...@@ -1157,7 +1167,7 @@ bytes respectively. Such letter suffixes can also be entirely omitted.
kvm-amd.npt= [KVM,AMD] Disable nested paging (virtualized MMU) kvm-amd.npt= [KVM,AMD] Disable nested paging (virtualized MMU)
for all guests. for all guests.
Default is 1 (enabled) if in 64bit or 32bit-PAE mode Default is 1 (enabled) if in 64-bit or 32-bit PAE mode.
kvm-intel.ept= [KVM,Intel] Disable extended page tables kvm-intel.ept= [KVM,Intel] Disable extended page tables
(virtualized MMU) support on capable Intel chips. (virtualized MMU) support on capable Intel chips.
...@@ -1194,10 +1204,10 @@ bytes respectively. Such letter suffixes can also be entirely omitted. ...@@ -1194,10 +1204,10 @@ bytes respectively. Such letter suffixes can also be entirely omitted.
libata.dma=0 Disable all PATA and SATA DMA libata.dma=0 Disable all PATA and SATA DMA
libata.dma=1 PATA and SATA Disk DMA only libata.dma=1 PATA and SATA Disk DMA only
libata.dma=2 ATAPI (CDROM) DMA only libata.dma=2 ATAPI (CDROM) DMA only
libata.dma=4 Compact Flash DMA only libata.dma=4 Compact Flash DMA only
Combinations also work, so libata.dma=3 enables DMA Combinations also work, so libata.dma=3 enables DMA
for disks and CDROMs, but not CFs. for disks and CDROMs, but not CFs.
libata.ignore_hpa= [LIBATA] Ignore HPA limit libata.ignore_hpa= [LIBATA] Ignore HPA limit
libata.ignore_hpa=0 keep BIOS limits (default) libata.ignore_hpa=0 keep BIOS limits (default)
libata.ignore_hpa=1 ignore limits, using full disk libata.ignore_hpa=1 ignore limits, using full disk
...@@ -1323,7 +1333,7 @@ bytes respectively. Such letter suffixes can also be entirely omitted. ...@@ -1323,7 +1333,7 @@ bytes respectively. Such letter suffixes can also be entirely omitted.
ltpc= [NET] ltpc= [NET]
Format: <io>,<irq>,<dma> Format: <io>,<irq>,<dma>
machvec= [IA64] Force the use of a particular machine-vector machvec= [IA-64] Force the use of a particular machine-vector
(machvec) in a generic kernel. (machvec) in a generic kernel.
Example: machvec=hpzx1_swiotlb Example: machvec=hpzx1_swiotlb
...@@ -1340,9 +1350,12 @@ bytes respectively. Such letter suffixes can also be entirely omitted. ...@@ -1340,9 +1350,12 @@ bytes respectively. Such letter suffixes can also be entirely omitted.
it is equivalent to "nosmp", which also disables it is equivalent to "nosmp", which also disables
the IO APIC. the IO APIC.
max_loop= [LOOP] Maximum number of loopback devices that can max_loop= [LOOP] The number of loop block devices that get
be mounted (loop.max_loop) unconditionally pre-created at init time. The default
Format: <1-256> number is configured by BLK_DEV_LOOP_MIN_COUNT. Instead
of statically allocating a predefined number, loop
devices can be requested on-demand with the
/dev/loop-control interface.
mcatest= [IA-64] mcatest= [IA-64]
...@@ -1726,7 +1739,7 @@ bytes respectively. Such letter suffixes can also be entirely omitted. ...@@ -1726,7 +1739,7 @@ bytes respectively. Such letter suffixes can also be entirely omitted.
nointroute [IA-64] nointroute [IA-64]
nojitter [IA64] Disables jitter checking for ITC timers. nojitter [IA-64] Disables jitter checking for ITC timers.
no-kvmclock [X86,KVM] Disable paravirtualized KVM clock driver no-kvmclock [X86,KVM] Disable paravirtualized KVM clock driver
...@@ -1792,7 +1805,7 @@ bytes respectively. Such letter suffixes can also be entirely omitted. ...@@ -1792,7 +1805,7 @@ bytes respectively. Such letter suffixes can also be entirely omitted.
nox2apic [X86-64,APIC] Do not enable x2APIC mode. nox2apic [X86-64,APIC] Do not enable x2APIC mode.
nptcg= [IA64] Override max number of concurrent global TLB nptcg= [IA-64] Override max number of concurrent global TLB
purges which is reported from either PAL_VM_SUMMARY or purges which is reported from either PAL_VM_SUMMARY or
SAL PALO. SAL PALO.
...@@ -2069,7 +2082,7 @@ bytes respectively. Such letter suffixes can also be entirely omitted. ...@@ -2069,7 +2082,7 @@ bytes respectively. Such letter suffixes can also be entirely omitted.
Format: { parport<nr> | timid | 0 } Format: { parport<nr> | timid | 0 }
See also Documentation/parport.txt. See also Documentation/parport.txt.
pmtmr= [X86] Manual setup of pmtmr I/O Port. pmtmr= [X86] Manual setup of pmtmr I/O Port.
Override pmtimer IOPort with a hex value. Override pmtimer IOPort with a hex value.
e.g. pmtmr=0x508 e.g. pmtmr=0x508
...@@ -2153,6 +2166,8 @@ bytes respectively. Such letter suffixes can also be entirely omitted. ...@@ -2153,6 +2166,8 @@ bytes respectively. Such letter suffixes can also be entirely omitted.
[HW,MOUSE] Controls Logitech smartscroll autorepeat. [HW,MOUSE] Controls Logitech smartscroll autorepeat.
0 = disabled, 1 = enabled (default). 0 = disabled, 1 = enabled (default).
pstore.backend= Specify the name of the pstore backend to use
pt. [PARIDE] pt. [PARIDE]
See Documentation/blockdev/paride.txt. See Documentation/blockdev/paride.txt.
...@@ -2238,6 +2253,7 @@ bytes respectively. Such letter suffixes can also be entirely omitted. ...@@ -2238,6 +2253,7 @@ bytes respectively. Such letter suffixes can also be entirely omitted.
ro [KNL] Mount root device read-only on boot ro [KNL] Mount root device read-only on boot
root= [KNL] Root filesystem root= [KNL] Root filesystem
See name_to_dev_t comment in init/do_mounts.c.
rootdelay= [KNL] Delay (in seconds) to pause before attempting to rootdelay= [KNL] Delay (in seconds) to pause before attempting to
mount the root filesystem mount the root filesystem
...@@ -2624,6 +2640,16 @@ bytes respectively. Such letter suffixes can also be entirely omitted. ...@@ -2624,6 +2640,16 @@ bytes respectively. Such letter suffixes can also be entirely omitted.
medium is write-protected). medium is write-protected).
Example: quirks=0419:aaf5:rl,0421:0433:rc Example: quirks=0419:aaf5:rl,0421:0433:rc
user_debug= [KNL,ARM]
Format: <int>
See arch/arm/Kconfig.debug help text.
1 - undefined instruction events
2 - system calls
4 - invalid data aborts
8 - SIGSEGV faults
16 - SIGBUS faults
Example: user_debug=31
userpte= userpte=
[X86] Flags controlling user PTE allocations. [X86] Flags controlling user PTE allocations.
...@@ -2669,6 +2695,27 @@ bytes respectively. Such letter suffixes can also be entirely omitted. ...@@ -2669,6 +2695,27 @@ bytes respectively. Such letter suffixes can also be entirely omitted.
vmpoff= [KNL,S390] Perform z/VM CP command after power off. vmpoff= [KNL,S390] Perform z/VM CP command after power off.
Format: <command> Format: <command>
vsyscall= [X86-64]
Controls the behavior of vsyscalls (i.e. calls to
fixed addresses of 0xffffffffff600x00 from legacy
code). Most statically-linked binaries and older
versions of glibc use these calls. Because these
functions are at fixed addresses, they make nice
targets for exploits that can control RIP.
emulate [default] Vsyscalls turn into traps and are
emulated reasonably safely.
native Vsyscalls are native syscall instructions.
This is a little bit faster than trapping
and makes a few dynamic recompilers work
better than they would in emulation mode.
It also makes exploits much easier to write.
none Vsyscalls don't work at all. This makes
them quite hard to use for exploits but
might break your system.
vt.cur_default= [VT] Default cursor shape. vt.cur_default= [VT] Default cursor shape.
Format: 0xCCBBAA, where AA, BB, and CC are the same as Format: 0xCCBBAA, where AA, BB, and CC are the same as
the parameters of the <Esc>[?A;B;Cc escape sequence; the parameters of the <Esc>[?A;B;Cc escape sequence;
......
...@@ -129,6 +129,20 @@ decimal 11 is the major of SCSI CD-ROMs, and the minor 0 stands for ...@@ -129,6 +129,20 @@ decimal 11 is the major of SCSI CD-ROMs, and the minor 0 stands for
the first of these. You can find out all valid major numbers by the first of these. You can find out all valid major numbers by
looking into include/linux/major.h. looking into include/linux/major.h.
In addition to major and minor numbers, if the device containing your
root partition uses a partition table format with unique partition
identifiers, then you may use them. For instance,
"root=PARTUUID=00112233-4455-6677-8899-AABBCCDDEEFF". It is also
possible to reference another partition on the same device using a
known partition UUID as the starting point. For example,
if partition 5 of the device has the UUID of
00112233-4455-6677-8899-AABBCCDDEEFF then partition 3 may be found as
follows:
PARTUUID=00112233-4455-6677-8899-AABBCCDDEEFF/PARTNROFF=-2
Authoritative information can be found in
"Documentation/kernel-parameters.txt".
2.2) ro, rw 2.2) ro, rw
----------- -----------
......
00-INDEX 00-INDEX
- this file - this file
3c359.txt
- information on the 3Com TokenLink Velocity XL (3c5359) driver.
3c505.txt 3c505.txt
- information on the 3Com EtherLink Plus (3c505) driver. - information on the 3Com EtherLink Plus (3c505) driver.
3c509.txt
- information on the 3Com Etherlink III Series Ethernet cards.
6pack.txt 6pack.txt
- info on the 6pack protocol, an alternative to KISS for AX.25 - info on the 6pack protocol, an alternative to KISS for AX.25
DLINK.txt DLINK.txt
- info on the D-Link DE-600/DE-620 parallel port pocket adapters - info on the D-Link DE-600/DE-620 parallel port pocket adapters
PLIP.txt PLIP.txt
- PLIP: The Parallel Line Internet Protocol device driver - PLIP: The Parallel Line Internet Protocol device driver
README.ipw2100
- README for the Intel PRO/Wireless 2100 driver.
README.ipw2200
- README for the Intel PRO/Wireless 2915ABG and 2200BG driver.
README.sb1000 README.sb1000
- info on General Instrument/NextLevel SURFboard1000 cable modem. - info on General Instrument/NextLevel SURFboard1000 cable modem.
alias.txt alias.txt
...@@ -20,8 +28,12 @@ atm.txt ...@@ -20,8 +28,12 @@ atm.txt
- info on where to get ATM programs and support for Linux. - info on where to get ATM programs and support for Linux.
ax25.txt ax25.txt
- info on using AX.25 and NET/ROM code for Linux - info on using AX.25 and NET/ROM code for Linux
batman-adv.txt
- B.A.T.M.A.N routing protocol on top of layer 2 Ethernet Frames.
baycom.txt baycom.txt
- info on the driver for Baycom style amateur radio modems - info on the driver for Baycom style amateur radio modems
bonding.txt
- Linux Ethernet Bonding Driver HOWTO: link aggregation in Linux.
bridge.txt bridge.txt
- where to get user space programs for ethernet bridging with Linux. - where to get user space programs for ethernet bridging with Linux.
can.txt can.txt
...@@ -34,32 +46,60 @@ cxacru.txt ...@@ -34,32 +46,60 @@ cxacru.txt
- Conexant AccessRunner USB ADSL Modem - Conexant AccessRunner USB ADSL Modem
cxacru-cf.py cxacru-cf.py
- Conexant AccessRunner USB ADSL Modem configuration file parser - Conexant AccessRunner USB ADSL Modem configuration file parser
cxgb.txt
- Release Notes for the Chelsio N210 Linux device driver.
dccp.txt
- the Datagram Congestion Control Protocol (DCCP) (RFC 4340..42).
de4x5.txt de4x5.txt
- the Digital EtherWORKS DE4?? and DE5?? PCI Ethernet driver - the Digital EtherWORKS DE4?? and DE5?? PCI Ethernet driver
decnet.txt decnet.txt
- info on using the DECnet networking layer in Linux. - info on using the DECnet networking layer in Linux.
depca.txt depca.txt
- the Digital DEPCA/EtherWORKS DE1?? and DE2?? LANCE Ethernet driver - the Digital DEPCA/EtherWORKS DE1?? and DE2?? LANCE Ethernet driver
dl2k.txt
- README for D-Link DL2000-based Gigabit Ethernet Adapters (dl2k.ko).
dm9000.txt
- README for the Simtec DM9000 Network driver.
dmfe.txt dmfe.txt
- info on the Davicom DM9102(A)/DM9132/DM9801 fast ethernet driver. - info on the Davicom DM9102(A)/DM9132/DM9801 fast ethernet driver.
dns_resolver.txt
- The DNS resolver module allows kernel servies to make DNS queries.
driver.txt
- Softnet driver issues.
e100.txt e100.txt
- info on Intel's EtherExpress PRO/100 line of 10/100 boards - info on Intel's EtherExpress PRO/100 line of 10/100 boards
e1000.txt e1000.txt
- info on Intel's E1000 line of gigabit ethernet boards - info on Intel's E1000 line of gigabit ethernet boards
e1000e.txt
- README for the Intel Gigabit Ethernet Driver (e1000e).
eql.txt eql.txt
- serial IP load balancing - serial IP load balancing
ewrk3.txt ewrk3.txt
- the Digital EtherWORKS 3 DE203/4/5 Ethernet driver - the Digital EtherWORKS 3 DE203/4/5 Ethernet driver
fib_trie.txt
- Level Compressed Trie (LC-trie) notes: a structure for routing.
filter.txt filter.txt
- Linux Socket Filtering - Linux Socket Filtering
fore200e.txt fore200e.txt
- FORE Systems PCA-200E/SBA-200E ATM NIC driver info. - FORE Systems PCA-200E/SBA-200E ATM NIC driver info.
framerelay.txt framerelay.txt
- info on using Frame Relay/Data Link Connection Identifier (DLCI). - info on using Frame Relay/Data Link Connection Identifier (DLCI).
gen_stats.txt
- Generic networking statistics for netlink users.
generic_hdlc.txt
- The generic High Level Data Link Control (HDLC) layer.
generic_netlink.txt generic_netlink.txt
- info on Generic Netlink - info on Generic Netlink
gianfar.txt
- Gianfar Ethernet Driver.
ieee802154.txt ieee802154.txt
- Linux IEEE 802.15.4 implementation, API and drivers - Linux IEEE 802.15.4 implementation, API and drivers
ifenslave.c
- Configure network interfaces for parallel routing (bonding).
igb.txt
- README for the Intel Gigabit Ethernet Driver (igb).
igbvf.txt
- README for the Intel Gigabit Ethernet Driver (igbvf).
ip-sysctl.txt ip-sysctl.txt
- /proc/sys/net/ipv4/* variables - /proc/sys/net/ipv4/* variables
ip_dynaddr.txt ip_dynaddr.txt
...@@ -68,41 +108,117 @@ ipddp.txt ...@@ -68,41 +108,117 @@ ipddp.txt
- AppleTalk-IP Decapsulation and AppleTalk-IP Encapsulation - AppleTalk-IP Decapsulation and AppleTalk-IP Encapsulation
iphase.txt iphase.txt
- Interphase PCI ATM (i)Chip IA Linux driver info. - Interphase PCI ATM (i)Chip IA Linux driver info.
ipv6.txt
- Options to the ipv6 kernel module.
ipvs-sysctl.txt
- Per-inode explanation of the /proc/sys/net/ipv4/vs interface.
irda.txt irda.txt
- where to get IrDA (infrared) utilities and info for Linux. - where to get IrDA (infrared) utilities and info for Linux.
ixgb.txt
- README for the Intel 10 Gigabit Ethernet Driver (ixgb).
ixgbe.txt
- README for the Intel 10 Gigabit Ethernet Driver (ixgbe).
ixgbevf.txt
- README for the Intel Virtual Function (VF) Driver (ixgbevf).
l2tp.txt
- User guide to the L2TP tunnel protocol.
lapb-module.txt lapb-module.txt
- programming information of the LAPB module. - programming information of the LAPB module.
ltpc.txt ltpc.txt
- the Apple or Farallon LocalTalk PC card driver - the Apple or Farallon LocalTalk PC card driver
mac80211-injection.txt
- HOWTO use packet injection with mac80211
multicast.txt multicast.txt
- Behaviour of cards under Multicast - Behaviour of cards under Multicast
multiqueue.txt
- HOWTO for multiqueue network device support.
netconsole.txt
- The network console module netconsole.ko: configuration and notes.
netdev-features.txt
- Network interface features API description.
netdevices.txt netdevices.txt
- info on network device driver functions exported to the kernel. - info on network device driver functions exported to the kernel.
netif-msg.txt
- Design of the network interface message level setting (NETIF_MSG_*).
nfc.txt
- The Linux Near Field Communication (NFS) subsystem.
olympic.txt olympic.txt
- IBM PCI Pit/Pit-Phy/Olympic Token Ring driver info. - IBM PCI Pit/Pit-Phy/Olympic Token Ring driver info.
operstates.txt
- Overview of network interface operational states.
packet_mmap.txt
- User guide to memory mapped packet socket rings (PACKET_[RT]X_RING).
phonet.txt
- The Phonet packet protocol used in Nokia cellular modems.
phy.txt
- The PHY abstraction layer.
pktgen.txt
- User guide to the kernel packet generator (pktgen.ko).
policy-routing.txt policy-routing.txt
- IP policy-based routing - IP policy-based routing
ppp_generic.txt
- Information about the generic PPP driver.
proc_net_tcp.txt
- Per inode overview of the /proc/net/tcp and /proc/net/tcp6 interfaces.
radiotap-headers.txt
- Background on radiotap headers.
ray_cs.txt ray_cs.txt
- Raylink Wireless LAN card driver info. - Raylink Wireless LAN card driver info.
rds.txt
- Background on the reliable, ordered datagram delivery method RDS.
regulatory.txt
- Overview of the Linux wireless regulatory infrastructure.
rxrpc.txt
- Guide to the RxRPC protocol.
s2io.txt
- Release notes for Neterion Xframe I/II 10GbE driver.
scaling.txt
- Explanation of network scaling techniques: RSS, RPS, RFS, aRFS, XPS.
sctp.txt
- Notes on the Linux kernel implementation of the SCTP protocol.
secid.txt
- Explanation of the secid member in flow structures.
skfp.txt skfp.txt
- SysKonnect FDDI (SK-5xxx, Compaq Netelligent) driver info. - SysKonnect FDDI (SK-5xxx, Compaq Netelligent) driver info.
smc9.txt smc9.txt
- the driver for SMC's 9000 series of Ethernet cards - the driver for SMC's 9000 series of Ethernet cards
smctr.txt smctr.txt
- SMC TokenCard TokenRing Linux driver info. - SMC TokenCard TokenRing Linux driver info.
spider-net.txt
- README for the Spidernet Driver (as found in PS3 / Cell BE).
stmmac.txt
- README for the STMicro Synopsys Ethernet driver.
tc-actions-env-rules.txt
- rules for traffic control (tc) actions.
timestamping.txt
- overview of network packet timestamping variants.
tcp.txt tcp.txt
- short blurb on how TCP output takes place. - short blurb on how TCP output takes place.
tcp-thin.txt
- kernel tuning options for low rate 'thin' TCP streams.
tlan.txt tlan.txt
- ThunderLAN (Compaq Netelligent 10/100, Olicom OC-2xxx) driver info. - ThunderLAN (Compaq Netelligent 10/100, Olicom OC-2xxx) driver info.
tms380tr.txt tms380tr.txt
- SysKonnect Token Ring ISA/PCI adapter driver info. - SysKonnect Token Ring ISA/PCI adapter driver info.
tproxy.txt
- Transparent proxy support user guide.
tuntap.txt tuntap.txt
- TUN/TAP device driver, allowing user space Rx/Tx of packets. - TUN/TAP device driver, allowing user space Rx/Tx of packets.
udplite.txt
- UDP-Lite protocol (RFC 3828) introduction.
vortex.txt vortex.txt
- info on using 3Com Vortex (3c590, 3c592, 3c595, 3c597) Ethernet cards. - info on using 3Com Vortex (3c590, 3c592, 3c595, 3c597) Ethernet cards.
vxge.txt
- README for the Neterion X3100 PCIe Server Adapter.
x25.txt x25.txt
- general info on X.25 development. - general info on X.25 development.
x25-iface.txt x25-iface.txt
- description of the X.25 Packet Layer to LAPB device interface. - description of the X.25 Packet Layer to LAPB device interface.
xfrm_proc.txt
- description of the statistics package for XFRM.
xfrm_sync.txt
- sync patches for XFRM enable migration of an SA between hosts.
xfrm_sysctl.txt
- description of the XFRM configuration options.
z8530drv.txt z8530drv.txt
- info about Linux driver for Z8530 based HDLC cards for AX.25 - info about Linux driver for Z8530 based HDLC cards for AX.25
...@@ -238,6 +238,18 @@ ad_select ...@@ -238,6 +238,18 @@ ad_select
This option was added in bonding version 3.4.0. This option was added in bonding version 3.4.0.
all_slaves_active
Specifies that duplicate frames (received on inactive ports) should be
dropped (0) or delivered (1).
Normally, bonding will drop duplicate frames (received on inactive
ports), which is desirable for most users. But there are some times
it is nice to allow duplicate frames to be delivered.
The default value is 0 (drop duplicate frames received on inactive
ports).
arp_interval arp_interval
Specifies the ARP link monitoring frequency in milliseconds. Specifies the ARP link monitoring frequency in milliseconds.
...@@ -433,6 +445,23 @@ miimon ...@@ -433,6 +445,23 @@ miimon
determined. See the High Availability section for additional determined. See the High Availability section for additional
information. The default value is 0. information. The default value is 0.
min_links
Specifies the minimum number of links that must be active before
asserting carrier. It is similar to the Cisco EtherChannel min-links
feature. This allows setting the minimum number of member ports that
must be up (link-up state) before marking the bond device as up
(carrier on). This is useful for situations where higher level services
such as clustering want to ensure a minimum number of low bandwidth
links are active before switchover. This option only affect 802.3ad
mode.
The default value is 0. This will cause carrier to be asserted (for
802.3ad mode) whenever there is an active aggregator, regardless of the
number of available links in that aggregator. Note that, because an
aggregator cannot be active without at least one available link,
setting this option to 0 or to 1 has the exact same effect.
mode mode
Specifies one of the bonding policies. The default is Specifies one of the bonding policies. The default is
...@@ -599,7 +628,7 @@ num_unsol_na ...@@ -599,7 +628,7 @@ num_unsol_na
affect only the active-backup mode. These options were added for affect only the active-backup mode. These options were added for
bonding versions 3.3.0 and 3.4.0 respectively. bonding versions 3.3.0 and 3.4.0 respectively.
From Linux 2.6.40 and bonding version 3.7.1, these notifications From Linux 3.0 and bonding version 3.7.1, these notifications
are generated by the ipv4 and ipv6 code and the numbers of are generated by the ipv4 and ipv6 code and the numbers of
repetitions cannot be set independently. repetitions cannot be set independently.
......
...@@ -992,7 +992,7 @@ bindv6only - BOOLEAN ...@@ -992,7 +992,7 @@ bindv6only - BOOLEAN
TRUE: disable IPv4-mapped address feature TRUE: disable IPv4-mapped address feature
FALSE: enable IPv4-mapped address feature FALSE: enable IPv4-mapped address feature
Default: FALSE (as specified in RFC2553bis) Default: FALSE (as specified in RFC3493)
IPv6 Fragmentation: IPv6 Fragmentation:
......
Scaling in the Linux Networking Stack
Introduction
============
This document describes a set of complementary techniques in the Linux
networking stack to increase parallelism and improve performance for
multi-processor systems.
The following technologies are described:
RSS: Receive Side Scaling
RPS: Receive Packet Steering
RFS: Receive Flow Steering
Accelerated Receive Flow Steering
XPS: Transmit Packet Steering
RSS: Receive Side Scaling
=========================
Contemporary NICs support multiple receive and transmit descriptor queues
(multi-queue). On reception, a NIC can send different packets to different
queues to distribute processing among CPUs. The NIC distributes packets by
applying a filter to each packet that assigns it to one of a small number
of logical flows. Packets for each flow are steered to a separate receive
queue, which in turn can be processed by separate CPUs. This mechanism is
generally known as “Receive-side Scaling” (RSS). The goal of RSS and
the other scaling techniques to increase performance uniformly.
Multi-queue distribution can also be used for traffic prioritization, but
that is not the focus of these techniques.
The filter used in RSS is typically a hash function over the network
and/or transport layer headers-- for example, a 4-tuple hash over
IP addresses and TCP ports of a packet. The most common hardware
implementation of RSS uses a 128-entry indirection table where each entry
stores a queue number. The receive queue for a packet is determined
by masking out the low order seven bits of the computed hash for the
packet (usually a Toeplitz hash), taking this number as a key into the
indirection table and reading the corresponding value.
Some advanced NICs allow steering packets to queues based on
programmable filters. For example, webserver bound TCP port 80 packets
can be directed to their own receive queue. Such “n-tuple” filters can
be configured from ethtool (--config-ntuple).
==== RSS Configuration
The driver for a multi-queue capable NIC typically provides a kernel
module parameter for specifying the number of hardware queues to
configure. In the bnx2x driver, for instance, this parameter is called
num_queues. A typical RSS configuration would be to have one receive queue
for each CPU if the device supports enough queues, or otherwise at least
one for each memory domain, where a memory domain is a set of CPUs that
share a particular memory level (L1, L2, NUMA node, etc.).
The indirection table of an RSS device, which resolves a queue by masked
hash, is usually programmed by the driver at initialization. The
default mapping is to distribute the queues evenly in the table, but the
indirection table can be retrieved and modified at runtime using ethtool
commands (--show-rxfh-indir and --set-rxfh-indir). Modifying the
indirection table could be done to give different queues different
relative weights.
== RSS IRQ Configuration
Each receive queue has a separate IRQ associated with it. The NIC triggers
this to notify a CPU when new packets arrive on the given queue. The
signaling path for PCIe devices uses message signaled interrupts (MSI-X),
that can route each interrupt to a particular CPU. The active mapping
of queues to IRQs can be determined from /proc/interrupts. By default,
an IRQ may be handled on any CPU. Because a non-negligible part of packet
processing takes place in receive interrupt handling, it is advantageous
to spread receive interrupts between CPUs. To manually adjust the IRQ
affinity of each interrupt see Documentation/IRQ-affinity. Some systems
will be running irqbalance, a daemon that dynamically optimizes IRQ
assignments and as a result may override any manual settings.
== Suggested Configuration
RSS should be enabled when latency is a concern or whenever receive
interrupt processing forms a bottleneck. Spreading load between CPUs
decreases queue length. For low latency networking, the optimal setting
is to allocate as many queues as there are CPUs in the system (or the
NIC maximum, if lower). The most efficient high-rate configuration
is likely the one with the smallest number of receive queues where no
receive queue overflows due to a saturated CPU, because in default
mode with interrupt coalescing enabled, the aggregate number of
interrupts (and thus work) grows with each additional queue.
Per-cpu load can be observed using the mpstat utility, but note that on
processors with hyperthreading (HT), each hyperthread is represented as
a separate CPU. For interrupt handling, HT has shown no benefit in
initial tests, so limit the number of queues to the number of CPU cores
in the system.
RPS: Receive Packet Steering
============================
Receive Packet Steering (RPS) is logically a software implementation of
RSS. Being in software, it is necessarily called later in the datapath.
Whereas RSS selects the queue and hence CPU that will run the hardware
interrupt handler, RPS selects the CPU to perform protocol processing
above the interrupt handler. This is accomplished by placing the packet
on the desired CPU’s backlog queue and waking up the CPU for processing.
RPS has some advantages over RSS: 1) it can be used with any NIC,
2) software filters can easily be added to hash over new protocols,
3) it does not increase hardware device interrupt rate (although it does
introduce inter-processor interrupts (IPIs)).
RPS is called during bottom half of the receive interrupt handler, when
a driver sends a packet up the network stack with netif_rx() or
netif_receive_skb(). These call the get_rps_cpu() function, which
selects the queue that should process a packet.
The first step in determining the target CPU for RPS is to calculate a
flow hash over the packet’s addresses or ports (2-tuple or 4-tuple hash
depending on the protocol). This serves as a consistent hash of the
associated flow of the packet. The hash is either provided by hardware
or will be computed in the stack. Capable hardware can pass the hash in
the receive descriptor for the packet; this would usually be the same
hash used for RSS (e.g. computed Toeplitz hash). The hash is saved in
skb->rx_hash and can be used elsewhere in the stack as a hash of the
packet’s flow.
Each receive hardware queue has an associated list of CPUs to which
RPS may enqueue packets for processing. For each received packet,
an index into the list is computed from the flow hash modulo the size
of the list. The indexed CPU is the target for processing the packet,
and the packet is queued to the tail of that CPU’s backlog queue. At
the end of the bottom half routine, IPIs are sent to any CPUs for which
packets have been queued to their backlog queue. The IPI wakes backlog
processing on the remote CPU, and any queued packets are then processed
up the networking stack.
==== RPS Configuration
RPS requires a kernel compiled with the CONFIG_RPS kconfig symbol (on
by default for SMP). Even when compiled in, RPS remains disabled until
explicitly configured. The list of CPUs to which RPS may forward traffic
can be configured for each receive queue using a sysfs file entry:
/sys/class/net/<dev>/queues/rx-<n>/rps_cpus
This file implements a bitmap of CPUs. RPS is disabled when it is zero
(the default), in which case packets are processed on the interrupting
CPU. Documentation/IRQ-affinity.txt explains how CPUs are assigned to
the bitmap.
== Suggested Configuration
For a single queue device, a typical RPS configuration would be to set
the rps_cpus to the CPUs in the same memory domain of the interrupting
CPU. If NUMA locality is not an issue, this could also be all CPUs in
the system. At high interrupt rate, it might be wise to exclude the
interrupting CPU from the map since that already performs much work.
For a multi-queue system, if RSS is configured so that a hardware
receive queue is mapped to each CPU, then RPS is probably redundant
and unnecessary. If there are fewer hardware queues than CPUs, then
RPS might be beneficial if the rps_cpus for each queue are the ones that
share the same memory domain as the interrupting CPU for that queue.
RFS: Receive Flow Steering
==========================
While RPS steers packets solely based on hash, and thus generally
provides good load distribution, it does not take into account
application locality. This is accomplished by Receive Flow Steering
(RFS). The goal of RFS is to increase datacache hitrate by steering
kernel processing of packets to the CPU where the application thread
consuming the packet is running. RFS relies on the same RPS mechanisms
to enqueue packets onto the backlog of another CPU and to wake up that
CPU.
In RFS, packets are not forwarded directly by the value of their hash,
but the hash is used as index into a flow lookup table. This table maps
flows to the CPUs where those flows are being processed. The flow hash
(see RPS section above) is used to calculate the index into this table.
The CPU recorded in each entry is the one which last processed the flow.
If an entry does not hold a valid CPU, then packets mapped to that entry
are steered using plain RPS. Multiple table entries may point to the
same CPU. Indeed, with many flows and few CPUs, it is very likely that
a single application thread handles flows with many different flow hashes.
rps_sock_table is a global flow table that contains the *desired* CPU for
flows: the CPU that is currently processing the flow in userspace. Each
table value is a CPU index that is updated during calls to recvmsg and
sendmsg (specifically, inet_recvmsg(), inet_sendmsg(), inet_sendpage()
and tcp_splice_read()).
When the scheduler moves a thread to a new CPU while it has outstanding
receive packets on the old CPU, packets may arrive out of order. To
avoid this, RFS uses a second flow table to track outstanding packets
for each flow: rps_dev_flow_table is a table specific to each hardware
receive queue of each device. Each table value stores a CPU index and a
counter. The CPU index represents the *current* CPU onto which packets
for this flow are enqueued for further kernel processing. Ideally, kernel
and userspace processing occur on the same CPU, and hence the CPU index
in both tables is identical. This is likely false if the scheduler has
recently migrated a userspace thread while the kernel still has packets
enqueued for kernel processing on the old CPU.
The counter in rps_dev_flow_table values records the length of the current
CPU's backlog when a packet in this flow was last enqueued. Each backlog
queue has a head counter that is incremented on dequeue. A tail counter
is computed as head counter + queue length. In other words, the counter
in rps_dev_flow_table[i] records the last element in flow i that has
been enqueued onto the currently designated CPU for flow i (of course,
entry i is actually selected by hash and multiple flows may hash to the
same entry i).
And now the trick for avoiding out of order packets: when selecting the
CPU for packet processing (from get_rps_cpu()) the rps_sock_flow table
and the rps_dev_flow table of the queue that the packet was received on
are compared. If the desired CPU for the flow (found in the
rps_sock_flow table) matches the current CPU (found in the rps_dev_flow
table), the packet is enqueued onto that CPU’s backlog. If they differ,
the current CPU is updated to match the desired CPU if one of the
following is true:
- The current CPU's queue head counter >= the recorded tail counter
value in rps_dev_flow[i]
- The current CPU is unset (equal to NR_CPUS)
- The current CPU is offline
After this check, the packet is sent to the (possibly updated) current
CPU. These rules aim to ensure that a flow only moves to a new CPU when
there are no packets outstanding on the old CPU, as the outstanding
packets could arrive later than those about to be processed on the new
CPU.
==== RFS Configuration
RFS is only available if the kconfig symbol CONFIG_RFS is enabled (on
by default for SMP). The functionality remains disabled until explicitly
configured. The number of entries in the global flow table is set through:
/proc/sys/net/core/rps_sock_flow_entries
The number of entries in the per-queue flow table are set through:
/sys/class/net/<dev>/queues/tx-<n>/rps_flow_cnt
== Suggested Configuration
Both of these need to be set before RFS is enabled for a receive queue.
Values for both are rounded up to the nearest power of two. The
suggested flow count depends on the expected number of active connections
at any given time, which may be significantly less than the number of open
connections. We have found that a value of 32768 for rps_sock_flow_entries
works fairly well on a moderately loaded server.
For a single queue device, the rps_flow_cnt value for the single queue
would normally be configured to the same value as rps_sock_flow_entries.
For a multi-queue device, the rps_flow_cnt for each queue might be
configured as rps_sock_flow_entries / N, where N is the number of
queues. So for instance, if rps_flow_entries is set to 32768 and there
are 16 configured receive queues, rps_flow_cnt for each queue might be
configured as 2048.
Accelerated RFS
===============
Accelerated RFS is to RFS what RSS is to RPS: a hardware-accelerated load
balancing mechanism that uses soft state to steer flows based on where
the application thread consuming the packets of each flow is running.
Accelerated RFS should perform better than RFS since packets are sent
directly to a CPU local to the thread consuming the data. The target CPU
will either be the same CPU where the application runs, or at least a CPU
which is local to the application thread’s CPU in the cache hierarchy.
To enable accelerated RFS, the networking stack calls the
ndo_rx_flow_steer driver function to communicate the desired hardware
queue for packets matching a particular flow. The network stack
automatically calls this function every time a flow entry in
rps_dev_flow_table is updated. The driver in turn uses a device specific
method to program the NIC to steer the packets.
The hardware queue for a flow is derived from the CPU recorded in
rps_dev_flow_table. The stack consults a CPU to hardware queue map which
is maintained by the NIC driver. This is an auto-generated reverse map of
the IRQ affinity table shown by /proc/interrupts. Drivers can use
functions in the cpu_rmap (“CPU affinity reverse map”) kernel library
to populate the map. For each CPU, the corresponding queue in the map is
set to be one whose processing CPU is closest in cache locality.
==== Accelerated RFS Configuration
Accelerated RFS is only available if the kernel is compiled with
CONFIG_RFS_ACCEL and support is provided by the NIC device and driver.
It also requires that ntuple filtering is enabled via ethtool. The map
of CPU to queues is automatically deduced from the IRQ affinities
configured for each receive queue by the driver, so no additional
configuration should be necessary.
== Suggested Configuration
This technique should be enabled whenever one wants to use RFS and the
NIC supports hardware acceleration.
XPS: Transmit Packet Steering
=============================
Transmit Packet Steering is a mechanism for intelligently selecting
which transmit queue to use when transmitting a packet on a multi-queue
device. To accomplish this, a mapping from CPU to hardware queue(s) is
recorded. The goal of this mapping is usually to assign queues
exclusively to a subset of CPUs, where the transmit completions for
these queues are processed on a CPU within this set. This choice
provides two benefits. First, contention on the device queue lock is
significantly reduced since fewer CPUs contend for the same queue
(contention can be eliminated completely if each CPU has its own
transmit queue). Secondly, cache miss rate on transmit completion is
reduced, in particular for data cache lines that hold the sk_buff
structures.
XPS is configured per transmit queue by setting a bitmap of CPUs that
may use that queue to transmit. The reverse mapping, from CPUs to
transmit queues, is computed and maintained for each network device.
When transmitting the first packet in a flow, the function
get_xps_queue() is called to select a queue. This function uses the ID
of the running CPU as a key into the CPU-to-queue lookup table. If the
ID matches a single queue, that is used for transmission. If multiple
queues match, one is selected by using the flow hash to compute an index
into the set.
The queue chosen for transmitting a particular flow is saved in the
corresponding socket structure for the flow (e.g. a TCP connection).
This transmit queue is used for subsequent packets sent on the flow to
prevent out of order (ooo) packets. The choice also amortizes the cost
of calling get_xps_queues() over all packets in the flow. To avoid
ooo packets, the queue for a flow can subsequently only be changed if
skb->ooo_okay is set for a packet in the flow. This flag indicates that
there are no outstanding packets in the flow, so the transmit queue can
change without the risk of generating out of order packets. The
transport layer is responsible for setting ooo_okay appropriately. TCP,
for instance, sets the flag when all data for a connection has been
acknowledged.
==== XPS Configuration
XPS is only available if the kconfig symbol CONFIG_XPS is enabled (on by
default for SMP). The functionality remains disabled until explicitly
configured. To enable XPS, the bitmap of CPUs that may use a transmit
queue is configured using the sysfs file entry:
/sys/class/net/<dev>/queues/tx-<n>/xps_cpus
== Suggested Configuration
For a network device with a single transmission queue, XPS configuration
has no effect, since there is no choice in this case. In a multi-queue
system, XPS is preferably configured so that each CPU maps onto one queue.
If there are as many queues as there are CPUs in the system, then each
queue can also map onto one CPU, resulting in exclusive pairings that
experience no contention. If there are fewer queues than CPUs, then the
best CPUs to share a given queue are probably those that share the cache
with the CPU that processes transmit completions for that queue
(transmit interrupts).
Further Information
===================
RPS and RFS were introduced in kernel 2.6.35. XPS was incorporated into
2.6.38. Original patches were submitted by Tom Herbert
(therbert@google.com)
Accelerated RFS was introduced in 2.6.35. Original patches were
submitted by Ben Hutchings (bhutchings@solarflare.com)
Authors:
Tom Herbert (therbert@google.com)
Willem de Bruijn (willemb@google.com)
...@@ -54,11 +54,10 @@ referred to as subsystem-level callbacks in what follows. ...@@ -54,11 +54,10 @@ referred to as subsystem-level callbacks in what follows.
By default, the callbacks are always invoked in process context with interrupts By default, the callbacks are always invoked in process context with interrupts
enabled. However, subsystems can use the pm_runtime_irq_safe() helper function 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() to tell the PM core that a device's ->runtime_suspend() and ->runtime_resume()
callbacks should be invoked in atomic context with interrupts disabled callbacks should be invoked in atomic context with interrupts disabled.
(->runtime_idle() is still invoked the default way). This implies that these This implies that these callback routines must not block or sleep, but it also
callback routines must not block or sleep, but it also means that the means that the synchronous helper functions listed at the end of Section 4 can
synchronous helper functions listed at the end of Section 4 can be used within be used within an interrupt handler or in an atomic context.
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
...@@ -432,8 +431,7 @@ drivers/base/power/runtime.c and include/linux/pm_runtime.h: ...@@ -432,8 +431,7 @@ drivers/base/power/runtime.c and include/linux/pm_runtime.h:
void pm_runtime_irq_safe(struct device *dev); void pm_runtime_irq_safe(struct device *dev);
- set the power.irq_safe flag for the device, causing the runtime-PM - 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 callbacks to be invoked with interrupts off
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
...@@ -483,6 +481,7 @@ pm_runtime_suspend() ...@@ -483,6 +481,7 @@ pm_runtime_suspend()
pm_runtime_autosuspend() pm_runtime_autosuspend()
pm_runtime_resume() pm_runtime_resume()
pm_runtime_get_sync() pm_runtime_get_sync()
pm_runtime_put_sync()
pm_runtime_put_sync_suspend() pm_runtime_put_sync_suspend()
5. Runtime PM Initialization, Device Probing and Removal 5. Runtime PM Initialization, Device Probing and Removal
......
Ramoops oops/panic logger
=========================
Sergiu Iordache <sergiu@chromium.org>
Updated: 8 August 2011
0. Introduction
Ramoops is an oops/panic logger that writes its logs to RAM before the system
crashes. It works by logging oopses and panics in a circular buffer. Ramoops
needs a system with persistent RAM so that the content of that area can
survive after a restart.
1. Ramoops concepts
Ramoops uses a predefined memory area to store the dump. The start and size of
the memory area are set using two variables:
* "mem_address" for the start
* "mem_size" for the size. The memory size will be rounded down to a
power of two.
The memory area is divided into "record_size" chunks (also rounded down to
power of two) and each oops/panic writes a "record_size" chunk of
information.
Dumping both oopses and panics can be done by setting 1 in the "dump_oops"
variable while setting 0 in that variable dumps only the panics.
The module uses a counter to record multiple dumps but the counter gets reset
on restart (i.e. new dumps after the restart will overwrite old ones).
2. Setting the parameters
Setting the ramoops parameters can be done in 2 different manners:
1. Use the module parameters (which have the names of the variables described
as before).
2. Use a platform device and set the platform data. The parameters can then
be set through that platform data. An example of doing that is:
#include <linux/ramoops.h>
[...]
static struct ramoops_platform_data ramoops_data = {
.mem_size = <...>,
.mem_address = <...>,
.record_size = <...>,
.dump_oops = <...>,
};
static struct platform_device ramoops_dev = {
.name = "ramoops",
.dev = {
.platform_data = &ramoops_data,
},
};
[... inside a function ...]
int ret;
ret = platform_device_register(&ramoops_dev);
if (ret) {
printk(KERN_ERR "unable to register platform device\n");
return ret;
}
3. Dump format
The data dump begins with a header, currently defined as "====" followed by a
timestamp and a new line. The dump then continues with the actual data.
4. Reading the data
The dump data can be read from memory (through /dev/mem or other means).
Getting the module parameters, which are needed in order to parse the data, can
be done through /sys/module/ramoops/parameters/* .
Release Date : Tue. Jul 26, 2011 17:00:00 PST 2010 -
(emaild-id:megaraidlinux@lsi.com)
Adam Radford
Current Version : 00.00.05.40-rc1
Old Version : 00.00.05.38-rc1
1. Fix FastPath I/O to work with degraded RAID 1.
2. Add .change_queue_depth support.
-------------------------------------------------------------------------------
Release Date : Wed. May 11, 2011 17:00:00 PST 2010 - Release Date : Wed. May 11, 2011 17:00:00 PST 2010 -
(emaild-id:megaraidlinux@lsi.com) (emaild-id:megaraidlinux@lsi.com)
Adam Radford Adam Radford
......
...@@ -8,3 +8,6 @@ lguest/ ...@@ -8,3 +8,6 @@ lguest/
- Extremely simple hypervisor for experimental/educational use. - Extremely simple hypervisor for experimental/educational use.
uml/ uml/
- User Mode Linux, builds/runs Linux kernel as a userspace program. - User Mode Linux, builds/runs Linux kernel as a userspace program.
virtio.txt
- Text version of draft virtio spec.
See http://ozlabs.org/~rusty/virtio-spec
...@@ -1996,6 +1996,9 @@ int main(int argc, char *argv[]) ...@@ -1996,6 +1996,9 @@ int main(int argc, char *argv[])
/* We use a simple helper to copy the arguments separated by spaces. */ /* We use a simple helper to copy the arguments separated by spaces. */
concat((char *)(boot + 1), argv+optind+2); concat((char *)(boot + 1), argv+optind+2);
/* Set kernel alignment to 16M (CONFIG_PHYSICAL_ALIGN) */
boot->hdr.kernel_alignment = 0x1000000;
/* Boot protocol version: 2.07 supports the fields for lguest. */ /* Boot protocol version: 2.07 supports the fields for lguest. */
boot->hdr.version = 0x207; boot->hdr.version = 0x207;
......
此差异已折叠。
此差异已折叠。
VERSION = 3 VERSION = 3
PATCHLEVEL = 0 PATCHLEVEL = 1
SUBLEVEL = 0 SUBLEVEL = 0
EXTRAVERSION = EXTRAVERSION = -rc6
NAME = Sneaky Weasel NAME = "Divemaster Edition"
# *DOCUMENTATION* # *DOCUMENTATION*
# To see a list of typical targets execute "make help" # To see a list of typical targets execute "make help"
...@@ -360,7 +360,7 @@ CFLAGS_GCOV = -fprofile-arcs -ftest-coverage ...@@ -360,7 +360,7 @@ CFLAGS_GCOV = -fprofile-arcs -ftest-coverage
LINUXINCLUDE := -I$(srctree)/arch/$(hdr-arch)/include \ LINUXINCLUDE := -I$(srctree)/arch/$(hdr-arch)/include \
-Iarch/$(hdr-arch)/include/generated -Iinclude \ -Iarch/$(hdr-arch)/include/generated -Iinclude \
$(if $(KBUILD_SRC), -I$(srctree)/include) \ $(if $(KBUILD_SRC), -I$(srctree)/include) \
-include include/generated/autoconf.h -include $(srctree)/include/linux/kconfig.h
KBUILD_CPPFLAGS := -D__KERNEL__ KBUILD_CPPFLAGS := -D__KERNEL__
......
...@@ -178,4 +178,7 @@ config HAVE_ARCH_MUTEX_CPU_RELAX ...@@ -178,4 +178,7 @@ config HAVE_ARCH_MUTEX_CPU_RELAX
config HAVE_RCU_TABLE_FREE config HAVE_RCU_TABLE_FREE
bool bool
config ARCH_HAVE_NMI_SAFE_CMPXCHG
bool
source "kernel/gcov/Kconfig" source "kernel/gcov/Kconfig"
...@@ -14,6 +14,7 @@ config ALPHA ...@@ -14,6 +14,7 @@ config ALPHA
select AUTO_IRQ_AFFINITY if SMP select AUTO_IRQ_AFFINITY if SMP
select GENERIC_IRQ_SHOW select GENERIC_IRQ_SHOW
select ARCH_WANT_OPTIONAL_GPIOLIB select ARCH_WANT_OPTIONAL_GPIOLIB
select ARCH_HAVE_NMI_SAFE_CMPXCHG
help help
The Alpha is a 64-bit general-purpose processor designed and The Alpha is a 64-bit general-purpose processor designed and
marketed by the Digital Equipment Corporation of blessed memory, marketed by the Digital Equipment Corporation of blessed memory,
......
...@@ -27,13 +27,4 @@ ...@@ -27,13 +27,4 @@
#define UAC_NOFIX 2 #define UAC_NOFIX 2
#define UAC_SIGBUS 4 #define UAC_SIGBUS 4
#ifdef __KERNEL__
/* This is the shift that is applied to the UAC bits as stored in the
per-thread flags. See thread_info.h. */
#define UAC_SHIFT 6
#endif
#endif /* __ASM_ALPHA_SYSINFO_H */ #endif /* __ASM_ALPHA_SYSINFO_H */
...@@ -74,9 +74,9 @@ register struct thread_info *__current_thread_info __asm__("$8"); ...@@ -74,9 +74,9 @@ register struct thread_info *__current_thread_info __asm__("$8");
#define TIF_NEED_RESCHED 3 /* rescheduling necessary */ #define TIF_NEED_RESCHED 3 /* rescheduling necessary */
#define TIF_POLLING_NRFLAG 8 /* poll_idle is polling NEED_RESCHED */ #define TIF_POLLING_NRFLAG 8 /* poll_idle is polling NEED_RESCHED */
#define TIF_DIE_IF_KERNEL 9 /* dik recursion lock */ #define TIF_DIE_IF_KERNEL 9 /* dik recursion lock */
#define TIF_UAC_NOPRINT 10 /* see sysinfo.h */ #define TIF_UAC_NOPRINT 10 /* ! Preserve sequence of following */
#define TIF_UAC_NOFIX 11 #define TIF_UAC_NOFIX 11 /* ! flags as they match */
#define TIF_UAC_SIGBUS 12 #define TIF_UAC_SIGBUS 12 /* ! userspace part of 'osf_sysinfo' */
#define TIF_MEMDIE 13 /* is terminating due to OOM killer */ #define TIF_MEMDIE 13 /* is terminating due to OOM killer */
#define TIF_RESTORE_SIGMASK 14 /* restore signal mask in do_signal */ #define TIF_RESTORE_SIGMASK 14 /* restore signal mask in do_signal */
#define TIF_FREEZE 16 /* is freezing for suspend */ #define TIF_FREEZE 16 /* is freezing for suspend */
...@@ -97,7 +97,7 @@ register struct thread_info *__current_thread_info __asm__("$8"); ...@@ -97,7 +97,7 @@ register struct thread_info *__current_thread_info __asm__("$8");
#define _TIF_ALLWORK_MASK (_TIF_WORK_MASK \ #define _TIF_ALLWORK_MASK (_TIF_WORK_MASK \
| _TIF_SYSCALL_TRACE) | _TIF_SYSCALL_TRACE)
#define ALPHA_UAC_SHIFT 10 #define ALPHA_UAC_SHIFT TIF_UAC_NOPRINT
#define ALPHA_UAC_MASK (1 << TIF_UAC_NOPRINT | 1 << TIF_UAC_NOFIX | \ #define ALPHA_UAC_MASK (1 << TIF_UAC_NOPRINT | 1 << TIF_UAC_NOFIX | \
1 << TIF_UAC_SIGBUS) 1 << TIF_UAC_SIGBUS)
......
此差异已折叠。
...@@ -360,7 +360,7 @@ sys_call_table: ...@@ -360,7 +360,7 @@ sys_call_table:
.quad sys_newuname .quad sys_newuname
.quad sys_nanosleep /* 340 */ .quad sys_nanosleep /* 340 */
.quad sys_mremap .quad sys_mremap
.quad sys_nfsservctl .quad sys_ni_syscall /* old nfsservctl */
.quad sys_setresuid .quad sys_setresuid
.quad sys_getresuid .quad sys_getresuid
.quad sys_pciconfig_read /* 345 */ .quad sys_pciconfig_read /* 345 */
......
此差异已折叠。
...@@ -82,7 +82,7 @@ asmlinkage void mmc_loader(unsigned char *buf, unsigned long len) ...@@ -82,7 +82,7 @@ asmlinkage void mmc_loader(unsigned char *buf, unsigned long len)
/* Disable clock to MMC hardware block */ /* Disable clock to MMC hardware block */
__raw_writel(__raw_readl(SMSTPCR3) & (1 << 12), SMSTPCR3); __raw_writel(__raw_readl(SMSTPCR3) | (1 << 12), SMSTPCR3);
mmc_update_progress(MMC_PROGRESS_DONE); mmc_update_progress(MMC_PROGRESS_DONE);
} }
...@@ -85,7 +85,7 @@ asmlinkage void mmc_loader(unsigned short *buf, unsigned long len) ...@@ -85,7 +85,7 @@ asmlinkage void mmc_loader(unsigned short *buf, unsigned long len)
goto err; goto err;
/* Disable clock to SDHI1 hardware block */ /* Disable clock to SDHI1 hardware block */
__raw_writel(__raw_readl(SMSTPCR3) & (1 << 13), SMSTPCR3); __raw_writel(__raw_readl(SMSTPCR3) | (1 << 13), SMSTPCR3);
mmc_update_progress(MMC_PROGRESS_DONE); mmc_update_progress(MMC_PROGRESS_DONE);
......
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册