提交 9fe64e15 编写于 作者: J Jonathan Corbet

Merge tag 'v4.11-rc1' into docs-next

Linux 4.11-rc1

要显示的变更太多。

To preserve performance only 1000 of 1000+ files are displayed.
...@@ -137,6 +137,7 @@ Ricardo Ribalda Delgado <ricardo.ribalda@gmail.com> ...@@ -137,6 +137,7 @@ Ricardo Ribalda Delgado <ricardo.ribalda@gmail.com>
Rudolf Marek <R.Marek@sh.cvut.cz> Rudolf Marek <R.Marek@sh.cvut.cz>
Rui Saraiva <rmps@joel.ist.utl.pt> Rui Saraiva <rmps@joel.ist.utl.pt>
Sachin P Sant <ssant@in.ibm.com> Sachin P Sant <ssant@in.ibm.com>
Sarangdhar Joshi <spjoshi@codeaurora.org>
Sam Ravnborg <sam@mars.ravnborg.org> Sam Ravnborg <sam@mars.ravnborg.org>
Santosh Shilimkar <ssantosh@kernel.org> Santosh Shilimkar <ssantosh@kernel.org>
Santosh Shilimkar <santosh.shilimkar@oracle.org> Santosh Shilimkar <santosh.shilimkar@oracle.org>
...@@ -150,10 +151,13 @@ Shuah Khan <shuah@kernel.org> <shuah.kh@samsung.com> ...@@ -150,10 +151,13 @@ Shuah Khan <shuah@kernel.org> <shuah.kh@samsung.com>
Simon Kelley <simon@thekelleys.org.uk> Simon Kelley <simon@thekelleys.org.uk>
Stéphane Witzmann <stephane.witzmann@ubpmes.univ-bpclermont.fr> Stéphane Witzmann <stephane.witzmann@ubpmes.univ-bpclermont.fr>
Stephen Hemminger <shemminger@osdl.org> Stephen Hemminger <shemminger@osdl.org>
Subash Abhinov Kasiviswanathan <subashab@codeaurora.org>
Subhash Jadavani <subhashj@codeaurora.org>
Sudeep Holla <sudeep.holla@arm.com> Sudeep KarkadaNagesha <sudeep.karkadanagesha@arm.com> Sudeep Holla <sudeep.holla@arm.com> Sudeep KarkadaNagesha <sudeep.karkadanagesha@arm.com>
Sumit Semwal <sumit.semwal@ti.com> Sumit Semwal <sumit.semwal@ti.com>
Tejun Heo <htejun@gmail.com> Tejun Heo <htejun@gmail.com>
Thomas Graf <tgraf@suug.ch> Thomas Graf <tgraf@suug.ch>
Thomas Pedersen <twp@codeaurora.org>
Tony Luck <tony.luck@intel.com> Tony Luck <tony.luck@intel.com>
Tsuneo Yoshioka <Tsuneo.Yoshioka@f-secure.com> Tsuneo Yoshioka <Tsuneo.Yoshioka@f-secure.com>
Uwe Kleine-König <ukleinek@informatik.uni-freiburg.de> Uwe Kleine-König <ukleinek@informatik.uni-freiburg.de>
......
...@@ -2478,12 +2478,11 @@ S: D-90453 Nuernberg ...@@ -2478,12 +2478,11 @@ S: D-90453 Nuernberg
S: Germany S: Germany
N: Arnaldo Carvalho de Melo N: Arnaldo Carvalho de Melo
E: acme@ghostprotocols.net E: acme@kernel.org
E: arnaldo.melo@gmail.com E: arnaldo.melo@gmail.com
E: acme@redhat.com E: acme@redhat.com
W: http://oops.ghostprotocols.net:81/blog/
P: 1024D/9224DF01 D5DF E3BB E3C8 BCBB F8AD 841A B6AB 4681 9224 DF01 P: 1024D/9224DF01 D5DF E3BB E3C8 BCBB F8AD 841A B6AB 4681 9224 DF01
D: IPX, LLC, DCCP, cyc2x, wl3501_cs, net/ hacks D: tools/, IPX, LLC, DCCP, cyc2x, wl3501_cs, net/ hacks
S: Brazil S: Brazil
N: Karsten Merker N: Karsten Merker
......
...@@ -270,8 +270,8 @@ m68k/ ...@@ -270,8 +270,8 @@ m68k/
- directory with info about Linux on Motorola 68k architecture. - directory with info about Linux on Motorola 68k architecture.
mailbox.txt mailbox.txt
- How to write drivers for the common mailbox framework (IPC). - How to write drivers for the common mailbox framework (IPC).
md-cluster.txt md/
- info on shared-device RAID MD cluster. - directory with info about Linux Software RAID
media/ media/
- info on media drivers: uAPI, kAPI and driver documentation. - info on media drivers: uAPI, kAPI and driver documentation.
memory-barriers.txt memory-barriers.txt
......
What: /sys/block/zram<id>/num_reads
Date: August 2015
Contact: Sergey Senozhatsky <sergey.senozhatsky@gmail.com>
Description:
The num_reads file is read-only and specifies the number of
reads (failed or successful) done on this device.
Now accessible via zram<id>/stat node.
What: /sys/block/zram<id>/num_writes
Date: August 2015
Contact: Sergey Senozhatsky <sergey.senozhatsky@gmail.com>
Description:
The num_writes file is read-only and specifies the number of
writes (failed or successful) done on this device.
Now accessible via zram<id>/stat node.
What: /sys/block/zram<id>/invalid_io
Date: August 2015
Contact: Sergey Senozhatsky <sergey.senozhatsky@gmail.com>
Description:
The invalid_io file is read-only and specifies the number of
non-page-size-aligned I/O requests issued to this device.
Now accessible via zram<id>/io_stat node.
What: /sys/block/zram<id>/failed_reads
Date: August 2015
Contact: Sergey Senozhatsky <sergey.senozhatsky@gmail.com>
Description:
The failed_reads file is read-only and specifies the number of
failed reads happened on this device.
Now accessible via zram<id>/io_stat node.
What: /sys/block/zram<id>/failed_writes
Date: August 2015
Contact: Sergey Senozhatsky <sergey.senozhatsky@gmail.com>
Description:
The failed_writes file is read-only and specifies the number of
failed writes happened on this device.
Now accessible via zram<id>/io_stat node.
What: /sys/block/zram<id>/notify_free
Date: August 2015
Contact: Sergey Senozhatsky <sergey.senozhatsky@gmail.com>
Description:
The notify_free file is read-only. Depending on device usage
scenario it may account a) the number of pages freed because
of swap slot free notifications or b) the number of pages freed
because of REQ_DISCARD requests sent by bio. The former ones
are sent to a swap block device when a swap slot is freed, which
implies that this disk is being used as a swap disk. The latter
ones are sent by filesystem mounted with discard option,
whenever some data blocks are getting discarded.
Now accessible via zram<id>/io_stat node.
What: /sys/block/zram<id>/zero_pages
Date: August 2015
Contact: Sergey Senozhatsky <sergey.senozhatsky@gmail.com>
Description:
The zero_pages file is read-only and specifies number of zero
filled pages written to this disk. No memory is allocated for
such pages.
Now accessible via zram<id>/mm_stat node.
What: /sys/block/zram<id>/orig_data_size
Date: August 2015
Contact: Sergey Senozhatsky <sergey.senozhatsky@gmail.com>
Description:
The orig_data_size file is read-only and specifies uncompressed
size of data stored in this disk. This excludes zero-filled
pages (zero_pages) since no memory is allocated for them.
Unit: bytes
Now accessible via zram<id>/mm_stat node.
What: /sys/block/zram<id>/compr_data_size
Date: August 2015
Contact: Sergey Senozhatsky <sergey.senozhatsky@gmail.com>
Description:
The compr_data_size file is read-only and specifies compressed
size of data stored in this disk. So, compression ratio can be
calculated using orig_data_size and this statistic.
Unit: bytes
Now accessible via zram<id>/mm_stat node.
What: /sys/block/zram<id>/mem_used_total
Date: August 2015
Contact: Sergey Senozhatsky <sergey.senozhatsky@gmail.com>
Description:
The mem_used_total file is read-only and specifies the amount
of memory, including allocator fragmentation and metadata
overhead, allocated for this disk. So, allocator space
efficiency can be calculated using compr_data_size and this
statistic.
Unit: bytes
Now accessible via zram<id>/mm_stat node.
What: /sys/block/zram<id>/mem_used_max
Date: August 2015
Contact: Sergey Senozhatsky <sergey.senozhatsky@gmail.com>
Description:
The mem_used_max file is read/write and specifies the amount
of maximum memory zram have consumed to store compressed data.
For resetting the value, you should write "0". Otherwise,
you could see -EINVAL.
Unit: bytes
Downgraded to write-only node: so it's possible to set new
value only; its current value is stored in zram<id>/mm_stat
node.
What: /sys/block/zram<id>/mem_limit
Date: August 2015
Contact: Sergey Senozhatsky <sergey.senozhatsky@gmail.com>
Description:
The mem_limit file is read/write and specifies the maximum
amount of memory ZRAM can use to store the compressed data.
The limit could be changed in run time and "0" means disable
the limit. No limit is the initial state. Unit: bytes
Downgraded to write-only node: so it's possible to set new
value only; its current value is stored in zram<id>/mm_stat
node.
...@@ -20,3 +20,11 @@ Description: RDMA-CM based connections from HCA <hca> at port <port-num> ...@@ -20,3 +20,11 @@ Description: RDMA-CM based connections from HCA <hca> at port <port-num>
will be initiated with this RoCE type as default. will be initiated with this RoCE type as default.
The possible RoCE types are either "IB/RoCE v1" or "RoCE v2". The possible RoCE types are either "IB/RoCE v1" or "RoCE v2".
This parameter has RW access. This parameter has RW access.
What: /config/rdma_cm/<hca>/ports/<port-num>/default_roce_tos
Date: February 7, 2017
KernelVersion: 4.11.0
Description: RDMA-CM QPs from HCA <hca> at port <port-num>
will be created with this TOS as default.
This can be overridden by using the rdma_set_option API.
The possible RoCE TOS values are 0-255.
...@@ -22,41 +22,6 @@ Description: ...@@ -22,41 +22,6 @@ Description:
device. The reset operation frees all the memory associated device. The reset operation frees all the memory associated
with this device. with this device.
What: /sys/block/zram<id>/num_reads
Date: August 2010
Contact: Nitin Gupta <ngupta@vflare.org>
Description:
The num_reads file is read-only and specifies the number of
reads (failed or successful) done on this device.
What: /sys/block/zram<id>/num_writes
Date: August 2010
Contact: Nitin Gupta <ngupta@vflare.org>
Description:
The num_writes file is read-only and specifies the number of
writes (failed or successful) done on this device.
What: /sys/block/zram<id>/invalid_io
Date: August 2010
Contact: Nitin Gupta <ngupta@vflare.org>
Description:
The invalid_io file is read-only and specifies the number of
non-page-size-aligned I/O requests issued to this device.
What: /sys/block/zram<id>/failed_reads
Date: February 2014
Contact: Sergey Senozhatsky <sergey.senozhatsky@gmail.com>
Description:
The failed_reads file is read-only and specifies the number of
failed reads happened on this device.
What: /sys/block/zram<id>/failed_writes
Date: February 2014
Contact: Sergey Senozhatsky <sergey.senozhatsky@gmail.com>
Description:
The failed_writes file is read-only and specifies the number of
failed writes happened on this device.
What: /sys/block/zram<id>/max_comp_streams What: /sys/block/zram<id>/max_comp_streams
Date: February 2014 Date: February 2014
Contact: Sergey Senozhatsky <sergey.senozhatsky@gmail.com> Contact: Sergey Senozhatsky <sergey.senozhatsky@gmail.com>
...@@ -73,74 +38,24 @@ Description: ...@@ -73,74 +38,24 @@ Description:
available and selected compression algorithms, change available and selected compression algorithms, change
compression algorithm selection. compression algorithm selection.
What: /sys/block/zram<id>/notify_free
Date: August 2010
Contact: Nitin Gupta <ngupta@vflare.org>
Description:
The notify_free file is read-only. Depending on device usage
scenario it may account a) the number of pages freed because
of swap slot free notifications or b) the number of pages freed
because of REQ_DISCARD requests sent by bio. The former ones
are sent to a swap block device when a swap slot is freed, which
implies that this disk is being used as a swap disk. The latter
ones are sent by filesystem mounted with discard option,
whenever some data blocks are getting discarded.
What: /sys/block/zram<id>/zero_pages
Date: August 2010
Contact: Nitin Gupta <ngupta@vflare.org>
Description:
The zero_pages file is read-only and specifies number of zero
filled pages written to this disk. No memory is allocated for
such pages.
What: /sys/block/zram<id>/orig_data_size
Date: August 2010
Contact: Nitin Gupta <ngupta@vflare.org>
Description:
The orig_data_size file is read-only and specifies uncompressed
size of data stored in this disk. This excludes zero-filled
pages (zero_pages) since no memory is allocated for them.
Unit: bytes
What: /sys/block/zram<id>/compr_data_size
Date: August 2010
Contact: Nitin Gupta <ngupta@vflare.org>
Description:
The compr_data_size file is read-only and specifies compressed
size of data stored in this disk. So, compression ratio can be
calculated using orig_data_size and this statistic.
Unit: bytes
What: /sys/block/zram<id>/mem_used_total
Date: August 2010
Contact: Nitin Gupta <ngupta@vflare.org>
Description:
The mem_used_total file is read-only and specifies the amount
of memory, including allocator fragmentation and metadata
overhead, allocated for this disk. So, allocator space
efficiency can be calculated using compr_data_size and this
statistic.
Unit: bytes
What: /sys/block/zram<id>/mem_used_max What: /sys/block/zram<id>/mem_used_max
Date: August 2014 Date: August 2014
Contact: Minchan Kim <minchan@kernel.org> Contact: Minchan Kim <minchan@kernel.org>
Description: Description:
The mem_used_max file is read/write and specifies the amount The mem_used_max file is write-only and is used to reset
of maximum memory zram have consumed to store compressed data. the counter of maximum memory zram have consumed to store
For resetting the value, you should write "0". Otherwise, compressed data. For resetting the value, you should write
you could see -EINVAL. "0". Otherwise, you could see -EINVAL.
Unit: bytes Unit: bytes
What: /sys/block/zram<id>/mem_limit What: /sys/block/zram<id>/mem_limit
Date: August 2014 Date: August 2014
Contact: Minchan Kim <minchan@kernel.org> Contact: Minchan Kim <minchan@kernel.org>
Description: Description:
The mem_limit file is read/write and specifies the maximum The mem_limit file is write-only and specifies the maximum
amount of memory ZRAM can use to store the compressed data. The amount of memory ZRAM can use to store the compressed data.
limit could be changed in run time and "0" means disable the The limit could be changed in run time and "0" means disable
limit. No limit is the initial state. Unit: bytes the limit. No limit is the initial state. Unit: bytes
What: /sys/block/zram<id>/compact What: /sys/block/zram<id>/compact
Date: August 2015 Date: August 2015
......
What: /sys/bus/i2c/devices/.../trickle_charge_bypass
Date: Jan 2017
KernelVersion: 4.11
Contact: Enric Balletbo i Serra <eballetbo@gmail.com>
Description: Attribute for enable/disable the trickle charge bypass
The trickle_charge_bypass attribute allows the userspace to
enable/disable the Trickle charge FET bypass.
...@@ -170,6 +170,16 @@ Description: ...@@ -170,6 +170,16 @@ Description:
Has all of the equivalent parameters as per voltageY. Units Has all of the equivalent parameters as per voltageY. Units
after application of scale and offset are m/s^2. after application of scale and offset are m/s^2.
What: /sys/bus/iio/devices/iio:deviceX/in_gravity_x_raw
What: /sys/bus/iio/devices/iio:deviceX/in_gravity_y_raw
What: /sys/bus/iio/devices/iio:deviceX/in_gravity_z_raw
KernelVersion: 4.11
Contact: linux-iio@vger.kernel.org
Description:
Gravity in direction x, y or z (may be arbitrarily assigned
but should match other such assignments on device).
Units after application of scale and offset are m/s^2.
What: /sys/bus/iio/devices/iio:deviceX/in_anglvel_x_raw What: /sys/bus/iio/devices/iio:deviceX/in_anglvel_x_raw
What: /sys/bus/iio/devices/iio:deviceX/in_anglvel_y_raw What: /sys/bus/iio/devices/iio:deviceX/in_anglvel_y_raw
What: /sys/bus/iio/devices/iio:deviceX/in_anglvel_z_raw What: /sys/bus/iio/devices/iio:deviceX/in_anglvel_z_raw
...@@ -805,7 +815,7 @@ Description: ...@@ -805,7 +815,7 @@ Description:
attribute. E.g. if in_voltage0_raw_thresh_rising_value is set to 1200 attribute. E.g. if in_voltage0_raw_thresh_rising_value is set to 1200
and in_voltage0_raw_thresh_rising_hysteresis is set to 50. The event and in_voltage0_raw_thresh_rising_hysteresis is set to 50. The event
will get activated once in_voltage0_raw goes above 1200 and will become will get activated once in_voltage0_raw goes above 1200 and will become
deactived again once the value falls below 1150. deactivated again once the value falls below 1150.
What: /sys/.../events/in_accel_x_raw_roc_rising_value What: /sys/.../events/in_accel_x_raw_roc_rising_value
What: /sys/.../events/in_accel_x_raw_roc_falling_value What: /sys/.../events/in_accel_x_raw_roc_falling_value
...@@ -1245,7 +1255,8 @@ Description: ...@@ -1245,7 +1255,8 @@ Description:
reflectivity of infrared or ultrasound emitted. reflectivity of infrared or ultrasound emitted.
Often these sensors are unit less and as such conversion Often these sensors are unit less and as such conversion
to SI units is not possible. Higher proximity measurements to SI units is not possible. Higher proximity measurements
indicate closer objects, and vice versa. indicate closer objects, and vice versa. Units after
application of scale and offset are meters.
What: /sys/.../iio:deviceX/in_illuminance_input What: /sys/.../iio:deviceX/in_illuminance_input
What: /sys/.../iio:deviceX/in_illuminance_raw What: /sys/.../iio:deviceX/in_illuminance_raw
......
What: /sys/bus/iio/devices/triggerX/trigger_polarity
KernelVersion: 4.11
Contact: fabrice.gasnier@st.com
Description:
The STM32 ADC can be configured to use external trigger sources
(e.g. timers, pwm or exti gpio). Then, it can be tuned to start
conversions on external trigger by either:
- "rising-edge"
- "falling-edge"
- "both-edges".
Reading returns current trigger polarity.
Writing value before enabling conversions sets trigger polarity.
What: /sys/bus/iio/devices/triggerX/trigger_polarity_available
KernelVersion: 4.11
Contact: fabrice.gasnier@st.com
Description:
List all available trigger_polarity settings.
What /sys/bus/iio/devices/iio:deviceX/sensor_sensitivity
Date: January 2017
KernelVersion: 4.11
Contact: linux-iio@vger.kernel.org
Description:
Show or set the gain boost of the amp, from 0-31 range.
default 31
What /sys/bus/iio/devices/iio:deviceX/sensor_max_range
Date: January 2017
KernelVersion: 4.11
Contact: linux-iio@vger.kernel.org
Description:
Show or set the maximum range between the sensor and the
first object echoed in meters. Default value is 6.020.
This setting limits the time the driver is waiting for a
echo.
Showing the range of available values is represented as the
minimum value, the step and the maximum value, all enclosed
in square brackets.
Example:
[0.043 0.043 11.008]
What: /sys/bus/iio/devices/triggerX/master_mode_available
KernelVersion: 4.11
Contact: benjamin.gaignard@st.com
Description:
Reading returns the list possible master modes which are:
- "reset" : The UG bit from the TIMx_EGR register is used as trigger output (TRGO).
- "enable" : The Counter Enable signal CNT_EN is used as trigger output.
- "update" : The update event is selected as trigger output.
For instance a master timer can then be used as a prescaler for a slave timer.
- "compare_pulse" : The trigger output send a positive pulse when the CC1IF flag is to be set.
- "OC1REF" : OC1REF signal is used as trigger output.
- "OC2REF" : OC2REF signal is used as trigger output.
- "OC3REF" : OC3REF signal is used as trigger output.
- "OC4REF" : OC4REF signal is used as trigger output.
What: /sys/bus/iio/devices/triggerX/master_mode
KernelVersion: 4.11
Contact: benjamin.gaignard@st.com
Description:
Reading returns the current master modes.
Writing set the master mode
What: /sys/bus/iio/devices/triggerX/sampling_frequency
KernelVersion: 4.11
Contact: benjamin.gaignard@st.com
Description:
Reading returns the current sampling frequency.
Writing an value different of 0 set and start sampling.
Writing 0 stop sampling.
What: /sys/class/devfreq-event/event(x)/
Date: January 2017
Contact: Chanwoo Choi <cw00.choi@samsung.com>
Description:
Provide a place in sysfs for the devfreq-event objects.
This allows accessing various devfreq-event specific variables.
The name of devfreq-event object denoted as 'event(x)' which
includes the unique number of 'x' for each devfreq-event object.
What: /sys/class/devfreq-event/event(x)/name
Date: January 2017
Contact: Chanwoo Choi <cw00.choi@samsung.com>
Description:
The /sys/class/devfreq-event/event(x)/name attribute contains
the name of the devfreq-event object. This attribute is
read-only.
What: /sys/class/devfreq-event/event(x)/enable_count
Date: January 2017
Contact: Chanwoo Choi <cw00.choi@samsung.com>
Description:
The /sys/class/devfreq-event/event(x)/enable_count attribute
contains the reference count to enable the devfreq-event
object. If the device is enabled, the value of attribute is
greater than zero.
...@@ -23,6 +23,23 @@ Description: ...@@ -23,6 +23,23 @@ Description:
If the LED does not support different brightness levels, this If the LED does not support different brightness levels, this
should be 1. should be 1.
What: /sys/class/leds/<led>/brightness_hw_changed
Date: January 2017
KernelVersion: 4.11
Description:
Last hardware set brightness level for this LED. Some LEDs
may be changed autonomously by hardware/firmware. Only LEDs
where this happens and the driver can detect this, will have
this file.
This file supports poll() to detect when the hardware changes
the brightness.
Reading this file will return the last brightness level set
by the hardware, this may be different from the current
brightness. Reading this file when no hw brightness change
event has happened will return an ENODATA error.
What: /sys/class/leds/<led>/trigger What: /sys/class/leds/<led>/trigger
Date: March 2006 Date: March 2006
KernelVersion: 2.6.17 KernelVersion: 2.6.17
......
...@@ -62,18 +62,18 @@ Description: ...@@ -62,18 +62,18 @@ Description:
This value may be reset to 0 if the current protocol is altered. This value may be reset to 0 if the current protocol is altered.
What: /sys/class/rc/rcN/wakeup_protocols What: /sys/class/rc/rcN/wakeup_protocols
Date: Feb 2014 Date: Feb 2017
KernelVersion: 3.15 KernelVersion: 4.11
Contact: Mauro Carvalho Chehab <m.chehab@samsung.com> Contact: Mauro Carvalho Chehab <m.chehab@samsung.com>
Description: Description:
Reading this file returns a list of available protocols to use Reading this file returns a list of available protocols to use
for the wakeup filter, something like: for the wakeup filter, something like:
"rc5 rc6 nec jvc [sony]" "rc-5 nec nec-x rc-6-0 rc-6-6a-24 [rc-6-6a-32] rc-6-mce"
Note that protocol variants are listed, so "nec", "sony",
"rc-5", "rc-6" have their different bit length encodings
listed if available.
The enabled wakeup protocol is shown in [] brackets. The enabled wakeup protocol is shown in [] brackets.
Writing "+proto" will add a protocol to the list of enabled Only one protocol can be selected at a time.
wakeup protocols.
Writing "-proto" will remove a protocol from the list of enabled
wakeup protocols.
Writing "proto" will use "proto" for wakeup events. Writing "proto" will use "proto" for wakeup events.
Writing "none" will disable wakeup. Writing "none" will disable wakeup.
Write fails with EINVAL if an invalid protocol combination or Write fails with EINVAL if an invalid protocol combination or
......
What: /sys/devices/.../deferred_probe
Date: August 2016
Contact: Ben Hutchings <ben.hutchings@codethink.co.uk>
Description:
The /sys/devices/.../deferred_probe attribute is
present for all devices. If a driver detects during
probing a device that a related device is not yet
ready, it may defer probing of the first device. The
kernel will retry probing the first device after any
other device is successfully probed. This attribute
reads as 1 if probing of this device is currently
deferred, or 0 otherwise.
...@@ -138,3 +138,20 @@ Contact: Mauro Carvalho Chehab <m.chehab@samsung.com> ...@@ -138,3 +138,20 @@ Contact: Mauro Carvalho Chehab <m.chehab@samsung.com>
Description: This attribute file will display what type of memory is Description: This attribute file will display what type of memory is
currently on this csrow. Normally, either buffered or currently on this csrow. Normally, either buffered or
unbuffered memory (for example, Unbuffered-DDR3). unbuffered memory (for example, Unbuffered-DDR3).
What: /sys/devices/system/edac/mc/mc*/(dimm|rank)*/dimm_ce_count
Date: October 2016
Contact: linux-edac@vger.kernel.org
Description: This attribute file displays the total count of correctable
errors that have occurred on this DIMM. This count is very important
to examine. CEs provide early indications that a DIMM is beginning
to fail. This count field should be monitored for non-zero values
and report such information to the system administrator.
What: /sys/devices/system/edac/mc/mc*/(dimm|rank)*/dimm_ue_count
Date: October 2016
Contact: linux-edac@vger.kernel.org
Description: This attribute file displays the total count of uncorrectable
errors that have occurred on this DIMM. If panic_on_ue is set, this
counter will not have a chance to increment, since EDAC will panic the
system
...@@ -12,3 +12,15 @@ Description: /sys/kernel/iommu_groups/ contains a number of sub- ...@@ -12,3 +12,15 @@ Description: /sys/kernel/iommu_groups/ contains a number of sub-
file if the IOMMU driver has chosen to register a more file if the IOMMU driver has chosen to register a more
common name for the group. common name for the group.
Users: Users:
What: /sys/kernel/iommu_groups/reserved_regions
Date: January 2017
KernelVersion: v4.11
Contact: Eric Auger <eric.auger@redhat.com>
Description: /sys/kernel/iommu_groups/reserved_regions list IOVA
regions that are reserved. Not necessarily all
reserved regions are listed. This is typically used to
output direct-mapped, MSI, non mappable regions. Each
region is described on a single line: the 1st field is
the base IOVA, the second is the end IOVA and the third
field describes the type of the region.
...@@ -2,7 +2,7 @@ What: /sys/devices/platform/hidma-*/chid ...@@ -2,7 +2,7 @@ What: /sys/devices/platform/hidma-*/chid
/sys/devices/platform/QCOM8061:*/chid /sys/devices/platform/QCOM8061:*/chid
Date: Dec 2015 Date: Dec 2015
KernelVersion: 4.4 KernelVersion: 4.4
Contact: "Sinan Kaya <okaya@cudeaurora.org>" Contact: "Sinan Kaya <okaya@codeaurora.org>"
Description: Description:
Contains the ID of the channel within the HIDMA instance. Contains the ID of the channel within the HIDMA instance.
It is used to associate a given HIDMA channel with the It is used to associate a given HIDMA channel with the
......
...@@ -2,7 +2,7 @@ What: /sys/devices/platform/hidma-mgmt*/chanops/chan*/priority ...@@ -2,7 +2,7 @@ What: /sys/devices/platform/hidma-mgmt*/chanops/chan*/priority
/sys/devices/platform/QCOM8060:*/chanops/chan*/priority /sys/devices/platform/QCOM8060:*/chanops/chan*/priority
Date: Nov 2015 Date: Nov 2015
KernelVersion: 4.4 KernelVersion: 4.4
Contact: "Sinan Kaya <okaya@cudeaurora.org>" Contact: "Sinan Kaya <okaya@codeaurora.org>"
Description: Description:
Contains either 0 or 1 and indicates if the DMA channel is a Contains either 0 or 1 and indicates if the DMA channel is a
low priority (0) or high priority (1) channel. low priority (0) or high priority (1) channel.
...@@ -11,7 +11,7 @@ What: /sys/devices/platform/hidma-mgmt*/chanops/chan*/weight ...@@ -11,7 +11,7 @@ What: /sys/devices/platform/hidma-mgmt*/chanops/chan*/weight
/sys/devices/platform/QCOM8060:*/chanops/chan*/weight /sys/devices/platform/QCOM8060:*/chanops/chan*/weight
Date: Nov 2015 Date: Nov 2015
KernelVersion: 4.4 KernelVersion: 4.4
Contact: "Sinan Kaya <okaya@cudeaurora.org>" Contact: "Sinan Kaya <okaya@codeaurora.org>"
Description: Description:
Contains 0..15 and indicates the weight of the channel among Contains 0..15 and indicates the weight of the channel among
equal priority channels during round robin scheduling. equal priority channels during round robin scheduling.
...@@ -20,7 +20,7 @@ What: /sys/devices/platform/hidma-mgmt*/chreset_timeout_cycles ...@@ -20,7 +20,7 @@ What: /sys/devices/platform/hidma-mgmt*/chreset_timeout_cycles
/sys/devices/platform/QCOM8060:*/chreset_timeout_cycles /sys/devices/platform/QCOM8060:*/chreset_timeout_cycles
Date: Nov 2015 Date: Nov 2015
KernelVersion: 4.4 KernelVersion: 4.4
Contact: "Sinan Kaya <okaya@cudeaurora.org>" Contact: "Sinan Kaya <okaya@codeaurora.org>"
Description: Description:
Contains the platform specific cycle value to wait after a Contains the platform specific cycle value to wait after a
reset command is issued. If the value is chosen too short, reset command is issued. If the value is chosen too short,
...@@ -32,7 +32,7 @@ What: /sys/devices/platform/hidma-mgmt*/dma_channels ...@@ -32,7 +32,7 @@ What: /sys/devices/platform/hidma-mgmt*/dma_channels
/sys/devices/platform/QCOM8060:*/dma_channels /sys/devices/platform/QCOM8060:*/dma_channels
Date: Nov 2015 Date: Nov 2015
KernelVersion: 4.4 KernelVersion: 4.4
Contact: "Sinan Kaya <okaya@cudeaurora.org>" Contact: "Sinan Kaya <okaya@codeaurora.org>"
Description: Description:
Contains the number of dma channels supported by one instance Contains the number of dma channels supported by one instance
of HIDMA hardware. The value may change from chip to chip. of HIDMA hardware. The value may change from chip to chip.
...@@ -41,7 +41,7 @@ What: /sys/devices/platform/hidma-mgmt*/hw_version_major ...@@ -41,7 +41,7 @@ What: /sys/devices/platform/hidma-mgmt*/hw_version_major
/sys/devices/platform/QCOM8060:*/hw_version_major /sys/devices/platform/QCOM8060:*/hw_version_major
Date: Nov 2015 Date: Nov 2015
KernelVersion: 4.4 KernelVersion: 4.4
Contact: "Sinan Kaya <okaya@cudeaurora.org>" Contact: "Sinan Kaya <okaya@codeaurora.org>"
Description: Description:
Version number major for the hardware. Version number major for the hardware.
...@@ -49,7 +49,7 @@ What: /sys/devices/platform/hidma-mgmt*/hw_version_minor ...@@ -49,7 +49,7 @@ What: /sys/devices/platform/hidma-mgmt*/hw_version_minor
/sys/devices/platform/QCOM8060:*/hw_version_minor /sys/devices/platform/QCOM8060:*/hw_version_minor
Date: Nov 2015 Date: Nov 2015
KernelVersion: 4.4 KernelVersion: 4.4
Contact: "Sinan Kaya <okaya@cudeaurora.org>" Contact: "Sinan Kaya <okaya@codeaurora.org>"
Description: Description:
Version number minor for the hardware. Version number minor for the hardware.
...@@ -57,7 +57,7 @@ What: /sys/devices/platform/hidma-mgmt*/max_rd_xactions ...@@ -57,7 +57,7 @@ What: /sys/devices/platform/hidma-mgmt*/max_rd_xactions
/sys/devices/platform/QCOM8060:*/max_rd_xactions /sys/devices/platform/QCOM8060:*/max_rd_xactions
Date: Nov 2015 Date: Nov 2015
KernelVersion: 4.4 KernelVersion: 4.4
Contact: "Sinan Kaya <okaya@cudeaurora.org>" Contact: "Sinan Kaya <okaya@codeaurora.org>"
Description: Description:
Contains a value between 0 and 31. Maximum number of Contains a value between 0 and 31. Maximum number of
read transactions that can be issued back to back. read transactions that can be issued back to back.
...@@ -69,7 +69,7 @@ What: /sys/devices/platform/hidma-mgmt*/max_read_request ...@@ -69,7 +69,7 @@ What: /sys/devices/platform/hidma-mgmt*/max_read_request
/sys/devices/platform/QCOM8060:*/max_read_request /sys/devices/platform/QCOM8060:*/max_read_request
Date: Nov 2015 Date: Nov 2015
KernelVersion: 4.4 KernelVersion: 4.4
Contact: "Sinan Kaya <okaya@cudeaurora.org>" Contact: "Sinan Kaya <okaya@codeaurora.org>"
Description: Description:
Size of each read request. The value needs to be a power Size of each read request. The value needs to be a power
of two and can be between 128 and 1024. of two and can be between 128 and 1024.
...@@ -78,7 +78,7 @@ What: /sys/devices/platform/hidma-mgmt*/max_wr_xactions ...@@ -78,7 +78,7 @@ What: /sys/devices/platform/hidma-mgmt*/max_wr_xactions
/sys/devices/platform/QCOM8060:*/max_wr_xactions /sys/devices/platform/QCOM8060:*/max_wr_xactions
Date: Nov 2015 Date: Nov 2015
KernelVersion: 4.4 KernelVersion: 4.4
Contact: "Sinan Kaya <okaya@cudeaurora.org>" Contact: "Sinan Kaya <okaya@codeaurora.org>"
Description: Description:
Contains a value between 0 and 31. Maximum number of Contains a value between 0 and 31. Maximum number of
write transactions that can be issued back to back. write transactions that can be issued back to back.
...@@ -91,7 +91,7 @@ What: /sys/devices/platform/hidma-mgmt*/max_write_request ...@@ -91,7 +91,7 @@ What: /sys/devices/platform/hidma-mgmt*/max_write_request
/sys/devices/platform/QCOM8060:*/max_write_request /sys/devices/platform/QCOM8060:*/max_write_request
Date: Nov 2015 Date: Nov 2015
KernelVersion: 4.4 KernelVersion: 4.4
Contact: "Sinan Kaya <okaya@cudeaurora.org>" Contact: "Sinan Kaya <okaya@codeaurora.org>"
Description: Description:
Size of each write request. The value needs to be a power Size of each write request. The value needs to be a power
of two and can be between 128 and 1024. of two and can be between 128 and 1024.
...@@ -143,3 +143,13 @@ So, this provides a way for drivers to avoid those error messages on calls ...@@ -143,3 +143,13 @@ So, this provides a way for drivers to avoid those error messages on calls
where allocation failures are not a problem, and shouldn't bother the logs. where allocation failures are not a problem, and shouldn't bother the logs.
NOTE: At the moment DMA_ATTR_NO_WARN is only implemented on PowerPC. NOTE: At the moment DMA_ATTR_NO_WARN is only implemented on PowerPC.
DMA_ATTR_PRIVILEGED
------------------------------
Some advanced peripherals such as remote processors and GPUs perform
accesses to DMA buffers in both privileged "supervisor" and unprivileged
"user" modes. This attribute is used to indicate to the DMA-mapping
subsystem that the buffer is fully accessible at the elevated privilege
level (and ideally inaccessible or at least read-only at the
lesser-privileged levels).
...@@ -11,7 +11,7 @@ DOCBOOKS := z8530book.xml \ ...@@ -11,7 +11,7 @@ DOCBOOKS := z8530book.xml \
writing_usb_driver.xml networking.xml \ writing_usb_driver.xml networking.xml \
kernel-api.xml filesystems.xml lsm.xml kgdb.xml \ kernel-api.xml filesystems.xml lsm.xml kgdb.xml \
gadget.xml libata.xml mtdnand.xml librs.xml rapidio.xml \ gadget.xml libata.xml mtdnand.xml librs.xml rapidio.xml \
genericirq.xml s390-drivers.xml uio-howto.xml scsi.xml \ genericirq.xml s390-drivers.xml scsi.xml \
sh.xml w1.xml \ sh.xml w1.xml \
writing_musb_glue_layer.xml writing_musb_glue_layer.xml
......
...@@ -115,12 +115,12 @@ ...@@ -115,12 +115,12 @@
</para> </para>
<para> <para>
If the architecture that you are using supports the kernel option If the architecture that you are using supports the kernel option
CONFIG_DEBUG_RODATA, you should consider turning it off. This CONFIG_STRICT_KERNEL_RWX, you should consider turning it off. This
option will prevent the use of software breakpoints because it option will prevent the use of software breakpoints because it
marks certain regions of the kernel's memory space as read-only. marks certain regions of the kernel's memory space as read-only.
If kgdb supports it for the architecture you are using, you can If kgdb supports it for the architecture you are using, you can
use hardware breakpoints if you desire to run with the use hardware breakpoints if you desire to run with the
CONFIG_DEBUG_RODATA option turned on, else you need to turn off CONFIG_STRICT_KERNEL_RWX option turned on, else you need to turn off
this option. this option.
</para> </para>
<para> <para>
...@@ -135,7 +135,7 @@ ...@@ -135,7 +135,7 @@
<para>Here is an example set of .config symbols to enable or <para>Here is an example set of .config symbols to enable or
disable for kgdb: disable for kgdb:
<itemizedlist> <itemizedlist>
<listitem><para># CONFIG_DEBUG_RODATA is not set</para></listitem> <listitem><para># CONFIG_STRICT_KERNEL_RWX is not set</para></listitem>
<listitem><para>CONFIG_FRAME_POINTER=y</para></listitem> <listitem><para>CONFIG_FRAME_POINTER=y</para></listitem>
<listitem><para>CONFIG_KGDB=y</para></listitem> <listitem><para>CONFIG_KGDB=y</para></listitem>
<listitem><para>CONFIG_KGDB_SERIAL_CONSOLE=y</para></listitem> <listitem><para>CONFIG_KGDB_SERIAL_CONSOLE=y</para></listitem>
...@@ -166,7 +166,7 @@ ...@@ -166,7 +166,7 @@
</para> </para>
<para>Here is an example set of .config symbols to enable/disable kdb: <para>Here is an example set of .config symbols to enable/disable kdb:
<itemizedlist> <itemizedlist>
<listitem><para># CONFIG_DEBUG_RODATA is not set</para></listitem> <listitem><para># CONFIG_STRICT_KERNEL_RWX is not set</para></listitem>
<listitem><para>CONFIG_FRAME_POINTER=y</para></listitem> <listitem><para>CONFIG_FRAME_POINTER=y</para></listitem>
<listitem><para>CONFIG_KGDB=y</para></listitem> <listitem><para>CONFIG_KGDB=y</para></listitem>
<listitem><para>CONFIG_KGDB_SERIAL_CONSOLE=y</para></listitem> <listitem><para>CONFIG_KGDB_SERIAL_CONSOLE=y</para></listitem>
......
...@@ -1020,7 +1020,7 @@ and other resources, etc. ...@@ -1020,7 +1020,7 @@ and other resources, etc.
</itemizedlist> </itemizedlist>
<para> <para>
Of errors detected as above, the followings are not ATA/ATAPI Of errors detected as above, the following are not ATA/ATAPI
device errors but ATA bus errors and should be handled device errors but ATA bus errors and should be handled
according to <xref linkend="excatATAbusErr"/>. according to <xref linkend="excatATAbusErr"/>.
</para> </para>
......
此差异已折叠。
...@@ -257,7 +257,7 @@ and tell you when they come and go. ...@@ -257,7 +257,7 @@ and tell you when they come and go.
Creating the User Creating the User
To user the message handler, you must first create a user using To use the message handler, you must first create a user using
ipmi_create_user. The interface number specifies which SMI you want ipmi_create_user. The interface number specifies which SMI you want
to connect to, and you must supply callback functions to be called to connect to, and you must supply callback functions to be called
when data comes in. The callback function can run at interrupt level, when data comes in. The callback function can run at interrupt level,
......
...@@ -162,8 +162,6 @@ The following old APIs to enable and disable MSI or MSI-X interrupts should ...@@ -162,8 +162,6 @@ The following old APIs to enable and disable MSI or MSI-X interrupts should
not be used in new code: not be used in new code:
pci_enable_msi() /* deprecated */ pci_enable_msi() /* deprecated */
pci_enable_msi_range() /* deprecated */
pci_enable_msi_exact() /* deprecated */
pci_disable_msi() /* deprecated */ pci_disable_msi() /* deprecated */
pci_enable_msix_range() /* deprecated */ pci_enable_msix_range() /* deprecated */
pci_enable_msix_exact() /* deprecated */ pci_enable_msix_exact() /* deprecated */
...@@ -268,5 +266,5 @@ or disabled (0). If 0 is found in any of the msi_bus files belonging ...@@ -268,5 +266,5 @@ 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.
It is also worth checking the device driver to see whether it supports MSIs. It is also worth checking the device driver to see whether it supports MSIs.
For example, it may contain calls to pci_enable_msi_range() or For example, it may contain calls to pci_irq_alloc_vectors() with the
pci_enable_msix_range(). PCI_IRQ_MSI or PCI_IRQ_MSIX flags.
...@@ -161,21 +161,13 @@ Since all service drivers of a PCI-PCI Bridge Port device are ...@@ -161,21 +161,13 @@ Since all service drivers of a PCI-PCI Bridge Port device are
allowed to run simultaneously, below lists a few of possible resource allowed to run simultaneously, below lists a few of possible resource
conflicts with proposed solutions. conflicts with proposed solutions.
6.1 MSI Vector Resource 6.1 MSI and MSI-X Vector Resource
The MSI capability structure enables a device software driver to call Once MSI or MSI-X interrupts are enabled on a device, it stays in this
pci_enable_msi to request MSI based interrupts. Once MSI interrupts mode until they are disabled again. Since service drivers of the same
are enabled on a device, it stays in this mode until a device driver PCI-PCI Bridge port share the same physical device, if an individual
calls pci_disable_msi to disable MSI interrupts and revert back to service driver enables or disables MSI/MSI-X mode it may result
INTx emulation mode. Since service drivers of the same PCI-PCI Bridge unpredictable behavior.
port share the same physical device, if an individual service driver
calls pci_enable_msi/pci_disable_msi it may result unpredictable
behavior. For example, two service drivers run simultaneously on the
same physical Root Port. Both service drivers call pci_enable_msi to
request MSI based interrupts. A service driver may not know whether
any other service drivers have run on this Root Port. If either one
of them calls pci_disable_msi, it puts the other service driver
in a wrong interrupt mode.
To avoid this situation all service drivers are not permitted to To avoid this situation all service drivers are not permitted to
switch interrupt mode on its device. The PCI Express Port Bus driver switch interrupt mode on its device. The PCI Express Port Bus driver
...@@ -187,17 +179,6 @@ driver. Service drivers should use (struct pcie_device*)dev->irq to ...@@ -187,17 +179,6 @@ driver. Service drivers should use (struct pcie_device*)dev->irq to
call request_irq/free_irq. In addition, the interrupt mode is stored call request_irq/free_irq. In addition, the interrupt mode is stored
in the field interrupt_mode of struct pcie_device. in the field interrupt_mode of struct pcie_device.
6.2 MSI-X Vector Resources
Similar to the MSI a device driver for an MSI-X capable device can
call pci_enable_msix to request MSI-X interrupts. All service drivers
are not permitted to switch interrupt mode on its device. The PCI
Express Port Bus driver is responsible for determining the interrupt
mode and this should be transparent to service drivers. Any attempt
by service driver to call pci_enable_msix/pci_disable_msix may
result unpredictable behavior. Service drivers should use
(struct pcie_device*)dev->irq and call request_irq/free_irq.
6.3 PCI Memory/IO Mapped Regions 6.3 PCI Memory/IO Mapped Regions
Service drivers for PCI Express Power Management (PME), Advanced Service drivers for PCI Express Power Management (PME), Advanced
......
...@@ -78,7 +78,6 @@ struct pci_error_handlers ...@@ -78,7 +78,6 @@ struct pci_error_handlers
{ {
int (*error_detected)(struct pci_dev *dev, enum pci_channel_state); int (*error_detected)(struct pci_dev *dev, enum pci_channel_state);
int (*mmio_enabled)(struct pci_dev *dev); int (*mmio_enabled)(struct pci_dev *dev);
int (*link_reset)(struct pci_dev *dev);
int (*slot_reset)(struct pci_dev *dev); int (*slot_reset)(struct pci_dev *dev);
void (*resume)(struct pci_dev *dev); void (*resume)(struct pci_dev *dev);
}; };
...@@ -104,8 +103,7 @@ if it implements any, it must implement error_detected(). If a callback ...@@ -104,8 +103,7 @@ if it implements any, it must implement error_detected(). If a callback
is not implemented, the corresponding feature is considered unsupported. is not implemented, the corresponding feature is considered unsupported.
For example, if mmio_enabled() and resume() aren't there, then it For example, if mmio_enabled() and resume() aren't there, then it
is assumed that the driver is not doing any direct recovery and requires is assumed that the driver is not doing any direct recovery and requires
a slot reset. If link_reset() is not implemented, the card is assumed to a slot reset. Typically a driver will want to know about
not care about link resets. Typically a driver will want to know about
a slot_reset(). a slot_reset().
The actual steps taken by a platform to recover from a PCI error The actual steps taken by a platform to recover from a PCI error
...@@ -232,25 +230,9 @@ proceeds to STEP 4 (Slot Reset) ...@@ -232,25 +230,9 @@ proceeds to STEP 4 (Slot Reset)
STEP 3: Link Reset STEP 3: Link Reset
------------------ ------------------
The platform resets the link, and then calls the link_reset() callback The platform resets the link. This is a PCI-Express specific step
on all affected device drivers. This is a PCI-Express specific state
and is done whenever a non-fatal error has been detected that can be and is done whenever a non-fatal error has been detected that can be
"solved" by resetting the link. This call informs the driver of the "solved" by resetting the link.
reset and the driver should check to see if the device appears to be
in working condition.
The driver is not supposed to restart normal driver I/O operations
at this point. It should limit itself to "probing" the device to
check its recoverability status. If all is right, then the platform
will call resume() once all drivers have ack'd link_reset().
Result codes:
(identical to STEP 3 (MMIO Enabled)
The platform then proceeds to either STEP 4 (Slot Reset) or STEP 5
(Resume Operations).
>>> The current powerpc implementation does not implement this callback.
STEP 4: Slot Reset STEP 4: Slot Reset
------------------ ------------------
......
...@@ -382,18 +382,18 @@ The fundamental difference between MSI and MSI-X is how multiple ...@@ -382,18 +382,18 @@ The fundamental difference between MSI and MSI-X is how multiple
"vectors" get allocated. MSI requires contiguous blocks of vectors "vectors" get allocated. MSI requires contiguous blocks of vectors
while MSI-X can allocate several individual ones. while MSI-X can allocate several individual ones.
MSI capability can be enabled by calling pci_enable_msi() or MSI capability can be enabled by calling pci_alloc_irq_vectors() with the
pci_enable_msix() before calling request_irq(). This causes PCI_IRQ_MSI and/or PCI_IRQ_MSIX flags before calling request_irq(). This
the PCI support to program CPU vector data into the PCI device causes the PCI support to program CPU vector data into the PCI device
capability registers. capability registers. Many architectures, chip-sets, or BIOSes do NOT
support MSI or MSI-X and a call to pci_alloc_irq_vectors with just
If your PCI device supports both, try to enable MSI-X first. the PCI_IRQ_MSI and PCI_IRQ_MSIX flags will fail, so try to always
Only one can be enabled at a time. Many architectures, chip-sets, specify PCI_IRQ_LEGACY as well.
or BIOSes do NOT support MSI or MSI-X and the call to pci_enable_msi/msix
will fail. This is important to note since many drivers have Drivers that have different interrupt handlers for MSI/MSI-X and
two (or more) interrupt handlers: one for MSI/MSI-X and another for IRQs. legacy INTx should chose the right one based on the msi_enabled
They choose which handler to register with request_irq() based on the and msix_enabled flags in the pci_dev structure after calling
return value from pci_enable_msi/msix(). pci_alloc_irq_vectors.
There are (at least) two really good reasons for using MSI: There are (at least) two really good reasons for using MSI:
1) MSI is an exclusive interrupt vector by definition. 1) MSI is an exclusive interrupt vector by definition.
......
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
<head><title>A Tour Through TREE_RCU's Data Structures [LWN.net]</title> <head><title>A Tour Through TREE_RCU's Data Structures [LWN.net]</title>
<meta HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1"> <meta HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
<p>January 27, 2016</p> <p>December 18, 2016</p>
<p>This article was contributed by Paul E.&nbsp;McKenney</p> <p>This article was contributed by Paul E.&nbsp;McKenney</p>
<h3>Introduction</h3> <h3>Introduction</h3>
...@@ -31,9 +31,6 @@ to each other. ...@@ -31,9 +31,6 @@ to each other.
Accessor Functions</a> Accessor Functions</a>
</ol> </ol>
At the end we have the
<a href="#Answers to Quick Quizzes">answers to the quick quizzes</a>.
<h3><a name="Data-Structure Relationships">Data-Structure Relationships</a></h3> <h3><a name="Data-Structure Relationships">Data-Structure Relationships</a></h3>
<p>RCU is for all intents and purposes a large state machine, and its <p>RCU is for all intents and purposes a large state machine, and its
......
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="490.05093"
height="125.78741"
id="svg2"
version="1.1"
inkscape:version="0.48.4 r9939"
sodipodi:docname="Funnel0.svg">
<defs
id="defs4">
<marker
inkscape:stockid="Arrow2Lend"
orient="auto"
refY="0"
refX="0"
id="Arrow2Lend"
style="overflow:visible">
<path
id="path3792"
style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
inkscape:connector-curvature="0" />
</marker>
<marker
inkscape:stockid="Arrow2Lstart"
orient="auto"
refY="0"
refX="0"
id="Arrow2Lstart"
style="overflow:visible">
<path
id="path3789"
style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
transform="matrix(1.1,0,0,1.1,1.1,0)"
inkscape:connector-curvature="0" />
</marker>
<marker
inkscape:stockid="Arrow2Lstart"
orient="auto"
refY="0"
refX="0"
id="Arrow2Lstart-4"
style="overflow:visible">
<path
id="path3789-9"
style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
transform="matrix(1.1,0,0,1.1,1.1,0)"
inkscape:connector-curvature="0" />
</marker>
<marker
inkscape:stockid="Arrow2Lend"
orient="auto"
refY="0"
refX="0"
id="Arrow2Lend-4"
style="overflow:visible">
<path
id="path3792-4"
style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
inkscape:connector-curvature="0" />
</marker>
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="1.3670394"
inkscape:cx="201.06495"
inkscape:cy="-86.548414"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="false"
inkscape:window-width="1351"
inkscape:window-height="836"
inkscape:window-x="171"
inkscape:window-y="279"
inkscape:window-maximized="0"
fit-margin-top="5"
fit-margin-left="5"
fit-margin-right="5"
fit-margin-bottom="5" />
<metadata
id="metadata7">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title />
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(-117.08462,-249.92053)">
<flowRoot
xml:space="preserve"
id="flowRoot2985"
style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Symbol;-inkscape-font-specification:Symbol"><flowRegion
id="flowRegion2987"><rect
id="rect2989"
width="82.85714"
height="11.428572"
x="240"
y="492.36218" /></flowRegion><flowPara
id="flowPara2991" /></flowRoot> <text
xml:space="preserve"
style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Symbol;-inkscape-font-specification:Symbol"
x="362.371"
y="262.51819"
id="text4441"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan4443"
x="362.371"
y="262.51819">-&gt;expedited_sequence: 0</tspan></text>
<rect
style="fill:none;stroke:#000000;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
id="rect3101"
width="43.158947"
height="26.33428"
x="253.55223"
y="275.07489" />
<rect
style="fill:#ff8282;stroke:#000000;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;fill-opacity:1"
id="rect3101-3"
width="43.158947"
height="26.33428"
x="297.04141"
y="275.07489" />
<rect
style="fill:#ff8282;stroke:#000000;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;fill-opacity:1"
id="rect3101-3-6"
width="43.158947"
height="26.33428"
x="427.509"
y="275.07489" />
<rect
style="fill:#ff8282;stroke:#000000;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;fill-opacity:1"
id="rect3101-3-6-7"
width="43.158947"
height="26.33428"
x="384.01981"
y="275.07489" />
<rect
style="fill:#ff8282;stroke:#000000;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;fill-opacity:1"
id="rect3101-3-6-7-5"
width="43.158947"
height="26.33428"
x="340.53061"
y="275.07489" />
<g
id="g3997"
transform="translate(-0.87295532,0)">
<rect
y="343.37366"
x="123.95757"
height="26.33428"
width="43.158947"
id="rect3101-35"
style="fill:none;stroke:#000000;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
<rect
y="343.37366"
x="167.44673"
height="26.33428"
width="43.158947"
id="rect3101-3-62"
style="fill:#ff8282;stroke:#000000;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;fill-opacity:1" />
<rect
y="343.37366"
x="297.91437"
height="26.33428"
width="43.158947"
id="rect3101-3-6-9"
style="fill:#ff8282;stroke:#000000;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;fill-opacity:1" />
<rect
y="343.37366"
x="254.42516"
height="26.33428"
width="43.158947"
id="rect3101-3-6-7-1"
style="fill:#ff8282;stroke:#000000;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;fill-opacity:1" />
<rect
y="343.37366"
x="210.93593"
height="26.33428"
width="43.158947"
id="rect3101-3-6-7-5-2"
style="fill:#ff8282;stroke:#000000;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;fill-opacity:1" />
<text
xml:space="preserve"
style="font-size:20px;font-style:normal;font-weight:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
x="145.45404"
y="360.25174"
id="text3013"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan3015"
x="145.45404"
y="360.25174"
style="font-size:10px">:0</tspan></text>
</g>
<g
id="g3997-7"
transform="translate(260.06223,0)">
<rect
y="343.37366"
x="123.95757"
height="26.33428"
width="43.158947"
id="rect3101-35-0"
style="fill:none;stroke:#000000;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
<rect
y="343.37366"
x="167.44673"
height="26.33428"
width="43.158947"
id="rect3101-3-62-9"
style="fill:#ff8282;stroke:#000000;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;fill-opacity:1" />
<rect
y="343.37366"
x="297.91437"
height="26.33428"
width="43.158947"
id="rect3101-3-6-9-3"
style="fill:#ff8282;stroke:#000000;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;fill-opacity:1" />
<rect
y="343.37366"
x="254.42516"
height="26.33428"
width="43.158947"
id="rect3101-3-6-7-1-6"
style="fill:#ff8282;stroke:#000000;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;fill-opacity:1" />
<rect
y="343.37366"
x="210.93593"
height="26.33428"
width="43.158947"
id="rect3101-3-6-7-5-2-0"
style="fill:#ff8282;stroke:#000000;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;fill-opacity:1" />
<text
xml:space="preserve"
style="font-size:20px;font-style:normal;font-weight:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
x="145.45404"
y="360.25174"
id="text3013-3"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan3015-6"
x="145.45404"
y="360.25174"
style="font-size:10px">:0</tspan></text>
</g>
</g>
</svg>
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="490.05093"
height="125.78741"
id="svg2"
version="1.1"
inkscape:version="0.48.4 r9939"
sodipodi:docname="Funnel1.svg">
<defs
id="defs4">
<marker
inkscape:stockid="Arrow2Lend"
orient="auto"
refY="0"
refX="0"
id="Arrow2Lend"
style="overflow:visible">
<path
id="path3792"
style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
inkscape:connector-curvature="0" />
</marker>
<marker
inkscape:stockid="Arrow2Lstart"
orient="auto"
refY="0"
refX="0"
id="Arrow2Lstart"
style="overflow:visible">
<path
id="path3789"
style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
transform="matrix(1.1,0,0,1.1,1.1,0)"
inkscape:connector-curvature="0" />
</marker>
<marker
inkscape:stockid="Arrow2Lstart"
orient="auto"
refY="0"
refX="0"
id="Arrow2Lstart-4"
style="overflow:visible">
<path
id="path3789-9"
style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
transform="matrix(1.1,0,0,1.1,1.1,0)"
inkscape:connector-curvature="0" />
</marker>
<marker
inkscape:stockid="Arrow2Lend"
orient="auto"
refY="0"
refX="0"
id="Arrow2Lend-4"
style="overflow:visible">
<path
id="path3792-4"
style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
inkscape:connector-curvature="0" />
</marker>
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="1.3670394"
inkscape:cx="201.06495"
inkscape:cy="-86.548414"
inkscape:document-units="px"
inkscape:current-layer="g3997-7"
showgrid="false"
inkscape:window-width="1351"
inkscape:window-height="836"
inkscape:window-x="363"
inkscape:window-y="336"
inkscape:window-maximized="0"
fit-margin-top="5"
fit-margin-left="5"
fit-margin-right="5"
fit-margin-bottom="5" />
<metadata
id="metadata7">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title />
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(-117.08462,-249.92053)">
<flowRoot
xml:space="preserve"
id="flowRoot2985"
style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Symbol;-inkscape-font-specification:Symbol"><flowRegion
id="flowRegion2987"><rect
id="rect2989"
width="82.85714"
height="11.428572"
x="240"
y="492.36218" /></flowRegion><flowPara
id="flowPara2991" /></flowRoot> <text
xml:space="preserve"
style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Symbol;-inkscape-font-specification:Symbol"
x="362.371"
y="262.51819"
id="text4441"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan4443"
x="362.371"
y="262.51819">-&gt;expedited_sequence: 0</tspan></text>
<rect
style="fill:none;stroke:#000000;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
id="rect3101"
width="43.158947"
height="26.33428"
x="253.55223"
y="275.07489" />
<rect
style="fill:#ff8282;stroke:#000000;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;fill-opacity:1"
id="rect3101-3"
width="43.158947"
height="26.33428"
x="297.04141"
y="275.07489" />
<rect
style="fill:#ff8282;stroke:#000000;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;fill-opacity:1"
id="rect3101-3-6"
width="43.158947"
height="26.33428"
x="427.509"
y="275.07489" />
<rect
style="fill:#ff8282;stroke:#000000;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;fill-opacity:1"
id="rect3101-3-6-7"
width="43.158947"
height="26.33428"
x="384.01981"
y="275.07489" />
<rect
style="fill:#ff8282;stroke:#000000;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;fill-opacity:1"
id="rect3101-3-6-7-5"
width="43.158947"
height="26.33428"
x="340.53061"
y="275.07489" />
<g
id="g3997"
transform="translate(-0.87295532,0)">
<rect
y="343.37366"
x="123.95757"
height="26.33428"
width="43.158947"
id="rect3101-35"
style="fill:none;stroke:#000000;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
<rect
y="343.37366"
x="167.44673"
height="26.33428"
width="43.158947"
id="rect3101-3-62"
style="fill:#ff8282;stroke:#000000;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;fill-opacity:1" />
<rect
y="343.37366"
x="297.91437"
height="26.33428"
width="43.158947"
id="rect3101-3-6-9"
style="fill:#ff8282;stroke:#000000;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;fill-opacity:1" />
<rect
y="343.37366"
x="254.42516"
height="26.33428"
width="43.158947"
id="rect3101-3-6-7-1"
style="fill:#ff8282;stroke:#000000;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;fill-opacity:1" />
<rect
y="343.37366"
x="210.93593"
height="26.33428"
width="43.158947"
id="rect3101-3-6-7-5-2"
style="fill:#ff8282;stroke:#000000;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;fill-opacity:1" />
<text
xml:space="preserve"
style="font-size:20px;font-style:normal;font-weight:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
x="146.00092"
y="360.25174"
id="text3013"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan3015"
x="146.00092"
y="360.25174"
style="font-size:10px">A:2</tspan></text>
</g>
<g
id="g3997-7"
transform="translate(260.06223,0)">
<rect
y="343.37366"
x="123.95757"
height="26.33428"
width="43.158947"
id="rect3101-35-0"
style="fill:none;stroke:#000000;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
<rect
y="343.37366"
x="167.44673"
height="26.33428"
width="43.158947"
id="rect3101-3-62-9"
style="fill:#ff8282;stroke:#000000;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;fill-opacity:1" />
<rect
y="343.37366"
x="297.91437"
height="26.33428"
width="43.158947"
id="rect3101-3-6-9-3"
style="fill:#ff8282;stroke:#000000;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;fill-opacity:1" />
<rect
y="343.37366"
x="254.42516"
height="26.33428"
width="43.158947"
id="rect3101-3-6-7-1-6"
style="fill:#ff8282;stroke:#000000;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;fill-opacity:1" />
<rect
y="343.37366"
x="210.93593"
height="26.33428"
width="43.158947"
id="rect3101-3-6-7-5-2-0"
style="fill:#ff8282;stroke:#000000;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;fill-opacity:1" />
<text
xml:space="preserve"
style="font-size:20px;font-style:normal;font-weight:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
x="145.54926"
y="360.25174"
id="text3013-3"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan3015-6"
x="145.54926"
y="360.25174"
style="font-size:10px">B:2</tspan></text>
</g>
</g>
</svg>
...@@ -1480,7 +1480,7 @@ speed-of-light delays if nothing else. ...@@ -1480,7 +1480,7 @@ speed-of-light delays if nothing else.
<p> <p>
Furthermore, uncertainty about external state is inherent in many cases. Furthermore, uncertainty about external state is inherent in many cases.
For example, a pair of veternarians might use heartbeat to determine For example, a pair of veterinarians might use heartbeat to determine
whether or not a given cat was alive. whether or not a given cat was alive.
But how long should they wait after the last heartbeat to decide that But how long should they wait after the last heartbeat to decide that
the cat is in fact dead? the cat is in fact dead?
...@@ -1489,9 +1489,9 @@ mean that a relaxed cat would be considered to cycle between death ...@@ -1489,9 +1489,9 @@ mean that a relaxed cat would be considered to cycle between death
and life more than 100 times per minute. and life more than 100 times per minute.
Moreover, just as with human beings, a cat's heart might stop for Moreover, just as with human beings, a cat's heart might stop for
some period of time, so the exact wait period is a judgment call. some period of time, so the exact wait period is a judgment call.
One of our pair of veternarians might wait 30 seconds before pronouncing One of our pair of veterinarians might wait 30 seconds before pronouncing
the cat dead, while the other might insist on waiting a full minute. the cat dead, while the other might insist on waiting a full minute.
The two veternarians would then disagree on the state of the cat during The two veterinarians would then disagree on the state of the cat during
the final 30 seconds of the minute following the last heartbeat. the final 30 seconds of the minute following the last heartbeat.
<p> <p>
...@@ -1945,7 +1945,7 @@ guard against mishaps and misuse: ...@@ -1945,7 +1945,7 @@ guard against mishaps and misuse:
<ol> <ol>
<li> It is all too easy to forget to use <tt>rcu_read_lock()</tt> <li> It is all too easy to forget to use <tt>rcu_read_lock()</tt>
everywhere that it is needed, so kernels built with everywhere that it is needed, so kernels built with
<tt>CONFIG_PROVE_RCU=y</tt> will spat if <tt>CONFIG_PROVE_RCU=y</tt> will splat if
<tt>rcu_dereference()</tt> is used outside of an <tt>rcu_dereference()</tt> is used outside of an
RCU read-side critical section. RCU read-side critical section.
Update-side code can use <tt>rcu_dereference_protected()</tt>, Update-side code can use <tt>rcu_dereference_protected()</tt>,
...@@ -2421,7 +2421,7 @@ However, there are some restrictions on the code placed within ...@@ -2421,7 +2421,7 @@ However, there are some restrictions on the code placed within
<li> Blocking is prohibited. <li> Blocking is prohibited.
In practice, this is not a serious restriction given that idle In practice, this is not a serious restriction given that idle
tasks are prohibited from blocking to begin with. tasks are prohibited from blocking to begin with.
<li> Although nesting <tt>RCU_NONIDLE()</tt> is permited, they cannot <li> Although nesting <tt>RCU_NONIDLE()</tt> is permitted, they cannot
nest indefinitely deeply. nest indefinitely deeply.
However, given that they can be nested on the order of a million However, given that they can be nested on the order of a million
deep, even on 32-bit systems, this should not be a serious deep, even on 32-bit systems, this should not be a serious
...@@ -2885,7 +2885,7 @@ APIs for defining and initializing <tt>srcu_struct</tt> structures. ...@@ -2885,7 +2885,7 @@ APIs for defining and initializing <tt>srcu_struct</tt> structures.
<h3><a name="Tasks RCU">Tasks RCU</a></h3> <h3><a name="Tasks RCU">Tasks RCU</a></h3>
<p> <p>
Some forms of tracing use &ldquo;tramopolines&rdquo; to handle the Some forms of tracing use &ldquo;trampolines&rdquo; to handle the
binary rewriting required to install different types of probes. binary rewriting required to install different types of probes.
It would be good to be able to free old trampolines, which sounds It would be good to be able to free old trampolines, which sounds
like a job for some form of RCU. like a job for some form of RCU.
......
...@@ -237,7 +237,7 @@ o "ktl" is the low-order 16 bits (in hexadecimal) of the count of ...@@ -237,7 +237,7 @@ o "ktl" is the low-order 16 bits (in hexadecimal) of the count of
The output of "cat rcu/rcu_preempt/rcuexp" looks as follows: The output of "cat rcu/rcu_preempt/rcuexp" looks as follows:
s=21872 wd1=0 wd2=0 wd3=5 n=0 enq=0 sc=21872 s=21872 wd1=0 wd2=0 wd3=5 enq=0 sc=21872
These fields are as follows: These fields are as follows:
...@@ -249,9 +249,6 @@ o "wd1", "wd2", and "wd3" are the number of times that an attempt ...@@ -249,9 +249,6 @@ o "wd1", "wd2", and "wd3" are the number of times that an attempt
completed an expedited grace period that satisfies the attempted completed an expedited grace period that satisfies the attempted
request. "Our work is done." request. "Our work is done."
o "n" is number of times that a concurrent CPU-hotplug operation
forced a fallback to a normal grace period.
o "enq" is the number of quiescent states still outstanding. o "enq" is the number of quiescent states still outstanding.
o "sc" is the number of times that the attempt to start a o "sc" is the number of times that the attempt to start a
......
...@@ -59,28 +59,20 @@ button driver uses the following 3 modes in order not to trigger issues. ...@@ -59,28 +59,20 @@ button driver uses the following 3 modes in order not to trigger issues.
If the userspace hasn't been prepared to ignore the unreliable "opened" If the userspace hasn't been prepared to ignore the unreliable "opened"
events and the unreliable initial state notification, Linux users can use events and the unreliable initial state notification, Linux users can use
the following kernel parameters to handle the possible issues: the following kernel parameters to handle the possible issues:
A. button.lid_init_state=method: A. button.lid_init_state=open:
When this option is specified, the ACPI button driver reports the
initial lid state using the returning value of the _LID control method
and whether the "opened"/"closed" events are paired fully relies on the
firmware implementation.
This option can be used to fix some platforms where the returning value
of the _LID control method is reliable but the initial lid state
notification is missing.
This option is the default behavior during the period the userspace
isn't ready to handle the buggy AML tables.
B. button.lid_init_state=open:
When this option is specified, the ACPI button driver always reports the When this option is specified, the ACPI button driver always reports the
initial lid state as "opened" and whether the "opened"/"closed" events initial lid state as "opened" and whether the "opened"/"closed" events
are paired fully relies on the firmware implementation. are paired fully relies on the firmware implementation.
This may fix some platforms where the returning value of the _LID This may fix some platforms where the returning value of the _LID
control method is not reliable and the initial lid state notification is control method is not reliable and the initial lid state notification is
missing. missing.
This option is the default behavior during the period the userspace
isn't ready to handle the buggy AML tables.
If the userspace has been prepared to ignore the unreliable "opened" events If the userspace has been prepared to ignore the unreliable "opened" events
and the unreliable initial state notification, Linux users should always and the unreliable initial state notification, Linux users should always
use the following kernel parameter: use the following kernel parameter:
C. button.lid_init_state=ignore: B. button.lid_init_state=ignore:
When this option is specified, the ACPI button driver never reports the When this option is specified, the ACPI button driver never reports the
initial lid state and there is a compensation mechanism implemented to initial lid state and there is a compensation mechanism implemented to
ensure that the reliable "closed" notifications can always be delievered ensure that the reliable "closed" notifications can always be delievered
......
...@@ -57,7 +57,7 @@ Note: To get the ACPI debug object output (Store (AAAA, Debug)), ...@@ -57,7 +57,7 @@ Note: To get the ACPI debug object output (Store (AAAA, Debug)),
3. undo your changes 3. undo your changes
The "undo" operation is not supported for a new inserted method The "undo" operation is not supported for a new inserted method
right now, i.e. we can not remove a method currently. right now, i.e. we can not remove a method currently.
For an overrided method, in order to undo your changes, please For an overridden method, in order to undo your changes, please
save a copy of the method original ASL code in step c) section 1, save a copy of the method original ASL code in step c) section 1,
and redo step c) ~ g) to override the method with the original one. and redo step c) ~ g) to override the method with the original one.
......
...@@ -152,7 +152,7 @@ tracing facility. ...@@ -152,7 +152,7 @@ tracing facility.
Users can enable/disable this debug tracing feature by executing Users can enable/disable this debug tracing feature by executing
the following command: the following command:
# echo string > /sys/module/acpi/parameters/trace_state # echo string > /sys/module/acpi/parameters/trace_state
Where "string" should be one of the followings: Where "string" should be one of the following:
"disable" "disable"
Disable the method tracing feature. Disable the method tracing feature.
"enable" "enable"
......
...@@ -725,3 +725,8 @@ These currently include: ...@@ -725,3 +725,8 @@ These currently include:
to 1. Setting this to 0 disables bypass accounting and to 1. Setting this to 0 disables bypass accounting and
requires preread stripes to wait until all full-width stripe- requires preread stripes to wait until all full-width stripe-
writes are complete. Valid values are 0 to stripe_cache_size. writes are complete. Valid values are 0 to stripe_cache_size.
journal_mode (currently raid5 only)
The cache mode for raid5. raid5 could include an extra disk for
caching. The mode can be "write-throuth" and "write-back". The
default is "write-through".
...@@ -81,7 +81,7 @@ That defines some categories of errors: ...@@ -81,7 +81,7 @@ That defines some categories of errors:
still run, eventually replacing the affected hardware by a hot spare, still run, eventually replacing the affected hardware by a hot spare,
if available. if available.
Also, when an error happens on an userspace process, it is also possible to Also, when an error happens on a userspace process, it is also possible to
kill such process and let userspace restart it. kill such process and let userspace restart it.
The mechanism for handling non-fatal errors is usually complex and may The mechanism for handling non-fatal errors is usually complex and may
...@@ -438,11 +438,13 @@ A typical EDAC system has the following structure under ...@@ -438,11 +438,13 @@ A typical EDAC system has the following structure under
│   │   ├── ce_count │   │   ├── ce_count
│   │   ├── ce_noinfo_count │   │   ├── ce_noinfo_count
│   │   ├── dimm0 │   │   ├── dimm0
│   │   │   ├── dimm_ce_count
│   │   │   ├── dimm_dev_type │   │   │   ├── dimm_dev_type
│   │   │   ├── dimm_edac_mode │   │   │   ├── dimm_edac_mode
│   │   │   ├── dimm_label │   │   │   ├── dimm_label
│   │   │   ├── dimm_location │   │   │   ├── dimm_location
│   │   │   ├── dimm_mem_type │   │   │   ├── dimm_mem_type
│   │   │   ├── dimm_ue_count
│   │   │   ├── size │   │   │   ├── size
│   │   │   └── uevent │   │   │   └── uevent
│   │   ├── max_location │   │   ├── max_location
...@@ -457,11 +459,13 @@ A typical EDAC system has the following structure under ...@@ -457,11 +459,13 @@ A typical EDAC system has the following structure under
│   │   ├── ce_count │   │   ├── ce_count
│   │   ├── ce_noinfo_count │   │   ├── ce_noinfo_count
│   │   ├── dimm0 │   │   ├── dimm0
│   │   │   ├── dimm_ce_count
│   │   │   ├── dimm_dev_type │   │   │   ├── dimm_dev_type
│   │   │   ├── dimm_edac_mode │   │   │   ├── dimm_edac_mode
│   │   │   ├── dimm_label │   │   │   ├── dimm_label
│   │   │   ├── dimm_location │   │   │   ├── dimm_location
│   │   │   ├── dimm_mem_type │   │   │   ├── dimm_mem_type
│   │   │   ├── dimm_ue_count
│   │   │   ├── size │   │   │   ├── size
│   │   │   └── uevent │   │   │   └── uevent
│   │   ├── max_location │   │   ├── max_location
...@@ -483,6 +487,22 @@ this ``X`` memory module: ...@@ -483,6 +487,22 @@ this ``X`` memory module:
This attribute file displays, in count of megabytes, the memory This attribute file displays, in count of megabytes, the memory
that this csrow contains. that this csrow contains.
- ``dimm_ue_count`` - Uncorrectable Errors count attribute file
This attribute file displays the total count of uncorrectable
errors that have occurred on this DIMM. If panic_on_ue is set
this counter will not have a chance to increment, since EDAC
will panic the system.
- ``dimm_ce_count`` - Correctable Errors count attribute file
This attribute file displays the total count of correctable
errors that have occurred on this DIMM. This count is very
important to examine. CEs provide early indications that a
DIMM is beginning to fail. This count field should be
monitored for non-zero values and report such information
to the system administrator.
- ``dimm_dev_type`` - Device type attribute file - ``dimm_dev_type`` - Device type attribute file
This attribute file will display what type of DRAM device is This attribute file will display what type of DRAM device is
......
...@@ -63,10 +63,18 @@ SunXi family ...@@ -63,10 +63,18 @@ SunXi family
+ User Manual + User Manual
http://dl.linux-sunxi.org/A33/A33%20user%20manual%20release%201.1.pdf http://dl.linux-sunxi.org/A33/A33%20user%20manual%20release%201.1.pdf
- Allwinner H2+ (sun8i)
+ No document available now, but is known to be working properly with
H3 drivers and memory map.
- Allwinner H3 (sun8i) - Allwinner H3 (sun8i)
+ Datasheet + Datasheet
http://dl.linux-sunxi.org/H3/Allwinner_H3_Datasheet_V1.0.pdf http://dl.linux-sunxi.org/H3/Allwinner_H3_Datasheet_V1.0.pdf
- Allwinner V3s (sun8i)
+ Datasheet
http://linux-sunxi.org/File:Allwinner_V3s_Datasheet_V1.0.pdf
* Quad ARM Cortex-A15, Quad ARM Cortex-A7 based SoCs * Quad ARM Cortex-A15, Quad ARM Cortex-A7 based SoCs
- Allwinner A80 - Allwinner A80
+ Datasheet + Datasheet
......
此差异已折叠。
...@@ -54,9 +54,9 @@ This is the hardware sector size of the device, in bytes. ...@@ -54,9 +54,9 @@ This is the hardware sector size of the device, in bytes.
io_poll (RW) io_poll (RW)
------------ ------------
When read, this file shows the total number of block IO polls and how When read, this file shows whether polling is enabled (1) or disabled
many returned success. Writing '0' to this file will disable polling (0). Writing '0' to this file will disable polling for this device.
for this device. Writing any non-zero value will enable this feature. Writing any non-zero value will enable this feature.
io_poll_delay (RW) io_poll_delay (RW)
------------------ ------------------
......
...@@ -17,7 +17,7 @@ driver and currently works well under standard IDE subsystem. Actually it's ...@@ -17,7 +17,7 @@ driver and currently works well under standard IDE subsystem. Actually it's
one chip SSD. IO mode is ATA-like custom mode for the host that doesn't have one chip SSD. IO mode is ATA-like custom mode for the host that doesn't have
IDE interface. IDE interface.
Followings are brief descriptions about IO mode. Following are brief descriptions about IO mode.
A. IO mode based on ATA protocol and uses some custom command. (read confirm, A. IO mode based on ATA protocol and uses some custom command. (read confirm,
write confirm) write confirm)
B. IO mode uses SRAM bus interface. B. IO mode uses SRAM bus interface.
......
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
...@@ -14,7 +14,7 @@ Asynchronous Message Digest API ...@@ -14,7 +14,7 @@ Asynchronous Message Digest API
:doc: Asynchronous Message Digest API :doc: Asynchronous Message Digest API
.. kernel-doc:: include/crypto/hash.h .. kernel-doc:: include/crypto/hash.h
:functions: crypto_alloc_ahash crypto_free_ahash crypto_ahash_init crypto_ahash_digestsize crypto_ahash_reqtfm crypto_ahash_reqsize crypto_ahash_setkey crypto_ahash_finup crypto_ahash_final crypto_ahash_digest crypto_ahash_export crypto_ahash_import :functions: crypto_alloc_ahash crypto_free_ahash crypto_ahash_init crypto_ahash_digestsize crypto_ahash_reqtfm crypto_ahash_reqsize crypto_ahash_statesize crypto_ahash_setkey crypto_ahash_finup crypto_ahash_final crypto_ahash_digest crypto_ahash_export crypto_ahash_import
Asynchronous Hash Request Handle Asynchronous Hash Request Handle
-------------------------------- --------------------------------
......
...@@ -59,4 +59,4 @@ Synchronous Block Cipher API - Deprecated ...@@ -59,4 +59,4 @@ Synchronous Block Cipher API - Deprecated
:doc: Synchronous Block Cipher API :doc: Synchronous Block Cipher API
.. kernel-doc:: include/linux/crypto.h .. kernel-doc:: include/linux/crypto.h
:functions: crypto_alloc_blkcipher rypto_free_blkcipher crypto_has_blkcipher crypto_blkcipher_name crypto_blkcipher_ivsize crypto_blkcipher_blocksize crypto_blkcipher_setkey crypto_blkcipher_encrypt crypto_blkcipher_encrypt_iv crypto_blkcipher_decrypt crypto_blkcipher_decrypt_iv crypto_blkcipher_set_iv crypto_blkcipher_get_iv :functions: crypto_alloc_blkcipher crypto_free_blkcipher crypto_has_blkcipher crypto_blkcipher_name crypto_blkcipher_ivsize crypto_blkcipher_blocksize crypto_blkcipher_setkey crypto_blkcipher_encrypt crypto_blkcipher_encrypt_iv crypto_blkcipher_decrypt crypto_blkcipher_decrypt_iv crypto_blkcipher_set_iv crypto_blkcipher_get_iv
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
文件模式从 100755 更改为 100644
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册