mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-04-29 02:19:54 -04:00
Merge tag 'v5.10-rc1' into regulator-5.10
Linux 5.10-rc1
This commit is contained in:
@@ -203,11 +203,13 @@ ForEachMacros:
|
||||
- 'for_each_matching_node'
|
||||
- 'for_each_matching_node_and_match'
|
||||
- 'for_each_member'
|
||||
- 'for_each_memblock'
|
||||
- 'for_each_mem_region'
|
||||
- 'for_each_memblock_type'
|
||||
- 'for_each_memcg_cache_index'
|
||||
- 'for_each_mem_pfn_range'
|
||||
- '__for_each_mem_range'
|
||||
- 'for_each_mem_range'
|
||||
- '__for_each_mem_range_rev'
|
||||
- 'for_each_mem_range_rev'
|
||||
- 'for_each_migratetype_order'
|
||||
- 'for_each_msi_entry'
|
||||
@@ -271,6 +273,7 @@ ForEachMacros:
|
||||
- 'for_each_registered_fb'
|
||||
- 'for_each_requested_gpio'
|
||||
- 'for_each_requested_gpio_in_range'
|
||||
- 'for_each_reserved_mem_range'
|
||||
- 'for_each_reserved_mem_region'
|
||||
- 'for_each_rtd_codec_dais'
|
||||
- 'for_each_rtd_codec_dais_rollback'
|
||||
@@ -426,6 +429,7 @@ ForEachMacros:
|
||||
- 'rbtree_postorder_for_each_entry_safe'
|
||||
- 'rdma_for_each_block'
|
||||
- 'rdma_for_each_port'
|
||||
- 'rdma_umem_for_each_dma_block'
|
||||
- 'resource_list_for_each_entry'
|
||||
- 'resource_list_for_each_entry_safe'
|
||||
- 'rhl_for_each_entry_rcu'
|
||||
|
||||
3
.gitignore
vendored
3
.gitignore
vendored
@@ -152,3 +152,6 @@ x509.genkey
|
||||
|
||||
# Clang's compilation database file
|
||||
/compile_commands.json
|
||||
|
||||
# Documentation toolchain
|
||||
sphinx_*/
|
||||
|
||||
11
.mailmap
11
.mailmap
@@ -41,7 +41,8 @@ Andrew Murray <amurray@thegoodpenguin.co.uk> <andrew.murray@arm.com>
|
||||
Andrew Vasquez <andrew.vasquez@qlogic.com>
|
||||
Andrey Ryabinin <ryabinin.a.a@gmail.com> <a.ryabinin@samsung.com>
|
||||
Andy Adamson <andros@citi.umich.edu>
|
||||
Antoine Tenart <antoine.tenart@free-electrons.com>
|
||||
Antoine Tenart <atenart@kernel.org> <antoine.tenart@bootlin.com>
|
||||
Antoine Tenart <atenart@kernel.org> <antoine.tenart@free-electrons.com>
|
||||
Antonio Ospite <ao2@ao2.it> <ao2@amarulasolutions.com>
|
||||
Archit Taneja <archit@ti.com>
|
||||
Ard Biesheuvel <ardb@kernel.org> <ard.biesheuvel@linaro.org>
|
||||
@@ -132,6 +133,7 @@ James Ketrenos <jketreno@io.(none)>
|
||||
Jan Glauber <jan.glauber@gmail.com> <jang@de.ibm.com>
|
||||
Jan Glauber <jan.glauber@gmail.com> <jang@linux.vnet.ibm.com>
|
||||
Jan Glauber <jan.glauber@gmail.com> <jglauber@cavium.com>
|
||||
Jarkko Sakkinen <jarkko@kernel.org> <jarkko.sakkinen@linux.intel.com>
|
||||
Jason Gunthorpe <jgg@ziepe.ca> <jgg@mellanox.com>
|
||||
Jason Gunthorpe <jgg@ziepe.ca> <jgg@nvidia.com>
|
||||
Jason Gunthorpe <jgg@ziepe.ca> <jgunthorpe@obsidianresearch.com>
|
||||
@@ -169,6 +171,10 @@ Juha Yrjola <juha.yrjola@solidboot.com>
|
||||
Julien Thierry <julien.thierry.kdev@gmail.com> <julien.thierry@arm.com>
|
||||
Kamil Konieczny <k.konieczny@samsung.com> <k.konieczny@partner.samsung.com>
|
||||
Kay Sievers <kay.sievers@vrfy.org>
|
||||
Kees Cook <keescook@chromium.org> <kees.cook@canonical.com>
|
||||
Kees Cook <keescook@chromium.org> <keescook@google.com>
|
||||
Kees Cook <keescook@chromium.org> <kees@outflux.net>
|
||||
Kees Cook <keescook@chromium.org> <kees@ubuntu.com>
|
||||
Kenneth W Chen <kenneth.w.chen@intel.com>
|
||||
Konstantin Khlebnikov <koct9i@gmail.com> <khlebnikov@yandex-team.ru>
|
||||
Konstantin Khlebnikov <koct9i@gmail.com> <k.khlebnikov@samsung.com>
|
||||
@@ -184,6 +190,7 @@ Leon Romanovsky <leon@kernel.org> <leonro@nvidia.com>
|
||||
Linas Vepstas <linas@austin.ibm.com>
|
||||
Linus Lüssing <linus.luessing@c0d3.blue> <linus.luessing@ascom.ch>
|
||||
Linus Lüssing <linus.luessing@c0d3.blue> <linus.luessing@web.de>
|
||||
<linux-hardening@vger.kernel.org> <kernel-hardening@lists.openwall.com>
|
||||
Li Yang <leoyang.li@nxp.com> <leoli@freescale.com>
|
||||
Li Yang <leoyang.li@nxp.com> <leo@zh-kernel.org>
|
||||
Lukasz Luba <lukasz.luba@arm.com> <l.luba@partner.samsung.com>
|
||||
@@ -191,6 +198,7 @@ Maciej W. Rozycki <macro@mips.com> <macro@imgtec.com>
|
||||
Marcin Nowakowski <marcin.nowakowski@mips.com> <marcin.nowakowski@imgtec.com>
|
||||
Marc Zyngier <maz@kernel.org> <marc.zyngier@arm.com>
|
||||
Mark Brown <broonie@sirena.org.uk>
|
||||
Mark Starovoytov <mstarovo@pm.me> <mstarovoitov@marvell.com>
|
||||
Mark Yao <markyao0591@gmail.com> <mark.yao@rock-chips.com>
|
||||
Martin Kepplinger <martink@posteo.de> <martin.kepplinger@ginzinger.com>
|
||||
Martin Kepplinger <martink@posteo.de> <martin.kepplinger@puri.sm>
|
||||
@@ -308,6 +316,7 @@ Tony Luck <tony.luck@intel.com>
|
||||
TripleX Chung <xxx.phy@gmail.com> <triplex@zh-kernel.org>
|
||||
TripleX Chung <xxx.phy@gmail.com> <zhongyu@18mail.cn>
|
||||
Tsuneo Yoshioka <Tsuneo.Yoshioka@f-secure.com>
|
||||
Tycho Andersen <tycho@tycho.pizza> <tycho@tycho.ws>
|
||||
Uwe Kleine-König <ukleinek@informatik.uni-freiburg.de>
|
||||
Uwe Kleine-König <ukl@pengutronix.de>
|
||||
Uwe Kleine-König <Uwe.Kleine-Koenig@digi.com>
|
||||
|
||||
8
CREDITS
8
CREDITS
@@ -191,6 +191,10 @@ N: Krishna Balasubramanian
|
||||
E: balasub@cis.ohio-state.edu
|
||||
D: Wrote SYS V IPC (part of standard kernel since 0.99.10)
|
||||
|
||||
B: Robert Baldyga
|
||||
E: r.baldyga@hackerion.com
|
||||
D: Samsung S3FWRN5 NCI NFC Controller
|
||||
|
||||
N: Chris Ball
|
||||
E: chris@printf.net
|
||||
D: Former maintainer of the MMC/SD/SDIO subsystem.
|
||||
@@ -1942,6 +1946,10 @@ S: Post Office Box 611311
|
||||
S: San Jose, California 95161-1311
|
||||
S: USA
|
||||
|
||||
N: Hartmut Knaack
|
||||
E: knaack.h@gmx.de
|
||||
D: IIO subsystem and drivers
|
||||
|
||||
N: Thorsten Knabe
|
||||
E: Thorsten Knabe <tek@rbg.informatik.tu-darmstadt.de>
|
||||
E: Thorsten Knabe <tek01@hrzpub.tu-darmstadt.de>
|
||||
|
||||
@@ -15,7 +15,7 @@ Description:
|
||||
actual protection), and Android and Linux distributions have been
|
||||
explicitly writing a "0" to /sys/fs/selinux/checkreqprot during
|
||||
initialization for some time. Support for setting checkreqprot to 1
|
||||
will be removed in a future kernel release, at which point the kernel
|
||||
will be removed no sooner than June 2021, at which point the kernel
|
||||
will always cease using checkreqprot internally and will always
|
||||
check the actual protections being applied upon mmap/mprotect calls.
|
||||
The checkreqprot selinuxfs node will remain for backward compatibility
|
||||
|
||||
21
Documentation/ABI/stable/sysfs-bus-mhi
Normal file
21
Documentation/ABI/stable/sysfs-bus-mhi
Normal file
@@ -0,0 +1,21 @@
|
||||
What: /sys/bus/mhi/devices/.../serialnumber
|
||||
Date: Sept 2020
|
||||
KernelVersion: 5.10
|
||||
Contact: Bhaumik Bhatt <bbhatt@codeaurora.org>
|
||||
Description: The file holds the serial number of the client device obtained
|
||||
using a BHI (Boot Host Interface) register read after at least
|
||||
one attempt to power up the device has been done. If read
|
||||
without having the device power on at least once, the file will
|
||||
read all 0's.
|
||||
Users: Any userspace application or clients interested in device info.
|
||||
|
||||
What: /sys/bus/mhi/devices/.../oem_pk_hash
|
||||
Date: Sept 2020
|
||||
KernelVersion: 5.10
|
||||
Contact: Bhaumik Bhatt <bbhatt@codeaurora.org>
|
||||
Description: The file holds the OEM PK Hash value of the endpoint device
|
||||
obtained using a BHI (Boot Host Interface) register read after
|
||||
at least one attempt to power up the device has been done. If
|
||||
read without having the device power on at least once, the file
|
||||
will read all 0's.
|
||||
Users: Any userspace application or clients interested in device info.
|
||||
@@ -258,23 +258,6 @@ Description:
|
||||
userspace ABI compatibility of umad & issm devices.
|
||||
|
||||
|
||||
What: /sys/class/infiniband_cm/ucmN/ibdev
|
||||
Date: Oct, 2005
|
||||
KernelVersion: v2.6.14
|
||||
Contact: linux-rdma@vger.kernel.org
|
||||
Description:
|
||||
(RO) Display Infiniband (IB) device name
|
||||
|
||||
|
||||
What: /sys/class/infiniband_cm/abi_version
|
||||
Date: Oct, 2005
|
||||
KernelVersion: v2.6.14
|
||||
Contact: linux-rdma@vger.kernel.org
|
||||
Description:
|
||||
(RO) Value is incremented if any changes are made that break
|
||||
userspace ABI compatibility of ucm devices.
|
||||
|
||||
|
||||
What: /sys/class/infiniband_verbs/uverbsN/ibdev
|
||||
What: /sys/class/infiniband_verbs/uverbsN/abi_version
|
||||
Date: Sept, 2005
|
||||
|
||||
@@ -116,6 +116,12 @@ Description: The maximum number of bandwidth tokens that may be in use at
|
||||
one time by operations that access low bandwidth memory in the
|
||||
device.
|
||||
|
||||
What: /sys/bus/dsa/devices/dsa<m>/cmd_status
|
||||
Date: Aug 28, 2020
|
||||
KernelVersion: 5.10.0
|
||||
Contact: dmaengine@vger.kernel.org
|
||||
Description: The last executed device administrative command's status/error.
|
||||
|
||||
What: /sys/bus/dsa/devices/wq<m>.<n>/group_id
|
||||
Date: Oct 25, 2019
|
||||
KernelVersion: 5.6.0
|
||||
@@ -170,6 +176,20 @@ Contact: dmaengine@vger.kernel.org
|
||||
Description: The number of entries in this work queue that may be filled
|
||||
via a limited portal.
|
||||
|
||||
What: /sys/bus/dsa/devices/wq<m>.<n>/max_transfer_size
|
||||
Date: Aug 28, 2020
|
||||
KernelVersion: 5.10.0
|
||||
Contact: dmaengine@vger.kernel.org
|
||||
Description: The max transfer sized for this workqueue. Cannot exceed device
|
||||
max transfer size. Configurable parameter.
|
||||
|
||||
What: /sys/bus/dsa/devices/wq<m>.<n>/max_batch_size
|
||||
Date: Aug 28, 2020
|
||||
KernelVersion: 5.10.0
|
||||
Contact: dmaengine@vger.kernel.org
|
||||
Description: The max batch size for this workqueue. Cannot exceed device
|
||||
max batch size. Configurable parameter.
|
||||
|
||||
What: /sys/bus/dsa/devices/engine<m>.<n>/group_id
|
||||
Date: Oct 25, 2019
|
||||
KernelVersion: 5.6.0
|
||||
|
||||
5
Documentation/ABI/stable/sysfs-kernel-notes
Normal file
5
Documentation/ABI/stable/sysfs-kernel-notes
Normal file
@@ -0,0 +1,5 @@
|
||||
What: /sys/kernel/notes
|
||||
Date: July 2009
|
||||
Contact: <linux-kernel@vger.kernel.org>
|
||||
Description: The /sys/kernel/notes file contains the binary representation
|
||||
of the running vmlinux's .notes section.
|
||||
15
Documentation/ABI/testing/sysfs-bus-dfl
Normal file
15
Documentation/ABI/testing/sysfs-bus-dfl
Normal file
@@ -0,0 +1,15 @@
|
||||
What: /sys/bus/dfl/devices/dfl_dev.X/type
|
||||
Date: Aug 2020
|
||||
KernelVersion: 5.10
|
||||
Contact: Xu Yilun <yilun.xu@intel.com>
|
||||
Description: Read-only. It returns type of DFL FIU of the device. Now DFL
|
||||
supports 2 FIU types, 0 for FME, 1 for PORT.
|
||||
Format: 0x%x
|
||||
|
||||
What: /sys/bus/dfl/devices/dfl_dev.X/feature_id
|
||||
Date: Aug 2020
|
||||
KernelVersion: 5.10
|
||||
Contact: Xu Yilun <yilun.xu@intel.com>
|
||||
Description: Read-only. It returns feature identifier local to its DFL FIU
|
||||
type.
|
||||
Format: 0x%x
|
||||
@@ -1,3 +1,28 @@
|
||||
What: /sys/bus/event_source/devices/hv_24x7/format
|
||||
Date: September 2020
|
||||
Contact: Linux on PowerPC Developer List <linuxppc-dev@lists.ozlabs.org>
|
||||
Description: Read-only. Attribute group to describe the magic bits
|
||||
that go into perf_event_attr.config for a particular pmu.
|
||||
(See ABI/testing/sysfs-bus-event_source-devices-format).
|
||||
|
||||
Each attribute under this group defines a bit range of the
|
||||
perf_event_attr.config. All supported attributes are listed
|
||||
below.
|
||||
|
||||
chip = "config:16-31"
|
||||
core = "config:16-31"
|
||||
domain = "config:0-3"
|
||||
lpar = "config:0-15"
|
||||
offset = "config:32-63"
|
||||
vcpu = "config:16-31"
|
||||
|
||||
For example,
|
||||
|
||||
PM_PB_CYC = "domain=1,offset=0x80,chip=?,lpar=0x0"
|
||||
|
||||
In this event, '?' after chip specifies that
|
||||
this value will be provided by user while running this event.
|
||||
|
||||
What: /sys/bus/event_source/devices/hv_24x7/interface/catalog
|
||||
Date: February 2014
|
||||
Contact: Linux on PowerPC Developer List <linuxppc-dev@lists.ozlabs.org>
|
||||
|
||||
@@ -1,3 +1,34 @@
|
||||
What: /sys/bus/event_source/devices/hv_gpci/format
|
||||
Date: September 2020
|
||||
Contact: Linux on PowerPC Developer List <linuxppc-dev@lists.ozlabs.org>
|
||||
Description: Read-only. Attribute group to describe the magic bits
|
||||
that go into perf_event_attr.config for a particular pmu.
|
||||
(See ABI/testing/sysfs-bus-event_source-devices-format).
|
||||
|
||||
Each attribute under this group defines a bit range of the
|
||||
perf_event_attr.config. All supported attributes are listed
|
||||
below.
|
||||
|
||||
counter_info_version = "config:16-23"
|
||||
length = "config:24-31"
|
||||
partition_id = "config:32-63"
|
||||
request = "config:0-31"
|
||||
sibling_part_id = "config:32-63"
|
||||
hw_chip_id = "config:32-63"
|
||||
offset = "config:32-63"
|
||||
phys_processor_idx = "config:32-63"
|
||||
secondary_index = "config:0-15"
|
||||
starting_index = "config:32-63"
|
||||
|
||||
For example,
|
||||
|
||||
processor_core_utilization_instructions_completed = "request=0x94,
|
||||
phys_processor_idx=?,counter_info_version=0x8,
|
||||
length=8,offset=0x18"
|
||||
|
||||
In this event, '?' after phys_processor_idx specifies this value
|
||||
this value will be provided by user while running this event.
|
||||
|
||||
What: /sys/bus/event_source/devices/hv_gpci/interface/collect_privileged
|
||||
Date: February 2014
|
||||
Contact: Linux on PowerPC Developer List <linuxppc-dev@lists.ozlabs.org>
|
||||
@@ -41,3 +72,10 @@ Contact: Linux on PowerPC Developer List <linuxppc-dev@lists.ozlabs.org>
|
||||
Description:
|
||||
A number indicating the latest version of the gpci interface
|
||||
that the kernel is aware of.
|
||||
|
||||
What: /sys/devices/hv_gpci/cpumask
|
||||
Date: October 2020
|
||||
Contact: Linux on PowerPC Developer List <linuxppc-dev@lists.ozlabs.org>
|
||||
Description: read only
|
||||
This sysfs file exposes the cpumask which is designated to make
|
||||
HCALLs to retrieve hv-gpci pmu event counter data.
|
||||
|
||||
@@ -36,3 +36,11 @@ Contact: linux-fsi@lists.ozlabs.org
|
||||
Description:
|
||||
Provides a means of reading/writing a 32 bit value from/to a
|
||||
specified FSI bus address.
|
||||
|
||||
What: /sys/bus/platform/devices/../cfam_reset
|
||||
Date: Sept 2020
|
||||
KernelVersion: 5.10
|
||||
Contact: linux-fsi@lists.ozlabs.org
|
||||
Description:
|
||||
Provides a means of resetting the cfam that is attached to the
|
||||
FSI device.
|
||||
|
||||
@@ -40,6 +40,7 @@ Description:
|
||||
buffered samples and events for device X.
|
||||
|
||||
What: /sys/bus/iio/devices/iio:deviceX/sampling_frequency
|
||||
What: /sys/bus/iio/devices/iio:deviceX/in_intensity_sampling_frequency
|
||||
What: /sys/bus/iio/devices/iio:deviceX/buffer/sampling_frequency
|
||||
What: /sys/bus/iio/devices/triggerX/sampling_frequency
|
||||
KernelVersion: 2.6.35
|
||||
@@ -49,12 +50,13 @@ Description:
|
||||
resulting sampling frequency. In many devices this
|
||||
parameter has an effect on input filters etc. rather than
|
||||
simply controlling when the input is sampled. As this
|
||||
effects data ready triggers, hardware buffers and the sysfs
|
||||
affects data ready triggers, hardware buffers and the sysfs
|
||||
direct access interfaces, it may be found in any of the
|
||||
relevant directories. If it effects all of the above
|
||||
relevant directories. If it affects all of the above
|
||||
then it is to be found in the base device directory.
|
||||
|
||||
What: /sys/bus/iio/devices/iio:deviceX/sampling_frequency_available
|
||||
What: /sys/bus/iio/devices/iio:deviceX/in_intensity_sampling_frequency_available
|
||||
What: /sys/bus/iio/devices/iio:deviceX/in_proximity_sampling_frequency_available
|
||||
What: /sys/.../iio:deviceX/buffer/sampling_frequency_available
|
||||
What: /sys/bus/iio/devices/triggerX/sampling_frequency_available
|
||||
@@ -374,6 +376,9 @@ What: /sys/bus/iio/devices/iio:deviceX/in_velocity_sqrt(x^2+y^2+z^2)_scale
|
||||
What: /sys/bus/iio/devices/iio:deviceX/in_illuminance_scale
|
||||
What: /sys/bus/iio/devices/iio:deviceX/in_countY_scale
|
||||
What: /sys/bus/iio/devices/iio:deviceX/in_angl_scale
|
||||
What: /sys/bus/iio/devices/iio:deviceX/in_intensity_x_scale
|
||||
What: /sys/bus/iio/devices/iio:deviceX/in_intensity_y_scale
|
||||
What: /sys/bus/iio/devices/iio:deviceX/in_intensity_z_scale
|
||||
KernelVersion: 2.6.35
|
||||
Contact: linux-iio@vger.kernel.org
|
||||
Description:
|
||||
@@ -401,21 +406,21 @@ Description:
|
||||
Hardware applied calibration offset (assumed to fix production
|
||||
inaccuracies).
|
||||
|
||||
What /sys/bus/iio/devices/iio:deviceX/in_voltageY_calibscale
|
||||
What /sys/bus/iio/devices/iio:deviceX/in_voltageY_supply_calibscale
|
||||
What /sys/bus/iio/devices/iio:deviceX/in_voltageY_i_calibscale
|
||||
What /sys/bus/iio/devices/iio:deviceX/in_voltageY_q_calibscale
|
||||
What /sys/bus/iio/devices/iio:deviceX/in_voltage_i_calibscale
|
||||
What /sys/bus/iio/devices/iio:deviceX/in_voltage_q_calibscale
|
||||
What /sys/bus/iio/devices/iio:deviceX/in_voltage_calibscale
|
||||
What /sys/bus/iio/devices/iio:deviceX/in_accel_x_calibscale
|
||||
What /sys/bus/iio/devices/iio:deviceX/in_accel_y_calibscale
|
||||
What /sys/bus/iio/devices/iio:deviceX/in_accel_z_calibscale
|
||||
What /sys/bus/iio/devices/iio:deviceX/in_anglvel_x_calibscale
|
||||
What /sys/bus/iio/devices/iio:deviceX/in_anglvel_y_calibscale
|
||||
What /sys/bus/iio/devices/iio:deviceX/in_anglvel_z_calibscale
|
||||
what /sys/bus/iio/devices/iio:deviceX/in_illuminance0_calibscale
|
||||
what /sys/bus/iio/devices/iio:deviceX/in_proximity0_calibscale
|
||||
What: /sys/bus/iio/devices/iio:deviceX/in_voltageY_calibscale
|
||||
What: /sys/bus/iio/devices/iio:deviceX/in_voltageY_supply_calibscale
|
||||
What: /sys/bus/iio/devices/iio:deviceX/in_voltageY_i_calibscale
|
||||
What: /sys/bus/iio/devices/iio:deviceX/in_voltageY_q_calibscale
|
||||
What: /sys/bus/iio/devices/iio:deviceX/in_voltage_i_calibscale
|
||||
What: /sys/bus/iio/devices/iio:deviceX/in_voltage_q_calibscale
|
||||
What: /sys/bus/iio/devices/iio:deviceX/in_voltage_calibscale
|
||||
What: /sys/bus/iio/devices/iio:deviceX/in_accel_x_calibscale
|
||||
What: /sys/bus/iio/devices/iio:deviceX/in_accel_y_calibscale
|
||||
What: /sys/bus/iio/devices/iio:deviceX/in_accel_z_calibscale
|
||||
What: /sys/bus/iio/devices/iio:deviceX/in_anglvel_x_calibscale
|
||||
What: /sys/bus/iio/devices/iio:deviceX/in_anglvel_y_calibscale
|
||||
What: /sys/bus/iio/devices/iio:deviceX/in_anglvel_z_calibscale
|
||||
What: /sys/bus/iio/devices/iio:deviceX/in_illuminance0_calibscale
|
||||
What: /sys/bus/iio/devices/iio:deviceX/in_proximity0_calibscale
|
||||
What: /sys/bus/iio/devices/iio:deviceX/in_pressureY_calibscale
|
||||
What: /sys/bus/iio/devices/iio:deviceX/in_pressure_calibscale
|
||||
What: /sys/bus/iio/devices/iio:deviceX/in_illuminance_calibscale
|
||||
@@ -483,7 +488,8 @@ Description:
|
||||
If a discrete set of scale values is available, they
|
||||
are listed in this attribute.
|
||||
|
||||
What /sys/bus/iio/devices/iio:deviceX/out_voltageY_hardwaregain
|
||||
What: /sys/bus/iio/devices/iio:deviceX/out_voltageY_hardwaregain
|
||||
What: /sys/bus/iio/devices/iio:deviceX/in_intensity_hardwaregain
|
||||
What: /sys/bus/iio/devices/iio:deviceX/in_intensity_red_hardwaregain
|
||||
What: /sys/bus/iio/devices/iio:deviceX/in_intensity_green_hardwaregain
|
||||
What: /sys/bus/iio/devices/iio:deviceX/in_intensity_blue_hardwaregain
|
||||
@@ -494,6 +500,13 @@ Description:
|
||||
Hardware applied gain factor. If shared across all channels,
|
||||
<type>_hardwaregain is used.
|
||||
|
||||
What: /sys/bus/iio/devices/iio:deviceX/in_intensity_hardwaregain_available
|
||||
KernelVersion: 5.10
|
||||
Contact: linux-iio@vger.kernel.org
|
||||
Description:
|
||||
Lists all available hardware applied gain factors. Shared across all
|
||||
channels.
|
||||
|
||||
What: /sys/.../in_accel_filter_low_pass_3db_frequency
|
||||
What: /sys/.../in_magn_filter_low_pass_3db_frequency
|
||||
What: /sys/.../in_anglvel_filter_low_pass_3db_frequency
|
||||
@@ -750,9 +763,9 @@ What: /sys/.../events/in_voltageY_raw_thresh_falling_value
|
||||
What: /sys/.../events/in_tempY_raw_thresh_rising_value
|
||||
What: /sys/.../events/in_tempY_raw_thresh_falling_value
|
||||
What: /sys/.../events/in_illuminance0_thresh_falling_value
|
||||
what: /sys/.../events/in_illuminance0_thresh_rising_value
|
||||
what: /sys/.../events/in_proximity0_thresh_falling_value
|
||||
what: /sys/.../events/in_proximity0_thresh_rising_value
|
||||
What: /sys/.../events/in_illuminance0_thresh_rising_value
|
||||
What: /sys/.../events/in_proximity0_thresh_falling_value
|
||||
What: /sys/.../events/in_proximity0_thresh_rising_value
|
||||
What: /sys/.../events/in_illuminance_thresh_rising_value
|
||||
What: /sys/.../events/in_illuminance_thresh_falling_value
|
||||
KernelVersion: 2.6.37
|
||||
@@ -832,11 +845,11 @@ What: /sys/.../events/in_tempY_thresh_rising_hysteresis
|
||||
What: /sys/.../events/in_tempY_thresh_falling_hysteresis
|
||||
What: /sys/.../events/in_tempY_thresh_either_hysteresis
|
||||
What: /sys/.../events/in_illuminance0_thresh_falling_hysteresis
|
||||
what: /sys/.../events/in_illuminance0_thresh_rising_hysteresis
|
||||
what: /sys/.../events/in_illuminance0_thresh_either_hysteresis
|
||||
what: /sys/.../events/in_proximity0_thresh_falling_hysteresis
|
||||
what: /sys/.../events/in_proximity0_thresh_rising_hysteresis
|
||||
what: /sys/.../events/in_proximity0_thresh_either_hysteresis
|
||||
What: /sys/.../events/in_illuminance0_thresh_rising_hysteresis
|
||||
What: /sys/.../events/in_illuminance0_thresh_either_hysteresis
|
||||
What: /sys/.../events/in_proximity0_thresh_falling_hysteresis
|
||||
What: /sys/.../events/in_proximity0_thresh_rising_hysteresis
|
||||
What: /sys/.../events/in_proximity0_thresh_either_hysteresis
|
||||
KernelVersion: 3.13
|
||||
Contact: linux-iio@vger.kernel.org
|
||||
Description:
|
||||
@@ -1013,7 +1026,7 @@ What: /sys/.../events/in_activity_running_thresh_falling_en
|
||||
KernelVersion: 3.19
|
||||
Contact: linux-iio@vger.kernel.org
|
||||
Description:
|
||||
Enables or disables activitity events. Depending on direction
|
||||
Enables or disables activity events. Depending on direction
|
||||
an event is generated when sensor ENTERS or LEAVES a given state.
|
||||
|
||||
What: /sys/.../events/in_activity_still_thresh_rising_value
|
||||
@@ -1333,6 +1346,7 @@ Description:
|
||||
standardised CIE Erythemal Action Spectrum. UV index values range
|
||||
from 0 (low) to >=11 (extreme).
|
||||
|
||||
What: /sys/.../iio:deviceX/in_intensity_integration_time
|
||||
What: /sys/.../iio:deviceX/in_intensity_red_integration_time
|
||||
What: /sys/.../iio:deviceX/in_intensity_green_integration_time
|
||||
What: /sys/.../iio:deviceX/in_intensity_blue_integration_time
|
||||
@@ -1342,7 +1356,8 @@ KernelVersion: 3.12
|
||||
Contact: linux-iio@vger.kernel.org
|
||||
Description:
|
||||
This attribute is used to get/set the integration time in
|
||||
seconds.
|
||||
seconds. If shared across all channels of a given type,
|
||||
<type>_integration_time is used.
|
||||
|
||||
What: /sys/.../iio:deviceX/in_velocity_sqrt(x^2+y^2+z^2)_integration_time
|
||||
KernelVersion: 4.0
|
||||
@@ -1564,6 +1579,8 @@ What: /sys/bus/iio/devices/iio:deviceX/in_concentration_ethanol_raw
|
||||
What: /sys/bus/iio/devices/iio:deviceX/in_concentrationX_ethanol_raw
|
||||
What: /sys/bus/iio/devices/iio:deviceX/in_concentration_h2_raw
|
||||
What: /sys/bus/iio/devices/iio:deviceX/in_concentrationX_h2_raw
|
||||
What: /sys/bus/iio/devices/iio:deviceX/in_concentration_o2_raw
|
||||
What: /sys/bus/iio/devices/iio:deviceX/in_concentrationX_o2_raw
|
||||
What: /sys/bus/iio/devices/iio:deviceX/in_concentration_voc_raw
|
||||
What: /sys/bus/iio/devices/iio:deviceX/in_concentrationX_voc_raw
|
||||
KernelVersion: 4.3
|
||||
@@ -1740,3 +1757,20 @@ KernelVersion: 5.5
|
||||
Contact: linux-iio@vger.kernel.org
|
||||
Description:
|
||||
One of the following thermocouple types: B, E, J, K, N, R, S, T.
|
||||
|
||||
What: /sys/bus/iio/devices/iio:deviceX/in_temp_object_calibambient
|
||||
What: /sys/bus/iio/devices/iio:deviceX/in_tempX_object_calibambient
|
||||
KernelVersion: 5.10
|
||||
Contact: linux-iio@vger.kernel.org
|
||||
Description:
|
||||
Calibrated ambient temperature for object temperature
|
||||
calculation in milli degrees Celsius.
|
||||
|
||||
What: /sys/bus/iio/devices/iio:deviceX/in_intensity_x_raw
|
||||
What: /sys/bus/iio/devices/iio:deviceX/in_intensity_y_raw
|
||||
What: /sys/bus/iio/devices/iio:deviceX/in_intensity_z_raw
|
||||
KernelVersion: 5.10
|
||||
Contact: linux-iio@vger.kernel.org
|
||||
Description:
|
||||
Unscaled light intensity according to CIE 1931/DIN 5033 color space.
|
||||
Units after application of scale are nano nanowatts per square meter.
|
||||
|
||||
7
Documentation/ABI/testing/sysfs-bus-iio-accel-adxl372
Normal file
7
Documentation/ABI/testing/sysfs-bus-iio-accel-adxl372
Normal file
@@ -0,0 +1,7 @@
|
||||
What: /sys/bus/iio/devices/triggerX/name = "adxl372-devX-peak"
|
||||
KernelVersion:
|
||||
Contact: linux-iio@vger.kernel.org
|
||||
Description:
|
||||
The adxl372 accelerometer kernel module provides an additional trigger,
|
||||
which sets the device in a mode in which it will record only the peak acceleration
|
||||
sensed over the set period of time in the events sysfs.
|
||||
9
Documentation/ABI/testing/sysfs-bus-iio-humidity-hdc2010
Normal file
9
Documentation/ABI/testing/sysfs-bus-iio-humidity-hdc2010
Normal file
@@ -0,0 +1,9 @@
|
||||
What: /sys/bus/iio/devices/iio:deviceX/out_current_heater_raw
|
||||
What: /sys/bus/iio/devices/iio:deviceX/out_current_heater_raw_available
|
||||
KernelVersion: 5.3.8
|
||||
Contact: linux-iio@vger.kernel.org
|
||||
Description:
|
||||
Controls the heater device within the humidity sensor to get
|
||||
rid of excess condensation.
|
||||
|
||||
Valid control values are 0 = OFF, and 1 = ON.
|
||||
@@ -41,6 +41,13 @@ Contact: Tomas Winkler <tomas.winkler@intel.com>
|
||||
Description: Stores mei client fixed address, if any
|
||||
Format: %d
|
||||
|
||||
What: /sys/bus/mei/devices/.../vtag
|
||||
Date: Nov 2020
|
||||
KernelVersion: 5.9
|
||||
Contact: Tomas Winkler <tomas.winkler@intel.com>
|
||||
Description: Stores mei client vtag support status
|
||||
Format: %d
|
||||
|
||||
What: /sys/bus/mei/devices/.../max_len
|
||||
Date: Nov 2019
|
||||
KernelVersion: 5.5
|
||||
|
||||
16
Documentation/ABI/testing/sysfs-bus-pci-devices-catpt
Normal file
16
Documentation/ABI/testing/sysfs-bus-pci-devices-catpt
Normal file
@@ -0,0 +1,16 @@
|
||||
What: /sys/devices/pci0000:00/<dev>/fw_version
|
||||
Date: September 2020
|
||||
Contact: Cezary Rojewski <cezary.rojewski@intel.com>
|
||||
Description:
|
||||
Version of AudioDSP firmware ASoC catpt driver is
|
||||
communicating with.
|
||||
Format: %d.%d.%d.%d, type:major:minor:build.
|
||||
|
||||
What: /sys/devices/pci0000:00/<dev>/fw_info
|
||||
Date: September 2020
|
||||
Contact: Cezary Rojewski <cezary.rojewski@intel.com>
|
||||
Description:
|
||||
Detailed AudioDSP firmware build information including
|
||||
build hash and log-providers hash. This information is
|
||||
obtained during initial handshake with firmware.
|
||||
Format: %s.
|
||||
@@ -1,3 +1,21 @@
|
||||
What: /sys/bus/soundwire/devices/sdw:.../status
|
||||
/sys/bus/soundwire/devices/sdw:.../device_number
|
||||
|
||||
Date: September 2020
|
||||
|
||||
Contact: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
|
||||
Bard Liao <yung-chuan.liao@linux.intel.com>
|
||||
Vinod Koul <vkoul@kernel.org>
|
||||
|
||||
Description: SoundWire Slave status
|
||||
|
||||
These properties report the Slave status, e.g. if it
|
||||
is UNATTACHED or not, and in the latter case show the
|
||||
device_number. This status information is useful to
|
||||
detect devices exposed by platform firmware but not
|
||||
physically present on the bus, and conversely devices
|
||||
not exposed in platform firmware but enumerated.
|
||||
|
||||
What: /sys/bus/soundwire/devices/sdw:.../dev-properties/mipi_revision
|
||||
/sys/bus/soundwire/devices/sdw:.../dev-properties/wake_capable
|
||||
/sys/bus/soundwire/devices/sdw:.../dev-properties/test_mode_capable
|
||||
|
||||
@@ -34,7 +34,7 @@ Description:
|
||||
Describes the main type of the supply.
|
||||
|
||||
Access: Read
|
||||
Valid values: "Battery", "UPS", "Mains", "USB"
|
||||
Valid values: "Battery", "UPS", "Mains", "USB", "Wireless"
|
||||
|
||||
===== Battery Properties =====
|
||||
|
||||
@@ -108,7 +108,8 @@ Description:
|
||||
which they average readings to smooth out the reported value.
|
||||
|
||||
Access: Read
|
||||
Valid values: Represented in microamps
|
||||
Valid values: Represented in microamps. Negative values are used
|
||||
for discharging batteries, positive values for charging batteries.
|
||||
|
||||
What: /sys/class/power_supply/<supply_name>/current_max
|
||||
Date: October 2010
|
||||
@@ -127,7 +128,8 @@ Description:
|
||||
This value is not averaged/smoothed.
|
||||
|
||||
Access: Read
|
||||
Valid values: Represented in microamps
|
||||
Valid values: Represented in microamps. Negative values are used
|
||||
for discharging batteries, positive values for charging batteries.
|
||||
|
||||
What: /sys/class/power_supply/<supply_name>/charge_control_limit
|
||||
Date: Oct 2012
|
||||
|
||||
@@ -58,3 +58,47 @@ Description: Remote processor name
|
||||
Reports the name of the remote processor. This can be used by
|
||||
userspace in exactly identifying a remote processor and ease
|
||||
up the usage in modifying the 'firmware' or 'state' files.
|
||||
|
||||
What: /sys/class/remoteproc/.../coredump
|
||||
Date: July 2020
|
||||
Contact: Bjorn Andersson <bjorn.andersson@linaro.org>, Ohad Ben-Cohen <ohad@wizery.com>
|
||||
Description: Remote processor coredump configuration
|
||||
|
||||
Reports the coredump configuration of the remote processor,
|
||||
which will be one of:
|
||||
|
||||
"disabled"
|
||||
"enabled"
|
||||
"inline"
|
||||
|
||||
"disabled" means no dump will be collected.
|
||||
|
||||
"enabled" means when the remote processor's coredump is
|
||||
collected it will be copied to a separate buffer and that
|
||||
buffer is exposed to userspace.
|
||||
|
||||
"inline" means when the remote processor's coredump is
|
||||
collected userspace will directly read from the remote
|
||||
processor's device memory. Extra buffer will not be used to
|
||||
copy the dump. Also recovery process will not proceed until
|
||||
all data is read by usersapce.
|
||||
|
||||
What: /sys/class/remoteproc/.../recovery
|
||||
Date: July 2020
|
||||
Contact: Bjorn Andersson <bjorn.andersson@linaro.org>, Ohad Ben-Cohen <ohad@wizery.com>
|
||||
Description: Remote processor recovery mechanism
|
||||
|
||||
Reports the recovery mechanism of the remote processor,
|
||||
which will be one of:
|
||||
|
||||
"enabled"
|
||||
"disabled"
|
||||
|
||||
"enabled" means, the remote processor will be automatically
|
||||
recovered whenever it crashes. Moreover, if the remote
|
||||
processor crashes while recovery is disabled, it will
|
||||
be automatically recovered too as soon as recovery is enabled.
|
||||
|
||||
"disabled" means, a remote processor will remain in a crashed
|
||||
state if it crashes. This is useful for debugging purposes;
|
||||
without it, debugging a crash is substantially harder.
|
||||
|
||||
@@ -2,13 +2,17 @@ What: /sys/class/habanalabs/hl<n>/armcp_kernel_ver
|
||||
Date: Jan 2019
|
||||
KernelVersion: 5.1
|
||||
Contact: oded.gabbay@gmail.com
|
||||
Description: Version of the Linux kernel running on the device's CPU
|
||||
Description: Version of the Linux kernel running on the device's CPU.
|
||||
Will be DEPRECATED in Linux kernel version 5.10, and be
|
||||
replaced with cpucp_kernel_ver
|
||||
|
||||
What: /sys/class/habanalabs/hl<n>/armcp_ver
|
||||
Date: Jan 2019
|
||||
KernelVersion: 5.1
|
||||
Contact: oded.gabbay@gmail.com
|
||||
Description: Version of the application running on the device's CPU
|
||||
Will be DEPRECATED in Linux kernel version 5.10, and be
|
||||
replaced with cpucp_ver
|
||||
|
||||
What: /sys/class/habanalabs/hl<n>/clk_max_freq_mhz
|
||||
Date: Jun 2019
|
||||
@@ -33,6 +37,18 @@ KernelVersion: 5.1
|
||||
Contact: oded.gabbay@gmail.com
|
||||
Description: Version of the Device's CPLD F/W
|
||||
|
||||
What: /sys/class/habanalabs/hl<n>/cpucp_kernel_ver
|
||||
Date: Oct 2020
|
||||
KernelVersion: 5.10
|
||||
Contact: oded.gabbay@gmail.com
|
||||
Description: Version of the Linux kernel running on the device's CPU
|
||||
|
||||
What: /sys/class/habanalabs/hl<n>/cpucp_ver
|
||||
Date: Oct 2020
|
||||
KernelVersion: 5.10
|
||||
Contact: oded.gabbay@gmail.com
|
||||
Description: Version of the application running on the device's CPU
|
||||
|
||||
What: /sys/class/habanalabs/hl<n>/device_type
|
||||
Date: Jan 2019
|
||||
KernelVersion: 5.1
|
||||
|
||||
15
Documentation/ABI/testing/sysfs-driver-intel-m10-bmc
Normal file
15
Documentation/ABI/testing/sysfs-driver-intel-m10-bmc
Normal file
@@ -0,0 +1,15 @@
|
||||
What: /sys/bus/spi/devices/.../bmc_version
|
||||
Date: June 2020
|
||||
KernelVersion: 5.10
|
||||
Contact: Xu Yilun <yilun.xu@intel.com>
|
||||
Description: Read only. Returns the hardware build version of Intel
|
||||
MAX10 BMC chip.
|
||||
Format: "0x%x".
|
||||
|
||||
What: /sys/bus/spi/devices/.../bmcfw_version
|
||||
Date: June 2020
|
||||
KernelVersion: 5.10
|
||||
Contact: Xu Yilun <yilun.xu@intel.com>
|
||||
Description: Read only. Returns the firmware version of Intel MAX10
|
||||
BMC chip.
|
||||
Format: "0x%x".
|
||||
@@ -49,10 +49,13 @@ Description:
|
||||
will be changed only in device RAM, so it will be cleared when
|
||||
power is lost. Trigger a 'save' to EEPROM command to keep
|
||||
values after power-on. Read or write are :
|
||||
* '9..12': device resolution in bit
|
||||
* '9..14': device resolution in bit
|
||||
or resolution to set in bit
|
||||
* '-xx': xx is kernel error when reading the resolution
|
||||
* Anything else: do nothing
|
||||
Some DS18B20 clones are fixed in 12-bit resolution, so the
|
||||
actual resolution is read back from the chip and verified. Error
|
||||
is reported if the results differ.
|
||||
Users: any user space application which wants to communicate with
|
||||
w1_term device
|
||||
|
||||
@@ -86,7 +89,7 @@ Description:
|
||||
*write* :
|
||||
* '0' : save the 2 or 3 bytes to the device EEPROM
|
||||
(i.e. TH, TL and config register)
|
||||
* '9..12' : set the device resolution in RAM
|
||||
* '9..14' : set the device resolution in RAM
|
||||
(if supported)
|
||||
* Anything else: do nothing
|
||||
refer to Documentation/w1/slaves/w1_therm.rst for detailed
|
||||
@@ -114,3 +117,47 @@ Description:
|
||||
of the bulk read command (not the current temperature).
|
||||
Users: any user space application which wants to communicate with
|
||||
w1_term device
|
||||
|
||||
|
||||
What: /sys/bus/w1/devices/.../conv_time
|
||||
Date: July 2020
|
||||
Contact: Ivan Zaentsev <ivan.zaentsev@wirenboard.ru>
|
||||
Description:
|
||||
(RW) Get, set, or measure a temperature conversion time. The
|
||||
setting remains active until a resolution change. Then it is
|
||||
reset to default (datasheet) conversion time for a new
|
||||
resolution.
|
||||
|
||||
*read*: Actual conversion time in milliseconds. *write*:
|
||||
'0': Set the default conversion time from the datasheet.
|
||||
'1': Measure and set the conversion time. Make a single
|
||||
temperature conversion, measure an actual value.
|
||||
Increase it by 20% for temperature range. A new
|
||||
conversion time can be obtained by reading this
|
||||
same attribute.
|
||||
other positive value:
|
||||
Set the conversion time in milliseconds.
|
||||
|
||||
Users: An application using the w1_term device
|
||||
|
||||
|
||||
What: /sys/bus/w1/devices/.../features
|
||||
Date: July 2020
|
||||
Contact: Ivan Zaentsev <ivan.zaentsev@wirenboard.ru>
|
||||
Description:
|
||||
(RW) Control optional driver settings.
|
||||
Bit masks to read/write (bitwise OR):
|
||||
|
||||
1: Enable check for conversion success. If byte 6 of
|
||||
scratchpad memory is 0xC after conversion, and
|
||||
temperature reads 85.00 (powerup value) or 127.94
|
||||
(insufficient power) - return a conversion error.
|
||||
|
||||
2: Enable poll for conversion completion. Generate read cycles
|
||||
after the conversion start and wait for 1's. In parasite
|
||||
power mode this feature is not available.
|
||||
|
||||
*read*: Currently selected features.
|
||||
*write*: Select features.
|
||||
|
||||
Users: An application using the w1_term device
|
||||
|
||||
@@ -35,3 +35,12 @@ Description:
|
||||
controls the duration in milliseconds that blkback will not
|
||||
cache any page not backed by a grant mapping.
|
||||
The default is 10ms.
|
||||
|
||||
What: /sys/module/xen_blkback/parameters/feature_persistent
|
||||
Date: September 2020
|
||||
KernelVersion: 5.10
|
||||
Contact: SeongJae Park <sjpark@amazon.de>
|
||||
Description:
|
||||
Whether to enable the persistent grants feature or not. Note
|
||||
that this option only takes effect on newly created backends.
|
||||
The default is Y (enable).
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
What: /sys/module/xen_blkfront/parameters/max
|
||||
What: /sys/module/xen_blkfront/parameters/max_indirect_segments
|
||||
Date: June 2013
|
||||
KernelVersion: 3.11
|
||||
Contact: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
|
||||
@@ -8,3 +8,12 @@ Description:
|
||||
is 32 - higher value means more potential throughput but more
|
||||
memory usage. The backend picks the minimum of the frontend
|
||||
and its default backend value.
|
||||
|
||||
What: /sys/module/xen_blkfront/parameters/feature_persistent
|
||||
Date: September 2020
|
||||
KernelVersion: 5.10
|
||||
Contact: SeongJae Park <sjpark@amazon.de>
|
||||
Description:
|
||||
Whether to enable the persistent grants feature or not. Note
|
||||
that this option only takes effect on newly created frontends.
|
||||
The default is Y (enable).
|
||||
|
||||
@@ -22,7 +22,8 @@ Contact: "Namjae Jeon" <namjae.jeon@samsung.com>
|
||||
Description: Controls the victim selection policy for garbage collection.
|
||||
Setting gc_idle = 0(default) will disable this option. Setting
|
||||
gc_idle = 1 will select the Cost Benefit approach & setting
|
||||
gc_idle = 2 will select the greedy approach.
|
||||
gc_idle = 2 will select the greedy approach & setting
|
||||
gc_idle = 3 will select the age-threshold based approach.
|
||||
|
||||
What: /sys/fs/f2fs/<disk>/reclaim_segments
|
||||
Date: October 2013
|
||||
|
||||
@@ -92,3 +92,19 @@ Contact: linux-acpi@vger.kernel.org
|
||||
Description:
|
||||
(RO) The battery discharge current capability obtained from battery fuel gauge in
|
||||
milli Amps.
|
||||
|
||||
What: /sys/bus/platform/devices/INTC1045:00/pch_fivr_switch_frequency/freq_mhz_low_clock
|
||||
Date: November, 2020
|
||||
KernelVersion: v5.10
|
||||
Contact: linux-acpi@vger.kernel.org
|
||||
Description:
|
||||
(RW) The PCH FIVR (Fully Integrated Voltage Regulator) switching frequency in MHz,
|
||||
when FIVR clock is 19.2MHz or 24MHz.
|
||||
|
||||
What: /sys/bus/platform/devices/INTC1045:00/pch_fivr_switch_frequency/freq_mhz_high_clock
|
||||
Date: November, 2020
|
||||
KernelVersion: v5.10
|
||||
Contact: linux-acpi@vger.kernel.org
|
||||
Description:
|
||||
(RW) The PCH FIVR (Fully Integrated Voltage Regulator) switching frequency in MHz,
|
||||
when FIVR clock is 38.4MHz.
|
||||
|
||||
@@ -12,6 +12,7 @@ Linux PCI Bus Subsystem
|
||||
pciebus-howto
|
||||
pci-iov-howto
|
||||
msi-howto
|
||||
sysfs-pci
|
||||
acpi-info
|
||||
pci-error-recovery
|
||||
pcieaer-howto
|
||||
|
||||
@@ -963,7 +963,7 @@ exit and perhaps also vice versa. Therefore, whenever the
|
||||
``->dynticks_nesting`` field is incremented up from zero, the
|
||||
``->dynticks_nmi_nesting`` field is set to a large positive number, and
|
||||
whenever the ``->dynticks_nesting`` field is decremented down to zero,
|
||||
the the ``->dynticks_nmi_nesting`` field is set to zero. Assuming that
|
||||
the ``->dynticks_nmi_nesting`` field is set to zero. Assuming that
|
||||
the number of misnested interrupts is not sufficient to overflow the
|
||||
counter, this approach corrects the ``->dynticks_nmi_nesting`` field
|
||||
every time the corresponding CPU enters the idle loop from process
|
||||
|
||||
@@ -2162,7 +2162,7 @@ scheduling-clock interrupt be enabled when RCU needs it to be:
|
||||
this sort of thing.
|
||||
#. If a CPU is in a portion of the kernel that is absolutely positively
|
||||
no-joking guaranteed to never execute any RCU read-side critical
|
||||
sections, and RCU believes this CPU to to be idle, no problem. This
|
||||
sections, and RCU believes this CPU to be idle, no problem. This
|
||||
sort of thing is used by some architectures for light-weight
|
||||
exception handlers, which can then avoid the overhead of
|
||||
``rcu_irq_enter()`` and ``rcu_irq_exit()`` at exception entry and
|
||||
@@ -2431,7 +2431,7 @@ However, there are legitimate preemptible-RCU implementations that do
|
||||
not have this property, given that any point in the code outside of an
|
||||
RCU read-side critical section can be a quiescent state. Therefore,
|
||||
*RCU-sched* was created, which follows “classic” RCU in that an
|
||||
RCU-sched grace period waits for for pre-existing interrupt and NMI
|
||||
RCU-sched grace period waits for pre-existing interrupt and NMI
|
||||
handlers. In kernels built with ``CONFIG_PREEMPT=n``, the RCU and
|
||||
RCU-sched APIs have identical implementations, while kernels built with
|
||||
``CONFIG_PREEMPT=y`` provide a separate implementation for each.
|
||||
|
||||
@@ -360,7 +360,7 @@ order to amortize their overhead over many uses of the corresponding APIs.
|
||||
|
||||
There are at least three flavors of RCU usage in the Linux kernel. The diagram
|
||||
above shows the most common one. On the updater side, the rcu_assign_pointer(),
|
||||
sychronize_rcu() and call_rcu() primitives used are the same for all three
|
||||
synchronize_rcu() and call_rcu() primitives used are the same for all three
|
||||
flavors. However for protection (on the reader side), the primitives used vary
|
||||
depending on the flavor:
|
||||
|
||||
|
||||
@@ -3,9 +3,9 @@ SafeSetID
|
||||
=========
|
||||
SafeSetID is an LSM module that gates the setid family of syscalls to restrict
|
||||
UID/GID transitions from a given UID/GID to only those approved by a
|
||||
system-wide whitelist. These restrictions also prohibit the given UIDs/GIDs
|
||||
system-wide allowlist. These restrictions also prohibit the given UIDs/GIDs
|
||||
from obtaining auxiliary privileges associated with CAP_SET{U/G}ID, such as
|
||||
allowing a user to set up user namespace UID mappings.
|
||||
allowing a user to set up user namespace UID/GID mappings.
|
||||
|
||||
|
||||
Background
|
||||
@@ -98,10 +98,21 @@ Directions for use
|
||||
==================
|
||||
This LSM hooks the setid syscalls to make sure transitions are allowed if an
|
||||
applicable restriction policy is in place. Policies are configured through
|
||||
securityfs by writing to the safesetid/add_whitelist_policy and
|
||||
safesetid/flush_whitelist_policies files at the location where securityfs is
|
||||
mounted. The format for adding a policy is '<UID>:<UID>', using literal
|
||||
numbers, such as '123:456'. To flush the policies, any write to the file is
|
||||
sufficient. Again, configuring a policy for a UID will prevent that UID from
|
||||
obtaining auxiliary setid privileges, such as allowing a user to set up user
|
||||
namespace UID mappings.
|
||||
securityfs by writing to the safesetid/uid_allowlist_policy and
|
||||
safesetid/gid_allowlist_policy files at the location where securityfs is
|
||||
mounted. The format for adding a policy is '<UID>:<UID>' or '<GID>:<GID>',
|
||||
using literal numbers, and ending with a newline character such as '123:456\n'.
|
||||
Writing an empty string "" will flush the policy. Again, configuring a policy
|
||||
for a UID/GID will prevent that UID/GID from obtaining auxiliary setid
|
||||
privileges, such as allowing a user to set up user namespace UID/GID mappings.
|
||||
|
||||
Note on GID policies and setgroups()
|
||||
==================
|
||||
In v5.9 we are adding support for limiting CAP_SETGID privileges as was done
|
||||
previously for CAP_SETUID. However, for compatibility with common sandboxing
|
||||
related code conventions in userspace, we currently allow arbitrary
|
||||
setgroups() calls for processes with CAP_SETGID restrictions. Until we add
|
||||
support in a future release for restricting setgroups() calls, these GID
|
||||
policies add no meaningful security. setgroups() restrictions will be enforced
|
||||
once we have the policy checking code in place, which will rely on GID policy
|
||||
configuration code added in v5.9.
|
||||
|
||||
@@ -322,9 +322,9 @@ Compiling the kernel
|
||||
reboot, and enjoy!
|
||||
|
||||
If you ever need to change the default root device, video mode,
|
||||
ramdisk size, etc. in the kernel image, use the ``rdev`` program (or
|
||||
alternatively the LILO boot options when appropriate). No need to
|
||||
recompile the kernel to change these parameters.
|
||||
etc. in the kernel image, use your bootloader's boot options
|
||||
where appropriate. No need to recompile the kernel to change
|
||||
these parameters.
|
||||
|
||||
- Reboot with the new kernel and enjoy.
|
||||
|
||||
|
||||
@@ -5,11 +5,14 @@ A block layer cache (bcache)
|
||||
Say you've got a big slow raid 6, and an ssd or three. Wouldn't it be
|
||||
nice if you could use them as cache... Hence bcache.
|
||||
|
||||
Wiki and git repositories are at:
|
||||
The bcache wiki can be found at:
|
||||
https://bcache.evilpiepirate.org
|
||||
|
||||
- https://bcache.evilpiepirate.org
|
||||
- http://evilpiepirate.org/git/linux-bcache.git
|
||||
- https://evilpiepirate.org/git/bcache-tools.git
|
||||
This is the git repository of bcache-tools:
|
||||
https://git.kernel.org/pub/scm/linux/kernel/git/colyli/bcache-tools.git/
|
||||
|
||||
The latest bcache kernel code can be found from mainline Linux kernel:
|
||||
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/
|
||||
|
||||
It's designed around the performance characteristics of SSDs - it only allocates
|
||||
in erase block sized buckets, and it uses a hybrid btree/log to track cached
|
||||
@@ -41,17 +44,21 @@ in the cache it first disables writeback caching and waits for all dirty data
|
||||
to be flushed.
|
||||
|
||||
Getting started:
|
||||
You'll need make-bcache from the bcache-tools repository. Both the cache device
|
||||
You'll need bcache util from the bcache-tools repository. Both the cache device
|
||||
and backing device must be formatted before use::
|
||||
|
||||
make-bcache -B /dev/sdb
|
||||
make-bcache -C /dev/sdc
|
||||
bcache make -B /dev/sdb
|
||||
bcache make -C /dev/sdc
|
||||
|
||||
make-bcache has the ability to format multiple devices at the same time - if
|
||||
`bcache make` has the ability to format multiple devices at the same time - if
|
||||
you format your backing devices and cache device at the same time, you won't
|
||||
have to manually attach::
|
||||
|
||||
make-bcache -B /dev/sda /dev/sdb -C /dev/sdc
|
||||
bcache make -B /dev/sda /dev/sdb -C /dev/sdc
|
||||
|
||||
If your bcache-tools is not updated to latest version and does not have the
|
||||
unified `bcache` utility, you may use the legacy `make-bcache` utility to format
|
||||
bcache device with same -B and -C parameters.
|
||||
|
||||
bcache-tools now ships udev rules, and bcache devices are known to the kernel
|
||||
immediately. Without udev, you can manually register devices like this::
|
||||
@@ -188,7 +195,7 @@ D) Recovering data without bcache:
|
||||
If bcache is not available in the kernel, a filesystem on the backing
|
||||
device is still available at an 8KiB offset. So either via a loopdev
|
||||
of the backing device created with --offset 8K, or any value defined by
|
||||
--data-offset when you originally formatted bcache with `make-bcache`.
|
||||
--data-offset when you originally formatted bcache with `bcache make`.
|
||||
|
||||
For example::
|
||||
|
||||
@@ -210,7 +217,7 @@ E) Wiping a cache device
|
||||
|
||||
After you boot back with bcache enabled, you recreate the cache and attach it::
|
||||
|
||||
host:~# make-bcache -C /dev/sdh2
|
||||
host:~# bcache make -C /dev/sdh2
|
||||
UUID: 7be7e175-8f4c-4f99-94b2-9c904d227045
|
||||
Set UUID: 5bc072a8-ab17-446d-9744-e247949913c1
|
||||
version: 0
|
||||
@@ -318,7 +325,7 @@ want for getting the best possible numbers when benchmarking.
|
||||
|
||||
The default metadata size in bcache is 8k. If your backing device is
|
||||
RAID based, then be sure to align this by a multiple of your stride
|
||||
width using `make-bcache --data-offset`. If you intend to expand your
|
||||
width using `bcache make --data-offset`. If you intend to expand your
|
||||
disk array in the future, then multiply a series of primes by your
|
||||
raid stripe size to get the disk multiples that you would like.
|
||||
|
||||
|
||||
@@ -6,7 +6,7 @@ Using the RAM disk block device with Linux
|
||||
|
||||
1) Overview
|
||||
2) Kernel Command Line Parameters
|
||||
3) Using "rdev -r"
|
||||
3) Using "rdev"
|
||||
4) An Example of Creating a Compressed RAM Disk
|
||||
|
||||
|
||||
@@ -59,51 +59,27 @@ default is 4096 (4 MB).
|
||||
rd_size
|
||||
See ramdisk_size.
|
||||
|
||||
3) Using "rdev -r"
|
||||
------------------
|
||||
3) Using "rdev"
|
||||
---------------
|
||||
|
||||
The usage of the word (two bytes) that "rdev -r" sets in the kernel image is
|
||||
as follows. The low 11 bits (0 -> 10) specify an offset (in 1 k blocks) of up
|
||||
to 2 MB (2^11) of where to find the RAM disk (this used to be the size). Bit
|
||||
14 indicates that a RAM disk is to be loaded, and bit 15 indicates whether a
|
||||
prompt/wait sequence is to be given before trying to read the RAM disk. Since
|
||||
the RAM disk dynamically grows as data is being written into it, a size field
|
||||
is not required. Bits 11 to 13 are not currently used and may as well be zero.
|
||||
These numbers are no magical secrets, as seen below::
|
||||
"rdev" is an obsolete, deprecated, antiquated utility that could be used
|
||||
to set the boot device in a Linux kernel image.
|
||||
|
||||
./arch/x86/kernel/setup.c:#define RAMDISK_IMAGE_START_MASK 0x07FF
|
||||
./arch/x86/kernel/setup.c:#define RAMDISK_PROMPT_FLAG 0x8000
|
||||
./arch/x86/kernel/setup.c:#define RAMDISK_LOAD_FLAG 0x4000
|
||||
Instead of using rdev, just place the boot device information on the
|
||||
kernel command line and pass it to the kernel from the bootloader.
|
||||
|
||||
Consider a typical two floppy disk setup, where you will have the
|
||||
kernel on disk one, and have already put a RAM disk image onto disk #2.
|
||||
You can also pass arguments to the kernel by setting FDARGS in
|
||||
arch/x86/boot/Makefile and specify in initrd image by setting FDINITRD in
|
||||
arch/x86/boot/Makefile.
|
||||
|
||||
Hence you want to set bits 0 to 13 as 0, meaning that your RAM disk
|
||||
starts at an offset of 0 kB from the beginning of the floppy.
|
||||
The command line equivalent is: "ramdisk_start=0"
|
||||
Some of the kernel command line boot options that may apply here are::
|
||||
|
||||
You want bit 14 as one, indicating that a RAM disk is to be loaded.
|
||||
The command line equivalent is: "load_ramdisk=1"
|
||||
|
||||
You want bit 15 as one, indicating that you want a prompt/keypress
|
||||
sequence so that you have a chance to switch floppy disks.
|
||||
The command line equivalent is: "prompt_ramdisk=1"
|
||||
|
||||
Putting that together gives 2^15 + 2^14 + 0 = 49152 for an rdev word.
|
||||
So to create disk one of the set, you would do::
|
||||
|
||||
/usr/src/linux# cat arch/x86/boot/zImage > /dev/fd0
|
||||
/usr/src/linux# rdev /dev/fd0 /dev/fd0
|
||||
/usr/src/linux# rdev -r /dev/fd0 49152
|
||||
ramdisk_start=N
|
||||
ramdisk_size=M
|
||||
|
||||
If you make a boot disk that has LILO, then for the above, you would use::
|
||||
|
||||
append = "ramdisk_start=0 load_ramdisk=1 prompt_ramdisk=1"
|
||||
|
||||
Since the default start = 0 and the default prompt = 1, you could use::
|
||||
|
||||
append = "load_ramdisk=1"
|
||||
|
||||
append = "ramdisk_start=N ramdisk_size=M"
|
||||
|
||||
4) An Example of Creating a Compressed RAM Disk
|
||||
-----------------------------------------------
|
||||
@@ -151,12 +127,9 @@ f) Put the RAM disk image onto the floppy, after the kernel. Use an offset
|
||||
|
||||
dd if=/tmp/ram_image.gz of=/dev/fd0 bs=1k seek=400
|
||||
|
||||
g) Use "rdev" to set the boot device, RAM disk offset, prompt flag, etc.
|
||||
For prompt_ramdisk=1, load_ramdisk=1, ramdisk_start=400, one would
|
||||
have 2^15 + 2^14 + 400 = 49552::
|
||||
|
||||
rdev /dev/fd0 /dev/fd0
|
||||
rdev -r /dev/fd0 49552
|
||||
g) Make sure that you have already specified the boot information in
|
||||
FDARGS and FDINITRD or that you use a bootloader to pass kernel
|
||||
command line boot options to the kernel.
|
||||
|
||||
That is it. You now have your boot/root compressed RAM disk floppy. Some
|
||||
users may wish to combine steps (d) and (f) by using a pipe.
|
||||
@@ -167,11 +140,14 @@ users may wish to combine steps (d) and (f) by using a pipe.
|
||||
Changelog:
|
||||
----------
|
||||
|
||||
SEPT-2020 :
|
||||
|
||||
Removed usage of "rdev"
|
||||
|
||||
10-22-04 :
|
||||
Updated to reflect changes in command line options, remove
|
||||
obsolete references, general cleanup.
|
||||
James Nelson (james4765@gmail.com)
|
||||
|
||||
|
||||
12-95 :
|
||||
Original Document
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
.. _cpusets:
|
||||
|
||||
=======
|
||||
CPUSETS
|
||||
=======
|
||||
|
||||
@@ -1259,6 +1259,10 @@ PAGE_SIZE multiple when read back.
|
||||
can show up in the middle. Don't rely on items remaining in a
|
||||
fixed position; use the keys to look up specific values!
|
||||
|
||||
If the entry has no per-node counter(or not show in the
|
||||
mempry.numa_stat). We use 'npn'(non-per-node) as the tag
|
||||
to indicate that it will not show in the mempry.numa_stat.
|
||||
|
||||
anon
|
||||
Amount of memory used in anonymous mappings such as
|
||||
brk(), sbrk(), and mmap(MAP_ANONYMOUS)
|
||||
@@ -1270,15 +1274,11 @@ PAGE_SIZE multiple when read back.
|
||||
kernel_stack
|
||||
Amount of memory allocated to kernel stacks.
|
||||
|
||||
slab
|
||||
Amount of memory used for storing in-kernel data
|
||||
structures.
|
||||
|
||||
percpu
|
||||
percpu(npn)
|
||||
Amount of memory used for storing per-cpu kernel
|
||||
data structures.
|
||||
|
||||
sock
|
||||
sock(npn)
|
||||
Amount of memory used in network transmission buffers
|
||||
|
||||
shmem
|
||||
@@ -1318,56 +1318,96 @@ PAGE_SIZE multiple when read back.
|
||||
Part of "slab" that cannot be reclaimed on memory
|
||||
pressure.
|
||||
|
||||
pgfault
|
||||
Total number of page faults incurred
|
||||
slab(npn)
|
||||
Amount of memory used for storing in-kernel data
|
||||
structures.
|
||||
|
||||
pgmajfault
|
||||
Number of major page faults incurred
|
||||
workingset_refault_anon
|
||||
Number of refaults of previously evicted anonymous pages.
|
||||
|
||||
workingset_refault
|
||||
Number of refaults of previously evicted pages
|
||||
workingset_refault_file
|
||||
Number of refaults of previously evicted file pages.
|
||||
|
||||
workingset_activate
|
||||
Number of refaulted pages that were immediately activated
|
||||
workingset_activate_anon
|
||||
Number of refaulted anonymous pages that were immediately
|
||||
activated.
|
||||
|
||||
workingset_restore
|
||||
Number of restored pages which have been detected as an active
|
||||
workingset before they got reclaimed.
|
||||
workingset_activate_file
|
||||
Number of refaulted file pages that were immediately activated.
|
||||
|
||||
workingset_restore_anon
|
||||
Number of restored anonymous pages which have been detected as
|
||||
an active workingset before they got reclaimed.
|
||||
|
||||
workingset_restore_file
|
||||
Number of restored file pages which have been detected as an
|
||||
active workingset before they got reclaimed.
|
||||
|
||||
workingset_nodereclaim
|
||||
Number of times a shadow node has been reclaimed
|
||||
|
||||
pgrefill
|
||||
pgfault(npn)
|
||||
Total number of page faults incurred
|
||||
|
||||
pgmajfault(npn)
|
||||
Number of major page faults incurred
|
||||
|
||||
pgrefill(npn)
|
||||
Amount of scanned pages (in an active LRU list)
|
||||
|
||||
pgscan
|
||||
pgscan(npn)
|
||||
Amount of scanned pages (in an inactive LRU list)
|
||||
|
||||
pgsteal
|
||||
pgsteal(npn)
|
||||
Amount of reclaimed pages
|
||||
|
||||
pgactivate
|
||||
pgactivate(npn)
|
||||
Amount of pages moved to the active LRU list
|
||||
|
||||
pgdeactivate
|
||||
pgdeactivate(npn)
|
||||
Amount of pages moved to the inactive LRU list
|
||||
|
||||
pglazyfree
|
||||
pglazyfree(npn)
|
||||
Amount of pages postponed to be freed under memory pressure
|
||||
|
||||
pglazyfreed
|
||||
pglazyfreed(npn)
|
||||
Amount of reclaimed lazyfree pages
|
||||
|
||||
thp_fault_alloc
|
||||
thp_fault_alloc(npn)
|
||||
Number of transparent hugepages which were allocated to satisfy
|
||||
a page fault. This counter is not present when CONFIG_TRANSPARENT_HUGEPAGE
|
||||
is not set.
|
||||
|
||||
thp_collapse_alloc
|
||||
thp_collapse_alloc(npn)
|
||||
Number of transparent hugepages which were allocated to allow
|
||||
collapsing an existing range of pages. This counter is not
|
||||
present when CONFIG_TRANSPARENT_HUGEPAGE is not set.
|
||||
|
||||
memory.numa_stat
|
||||
A read-only nested-keyed file which exists on non-root cgroups.
|
||||
|
||||
This breaks down the cgroup's memory footprint into different
|
||||
types of memory, type-specific details, and other information
|
||||
per node on the state of the memory management system.
|
||||
|
||||
This is useful for providing visibility into the NUMA locality
|
||||
information within an memcg since the pages are allowed to be
|
||||
allocated from any physical node. One of the use case is evaluating
|
||||
application performance by combining this information with the
|
||||
application's CPU allocation.
|
||||
|
||||
All memory amounts are in bytes.
|
||||
|
||||
The output format of memory.numa_stat is::
|
||||
|
||||
type N0=<bytes in node 0> N1=<bytes in node 1> ...
|
||||
|
||||
The entries are ordered to be human readable, and new entries
|
||||
can show up in the middle. Don't rely on items remaining in a
|
||||
fixed position; use the keys to look up specific values!
|
||||
|
||||
The entries can refer to the memory.stat.
|
||||
|
||||
memory.swap.current
|
||||
A read-only single value file which exists on non-root
|
||||
cgroups.
|
||||
|
||||
@@ -61,43 +61,46 @@ will lead to quite erratic information inside ``/proc/stat``::
|
||||
|
||||
static volatile sig_atomic_t stop;
|
||||
|
||||
static void sighandler (int signr)
|
||||
static void sighandler(int signr)
|
||||
{
|
||||
(void) signr;
|
||||
stop = 1;
|
||||
(void) signr;
|
||||
stop = 1;
|
||||
}
|
||||
|
||||
static unsigned long hog (unsigned long niters)
|
||||
{
|
||||
stop = 0;
|
||||
while (!stop && --niters);
|
||||
return niters;
|
||||
stop = 0;
|
||||
while (!stop && --niters);
|
||||
return niters;
|
||||
}
|
||||
|
||||
int main (void)
|
||||
{
|
||||
int i;
|
||||
struct itimerval it = { .it_interval = { .tv_sec = 0, .tv_usec = 1 },
|
||||
.it_value = { .tv_sec = 0, .tv_usec = 1 } };
|
||||
sigset_t set;
|
||||
unsigned long v[HIST];
|
||||
double tmp = 0.0;
|
||||
unsigned long n;
|
||||
signal (SIGALRM, &sighandler);
|
||||
setitimer (ITIMER_REAL, &it, NULL);
|
||||
int i;
|
||||
struct itimerval it = {
|
||||
.it_interval = { .tv_sec = 0, .tv_usec = 1 },
|
||||
.it_value = { .tv_sec = 0, .tv_usec = 1 } };
|
||||
sigset_t set;
|
||||
unsigned long v[HIST];
|
||||
double tmp = 0.0;
|
||||
unsigned long n;
|
||||
signal(SIGALRM, &sighandler);
|
||||
setitimer(ITIMER_REAL, &it, NULL);
|
||||
|
||||
hog (ULONG_MAX);
|
||||
for (i = 0; i < HIST; ++i) v[i] = ULONG_MAX - hog (ULONG_MAX);
|
||||
for (i = 0; i < HIST; ++i) tmp += v[i];
|
||||
tmp /= HIST;
|
||||
n = tmp - (tmp / 3.0);
|
||||
hog (ULONG_MAX);
|
||||
for (i = 0; i < HIST; ++i) v[i] = ULONG_MAX - hog(ULONG_MAX);
|
||||
for (i = 0; i < HIST; ++i) tmp += v[i];
|
||||
tmp /= HIST;
|
||||
n = tmp - (tmp / 3.0);
|
||||
|
||||
sigemptyset (&set);
|
||||
sigaddset (&set, SIGALRM);
|
||||
sigemptyset(&set);
|
||||
sigaddset(&set, SIGALRM);
|
||||
|
||||
for (;;) {
|
||||
hog (n);
|
||||
sigwait (&set, &i);
|
||||
}
|
||||
return 0;
|
||||
for (;;) {
|
||||
hog(n);
|
||||
sigwait(&set, &i);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -67,7 +67,7 @@ Parameters::
|
||||
the value passed in <key_size>.
|
||||
|
||||
<key_type>
|
||||
Either 'logon' or 'user' kernel key type.
|
||||
Either 'logon', 'user' or 'encrypted' kernel key type.
|
||||
|
||||
<key_description>
|
||||
The kernel keyring key description crypt target should look for
|
||||
@@ -121,6 +121,14 @@ submit_from_crypt_cpus
|
||||
thread because it benefits CFQ to have writes submitted using the
|
||||
same context.
|
||||
|
||||
no_read_workqueue
|
||||
Bypass dm-crypt internal workqueue and process read requests synchronously.
|
||||
|
||||
no_write_workqueue
|
||||
Bypass dm-crypt internal workqueue and process write requests synchronously.
|
||||
This option is automatically enabled for host-managed zoned block devices
|
||||
(e.g. host-managed SMR hard-disks).
|
||||
|
||||
integrity:<bytes>:<type>
|
||||
The device requires additional <bytes> metadata per-sector stored
|
||||
in per-bio integrity structure. This metadata must by provided
|
||||
|
||||
@@ -156,7 +156,6 @@ against. Possible keywords are:::
|
||||
``line-range`` cannot contain space, e.g.
|
||||
"1-30" is valid range but "1 - 30" is not.
|
||||
|
||||
``module=foo`` combined keyword=value form is interchangably accepted
|
||||
|
||||
The meanings of each keyword are:
|
||||
|
||||
|
||||
50
Documentation/admin-guide/gpio/gpio-mockup.rst
Normal file
50
Documentation/admin-guide/gpio/gpio-mockup.rst
Normal file
@@ -0,0 +1,50 @@
|
||||
.. SPDX-License-Identifier: GPL-2.0-only
|
||||
|
||||
GPIO Testing Driver
|
||||
===================
|
||||
|
||||
The GPIO Testing Driver (gpio-mockup) provides a way to create simulated GPIO
|
||||
chips for testing purposes. The lines exposed by these chips can be accessed
|
||||
using the standard GPIO character device interface as well as manipulated
|
||||
using the dedicated debugfs directory structure.
|
||||
|
||||
Creating simulated chips using module params
|
||||
--------------------------------------------
|
||||
|
||||
When loading the gpio-mockup driver a number of parameters can be passed to the
|
||||
module.
|
||||
|
||||
gpio_mockup_ranges
|
||||
|
||||
This parameter takes an argument in the form of an array of integer
|
||||
pairs. Each pair defines the base GPIO number (if any) and the number
|
||||
of lines exposed by the chip. If the base GPIO is -1, the gpiolib
|
||||
will assign it automatically.
|
||||
|
||||
Example: gpio_mockup_ranges=-1,8,-1,16,405,4
|
||||
|
||||
The line above creates three chips. The first one will expose 8 lines,
|
||||
the second 16 and the third 4. The base GPIO for the third chip is set
|
||||
to 405 while for two first chips it will be assigned automatically.
|
||||
|
||||
gpio_named_lines
|
||||
|
||||
This parameter doesn't take any arguments. It lets the driver know that
|
||||
GPIO lines exposed by it should be named.
|
||||
|
||||
The name format is: gpio-mockup-X-Y where X is mockup chip's ID
|
||||
and Y is the line offset.
|
||||
|
||||
Manipulating simulated lines
|
||||
----------------------------
|
||||
|
||||
Each mockup chip creates its own subdirectory in /sys/kernel/debug/gpio-mockup/.
|
||||
The directory is named after the chip's label. A symlink is also created, named
|
||||
after the chip's name, which points to the label directory.
|
||||
|
||||
Inside each subdirectory, there's a separate attribute for each GPIO line. The
|
||||
name of the attribute represents the line's offset in the chip.
|
||||
|
||||
Reading from a line attribute returns the current value. Writing to it (0 or 1)
|
||||
changes the configuration of the simulated pull-up/pull-down resistor
|
||||
(1 - pull-up, 0 - pull-down).
|
||||
@@ -9,6 +9,7 @@ gpio
|
||||
|
||||
gpio-aggregator
|
||||
sysfs
|
||||
gpio-mockup
|
||||
|
||||
.. only:: subproject and html
|
||||
|
||||
|
||||
@@ -170,57 +170,82 @@ document trapinfo
|
||||
address the kernel panicked.
|
||||
end
|
||||
|
||||
define dump_log_idx
|
||||
set $idx = $arg0
|
||||
if ($argc > 1)
|
||||
set $prev_flags = $arg1
|
||||
define dump_record
|
||||
set var $desc = $arg0
|
||||
set var $info = $arg1
|
||||
if ($argc > 2)
|
||||
set var $prev_flags = $arg2
|
||||
else
|
||||
set $prev_flags = 0
|
||||
end
|
||||
set $msg = ((struct printk_log *) (log_buf + $idx))
|
||||
set $prefix = 1
|
||||
set $newline = 1
|
||||
set $log = log_buf + $idx + sizeof(*$msg)
|
||||
|
||||
# prev & LOG_CONT && !(msg->flags & LOG_PREIX)
|
||||
if (($prev_flags & 8) && !($msg->flags & 4))
|
||||
set $prefix = 0
|
||||
set var $prev_flags = 0
|
||||
end
|
||||
|
||||
# msg->flags & LOG_CONT
|
||||
if ($msg->flags & 8)
|
||||
set var $prefix = 1
|
||||
set var $newline = 1
|
||||
|
||||
set var $begin = $desc->text_blk_lpos.begin % (1U << prb->text_data_ring.size_bits)
|
||||
set var $next = $desc->text_blk_lpos.next % (1U << prb->text_data_ring.size_bits)
|
||||
|
||||
# handle data-less record
|
||||
if ($begin & 1)
|
||||
set var $text_len = 0
|
||||
set var $log = ""
|
||||
else
|
||||
# handle wrapping data block
|
||||
if ($begin > $next)
|
||||
set var $begin = 0
|
||||
end
|
||||
|
||||
# skip over descriptor id
|
||||
set var $begin = $begin + sizeof(long)
|
||||
|
||||
# handle truncated message
|
||||
if ($next - $begin < $info->text_len)
|
||||
set var $text_len = $next - $begin
|
||||
else
|
||||
set var $text_len = $info->text_len
|
||||
end
|
||||
|
||||
set var $log = &prb->text_data_ring.data[$begin]
|
||||
end
|
||||
|
||||
# prev & LOG_CONT && !(info->flags & LOG_PREIX)
|
||||
if (($prev_flags & 8) && !($info->flags & 4))
|
||||
set var $prefix = 0
|
||||
end
|
||||
|
||||
# info->flags & LOG_CONT
|
||||
if ($info->flags & 8)
|
||||
# (prev & LOG_CONT && !(prev & LOG_NEWLINE))
|
||||
if (($prev_flags & 8) && !($prev_flags & 2))
|
||||
set $prefix = 0
|
||||
set var $prefix = 0
|
||||
end
|
||||
# (!(msg->flags & LOG_NEWLINE))
|
||||
if (!($msg->flags & 2))
|
||||
set $newline = 0
|
||||
# (!(info->flags & LOG_NEWLINE))
|
||||
if (!($info->flags & 2))
|
||||
set var $newline = 0
|
||||
end
|
||||
end
|
||||
|
||||
if ($prefix)
|
||||
printf "[%5lu.%06lu] ", $msg->ts_nsec / 1000000000, $msg->ts_nsec % 1000000000
|
||||
printf "[%5lu.%06lu] ", $info->ts_nsec / 1000000000, $info->ts_nsec % 1000000000
|
||||
end
|
||||
if ($msg->text_len != 0)
|
||||
eval "printf \"%%%d.%ds\", $log", $msg->text_len, $msg->text_len
|
||||
if ($text_len)
|
||||
eval "printf \"%%%d.%ds\", $log", $text_len, $text_len
|
||||
end
|
||||
if ($newline)
|
||||
printf "\n"
|
||||
end
|
||||
if ($msg->dict_len > 0)
|
||||
set $dict = $log + $msg->text_len
|
||||
set $idx = 0
|
||||
set $line = 1
|
||||
while ($idx < $msg->dict_len)
|
||||
if ($line)
|
||||
printf " "
|
||||
set $line = 0
|
||||
end
|
||||
set $c = $dict[$idx]
|
||||
|
||||
# handle dictionary data
|
||||
|
||||
set var $dict = &$info->dev_info.subsystem[0]
|
||||
set var $dict_len = sizeof($info->dev_info.subsystem)
|
||||
if ($dict[0] != '\0')
|
||||
printf " SUBSYSTEM="
|
||||
set var $idx = 0
|
||||
while ($idx < $dict_len)
|
||||
set var $c = $dict[$idx]
|
||||
if ($c == '\0')
|
||||
printf "\n"
|
||||
set $line = 1
|
||||
loop_break
|
||||
else
|
||||
if ($c < ' ' || $c >= 127 || $c == '\\')
|
||||
printf "\\x%02x", $c
|
||||
@@ -228,33 +253,67 @@ define dump_log_idx
|
||||
printf "%c", $c
|
||||
end
|
||||
end
|
||||
set $idx = $idx + 1
|
||||
set var $idx = $idx + 1
|
||||
end
|
||||
printf "\n"
|
||||
end
|
||||
|
||||
set var $dict = &$info->dev_info.device[0]
|
||||
set var $dict_len = sizeof($info->dev_info.device)
|
||||
if ($dict[0] != '\0')
|
||||
printf " DEVICE="
|
||||
set var $idx = 0
|
||||
while ($idx < $dict_len)
|
||||
set var $c = $dict[$idx]
|
||||
if ($c == '\0')
|
||||
loop_break
|
||||
else
|
||||
if ($c < ' ' || $c >= 127 || $c == '\\')
|
||||
printf "\\x%02x", $c
|
||||
else
|
||||
printf "%c", $c
|
||||
end
|
||||
end
|
||||
set var $idx = $idx + 1
|
||||
end
|
||||
printf "\n"
|
||||
end
|
||||
end
|
||||
document dump_log_idx
|
||||
Dump a single log given its index in the log buffer. The first
|
||||
parameter is the index into log_buf, the second is optional and
|
||||
specified the previous log buffer's flags, used for properly
|
||||
formatting continued lines.
|
||||
document dump_record
|
||||
Dump a single record. The first parameter is the descriptor,
|
||||
the second parameter is the info, the third parameter is
|
||||
optional and specifies the previous record's flags, used for
|
||||
properly formatting continued lines.
|
||||
end
|
||||
|
||||
define dmesg
|
||||
set $i = log_first_idx
|
||||
set $end_idx = log_first_idx
|
||||
set $prev_flags = 0
|
||||
# definitions from kernel/printk/printk_ringbuffer.h
|
||||
set var $desc_committed = 1
|
||||
set var $desc_finalized = 2
|
||||
set var $desc_sv_bits = sizeof(long) * 8
|
||||
set var $desc_flags_shift = $desc_sv_bits - 2
|
||||
set var $desc_flags_mask = 3 << $desc_flags_shift
|
||||
set var $id_mask = ~$desc_flags_mask
|
||||
|
||||
set var $desc_count = 1U << prb->desc_ring.count_bits
|
||||
set var $prev_flags = 0
|
||||
|
||||
set var $id = prb->desc_ring.tail_id.counter
|
||||
set var $end_id = prb->desc_ring.head_id.counter
|
||||
|
||||
while (1)
|
||||
set $msg = ((struct printk_log *) (log_buf + $i))
|
||||
if ($msg->len == 0)
|
||||
set $i = 0
|
||||
else
|
||||
dump_log_idx $i $prev_flags
|
||||
set $i = $i + $msg->len
|
||||
set $prev_flags = $msg->flags
|
||||
set var $desc = &prb->desc_ring.descs[$id % $desc_count]
|
||||
set var $info = &prb->desc_ring.infos[$id % $desc_count]
|
||||
|
||||
# skip non-committed record
|
||||
set var $state = 3 & ($desc->state_var.counter >> $desc_flags_shift)
|
||||
if ($state == $desc_committed || $state == $desc_finalized)
|
||||
dump_record $desc $info $prev_flags
|
||||
set var $prev_flags = $info->flags
|
||||
end
|
||||
if ($i == $end_idx)
|
||||
|
||||
set var $id = ($id + 1) & $id_mask
|
||||
if ($id == $end_id)
|
||||
loop_break
|
||||
end
|
||||
end
|
||||
|
||||
@@ -509,9 +509,12 @@ ELF32-format headers using the --elf32-core-headers kernel option on the
|
||||
dump kernel.
|
||||
|
||||
You can also use the Crash utility to analyze dump files in Kdump
|
||||
format. Crash is available on Dave Anderson's site at the following URL:
|
||||
format. Crash is available at the following URL:
|
||||
|
||||
http://people.redhat.com/~anderson/
|
||||
https://github.com/crash-utility/crash
|
||||
|
||||
Crash document can be found at:
|
||||
https://crash-utility.github.io/
|
||||
|
||||
Trigger Kdump on WARN()
|
||||
=======================
|
||||
|
||||
@@ -189,50 +189,123 @@ from this.
|
||||
Free areas descriptor. User-space tools use this value to iterate the
|
||||
free_area ranges. MAX_ORDER is used by the zone buddy allocator.
|
||||
|
||||
log_first_idx
|
||||
-------------
|
||||
prb
|
||||
---
|
||||
|
||||
Index of the first record stored in the buffer log_buf. Used by
|
||||
user-space tools to read the strings in the log_buf.
|
||||
A pointer to the printk ringbuffer (struct printk_ringbuffer). This
|
||||
may be pointing to the static boot ringbuffer or the dynamically
|
||||
allocated ringbuffer, depending on when the the core dump occurred.
|
||||
Used by user-space tools to read the active kernel log buffer.
|
||||
|
||||
log_buf
|
||||
-------
|
||||
printk_rb_static
|
||||
----------------
|
||||
|
||||
Console output is written to the ring buffer log_buf at index
|
||||
log_first_idx. Used to get the kernel log.
|
||||
A pointer to the static boot printk ringbuffer. If @prb has a
|
||||
different value, this is useful for viewing the initial boot messages,
|
||||
which may have been overwritten in the dynamically allocated
|
||||
ringbuffer.
|
||||
|
||||
log_buf_len
|
||||
-----------
|
||||
|
||||
log_buf's length.
|
||||
|
||||
clear_idx
|
||||
clear_seq
|
||||
---------
|
||||
|
||||
The index that the next printk() record to read after the last clear
|
||||
command. It indicates the first record after the last SYSLOG_ACTION
|
||||
_CLEAR, like issued by 'dmesg -c'. Used by user-space tools to dump
|
||||
the dmesg log.
|
||||
The sequence number of the printk() record after the last clear
|
||||
command. It indicates the first record after the last
|
||||
SYSLOG_ACTION_CLEAR, like issued by 'dmesg -c'. Used by user-space
|
||||
tools to dump a subset of the dmesg log.
|
||||
|
||||
log_next_idx
|
||||
------------
|
||||
printk_ringbuffer
|
||||
-----------------
|
||||
|
||||
The index of the next record to store in the buffer log_buf. Used to
|
||||
compute the index of the current buffer position.
|
||||
The size of a printk_ringbuffer structure. This structure contains all
|
||||
information required for accessing the various components of the
|
||||
kernel log buffer.
|
||||
|
||||
printk_log
|
||||
----------
|
||||
(printk_ringbuffer, desc_ring|text_data_ring|dict_data_ring|fail)
|
||||
-----------------------------------------------------------------
|
||||
|
||||
The size of a structure printk_log. Used to compute the size of
|
||||
messages, and extract dmesg log. It encapsulates header information for
|
||||
log_buf, such as timestamp, syslog level, etc.
|
||||
Offsets for the various components of the printk ringbuffer. Used by
|
||||
user-space tools to view the kernel log buffer without requiring the
|
||||
declaration of the structure.
|
||||
|
||||
(printk_log, ts_nsec|len|text_len|dict_len)
|
||||
-------------------------------------------
|
||||
prb_desc_ring
|
||||
-------------
|
||||
|
||||
It represents field offsets in struct printk_log. User space tools
|
||||
parse it and check whether the values of printk_log's members have been
|
||||
changed.
|
||||
The size of the prb_desc_ring structure. This structure contains
|
||||
information about the set of record descriptors.
|
||||
|
||||
(prb_desc_ring, count_bits|descs|head_id|tail_id)
|
||||
-------------------------------------------------
|
||||
|
||||
Offsets for the fields describing the set of record descriptors. Used
|
||||
by user-space tools to be able to traverse the descriptors without
|
||||
requiring the declaration of the structure.
|
||||
|
||||
prb_desc
|
||||
--------
|
||||
|
||||
The size of the prb_desc structure. This structure contains
|
||||
information about a single record descriptor.
|
||||
|
||||
(prb_desc, info|state_var|text_blk_lpos|dict_blk_lpos)
|
||||
------------------------------------------------------
|
||||
|
||||
Offsets for the fields describing a record descriptors. Used by
|
||||
user-space tools to be able to read descriptors without requiring
|
||||
the declaration of the structure.
|
||||
|
||||
prb_data_blk_lpos
|
||||
-----------------
|
||||
|
||||
The size of the prb_data_blk_lpos structure. This structure contains
|
||||
information about where the text or dictionary data (data block) is
|
||||
located within the respective data ring.
|
||||
|
||||
(prb_data_blk_lpos, begin|next)
|
||||
-------------------------------
|
||||
|
||||
Offsets for the fields describing the location of a data block. Used
|
||||
by user-space tools to be able to locate data blocks without
|
||||
requiring the declaration of the structure.
|
||||
|
||||
printk_info
|
||||
-----------
|
||||
|
||||
The size of the printk_info structure. This structure contains all
|
||||
the meta-data for a record.
|
||||
|
||||
(printk_info, seq|ts_nsec|text_len|dict_len|caller_id)
|
||||
------------------------------------------------------
|
||||
|
||||
Offsets for the fields providing the meta-data for a record. Used by
|
||||
user-space tools to be able to read the information without requiring
|
||||
the declaration of the structure.
|
||||
|
||||
prb_data_ring
|
||||
-------------
|
||||
|
||||
The size of the prb_data_ring structure. This structure contains
|
||||
information about a set of data blocks.
|
||||
|
||||
(prb_data_ring, size_bits|data|head_lpos|tail_lpos)
|
||||
---------------------------------------------------
|
||||
|
||||
Offsets for the fields describing a set of data blocks. Used by
|
||||
user-space tools to be able to access the data blocks without
|
||||
requiring the declaration of the structure.
|
||||
|
||||
atomic_long_t
|
||||
-------------
|
||||
|
||||
The size of the atomic_long_t structure. Used by user-space tools to
|
||||
be able to copy the full structure, regardless of its
|
||||
architecture-specific implementation.
|
||||
|
||||
(atomic_long_t, counter)
|
||||
------------------------
|
||||
|
||||
Offset for the long value of an atomic_long_t variable. Used by
|
||||
user-space tools to access the long value without requiring the
|
||||
architecture-specific declaration.
|
||||
|
||||
(free_area.free_list, MIGRATE_TYPES)
|
||||
------------------------------------
|
||||
|
||||
@@ -577,7 +577,7 @@
|
||||
loops can be debugged more effectively on production
|
||||
systems.
|
||||
|
||||
clearcpuid=BITNUM [X86]
|
||||
clearcpuid=BITNUM[,BITNUM...] [X86]
|
||||
Disable CPUID feature X for the kernel. See
|
||||
arch/x86/include/asm/cpufeatures.h for the valid bit
|
||||
numbers. Note the Linux specific bits are not necessarily
|
||||
@@ -591,13 +591,24 @@
|
||||
some critical bits.
|
||||
|
||||
cma=nn[MG]@[start[MG][-end[MG]]]
|
||||
[ARM,X86,KNL]
|
||||
[KNL,CMA]
|
||||
Sets the size of kernel global memory area for
|
||||
contiguous memory allocations and optionally the
|
||||
placement constraint by the physical address range of
|
||||
memory allocations. A value of 0 disables CMA
|
||||
altogether. For more information, see
|
||||
include/linux/dma-contiguous.h
|
||||
kernel/dma/contiguous.c
|
||||
|
||||
cma_pernuma=nn[MG]
|
||||
[ARM64,KNL]
|
||||
Sets the size of kernel per-numa memory area for
|
||||
contiguous memory allocations. A value of 0 disables
|
||||
per-numa CMA altogether. And If this option is not
|
||||
specificed, the default value is 0.
|
||||
With per-numa CMA enabled, DMA users on node nid will
|
||||
first try to allocate buffer from the pernuma area
|
||||
which is located in node nid, if the allocation fails,
|
||||
they will fallback to the global default memory area.
|
||||
|
||||
cmo_free_hint= [PPC] Format: { yes | no }
|
||||
Specify whether pages are marked as being inactive
|
||||
@@ -940,7 +951,7 @@
|
||||
Arch Perfmon v4 (Skylake and newer).
|
||||
|
||||
disable_ddw [PPC/PSERIES]
|
||||
Disable Dynamic DMA Window support. Use this if
|
||||
Disable Dynamic DMA Window support. Use this
|
||||
to workaround buggy firmware.
|
||||
|
||||
disable_ipv6= [IPV6]
|
||||
@@ -1019,7 +1030,7 @@
|
||||
what data is available or for reverse-engineering.
|
||||
|
||||
dyndbg[="val"] [KNL,DYNAMIC_DEBUG]
|
||||
module.dyndbg[="val"]
|
||||
<module>.dyndbg[="val"]
|
||||
Enable debug messages at boot time. See
|
||||
Documentation/admin-guide/dynamic-debug-howto.rst
|
||||
for details.
|
||||
@@ -1027,7 +1038,7 @@
|
||||
nopku [X86] Disable Memory Protection Keys CPU feature found
|
||||
in some Intel CPUs.
|
||||
|
||||
module.async_probe [KNL]
|
||||
<module>.async_probe [KNL]
|
||||
Enable asynchronous probe on this module.
|
||||
|
||||
early_ioremap_debug [KNL]
|
||||
@@ -1332,12 +1343,18 @@
|
||||
current integrity status.
|
||||
|
||||
failslab=
|
||||
fail_usercopy=
|
||||
fail_page_alloc=
|
||||
fail_make_request=[KNL]
|
||||
General fault injection mechanism.
|
||||
Format: <interval>,<probability>,<space>,<times>
|
||||
See also Documentation/fault-injection/.
|
||||
|
||||
fb_tunnels= [NET]
|
||||
Format: { initns | none }
|
||||
See Documentation/admin-guide/sysctl/net.rst for
|
||||
fb_tunnels_only_for_init_ns
|
||||
|
||||
floppy= [HW]
|
||||
See Documentation/admin-guide/blockdev/floppy.rst.
|
||||
|
||||
@@ -1956,7 +1973,7 @@
|
||||
1 - Bypass the IOMMU for DMA.
|
||||
unset - Use value of CONFIG_IOMMU_DEFAULT_PASSTHROUGH.
|
||||
|
||||
io7= [HW] IO7 for Marvel based alpha systems
|
||||
io7= [HW] IO7 for Marvel-based Alpha systems
|
||||
See comment before marvel_specify_io7 in
|
||||
arch/alpha/kernel/core_marvel.c.
|
||||
|
||||
@@ -2177,7 +2194,7 @@
|
||||
kgdbwait [KGDB] Stop kernel execution and enter the
|
||||
kernel debugger at the earliest opportunity.
|
||||
|
||||
kmac= [MIPS] korina ethernet MAC address.
|
||||
kmac= [MIPS] Korina ethernet MAC address.
|
||||
Configure the RouterBoard 532 series on-chip
|
||||
Ethernet adapter MAC address.
|
||||
|
||||
@@ -2258,6 +2275,14 @@
|
||||
[KVM,ARM] Allow use of GICv4 for direct injection of
|
||||
LPIs.
|
||||
|
||||
kvm_cma_resv_ratio=n [PPC]
|
||||
Reserves given percentage from system memory area for
|
||||
contiguous memory allocation for KVM hash pagetable
|
||||
allocation.
|
||||
By default it reserves 5% of total system memory.
|
||||
Format: <integer>
|
||||
Default: 5
|
||||
|
||||
kvm-intel.ept= [KVM,Intel] Disable extended page tables
|
||||
(virtualized MMU) support on capable Intel chips.
|
||||
Default is 1 (enabled)
|
||||
@@ -2367,9 +2392,10 @@
|
||||
lapic [X86-32,APIC] Enable the local APIC even if BIOS
|
||||
disabled it.
|
||||
|
||||
lapic= [X86,APIC] "notscdeadline" Do not use TSC deadline
|
||||
lapic= [X86,APIC] Do not use TSC deadline
|
||||
value for LAPIC timer one-shot implementation. Default
|
||||
back to the programmable timer unit in the LAPIC.
|
||||
Format: notscdeadline
|
||||
|
||||
lapic_timer_c2_ok [X86,APIC] trust the local apic timer
|
||||
in C2 power state.
|
||||
@@ -2441,8 +2467,7 @@
|
||||
|
||||
memblock=debug [KNL] Enable memblock debug messages.
|
||||
|
||||
load_ramdisk= [RAM] List of ramdisks to load from floppy
|
||||
See Documentation/admin-guide/blockdev/ramdisk.rst.
|
||||
load_ramdisk= [RAM] [Deprecated]
|
||||
|
||||
lockd.nlm_grace_period=P [NFS] Assign grace period.
|
||||
Format: <integer>
|
||||
@@ -2579,8 +2604,8 @@
|
||||
(machvec) in a generic kernel.
|
||||
Example: machvec=hpzx1
|
||||
|
||||
machtype= [Loongson] Share the same kernel image file between different
|
||||
yeeloong laptop.
|
||||
machtype= [Loongson] Share the same kernel image file between
|
||||
different yeeloong laptops.
|
||||
Example: machtype=lemote-yeeloong-2f-7inch
|
||||
|
||||
max_addr=nn[KMG] [KNL,BOOT,ia64] All physical memory greater
|
||||
@@ -3070,6 +3095,10 @@
|
||||
and gids from such clients. This is intended to ease
|
||||
migration from NFSv2/v3.
|
||||
|
||||
nmi_backtrace.backtrace_idle [KNL]
|
||||
Dump stacks even of idle CPUs in response to an
|
||||
NMI stack-backtrace request.
|
||||
|
||||
nmi_debug= [KNL,SH] Specify one or more actions to take
|
||||
when a NMI is triggered.
|
||||
Format: [state][,regs][,debounce][,die]
|
||||
@@ -3185,7 +3214,7 @@
|
||||
register save and restore. The kernel will only save
|
||||
legacy floating-point registers on task switch.
|
||||
|
||||
nohugeiomap [KNL,X86,PPC] Disable kernel huge I/O mappings.
|
||||
nohugeiomap [KNL,X86,PPC,ARM64] Disable kernel huge I/O mappings.
|
||||
|
||||
nosmt [KNL,S390] Disable symmetric multithreading (SMT).
|
||||
Equivalent to smt=1.
|
||||
@@ -3921,9 +3950,7 @@
|
||||
Param: <number> - step/bucket size as a power of 2 for
|
||||
statistical time based profiling.
|
||||
|
||||
prompt_ramdisk= [RAM] List of RAM disks to prompt for floppy disk
|
||||
before loading.
|
||||
See Documentation/admin-guide/blockdev/ramdisk.rst.
|
||||
prompt_ramdisk= [RAM] [Deprecated]
|
||||
|
||||
prot_virt= [S390] enable hosting protected virtual machines
|
||||
isolated from the hypervisor (if hardware supports
|
||||
@@ -3981,6 +4008,8 @@
|
||||
ramdisk_size= [RAM] Sizes of RAM disks in kilobytes
|
||||
See Documentation/admin-guide/blockdev/ramdisk.rst.
|
||||
|
||||
ramdisk_start= [RAM] RAM disk image start address
|
||||
|
||||
random.trust_cpu={on,off}
|
||||
[KNL] Enable or disable trusting the use of the
|
||||
CPU's random number generator (if available) to
|
||||
@@ -4149,46 +4178,55 @@
|
||||
This wake_up() will be accompanied by a
|
||||
WARN_ONCE() splat and an ftrace_dump().
|
||||
|
||||
rcutree.rcu_unlock_delay= [KNL]
|
||||
In CONFIG_RCU_STRICT_GRACE_PERIOD=y kernels,
|
||||
this specifies an rcu_read_unlock()-time delay
|
||||
in microseconds. This defaults to zero.
|
||||
Larger delays increase the probability of
|
||||
catching RCU pointer leaks, that is, buggy use
|
||||
of RCU-protected pointers after the relevant
|
||||
rcu_read_unlock() has completed.
|
||||
|
||||
rcutree.sysrq_rcu= [KNL]
|
||||
Commandeer a sysrq key to dump out Tree RCU's
|
||||
rcu_node tree with an eye towards determining
|
||||
why a new grace period has not yet started.
|
||||
|
||||
rcuperf.gp_async= [KNL]
|
||||
rcuscale.gp_async= [KNL]
|
||||
Measure performance of asynchronous
|
||||
grace-period primitives such as call_rcu().
|
||||
|
||||
rcuperf.gp_async_max= [KNL]
|
||||
rcuscale.gp_async_max= [KNL]
|
||||
Specify the maximum number of outstanding
|
||||
callbacks per writer thread. When a writer
|
||||
thread exceeds this limit, it invokes the
|
||||
corresponding flavor of rcu_barrier() to allow
|
||||
previously posted callbacks to drain.
|
||||
|
||||
rcuperf.gp_exp= [KNL]
|
||||
rcuscale.gp_exp= [KNL]
|
||||
Measure performance of expedited synchronous
|
||||
grace-period primitives.
|
||||
|
||||
rcuperf.holdoff= [KNL]
|
||||
rcuscale.holdoff= [KNL]
|
||||
Set test-start holdoff period. The purpose of
|
||||
this parameter is to delay the start of the
|
||||
test until boot completes in order to avoid
|
||||
interference.
|
||||
|
||||
rcuperf.kfree_rcu_test= [KNL]
|
||||
rcuscale.kfree_rcu_test= [KNL]
|
||||
Set to measure performance of kfree_rcu() flooding.
|
||||
|
||||
rcuperf.kfree_nthreads= [KNL]
|
||||
rcuscale.kfree_nthreads= [KNL]
|
||||
The number of threads running loops of kfree_rcu().
|
||||
|
||||
rcuperf.kfree_alloc_num= [KNL]
|
||||
rcuscale.kfree_alloc_num= [KNL]
|
||||
Number of allocations and frees done in an iteration.
|
||||
|
||||
rcuperf.kfree_loops= [KNL]
|
||||
Number of loops doing rcuperf.kfree_alloc_num number
|
||||
rcuscale.kfree_loops= [KNL]
|
||||
Number of loops doing rcuscale.kfree_alloc_num number
|
||||
of allocations and frees.
|
||||
|
||||
rcuperf.nreaders= [KNL]
|
||||
rcuscale.nreaders= [KNL]
|
||||
Set number of RCU readers. The value -1 selects
|
||||
N, where N is the number of CPUs. A value
|
||||
"n" less than -1 selects N-n+1, where N is again
|
||||
@@ -4197,23 +4235,23 @@
|
||||
A value of "n" less than or equal to -N selects
|
||||
a single reader.
|
||||
|
||||
rcuperf.nwriters= [KNL]
|
||||
rcuscale.nwriters= [KNL]
|
||||
Set number of RCU writers. The values operate
|
||||
the same as for rcuperf.nreaders.
|
||||
the same as for rcuscale.nreaders.
|
||||
N, where N is the number of CPUs
|
||||
|
||||
rcuperf.perf_type= [KNL]
|
||||
rcuscale.perf_type= [KNL]
|
||||
Specify the RCU implementation to test.
|
||||
|
||||
rcuperf.shutdown= [KNL]
|
||||
rcuscale.shutdown= [KNL]
|
||||
Shut the system down after performance tests
|
||||
complete. This is useful for hands-off automated
|
||||
testing.
|
||||
|
||||
rcuperf.verbose= [KNL]
|
||||
rcuscale.verbose= [KNL]
|
||||
Enable additional printk() statements.
|
||||
|
||||
rcuperf.writer_holdoff= [KNL]
|
||||
rcuscale.writer_holdoff= [KNL]
|
||||
Write-side holdoff between grace periods,
|
||||
in microseconds. The default of zero says
|
||||
no holdoff.
|
||||
@@ -4266,6 +4304,18 @@
|
||||
are zero, rcutorture acts as if is interpreted
|
||||
they are all non-zero.
|
||||
|
||||
rcutorture.irqreader= [KNL]
|
||||
Run RCU readers from irq handlers, or, more
|
||||
accurately, from a timer handler. Not all RCU
|
||||
flavors take kindly to this sort of thing.
|
||||
|
||||
rcutorture.leakpointer= [KNL]
|
||||
Leak an RCU-protected pointer out of the reader.
|
||||
This can of course result in splats, and is
|
||||
intended to test the ability of things like
|
||||
CONFIG_RCU_STRICT_GRACE_PERIOD=y to detect
|
||||
such leaks.
|
||||
|
||||
rcutorture.n_barrier_cbs= [KNL]
|
||||
Set callbacks/threads for rcu_barrier() testing.
|
||||
|
||||
@@ -4487,8 +4537,8 @@
|
||||
refscale.shutdown= [KNL]
|
||||
Shut down the system at the end of the performance
|
||||
test. This defaults to 1 (shut it down) when
|
||||
rcuperf is built into the kernel and to 0 (leave
|
||||
it running) when rcuperf is built as a module.
|
||||
refscale is built into the kernel and to 0 (leave
|
||||
it running) when refscale is built as a module.
|
||||
|
||||
refscale.verbose= [KNL]
|
||||
Enable additional printk() statements.
|
||||
@@ -4634,6 +4684,98 @@
|
||||
Format: integer between 0 and 10
|
||||
Default is 0.
|
||||
|
||||
scftorture.holdoff= [KNL]
|
||||
Number of seconds to hold off before starting
|
||||
test. Defaults to zero for module insertion and
|
||||
to 10 seconds for built-in smp_call_function()
|
||||
tests.
|
||||
|
||||
scftorture.longwait= [KNL]
|
||||
Request ridiculously long waits randomly selected
|
||||
up to the chosen limit in seconds. Zero (the
|
||||
default) disables this feature. Please note
|
||||
that requesting even small non-zero numbers of
|
||||
seconds can result in RCU CPU stall warnings,
|
||||
softlockup complaints, and so on.
|
||||
|
||||
scftorture.nthreads= [KNL]
|
||||
Number of kthreads to spawn to invoke the
|
||||
smp_call_function() family of functions.
|
||||
The default of -1 specifies a number of kthreads
|
||||
equal to the number of CPUs.
|
||||
|
||||
scftorture.onoff_holdoff= [KNL]
|
||||
Number seconds to wait after the start of the
|
||||
test before initiating CPU-hotplug operations.
|
||||
|
||||
scftorture.onoff_interval= [KNL]
|
||||
Number seconds to wait between successive
|
||||
CPU-hotplug operations. Specifying zero (which
|
||||
is the default) disables CPU-hotplug operations.
|
||||
|
||||
scftorture.shutdown_secs= [KNL]
|
||||
The number of seconds following the start of the
|
||||
test after which to shut down the system. The
|
||||
default of zero avoids shutting down the system.
|
||||
Non-zero values are useful for automated tests.
|
||||
|
||||
scftorture.stat_interval= [KNL]
|
||||
The number of seconds between outputting the
|
||||
current test statistics to the console. A value
|
||||
of zero disables statistics output.
|
||||
|
||||
scftorture.stutter_cpus= [KNL]
|
||||
The number of jiffies to wait between each change
|
||||
to the set of CPUs under test.
|
||||
|
||||
scftorture.use_cpus_read_lock= [KNL]
|
||||
Use use_cpus_read_lock() instead of the default
|
||||
preempt_disable() to disable CPU hotplug
|
||||
while invoking one of the smp_call_function*()
|
||||
functions.
|
||||
|
||||
scftorture.verbose= [KNL]
|
||||
Enable additional printk() statements.
|
||||
|
||||
scftorture.weight_single= [KNL]
|
||||
The probability weighting to use for the
|
||||
smp_call_function_single() function with a zero
|
||||
"wait" parameter. A value of -1 selects the
|
||||
default if all other weights are -1. However,
|
||||
if at least one weight has some other value, a
|
||||
value of -1 will instead select a weight of zero.
|
||||
|
||||
scftorture.weight_single_wait= [KNL]
|
||||
The probability weighting to use for the
|
||||
smp_call_function_single() function with a
|
||||
non-zero "wait" parameter. See weight_single.
|
||||
|
||||
scftorture.weight_many= [KNL]
|
||||
The probability weighting to use for the
|
||||
smp_call_function_many() function with a zero
|
||||
"wait" parameter. See weight_single.
|
||||
Note well that setting a high probability for
|
||||
this weighting can place serious IPI load
|
||||
on the system.
|
||||
|
||||
scftorture.weight_many_wait= [KNL]
|
||||
The probability weighting to use for the
|
||||
smp_call_function_many() function with a
|
||||
non-zero "wait" parameter. See weight_single
|
||||
and weight_many.
|
||||
|
||||
scftorture.weight_all= [KNL]
|
||||
The probability weighting to use for the
|
||||
smp_call_function_all() function with a zero
|
||||
"wait" parameter. See weight_single and
|
||||
weight_many.
|
||||
|
||||
scftorture.weight_all_wait= [KNL]
|
||||
The probability weighting to use for the
|
||||
smp_call_function_all() function with a
|
||||
non-zero "wait" parameter. See weight_single
|
||||
and weight_many.
|
||||
|
||||
skew_tick= [KNL] Offset the periodic timer tick per cpu to mitigate
|
||||
xtime_lock contention on larger systems, and/or RCU lock
|
||||
contention on all systems with CONFIG_MAXSMP set.
|
||||
@@ -5828,6 +5970,21 @@
|
||||
improve timer resolution at the expense of processing
|
||||
more timer interrupts.
|
||||
|
||||
xen.event_eoi_delay= [XEN]
|
||||
How long to delay EOI handling in case of event
|
||||
storms (jiffies). Default is 10.
|
||||
|
||||
xen.event_loop_timeout= [XEN]
|
||||
After which time (jiffies) the event handling loop
|
||||
should start to delay EOI handling. Default is 2.
|
||||
|
||||
xen.fifo_events= [XEN]
|
||||
Boolean parameter to disable using fifo event handling
|
||||
even if available. Normally fifo event handling is
|
||||
preferred over the 2-level event handling, as it is
|
||||
fairer and the number of possible event channels is
|
||||
much higher. Default is on (use fifo events).
|
||||
|
||||
nopv= [X86,XEN,KVM,HYPER_V,VMWARE]
|
||||
Disables the PV optimizations forcing the guest to run
|
||||
as generic guest with no PV drivers. Currently support
|
||||
|
||||
@@ -20,13 +20,13 @@ dvb-usb-dvbsky cards list
|
||||
- 0572:0320
|
||||
* - DVBSky T680CI
|
||||
- 0572:680c
|
||||
* - MyGica Mini DVB-T2 USB Stick T230
|
||||
* - MyGica Mini DVB-(T/T2/C) USB Stick T230
|
||||
- 0572:c688
|
||||
* - MyGica Mini DVB-T2 USB Stick T230C
|
||||
* - MyGica Mini DVB-(T/T2/C) USB Stick T230C
|
||||
- 0572:c689
|
||||
* - MyGica Mini DVB-T2 USB Stick T230C Lite
|
||||
* - MyGica Mini DVB-(T/T2/C) USB Stick T230C Lite
|
||||
- 0572:c699
|
||||
* - MyGica Mini DVB-T2 USB Stick T230C v2
|
||||
* - MyGica Mini DVB-(T/T2/C) USB Stick T230C v2
|
||||
- 0572:c68a
|
||||
* - TechnoTrend TT-connect CT2-4650 CI
|
||||
- 0b48:3012
|
||||
|
||||
@@ -40,6 +40,10 @@ dvb-usb-dw2102 cards list
|
||||
- 0b48:3011
|
||||
* - TerraTec Cinergy S USB
|
||||
- 0ccd:0064
|
||||
* - Terratec Cinergy S2 PCIe Dual Port 1
|
||||
- 153b:1181
|
||||
* - Terratec Cinergy S2 PCIe Dual Port 2
|
||||
- 153b:1182
|
||||
* - Terratec Cinergy S2 USB BOX
|
||||
- 0ccd:0x0105
|
||||
* - Terratec Cinergy S2 USB HD
|
||||
|
||||
@@ -434,3 +434,7 @@ EM28xx cards list
|
||||
- PCTV DVB-S2 Stick (461e v2)
|
||||
- em28178
|
||||
- 2013:0461, 2013:0259
|
||||
* - 105
|
||||
- MyGica iGrabber
|
||||
- em2860
|
||||
- 1f4d:1abe
|
||||
|
||||
@@ -89,41 +89,41 @@ Let us take the example of ov5670 sensor connected to CSI2 port 0, for a
|
||||
Using the media contorller APIs, the ov5670 sensor is configured to send
|
||||
frames in packed raw Bayer format to IPU3 CSI2 receiver.
|
||||
|
||||
# This example assumes /dev/media0 as the CIO2 media device
|
||||
.. code-block:: none
|
||||
|
||||
export MDEV=/dev/media0
|
||||
# This example assumes /dev/media0 as the CIO2 media device
|
||||
export MDEV=/dev/media0
|
||||
|
||||
# and that ov5670 sensor is connected to i2c bus 10 with address 0x36
|
||||
# and that ov5670 sensor is connected to i2c bus 10 with address 0x36
|
||||
export SDEV=$(media-ctl -d $MDEV -e "ov5670 10-0036")
|
||||
|
||||
export SDEV=$(media-ctl -d $MDEV -e "ov5670 10-0036")
|
||||
# Establish the link for the media devices using media-ctl [#f3]_
|
||||
media-ctl -d $MDEV -l "ov5670:0 -> ipu3-csi2 0:0[1]"
|
||||
|
||||
# Establish the link for the media devices using media-ctl [#f3]_
|
||||
media-ctl -d $MDEV -l "ov5670:0 -> ipu3-csi2 0:0[1]"
|
||||
|
||||
# Set the format for the media devices
|
||||
media-ctl -d $MDEV -V "ov5670:0 [fmt:SGRBG10/2592x1944]"
|
||||
|
||||
media-ctl -d $MDEV -V "ipu3-csi2 0:0 [fmt:SGRBG10/2592x1944]"
|
||||
|
||||
media-ctl -d $MDEV -V "ipu3-csi2 0:1 [fmt:SGRBG10/2592x1944]"
|
||||
# Set the format for the media devices
|
||||
media-ctl -d $MDEV -V "ov5670:0 [fmt:SGRBG10/2592x1944]"
|
||||
media-ctl -d $MDEV -V "ipu3-csi2 0:0 [fmt:SGRBG10/2592x1944]"
|
||||
media-ctl -d $MDEV -V "ipu3-csi2 0:1 [fmt:SGRBG10/2592x1944]"
|
||||
|
||||
Once the media pipeline is configured, desired sensor specific settings
|
||||
(such as exposure and gain settings) can be set, using the yavta tool.
|
||||
|
||||
e.g
|
||||
|
||||
yavta -w 0x009e0903 444 $SDEV
|
||||
.. code-block:: none
|
||||
|
||||
yavta -w 0x009e0913 1024 $SDEV
|
||||
|
||||
yavta -w 0x009e0911 2046 $SDEV
|
||||
yavta -w 0x009e0903 444 $SDEV
|
||||
yavta -w 0x009e0913 1024 $SDEV
|
||||
yavta -w 0x009e0911 2046 $SDEV
|
||||
|
||||
Once the desired sensor settings are set, frame captures can be done as below.
|
||||
|
||||
e.g
|
||||
|
||||
yavta --data-prefix -u -c10 -n5 -I -s2592x1944 --file=/tmp/frame-#.bin \
|
||||
-f IPU3_SGRBG10 $(media-ctl -d $MDEV -e "ipu3-cio2 0")
|
||||
.. code-block:: none
|
||||
|
||||
yavta --data-prefix -u -c10 -n5 -I -s2592x1944 --file=/tmp/frame-#.bin \
|
||||
-f IPU3_SGRBG10 $(media-ctl -d $MDEV -e "ipu3-cio2 0")
|
||||
|
||||
With the above command, 10 frames are captured at 2592x1944 resolution, with
|
||||
sGRBG10 format and output as IPU3_SGRBG10 format.
|
||||
@@ -269,21 +269,21 @@ all the video nodes setup correctly.
|
||||
|
||||
Let us take "ipu3-imgu 0" subdev as an example.
|
||||
|
||||
media-ctl -d $MDEV -r
|
||||
.. code-block:: none
|
||||
|
||||
media-ctl -d $MDEV -l "ipu3-imgu 0 input":0 -> "ipu3-imgu 0":0[1]
|
||||
|
||||
media-ctl -d $MDEV -l "ipu3-imgu 0":2 -> "ipu3-imgu 0 output":0[1]
|
||||
|
||||
media-ctl -d $MDEV -l "ipu3-imgu 0":3 -> "ipu3-imgu 0 viewfinder":0[1]
|
||||
|
||||
media-ctl -d $MDEV -l "ipu3-imgu 0":4 -> "ipu3-imgu 0 3a stat":0[1]
|
||||
media-ctl -d $MDEV -r
|
||||
media-ctl -d $MDEV -l "ipu3-imgu 0 input":0 -> "ipu3-imgu 0":0[1]
|
||||
media-ctl -d $MDEV -l "ipu3-imgu 0":2 -> "ipu3-imgu 0 output":0[1]
|
||||
media-ctl -d $MDEV -l "ipu3-imgu 0":3 -> "ipu3-imgu 0 viewfinder":0[1]
|
||||
media-ctl -d $MDEV -l "ipu3-imgu 0":4 -> "ipu3-imgu 0 3a stat":0[1]
|
||||
|
||||
Also the pipe mode of the corresponding V4L2 subdev should be set as desired
|
||||
(e.g 0 for video mode or 1 for still mode) through the control id 0x009819a1 as
|
||||
below.
|
||||
|
||||
yavta -w "0x009819A1 1" /dev/v4l-subdev7
|
||||
.. code-block:: none
|
||||
|
||||
yavta -w "0x009819A1 1" /dev/v4l-subdev7
|
||||
|
||||
Certain hardware blocks in ImgU pipeline can change the frame resolution by
|
||||
cropping or scaling, these hardware blocks include Input Feeder(IF), Bayer Down
|
||||
@@ -371,30 +371,32 @@ v4l2n command can be used. This helps process the raw Bayer frames and produces
|
||||
the desired results for the main output image and the viewfinder output, in NV12
|
||||
format.
|
||||
|
||||
v4l2n --pipe=4 --load=/tmp/frame-#.bin --open=/dev/video4
|
||||
--fmt=type:VIDEO_OUTPUT_MPLANE,width=2592,height=1944,pixelformat=0X47337069
|
||||
--reqbufs=type:VIDEO_OUTPUT_MPLANE,count:1 --pipe=1 --output=/tmp/frames.out
|
||||
--open=/dev/video5
|
||||
--fmt=type:VIDEO_CAPTURE_MPLANE,width=2560,height=1920,pixelformat=NV12
|
||||
--reqbufs=type:VIDEO_CAPTURE_MPLANE,count:1 --pipe=2 --output=/tmp/frames.vf
|
||||
--open=/dev/video6
|
||||
--fmt=type:VIDEO_CAPTURE_MPLANE,width=2560,height=1920,pixelformat=NV12
|
||||
--reqbufs=type:VIDEO_CAPTURE_MPLANE,count:1 --pipe=3 --open=/dev/video7
|
||||
--output=/tmp/frames.3A --fmt=type:META_CAPTURE,?
|
||||
--reqbufs=count:1,type:META_CAPTURE --pipe=1,2,3,4 --stream=5
|
||||
.. code-block:: none
|
||||
|
||||
v4l2n --pipe=4 --load=/tmp/frame-#.bin --open=/dev/video4
|
||||
--fmt=type:VIDEO_OUTPUT_MPLANE,width=2592,height=1944,pixelformat=0X47337069 \
|
||||
--reqbufs=type:VIDEO_OUTPUT_MPLANE,count:1 --pipe=1 \
|
||||
--output=/tmp/frames.out --open=/dev/video5 \
|
||||
--fmt=type:VIDEO_CAPTURE_MPLANE,width=2560,height=1920,pixelformat=NV12 \
|
||||
--reqbufs=type:VIDEO_CAPTURE_MPLANE,count:1 --pipe=2 \
|
||||
--output=/tmp/frames.vf --open=/dev/video6 \
|
||||
--fmt=type:VIDEO_CAPTURE_MPLANE,width=2560,height=1920,pixelformat=NV12 \
|
||||
--reqbufs=type:VIDEO_CAPTURE_MPLANE,count:1 --pipe=3 --open=/dev/video7 \
|
||||
--output=/tmp/frames.3A --fmt=type:META_CAPTURE,? \
|
||||
--reqbufs=count:1,type:META_CAPTURE --pipe=1,2,3,4 --stream=5
|
||||
|
||||
You can also use yavta [#f2]_ command to do same thing as above:
|
||||
|
||||
.. code-block:: none
|
||||
|
||||
yavta --data-prefix -Bcapture-mplane -c10 -n5 -I -s2592x1944 \
|
||||
--file=frame-#.out-f NV12 /dev/video5 & \
|
||||
yavta --data-prefix -Bcapture-mplane -c10 -n5 -I -s2592x1944 \
|
||||
--file=frame-#.vf -f NV12 /dev/video6 & \
|
||||
yavta --data-prefix -Bmeta-capture -c10 -n5 -I \
|
||||
--file=frame-#.3a /dev/video7 & \
|
||||
yavta --data-prefix -Boutput-mplane -c10 -n5 -I -s2592x1944 \
|
||||
--file=/tmp/frame-in.cio2 -f IPU3_SGRBG10 /dev/video4
|
||||
yavta --data-prefix -Bcapture-mplane -c10 -n5 -I -s2592x1944 \
|
||||
--file=frame-#.out-f NV12 /dev/video5 & \
|
||||
yavta --data-prefix -Bcapture-mplane -c10 -n5 -I -s2592x1944 \
|
||||
--file=frame-#.vf -f NV12 /dev/video6 & \
|
||||
yavta --data-prefix -Bmeta-capture -c10 -n5 -I \
|
||||
--file=frame-#.3a /dev/video7 & \
|
||||
yavta --data-prefix -Boutput-mplane -c10 -n5 -I -s2592x1944 \
|
||||
--file=/tmp/frame-in.cio2 -f IPU3_SGRBG10 /dev/video4
|
||||
|
||||
where /dev/video4, /dev/video5, /dev/video6 and /dev/video7 devices point to
|
||||
input, output, viewfinder and 3A statistics video nodes respectively.
|
||||
@@ -408,7 +410,9 @@ as below.
|
||||
Main output frames
|
||||
~~~~~~~~~~~~~~~~~~
|
||||
|
||||
raw2pnm -x2560 -y1920 -fNV12 /tmp/frames.out /tmp/frames.out.ppm
|
||||
.. code-block:: none
|
||||
|
||||
raw2pnm -x2560 -y1920 -fNV12 /tmp/frames.out /tmp/frames.out.ppm
|
||||
|
||||
where 2560x1920 is output resolution, NV12 is the video format, followed
|
||||
by input frame and output PNM file.
|
||||
@@ -416,7 +420,9 @@ by input frame and output PNM file.
|
||||
Viewfinder output frames
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
raw2pnm -x2560 -y1920 -fNV12 /tmp/frames.vf /tmp/frames.vf.ppm
|
||||
.. code-block:: none
|
||||
|
||||
raw2pnm -x2560 -y1920 -fNV12 /tmp/frames.vf /tmp/frames.vf.ppm
|
||||
|
||||
where 2560x1920 is output resolution, NV12 is the video format, followed
|
||||
by input frame and output PNM file.
|
||||
@@ -482,63 +488,63 @@ Name Description
|
||||
Optical Black Correction Optical Black Correction block subtracts a pre-defined
|
||||
value from the respective pixel values to obtain better
|
||||
image quality.
|
||||
Defined in :c:type:`ipu3_uapi_obgrid_param`.
|
||||
Defined in struct ipu3_uapi_obgrid_param.
|
||||
Linearization This algo block uses linearization parameters to
|
||||
address non-linearity sensor effects. The Lookup table
|
||||
table is defined in
|
||||
:c:type:`ipu3_uapi_isp_lin_vmem_params`.
|
||||
struct ipu3_uapi_isp_lin_vmem_params.
|
||||
SHD Lens shading correction is used to correct spatial
|
||||
non-uniformity of the pixel response due to optical
|
||||
lens shading. This is done by applying a different gain
|
||||
for each pixel. The gain, black level etc are
|
||||
configured in :c:type:`ipu3_uapi_shd_config_static`.
|
||||
configured in struct ipu3_uapi_shd_config_static.
|
||||
BNR Bayer noise reduction block removes image noise by
|
||||
applying a bilateral filter.
|
||||
See :c:type:`ipu3_uapi_bnr_static_config` for details.
|
||||
See struct ipu3_uapi_bnr_static_config for details.
|
||||
ANR Advanced Noise Reduction is a block based algorithm
|
||||
that performs noise reduction in the Bayer domain. The
|
||||
convolution matrix etc can be found in
|
||||
:c:type:`ipu3_uapi_anr_config`.
|
||||
struct ipu3_uapi_anr_config.
|
||||
DM Demosaicing converts raw sensor data in Bayer format
|
||||
into RGB (Red, Green, Blue) presentation. Then add
|
||||
outputs of estimation of Y channel for following stream
|
||||
processing by Firmware. The struct is defined as
|
||||
:c:type:`ipu3_uapi_dm_config`.
|
||||
struct ipu3_uapi_dm_config.
|
||||
Color Correction Color Correction algo transforms sensor specific color
|
||||
space to the standard "sRGB" color space. This is done
|
||||
by applying 3x3 matrix defined in
|
||||
:c:type:`ipu3_uapi_ccm_mat_config`.
|
||||
Gamma correction Gamma correction :c:type:`ipu3_uapi_gamma_config` is a
|
||||
struct ipu3_uapi_ccm_mat_config.
|
||||
Gamma correction Gamma correction struct ipu3_uapi_gamma_config is a
|
||||
basic non-linear tone mapping correction that is
|
||||
applied per pixel for each pixel component.
|
||||
CSC Color space conversion transforms each pixel from the
|
||||
RGB primary presentation to YUV (Y: brightness,
|
||||
UV: Luminance) presentation. This is done by applying
|
||||
a 3x3 matrix defined in
|
||||
:c:type:`ipu3_uapi_csc_mat_config`
|
||||
struct ipu3_uapi_csc_mat_config
|
||||
CDS Chroma down sampling
|
||||
After the CSC is performed, the Chroma Down Sampling
|
||||
is applied for a UV plane down sampling by a factor
|
||||
of 2 in each direction for YUV 4:2:0 using a 4x2
|
||||
configurable filter :c:type:`ipu3_uapi_cds_params`.
|
||||
configurable filter struct ipu3_uapi_cds_params.
|
||||
CHNR Chroma noise reduction
|
||||
This block processes only the chrominance pixels and
|
||||
performs noise reduction by cleaning the high
|
||||
frequency noise.
|
||||
See struct :c:type:`ipu3_uapi_yuvp1_chnr_config`.
|
||||
See struct struct ipu3_uapi_yuvp1_chnr_config.
|
||||
TCC Total color correction as defined in struct
|
||||
:c:type:`ipu3_uapi_yuvp2_tcc_static_config`.
|
||||
struct ipu3_uapi_yuvp2_tcc_static_config.
|
||||
XNR3 eXtreme Noise Reduction V3 is the third revision of
|
||||
noise reduction algorithm used to improve image
|
||||
quality. This removes the low frequency noise in the
|
||||
captured image. Two related structs are being defined,
|
||||
:c:type:`ipu3_uapi_isp_xnr3_params` for ISP data memory
|
||||
and :c:type:`ipu3_uapi_isp_xnr3_vmem_params` for vector
|
||||
struct ipu3_uapi_isp_xnr3_params for ISP data memory
|
||||
and struct ipu3_uapi_isp_xnr3_vmem_params for vector
|
||||
memory.
|
||||
TNR Temporal Noise Reduction block compares successive
|
||||
frames in time to remove anomalies / noise in pixel
|
||||
values. :c:type:`ipu3_uapi_isp_tnr3_vmem_params` and
|
||||
:c:type:`ipu3_uapi_isp_tnr3_params` are defined for ISP
|
||||
values. struct ipu3_uapi_isp_tnr3_vmem_params and
|
||||
struct ipu3_uapi_isp_tnr3_params are defined for ISP
|
||||
vector and data memory respectively.
|
||||
======================== =======================================================
|
||||
|
||||
@@ -570,9 +576,9 @@ processor, while many others will use a set of fixed hardware blocks also
|
||||
called accelerator cluster (ACC) to crunch pixel data and produce statistics.
|
||||
|
||||
ACC parameters of individual algorithms, as defined by
|
||||
:c:type:`ipu3_uapi_acc_param`, can be chosen to be applied by the user
|
||||
space through struct :c:type:`ipu3_uapi_flags` embedded in
|
||||
:c:type:`ipu3_uapi_params` structure. For parameters that are configured as
|
||||
struct ipu3_uapi_acc_param, can be chosen to be applied by the user
|
||||
space through struct struct ipu3_uapi_flags embedded in
|
||||
struct ipu3_uapi_params structure. For parameters that are configured as
|
||||
not enabled by the user space, the corresponding structs are ignored by the
|
||||
driver, in which case the existing configuration of the algorithm will be
|
||||
preserved.
|
||||
|
||||
@@ -90,6 +90,7 @@ sta2x11_vip STA2X11 VIP Video For Linux
|
||||
tw5864 Techwell TW5864 video/audio grabber and encoder
|
||||
tw686x Intersil/Techwell TW686x
|
||||
tw68 Techwell tw68x Video For Linux
|
||||
zoran Zoran-36057/36067 JPEG codec
|
||||
================ ========================================================
|
||||
|
||||
Some of those drivers support multiple devices, as shown at the card
|
||||
@@ -105,3 +106,4 @@ lists below:
|
||||
ivtv-cardlist
|
||||
saa7134-cardlist
|
||||
saa7164-cardlist
|
||||
zoran-cardlist
|
||||
|
||||
18
Documentation/admin-guide/media/rkisp1.dot
Normal file
18
Documentation/admin-guide/media/rkisp1.dot
Normal file
@@ -0,0 +1,18 @@
|
||||
digraph board {
|
||||
rankdir=TB
|
||||
n00000001 [label="{{<port0> 0 | <port1> 1} | rkisp1_isp\n/dev/v4l-subdev0 | {<port2> 2 | <port3> 3}}", shape=Mrecord, style=filled, fillcolor=green]
|
||||
n00000001:port2 -> n00000006:port0
|
||||
n00000001:port2 -> n00000009:port0
|
||||
n00000001:port3 -> n00000014 [style=bold]
|
||||
n00000006 [label="{{<port0> 0} | rkisp1_resizer_mainpath\n/dev/v4l-subdev1 | {<port1> 1}}", shape=Mrecord, style=filled, fillcolor=green]
|
||||
n00000006:port1 -> n0000000c [style=bold]
|
||||
n00000009 [label="{{<port0> 0} | rkisp1_resizer_selfpath\n/dev/v4l-subdev2 | {<port1> 1}}", shape=Mrecord, style=filled, fillcolor=green]
|
||||
n00000009:port1 -> n00000010 [style=bold]
|
||||
n0000000c [label="rkisp1_mainpath\n/dev/video0", shape=box, style=filled, fillcolor=yellow]
|
||||
n00000010 [label="rkisp1_selfpath\n/dev/video1", shape=box, style=filled, fillcolor=yellow]
|
||||
n00000014 [label="rkisp1_stats\n/dev/video2", shape=box, style=filled, fillcolor=yellow]
|
||||
n00000018 [label="rkisp1_params\n/dev/video3", shape=box, style=filled, fillcolor=yellow]
|
||||
n00000018 -> n00000001:port1 [style=bold]
|
||||
n0000001c [label="{{} | imx219 4-0010\n/dev/v4l-subdev3 | {<port0> 0}}", shape=Mrecord, style=filled, fillcolor=green]
|
||||
n0000001c:port0 -> n00000001:port0
|
||||
}
|
||||
181
Documentation/admin-guide/media/rkisp1.rst
Normal file
181
Documentation/admin-guide/media/rkisp1.rst
Normal file
@@ -0,0 +1,181 @@
|
||||
.. SPDX-License-Identifier: GPL-2.0
|
||||
|
||||
.. include:: <isonum.txt>
|
||||
|
||||
=========================================
|
||||
Rockchip Image Signal Processor (rkisp1)
|
||||
=========================================
|
||||
|
||||
Introduction
|
||||
============
|
||||
|
||||
This file documents the driver for the Rockchip ISP1 that is part of RK3288
|
||||
and RK3399 SoCs. The driver is located under drivers/staging/media/rkisp1
|
||||
and uses the Media-Controller API.
|
||||
|
||||
Topology
|
||||
========
|
||||
.. _rkisp1_topology_graph:
|
||||
|
||||
.. kernel-figure:: rkisp1.dot
|
||||
:alt: Diagram of the default media pipeline topology
|
||||
:align: center
|
||||
|
||||
|
||||
The driver has 4 video devices:
|
||||
|
||||
- rkisp1_mainpath: capture device for retrieving images, usually in higher
|
||||
resolution.
|
||||
- rkisp1_selfpath: capture device for retrieving images.
|
||||
- rkisp1_stats: a metadata capture device that sends statistics.
|
||||
- rkisp1_params: a metadata output device that receives parameters
|
||||
configurations from userspace.
|
||||
|
||||
The driver has 3 subdevices:
|
||||
|
||||
- rkisp1_resizer_mainpath: used to resize and downsample frames for the
|
||||
mainpath capture device.
|
||||
- rkisp1_resizer_selfpath: used to resize and downsample frames for the
|
||||
selfpath capture device.
|
||||
- rkisp1_isp: is connected to the sensor and is responsible for all the isp
|
||||
operations.
|
||||
|
||||
|
||||
rkisp1_mainpath, rkisp1_selfpath - Frames Capture Video Nodes
|
||||
-------------------------------------------------------------
|
||||
Those are the `mainpath` and `selfpath` capture devices to capture frames.
|
||||
Those entities are the DMA engines that write the frames to memory.
|
||||
The selfpath video device can capture YUV/RGB formats. Its input is YUV encoded
|
||||
stream and it is able to convert it to RGB. The selfpath is not able to
|
||||
capture bayer formats.
|
||||
The mainpath can capture both bayer and YUV formats but it is not able to
|
||||
capture RGB formats.
|
||||
Both capture videos support
|
||||
the ``V4L2_CAP_IO_MC`` :ref:`capability <device-capabilities>`.
|
||||
|
||||
|
||||
rkisp1_resizer_mainpath, rkisp1_resizer_selfpath - Resizers Subdevices Nodes
|
||||
----------------------------------------------------------------------------
|
||||
Those are resizer entities for the mainpath and the selfpath. Those entities
|
||||
can scale the frames up and down and also change the YUV sampling (for example
|
||||
YUV4:2:2 -> YUV4:2:0). They also have cropping capability on the sink pad.
|
||||
The resizers entities can only operate on YUV:4:2:2 format
|
||||
(MEDIA_BUS_FMT_YUYV8_2X8).
|
||||
The mainpath capture device supports capturing video in bayer formats. In that
|
||||
case the resizer of the mainpath is set to 'bypass' mode - it just forward the
|
||||
frame without operating on it.
|
||||
|
||||
rkisp1_isp - Image Signal Processing Subdevice Node
|
||||
---------------------------------------------------
|
||||
This is the isp entity. It is connected to the sensor on sink pad 0 and
|
||||
receives the frames using the CSI-2 protocol. It is responsible of configuring
|
||||
the CSI-2 protocol. It has a cropping capability on sink pad 0 that is
|
||||
connected to the sensor and on source pad 2 connected to the resizer entities.
|
||||
Cropping on sink pad 0 defines the image region from the sensor.
|
||||
Cropping on source pad 2 defines the region for the Image Stabilizer (IS).
|
||||
|
||||
.. _rkisp1_stats:
|
||||
|
||||
rkisp1_stats - Statistics Video Node
|
||||
------------------------------------
|
||||
The statistics video node outputs the 3A (auto focus, auto exposure and auto
|
||||
white balance) statistics, and also histogram statistics for the frames that
|
||||
are being processed by the rkisp1 to userspace applications.
|
||||
Using these data, applications can implement algorithms and re-parameterize
|
||||
the driver through the rkisp_params node to improve image quality during a
|
||||
video stream.
|
||||
The buffer format is defined by struct :c:type:`rkisp1_stat_buffer`, and
|
||||
userspace should set
|
||||
:ref:`V4L2_META_FMT_RK_ISP1_STAT_3A <v4l2-meta-fmt-stat-rkisp1>` as the
|
||||
dataformat.
|
||||
|
||||
.. _rkisp1_params:
|
||||
|
||||
rkisp1_params - Parameters Video Node
|
||||
-------------------------------------
|
||||
The rkisp1_params video node receives a set of parameters from userspace
|
||||
to be applied to the hardware during a video stream, allowing userspace
|
||||
to dynamically modify values such as black level, cross talk corrections
|
||||
and others.
|
||||
|
||||
The buffer format is defined by struct :c:type:`rkisp1_params_cfg`, and
|
||||
userspace should set
|
||||
:ref:`V4L2_META_FMT_RK_ISP1_PARAMS <v4l2-meta-fmt-params-rkisp1>` as the
|
||||
dataformat.
|
||||
|
||||
|
||||
Capturing Video Frames Example
|
||||
==============================
|
||||
|
||||
In the following example, the sensor connected to pad 0 of 'rkisp1_isp' is
|
||||
imx219.
|
||||
|
||||
The following commands can be used to capture video from the selfpath video
|
||||
node with dimension 900x800 planar format YUV 4:2:2. It uses all cropping
|
||||
capabilities possible, (see explanation right below)
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
# set the links
|
||||
"media-ctl" "-d" "platform:rkisp1" "-r"
|
||||
"media-ctl" "-d" "platform:rkisp1" "-l" "'imx219 4-0010':0 -> 'rkisp1_isp':0 [1]"
|
||||
"media-ctl" "-d" "platform:rkisp1" "-l" "'rkisp1_isp':2 -> 'rkisp1_resizer_selfpath':0 [1]"
|
||||
"media-ctl" "-d" "platform:rkisp1" "-l" "'rkisp1_isp':2 -> 'rkisp1_resizer_mainpath':0 [0]"
|
||||
|
||||
# set format for imx219 4-0010:0
|
||||
"media-ctl" "-d" "platform:rkisp1" "--set-v4l2" '"imx219 4-0010":0 [fmt:SRGGB10_1X10/1640x1232]'
|
||||
|
||||
# set format for rkisp1_isp pads:
|
||||
"media-ctl" "-d" "platform:rkisp1" "--set-v4l2" '"rkisp1_isp":0 [fmt:SRGGB10_1X10/1640x1232 crop: (0,0)/1600x1200]'
|
||||
"media-ctl" "-d" "platform:rkisp1" "--set-v4l2" '"rkisp1_isp":2 [fmt:YUYV8_2X8/1600x1200 crop: (0,0)/1500x1100]'
|
||||
|
||||
# set format for rkisp1_resizer_selfpath pads:
|
||||
"media-ctl" "-d" "platform:rkisp1" "--set-v4l2" '"rkisp1_resizer_selfpath":0 [fmt:YUYV8_2X8/1500x1100 crop: (300,400)/1400x1000]'
|
||||
"media-ctl" "-d" "platform:rkisp1" "--set-v4l2" '"rkisp1_resizer_selfpath":1 [fmt:YUYV8_2X8/900x800]'
|
||||
|
||||
# set format for rkisp1_selfpath:
|
||||
"v4l2-ctl" "-z" "platform:rkisp1" "-d" "rkisp1_selfpath" "-v" "width=900,height=800,"
|
||||
"v4l2-ctl" "-z" "platform:rkisp1" "-d" "rkisp1_selfpath" "-v" "pixelformat=422P"
|
||||
|
||||
# start streaming:
|
||||
v4l2-ctl "-z" "platform:rkisp1" "-d" "rkisp1_selfpath" "--stream-mmap" "--stream-count" "10"
|
||||
|
||||
|
||||
In the above example the sensor is configured to bayer format:
|
||||
`SRGGB10_1X10/1640x1232`. The rkisp1_isp:0 pad should be configured to the
|
||||
same mbus format and dimensions as the sensor, otherwise streaming will fail
|
||||
with 'EPIPE' error. So it is also configured to `SRGGB10_1X10/1640x1232`.
|
||||
In addition, the rkisp1_isp:0 pad is configured to cropping `(0,0)/1600x1200`.
|
||||
|
||||
The cropping dimensions are automatically propagated to be the format of the
|
||||
isp source pad `rkisp1_isp:2`. Another cropping operation is configured on
|
||||
the isp source pad: `(0,0)/1500x1100`.
|
||||
|
||||
The resizer's sink pad `rkisp1_resizer_selfpath` should be configured to format
|
||||
`YUYV8_2X8/1500x1100` in order to match the format on the other side of the
|
||||
link. In addition a cropping `(300,400)/1400x1000` is configured on it.
|
||||
|
||||
The source pad of the resizer, `rkisp1_resizer_selfpath:1` is configured to
|
||||
format `YUYV8_2X8/900x800`. That means that the resizer first crop a window
|
||||
of `(300,400)/1400x100` from the received frame and then scales this window
|
||||
to dimension `900x800`.
|
||||
|
||||
Note that the above example does not uses the stats-params control loop.
|
||||
Therefore the capture frames will not go through the 3A algorithms and
|
||||
probably won't have a good quality, and can even look dark and greenish.
|
||||
|
||||
Configuring Quantization
|
||||
========================
|
||||
|
||||
The driver supports limited and full range quantization on YUV formats,
|
||||
where limited is the default.
|
||||
To switch between one or the other, userspace should use the Colorspace
|
||||
Conversion API (CSC) for subdevices on source pad 2 of the
|
||||
isp (`rkisp1_isp:2`). The quantization configured on this pad is the
|
||||
quantization of the captured video frames on the mainpath and selfpath
|
||||
video nodes.
|
||||
Note that the resizer and capture entities will always report
|
||||
``V4L2_QUANTIZATION_DEFAULT`` even if the quantization is configured to full
|
||||
range on `rkisp1_isp:2`. So in order to get the configured quantization,
|
||||
application should get it from pad `rkisp1_isp:2`.
|
||||
|
||||
@@ -20,7 +20,7 @@ Siano cards list
|
||||
- 2040:1801
|
||||
* - Hauppauge WinTV MiniCard
|
||||
- 2040:2000, 2040:200a, 2040:2010, 2040:2011, 2040:2019
|
||||
* - Hauppauge WinTV MiniCard
|
||||
* - Hauppauge WinTV MiniCard Rev 2
|
||||
- 2040:2009
|
||||
* - Hauppauge WinTV MiniStick
|
||||
- 2040:5500, 2040:5510, 2040:5520, 2040:5530, 2040:5580, 2040:5590, 2040:b900, 2040:b910, 2040:b980, 2040:b990, 2040:c000, 2040:c010, 2040:c080, 2040:c090, 2040:c0a0, 2040:f5a0
|
||||
|
||||
@@ -112,7 +112,6 @@ zr364xx USB ZR364XX Camera
|
||||
em28xx-cardlist
|
||||
tm6000-cardlist
|
||||
siano-cardlist
|
||||
usbvision-cardlist
|
||||
|
||||
gspca-cardlist
|
||||
|
||||
|
||||
@@ -1,283 +0,0 @@
|
||||
.. SPDX-License-Identifier: GPL-2.0
|
||||
|
||||
USBvision cards list
|
||||
====================
|
||||
|
||||
.. tabularcolumns:: |p{1.4cm}|p{11.1cm}|p{4.2cm}|
|
||||
|
||||
.. flat-table::
|
||||
:header-rows: 1
|
||||
:widths: 2 19 18
|
||||
:stub-columns: 0
|
||||
|
||||
* - Card number
|
||||
- Card name
|
||||
- USB IDs
|
||||
|
||||
* - 0
|
||||
- Xanboo
|
||||
- 0a6f:0400
|
||||
|
||||
* - 1
|
||||
- Belkin USB VideoBus II Adapter
|
||||
- 050d:0106
|
||||
|
||||
* - 2
|
||||
- Belkin Components USB VideoBus
|
||||
- 050d:0207
|
||||
|
||||
* - 3
|
||||
- Belkin USB VideoBus II
|
||||
- 050d:0208
|
||||
|
||||
* - 4
|
||||
- echoFX InterView Lite
|
||||
- 0571:0002
|
||||
|
||||
* - 5
|
||||
- USBGear USBG-V1 resp. HAMA USB
|
||||
- 0573:0003
|
||||
|
||||
* - 6
|
||||
- D-Link V100
|
||||
- 0573:0400
|
||||
|
||||
* - 7
|
||||
- X10 USB Camera
|
||||
- 0573:2000
|
||||
|
||||
* - 8
|
||||
- Hauppauge WinTV USB Live (PAL B/G)
|
||||
- 0573:2d00
|
||||
|
||||
* - 9
|
||||
- Hauppauge WinTV USB Live Pro (NTSC M/N)
|
||||
- 0573:2d01
|
||||
|
||||
* - 10
|
||||
- Zoran Co. PMD (Nogatech) AV-grabber Manhattan
|
||||
- 0573:2101
|
||||
|
||||
* - 11
|
||||
- Nogatech USB-TV (NTSC) FM
|
||||
- 0573:4100
|
||||
|
||||
* - 12
|
||||
- PNY USB-TV (NTSC) FM
|
||||
- 0573:4110
|
||||
|
||||
* - 13
|
||||
- PixelView PlayTv-USB PRO (PAL) FM
|
||||
- 0573:4450
|
||||
|
||||
* - 14
|
||||
- ZTV ZT-721 2.4GHz USB A/V Receiver
|
||||
- 0573:4550
|
||||
|
||||
* - 15
|
||||
- Hauppauge WinTV USB (NTSC M/N)
|
||||
- 0573:4d00
|
||||
|
||||
* - 16
|
||||
- Hauppauge WinTV USB (PAL B/G)
|
||||
- 0573:4d01
|
||||
|
||||
* - 17
|
||||
- Hauppauge WinTV USB (PAL I)
|
||||
- 0573:4d02
|
||||
|
||||
* - 18
|
||||
- Hauppauge WinTV USB (PAL/SECAM L)
|
||||
- 0573:4d03
|
||||
|
||||
* - 19
|
||||
- Hauppauge WinTV USB (PAL D/K)
|
||||
- 0573:4d04
|
||||
|
||||
* - 20
|
||||
- Hauppauge WinTV USB (NTSC FM)
|
||||
- 0573:4d10
|
||||
|
||||
* - 21
|
||||
- Hauppauge WinTV USB (PAL B/G FM)
|
||||
- 0573:4d11
|
||||
|
||||
* - 22
|
||||
- Hauppauge WinTV USB (PAL I FM)
|
||||
- 0573:4d12
|
||||
|
||||
* - 23
|
||||
- Hauppauge WinTV USB (PAL D/K FM)
|
||||
- 0573:4d14
|
||||
|
||||
* - 24
|
||||
- Hauppauge WinTV USB Pro (NTSC M/N)
|
||||
- 0573:4d2a
|
||||
|
||||
* - 25
|
||||
- Hauppauge WinTV USB Pro (NTSC M/N) V2
|
||||
- 0573:4d2b
|
||||
|
||||
* - 26
|
||||
- Hauppauge WinTV USB Pro (PAL/SECAM B/G/I/D/K/L)
|
||||
- 0573:4d2c
|
||||
|
||||
* - 27
|
||||
- Hauppauge WinTV USB Pro (NTSC M/N) V3
|
||||
- 0573:4d20
|
||||
|
||||
* - 28
|
||||
- Hauppauge WinTV USB Pro (PAL B/G)
|
||||
- 0573:4d21
|
||||
|
||||
* - 29
|
||||
- Hauppauge WinTV USB Pro (PAL I)
|
||||
- 0573:4d22
|
||||
|
||||
* - 30
|
||||
- Hauppauge WinTV USB Pro (PAL/SECAM L)
|
||||
- 0573:4d23
|
||||
|
||||
* - 31
|
||||
- Hauppauge WinTV USB Pro (PAL D/K)
|
||||
- 0573:4d24
|
||||
|
||||
* - 32
|
||||
- Hauppauge WinTV USB Pro (PAL/SECAM BGDK/I/L)
|
||||
- 0573:4d25
|
||||
|
||||
* - 33
|
||||
- Hauppauge WinTV USB Pro (PAL/SECAM BGDK/I/L) V2
|
||||
- 0573:4d26
|
||||
|
||||
* - 34
|
||||
- Hauppauge WinTV USB Pro (PAL B/G) V2
|
||||
- 0573:4d27
|
||||
|
||||
* - 35
|
||||
- Hauppauge WinTV USB Pro (PAL B/G,D/K)
|
||||
- 0573:4d28
|
||||
|
||||
* - 36
|
||||
- Hauppauge WinTV USB Pro (PAL I,D/K)
|
||||
- 0573:4d29
|
||||
|
||||
* - 37
|
||||
- Hauppauge WinTV USB Pro (NTSC M/N FM)
|
||||
- 0573:4d30
|
||||
|
||||
* - 38
|
||||
- Hauppauge WinTV USB Pro (PAL B/G FM)
|
||||
- 0573:4d31
|
||||
|
||||
* - 39
|
||||
- Hauppauge WinTV USB Pro (PAL I FM)
|
||||
- 0573:4d32
|
||||
|
||||
* - 40
|
||||
- Hauppauge WinTV USB Pro (PAL D/K FM)
|
||||
- 0573:4d34
|
||||
|
||||
* - 41
|
||||
- Hauppauge WinTV USB Pro (Temic PAL/SECAM B/G/I/D/K/L FM)
|
||||
- 0573:4d35
|
||||
|
||||
* - 42
|
||||
- Hauppauge WinTV USB Pro (Temic PAL B/G FM)
|
||||
- 0573:4d36
|
||||
|
||||
* - 43
|
||||
- Hauppauge WinTV USB Pro (PAL/SECAM B/G/I/D/K/L FM)
|
||||
- 0573:4d37
|
||||
|
||||
* - 44
|
||||
- Hauppauge WinTV USB Pro (NTSC M/N FM) V2
|
||||
- 0573:4d38
|
||||
|
||||
* - 45
|
||||
- Camtel Technology USB TV Genie Pro FM Model TVB330
|
||||
- 0768:0006
|
||||
|
||||
* - 46
|
||||
- Digital Video Creator I
|
||||
- 07d0:0001
|
||||
|
||||
* - 47
|
||||
- Global Village GV-007 (NTSC)
|
||||
- 07d0:0002
|
||||
|
||||
* - 48
|
||||
- Dazzle Fusion Model DVC-50 Rev 1 (NTSC)
|
||||
- 07d0:0003
|
||||
|
||||
* - 49
|
||||
- Dazzle Fusion Model DVC-80 Rev 1 (PAL)
|
||||
- 07d0:0004
|
||||
|
||||
* - 50
|
||||
- Dazzle Fusion Model DVC-90 Rev 1 (SECAM)
|
||||
- 07d0:0005
|
||||
|
||||
* - 51
|
||||
- Eskape Labs MyTV2Go
|
||||
- 07f8:9104
|
||||
|
||||
* - 52
|
||||
- Pinnacle Studio PCTV USB (PAL)
|
||||
- 2304:010d
|
||||
|
||||
* - 53
|
||||
- Pinnacle Studio PCTV USB (SECAM)
|
||||
- 2304:0109
|
||||
|
||||
* - 54
|
||||
- Pinnacle Studio PCTV USB (PAL) FM
|
||||
- 2304:0110
|
||||
|
||||
* - 55
|
||||
- Miro PCTV USB
|
||||
- 2304:0111
|
||||
|
||||
* - 56
|
||||
- Pinnacle Studio PCTV USB (NTSC) FM
|
||||
- 2304:0112
|
||||
|
||||
* - 57
|
||||
- Pinnacle Studio PCTV USB (PAL) FM V2
|
||||
- 2304:0210
|
||||
|
||||
* - 58
|
||||
- Pinnacle Studio PCTV USB (NTSC) FM V2
|
||||
- 2304:0212
|
||||
|
||||
* - 59
|
||||
- Pinnacle Studio PCTV USB (PAL) FM V3
|
||||
- 2304:0214
|
||||
|
||||
* - 60
|
||||
- Pinnacle Studio Linx Video input cable (NTSC)
|
||||
- 2304:0300
|
||||
|
||||
* - 61
|
||||
- Pinnacle Studio Linx Video input cable (PAL)
|
||||
- 2304:0301
|
||||
|
||||
* - 62
|
||||
- Pinnacle PCTV Bungee USB (PAL) FM
|
||||
- 2304:0419
|
||||
|
||||
* - 63
|
||||
- Hauppauge WinTv-USB
|
||||
- 2400:4200
|
||||
|
||||
* - 64
|
||||
- Pinnacle Studio PCTV USB (NTSC) FM V3
|
||||
- 2304:0113
|
||||
|
||||
* - 65
|
||||
- Nogatech USB MicroCam NTSC (NV3000N)
|
||||
- 0573:3000
|
||||
|
||||
* - 66
|
||||
- Nogatech USB MicroCam PAL (NV3001P)
|
||||
- 0573:3001
|
||||
@@ -25,6 +25,7 @@ Video4Linux (V4L) driver-specific documentation
|
||||
philips
|
||||
qcom_camss
|
||||
rcar-fdp1
|
||||
rkisp1
|
||||
saa7134
|
||||
si470x
|
||||
si4713
|
||||
|
||||
51
Documentation/admin-guide/media/zoran-cardlist.rst
Normal file
51
Documentation/admin-guide/media/zoran-cardlist.rst
Normal file
@@ -0,0 +1,51 @@
|
||||
.. SPDX-License-Identifier: GPL-2.0
|
||||
|
||||
Zoran cards list
|
||||
================
|
||||
|
||||
.. tabularcolumns:: |p{1.4cm}|p{11.1cm}|p{4.2cm}|
|
||||
|
||||
.. flat-table::
|
||||
:header-rows: 1
|
||||
:widths: 2 19 18
|
||||
:stub-columns: 0
|
||||
|
||||
* - Card number
|
||||
- Card name
|
||||
- PCI subsystem IDs
|
||||
|
||||
* - 0
|
||||
- DC10(old)
|
||||
- <any>
|
||||
|
||||
* - 1
|
||||
- DC10(new)
|
||||
- <any>
|
||||
|
||||
* - 2
|
||||
- DC10_PLUS
|
||||
- 1031:7efe
|
||||
|
||||
* - 3
|
||||
- DC30
|
||||
- <any>
|
||||
|
||||
* - 4
|
||||
- DC30_PLUS
|
||||
- 1031:d801
|
||||
|
||||
* - 5
|
||||
- LML33
|
||||
- <any>
|
||||
|
||||
* - 6
|
||||
- LML33R10
|
||||
- 12f8:8a02
|
||||
|
||||
* - 7
|
||||
- Buz
|
||||
- 13ca:4231
|
||||
|
||||
* - 8
|
||||
- 6-Eyes
|
||||
- <any>
|
||||
@@ -131,7 +131,7 @@ hugepages
|
||||
parameter is preceded by an invalid hugepagesz parameter, it will
|
||||
be ignored.
|
||||
default_hugepagesz
|
||||
pecify the default huge page size. This parameter can
|
||||
Specify the default huge page size. This parameter can
|
||||
only be specified once on the command line. default_hugepagesz can
|
||||
optionally be followed by the hugepages parameter to preallocate a
|
||||
specific number of huge pages of default size. The number of default
|
||||
|
||||
@@ -56,6 +56,11 @@ nodes' access characteristics share the same performance relative to other
|
||||
linked initiator nodes. Each target within an initiator's access class,
|
||||
though, do not necessarily perform the same as each other.
|
||||
|
||||
The access class "1" is used to allow differentiation between initiators
|
||||
that are CPUs and hence suitable for generic task scheduling, and
|
||||
IO initiators such as GPUs and NICs. Unlike access class 0, only
|
||||
nodes containing CPUs are considered.
|
||||
|
||||
================
|
||||
NUMA Performance
|
||||
================
|
||||
@@ -88,6 +93,9 @@ The latency attributes are provided in nanoseconds.
|
||||
The values reported here correspond to the rated latency and bandwidth
|
||||
for the platform.
|
||||
|
||||
Access class 1 takes the same form but only includes values for CPU to
|
||||
memory activity.
|
||||
|
||||
==========
|
||||
NUMA Cache
|
||||
==========
|
||||
|
||||
@@ -1,70 +0,0 @@
|
||||
===================
|
||||
NFS Fault Injection
|
||||
===================
|
||||
|
||||
Fault injection is a method for forcing errors that may not normally occur, or
|
||||
may be difficult to reproduce. Forcing these errors in a controlled environment
|
||||
can help the developer find and fix bugs before their code is shipped in a
|
||||
production system. Injecting an error on the Linux NFS server will allow us to
|
||||
observe how the client reacts and if it manages to recover its state correctly.
|
||||
|
||||
NFSD_FAULT_INJECTION must be selected when configuring the kernel to use this
|
||||
feature.
|
||||
|
||||
|
||||
Using Fault Injection
|
||||
=====================
|
||||
On the client, mount the fault injection server through NFS v4.0+ and do some
|
||||
work over NFS (open files, take locks, ...).
|
||||
|
||||
On the server, mount the debugfs filesystem to <debug_dir> and ls
|
||||
<debug_dir>/nfsd. This will show a list of files that will be used for
|
||||
injecting faults on the NFS server. As root, write a number n to the file
|
||||
corresponding to the action you want the server to take. The server will then
|
||||
process the first n items it finds. So if you want to forget 5 locks, echo '5'
|
||||
to <debug_dir>/nfsd/forget_locks. A value of 0 will tell the server to forget
|
||||
all corresponding items. A log message will be created containing the number
|
||||
of items forgotten (check dmesg).
|
||||
|
||||
Go back to work on the client and check if the client recovered from the error
|
||||
correctly.
|
||||
|
||||
|
||||
Available Faults
|
||||
================
|
||||
forget_clients:
|
||||
The NFS server keeps a list of clients that have placed a mount call. If
|
||||
this list is cleared, the server will have no knowledge of who the client
|
||||
is, forcing the client to reauthenticate with the server.
|
||||
|
||||
forget_openowners:
|
||||
The NFS server keeps a list of what files are currently opened and who
|
||||
they were opened by. Clearing this list will force the client to reopen
|
||||
its files.
|
||||
|
||||
forget_locks:
|
||||
The NFS server keeps a list of what files are currently locked in the VFS.
|
||||
Clearing this list will force the client to reclaim its locks (files are
|
||||
unlocked through the VFS as they are cleared from this list).
|
||||
|
||||
forget_delegations:
|
||||
A delegation is used to assure the client that a file, or part of a file,
|
||||
has not changed since the delegation was awarded. Clearing this list will
|
||||
force the client to reacquire its delegation before accessing the file
|
||||
again.
|
||||
|
||||
recall_delegations:
|
||||
Delegations can be recalled by the server when another client attempts to
|
||||
access a file. This test will notify the client that its delegation has
|
||||
been revoked, forcing the client to reacquire the delegation before using
|
||||
the file again.
|
||||
|
||||
|
||||
tools/nfs/inject_faults.sh script
|
||||
=================================
|
||||
This script has been created to ease the fault injection process. This script
|
||||
will detect the mounted debugfs directory and write to the files located there
|
||||
based on the arguments passed by the user. For example, running
|
||||
`inject_faults.sh forget_locks 1` as root will instruct the server to forget
|
||||
one lock. Running `inject_faults forget_locks` will instruct the server to
|
||||
forgetall locks.
|
||||
@@ -12,4 +12,3 @@ NFS
|
||||
nfs-idmapper
|
||||
pnfs-block-server
|
||||
pnfs-scsi-server
|
||||
fault_injection
|
||||
|
||||
65
Documentation/admin-guide/perf/arm-cmn.rst
Normal file
65
Documentation/admin-guide/perf/arm-cmn.rst
Normal file
@@ -0,0 +1,65 @@
|
||||
=============================
|
||||
Arm Coherent Mesh Network PMU
|
||||
=============================
|
||||
|
||||
CMN-600 is a configurable mesh interconnect consisting of a rectangular
|
||||
grid of crosspoints (XPs), with each crosspoint supporting up to two
|
||||
device ports to which various AMBA CHI agents are attached.
|
||||
|
||||
CMN implements a distributed PMU design as part of its debug and trace
|
||||
functionality. This consists of a local monitor (DTM) at every XP, which
|
||||
counts up to 4 event signals from the connected device nodes and/or the
|
||||
XP itself. Overflow from these local counters is accumulated in up to 8
|
||||
global counters implemented by the main controller (DTC), which provides
|
||||
overall PMU control and interrupts for global counter overflow.
|
||||
|
||||
PMU events
|
||||
----------
|
||||
|
||||
The PMU driver registers a single PMU device for the whole interconnect,
|
||||
see /sys/bus/event_source/devices/arm_cmn. Multi-chip systems may link
|
||||
more than one CMN together via external CCIX links - in this situation,
|
||||
each mesh counts its own events entirely independently, and additional
|
||||
PMU devices will be named arm_cmn_{1..n}.
|
||||
|
||||
Most events are specified in a format based directly on the TRM
|
||||
definitions - "type" selects the respective node type, and "eventid" the
|
||||
event number. Some events require an additional occupancy ID, which is
|
||||
specified by "occupid".
|
||||
|
||||
* Since RN-D nodes do not have any distinct events from RN-I nodes, they
|
||||
are treated as the same type (0xa), and the common event templates are
|
||||
named "rnid_*".
|
||||
|
||||
* The cycle counter is treated as a synthetic event belonging to the DTC
|
||||
node ("type" == 0x3, "eventid" is ignored).
|
||||
|
||||
* XP events also encode the port and channel in the "eventid" field, to
|
||||
match the underlying pmu_event0_id encoding for the pmu_event_sel
|
||||
register. The event templates are named with prefixes to cover all
|
||||
permutations.
|
||||
|
||||
By default each event provides an aggregate count over all nodes of the
|
||||
given type. To target a specific node, "bynodeid" must be set to 1 and
|
||||
"nodeid" to the appropriate value derived from the CMN configuration
|
||||
(as defined in the "Node ID Mapping" section of the TRM).
|
||||
|
||||
Watchpoints
|
||||
-----------
|
||||
|
||||
The PMU can also count watchpoint events to monitor specific flit
|
||||
traffic. Watchpoints are treated as a synthetic event type, and like PMU
|
||||
events can be global or targeted with a particular XP's "nodeid" value.
|
||||
Since the watchpoint direction is otherwise implicit in the underlying
|
||||
register selection, separate events are provided for flit uploads and
|
||||
downloads.
|
||||
|
||||
The flit match value and mask are passed in config1 and config2 ("val"
|
||||
and "mask" respectively). "wp_dev_sel", "wp_chn_sel", "wp_grp" and
|
||||
"wp_exclusive" are specified per the TRM definitions for dtm_wp_config0.
|
||||
Where a watchpoint needs to match fields from both match groups on the
|
||||
REQ or SNP channel, it can be specified as two events - one for each
|
||||
group - with the same nonzero "combine" value. The count for such a
|
||||
pair of combined events will be attributed to the primary match.
|
||||
Watchpoint events with a "combine" value of 0 are considered independent
|
||||
and will count individually.
|
||||
@@ -12,6 +12,7 @@ Performance monitor support
|
||||
qcom_l2_pmu
|
||||
qcom_l3_pmu
|
||||
arm-ccn
|
||||
arm-cmn
|
||||
xgene-pmu
|
||||
arm_dsu_pmu
|
||||
thunderx2-pmu
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
.. SPDX-License-Identifier: GPL-2.0
|
||||
.. include:: <isonum.txt>
|
||||
|
||||
.. |struct cpufreq_policy| replace:: :c:type:`struct cpufreq_policy <cpufreq_policy>`
|
||||
.. |intel_pstate| replace:: :doc:`intel_pstate <intel_pstate>`
|
||||
|
||||
=======================
|
||||
@@ -92,16 +91,16 @@ control the P-state of multiple CPUs at the same time and writing to it affects
|
||||
all of those CPUs simultaneously.
|
||||
|
||||
Sets of CPUs sharing hardware P-state control interfaces are represented by
|
||||
``CPUFreq`` as |struct cpufreq_policy| objects. For consistency,
|
||||
|struct cpufreq_policy| is also used when there is only one CPU in the given
|
||||
``CPUFreq`` as struct cpufreq_policy objects. For consistency,
|
||||
struct cpufreq_policy is also used when there is only one CPU in the given
|
||||
set.
|
||||
|
||||
The ``CPUFreq`` core maintains a pointer to a |struct cpufreq_policy| object for
|
||||
The ``CPUFreq`` core maintains a pointer to a struct cpufreq_policy object for
|
||||
every CPU in the system, including CPUs that are currently offline. If multiple
|
||||
CPUs share the same hardware P-state control interface, all of the pointers
|
||||
corresponding to them point to the same |struct cpufreq_policy| object.
|
||||
corresponding to them point to the same struct cpufreq_policy object.
|
||||
|
||||
``CPUFreq`` uses |struct cpufreq_policy| as its basic data type and the design
|
||||
``CPUFreq`` uses struct cpufreq_policy as its basic data type and the design
|
||||
of its user space interface is based on the policy concept.
|
||||
|
||||
|
||||
|
||||
@@ -528,6 +528,10 @@ object corresponding to it, as follows:
|
||||
Total number of times the hardware has been asked by the given CPU to
|
||||
enter this idle state.
|
||||
|
||||
``rejected``
|
||||
Total number of times a request to enter this idle state on the given
|
||||
CPU was rejected.
|
||||
|
||||
The :file:`desc` and :file:`name` files both contain strings. The difference
|
||||
between them is that the name is expected to be more concise, while the
|
||||
description may be longer and it may contain white space or special characters.
|
||||
@@ -572,6 +576,11 @@ particular case. For these reasons, the only reliable way to find out how
|
||||
much time has been spent by the hardware in different idle states supported by
|
||||
it is to use idle state residency counters in the hardware, if available.
|
||||
|
||||
Generally, an interrupt received when trying to enter an idle state causes the
|
||||
idle state entry request to be rejected, in which case the ``CPUIdle`` driver
|
||||
may return an error code to indicate that this was the case. The :file:`usage`
|
||||
and :file:`rejected` files report the number of times the given idle state
|
||||
was entered successfully or rejected, respectively.
|
||||
|
||||
.. _cpu-pm-qos:
|
||||
|
||||
@@ -690,7 +699,7 @@ which of the two parameters is added to the kernel command line. In the
|
||||
instruction of the CPUs (which, as a rule, suspends the execution of the program
|
||||
and causes the hardware to attempt to enter the shallowest available idle state)
|
||||
for this purpose, and if ``idle=poll`` is used, idle CPUs will execute a
|
||||
more or less ``lightweight'' sequence of instructions in a tight loop. [Note
|
||||
more or less "lightweight" sequence of instructions in a tight loop. [Note
|
||||
that using ``idle=poll`` is somewhat drastic in many cases, as preventing idle
|
||||
CPUs from saving almost any energy at all may not be the only effect of it.
|
||||
For example, on Intel hardware it effectively prevents CPUs from using
|
||||
|
||||
@@ -281,10 +281,6 @@ ISAPNP drivers. They should serve as a temporary solution only.
|
||||
|
||||
They are as follows::
|
||||
|
||||
struct pnp_card *pnp_find_card(unsigned short vendor,
|
||||
unsigned short device,
|
||||
struct pnp_card *from)
|
||||
|
||||
struct pnp_dev *pnp_find_dev(struct pnp_card *card,
|
||||
unsigned short vendor,
|
||||
unsigned short function,
|
||||
|
||||
@@ -154,17 +154,11 @@ Configurations for driver
|
||||
Only a block device driver cares about these configurations. A block device
|
||||
driver uses ``register_pstore_blk`` to register to pstore/blk.
|
||||
|
||||
.. kernel-doc:: fs/pstore/blk.c
|
||||
:identifiers: register_pstore_blk
|
||||
|
||||
A non-block device driver uses ``register_pstore_device`` with
|
||||
``struct pstore_device_info`` to register to pstore/blk.
|
||||
|
||||
.. kernel-doc:: fs/pstore/blk.c
|
||||
:identifiers: register_pstore_device
|
||||
|
||||
.. kernel-doc:: include/linux/pstore_blk.h
|
||||
:identifiers: pstore_device_info
|
||||
:export:
|
||||
|
||||
Compression and header
|
||||
----------------------
|
||||
@@ -237,7 +231,7 @@ For developer reference, here are all the important structures and APIs:
|
||||
:internal:
|
||||
|
||||
.. kernel-doc:: fs/pstore/blk.c
|
||||
:export:
|
||||
:internal:
|
||||
|
||||
.. kernel-doc:: include/linux/pstore_blk.h
|
||||
:internal:
|
||||
|
||||
@@ -12,7 +12,8 @@ Intro
|
||||
This small document describes the "Video Mode Selection" feature which
|
||||
allows the use of various special video modes supported by the video BIOS. Due
|
||||
to usage of the BIOS, the selection is limited to boot time (before the
|
||||
kernel decompression starts) and works only on 80X86 machines.
|
||||
kernel decompression starts) and works only on 80X86 machines that are
|
||||
booted through BIOS firmware (as opposed to through UEFI, kexec, etc.).
|
||||
|
||||
.. note::
|
||||
|
||||
@@ -23,7 +24,7 @@ kernel decompression starts) and works only on 80X86 machines.
|
||||
|
||||
The video mode to be used is selected by a kernel parameter which can be
|
||||
specified in the kernel Makefile (the SVGA_MODE=... line) or by the "vga=..."
|
||||
option of LILO (or some other boot loader you use) or by the "vidmode" utility
|
||||
option of LILO (or some other boot loader you use) or by the "xrandr" utility
|
||||
(present in standard Linux utility packages). You can use the following values
|
||||
of this parameter::
|
||||
|
||||
@@ -41,7 +42,7 @@ of this parameter::
|
||||
better to use absolute mode numbers instead.
|
||||
|
||||
0x.... - Hexadecimal video mode ID (also displayed on the menu, see below
|
||||
for exact meaning of the ID). Warning: rdev and LILO don't support
|
||||
for exact meaning of the ID). Warning: LILO doesn't support
|
||||
hexadecimal numbers -- you have to convert it to decimal manually.
|
||||
|
||||
Menu
|
||||
|
||||
@@ -1,67 +1,34 @@
|
||||
.. SPDX-License-Identifier: GPL-2.0+
|
||||
|
||||
================================
|
||||
Documentation for /proc/sys/abi/
|
||||
================================
|
||||
|
||||
kernel version 2.6.0.test2
|
||||
.. See scripts/check-sysctl-docs to keep this up to date:
|
||||
.. scripts/check-sysctl-docs -vtable="abi" \
|
||||
.. Documentation/admin-guide/sysctl/abi.rst \
|
||||
.. $(git grep -l register_sysctl_)
|
||||
|
||||
Copyright (c) 2003, Fabian Frederick <ffrederick@users.sourceforge.net>
|
||||
Copyright (c) 2020, Stephen Kitt
|
||||
|
||||
For general info: index.rst.
|
||||
For general info, see :doc:`index`.
|
||||
|
||||
------------------------------------------------------------------------------
|
||||
|
||||
This path is binary emulation relevant aka personality types aka abi.
|
||||
When a process is executed, it's linked to an exec_domain whose
|
||||
personality is defined using values available from /proc/sys/abi.
|
||||
You can find further details about abi in include/linux/personality.h.
|
||||
The files in ``/proc/sys/abi`` can be used to see and modify
|
||||
ABI-related settings.
|
||||
|
||||
Here are the files featuring in 2.6 kernel:
|
||||
Currently, these files might (depending on your configuration)
|
||||
show up in ``/proc/sys/kernel``:
|
||||
|
||||
- defhandler_coff
|
||||
- defhandler_elf
|
||||
- defhandler_lcall7
|
||||
- defhandler_libcso
|
||||
- fake_utsname
|
||||
- trace
|
||||
.. contents:: :local:
|
||||
|
||||
defhandler_coff
|
||||
---------------
|
||||
vsyscall32 (x86)
|
||||
================
|
||||
|
||||
defined value:
|
||||
PER_SCOSVR3::
|
||||
Determines whether the kernels maps a vDSO page into 32-bit processes;
|
||||
can be set to 1 to enable, or 0 to disable. Defaults to enabled if
|
||||
``CONFIG_COMPAT_VDSO`` is set, disabled otherwide.
|
||||
|
||||
0x0003 | STICKY_TIMEOUTS | WHOLE_SECONDS | SHORT_INODE
|
||||
|
||||
defhandler_elf
|
||||
--------------
|
||||
|
||||
defined value:
|
||||
PER_LINUX::
|
||||
|
||||
0
|
||||
|
||||
defhandler_lcall7
|
||||
-----------------
|
||||
|
||||
defined value :
|
||||
PER_SVR4::
|
||||
|
||||
0x0001 | STICKY_TIMEOUTS | MMAP_PAGE_ZERO,
|
||||
|
||||
defhandler_libsco
|
||||
-----------------
|
||||
|
||||
defined value:
|
||||
PER_SVR4::
|
||||
|
||||
0x0001 | STICKY_TIMEOUTS | MMAP_PAGE_ZERO,
|
||||
|
||||
fake_utsname
|
||||
------------
|
||||
|
||||
Unused
|
||||
|
||||
trace
|
||||
-----
|
||||
|
||||
Unused
|
||||
This controls the same setting as the ``vdso32`` kernel boot
|
||||
parameter.
|
||||
|
||||
@@ -300,7 +300,6 @@ Note:
|
||||
0: 0 1 2 3 4 5 6 7
|
||||
RSS hash key:
|
||||
84:50:f4:00:a8:15:d1:a7:e9:7f:1d:60:35:c7:47:25:42:97:74:ca:56:bb:b6:a1:d8:43:e3:c9:0c:fd:17:55:c2:3a:4d:69:ed:f1:42:89
|
||||
|
||||
netdev_tstamp_prequeue
|
||||
----------------------
|
||||
|
||||
@@ -321,11 +320,20 @@ fb_tunnels_only_for_init_net
|
||||
----------------------------
|
||||
|
||||
Controls if fallback tunnels (like tunl0, gre0, gretap0, erspan0,
|
||||
sit0, ip6tnl0, ip6gre0) are automatically created when a new
|
||||
network namespace is created, if corresponding tunnel is present
|
||||
in initial network namespace.
|
||||
If set to 1, these devices are not automatically created, and
|
||||
user space is responsible for creating them if needed.
|
||||
sit0, ip6tnl0, ip6gre0) are automatically created. There are 3 possibilities
|
||||
(a) value = 0; respective fallback tunnels are created when module is
|
||||
loaded in every net namespaces (backward compatible behavior).
|
||||
(b) value = 1; [kcmd value: initns] respective fallback tunnels are
|
||||
created only in init net namespace and every other net namespace will
|
||||
not have them.
|
||||
(c) value = 2; [kcmd value: none] fallback tunnels are not created
|
||||
when a module is loaded in any of the net namespace. Setting value to
|
||||
"2" is pointless after boot if these modules are built-in, so there is
|
||||
a kernel command-line option that can change this default. Please refer to
|
||||
Documentation/admin-guide/kernel-parameters.txt for additional details.
|
||||
|
||||
Not creating fallback tunnels gives control to userspace to create
|
||||
whatever is needed only and avoid creating devices which are redundant.
|
||||
|
||||
Default : 0 (for compatibility reasons)
|
||||
|
||||
|
||||
@@ -27,6 +27,7 @@ Currently, these files are in /proc/sys/vm:
|
||||
- admin_reserve_kbytes
|
||||
- block_dump
|
||||
- compact_memory
|
||||
- compaction_proactiveness
|
||||
- compact_unevictable_allowed
|
||||
- dirty_background_bytes
|
||||
- dirty_background_ratio
|
||||
@@ -37,6 +38,7 @@ Currently, these files are in /proc/sys/vm:
|
||||
- dirty_writeback_centisecs
|
||||
- drop_caches
|
||||
- extfrag_threshold
|
||||
- highmem_is_dirtyable
|
||||
- hugetlb_shm_group
|
||||
- laptop_mode
|
||||
- legacy_va_layout
|
||||
|
||||
@@ -79,6 +79,8 @@ On all
|
||||
|
||||
echo t > /proc/sysrq-trigger
|
||||
|
||||
The :kbd:`<command key>` is case sensitive.
|
||||
|
||||
What are the 'command' keys?
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
|
||||
@@ -130,7 +130,7 @@ More detailed explanation for tainting
|
||||
5) ``B`` If a page-release function has found a bad page reference or some
|
||||
unexpected page flags. This indicates a hardware problem or a kernel bug;
|
||||
there should be other information in the log indicating why this tainting
|
||||
occured.
|
||||
occurred.
|
||||
|
||||
6) ``U`` if a user or user application specifically requested that the
|
||||
Tainted flag be set, ``' '`` otherwise.
|
||||
|
||||
@@ -210,6 +210,28 @@ When mounting an XFS filesystem, the following options are accepted.
|
||||
inconsistent namespace presentation during or after a
|
||||
failover event.
|
||||
|
||||
Deprecation of V4 Format
|
||||
========================
|
||||
|
||||
The V4 filesystem format lacks certain features that are supported by
|
||||
the V5 format, such as metadata checksumming, strengthened metadata
|
||||
verification, and the ability to store timestamps past the year 2038.
|
||||
Because of this, the V4 format is deprecated. All users should upgrade
|
||||
by backing up their files, reformatting, and restoring from the backup.
|
||||
|
||||
Administrators and users can detect a V4 filesystem by running xfs_info
|
||||
against a filesystem mountpoint and checking for a string containing
|
||||
"crc=". If no such string is found, please upgrade xfsprogs to the
|
||||
latest version and try again.
|
||||
|
||||
The deprecation will take place in two parts. Support for mounting V4
|
||||
filesystems can now be disabled at kernel build time via Kconfig option.
|
||||
The option will default to yes until September 2025, at which time it
|
||||
will be changed to default to no. In September 2030, support will be
|
||||
removed from the codebase entirely.
|
||||
|
||||
Note: Distributors may choose to withdraw V4 format support earlier than
|
||||
the dates listed above.
|
||||
|
||||
Deprecated Mount Options
|
||||
========================
|
||||
@@ -217,6 +239,9 @@ Deprecated Mount Options
|
||||
=========================== ================
|
||||
Name Removal Schedule
|
||||
=========================== ================
|
||||
Mounting with V4 filesystem September 2030
|
||||
ikeep/noikeep September 2025
|
||||
attr2/noattr2 September 2025
|
||||
=========================== ================
|
||||
|
||||
|
||||
@@ -331,7 +356,12 @@ The following sysctls are available for the XFS filesystem:
|
||||
Deprecated Sysctls
|
||||
==================
|
||||
|
||||
None at present.
|
||||
=========================== ================
|
||||
Name Removal Schedule
|
||||
=========================== ================
|
||||
fs.xfs.irix_sgid_inherit September 2025
|
||||
fs.xfs.irix_symlink_mode September 2025
|
||||
=========================== ================
|
||||
|
||||
|
||||
Removed Sysctls
|
||||
|
||||
@@ -108,7 +108,7 @@ SunXi family
|
||||
|
||||
* Datasheet
|
||||
|
||||
http://dl.linux-sunxi.org/H3/Allwinner_H3_Datasheet_V1.0.pdf
|
||||
https://linux-sunxi.org/images/4/4b/Allwinner_H3_Datasheet_V1.2.pdf
|
||||
|
||||
- Allwinner R40 (sun8i)
|
||||
|
||||
|
||||
@@ -23,7 +23,7 @@ makes it possible for the kernel to support additional features:
|
||||
For actually enabling [U]EFI support, enable:
|
||||
|
||||
- CONFIG_EFI=y
|
||||
- CONFIG_EFI_VARS=y or m
|
||||
- CONFIG_EFIVAR_FS=y or m
|
||||
|
||||
The implementation depends on receiving information about the UEFI environment
|
||||
in a Flattened Device Tree (FDT) - so is only available with CONFIG_OF.
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
.. _amu_index:
|
||||
|
||||
=======================================================
|
||||
Activity Monitors Unit (AMU) extension in AArch64 Linux
|
||||
=======================================================
|
||||
|
||||
@@ -175,6 +175,8 @@ infrastructure:
|
||||
+------------------------------+---------+---------+
|
||||
| Name | bits | visible |
|
||||
+------------------------------+---------+---------+
|
||||
| MTE | [11-8] | y |
|
||||
+------------------------------+---------+---------+
|
||||
| SSBS | [7-4] | y |
|
||||
+------------------------------+---------+---------+
|
||||
| BT | [3-0] | y |
|
||||
|
||||
@@ -240,6 +240,10 @@ HWCAP2_BTI
|
||||
|
||||
Functionality implied by ID_AA64PFR0_EL1.BT == 0b0001.
|
||||
|
||||
HWCAP2_MTE
|
||||
|
||||
Functionality implied by ID_AA64PFR1_EL1.MTE == 0b0010, as described
|
||||
by Documentation/arm64/memory-tagging-extension.rst.
|
||||
|
||||
4. Unused AT_HWCAP bits
|
||||
-----------------------
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
.. _hugetlbpage_index:
|
||||
|
||||
====================
|
||||
HugeTLBpage on ARM64
|
||||
====================
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
.. _arm64_index:
|
||||
|
||||
==================
|
||||
ARM64 Architecture
|
||||
==================
|
||||
@@ -14,6 +16,7 @@ ARM64 Architecture
|
||||
hugetlbpage
|
||||
legacy_instructions
|
||||
memory
|
||||
memory-tagging-extension
|
||||
perf
|
||||
pointer-authentication
|
||||
silicon-errata
|
||||
|
||||
305
Documentation/arm64/memory-tagging-extension.rst
Normal file
305
Documentation/arm64/memory-tagging-extension.rst
Normal file
@@ -0,0 +1,305 @@
|
||||
===============================================
|
||||
Memory Tagging Extension (MTE) in AArch64 Linux
|
||||
===============================================
|
||||
|
||||
Authors: Vincenzo Frascino <vincenzo.frascino@arm.com>
|
||||
Catalin Marinas <catalin.marinas@arm.com>
|
||||
|
||||
Date: 2020-02-25
|
||||
|
||||
This document describes the provision of the Memory Tagging Extension
|
||||
functionality in AArch64 Linux.
|
||||
|
||||
Introduction
|
||||
============
|
||||
|
||||
ARMv8.5 based processors introduce the Memory Tagging Extension (MTE)
|
||||
feature. MTE is built on top of the ARMv8.0 virtual address tagging TBI
|
||||
(Top Byte Ignore) feature and allows software to access a 4-bit
|
||||
allocation tag for each 16-byte granule in the physical address space.
|
||||
Such memory range must be mapped with the Normal-Tagged memory
|
||||
attribute. A logical tag is derived from bits 59-56 of the virtual
|
||||
address used for the memory access. A CPU with MTE enabled will compare
|
||||
the logical tag against the allocation tag and potentially raise an
|
||||
exception on mismatch, subject to system registers configuration.
|
||||
|
||||
Userspace Support
|
||||
=================
|
||||
|
||||
When ``CONFIG_ARM64_MTE`` is selected and Memory Tagging Extension is
|
||||
supported by the hardware, the kernel advertises the feature to
|
||||
userspace via ``HWCAP2_MTE``.
|
||||
|
||||
PROT_MTE
|
||||
--------
|
||||
|
||||
To access the allocation tags, a user process must enable the Tagged
|
||||
memory attribute on an address range using a new ``prot`` flag for
|
||||
``mmap()`` and ``mprotect()``:
|
||||
|
||||
``PROT_MTE`` - Pages allow access to the MTE allocation tags.
|
||||
|
||||
The allocation tag is set to 0 when such pages are first mapped in the
|
||||
user address space and preserved on copy-on-write. ``MAP_SHARED`` is
|
||||
supported and the allocation tags can be shared between processes.
|
||||
|
||||
**Note**: ``PROT_MTE`` is only supported on ``MAP_ANONYMOUS`` and
|
||||
RAM-based file mappings (``tmpfs``, ``memfd``). Passing it to other
|
||||
types of mapping will result in ``-EINVAL`` returned by these system
|
||||
calls.
|
||||
|
||||
**Note**: The ``PROT_MTE`` flag (and corresponding memory type) cannot
|
||||
be cleared by ``mprotect()``.
|
||||
|
||||
**Note**: ``madvise()`` memory ranges with ``MADV_DONTNEED`` and
|
||||
``MADV_FREE`` may have the allocation tags cleared (set to 0) at any
|
||||
point after the system call.
|
||||
|
||||
Tag Check Faults
|
||||
----------------
|
||||
|
||||
When ``PROT_MTE`` is enabled on an address range and a mismatch between
|
||||
the logical and allocation tags occurs on access, there are three
|
||||
configurable behaviours:
|
||||
|
||||
- *Ignore* - This is the default mode. The CPU (and kernel) ignores the
|
||||
tag check fault.
|
||||
|
||||
- *Synchronous* - The kernel raises a ``SIGSEGV`` synchronously, with
|
||||
``.si_code = SEGV_MTESERR`` and ``.si_addr = <fault-address>``. The
|
||||
memory access is not performed. If ``SIGSEGV`` is ignored or blocked
|
||||
by the offending thread, the containing process is terminated with a
|
||||
``coredump``.
|
||||
|
||||
- *Asynchronous* - The kernel raises a ``SIGSEGV``, in the offending
|
||||
thread, asynchronously following one or multiple tag check faults,
|
||||
with ``.si_code = SEGV_MTEAERR`` and ``.si_addr = 0`` (the faulting
|
||||
address is unknown).
|
||||
|
||||
The user can select the above modes, per thread, using the
|
||||
``prctl(PR_SET_TAGGED_ADDR_CTRL, flags, 0, 0, 0)`` system call where
|
||||
``flags`` contain one of the following values in the ``PR_MTE_TCF_MASK``
|
||||
bit-field:
|
||||
|
||||
- ``PR_MTE_TCF_NONE`` - *Ignore* tag check faults
|
||||
- ``PR_MTE_TCF_SYNC`` - *Synchronous* tag check fault mode
|
||||
- ``PR_MTE_TCF_ASYNC`` - *Asynchronous* tag check fault mode
|
||||
|
||||
The current tag check fault mode can be read using the
|
||||
``prctl(PR_GET_TAGGED_ADDR_CTRL, 0, 0, 0, 0)`` system call.
|
||||
|
||||
Tag checking can also be disabled for a user thread by setting the
|
||||
``PSTATE.TCO`` bit with ``MSR TCO, #1``.
|
||||
|
||||
**Note**: Signal handlers are always invoked with ``PSTATE.TCO = 0``,
|
||||
irrespective of the interrupted context. ``PSTATE.TCO`` is restored on
|
||||
``sigreturn()``.
|
||||
|
||||
**Note**: There are no *match-all* logical tags available for user
|
||||
applications.
|
||||
|
||||
**Note**: Kernel accesses to the user address space (e.g. ``read()``
|
||||
system call) are not checked if the user thread tag checking mode is
|
||||
``PR_MTE_TCF_NONE`` or ``PR_MTE_TCF_ASYNC``. If the tag checking mode is
|
||||
``PR_MTE_TCF_SYNC``, the kernel makes a best effort to check its user
|
||||
address accesses, however it cannot always guarantee it.
|
||||
|
||||
Excluding Tags in the ``IRG``, ``ADDG`` and ``SUBG`` instructions
|
||||
-----------------------------------------------------------------
|
||||
|
||||
The architecture allows excluding certain tags to be randomly generated
|
||||
via the ``GCR_EL1.Exclude`` register bit-field. By default, Linux
|
||||
excludes all tags other than 0. A user thread can enable specific tags
|
||||
in the randomly generated set using the ``prctl(PR_SET_TAGGED_ADDR_CTRL,
|
||||
flags, 0, 0, 0)`` system call where ``flags`` contains the tags bitmap
|
||||
in the ``PR_MTE_TAG_MASK`` bit-field.
|
||||
|
||||
**Note**: The hardware uses an exclude mask but the ``prctl()``
|
||||
interface provides an include mask. An include mask of ``0`` (exclusion
|
||||
mask ``0xffff``) results in the CPU always generating tag ``0``.
|
||||
|
||||
Initial process state
|
||||
---------------------
|
||||
|
||||
On ``execve()``, the new process has the following configuration:
|
||||
|
||||
- ``PR_TAGGED_ADDR_ENABLE`` set to 0 (disabled)
|
||||
- Tag checking mode set to ``PR_MTE_TCF_NONE``
|
||||
- ``PR_MTE_TAG_MASK`` set to 0 (all tags excluded)
|
||||
- ``PSTATE.TCO`` set to 0
|
||||
- ``PROT_MTE`` not set on any of the initial memory maps
|
||||
|
||||
On ``fork()``, the new process inherits the parent's configuration and
|
||||
memory map attributes with the exception of the ``madvise()`` ranges
|
||||
with ``MADV_WIPEONFORK`` which will have the data and tags cleared (set
|
||||
to 0).
|
||||
|
||||
The ``ptrace()`` interface
|
||||
--------------------------
|
||||
|
||||
``PTRACE_PEEKMTETAGS`` and ``PTRACE_POKEMTETAGS`` allow a tracer to read
|
||||
the tags from or set the tags to a tracee's address space. The
|
||||
``ptrace()`` system call is invoked as ``ptrace(request, pid, addr,
|
||||
data)`` where:
|
||||
|
||||
- ``request`` - one of ``PTRACE_PEEKMTETAGS`` or ``PTRACE_POKEMTETAGS``.
|
||||
- ``pid`` - the tracee's PID.
|
||||
- ``addr`` - address in the tracee's address space.
|
||||
- ``data`` - pointer to a ``struct iovec`` where ``iov_base`` points to
|
||||
a buffer of ``iov_len`` length in the tracer's address space.
|
||||
|
||||
The tags in the tracer's ``iov_base`` buffer are represented as one
|
||||
4-bit tag per byte and correspond to a 16-byte MTE tag granule in the
|
||||
tracee's address space.
|
||||
|
||||
**Note**: If ``addr`` is not aligned to a 16-byte granule, the kernel
|
||||
will use the corresponding aligned address.
|
||||
|
||||
``ptrace()`` return value:
|
||||
|
||||
- 0 - tags were copied, the tracer's ``iov_len`` was updated to the
|
||||
number of tags transferred. This may be smaller than the requested
|
||||
``iov_len`` if the requested address range in the tracee's or the
|
||||
tracer's space cannot be accessed or does not have valid tags.
|
||||
- ``-EPERM`` - the specified process cannot be traced.
|
||||
- ``-EIO`` - the tracee's address range cannot be accessed (e.g. invalid
|
||||
address) and no tags copied. ``iov_len`` not updated.
|
||||
- ``-EFAULT`` - fault on accessing the tracer's memory (``struct iovec``
|
||||
or ``iov_base`` buffer) and no tags copied. ``iov_len`` not updated.
|
||||
- ``-EOPNOTSUPP`` - the tracee's address does not have valid tags (never
|
||||
mapped with the ``PROT_MTE`` flag). ``iov_len`` not updated.
|
||||
|
||||
**Note**: There are no transient errors for the requests above, so user
|
||||
programs should not retry in case of a non-zero system call return.
|
||||
|
||||
``PTRACE_GETREGSET`` and ``PTRACE_SETREGSET`` with ``addr ==
|
||||
``NT_ARM_TAGGED_ADDR_CTRL`` allow ``ptrace()`` access to the tagged
|
||||
address ABI control and MTE configuration of a process as per the
|
||||
``prctl()`` options described in
|
||||
Documentation/arm64/tagged-address-abi.rst and above. The corresponding
|
||||
``regset`` is 1 element of 8 bytes (``sizeof(long))``).
|
||||
|
||||
Example of correct usage
|
||||
========================
|
||||
|
||||
*MTE Example code*
|
||||
|
||||
.. code-block:: c
|
||||
|
||||
/*
|
||||
* To be compiled with -march=armv8.5-a+memtag
|
||||
*/
|
||||
#include <errno.h>
|
||||
#include <stdint.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <unistd.h>
|
||||
#include <sys/auxv.h>
|
||||
#include <sys/mman.h>
|
||||
#include <sys/prctl.h>
|
||||
|
||||
/*
|
||||
* From arch/arm64/include/uapi/asm/hwcap.h
|
||||
*/
|
||||
#define HWCAP2_MTE (1 << 18)
|
||||
|
||||
/*
|
||||
* From arch/arm64/include/uapi/asm/mman.h
|
||||
*/
|
||||
#define PROT_MTE 0x20
|
||||
|
||||
/*
|
||||
* From include/uapi/linux/prctl.h
|
||||
*/
|
||||
#define PR_SET_TAGGED_ADDR_CTRL 55
|
||||
#define PR_GET_TAGGED_ADDR_CTRL 56
|
||||
# define PR_TAGGED_ADDR_ENABLE (1UL << 0)
|
||||
# define PR_MTE_TCF_SHIFT 1
|
||||
# define PR_MTE_TCF_NONE (0UL << PR_MTE_TCF_SHIFT)
|
||||
# define PR_MTE_TCF_SYNC (1UL << PR_MTE_TCF_SHIFT)
|
||||
# define PR_MTE_TCF_ASYNC (2UL << PR_MTE_TCF_SHIFT)
|
||||
# define PR_MTE_TCF_MASK (3UL << PR_MTE_TCF_SHIFT)
|
||||
# define PR_MTE_TAG_SHIFT 3
|
||||
# define PR_MTE_TAG_MASK (0xffffUL << PR_MTE_TAG_SHIFT)
|
||||
|
||||
/*
|
||||
* Insert a random logical tag into the given pointer.
|
||||
*/
|
||||
#define insert_random_tag(ptr) ({ \
|
||||
uint64_t __val; \
|
||||
asm("irg %0, %1" : "=r" (__val) : "r" (ptr)); \
|
||||
__val; \
|
||||
})
|
||||
|
||||
/*
|
||||
* Set the allocation tag on the destination address.
|
||||
*/
|
||||
#define set_tag(tagged_addr) do { \
|
||||
asm volatile("stg %0, [%0]" : : "r" (tagged_addr) : "memory"); \
|
||||
} while (0)
|
||||
|
||||
int main()
|
||||
{
|
||||
unsigned char *a;
|
||||
unsigned long page_sz = sysconf(_SC_PAGESIZE);
|
||||
unsigned long hwcap2 = getauxval(AT_HWCAP2);
|
||||
|
||||
/* check if MTE is present */
|
||||
if (!(hwcap2 & HWCAP2_MTE))
|
||||
return EXIT_FAILURE;
|
||||
|
||||
/*
|
||||
* Enable the tagged address ABI, synchronous MTE tag check faults and
|
||||
* allow all non-zero tags in the randomly generated set.
|
||||
*/
|
||||
if (prctl(PR_SET_TAGGED_ADDR_CTRL,
|
||||
PR_TAGGED_ADDR_ENABLE | PR_MTE_TCF_SYNC | (0xfffe << PR_MTE_TAG_SHIFT),
|
||||
0, 0, 0)) {
|
||||
perror("prctl() failed");
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
|
||||
a = mmap(0, page_sz, PROT_READ | PROT_WRITE,
|
||||
MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
|
||||
if (a == MAP_FAILED) {
|
||||
perror("mmap() failed");
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
|
||||
/*
|
||||
* Enable MTE on the above anonymous mmap. The flag could be passed
|
||||
* directly to mmap() and skip this step.
|
||||
*/
|
||||
if (mprotect(a, page_sz, PROT_READ | PROT_WRITE | PROT_MTE)) {
|
||||
perror("mprotect() failed");
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
|
||||
/* access with the default tag (0) */
|
||||
a[0] = 1;
|
||||
a[1] = 2;
|
||||
|
||||
printf("a[0] = %hhu a[1] = %hhu\n", a[0], a[1]);
|
||||
|
||||
/* set the logical and allocation tags */
|
||||
a = (unsigned char *)insert_random_tag(a);
|
||||
set_tag(a);
|
||||
|
||||
printf("%p\n", a);
|
||||
|
||||
/* non-zero tag access */
|
||||
a[0] = 3;
|
||||
printf("a[0] = %hhu a[1] = %hhu\n", a[0], a[1]);
|
||||
|
||||
/*
|
||||
* If MTE is enabled correctly the next instruction will generate an
|
||||
* exception.
|
||||
*/
|
||||
printf("Expecting SIGSEGV...\n");
|
||||
a[16] = 0xdd;
|
||||
|
||||
/* this should not be printed in the PR_MTE_TCF_SYNC mode */
|
||||
printf("...haven't got one\n");
|
||||
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
@@ -63,10 +63,10 @@ Software staging queues
|
||||
~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
The block IO subsystem adds requests in the software staging queues
|
||||
(represented by struct :c:type:`blk_mq_ctx`) in case that they weren't sent
|
||||
(represented by struct blk_mq_ctx) in case that they weren't sent
|
||||
directly to the driver. A request is one or more BIOs. They arrived at the
|
||||
block layer through the data structure struct :c:type:`bio`. The block layer
|
||||
will then build a new structure from it, the struct :c:type:`request` that will
|
||||
block layer through the data structure struct bio. The block layer
|
||||
will then build a new structure from it, the struct request that will
|
||||
be used to communicate with the device driver. Each queue has its own lock and
|
||||
the number of queues is defined by a per-CPU or per-node basis.
|
||||
|
||||
@@ -102,7 +102,7 @@ hardware queue will be drained in sequence according to their mapping.
|
||||
Hardware dispatch queues
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
The hardware queue (represented by struct :c:type:`blk_mq_hw_ctx`) is a struct
|
||||
The hardware queue (represented by struct blk_mq_hw_ctx) is a struct
|
||||
used by device drivers to map the device submission queues (or device DMA ring
|
||||
buffer), and are the last step of the block layer submission code before the
|
||||
low level device driver taking ownership of the request. To run this queue, the
|
||||
@@ -110,9 +110,9 @@ block layer removes requests from the associated software queues and tries to
|
||||
dispatch to the hardware.
|
||||
|
||||
If it's not possible to send the requests directly to hardware, they will be
|
||||
added to a linked list (:c:type:`hctx->dispatch`) of requests. Then,
|
||||
added to a linked list (``hctx->dispatch``) of requests. Then,
|
||||
next time the block layer runs a queue, it will send the requests laying at the
|
||||
:c:type:`dispatch` list first, to ensure a fairness dispatch with those
|
||||
``dispatch`` list first, to ensure a fairness dispatch with those
|
||||
requests that were ready to be sent first. The number of hardware queues
|
||||
depends on the number of hardware contexts supported by the hardware and its
|
||||
device driver, but it will not be more than the number of cores of the system.
|
||||
|
||||
@@ -52,7 +52,7 @@ Constraints and notes
|
||||
Design
|
||||
======
|
||||
|
||||
We add a :c:type:`struct bio_crypt_ctx` to :c:type:`struct bio` that can
|
||||
We add a struct bio_crypt_ctx to struct bio that can
|
||||
represent an encryption context, because we need to be able to pass this
|
||||
encryption context from the upper layers (like the fs layer) to the
|
||||
device driver to act upon.
|
||||
@@ -85,7 +85,7 @@ blk-mq changes, other block layer changes and blk-crypto-fallback
|
||||
=================================================================
|
||||
|
||||
We add a pointer to a ``bi_crypt_context`` and ``keyslot`` to
|
||||
:c:type:`struct request`. These will be referred to as the ``crypto fields``
|
||||
struct request. These will be referred to as the ``crypto fields``
|
||||
for the request. This ``keyslot`` is the keyslot into which the
|
||||
``bi_crypt_context`` has been programmed in the KSM of the ``request_queue``
|
||||
that this request is being sent to.
|
||||
@@ -118,7 +118,7 @@ of the algorithm being used adheres to spec and functions correctly).
|
||||
If a ``request queue``'s inline encryption hardware claimed to support the
|
||||
encryption context specified with a bio, then it will not be handled by the
|
||||
``blk-crypto-fallback``. We will eventually reach a point in blk-mq when a
|
||||
:c:type:`struct request` needs to be allocated for that bio. At that point,
|
||||
struct request needs to be allocated for that bio. At that point,
|
||||
blk-mq tries to program the encryption context into the ``request_queue``'s
|
||||
keyslot_manager, and obtain a keyslot, which it stores in its newly added
|
||||
``keyslot`` field. This keyslot is released when the request is completed.
|
||||
@@ -188,7 +188,7 @@ keyslots supported by the hardware.
|
||||
The device driver also needs to tell the KSM how to actually manipulate the
|
||||
IE hardware in the device to do things like programming the crypto key into
|
||||
the IE hardware into a particular keyslot. All this is achieved through the
|
||||
:c:type:`struct blk_ksm_ll_ops` field in the KSM that the device driver
|
||||
struct blk_ksm_ll_ops field in the KSM that the device driver
|
||||
must fill up after initing the ``blk_keyslot_manager``.
|
||||
|
||||
The KSM also handles runtime power management for the device when applicable
|
||||
|
||||
@@ -124,6 +124,10 @@ For zoned block devices (zoned attribute indicating "host-managed" or
|
||||
EXPLICIT OPEN, IMPLICIT OPEN or CLOSED, is limited by this value.
|
||||
If this value is 0, there is no limit.
|
||||
|
||||
If the host attempts to exceed this limit, the driver should report this error
|
||||
with BLK_STS_ZONE_ACTIVE_RESOURCE, which user space may see as the EOVERFLOW
|
||||
errno.
|
||||
|
||||
max_open_zones (RO)
|
||||
-------------------
|
||||
For zoned block devices (zoned attribute indicating "host-managed" or
|
||||
@@ -131,6 +135,10 @@ For zoned block devices (zoned attribute indicating "host-managed" or
|
||||
EXPLICIT OPEN or IMPLICIT OPEN, is limited by this value.
|
||||
If this value is 0, there is no limit.
|
||||
|
||||
If the host attempts to exceed this limit, the driver should report this error
|
||||
with BLK_STS_ZONE_OPEN_RESOURCE, which user space may see as the ETOOMANYREFS
|
||||
errno.
|
||||
|
||||
max_sectors_kb (RW)
|
||||
-------------------
|
||||
This is the maximum number of kilobytes that the block layer will allow
|
||||
|
||||
@@ -60,13 +60,13 @@ Q: Where can I find patches currently under discussion for BPF subsystem?
|
||||
A: All patches that are Cc'ed to netdev are queued for review under netdev
|
||||
patchwork project:
|
||||
|
||||
http://patchwork.ozlabs.org/project/netdev/list/
|
||||
https://patchwork.kernel.org/project/netdevbpf/list/
|
||||
|
||||
Those patches which target BPF, are assigned to a 'bpf' delegate for
|
||||
further processing from BPF maintainers. The current queue with
|
||||
patches under review can be found at:
|
||||
|
||||
https://patchwork.ozlabs.org/project/netdev/list/?delegate=77147
|
||||
https://patchwork.kernel.org/project/netdevbpf/list/?delegate=121173
|
||||
|
||||
Once the patches have been reviewed by the BPF community as a whole
|
||||
and approved by the BPF maintainers, their status in patchwork will be
|
||||
@@ -149,7 +149,7 @@ In case the patch or patch series has to be reworked and sent out
|
||||
again in a second or later revision, it is also required to add a
|
||||
version number (``v2``, ``v3``, ...) into the subject prefix::
|
||||
|
||||
git format-patch --subject-prefix='PATCH net-next v2' start..finish
|
||||
git format-patch --subject-prefix='PATCH bpf-next v2' start..finish
|
||||
|
||||
When changes have been requested to the patch series, always send the
|
||||
whole patch series again with the feedback incorporated (never send
|
||||
@@ -479,17 +479,18 @@ LLVM's static compiler lists the supported targets through
|
||||
|
||||
$ llc --version
|
||||
LLVM (http://llvm.org/):
|
||||
LLVM version 6.0.0svn
|
||||
LLVM version 10.0.0
|
||||
Optimized build.
|
||||
Default target: x86_64-unknown-linux-gnu
|
||||
Host CPU: skylake
|
||||
|
||||
Registered Targets:
|
||||
bpf - BPF (host endian)
|
||||
bpfeb - BPF (big endian)
|
||||
bpfel - BPF (little endian)
|
||||
x86 - 32-bit X86: Pentium-Pro and above
|
||||
x86-64 - 64-bit X86: EM64T and AMD64
|
||||
aarch64 - AArch64 (little endian)
|
||||
bpf - BPF (host endian)
|
||||
bpfeb - BPF (big endian)
|
||||
bpfel - BPF (little endian)
|
||||
x86 - 32-bit X86: Pentium-Pro and above
|
||||
x86-64 - 64-bit X86: EM64T and AMD64
|
||||
|
||||
For developers in order to utilize the latest features added to LLVM's
|
||||
BPF back end, it is advisable to run the latest LLVM releases. Support
|
||||
@@ -517,6 +518,10 @@ from the git repositories::
|
||||
The built binaries can then be found in the build/bin/ directory, where
|
||||
you can point the PATH variable to.
|
||||
|
||||
Set ``-DLLVM_TARGETS_TO_BUILD`` equal to the target you wish to build, you
|
||||
will find a full list of targets within the llvm-project/llvm/lib/Target
|
||||
directory.
|
||||
|
||||
Q: Reporting LLVM BPF issues
|
||||
----------------------------
|
||||
Q: Should I notify BPF kernel maintainers about issues in LLVM's BPF code
|
||||
|
||||
@@ -724,6 +724,31 @@ want to define unused entry in BTF_ID_LIST, like::
|
||||
BTF_ID_UNUSED
|
||||
BTF_ID(struct, task_struct)
|
||||
|
||||
The ``BTF_SET_START/END`` macros pair defines sorted list of BTF ID values
|
||||
and their count, with following syntax::
|
||||
|
||||
BTF_SET_START(set)
|
||||
BTF_ID(type1, name1)
|
||||
BTF_ID(type2, name2)
|
||||
BTF_SET_END(set)
|
||||
|
||||
resulting in following layout in .BTF_ids section::
|
||||
|
||||
__BTF_ID__set__set:
|
||||
.zero 4
|
||||
__BTF_ID__type1__name1__3:
|
||||
.zero 4
|
||||
__BTF_ID__type2__name2__4:
|
||||
.zero 4
|
||||
|
||||
The ``struct btf_id_set set;`` variable is defined to access the list.
|
||||
|
||||
The ``typeX`` name can be one of following::
|
||||
|
||||
struct, union, typedef, func
|
||||
|
||||
and is used as a filter when resolving the BTF ID value.
|
||||
|
||||
All the BTF ID lists and sets are compiled in the .BTF_ids section and
|
||||
resolved during the linking phase of kernel build by ``resolve_btfids`` tool.
|
||||
|
||||
|
||||
@@ -52,6 +52,7 @@ Program types
|
||||
prog_cgroup_sysctl
|
||||
prog_flow_dissector
|
||||
bpf_lsm
|
||||
prog_sk_lookup
|
||||
|
||||
|
||||
Map types
|
||||
|
||||
98
Documentation/bpf/prog_sk_lookup.rst
Normal file
98
Documentation/bpf/prog_sk_lookup.rst
Normal file
@@ -0,0 +1,98 @@
|
||||
.. SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
|
||||
|
||||
=====================
|
||||
BPF sk_lookup program
|
||||
=====================
|
||||
|
||||
BPF sk_lookup program type (``BPF_PROG_TYPE_SK_LOOKUP``) introduces programmability
|
||||
into the socket lookup performed by the transport layer when a packet is to be
|
||||
delivered locally.
|
||||
|
||||
When invoked BPF sk_lookup program can select a socket that will receive the
|
||||
incoming packet by calling the ``bpf_sk_assign()`` BPF helper function.
|
||||
|
||||
Hooks for a common attach point (``BPF_SK_LOOKUP``) exist for both TCP and UDP.
|
||||
|
||||
Motivation
|
||||
==========
|
||||
|
||||
BPF sk_lookup program type was introduced to address setup scenarios where
|
||||
binding sockets to an address with ``bind()`` socket call is impractical, such
|
||||
as:
|
||||
|
||||
1. receiving connections on a range of IP addresses, e.g. 192.0.2.0/24, when
|
||||
binding to a wildcard address ``INADRR_ANY`` is not possible due to a port
|
||||
conflict,
|
||||
2. receiving connections on all or a wide range of ports, i.e. an L7 proxy use
|
||||
case.
|
||||
|
||||
Such setups would require creating and ``bind()``'ing one socket to each of the
|
||||
IP address/port in the range, leading to resource consumption and potential
|
||||
latency spikes during socket lookup.
|
||||
|
||||
Attachment
|
||||
==========
|
||||
|
||||
BPF sk_lookup program can be attached to a network namespace with
|
||||
``bpf(BPF_LINK_CREATE, ...)`` syscall using the ``BPF_SK_LOOKUP`` attach type and a
|
||||
netns FD as attachment ``target_fd``.
|
||||
|
||||
Multiple programs can be attached to one network namespace. Programs will be
|
||||
invoked in the same order as they were attached.
|
||||
|
||||
Hooks
|
||||
=====
|
||||
|
||||
The attached BPF sk_lookup programs run whenever the transport layer needs to
|
||||
find a listening (TCP) or an unconnected (UDP) socket for an incoming packet.
|
||||
|
||||
Incoming traffic to established (TCP) and connected (UDP) sockets is delivered
|
||||
as usual without triggering the BPF sk_lookup hook.
|
||||
|
||||
The attached BPF programs must return with either ``SK_PASS`` or ``SK_DROP``
|
||||
verdict code. As for other BPF program types that are network filters,
|
||||
``SK_PASS`` signifies that the socket lookup should continue on to regular
|
||||
hashtable-based lookup, while ``SK_DROP`` causes the transport layer to drop the
|
||||
packet.
|
||||
|
||||
A BPF sk_lookup program can also select a socket to receive the packet by
|
||||
calling ``bpf_sk_assign()`` BPF helper. Typically, the program looks up a socket
|
||||
in a map holding sockets, such as ``SOCKMAP`` or ``SOCKHASH``, and passes a
|
||||
``struct bpf_sock *`` to ``bpf_sk_assign()`` helper to record the
|
||||
selection. Selecting a socket only takes effect if the program has terminated
|
||||
with ``SK_PASS`` code.
|
||||
|
||||
When multiple programs are attached, the end result is determined from return
|
||||
codes of all the programs according to the following rules:
|
||||
|
||||
1. If any program returned ``SK_PASS`` and selected a valid socket, the socket
|
||||
is used as the result of the socket lookup.
|
||||
2. If more than one program returned ``SK_PASS`` and selected a socket, the last
|
||||
selection takes effect.
|
||||
3. If any program returned ``SK_DROP``, and no program returned ``SK_PASS`` and
|
||||
selected a socket, socket lookup fails.
|
||||
4. If all programs returned ``SK_PASS`` and none of them selected a socket,
|
||||
socket lookup continues on.
|
||||
|
||||
API
|
||||
===
|
||||
|
||||
In its context, an instance of ``struct bpf_sk_lookup``, BPF sk_lookup program
|
||||
receives information about the packet that triggered the socket lookup. Namely:
|
||||
|
||||
* IP version (``AF_INET`` or ``AF_INET6``),
|
||||
* L4 protocol identifier (``IPPROTO_TCP`` or ``IPPROTO_UDP``),
|
||||
* source and destination IP address,
|
||||
* source and destination L4 port,
|
||||
* the socket that has been selected with ``bpf_sk_assign()``.
|
||||
|
||||
Refer to ``struct bpf_sk_lookup`` declaration in ``linux/bpf.h`` user API
|
||||
header, and `bpf-helpers(7)
|
||||
<https://man7.org/linux/man-pages/man7/bpf-helpers.7.html>`_ man-page section
|
||||
for ``bpf_sk_assign()`` for details.
|
||||
|
||||
Example
|
||||
=======
|
||||
|
||||
See ``tools/testing/selftests/bpf/prog_tests/sk_lookup.c`` for the reference
|
||||
implementation.
|
||||
@@ -182,9 +182,6 @@ in the order of reservations, but only after all previous records where
|
||||
already committed. It is thus possible for slow producers to temporarily hold
|
||||
off submitted records, that were reserved later.
|
||||
|
||||
Reservation/commit/consumer protocol is verified by litmus tests in
|
||||
Documentation/litmus_tests/bpf-rb/_.
|
||||
|
||||
One interesting implementation bit, that significantly simplifies (and thus
|
||||
speeds up as well) implementation of both producers and consumers is how data
|
||||
area is mapped twice contiguously back-to-back in the virtual memory. This
|
||||
@@ -200,7 +197,7 @@ a self-pacing notifications of new data being availability.
|
||||
being available after commit only if consumer has already caught up right up to
|
||||
the record being committed. If not, consumer still has to catch up and thus
|
||||
will see new data anyways without needing an extra poll notification.
|
||||
Benchmarks (see tools/testing/selftests/bpf/benchs/bench_ringbuf.c_) show that
|
||||
Benchmarks (see tools/testing/selftests/bpf/benchs/bench_ringbufs.c) show that
|
||||
this allows to achieve a very high throughput without having to resort to
|
||||
tricks like "notify only every Nth sample", which are necessary with perf
|
||||
buffer. For extreme cases, when BPF program wants more manual control of
|
||||
|
||||
@@ -36,10 +36,82 @@ needs_sphinx = '1.3'
|
||||
# Add any Sphinx extension module names here, as strings. They can be
|
||||
# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
|
||||
# ones.
|
||||
extensions = ['kerneldoc', 'rstFlatTable', 'kernel_include', 'cdomain',
|
||||
extensions = ['kerneldoc', 'rstFlatTable', 'kernel_include',
|
||||
'kfigure', 'sphinx.ext.ifconfig', 'automarkup',
|
||||
'maintainers_include', 'sphinx.ext.autosectionlabel' ]
|
||||
|
||||
#
|
||||
# cdomain is badly broken in Sphinx 3+. Leaving it out generates *most*
|
||||
# of the docs correctly, but not all. Scream bloody murder but allow
|
||||
# the process to proceed; hopefully somebody will fix this properly soon.
|
||||
#
|
||||
if major >= 3:
|
||||
sys.stderr.write('''WARNING: The kernel documentation build process
|
||||
support for Sphinx v3.0 and above is brand new. Be prepared for
|
||||
possible issues in the generated output.
|
||||
''')
|
||||
if minor > 0 or patch >= 2:
|
||||
# Sphinx c function parser is more pedantic with regards to type
|
||||
# checking. Due to that, having macros at c:function cause problems.
|
||||
# Those needed to be scaped by using c_id_attributes[] array
|
||||
c_id_attributes = [
|
||||
# GCC Compiler types not parsed by Sphinx:
|
||||
"__restrict__",
|
||||
|
||||
# include/linux/compiler_types.h:
|
||||
"__iomem",
|
||||
"__kernel",
|
||||
"noinstr",
|
||||
"notrace",
|
||||
"__percpu",
|
||||
"__rcu",
|
||||
"__user",
|
||||
|
||||
# include/linux/compiler_attributes.h:
|
||||
"__alias",
|
||||
"__aligned",
|
||||
"__aligned_largest",
|
||||
"__always_inline",
|
||||
"__assume_aligned",
|
||||
"__cold",
|
||||
"__attribute_const__",
|
||||
"__copy",
|
||||
"__pure",
|
||||
"__designated_init",
|
||||
"__visible",
|
||||
"__printf",
|
||||
"__scanf",
|
||||
"__gnu_inline",
|
||||
"__malloc",
|
||||
"__mode",
|
||||
"__no_caller_saved_registers",
|
||||
"__noclone",
|
||||
"__nonstring",
|
||||
"__noreturn",
|
||||
"__packed",
|
||||
"__pure",
|
||||
"__section",
|
||||
"__always_unused",
|
||||
"__maybe_unused",
|
||||
"__used",
|
||||
"__weak",
|
||||
"noinline",
|
||||
|
||||
# include/linux/memblock.h:
|
||||
"__init_memblock",
|
||||
"__meminit",
|
||||
|
||||
# include/linux/init.h:
|
||||
"__init",
|
||||
"__ref",
|
||||
|
||||
# include/linux/linkage.h:
|
||||
"asmlinkage",
|
||||
]
|
||||
|
||||
else:
|
||||
extensions.append('cdomain')
|
||||
|
||||
# Ensure that autosectionlabel will produce unique names
|
||||
autosectionlabel_prefix_document = True
|
||||
autosectionlabel_maxdepth = 2
|
||||
|
||||
@@ -30,7 +30,7 @@ which didn't support these methods.
|
||||
Command Line Switches
|
||||
=====================
|
||||
``maxcpus=n``
|
||||
Restrict boot time CPUs to *n*. Say if you have fourV CPUs, using
|
||||
Restrict boot time CPUs to *n*. Say if you have four CPUs, using
|
||||
``maxcpus=2`` will only boot two. You can choose to bring the
|
||||
other CPUs later online.
|
||||
|
||||
|
||||
@@ -516,48 +516,93 @@ routines, e.g.:::
|
||||
}
|
||||
|
||||
|
||||
Part II - Advanced dma usage
|
||||
----------------------------
|
||||
Part II - Non-coherent DMA allocations
|
||||
--------------------------------------
|
||||
|
||||
Warning: These pieces of the DMA API should not be used in the
|
||||
majority of cases, since they cater for unlikely corner cases that
|
||||
don't belong in usual drivers.
|
||||
These APIs allow to allocate pages that are guaranteed to be DMA addressable
|
||||
by the passed in device, but which need explicit management of memory ownership
|
||||
for the kernel vs the device.
|
||||
|
||||
If you don't understand how cache line coherency works between a
|
||||
processor and an I/O device, you should not be using this part of the
|
||||
API at all.
|
||||
If you don't understand how cache line coherency works between a processor and
|
||||
an I/O device, you should not be using this part of the API.
|
||||
|
||||
::
|
||||
|
||||
void *
|
||||
dma_alloc_attrs(struct device *dev, size_t size, dma_addr_t *dma_handle,
|
||||
gfp_t flag, unsigned long attrs)
|
||||
dma_alloc_noncoherent(struct device *dev, size_t size,
|
||||
dma_addr_t *dma_handle, enum dma_data_direction dir,
|
||||
gfp_t gfp)
|
||||
|
||||
Identical to dma_alloc_coherent() except that when the
|
||||
DMA_ATTR_NON_CONSISTENT flags is passed in the attrs argument, the
|
||||
platform will choose to return either consistent or non-consistent memory
|
||||
as it sees fit. By using this API, you are guaranteeing to the platform
|
||||
that you have all the correct and necessary sync points for this memory
|
||||
in the driver should it choose to return non-consistent memory.
|
||||
This routine allocates a region of <size> bytes of consistent memory. It
|
||||
returns a pointer to the allocated region (in the processor's virtual address
|
||||
space) or NULL if the allocation failed. The returned memory may or may not
|
||||
be in the kernel direct mapping. Drivers must not call virt_to_page on
|
||||
the returned memory region.
|
||||
|
||||
Note: where the platform can return consistent memory, it will
|
||||
guarantee that the sync points become nops.
|
||||
It also returns a <dma_handle> which may be cast to an unsigned integer the
|
||||
same width as the bus and given to the device as the DMA address base of
|
||||
the region.
|
||||
|
||||
Warning: Handling non-consistent memory is a real pain. You should
|
||||
only use this API if you positively know your driver will be
|
||||
required to work on one of the rare (usually non-PCI) architectures
|
||||
that simply cannot make consistent memory.
|
||||
The dir parameter specified if data is read and/or written by the device,
|
||||
see dma_map_single() for details.
|
||||
|
||||
The gfp parameter allows the caller to specify the ``GFP_`` flags (see
|
||||
kmalloc()) for the allocation, but rejects flags used to specify a memory
|
||||
zone such as GFP_DMA or GFP_HIGHMEM.
|
||||
|
||||
Before giving the memory to the device, dma_sync_single_for_device() needs
|
||||
to be called, and before reading memory written by the device,
|
||||
dma_sync_single_for_cpu(), just like for streaming DMA mappings that are
|
||||
reused.
|
||||
|
||||
::
|
||||
|
||||
void
|
||||
dma_free_attrs(struct device *dev, size_t size, void *cpu_addr,
|
||||
dma_addr_t dma_handle, unsigned long attrs)
|
||||
dma_free_noncoherent(struct device *dev, size_t size, void *cpu_addr,
|
||||
dma_addr_t dma_handle, enum dma_data_direction dir)
|
||||
|
||||
Free memory allocated by the dma_alloc_attrs(). All common
|
||||
parameters must be identical to those otherwise passed to dma_free_coherent,
|
||||
and the attrs argument must be identical to the attrs passed to
|
||||
dma_alloc_attrs().
|
||||
Free a region of memory previously allocated using dma_alloc_noncoherent().
|
||||
dev, size and dma_handle and dir must all be the same as those passed into
|
||||
dma_alloc_noncoherent(). cpu_addr must be the virtual address returned by
|
||||
dma_alloc_noncoherent().
|
||||
|
||||
::
|
||||
|
||||
struct page *
|
||||
dma_alloc_pages(struct device *dev, size_t size, dma_addr_t *dma_handle,
|
||||
enum dma_data_direction dir, gfp_t gfp)
|
||||
|
||||
This routine allocates a region of <size> bytes of non-coherent memory. It
|
||||
returns a pointer to first struct page for the region, or NULL if the
|
||||
allocation failed. The resulting struct page can be used for everything a
|
||||
struct page is suitable for.
|
||||
|
||||
It also returns a <dma_handle> which may be cast to an unsigned integer the
|
||||
same width as the bus and given to the device as the DMA address base of
|
||||
the region.
|
||||
|
||||
The dir parameter specified if data is read and/or written by the device,
|
||||
see dma_map_single() for details.
|
||||
|
||||
The gfp parameter allows the caller to specify the ``GFP_`` flags (see
|
||||
kmalloc()) for the allocation, but rejects flags used to specify a memory
|
||||
zone such as GFP_DMA or GFP_HIGHMEM.
|
||||
|
||||
Before giving the memory to the device, dma_sync_single_for_device() needs
|
||||
to be called, and before reading memory written by the device,
|
||||
dma_sync_single_for_cpu(), just like for streaming DMA mappings that are
|
||||
reused.
|
||||
|
||||
::
|
||||
|
||||
void
|
||||
dma_free_pages(struct device *dev, size_t size, struct page *page,
|
||||
dma_addr_t dma_handle, enum dma_data_direction dir)
|
||||
|
||||
Free a region of memory previously allocated using dma_alloc_pages().
|
||||
dev, size and dma_handle and dir must all be the same as those passed into
|
||||
dma_alloc_noncoherent(). page must be the pointer returned by
|
||||
dma_alloc_pages().
|
||||
|
||||
::
|
||||
|
||||
@@ -575,41 +620,6 @@ memory or doing partial flushes.
|
||||
into the width returned by this call. It will also always be a power
|
||||
of two for easy alignment.
|
||||
|
||||
::
|
||||
|
||||
void
|
||||
dma_cache_sync(struct device *dev, void *vaddr, size_t size,
|
||||
enum dma_data_direction direction)
|
||||
|
||||
Do a partial sync of memory that was allocated by dma_alloc_attrs() with
|
||||
the DMA_ATTR_NON_CONSISTENT flag starting at virtual address vaddr and
|
||||
continuing on for size. Again, you *must* observe the cache line
|
||||
boundaries when doing this.
|
||||
|
||||
::
|
||||
|
||||
int
|
||||
dma_declare_coherent_memory(struct device *dev, phys_addr_t phys_addr,
|
||||
dma_addr_t device_addr, size_t size);
|
||||
|
||||
Declare region of memory to be handed out by dma_alloc_coherent() when
|
||||
it's asked for coherent memory for this device.
|
||||
|
||||
phys_addr is the CPU physical address to which the memory is currently
|
||||
assigned (this will be ioremapped so the CPU can access the region).
|
||||
|
||||
device_addr is the DMA address the device needs to be programmed
|
||||
with to actually address this memory (this will be handed out as the
|
||||
dma_addr_t in dma_alloc_coherent()).
|
||||
|
||||
size is the size of the area (must be multiples of PAGE_SIZE).
|
||||
|
||||
As a simplification for the platforms, only *one* such region of
|
||||
memory may be declared per device.
|
||||
|
||||
For reasons of efficiency, most platforms choose to track the declared
|
||||
region only at the granularity of a page. For smaller allocations,
|
||||
you should use the dma_pool() API.
|
||||
|
||||
Part III - Debug drivers use of the DMA-API
|
||||
-------------------------------------------
|
||||
|
||||
@@ -25,14 +25,6 @@ Since it is optional for platforms to implement DMA_ATTR_WRITE_COMBINE,
|
||||
those that do not will simply ignore the attribute and exhibit default
|
||||
behavior.
|
||||
|
||||
DMA_ATTR_NON_CONSISTENT
|
||||
-----------------------
|
||||
|
||||
DMA_ATTR_NON_CONSISTENT lets the platform to choose to return either
|
||||
consistent or non-consistent memory as it sees fit. By using this API,
|
||||
you are guaranteeing to the platform that you have all the correct and
|
||||
necessary sync points for this memory in the driver.
|
||||
|
||||
DMA_ATTR_NO_KERNEL_MAPPING
|
||||
--------------------------
|
||||
|
||||
|
||||
@@ -419,6 +419,7 @@ functions which are exported.
|
||||
.. kernel-doc:: kernel/irq/manage.c
|
||||
|
||||
.. kernel-doc:: kernel/irq/chip.c
|
||||
:export:
|
||||
|
||||
Internal Functions Provided
|
||||
===========================
|
||||
@@ -431,6 +432,7 @@ functions.
|
||||
.. kernel-doc:: kernel/irq/handle.c
|
||||
|
||||
.. kernel-doc:: kernel/irq/chip.c
|
||||
:internal:
|
||||
|
||||
Credits
|
||||
=======
|
||||
|
||||
@@ -231,12 +231,6 @@ Refer to the file kernel/module.c for more information.
|
||||
Hardware Interfaces
|
||||
===================
|
||||
|
||||
Interrupt Handling
|
||||
------------------
|
||||
|
||||
.. kernel-doc:: kernel/irq/manage.c
|
||||
:export:
|
||||
|
||||
DMA Channels
|
||||
------------
|
||||
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user