mirror of
https://github.com/torvalds/linux.git
synced 2026-09-27 11:02:03 +02:00
Merge drm/drm-next into drm-intel-next
Sync-up some display code needed for Async flips refactor. Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
This commit is contained in:
commit
b8304863a3
|
|
@ -140,8 +140,8 @@ ForEachMacros:
|
||||||
- 'damon_for_each_scheme_safe'
|
- 'damon_for_each_scheme_safe'
|
||||||
- 'damon_for_each_target'
|
- 'damon_for_each_target'
|
||||||
- 'damon_for_each_target_safe'
|
- 'damon_for_each_target_safe'
|
||||||
- 'damos_for_each_filter'
|
- 'damos_for_each_core_filter'
|
||||||
- 'damos_for_each_filter_safe'
|
- 'damos_for_each_core_filter_safe'
|
||||||
- 'damos_for_each_ops_filter'
|
- 'damos_for_each_ops_filter'
|
||||||
- 'damos_for_each_ops_filter_safe'
|
- 'damos_for_each_ops_filter_safe'
|
||||||
- 'damos_for_each_quota_goal'
|
- 'damos_for_each_quota_goal'
|
||||||
|
|
@ -415,6 +415,7 @@ ForEachMacros:
|
||||||
- 'for_each_prop_dlc_cpus'
|
- 'for_each_prop_dlc_cpus'
|
||||||
- 'for_each_prop_dlc_platforms'
|
- 'for_each_prop_dlc_platforms'
|
||||||
- 'for_each_property_of_node'
|
- 'for_each_property_of_node'
|
||||||
|
- 'for_each_pt_level_entry'
|
||||||
- 'for_each_rdt_resource'
|
- 'for_each_rdt_resource'
|
||||||
- 'for_each_reg'
|
- 'for_each_reg'
|
||||||
- 'for_each_reg_filtered'
|
- 'for_each_reg_filtered'
|
||||||
|
|
|
||||||
1
.gitignore
vendored
1
.gitignore
vendored
|
|
@ -41,6 +41,7 @@
|
||||||
*.o.*
|
*.o.*
|
||||||
*.patch
|
*.patch
|
||||||
*.pyc
|
*.pyc
|
||||||
|
*.rlib
|
||||||
*.rmeta
|
*.rmeta
|
||||||
*.rpm
|
*.rpm
|
||||||
*.rsi
|
*.rsi
|
||||||
|
|
|
||||||
24
.mailmap
24
.mailmap
|
|
@ -186,6 +186,9 @@ Christian Brauner <brauner@kernel.org> <christian@brauner.io>
|
||||||
Christian Brauner <brauner@kernel.org> <christian.brauner@canonical.com>
|
Christian Brauner <brauner@kernel.org> <christian.brauner@canonical.com>
|
||||||
Christian Brauner <brauner@kernel.org> <christian.brauner@ubuntu.com>
|
Christian Brauner <brauner@kernel.org> <christian.brauner@ubuntu.com>
|
||||||
Christian Marangi <ansuelsmth@gmail.com>
|
Christian Marangi <ansuelsmth@gmail.com>
|
||||||
|
Christophe Leroy <chleroy@kernel.org> <christophe.leroy@c-s.fr>
|
||||||
|
Christophe Leroy <chleroy@kernel.org> <christophe.leroy@csgroup.eu>
|
||||||
|
Christophe Leroy <chleroy@kernel.org> <christophe.leroy2@cs-soprasteria.com>
|
||||||
Christophe Ricard <christophe.ricard@gmail.com>
|
Christophe Ricard <christophe.ricard@gmail.com>
|
||||||
Christopher Obbard <christopher.obbard@linaro.org> <chris.obbard@collabora.com>
|
Christopher Obbard <christopher.obbard@linaro.org> <chris.obbard@collabora.com>
|
||||||
Christoph Hellwig <hch@lst.de>
|
Christoph Hellwig <hch@lst.de>
|
||||||
|
|
@ -300,6 +303,7 @@ Hans de Goede <hansg@kernel.org> <hdegoede@redhat.com>
|
||||||
Hans Verkuil <hverkuil@kernel.org> <hverkuil@xs4all.nl>
|
Hans Verkuil <hverkuil@kernel.org> <hverkuil@xs4all.nl>
|
||||||
Hans Verkuil <hverkuil@kernel.org> <hverkuil-cisco@xs4all.nl>
|
Hans Verkuil <hverkuil@kernel.org> <hverkuil-cisco@xs4all.nl>
|
||||||
Hans Verkuil <hverkuil@kernel.org> <hansverk@cisco.com>
|
Hans Verkuil <hverkuil@kernel.org> <hansverk@cisco.com>
|
||||||
|
Hao Ge <hao.ge@linux.dev> <gehao@kylinos.cn>
|
||||||
Harry Yoo <harry.yoo@oracle.com> <42.hyeyoo@gmail.com>
|
Harry Yoo <harry.yoo@oracle.com> <42.hyeyoo@gmail.com>
|
||||||
Heiko Carstens <hca@linux.ibm.com> <h.carstens@de.ibm.com>
|
Heiko Carstens <hca@linux.ibm.com> <h.carstens@de.ibm.com>
|
||||||
Heiko Carstens <hca@linux.ibm.com> <heiko.carstens@de.ibm.com>
|
Heiko Carstens <hca@linux.ibm.com> <heiko.carstens@de.ibm.com>
|
||||||
|
|
@ -345,7 +349,8 @@ Jayachandran C <c.jayachandran@gmail.com> <jayachandranc@netlogicmicro.com>
|
||||||
Jayachandran C <c.jayachandran@gmail.com> <jchandra@broadcom.com>
|
Jayachandran C <c.jayachandran@gmail.com> <jchandra@broadcom.com>
|
||||||
Jayachandran C <c.jayachandran@gmail.com> <jchandra@digeo.com>
|
Jayachandran C <c.jayachandran@gmail.com> <jchandra@digeo.com>
|
||||||
Jayachandran C <c.jayachandran@gmail.com> <jnair@caviumnetworks.com>
|
Jayachandran C <c.jayachandran@gmail.com> <jnair@caviumnetworks.com>
|
||||||
<jean-philippe@linaro.org> <jean-philippe.brucker@arm.com>
|
Jean-Philippe Brucker <jpb@kernel.org> <jean-philippe.brucker@arm.com>
|
||||||
|
Jean-Philippe Brucker <jpb@kernel.org> <jean-philippe@linaro.org>
|
||||||
Jean-Michel Hautbois <jeanmichel.hautbois@yoseli.org> <jeanmichel.hautbois@ideasonboard.com>
|
Jean-Michel Hautbois <jeanmichel.hautbois@yoseli.org> <jeanmichel.hautbois@ideasonboard.com>
|
||||||
Jean Tourrilhes <jt@hpl.hp.com>
|
Jean Tourrilhes <jt@hpl.hp.com>
|
||||||
Jeevan Shriram <quic_jshriram@quicinc.com> <jshriram@codeaurora.org>
|
Jeevan Shriram <quic_jshriram@quicinc.com> <jshriram@codeaurora.org>
|
||||||
|
|
@ -439,6 +444,7 @@ Krishna Manikandan <quic_mkrishn@quicinc.com> <mkrishn@codeaurora.org>
|
||||||
Krzysztof Kozlowski <krzk@kernel.org> <k.kozlowski.k@gmail.com>
|
Krzysztof Kozlowski <krzk@kernel.org> <k.kozlowski.k@gmail.com>
|
||||||
Krzysztof Kozlowski <krzk@kernel.org> <k.kozlowski@samsung.com>
|
Krzysztof Kozlowski <krzk@kernel.org> <k.kozlowski@samsung.com>
|
||||||
Krzysztof Kozlowski <krzk@kernel.org> <krzysztof.kozlowski@canonical.com>
|
Krzysztof Kozlowski <krzk@kernel.org> <krzysztof.kozlowski@canonical.com>
|
||||||
|
Krzysztof Kozlowski <krzk@kernel.org> <krzysztof.kozlowski@linaro.org>
|
||||||
Krzysztof Wilczyński <kwilczynski@kernel.org> <krzysztof.wilczynski@linux.com>
|
Krzysztof Wilczyński <kwilczynski@kernel.org> <krzysztof.wilczynski@linux.com>
|
||||||
Krzysztof Wilczyński <kwilczynski@kernel.org> <kw@linux.com>
|
Krzysztof Wilczyński <kwilczynski@kernel.org> <kw@linux.com>
|
||||||
Kshitiz Godara <quic_kgodara@quicinc.com> <kgodara@codeaurora.org>
|
Kshitiz Godara <quic_kgodara@quicinc.com> <kgodara@codeaurora.org>
|
||||||
|
|
@ -498,9 +504,7 @@ Mark Brown <broonie@sirena.org.uk>
|
||||||
Mark Starovoytov <mstarovo@pm.me> <mstarovoitov@marvell.com>
|
Mark Starovoytov <mstarovo@pm.me> <mstarovoitov@marvell.com>
|
||||||
Markus Schneider-Pargmann <msp@baylibre.com> <mpa@pengutronix.de>
|
Markus Schneider-Pargmann <msp@baylibre.com> <mpa@pengutronix.de>
|
||||||
Mark Yao <markyao0591@gmail.com> <mark.yao@rock-chips.com>
|
Mark Yao <markyao0591@gmail.com> <mark.yao@rock-chips.com>
|
||||||
Martin Kepplinger <martink@posteo.de> <martin.kepplinger@ginzinger.com>
|
Martin Kepplinger-Novakovic <martink@posteo.de> <martin.kepplinger-novakovic@ginzinger.com>
|
||||||
Martin Kepplinger <martink@posteo.de> <martin.kepplinger@puri.sm>
|
|
||||||
Martin Kepplinger <martink@posteo.de> <martin.kepplinger@theobroma-systems.com>
|
|
||||||
Martyna Szapar-Mudlaw <martyna.szapar-mudlaw@linux.intel.com> <martyna.szapar-mudlaw@intel.com>
|
Martyna Szapar-Mudlaw <martyna.szapar-mudlaw@linux.intel.com> <martyna.szapar-mudlaw@intel.com>
|
||||||
Mathieu Othacehe <othacehe@gnu.org> <m.othacehe@gmail.com>
|
Mathieu Othacehe <othacehe@gnu.org> <m.othacehe@gmail.com>
|
||||||
Mat Martineau <martineau@kernel.org> <mathew.j.martineau@linux.intel.com>
|
Mat Martineau <martineau@kernel.org> <mathew.j.martineau@linux.intel.com>
|
||||||
|
|
@ -589,8 +593,8 @@ Nicolas Pitre <nico@fluxnic.net> <nicolas.pitre@linaro.org>
|
||||||
Nicolas Pitre <nico@fluxnic.net> <nico@linaro.org>
|
Nicolas Pitre <nico@fluxnic.net> <nico@linaro.org>
|
||||||
Nicolas Saenz Julienne <nsaenz@kernel.org> <nsaenzjulienne@suse.de>
|
Nicolas Saenz Julienne <nsaenz@kernel.org> <nsaenzjulienne@suse.de>
|
||||||
Nicolas Saenz Julienne <nsaenz@kernel.org> <nsaenzjulienne@suse.com>
|
Nicolas Saenz Julienne <nsaenz@kernel.org> <nsaenzjulienne@suse.com>
|
||||||
Nicolas Schier <nicolas.schier@linux.dev> <n.schier@avm.de>
|
Nicolas Schier <nsc@kernel.org> <n.schier@avm.de>
|
||||||
Nicolas Schier <nicolas.schier@linux.dev> <nicolas@fjasle.eu>
|
Nicolas Schier <nsc@kernel.org> <nicolas@fjasle.eu>
|
||||||
Niklas Söderlund <niklas.soderlund+renesas@ragnatech.se>
|
Niklas Söderlund <niklas.soderlund+renesas@ragnatech.se>
|
||||||
Nikolay Aleksandrov <razor@blackwall.org> <naleksan@redhat.com>
|
Nikolay Aleksandrov <razor@blackwall.org> <naleksan@redhat.com>
|
||||||
Nikolay Aleksandrov <razor@blackwall.org> <nikolay@redhat.com>
|
Nikolay Aleksandrov <razor@blackwall.org> <nikolay@redhat.com>
|
||||||
|
|
@ -637,6 +641,7 @@ Peter Oruba <peter.oruba@amd.com>
|
||||||
Peter Oruba <peter@oruba.de>
|
Peter Oruba <peter@oruba.de>
|
||||||
Pierre-Louis Bossart <pierre-louis.bossart@linux.dev> <pierre-louis.bossart@linux.intel.com>
|
Pierre-Louis Bossart <pierre-louis.bossart@linux.dev> <pierre-louis.bossart@linux.intel.com>
|
||||||
Pratyush Anand <pratyush.anand@gmail.com> <pratyush.anand@st.com>
|
Pratyush Anand <pratyush.anand@gmail.com> <pratyush.anand@st.com>
|
||||||
|
Pratyush Yadav <pratyush@kernel.org> <ptyadav@amazon.de>
|
||||||
Praveen BP <praveenbp@ti.com>
|
Praveen BP <praveenbp@ti.com>
|
||||||
Pradeep Kumar Chitrapu <quic_pradeepc@quicinc.com> <pradeepc@codeaurora.org>
|
Pradeep Kumar Chitrapu <quic_pradeepc@quicinc.com> <pradeepc@codeaurora.org>
|
||||||
Prasad Sodagudi <quic_psodagud@quicinc.com> <psodagud@codeaurora.org>
|
Prasad Sodagudi <quic_psodagud@quicinc.com> <psodagud@codeaurora.org>
|
||||||
|
|
@ -691,7 +696,10 @@ Sachin Mokashi <sachin.mokashi@intel.com> <sachinx.mokashi@intel.com>
|
||||||
Sachin P Sant <ssant@in.ibm.com>
|
Sachin P Sant <ssant@in.ibm.com>
|
||||||
Sai Prakash Ranjan <quic_saipraka@quicinc.com> <saiprakash.ranjan@codeaurora.org>
|
Sai Prakash Ranjan <quic_saipraka@quicinc.com> <saiprakash.ranjan@codeaurora.org>
|
||||||
Sakari Ailus <sakari.ailus@linux.intel.com> <sakari.ailus@iki.fi>
|
Sakari Ailus <sakari.ailus@linux.intel.com> <sakari.ailus@iki.fi>
|
||||||
|
Sam Protsenko <semen.protsenko@linaro.org>
|
||||||
|
Sam Protsenko <semen.protsenko@linaro.org> <semen.protsenko@globallogic.com>
|
||||||
Sam Ravnborg <sam@mars.ravnborg.org>
|
Sam Ravnborg <sam@mars.ravnborg.org>
|
||||||
|
Samuel Kayode <samkay014@gmail.com> <samuel.kayode@savoirfairelinux.com>
|
||||||
Sankeerth Billakanti <quic_sbillaka@quicinc.com> <sbillaka@codeaurora.org>
|
Sankeerth Billakanti <quic_sbillaka@quicinc.com> <sbillaka@codeaurora.org>
|
||||||
Santosh Shilimkar <santosh.shilimkar@oracle.org>
|
Santosh Shilimkar <santosh.shilimkar@oracle.org>
|
||||||
Santosh Shilimkar <ssantosh@kernel.org>
|
Santosh Shilimkar <ssantosh@kernel.org>
|
||||||
|
|
@ -847,6 +855,9 @@ Vivien Didelot <vivien.didelot@gmail.com> <vivien.didelot@savoirfairelinux.com>
|
||||||
Vlad Dogaru <ddvlad@gmail.com> <vlad.dogaru@intel.com>
|
Vlad Dogaru <ddvlad@gmail.com> <vlad.dogaru@intel.com>
|
||||||
Vladimir Davydov <vdavydov.dev@gmail.com> <vdavydov@parallels.com>
|
Vladimir Davydov <vdavydov.dev@gmail.com> <vdavydov@parallels.com>
|
||||||
Vladimir Davydov <vdavydov.dev@gmail.com> <vdavydov@virtuozzo.com>
|
Vladimir Davydov <vdavydov.dev@gmail.com> <vdavydov@virtuozzo.com>
|
||||||
|
WangYuli <wangyuli@aosc.io> <wangyl5933@chinaunicom.cn>
|
||||||
|
WangYuli <wangyuli@aosc.io> <wangyuli@deepin.org>
|
||||||
|
WangYuli <wangyuli@aosc.io> <wangyuli@uniontech.com>
|
||||||
Weiwen Hu <huweiwen@linux.alibaba.com> <sehuww@mail.scut.edu.cn>
|
Weiwen Hu <huweiwen@linux.alibaba.com> <sehuww@mail.scut.edu.cn>
|
||||||
WeiXiong Liao <gmpy.liaowx@gmail.com> <liaoweixiong@allwinnertech.com>
|
WeiXiong Liao <gmpy.liaowx@gmail.com> <liaoweixiong@allwinnertech.com>
|
||||||
Wen Gong <quic_wgong@quicinc.com> <wgong@codeaurora.org>
|
Wen Gong <quic_wgong@quicinc.com> <wgong@codeaurora.org>
|
||||||
|
|
@ -858,6 +869,7 @@ Yakir Yang <kuankuan.y@gmail.com> <ykk@rock-chips.com>
|
||||||
Yanteng Si <si.yanteng@linux.dev> <siyanteng@loongson.cn>
|
Yanteng Si <si.yanteng@linux.dev> <siyanteng@loongson.cn>
|
||||||
Ying Huang <huang.ying.caritas@gmail.com> <ying.huang@intel.com>
|
Ying Huang <huang.ying.caritas@gmail.com> <ying.huang@intel.com>
|
||||||
Yosry Ahmed <yosry.ahmed@linux.dev> <yosryahmed@google.com>
|
Yosry Ahmed <yosry.ahmed@linux.dev> <yosryahmed@google.com>
|
||||||
|
Yu-Chun Lin <eleanor.lin@realtek.com> <eleanor15x@gmail.com>
|
||||||
Yusuke Goda <goda.yusuke@renesas.com>
|
Yusuke Goda <goda.yusuke@renesas.com>
|
||||||
Zack Rusin <zack.rusin@broadcom.com> <zackr@vmware.com>
|
Zack Rusin <zack.rusin@broadcom.com> <zackr@vmware.com>
|
||||||
Zhu Yanjun <zyjzyj2000@gmail.com> <yanjunz@nvidia.com>
|
Zhu Yanjun <zyjzyj2000@gmail.com> <yanjunz@nvidia.com>
|
||||||
|
|
|
||||||
|
|
@ -1,2 +1,2 @@
|
||||||
[MASTER]
|
[MASTER]
|
||||||
init-hook='import sys; sys.path += ["scripts/lib/kdoc", "scripts/lib/abi", "tools/docs/lib"]'
|
init-hook='import sys; sys.path += ["tools/lib/python"]'
|
||||||
|
|
|
||||||
13
CREDITS
13
CREDITS
|
|
@ -16,6 +16,10 @@ D: One of assisting postmasters for vger.kernel.org's lists
|
||||||
S: (ask for current address)
|
S: (ask for current address)
|
||||||
S: Finland
|
S: Finland
|
||||||
|
|
||||||
|
N: Kishon Vijay Abraham I
|
||||||
|
E: kishon@kernel.org
|
||||||
|
D: Generic Phy Framework
|
||||||
|
|
||||||
N: Thomas Abraham
|
N: Thomas Abraham
|
||||||
E: thomas.ab@samsung.com
|
E: thomas.ab@samsung.com
|
||||||
D: Samsung pin controller driver
|
D: Samsung pin controller driver
|
||||||
|
|
@ -2056,16 +2060,15 @@ S: Korte Heul 95
|
||||||
S: 1403 ND BUSSUM
|
S: 1403 ND BUSSUM
|
||||||
S: The Netherlands
|
S: The Netherlands
|
||||||
|
|
||||||
N: Martin Kepplinger
|
N: Martin Kepplinger-Novakovic
|
||||||
E: martink@posteo.de
|
E: martink@posteo.de
|
||||||
E: martin.kepplinger@puri.sm
|
|
||||||
W: http://www.martinkepplinger.com
|
|
||||||
P: 4096R/5AB387D3 F208 2B88 0F9E 4239 3468 6E3F 5003 98DF 5AB3 87D3
|
P: 4096R/5AB387D3 F208 2B88 0F9E 4239 3468 6E3F 5003 98DF 5AB3 87D3
|
||||||
D: mma8452 accelerators iio driver
|
D: mma8452 accelerators iio driver
|
||||||
D: pegasus_notetaker input driver
|
D: pegasus_notetaker input driver
|
||||||
|
D: imx8m media and hi846 sensor driver
|
||||||
D: Kernel fixes and cleanups
|
D: Kernel fixes and cleanups
|
||||||
S: Garnisonstraße 26
|
S: Keplerstr. 6
|
||||||
S: 4020 Linz
|
S: 4050 Traun
|
||||||
S: Austria
|
S: Austria
|
||||||
|
|
||||||
N: Karl Keyte
|
N: Karl Keyte
|
||||||
|
|
|
||||||
71
Documentation/ABI/obsolete/sysfs-kernel-kexec-kdump
Normal file
71
Documentation/ABI/obsolete/sysfs-kernel-kexec-kdump
Normal file
|
|
@ -0,0 +1,71 @@
|
||||||
|
NOTE: all the ABIs listed in this file are deprecated and will be removed after 2028.
|
||||||
|
|
||||||
|
Here are the alternative ABIs:
|
||||||
|
+------------------------------------+-----------------------------------------+
|
||||||
|
| Deprecated | Alternative |
|
||||||
|
+------------------------------------+-----------------------------------------+
|
||||||
|
| /sys/kernel/kexec_loaded | /sys/kernel/kexec/loaded |
|
||||||
|
+------------------------------------+-----------------------------------------+
|
||||||
|
| /sys/kernel/kexec_crash_loaded | /sys/kernel/kexec/crash_loaded |
|
||||||
|
+------------------------------------+-----------------------------------------+
|
||||||
|
| /sys/kernel/kexec_crash_size | /sys/kernel/kexec/crash_size |
|
||||||
|
+------------------------------------+-----------------------------------------+
|
||||||
|
| /sys/kernel/crash_elfcorehdr_size | /sys/kernel/kexec/crash_elfcorehdr_size |
|
||||||
|
+------------------------------------+-----------------------------------------+
|
||||||
|
| /sys/kernel/kexec_crash_cma_ranges | /sys/kernel/kexec/crash_cma_ranges |
|
||||||
|
+------------------------------------+-----------------------------------------+
|
||||||
|
|
||||||
|
|
||||||
|
What: /sys/kernel/kexec_loaded
|
||||||
|
Date: Jun 2006
|
||||||
|
Contact: kexec@lists.infradead.org
|
||||||
|
Description: read only
|
||||||
|
Indicates whether a new kernel image has been loaded
|
||||||
|
into memory using the kexec system call. It shows 1 if
|
||||||
|
a kexec image is present and ready to boot, or 0 if none
|
||||||
|
is loaded.
|
||||||
|
User: kexec tools, kdump service
|
||||||
|
|
||||||
|
What: /sys/kernel/kexec_crash_loaded
|
||||||
|
Date: Jun 2006
|
||||||
|
Contact: kexec@lists.infradead.org
|
||||||
|
Description: read only
|
||||||
|
Indicates whether a crash (kdump) kernel is currently
|
||||||
|
loaded into memory. It shows 1 if a crash kernel has been
|
||||||
|
successfully loaded for panic handling, or 0 if no crash
|
||||||
|
kernel is present.
|
||||||
|
User: Kexec tools, Kdump service
|
||||||
|
|
||||||
|
What: /sys/kernel/kexec_crash_size
|
||||||
|
Date: Dec 2009
|
||||||
|
Contact: kexec@lists.infradead.org
|
||||||
|
Description: read/write
|
||||||
|
Shows the amount of memory reserved for loading the crash
|
||||||
|
(kdump) kernel. It reports the size, in bytes, of the
|
||||||
|
crash kernel area defined by the crashkernel= parameter.
|
||||||
|
This interface also allows reducing the crashkernel
|
||||||
|
reservation by writing a smaller value, and the reclaimed
|
||||||
|
space is added back to the system RAM.
|
||||||
|
User: Kdump service
|
||||||
|
|
||||||
|
What: /sys/kernel/crash_elfcorehdr_size
|
||||||
|
Date: Aug 2023
|
||||||
|
Contact: kexec@lists.infradead.org
|
||||||
|
Description: read only
|
||||||
|
Indicates the preferred size of the memory buffer for the
|
||||||
|
ELF core header used by the crash (kdump) kernel. It defines
|
||||||
|
how much space is needed to hold metadata about the crashed
|
||||||
|
system, including CPU and memory information. This information
|
||||||
|
is used by the user space utility kexec to support updating the
|
||||||
|
in-kernel kdump image during hotplug operations.
|
||||||
|
User: Kexec tools
|
||||||
|
|
||||||
|
What: /sys/kernel/kexec_crash_cma_ranges
|
||||||
|
Date: Nov 2025
|
||||||
|
Contact: kexec@lists.infradead.org
|
||||||
|
Description: read only
|
||||||
|
Provides information about the memory ranges reserved from
|
||||||
|
the Contiguous Memory Allocator (CMA) area that are allocated
|
||||||
|
to the crash (kdump) kernel. It lists the start and end physical
|
||||||
|
addresses of CMA regions assigned for crashkernel use.
|
||||||
|
User: kdump service
|
||||||
|
|
@ -20,9 +20,10 @@ Description:
|
||||||
rule format: action [condition ...]
|
rule format: action [condition ...]
|
||||||
|
|
||||||
action: measure | dont_measure | appraise | dont_appraise |
|
action: measure | dont_measure | appraise | dont_appraise |
|
||||||
audit | hash | dont_hash
|
audit | dont_audit | hash | dont_hash
|
||||||
condition:= base | lsm [option]
|
condition:= base | lsm [option]
|
||||||
base: [[func=] [mask=] [fsmagic=] [fsuuid=] [fsname=]
|
base: [[func=] [mask=] [fsmagic=] [fsuuid=] [fsname=]
|
||||||
|
[fs_subtype=]
|
||||||
[uid=] [euid=] [gid=] [egid=]
|
[uid=] [euid=] [gid=] [egid=]
|
||||||
[fowner=] [fgroup=]]
|
[fowner=] [fgroup=]]
|
||||||
lsm: [[subj_user=] [subj_role=] [subj_type=]
|
lsm: [[subj_user=] [subj_role=] [subj_type=]
|
||||||
|
|
|
||||||
|
|
@ -14,7 +14,7 @@ Description:
|
||||||
for RTCs that support alarms
|
for RTCs that support alarms
|
||||||
|
|
||||||
* RTC_ALM_READ, RTC_ALM_SET: Read or set the alarm time for
|
* RTC_ALM_READ, RTC_ALM_SET: Read or set the alarm time for
|
||||||
RTCs that support alarms. Can be set upto 24 hours in the
|
RTCs that support alarms. Can be set up to 24 hours in the
|
||||||
future. Requires a separate RTC_AIE_ON call to enable the
|
future. Requires a separate RTC_AIE_ON call to enable the
|
||||||
alarm interrupt. (Prefer to use RTC_WKALM_*)
|
alarm interrupt. (Prefer to use RTC_WKALM_*)
|
||||||
|
|
||||||
|
|
|
||||||
90
Documentation/ABI/testing/sysfs-auxdisplay-linedisp
Normal file
90
Documentation/ABI/testing/sysfs-auxdisplay-linedisp
Normal file
|
|
@ -0,0 +1,90 @@
|
||||||
|
What: /sys/.../message
|
||||||
|
Date: October 2021
|
||||||
|
KernelVersion: 5.16
|
||||||
|
Description:
|
||||||
|
Controls the text message displayed on character line displays.
|
||||||
|
|
||||||
|
Reading returns the current message with a trailing newline.
|
||||||
|
Writing updates the displayed message. Messages longer than the
|
||||||
|
display width will automatically scroll. Trailing newlines in
|
||||||
|
input are automatically trimmed.
|
||||||
|
|
||||||
|
Writing an empty string clears the display.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
echo "Hello World" > message
|
||||||
|
cat message # Returns "Hello World\n"
|
||||||
|
|
||||||
|
What: /sys/.../num_chars
|
||||||
|
Date: November 2025
|
||||||
|
KernelVersion: 6.18
|
||||||
|
Contact: Jean-François Lessard <jefflessard3@gmail.com>
|
||||||
|
Description:
|
||||||
|
Read-only attribute showing the character width capacity of
|
||||||
|
the line display device. Messages longer than this will scroll.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
cat num_chars # Returns "16\n" for 16-char display
|
||||||
|
|
||||||
|
What: /sys/.../scroll_step_ms
|
||||||
|
Date: October 2021
|
||||||
|
KernelVersion: 5.16
|
||||||
|
Description:
|
||||||
|
Controls the scrolling speed for messages longer than the display
|
||||||
|
width, specified in milliseconds per scroll step.
|
||||||
|
|
||||||
|
Setting to 0 disables scrolling. Default is 500ms.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
echo "250" > scroll_step_ms # 4Hz scrolling
|
||||||
|
cat scroll_step_ms # Returns "250\n"
|
||||||
|
|
||||||
|
What: /sys/.../map_seg7
|
||||||
|
Date: January 2024
|
||||||
|
KernelVersion: 6.9
|
||||||
|
Description:
|
||||||
|
Read/write binary blob representing the ASCII-to-7-segment
|
||||||
|
display conversion table used by the linedisp driver, as defined
|
||||||
|
by struct seg7_conversion_map in <linux/map_to_7segment.h>.
|
||||||
|
|
||||||
|
Only visible on displays with 7-segment capability.
|
||||||
|
|
||||||
|
This attribute is not human-readable. Writes must match the
|
||||||
|
struct size exactly, else -EINVAL is returned; reads return the
|
||||||
|
entire mapping as a binary blob.
|
||||||
|
|
||||||
|
This interface and its implementation match existing conventions
|
||||||
|
used in segment-mapped display drivers since 2005.
|
||||||
|
|
||||||
|
ABI note: This style of binary sysfs attribute *is an exception*
|
||||||
|
to current "one value per file, text only" sysfs rules, for
|
||||||
|
historical compatibility and driver uniformity. New drivers are
|
||||||
|
discouraged from introducing additional binary sysfs ABIs.
|
||||||
|
|
||||||
|
Reference interface guidance:
|
||||||
|
- include/uapi/linux/map_to_7segment.h
|
||||||
|
|
||||||
|
What: /sys/.../map_seg14
|
||||||
|
Date: January 2024
|
||||||
|
KernelVersion: 6.9
|
||||||
|
Description:
|
||||||
|
Read/write binary blob representing the ASCII-to-14-segment
|
||||||
|
display conversion table used by the linedisp driver, as defined
|
||||||
|
by struct seg14_conversion_map in <linux/map_to_14segment.h>.
|
||||||
|
|
||||||
|
Only visible on displays with 14-segment capability.
|
||||||
|
|
||||||
|
This attribute is not human-readable. Writes must match the
|
||||||
|
struct size exactly, else -EINVAL is returned; reads return the
|
||||||
|
entire mapping as a binary blob.
|
||||||
|
|
||||||
|
This interface and its implementation match existing conventions
|
||||||
|
used by segment-mapped display drivers since 2005.
|
||||||
|
|
||||||
|
ABI note: This style of binary sysfs attribute *is an exception*
|
||||||
|
to current "one value per file, text only" sysfs rules, for
|
||||||
|
historical compatibility and driver uniformity. New drivers are
|
||||||
|
discouraged from introducing additional binary sysfs ABIs.
|
||||||
|
|
||||||
|
Reference interface guidance:
|
||||||
|
- include/uapi/linux/map_to_14segment.h
|
||||||
|
|
@ -106,13 +106,6 @@ Description:
|
||||||
will be discarded from the cache. Should not be turned off with
|
will be discarded from the cache. Should not be turned off with
|
||||||
writeback caching enabled.
|
writeback caching enabled.
|
||||||
|
|
||||||
What: /sys/block/<disk>/bcache/discard
|
|
||||||
Date: November 2010
|
|
||||||
Contact: Kent Overstreet <kent.overstreet@gmail.com>
|
|
||||||
Description:
|
|
||||||
For a cache, a boolean allowing discard/TRIM to be turned off
|
|
||||||
or back on if the device supports it.
|
|
||||||
|
|
||||||
What: /sys/block/<disk>/bcache/bucket_size
|
What: /sys/block/<disk>/bcache/bucket_size
|
||||||
Date: November 2010
|
Date: November 2010
|
||||||
Contact: Kent Overstreet <kent.overstreet@gmail.com>
|
Contact: Kent Overstreet <kent.overstreet@gmail.com>
|
||||||
|
|
|
||||||
|
|
@ -496,8 +496,17 @@ Description:
|
||||||
changed, only freed by writing 0. The kernel makes no guarantees
|
changed, only freed by writing 0. The kernel makes no guarantees
|
||||||
that data is maintained over an address space freeing event, and
|
that data is maintained over an address space freeing event, and
|
||||||
there is no guarantee that a free followed by an allocate
|
there is no guarantee that a free followed by an allocate
|
||||||
results in the same address being allocated.
|
results in the same address being allocated. If extended linear
|
||||||
|
cache is present, the size indicates extended linear cache size
|
||||||
|
plus the CXL region size.
|
||||||
|
|
||||||
|
What: /sys/bus/cxl/devices/regionZ/extended_linear_cache_size
|
||||||
|
Date: October, 2025
|
||||||
|
KernelVersion: v6.19
|
||||||
|
Contact: linux-cxl@vger.kernel.org
|
||||||
|
Description:
|
||||||
|
(RO) The size of extended linear cache, if there is an extended
|
||||||
|
linear cache. Otherwise the attribute will not be visible.
|
||||||
|
|
||||||
What: /sys/bus/cxl/devices/regionZ/mode
|
What: /sys/bus/cxl/devices/regionZ/mode
|
||||||
Date: January, 2023
|
Date: January, 2023
|
||||||
|
|
|
||||||
|
|
@ -898,6 +898,7 @@ What: /sys/.../iio:deviceX/events/in_tempY_thresh_rising_en
|
||||||
What: /sys/.../iio:deviceX/events/in_tempY_thresh_falling_en
|
What: /sys/.../iio:deviceX/events/in_tempY_thresh_falling_en
|
||||||
What: /sys/.../iio:deviceX/events/in_capacitanceY_thresh_rising_en
|
What: /sys/.../iio:deviceX/events/in_capacitanceY_thresh_rising_en
|
||||||
What: /sys/.../iio:deviceX/events/in_capacitanceY_thresh_falling_en
|
What: /sys/.../iio:deviceX/events/in_capacitanceY_thresh_falling_en
|
||||||
|
What: /sys/.../iio:deviceX/events/in_pressure_thresh_rising_en
|
||||||
KernelVersion: 2.6.37
|
KernelVersion: 2.6.37
|
||||||
Contact: linux-iio@vger.kernel.org
|
Contact: linux-iio@vger.kernel.org
|
||||||
Description:
|
Description:
|
||||||
|
|
@ -926,6 +927,7 @@ What: /sys/.../iio:deviceX/events/in_accel_y_roc_rising_en
|
||||||
What: /sys/.../iio:deviceX/events/in_accel_y_roc_falling_en
|
What: /sys/.../iio:deviceX/events/in_accel_y_roc_falling_en
|
||||||
What: /sys/.../iio:deviceX/events/in_accel_z_roc_rising_en
|
What: /sys/.../iio:deviceX/events/in_accel_z_roc_rising_en
|
||||||
What: /sys/.../iio:deviceX/events/in_accel_z_roc_falling_en
|
What: /sys/.../iio:deviceX/events/in_accel_z_roc_falling_en
|
||||||
|
What: /sys/.../iio:deviceX/events/in_accel_x&y&z_roc_rising_en
|
||||||
What: /sys/.../iio:deviceX/events/in_anglvel_x_roc_rising_en
|
What: /sys/.../iio:deviceX/events/in_anglvel_x_roc_rising_en
|
||||||
What: /sys/.../iio:deviceX/events/in_anglvel_x_roc_falling_en
|
What: /sys/.../iio:deviceX/events/in_anglvel_x_roc_falling_en
|
||||||
What: /sys/.../iio:deviceX/events/in_anglvel_y_roc_rising_en
|
What: /sys/.../iio:deviceX/events/in_anglvel_y_roc_rising_en
|
||||||
|
|
@ -1001,6 +1003,7 @@ Description:
|
||||||
to the raw signal, allowing slow tracking to resume and the
|
to the raw signal, allowing slow tracking to resume and the
|
||||||
adaptive threshold event detection to function as expected.
|
adaptive threshold event detection to function as expected.
|
||||||
|
|
||||||
|
What: /sys/.../events/in_accel_mag_adaptive_rising_value
|
||||||
What: /sys/.../events/in_accel_thresh_rising_value
|
What: /sys/.../events/in_accel_thresh_rising_value
|
||||||
What: /sys/.../events/in_accel_thresh_falling_value
|
What: /sys/.../events/in_accel_thresh_falling_value
|
||||||
What: /sys/.../events/in_accel_x_raw_thresh_rising_value
|
What: /sys/.../events/in_accel_x_raw_thresh_rising_value
|
||||||
|
|
@ -1045,6 +1048,7 @@ What: /sys/.../events/in_capacitanceY_thresh_rising_value
|
||||||
What: /sys/.../events/in_capacitanceY_thresh_falling_value
|
What: /sys/.../events/in_capacitanceY_thresh_falling_value
|
||||||
What: /sys/.../events/in_capacitanceY_thresh_adaptive_rising_value
|
What: /sys/.../events/in_capacitanceY_thresh_adaptive_rising_value
|
||||||
What: /sys/.../events/in_capacitanceY_thresh_falling_rising_value
|
What: /sys/.../events/in_capacitanceY_thresh_falling_rising_value
|
||||||
|
What: /sys/.../events/in_pressure_thresh_rising_value
|
||||||
KernelVersion: 2.6.37
|
KernelVersion: 2.6.37
|
||||||
Contact: linux-iio@vger.kernel.org
|
Contact: linux-iio@vger.kernel.org
|
||||||
Description:
|
Description:
|
||||||
|
|
@ -1147,6 +1151,7 @@ Description:
|
||||||
will get activated once in_voltage0_raw goes above 1200 and will become
|
will get activated once in_voltage0_raw goes above 1200 and will become
|
||||||
deactivated again once the value falls below 1150.
|
deactivated again once the value falls below 1150.
|
||||||
|
|
||||||
|
What: /sys/.../events/in_accel_roc_rising_value
|
||||||
What: /sys/.../events/in_accel_x_raw_roc_rising_value
|
What: /sys/.../events/in_accel_x_raw_roc_rising_value
|
||||||
What: /sys/.../events/in_accel_x_raw_roc_falling_value
|
What: /sys/.../events/in_accel_x_raw_roc_falling_value
|
||||||
What: /sys/.../events/in_accel_y_raw_roc_rising_value
|
What: /sys/.../events/in_accel_y_raw_roc_rising_value
|
||||||
|
|
@ -1193,6 +1198,8 @@ Description:
|
||||||
value is in raw device units or in processed units (as _raw
|
value is in raw device units or in processed units (as _raw
|
||||||
and _input do on sysfs direct channel read attributes).
|
and _input do on sysfs direct channel read attributes).
|
||||||
|
|
||||||
|
What: /sys/.../events/in_accel_mag_adaptive_rising_period
|
||||||
|
What: /sys/.../events/in_accel_roc_rising_period
|
||||||
What: /sys/.../events/in_accel_x_thresh_rising_period
|
What: /sys/.../events/in_accel_x_thresh_rising_period
|
||||||
What: /sys/.../events/in_accel_x_thresh_falling_period
|
What: /sys/.../events/in_accel_x_thresh_falling_period
|
||||||
What: /sys/.../events/in_accel_x_roc_rising_period
|
What: /sys/.../events/in_accel_x_roc_rising_period
|
||||||
|
|
@ -1362,6 +1369,15 @@ Description:
|
||||||
number or direction is not specified, applies to all channels of
|
number or direction is not specified, applies to all channels of
|
||||||
this type.
|
this type.
|
||||||
|
|
||||||
|
What: /sys/.../iio:deviceX/events/in_accel_x_mag_adaptive_rising_en
|
||||||
|
What: /sys/.../iio:deviceX/events/in_accel_y_mag_adaptive_rising_en
|
||||||
|
What: /sys/.../iio:deviceX/events/in_accel_z_mag_adaptive_rising_en
|
||||||
|
KernelVersion: 2.6.37
|
||||||
|
Contact: linux-iio@vger.kernel.org
|
||||||
|
Description:
|
||||||
|
Similar to in_accel_x_thresh[_rising|_falling]_en, but here the
|
||||||
|
magnitude of the channel is compared to the adaptive threshold.
|
||||||
|
|
||||||
What: /sys/.../iio:deviceX/events/in_accel_mag_referenced_en
|
What: /sys/.../iio:deviceX/events/in_accel_mag_referenced_en
|
||||||
What: /sys/.../iio:deviceX/events/in_accel_mag_referenced_rising_en
|
What: /sys/.../iio:deviceX/events/in_accel_mag_referenced_rising_en
|
||||||
What: /sys/.../iio:deviceX/events/in_accel_mag_referenced_falling_en
|
What: /sys/.../iio:deviceX/events/in_accel_mag_referenced_falling_en
|
||||||
|
|
@ -2422,3 +2438,23 @@ Description:
|
||||||
Value representing the user's attention to the system expressed
|
Value representing the user's attention to the system expressed
|
||||||
in units as percentage. This usually means if the user is
|
in units as percentage. This usually means if the user is
|
||||||
looking at the screen or not.
|
looking at the screen or not.
|
||||||
|
|
||||||
|
What: /sys/.../events/in_accel_value_available
|
||||||
|
KernelVersion: 6.18
|
||||||
|
Contact: linux-iio@vger.kernel.org
|
||||||
|
Description:
|
||||||
|
List of available threshold values for acceleration event
|
||||||
|
generation. Applies to all event types on in_accel channels.
|
||||||
|
Units after application of scale and offset are m/s^2.
|
||||||
|
Expressed as:
|
||||||
|
|
||||||
|
- a range specified as "[min step max]"
|
||||||
|
|
||||||
|
What: /sys/.../events/in_accel_period_available
|
||||||
|
KernelVersion: 6.18
|
||||||
|
Contact: linux-iio@vger.kernel.org
|
||||||
|
Description:
|
||||||
|
List of available periods for accelerometer event detection in
|
||||||
|
seconds, expressed as:
|
||||||
|
|
||||||
|
- a range specified as "[min step max]"
|
||||||
|
|
|
||||||
|
|
@ -621,3 +621,84 @@ Description:
|
||||||
number extended capability. The file is read only and due to
|
number extended capability. The file is read only and due to
|
||||||
the possible sensitivity of accessible serial numbers, admin
|
the possible sensitivity of accessible serial numbers, admin
|
||||||
only.
|
only.
|
||||||
|
|
||||||
|
What: /sys/bus/pci/devices/.../tsm/
|
||||||
|
Contact: linux-coco@lists.linux.dev
|
||||||
|
Description:
|
||||||
|
This directory only appears if a physical device function
|
||||||
|
supports authentication (PCIe CMA-SPDM), interface security
|
||||||
|
(PCIe TDISP), and is accepted for secure operation by the
|
||||||
|
platform TSM driver. This attribute directory appears
|
||||||
|
dynamically after the platform TSM driver loads. So, only after
|
||||||
|
the /sys/class/tsm/tsm0 device arrives can tools assume that
|
||||||
|
devices without a tsm/ attribute directory will never have one;
|
||||||
|
before that, the security capabilities of the device relative to
|
||||||
|
the platform TSM are unknown. See
|
||||||
|
Documentation/ABI/testing/sysfs-class-tsm.
|
||||||
|
|
||||||
|
What: /sys/bus/pci/devices/.../tsm/connect
|
||||||
|
Contact: linux-coco@lists.linux.dev
|
||||||
|
Description:
|
||||||
|
(RW) Write the name of a TSM (TEE Security Manager) device from
|
||||||
|
/sys/class/tsm to this file to establish a connection with the
|
||||||
|
device. This typically includes an SPDM (DMTF Security
|
||||||
|
Protocols and Data Models) session over PCIe DOE (Data Object
|
||||||
|
Exchange) and may also include PCIe IDE (Integrity and Data
|
||||||
|
Encryption) establishment. Reads from this attribute return the
|
||||||
|
name of the connected TSM or the empty string if not
|
||||||
|
connected. A TSM device signals its readiness to accept PCI
|
||||||
|
connection via a KOBJ_CHANGE event.
|
||||||
|
|
||||||
|
What: /sys/bus/pci/devices/.../tsm/disconnect
|
||||||
|
Contact: linux-coco@lists.linux.dev
|
||||||
|
Description:
|
||||||
|
(WO) Write the name of the TSM device that was specified
|
||||||
|
to 'connect' to teardown the connection.
|
||||||
|
|
||||||
|
What: /sys/bus/pci/devices/.../tsm/dsm
|
||||||
|
Contact: linux-coco@lists.linux.dev
|
||||||
|
Description: (RO) Return PCI device name of this device's DSM (Device
|
||||||
|
Security Manager). When a device is in the connected state it
|
||||||
|
indicates that the platform TSM (TEE Security Manager) has made
|
||||||
|
a secure-session connection with a device's DSM. A DSM is always
|
||||||
|
physical function 0 and when the device supports TDISP (TEE
|
||||||
|
Device Interface Security Protocol) its managed functions also
|
||||||
|
populate this tsm/dsm attribute. The managed functions of a DSM
|
||||||
|
are SR-IOV (Single Root I/O Virtualization) virtual functions,
|
||||||
|
non-zero functions of a multi-function device, or downstream
|
||||||
|
endpoints depending on whether the DSM is an SR-IOV physical
|
||||||
|
function, function0 of a multi-function device, or an upstream
|
||||||
|
PCIe switch port. This is a "link" TSM attribute, see
|
||||||
|
Documentation/ABI/testing/sysfs-class-tsm.
|
||||||
|
|
||||||
|
What: /sys/bus/pci/devices/.../tsm/bound
|
||||||
|
Contact: linux-coco@lists.linux.dev
|
||||||
|
Description: (RO) Return the device name of the TSM when the device is in a
|
||||||
|
TDISP (TEE Device Interface Security Protocol) operational state
|
||||||
|
(LOCKED, RUN, or ERROR, not UNLOCKED). Bound devices consume
|
||||||
|
platform TSM resources and depend on the device's configuration
|
||||||
|
(e.g. BME (Bus Master Enable) and MSE (Memory Space Enable)
|
||||||
|
among other settings) to remain stable for the duration of the
|
||||||
|
bound state. This attribute is only visible for devices that
|
||||||
|
support TDISP operation, and it is only populated after
|
||||||
|
successful connect and TSM bind. The TSM bind operation is
|
||||||
|
initiated by VFIO/IOMMUFD. This is a "link" TSM attribute, see
|
||||||
|
Documentation/ABI/testing/sysfs-class-tsm.
|
||||||
|
|
||||||
|
What: /sys/bus/pci/devices/.../authenticated
|
||||||
|
Contact: linux-pci@vger.kernel.org
|
||||||
|
Description:
|
||||||
|
When the device's tsm/ directory is present device
|
||||||
|
authentication (PCIe CMA-SPDM) and link encryption (PCIe IDE)
|
||||||
|
are handled by the platform TSM (TEE Security Manager). When the
|
||||||
|
tsm/ directory is not present this attribute reflects only the
|
||||||
|
native CMA-SPDM authentication state with the kernel's
|
||||||
|
certificate store.
|
||||||
|
|
||||||
|
If the attribute is not present, it indicates that
|
||||||
|
authentication is unsupported by the device, or the TSM has no
|
||||||
|
available authentication methods for the device.
|
||||||
|
|
||||||
|
When present and the tsm/ attribute directory is present, the
|
||||||
|
authenticated attribute is an alias for the device 'connect'
|
||||||
|
state. See the 'tsm/connect' attribute for more details.
|
||||||
|
|
|
||||||
|
|
@ -23,6 +23,8 @@ Description: This file contains a space-separated list of profiles supported
|
||||||
power consumption with a slight bias
|
power consumption with a slight bias
|
||||||
towards performance
|
towards performance
|
||||||
performance High performance operation
|
performance High performance operation
|
||||||
|
max-power Higher performance operation that may exceed
|
||||||
|
internal battery draw limits when on AC power
|
||||||
custom Driver defined custom profile
|
custom Driver defined custom profile
|
||||||
==================== ========================================
|
==================== ========================================
|
||||||
|
|
||||||
|
|
|
||||||
30
Documentation/ABI/testing/sysfs-class-power-rt9756
Normal file
30
Documentation/ABI/testing/sysfs-class-power-rt9756
Normal file
|
|
@ -0,0 +1,30 @@
|
||||||
|
What: /sys/class/power_supply/rt9756-*/watchdog_timer
|
||||||
|
Date: Dec 2025
|
||||||
|
KernelVersion: 6.19
|
||||||
|
Contact: ChiYuan Huang <cy_huang@richtek.com>
|
||||||
|
Description:
|
||||||
|
This entry shows and sets the watchdog timer when rt9756 charger
|
||||||
|
operates in charging mode. When the timer expires, the device
|
||||||
|
will disable the charging. To prevent the timer expires, any
|
||||||
|
host communication can make the timer restarted.
|
||||||
|
|
||||||
|
Access: Read, Write
|
||||||
|
|
||||||
|
Valid values:
|
||||||
|
- 500, 1000, 5000, 30000, 40000, 80000, 128000 or 255000 (milliseconds),
|
||||||
|
- 0: disabled
|
||||||
|
|
||||||
|
What: /sys/class/power_supply/rt9756-*/operation_mode
|
||||||
|
Date: Dec 2025
|
||||||
|
KernelVersion: 6.19
|
||||||
|
Contact: ChiYuan Huang <cy_huang@richtek.com>
|
||||||
|
Description:
|
||||||
|
This entry shows and set the operation mode when rt9756 charger
|
||||||
|
operates in charging phase. If 'bypass' mode is used, internal
|
||||||
|
path will connect vbus directly to vbat. Else, default 'div2'
|
||||||
|
mode for the switch-cap charging.
|
||||||
|
|
||||||
|
Access: Read, Write
|
||||||
|
|
||||||
|
Valid values:
|
||||||
|
- 'bypass' or 'div2'
|
||||||
19
Documentation/ABI/testing/sysfs-class-tsm
Normal file
19
Documentation/ABI/testing/sysfs-class-tsm
Normal file
|
|
@ -0,0 +1,19 @@
|
||||||
|
What: /sys/class/tsm/tsmN
|
||||||
|
Contact: linux-coco@lists.linux.dev
|
||||||
|
Description:
|
||||||
|
"tsmN" is a device that represents the generic attributes of a
|
||||||
|
platform TEE Security Manager. It is typically a child of a
|
||||||
|
platform enumerated TSM device. /sys/class/tsm/tsmN/uevent
|
||||||
|
signals when the PCI layer is able to support establishment of
|
||||||
|
link encryption and other device-security features coordinated
|
||||||
|
through a platform tsm.
|
||||||
|
|
||||||
|
What: /sys/class/tsm/tsmN/streamH.R.E
|
||||||
|
Contact: linux-pci@vger.kernel.org
|
||||||
|
Description:
|
||||||
|
(RO) When a host bridge has established a secure connection via
|
||||||
|
the platform TSM, symlink appears. The primary function of this
|
||||||
|
is have a system global review of TSM resource consumption
|
||||||
|
across host bridges. The link points to the endpoint PCI device
|
||||||
|
and matches the same link published by the host bridge. See
|
||||||
|
Documentation/ABI/testing/sysfs-devices-pci-host-bridge.
|
||||||
|
|
@ -254,3 +254,31 @@ Contact: Heikki Krogerus <heikki.krogerus@linux.intel.com>
|
||||||
Description:
|
Description:
|
||||||
The PPS Power Limited bit indicates whether or not the source
|
The PPS Power Limited bit indicates whether or not the source
|
||||||
supply will exceed the rated output power if requested.
|
supply will exceed the rated output power if requested.
|
||||||
|
|
||||||
|
Standard Power Range (SPR) Adjustable Voltage Supplies
|
||||||
|
|
||||||
|
What: /sys/class/usb_power_delivery/.../<capability>/<position>:spr_adjustable_voltage_supply
|
||||||
|
Date: Oct 2025
|
||||||
|
Contact: Badhri Jagan Sridharan <badhri@google.com>
|
||||||
|
Description:
|
||||||
|
Adjustable Voltage Supply (AVS) Augmented PDO (APDO).
|
||||||
|
|
||||||
|
What: /sys/class/usb_power_delivery/.../<capability>/<position>:spr_adjustable_voltage_supply/maximum_current_9V_to_15V
|
||||||
|
Date: Oct 2025
|
||||||
|
Contact: Badhri Jagan Sridharan <badhri@google.com>
|
||||||
|
Description:
|
||||||
|
Maximum Current for 9V to 15V range in milliamperes.
|
||||||
|
|
||||||
|
What: /sys/class/usb_power_delivery/.../<capability>/<position>:spr_adjustable_voltage_supply/maximum_current_15V_to_20V
|
||||||
|
Date: Oct 2025
|
||||||
|
Contact: Badhri Jagan Sridharan <badhri@google.com>
|
||||||
|
Description:
|
||||||
|
Maximum Current for greater than 15V till 20V range in
|
||||||
|
milliamperes.
|
||||||
|
|
||||||
|
What: /sys/class/usb_power_delivery/.../<capability>/<position>:spr_adjustable_voltage_supply/peak_current
|
||||||
|
Date: Oct 2025
|
||||||
|
Contact: Badhri Jagan Sridharan <badhri@google.com>
|
||||||
|
Description:
|
||||||
|
This file shows the value of the Adjustable Voltage Supply Peak Current
|
||||||
|
Capability field.
|
||||||
|
|
|
||||||
45
Documentation/ABI/testing/sysfs-devices-pci-host-bridge
Normal file
45
Documentation/ABI/testing/sysfs-devices-pci-host-bridge
Normal file
|
|
@ -0,0 +1,45 @@
|
||||||
|
What: /sys/devices/pciDDDD:BB
|
||||||
|
/sys/devices/.../pciDDDD:BB
|
||||||
|
Contact: linux-pci@vger.kernel.org
|
||||||
|
Description:
|
||||||
|
A PCI host bridge device parents a PCI bus device topology. PCI
|
||||||
|
controllers may also parent host bridges. The DDDD:BB format
|
||||||
|
conveys the PCI domain (ACPI segment) number and root bus number
|
||||||
|
(in hexadecimal) of the host bridge. Note that the domain number
|
||||||
|
may be larger than the 16-bits that the "DDDD" format implies
|
||||||
|
for emulated host-bridges.
|
||||||
|
|
||||||
|
What: pciDDDD:BB/firmware_node
|
||||||
|
Contact: linux-pci@vger.kernel.org
|
||||||
|
Description:
|
||||||
|
(RO) Symlink to the platform firmware device object "companion"
|
||||||
|
of the host bridge. For example, an ACPI device with an _HID of
|
||||||
|
PNP0A08 (/sys/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A08:00). See
|
||||||
|
/sys/devices/pciDDDD:BB entry for details about the DDDD:BB
|
||||||
|
format.
|
||||||
|
|
||||||
|
What: pciDDDD:BB/streamH.R.E
|
||||||
|
Contact: linux-pci@vger.kernel.org
|
||||||
|
Description:
|
||||||
|
(RO) When a platform has established a secure connection, PCIe
|
||||||
|
IDE, between two Partner Ports, this symlink appears. A stream
|
||||||
|
consumes a Stream ID slot in each of the Host bridge (H), Root
|
||||||
|
Port (R) and Endpoint (E). The link points to the Endpoint PCI
|
||||||
|
device in the Selective IDE Stream pairing. Specifically, "R"
|
||||||
|
and "E" represent the assigned Selective IDE Stream Register
|
||||||
|
Block in the Root Port and Endpoint, and "H" represents a
|
||||||
|
platform specific pool of stream resources shared by the Root
|
||||||
|
Ports in a host bridge. See /sys/devices/pciDDDD:BB entry for
|
||||||
|
details about the DDDD:BB format.
|
||||||
|
|
||||||
|
What: pciDDDD:BB/available_secure_streams
|
||||||
|
Contact: linux-pci@vger.kernel.org
|
||||||
|
Description:
|
||||||
|
(RO) When a host bridge has Root Ports that support PCIe IDE
|
||||||
|
(link encryption and integrity protection) there may be a
|
||||||
|
limited number of Selective IDE Streams that can be used for
|
||||||
|
establishing new end-to-end secure links. This attribute
|
||||||
|
decrements upon secure link setup, and increments upon secure
|
||||||
|
link teardown. The in-use stream count is determined by counting
|
||||||
|
stream symlinks. See /sys/devices/pciDDDD:BB entry for details
|
||||||
|
about the DDDD:BB format.
|
||||||
|
|
@ -764,6 +764,17 @@ Description:
|
||||||
participate in load balancing. These CPUs are set by
|
participate in load balancing. These CPUs are set by
|
||||||
boot parameter "isolcpus=".
|
boot parameter "isolcpus=".
|
||||||
|
|
||||||
|
What: /sys/devices/system/cpu/housekeeping
|
||||||
|
Date: Oct 2025
|
||||||
|
Contact: Linux kernel mailing list <linux-kernel@vger.kernel.org>
|
||||||
|
Description:
|
||||||
|
(RO) the list of logical CPUs that are designated by the kernel as
|
||||||
|
"housekeeping". Each CPU are responsible for handling essential
|
||||||
|
system-wide background tasks, including RCU callbacks, delayed
|
||||||
|
timer callbacks, and unbound workqueues, minimizing scheduling
|
||||||
|
jitter on low-latency, isolated CPUs. These CPUs are set when boot
|
||||||
|
parameter "isolcpus=nohz" or "nohz_full=" is specified.
|
||||||
|
|
||||||
What: /sys/devices/system/cpu/crash_hotplug
|
What: /sys/devices/system/cpu/crash_hotplug
|
||||||
Date: Aug 2023
|
Date: Aug 2023
|
||||||
Contact: Linux kernel mailing list <linux-kernel@vger.kernel.org>
|
Contact: Linux kernel mailing list <linux-kernel@vger.kernel.org>
|
||||||
|
|
|
||||||
29
Documentation/ABI/testing/sysfs-driver-uio_pci_sva-pasid
Normal file
29
Documentation/ABI/testing/sysfs-driver-uio_pci_sva-pasid
Normal file
|
|
@ -0,0 +1,29 @@
|
||||||
|
What: /sys/bus/pci/drivers/uio_pci_sva/<pci_dev>/pasid
|
||||||
|
Date: September 2025
|
||||||
|
Contact: Yaxing Guo <guoyaxing@bosc.ac.cn>
|
||||||
|
Description:
|
||||||
|
Process Address Space ID (PASID) assigned by IOMMU driver to
|
||||||
|
the device for use with Shared Virtual Addressing (SVA).
|
||||||
|
|
||||||
|
This read-only attribute exposes the PASID (A 20-bit identifier
|
||||||
|
used in PCIe Address Translation Services and iommu table walks)
|
||||||
|
allocated by the IOMMU driver during sva device binding.
|
||||||
|
|
||||||
|
User-space UIO applications must read this attribute to obtain
|
||||||
|
the PASID and program it into the device's configuration registers.
|
||||||
|
This enables the device to perform DMA using user-space virtual
|
||||||
|
address, with address translation handled by IOMMU.
|
||||||
|
|
||||||
|
UIO User-space applications must:
|
||||||
|
- Opening device and Mapping the device's register space via /dev/uioX
|
||||||
|
(This triggers the IOMMU driver to allocate the PASID)
|
||||||
|
- Reading the PASID from sysfs
|
||||||
|
- Writing the PASID to a device-specific register (with example offset)
|
||||||
|
The code may be like:
|
||||||
|
|
||||||
|
map = mmap(..., "/dev/uio0", ...);
|
||||||
|
|
||||||
|
f = fopen("/sys/.../pasid", "r");
|
||||||
|
fscanf(f, "%d", &pasid);
|
||||||
|
|
||||||
|
map[REG_PASID_OFFSET] = pasid;
|
||||||
53
Documentation/ABI/testing/sysfs-driver-uniwill-laptop
Normal file
53
Documentation/ABI/testing/sysfs-driver-uniwill-laptop
Normal file
|
|
@ -0,0 +1,53 @@
|
||||||
|
What: /sys/bus/platform/devices/INOU0000:XX/fn_lock_toggle_enable
|
||||||
|
Date: November 2025
|
||||||
|
KernelVersion: 6.19
|
||||||
|
Contact: Armin Wolf <W_Armin@gmx.de>
|
||||||
|
Description:
|
||||||
|
Allows userspace applications to enable/disable the FN lock feature
|
||||||
|
of the integrated keyboard by writing "1"/"0" into this file.
|
||||||
|
|
||||||
|
Reading this file returns the current enable status of the FN lock functionality.
|
||||||
|
|
||||||
|
What: /sys/bus/platform/devices/INOU0000:XX/super_key_toggle_enable
|
||||||
|
Date: November 2025
|
||||||
|
KernelVersion: 6.19
|
||||||
|
Contact: Armin Wolf <W_Armin@gmx.de>
|
||||||
|
Description:
|
||||||
|
Allows userspace applications to enable/disable the super key functionality
|
||||||
|
of the integrated keyboard by writing "1"/"0" into this file.
|
||||||
|
|
||||||
|
Reading this file returns the current enable status of the super key functionality.
|
||||||
|
|
||||||
|
What: /sys/bus/platform/devices/INOU0000:XX/touchpad_toggle_enable
|
||||||
|
Date: November 2025
|
||||||
|
KernelVersion: 6.19
|
||||||
|
Contact: Armin Wolf <W_Armin@gmx.de>
|
||||||
|
Description:
|
||||||
|
Allows userspace applications to enable/disable the touchpad toggle functionality
|
||||||
|
of the integrated touchpad by writing "1"/"0" into this file.
|
||||||
|
|
||||||
|
Reading this file returns the current enable status of the touchpad toggle
|
||||||
|
functionality.
|
||||||
|
|
||||||
|
What: /sys/bus/platform/devices/INOU0000:XX/rainbow_animation
|
||||||
|
Date: November 2025
|
||||||
|
KernelVersion: 6.19
|
||||||
|
Contact: Armin Wolf <W_Armin@gmx.de>
|
||||||
|
Description:
|
||||||
|
Forces the integrated lightbar to display a rainbow animation when the machine
|
||||||
|
is not suspended. Writing "1"/"0" into this file enables/disables this
|
||||||
|
functionality.
|
||||||
|
|
||||||
|
Reading this file returns the current status of the rainbow animation functionality.
|
||||||
|
|
||||||
|
What: /sys/bus/platform/devices/INOU0000:XX/breathing_in_suspend
|
||||||
|
Date: November 2025
|
||||||
|
KernelVersion: 6.19
|
||||||
|
Contact: Armin Wolf <W_Armin@gmx.de>
|
||||||
|
Description:
|
||||||
|
Causes the integrated lightbar to display a breathing animation when the machine
|
||||||
|
has been suspended and is running on AC power. Writing "1"/"0" into this file
|
||||||
|
enables/disables this functionality.
|
||||||
|
|
||||||
|
Reading this file returns the current status of the breathing animation
|
||||||
|
functionality.
|
||||||
|
|
@ -643,6 +643,12 @@ Contact: "Jaegeuk Kim" <jaegeuk@kernel.org>
|
||||||
Description: Shows the number of unusable blocks in a section which was defined by
|
Description: Shows the number of unusable blocks in a section which was defined by
|
||||||
the zone capacity reported by underlying zoned device.
|
the zone capacity reported by underlying zoned device.
|
||||||
|
|
||||||
|
What: /sys/fs/f2fs/<disk>/max_open_zones
|
||||||
|
Date: November 2025
|
||||||
|
Contact: "Yongpeng Yang" <yangyongpeng@xiaomi.com>
|
||||||
|
Description: Shows the max number of zones that F2FS can write concurrently when a zoned
|
||||||
|
device is mounted.
|
||||||
|
|
||||||
What: /sys/fs/f2fs/<disk>/current_atomic_write
|
What: /sys/fs/f2fs/<disk>/current_atomic_write
|
||||||
Date: July 2022
|
Date: July 2022
|
||||||
Contact: "Daeho Jeong" <daehojeong@google.com>
|
Contact: "Daeho Jeong" <daehojeong@google.com>
|
||||||
|
|
|
||||||
61
Documentation/ABI/testing/sysfs-kernel-kexec-kdump
Normal file
61
Documentation/ABI/testing/sysfs-kernel-kexec-kdump
Normal file
|
|
@ -0,0 +1,61 @@
|
||||||
|
What: /sys/kernel/kexec/*
|
||||||
|
Date: Nov 2025
|
||||||
|
Contact: kexec@lists.infradead.org
|
||||||
|
Description:
|
||||||
|
The /sys/kernel/kexec/* directory contains sysfs files
|
||||||
|
that provide information about the configuration status
|
||||||
|
of kexec and kdump.
|
||||||
|
|
||||||
|
What: /sys/kernel/kexec/loaded
|
||||||
|
Date: Nov 2025
|
||||||
|
Contact: kexec@lists.infradead.org
|
||||||
|
Description: read only
|
||||||
|
Indicates whether a new kernel image has been loaded
|
||||||
|
into memory using the kexec system call. It shows 1 if
|
||||||
|
a kexec image is present and ready to boot, or 0 if none
|
||||||
|
is loaded.
|
||||||
|
User: kexec tools, kdump service
|
||||||
|
|
||||||
|
What: /sys/kernel/kexec/crash_loaded
|
||||||
|
Date: Nov 2025
|
||||||
|
Contact: kexec@lists.infradead.org
|
||||||
|
Description: read only
|
||||||
|
Indicates whether a crash (kdump) kernel is currently
|
||||||
|
loaded into memory. It shows 1 if a crash kernel has been
|
||||||
|
successfully loaded for panic handling, or 0 if no crash
|
||||||
|
kernel is present.
|
||||||
|
User: Kexec tools, Kdump service
|
||||||
|
|
||||||
|
What: /sys/kernel/kexec/crash_size
|
||||||
|
Date: Nov 2025
|
||||||
|
Contact: kexec@lists.infradead.org
|
||||||
|
Description: read/write
|
||||||
|
Shows the amount of memory reserved for loading the crash
|
||||||
|
(kdump) kernel. It reports the size, in bytes, of the
|
||||||
|
crash kernel area defined by the crashkernel= parameter.
|
||||||
|
This interface also allows reducing the crashkernel
|
||||||
|
reservation by writing a smaller value, and the reclaimed
|
||||||
|
space is added back to the system RAM.
|
||||||
|
User: Kdump service
|
||||||
|
|
||||||
|
What: /sys/kernel/kexec/crash_elfcorehdr_size
|
||||||
|
Date: Nov 2025
|
||||||
|
Contact: kexec@lists.infradead.org
|
||||||
|
Description: read only
|
||||||
|
Indicates the preferred size of the memory buffer for the
|
||||||
|
ELF core header used by the crash (kdump) kernel. It defines
|
||||||
|
how much space is needed to hold metadata about the crashed
|
||||||
|
system, including CPU and memory information. This information
|
||||||
|
is used by the user space utility kexec to support updating the
|
||||||
|
in-kernel kdump image during hotplug operations.
|
||||||
|
User: Kexec tools
|
||||||
|
|
||||||
|
What: /sys/kernel/kexec/crash_cma_ranges
|
||||||
|
Date: Nov 2025
|
||||||
|
Contact: kexec@lists.infradead.org
|
||||||
|
Description: read only
|
||||||
|
Provides information about the memory ranges reserved from
|
||||||
|
the Contiguous Memory Allocator (CMA) area that are allocated
|
||||||
|
to the crash (kdump) kernel. It lists the start and end physical
|
||||||
|
addresses of CMA regions assigned for crashkernel use.
|
||||||
|
User: kdump service
|
||||||
|
|
@ -164,6 +164,13 @@ Description: Writing to and reading from this file sets and gets the pid of
|
||||||
the target process if the context is for virtual address spaces
|
the target process if the context is for virtual address spaces
|
||||||
monitoring, respectively.
|
monitoring, respectively.
|
||||||
|
|
||||||
|
What: /sys/kernel/mm/damon/admin/kdamonds/<K>/contexts/<C>/targets/<T>/obsolete_target
|
||||||
|
Date: Oct 2025
|
||||||
|
Contact: SeongJae Park <sj@kernel.org>
|
||||||
|
Description: Writing to and reading from this file sets and gets the
|
||||||
|
obsoleteness of the matching parameters commit destination
|
||||||
|
target.
|
||||||
|
|
||||||
What: /sys/kernel/mm/damon/admin/kdamonds/<K>/contexts/<C>/targets/<T>/regions/nr_regions
|
What: /sys/kernel/mm/damon/admin/kdamonds/<K>/contexts/<C>/targets/<T>/regions/nr_regions
|
||||||
Date: Mar 2022
|
Date: Mar 2022
|
||||||
Contact: SeongJae Park <sj@kernel.org>
|
Contact: SeongJae Park <sj@kernel.org>
|
||||||
|
|
@ -303,6 +310,12 @@ Contact: SeongJae Park <sj@kernel.org>
|
||||||
Description: Writing to and reading from this file sets and gets the nid
|
Description: Writing to and reading from this file sets and gets the nid
|
||||||
parameter of the goal.
|
parameter of the goal.
|
||||||
|
|
||||||
|
What: /sys/kernel/mm/damon/admin/kdamonds/<K>/contexts/<C>/schemes/<S>/quotas/goals/<G>/path
|
||||||
|
Date: Oct 2025
|
||||||
|
Contact: SeongJae Park <sj@kernel.org>
|
||||||
|
Description: Writing to and reading from this file sets and gets the path
|
||||||
|
parameter of the goal.
|
||||||
|
|
||||||
What: /sys/kernel/mm/damon/admin/kdamonds/<K>/contexts/<C>/schemes/<S>/quotas/weights/sz_permil
|
What: /sys/kernel/mm/damon/admin/kdamonds/<K>/contexts/<C>/schemes/<S>/quotas/weights/sz_permil
|
||||||
Date: Mar 2022
|
Date: Mar 2022
|
||||||
Contact: SeongJae Park <sj@kernel.org>
|
Contact: SeongJae Park <sj@kernel.org>
|
||||||
|
|
|
||||||
|
|
@ -59,6 +59,8 @@ Description: Module taint flags:
|
||||||
F force-loaded module
|
F force-loaded module
|
||||||
C staging driver module
|
C staging driver module
|
||||||
E unsigned module
|
E unsigned module
|
||||||
|
K livepatch module
|
||||||
|
N in-kernel test module
|
||||||
== =====================
|
== =====================
|
||||||
|
|
||||||
What: /sys/module/grant_table/parameters/free_per_iteration
|
What: /sys/module/grant_table/parameters/free_per_iteration
|
||||||
|
|
|
||||||
|
|
@ -63,6 +63,7 @@ Date: Aug 2022
|
||||||
KernelVersion: 6.1
|
KernelVersion: 6.1
|
||||||
Contact: "Luke Jones" <luke@ljones.dev>
|
Contact: "Luke Jones" <luke@ljones.dev>
|
||||||
Description:
|
Description:
|
||||||
|
DEPRECATED, WILL BE REMOVED SOON: please use asus-armoury
|
||||||
Switch the GPU hardware MUX mode. Laptops with this feature can
|
Switch the GPU hardware MUX mode. Laptops with this feature can
|
||||||
can be toggled to boot with only the dGPU (discrete mode) or in
|
can be toggled to boot with only the dGPU (discrete mode) or in
|
||||||
standard Optimus/Hybrid mode. On switch a reboot is required:
|
standard Optimus/Hybrid mode. On switch a reboot is required:
|
||||||
|
|
@ -75,6 +76,7 @@ Date: Aug 2022
|
||||||
KernelVersion: 5.17
|
KernelVersion: 5.17
|
||||||
Contact: "Luke Jones" <luke@ljones.dev>
|
Contact: "Luke Jones" <luke@ljones.dev>
|
||||||
Description:
|
Description:
|
||||||
|
DEPRECATED, WILL BE REMOVED SOON: please use asus-armoury
|
||||||
Disable discrete GPU:
|
Disable discrete GPU:
|
||||||
* 0 - Enable dGPU,
|
* 0 - Enable dGPU,
|
||||||
* 1 - Disable dGPU
|
* 1 - Disable dGPU
|
||||||
|
|
@ -84,6 +86,7 @@ Date: Aug 2022
|
||||||
KernelVersion: 5.17
|
KernelVersion: 5.17
|
||||||
Contact: "Luke Jones" <luke@ljones.dev>
|
Contact: "Luke Jones" <luke@ljones.dev>
|
||||||
Description:
|
Description:
|
||||||
|
DEPRECATED, WILL BE REMOVED SOON: please use asus-armoury
|
||||||
Enable the external GPU paired with ROG X-Flow laptops.
|
Enable the external GPU paired with ROG X-Flow laptops.
|
||||||
Toggling this setting will also trigger ACPI to disable the dGPU:
|
Toggling this setting will also trigger ACPI to disable the dGPU:
|
||||||
|
|
||||||
|
|
@ -95,6 +98,7 @@ Date: Aug 2022
|
||||||
KernelVersion: 5.17
|
KernelVersion: 5.17
|
||||||
Contact: "Luke Jones" <luke@ljones.dev>
|
Contact: "Luke Jones" <luke@ljones.dev>
|
||||||
Description:
|
Description:
|
||||||
|
DEPRECATED, WILL BE REMOVED SOON: please use asus-armoury
|
||||||
Enable an LCD response-time boost to reduce or remove ghosting:
|
Enable an LCD response-time boost to reduce or remove ghosting:
|
||||||
* 0 - Disable,
|
* 0 - Disable,
|
||||||
* 1 - Enable
|
* 1 - Enable
|
||||||
|
|
@ -104,6 +108,7 @@ Date: Jun 2023
|
||||||
KernelVersion: 6.5
|
KernelVersion: 6.5
|
||||||
Contact: "Luke Jones" <luke@ljones.dev>
|
Contact: "Luke Jones" <luke@ljones.dev>
|
||||||
Description:
|
Description:
|
||||||
|
DEPRECATED, WILL BE REMOVED SOON: please use asus-armoury
|
||||||
Get the current charging mode being used:
|
Get the current charging mode being used:
|
||||||
* 1 - Barrel connected charger,
|
* 1 - Barrel connected charger,
|
||||||
* 2 - USB-C charging
|
* 2 - USB-C charging
|
||||||
|
|
@ -114,6 +119,7 @@ Date: Jun 2023
|
||||||
KernelVersion: 6.5
|
KernelVersion: 6.5
|
||||||
Contact: "Luke Jones" <luke@ljones.dev>
|
Contact: "Luke Jones" <luke@ljones.dev>
|
||||||
Description:
|
Description:
|
||||||
|
DEPRECATED, WILL BE REMOVED SOON: please use asus-armoury
|
||||||
Show if the egpu (XG Mobile) is correctly connected:
|
Show if the egpu (XG Mobile) is correctly connected:
|
||||||
* 0 - False,
|
* 0 - False,
|
||||||
* 1 - True
|
* 1 - True
|
||||||
|
|
@ -123,6 +129,7 @@ Date: Jun 2023
|
||||||
KernelVersion: 6.5
|
KernelVersion: 6.5
|
||||||
Contact: "Luke Jones" <luke@ljones.dev>
|
Contact: "Luke Jones" <luke@ljones.dev>
|
||||||
Description:
|
Description:
|
||||||
|
DEPRECATED, WILL BE REMOVED SOON: please use asus-armoury
|
||||||
Change the mini-LED mode:
|
Change the mini-LED mode:
|
||||||
* 0 - Single-zone,
|
* 0 - Single-zone,
|
||||||
* 1 - Multi-zone
|
* 1 - Multi-zone
|
||||||
|
|
@ -133,6 +140,7 @@ Date: Apr 2024
|
||||||
KernelVersion: 6.10
|
KernelVersion: 6.10
|
||||||
Contact: "Luke Jones" <luke@ljones.dev>
|
Contact: "Luke Jones" <luke@ljones.dev>
|
||||||
Description:
|
Description:
|
||||||
|
DEPRECATED, WILL BE REMOVED SOON: please use asus-armoury
|
||||||
List the available mini-led modes.
|
List the available mini-led modes.
|
||||||
|
|
||||||
What: /sys/devices/platform/<platform>/ppt_pl1_spl
|
What: /sys/devices/platform/<platform>/ppt_pl1_spl
|
||||||
|
|
@ -140,6 +148,7 @@ Date: Jun 2023
|
||||||
KernelVersion: 6.5
|
KernelVersion: 6.5
|
||||||
Contact: "Luke Jones" <luke@ljones.dev>
|
Contact: "Luke Jones" <luke@ljones.dev>
|
||||||
Description:
|
Description:
|
||||||
|
DEPRECATED, WILL BE REMOVED SOON: please use asus-armoury
|
||||||
Set the Package Power Target total of CPU: PL1 on Intel, SPL on AMD.
|
Set the Package Power Target total of CPU: PL1 on Intel, SPL on AMD.
|
||||||
Shown on Intel+Nvidia or AMD+Nvidia based systems:
|
Shown on Intel+Nvidia or AMD+Nvidia based systems:
|
||||||
|
|
||||||
|
|
@ -150,6 +159,7 @@ Date: Jun 2023
|
||||||
KernelVersion: 6.5
|
KernelVersion: 6.5
|
||||||
Contact: "Luke Jones" <luke@ljones.dev>
|
Contact: "Luke Jones" <luke@ljones.dev>
|
||||||
Description:
|
Description:
|
||||||
|
DEPRECATED, WILL BE REMOVED SOON: please use asus-armoury
|
||||||
Set the Slow Package Power Tracking Limit of CPU: PL2 on Intel, SPPT,
|
Set the Slow Package Power Tracking Limit of CPU: PL2 on Intel, SPPT,
|
||||||
on AMD. Shown on Intel+Nvidia or AMD+Nvidia based systems:
|
on AMD. Shown on Intel+Nvidia or AMD+Nvidia based systems:
|
||||||
|
|
||||||
|
|
@ -160,6 +170,7 @@ Date: Jun 2023
|
||||||
KernelVersion: 6.5
|
KernelVersion: 6.5
|
||||||
Contact: "Luke Jones" <luke@ljones.dev>
|
Contact: "Luke Jones" <luke@ljones.dev>
|
||||||
Description:
|
Description:
|
||||||
|
DEPRECATED, WILL BE REMOVED SOON: please use asus-armoury
|
||||||
Set the Fast Package Power Tracking Limit of CPU. AMD+Nvidia only:
|
Set the Fast Package Power Tracking Limit of CPU. AMD+Nvidia only:
|
||||||
* min=5, max=250
|
* min=5, max=250
|
||||||
|
|
||||||
|
|
@ -168,6 +179,7 @@ Date: Jun 2023
|
||||||
KernelVersion: 6.5
|
KernelVersion: 6.5
|
||||||
Contact: "Luke Jones" <luke@ljones.dev>
|
Contact: "Luke Jones" <luke@ljones.dev>
|
||||||
Description:
|
Description:
|
||||||
|
DEPRECATED, WILL BE REMOVED SOON: please use asus-armoury
|
||||||
Set the APU SPPT limit. Shown on full AMD systems only:
|
Set the APU SPPT limit. Shown on full AMD systems only:
|
||||||
* min=5, max=130
|
* min=5, max=130
|
||||||
|
|
||||||
|
|
@ -176,6 +188,7 @@ Date: Jun 2023
|
||||||
KernelVersion: 6.5
|
KernelVersion: 6.5
|
||||||
Contact: "Luke Jones" <luke@ljones.dev>
|
Contact: "Luke Jones" <luke@ljones.dev>
|
||||||
Description:
|
Description:
|
||||||
|
DEPRECATED, WILL BE REMOVED SOON: please use asus-armoury
|
||||||
Set the platform SPPT limit. Shown on full AMD systems only:
|
Set the platform SPPT limit. Shown on full AMD systems only:
|
||||||
* min=5, max=130
|
* min=5, max=130
|
||||||
|
|
||||||
|
|
@ -184,6 +197,7 @@ Date: Jun 2023
|
||||||
KernelVersion: 6.5
|
KernelVersion: 6.5
|
||||||
Contact: "Luke Jones" <luke@ljones.dev>
|
Contact: "Luke Jones" <luke@ljones.dev>
|
||||||
Description:
|
Description:
|
||||||
|
DEPRECATED, WILL BE REMOVED SOON: please use asus-armoury
|
||||||
Set the dynamic boost limit of the Nvidia dGPU:
|
Set the dynamic boost limit of the Nvidia dGPU:
|
||||||
* min=5, max=25
|
* min=5, max=25
|
||||||
|
|
||||||
|
|
@ -192,6 +206,7 @@ Date: Jun 2023
|
||||||
KernelVersion: 6.5
|
KernelVersion: 6.5
|
||||||
Contact: "Luke Jones" <luke@ljones.dev>
|
Contact: "Luke Jones" <luke@ljones.dev>
|
||||||
Description:
|
Description:
|
||||||
|
DEPRECATED, WILL BE REMOVED SOON: please use asus-armoury
|
||||||
Set the target temperature limit of the Nvidia dGPU:
|
Set the target temperature limit of the Nvidia dGPU:
|
||||||
* min=75, max=87
|
* min=75, max=87
|
||||||
|
|
||||||
|
|
@ -200,6 +215,7 @@ Date: Apr 2024
|
||||||
KernelVersion: 6.10
|
KernelVersion: 6.10
|
||||||
Contact: "Luke Jones" <luke@ljones.dev>
|
Contact: "Luke Jones" <luke@ljones.dev>
|
||||||
Description:
|
Description:
|
||||||
|
DEPRECATED, WILL BE REMOVED SOON: please use asus-armoury
|
||||||
Set if the BIOS POST sound is played on boot.
|
Set if the BIOS POST sound is played on boot.
|
||||||
* 0 - False,
|
* 0 - False,
|
||||||
* 1 - True
|
* 1 - True
|
||||||
|
|
@ -209,6 +225,7 @@ Date: Apr 2024
|
||||||
KernelVersion: 6.10
|
KernelVersion: 6.10
|
||||||
Contact: "Luke Jones" <luke@ljones.dev>
|
Contact: "Luke Jones" <luke@ljones.dev>
|
||||||
Description:
|
Description:
|
||||||
|
DEPRECATED, WILL BE REMOVED SOON: please use asus-armoury
|
||||||
Set if the MCU can go in to low-power mode on system sleep
|
Set if the MCU can go in to low-power mode on system sleep
|
||||||
* 0 - False,
|
* 0 - False,
|
||||||
* 1 - True
|
* 1 - True
|
||||||
|
|
|
||||||
19
Documentation/ABI/testing/sysfs-platform-ayaneo-ec
Normal file
19
Documentation/ABI/testing/sysfs-platform-ayaneo-ec
Normal file
|
|
@ -0,0 +1,19 @@
|
||||||
|
What: /sys/devices/platform/ayaneo-ec/controller_power
|
||||||
|
Date: Nov 2025
|
||||||
|
KernelVersion: 6.19
|
||||||
|
Contact: "Antheas Kapenekakis" <lkml@antheas.dev>
|
||||||
|
Description:
|
||||||
|
Current controller power state. Allows turning on and off
|
||||||
|
the controller power (e.g. for power savings). Write 1 to
|
||||||
|
turn on, 0 to turn off. File is readable and writable.
|
||||||
|
|
||||||
|
What: /sys/devices/platform/ayaneo-ec/controller_modules
|
||||||
|
Date: Nov 2025
|
||||||
|
KernelVersion: 6.19
|
||||||
|
Contact: "Antheas Kapenekakis" <lkml@antheas.dev>
|
||||||
|
Description:
|
||||||
|
Shows which controller modules are currently connected to
|
||||||
|
the device. Possible values are "left", "right" and "both".
|
||||||
|
File is read-only. The Windows software for this device
|
||||||
|
will only set controller power to 1 if both module sides
|
||||||
|
are connected (i.e. this file returns "both").
|
||||||
|
|
@ -454,3 +454,19 @@ Description:
|
||||||
disables it. Reads from the file return the current value.
|
disables it. Reads from the file return the current value.
|
||||||
The default is "1" if the build-time "SUSPEND_SKIP_SYNC" config
|
The default is "1" if the build-time "SUSPEND_SKIP_SYNC" config
|
||||||
flag is unset, or "0" otherwise.
|
flag is unset, or "0" otherwise.
|
||||||
|
|
||||||
|
What: /sys/power/hibernate_compression_threads
|
||||||
|
Date: October 2025
|
||||||
|
Contact: <luoxueqin@kylinos.cn>
|
||||||
|
Description:
|
||||||
|
Controls the number of threads used for compression
|
||||||
|
and decompression of hibernation images.
|
||||||
|
|
||||||
|
The value can be adjusted at runtime to balance
|
||||||
|
performance and CPU utilization.
|
||||||
|
|
||||||
|
The change takes effect on the next hibernation or
|
||||||
|
resume operation.
|
||||||
|
|
||||||
|
Minimum value: 1
|
||||||
|
Default value: 3
|
||||||
|
|
|
||||||
|
|
@ -19,7 +19,7 @@ config WARN_ABI_ERRORS
|
||||||
described at Documentation/ABI/README. Yet, as they're manually
|
described at Documentation/ABI/README. Yet, as they're manually
|
||||||
written, it would be possible that some of those files would
|
written, it would be possible that some of those files would
|
||||||
have errors that would break them for being parsed by
|
have errors that would break them for being parsed by
|
||||||
scripts/get_abi.pl. Add a check to verify them.
|
tools/docs/get_abi.py. Add a check to verify them.
|
||||||
|
|
||||||
If unsure, select 'N'.
|
If unsure, select 'N'.
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -8,12 +8,12 @@ subdir- := devicetree/bindings
|
||||||
ifneq ($(MAKECMDGOALS),cleandocs)
|
ifneq ($(MAKECMDGOALS),cleandocs)
|
||||||
# Check for broken documentation file references
|
# Check for broken documentation file references
|
||||||
ifeq ($(CONFIG_WARN_MISSING_DOCUMENTS),y)
|
ifeq ($(CONFIG_WARN_MISSING_DOCUMENTS),y)
|
||||||
$(shell $(srctree)/scripts/documentation-file-ref-check --warn)
|
$(shell $(srctree)/tools/docs/documentation-file-ref-check --warn)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
# Check for broken ABI files
|
# Check for broken ABI files
|
||||||
ifeq ($(CONFIG_WARN_ABI_ERRORS),y)
|
ifeq ($(CONFIG_WARN_ABI_ERRORS),y)
|
||||||
$(shell $(srctree)/scripts/get_abi.py --dir $(srctree)/Documentation/ABI validate)
|
$(shell $(srctree)/tools/docs/get_abi.py --dir $(srctree)/Documentation/ABI validate)
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
|
@ -23,21 +23,22 @@ SPHINXOPTS =
|
||||||
SPHINXDIRS = .
|
SPHINXDIRS = .
|
||||||
DOCS_THEME =
|
DOCS_THEME =
|
||||||
DOCS_CSS =
|
DOCS_CSS =
|
||||||
_SPHINXDIRS = $(sort $(patsubst $(srctree)/Documentation/%/index.rst,%,$(wildcard $(srctree)/Documentation/*/index.rst)))
|
RUSTDOC =
|
||||||
SPHINX_CONF = conf.py
|
|
||||||
PAPER =
|
PAPER =
|
||||||
BUILDDIR = $(obj)/output
|
BUILDDIR = $(obj)/output
|
||||||
PDFLATEX = xelatex
|
PDFLATEX = xelatex
|
||||||
LATEXOPTS = -interaction=batchmode -no-shell-escape
|
LATEXOPTS = -interaction=batchmode -no-shell-escape
|
||||||
|
|
||||||
|
PYTHONPYCACHEPREFIX ?= $(abspath $(BUILDDIR)/__pycache__)
|
||||||
|
|
||||||
|
# Wrapper for sphinx-build
|
||||||
|
|
||||||
|
BUILD_WRAPPER = $(srctree)/tools/docs/sphinx-build-wrapper
|
||||||
|
|
||||||
# For denylisting "variable font" files
|
# For denylisting "variable font" files
|
||||||
# Can be overridden by setting as an env variable
|
# Can be overridden by setting as an env variable
|
||||||
FONTS_CONF_DENY_VF ?= $(HOME)/deny-vf
|
FONTS_CONF_DENY_VF ?= $(HOME)/deny-vf
|
||||||
|
|
||||||
ifeq ($(findstring 1, $(KBUILD_VERBOSE)),)
|
|
||||||
SPHINXOPTS += "-q"
|
|
||||||
endif
|
|
||||||
|
|
||||||
# User-friendly check for sphinx-build
|
# User-friendly check for sphinx-build
|
||||||
HAVE_SPHINX := $(shell if which $(SPHINXBUILD) >/dev/null 2>&1; then echo 1; else echo 0; fi)
|
HAVE_SPHINX := $(shell if which $(SPHINXBUILD) >/dev/null 2>&1; then echo 1; else echo 0; fi)
|
||||||
|
|
||||||
|
|
@ -46,141 +47,46 @@ ifeq ($(HAVE_SPHINX),0)
|
||||||
.DEFAULT:
|
.DEFAULT:
|
||||||
$(warning The '$(SPHINXBUILD)' command was not found. Make sure you have Sphinx installed and in PATH, or set the SPHINXBUILD make variable to point to the full path of the '$(SPHINXBUILD)' executable.)
|
$(warning The '$(SPHINXBUILD)' command was not found. Make sure you have Sphinx installed and in PATH, or set the SPHINXBUILD make variable to point to the full path of the '$(SPHINXBUILD)' executable.)
|
||||||
@echo
|
@echo
|
||||||
@$(srctree)/scripts/sphinx-pre-install
|
@$(srctree)/tools/docs/sphinx-pre-install
|
||||||
@echo " SKIP Sphinx $@ target."
|
@echo " SKIP Sphinx $@ target."
|
||||||
|
|
||||||
else # HAVE_SPHINX
|
else # HAVE_SPHINX
|
||||||
|
|
||||||
# User-friendly check for pdflatex and latexmk
|
# Common documentation targets
|
||||||
HAVE_PDFLATEX := $(shell if which $(PDFLATEX) >/dev/null 2>&1; then echo 1; else echo 0; fi)
|
htmldocs mandocs infodocs texinfodocs latexdocs epubdocs xmldocs pdfdocs linkcheckdocs:
|
||||||
HAVE_LATEXMK := $(shell if which latexmk >/dev/null 2>&1; then echo 1; else echo 0; fi)
|
$(Q)PYTHONPYCACHEPREFIX="$(PYTHONPYCACHEPREFIX)" \
|
||||||
|
$(srctree)/tools/docs/sphinx-pre-install --version-check
|
||||||
|
+$(Q)PYTHONPYCACHEPREFIX="$(PYTHONPYCACHEPREFIX)" \
|
||||||
|
$(PYTHON3) $(BUILD_WRAPPER) $@ \
|
||||||
|
--sphinxdirs="$(SPHINXDIRS)" $(RUSTDOC) \
|
||||||
|
--builddir="$(BUILDDIR)" --deny-vf=$(FONTS_CONF_DENY_VF) \
|
||||||
|
--theme=$(DOCS_THEME) --css=$(DOCS_CSS) --paper=$(PAPER)
|
||||||
|
|
||||||
ifeq ($(HAVE_LATEXMK),1)
|
|
||||||
PDFLATEX := latexmk -$(PDFLATEX)
|
|
||||||
endif #HAVE_LATEXMK
|
|
||||||
|
|
||||||
# Internal variables.
|
|
||||||
PAPEROPT_a4 = -D latex_elements.papersize=a4paper
|
|
||||||
PAPEROPT_letter = -D latex_elements.papersize=letterpaper
|
|
||||||
ALLSPHINXOPTS = -D kerneldoc_srctree=$(srctree) -D kerneldoc_bin=$(KERNELDOC)
|
|
||||||
ALLSPHINXOPTS += $(PAPEROPT_$(PAPER)) $(SPHINXOPTS)
|
|
||||||
ifneq ($(wildcard $(srctree)/.config),)
|
|
||||||
ifeq ($(CONFIG_RUST),y)
|
|
||||||
# Let Sphinx know we will include rustdoc
|
|
||||||
ALLSPHINXOPTS += -t rustdoc
|
|
||||||
endif
|
endif
|
||||||
endif
|
|
||||||
# the i18n builder cannot share the environment and doctrees with the others
|
|
||||||
I18NSPHINXOPTS = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) .
|
|
||||||
|
|
||||||
# commands; the 'cmd' from scripts/Kbuild.include is not *loopable*
|
|
||||||
loop_cmd = $(echo-cmd) $(cmd_$(1)) || exit;
|
|
||||||
|
|
||||||
# $2 sphinx builder e.g. "html"
|
|
||||||
# $3 name of the build subfolder / e.g. "userspace-api/media", used as:
|
|
||||||
# * dest folder relative to $(BUILDDIR) and
|
|
||||||
# * cache folder relative to $(BUILDDIR)/.doctrees
|
|
||||||
# $4 dest subfolder e.g. "man" for man pages at userspace-api/media/man
|
|
||||||
# $5 reST source folder relative to $(src),
|
|
||||||
# e.g. "userspace-api/media" for the linux-tv book-set at ./Documentation/userspace-api/media
|
|
||||||
|
|
||||||
PYTHONPYCACHEPREFIX ?= $(abspath $(BUILDDIR)/__pycache__)
|
|
||||||
|
|
||||||
quiet_cmd_sphinx = SPHINX $@ --> file://$(abspath $(BUILDDIR)/$3/$4)
|
|
||||||
cmd_sphinx = \
|
|
||||||
PYTHONPYCACHEPREFIX="$(PYTHONPYCACHEPREFIX)" \
|
|
||||||
BUILDDIR=$(abspath $(BUILDDIR)) SPHINX_CONF=$(abspath $(src)/$5/$(SPHINX_CONF)) \
|
|
||||||
$(PYTHON3) $(srctree)/scripts/jobserver-exec \
|
|
||||||
$(CONFIG_SHELL) $(srctree)/Documentation/sphinx/parallel-wrapper.sh \
|
|
||||||
$(SPHINXBUILD) \
|
|
||||||
-b $2 \
|
|
||||||
-c $(abspath $(src)) \
|
|
||||||
-d $(abspath $(BUILDDIR)/.doctrees/$3) \
|
|
||||||
-D version=$(KERNELVERSION) -D release=$(KERNELRELEASE) \
|
|
||||||
$(ALLSPHINXOPTS) \
|
|
||||||
$(abspath $(src)/$5) \
|
|
||||||
$(abspath $(BUILDDIR)/$3/$4) && \
|
|
||||||
if [ "x$(DOCS_CSS)" != "x" ]; then \
|
|
||||||
cp $(if $(patsubst /%,,$(DOCS_CSS)),$(abspath $(srctree)/$(DOCS_CSS)),$(DOCS_CSS)) $(BUILDDIR)/$3/_static/; \
|
|
||||||
fi
|
|
||||||
|
|
||||||
htmldocs:
|
|
||||||
@$(srctree)/scripts/sphinx-pre-install --version-check
|
|
||||||
@+$(foreach var,$(SPHINXDIRS),$(call loop_cmd,sphinx,html,$(var),,$(var)))
|
|
||||||
|
|
||||||
htmldocs-redirects: $(srctree)/Documentation/.renames.txt
|
|
||||||
@tools/docs/gen-redirects.py --output $(BUILDDIR) < $<
|
|
||||||
|
|
||||||
# If Rust support is available and .config exists, add rustdoc generated contents.
|
|
||||||
# If there are any, the errors from this make rustdoc will be displayed but
|
|
||||||
# won't stop the execution of htmldocs
|
|
||||||
|
|
||||||
ifneq ($(wildcard $(srctree)/.config),)
|
|
||||||
ifeq ($(CONFIG_RUST),y)
|
|
||||||
$(Q)$(MAKE) rustdoc || true
|
|
||||||
endif
|
|
||||||
endif
|
|
||||||
|
|
||||||
texinfodocs:
|
|
||||||
@$(srctree)/scripts/sphinx-pre-install --version-check
|
|
||||||
@+$(foreach var,$(SPHINXDIRS),$(call loop_cmd,sphinx,texinfo,$(var),texinfo,$(var)))
|
|
||||||
|
|
||||||
# Note: the 'info' Make target is generated by sphinx itself when
|
|
||||||
# running the texinfodocs target define above.
|
|
||||||
infodocs: texinfodocs
|
|
||||||
$(MAKE) -C $(BUILDDIR)/texinfo info
|
|
||||||
|
|
||||||
linkcheckdocs:
|
|
||||||
@$(foreach var,$(SPHINXDIRS),$(call loop_cmd,sphinx,linkcheck,$(var),,$(var)))
|
|
||||||
|
|
||||||
latexdocs:
|
|
||||||
@$(srctree)/scripts/sphinx-pre-install --version-check
|
|
||||||
@+$(foreach var,$(SPHINXDIRS),$(call loop_cmd,sphinx,latex,$(var),latex,$(var)))
|
|
||||||
|
|
||||||
ifeq ($(HAVE_PDFLATEX),0)
|
|
||||||
|
|
||||||
pdfdocs:
|
|
||||||
$(warning The '$(PDFLATEX)' command was not found. Make sure you have it installed and in PATH to produce PDF output.)
|
|
||||||
@echo " SKIP Sphinx $@ target."
|
|
||||||
|
|
||||||
else # HAVE_PDFLATEX
|
|
||||||
|
|
||||||
pdfdocs: DENY_VF = XDG_CONFIG_HOME=$(FONTS_CONF_DENY_VF)
|
|
||||||
pdfdocs: latexdocs
|
|
||||||
@$(srctree)/scripts/sphinx-pre-install --version-check
|
|
||||||
$(foreach var,$(SPHINXDIRS), \
|
|
||||||
$(MAKE) PDFLATEX="$(PDFLATEX)" LATEXOPTS="$(LATEXOPTS)" $(DENY_VF) -C $(BUILDDIR)/$(var)/latex || sh $(srctree)/scripts/check-variable-fonts.sh || exit; \
|
|
||||||
mkdir -p $(BUILDDIR)/$(var)/pdf; \
|
|
||||||
mv $(subst .tex,.pdf,$(wildcard $(BUILDDIR)/$(var)/latex/*.tex)) $(BUILDDIR)/$(var)/pdf/; \
|
|
||||||
)
|
|
||||||
|
|
||||||
endif # HAVE_PDFLATEX
|
|
||||||
|
|
||||||
epubdocs:
|
|
||||||
@$(srctree)/scripts/sphinx-pre-install --version-check
|
|
||||||
@+$(foreach var,$(SPHINXDIRS),$(call loop_cmd,sphinx,epub,$(var),epub,$(var)))
|
|
||||||
|
|
||||||
xmldocs:
|
|
||||||
@$(srctree)/scripts/sphinx-pre-install --version-check
|
|
||||||
@+$(foreach var,$(SPHINXDIRS),$(call loop_cmd,sphinx,xml,$(var),xml,$(var)))
|
|
||||||
|
|
||||||
endif # HAVE_SPHINX
|
|
||||||
|
|
||||||
# The following targets are independent of HAVE_SPHINX, and the rules should
|
# The following targets are independent of HAVE_SPHINX, and the rules should
|
||||||
# work or silently pass without Sphinx.
|
# work or silently pass without Sphinx.
|
||||||
|
|
||||||
|
htmldocs-redirects: $(srctree)/Documentation/.renames.txt
|
||||||
|
@tools/docs/gen-redirects.py --output $(BUILDDIR) < $<
|
||||||
|
|
||||||
refcheckdocs:
|
refcheckdocs:
|
||||||
$(Q)cd $(srctree);scripts/documentation-file-ref-check
|
$(Q)cd $(srctree); tools/docs/documentation-file-ref-check
|
||||||
|
|
||||||
cleandocs:
|
cleandocs:
|
||||||
$(Q)rm -rf $(BUILDDIR)
|
$(Q)rm -rf $(BUILDDIR)
|
||||||
|
|
||||||
|
# Used only on help
|
||||||
|
_SPHINXDIRS = $(shell printf "%s\n" $(patsubst $(srctree)/Documentation/%/index.rst,%,$(wildcard $(srctree)/Documentation/*/index.rst)) | sort -f)
|
||||||
|
|
||||||
dochelp:
|
dochelp:
|
||||||
@echo ' Linux kernel internal documentation in different formats from ReST:'
|
@echo ' Linux kernel internal documentation in different formats from ReST:'
|
||||||
@echo ' htmldocs - HTML'
|
@echo ' htmldocs - HTML'
|
||||||
@echo ' htmldocs-redirects - generate HTML redirects for moved pages'
|
@echo ' htmldocs-redirects - generate HTML redirects for moved pages'
|
||||||
@echo ' texinfodocs - Texinfo'
|
@echo ' texinfodocs - Texinfo'
|
||||||
@echo ' infodocs - Info'
|
@echo ' infodocs - Info'
|
||||||
|
@echo ' mandocs - Man pages'
|
||||||
@echo ' latexdocs - LaTeX'
|
@echo ' latexdocs - LaTeX'
|
||||||
@echo ' pdfdocs - PDF'
|
@echo ' pdfdocs - PDF'
|
||||||
@echo ' epubdocs - EPUB'
|
@echo ' epubdocs - EPUB'
|
||||||
|
|
@ -192,13 +98,17 @@ dochelp:
|
||||||
@echo ' cleandocs - clean all generated files'
|
@echo ' cleandocs - clean all generated files'
|
||||||
@echo
|
@echo
|
||||||
@echo ' make SPHINXDIRS="s1 s2" [target] Generate only docs of folder s1, s2'
|
@echo ' make SPHINXDIRS="s1 s2" [target] Generate only docs of folder s1, s2'
|
||||||
@echo ' valid values for SPHINXDIRS are: $(_SPHINXDIRS)'
|
@echo ' top level values for SPHINXDIRS are: $(_SPHINXDIRS)'
|
||||||
@echo
|
@echo ' you may also use a subdirectory like SPHINXDIRS=userspace-api/media,'
|
||||||
@echo ' make SPHINX_CONF={conf-file} [target] use *additional* sphinx-build'
|
@echo ' provided that there is an index.rst file at the subdirectory.'
|
||||||
@echo ' configuration. This is e.g. useful to build with nit-picking config.'
|
|
||||||
@echo
|
@echo
|
||||||
@echo ' make DOCS_THEME={sphinx-theme} selects a different Sphinx theme.'
|
@echo ' make DOCS_THEME={sphinx-theme} selects a different Sphinx theme.'
|
||||||
@echo
|
@echo
|
||||||
@echo ' make DOCS_CSS={a .css file} adds a DOCS_CSS override file for html/epub output.'
|
@echo ' make DOCS_CSS={a .css file} adds a DOCS_CSS override file for html/epub output.'
|
||||||
@echo
|
@echo
|
||||||
|
@echo ' make PAPER={a4|letter} Specifies the paper size used for LaTeX/PDF output.'
|
||||||
|
@echo
|
||||||
|
@echo ' make FONTS_CONF_DENY_VF={path} sets a deny list to block variable Noto CJK fonts'
|
||||||
|
@echo ' for PDF build. See tools/lib/python/kdoc/latex_fonts.py for more details'
|
||||||
|
@echo
|
||||||
@echo ' Default location for the generated documents is Documentation/output'
|
@echo ' Default location for the generated documents is Documentation/output'
|
||||||
|
|
|
||||||
|
|
@ -326,6 +326,21 @@ be recovered, there is nothing more that can be done; the platform
|
||||||
will typically report a "permanent failure" in such a case. The
|
will typically report a "permanent failure" in such a case. The
|
||||||
device will be considered "dead" in this case.
|
device will be considered "dead" in this case.
|
||||||
|
|
||||||
|
Drivers typically need to call pci_restore_state() after reset to
|
||||||
|
re-initialize the device's config space registers and thereby
|
||||||
|
bring it from D0\ :sub:`uninitialized` into D0\ :sub:`active` state
|
||||||
|
(PCIe r7.0 sec 5.3.1.1). The PCI core invokes pci_save_state()
|
||||||
|
on enumeration after initializing config space to ensure that a
|
||||||
|
saved state is available for subsequent error recovery.
|
||||||
|
Drivers which modify config space on probe may need to invoke
|
||||||
|
pci_save_state() afterwards to record those changes for later
|
||||||
|
error recovery. When going into system suspend, pci_save_state()
|
||||||
|
is called for every PCI device and that state will be restored
|
||||||
|
not only on resume, but also on any subsequent error recovery.
|
||||||
|
In the unlikely event that the saved state recorded on suspend
|
||||||
|
is unsuitable for error recovery, drivers should call
|
||||||
|
pci_save_state() on resume.
|
||||||
|
|
||||||
Drivers for multi-function cards will need to coordinate among
|
Drivers for multi-function cards will need to coordinate among
|
||||||
themselves as to which driver instance will perform any "one-shot"
|
themselves as to which driver instance will perform any "one-shot"
|
||||||
or global device initialization. For example, the Symbios sym53cxx2
|
or global device initialization. For example, the Symbios sym53cxx2
|
||||||
|
|
|
||||||
|
|
@ -2637,15 +2637,16 @@ synchronize_srcu() for some other domain ``ss1``, and if an
|
||||||
that was held across as ``ss``-domain synchronize_srcu(), deadlock
|
that was held across as ``ss``-domain synchronize_srcu(), deadlock
|
||||||
would again be possible. Such a deadlock cycle could extend across an
|
would again be possible. Such a deadlock cycle could extend across an
|
||||||
arbitrarily large number of different SRCU domains. Again, with great
|
arbitrarily large number of different SRCU domains. Again, with great
|
||||||
power comes great responsibility.
|
power comes great responsibility, though lockdep is now able to detect
|
||||||
|
this sort of deadlock.
|
||||||
|
|
||||||
Unlike the other RCU flavors, SRCU read-side critical sections can run
|
Unlike the other RCU flavors, SRCU read-side critical sections can run on
|
||||||
on idle and even offline CPUs. This ability requires that
|
idle and even offline CPUs, with the exception of srcu_read_lock_fast()
|
||||||
srcu_read_lock() and srcu_read_unlock() contain memory barriers,
|
and friends. This ability requires that srcu_read_lock() and
|
||||||
which means that SRCU readers will run a bit slower than would RCU
|
srcu_read_unlock() contain memory barriers, which means that SRCU
|
||||||
readers. It also motivates the smp_mb__after_srcu_read_unlock() API,
|
readers will run a bit slower than would RCU readers. It also motivates
|
||||||
which, in combination with srcu_read_unlock(), guarantees a full
|
the smp_mb__after_srcu_read_unlock() API, which, in combination with
|
||||||
memory barrier.
|
srcu_read_unlock(), guarantees a full memory barrier.
|
||||||
|
|
||||||
Also unlike other RCU flavors, synchronize_srcu() may **not** be
|
Also unlike other RCU flavors, synchronize_srcu() may **not** be
|
||||||
invoked from CPU-hotplug notifiers, due to the fact that SRCU grace
|
invoked from CPU-hotplug notifiers, due to the fact that SRCU grace
|
||||||
|
|
@ -2681,15 +2682,15 @@ run some tests first. SRCU just might need a few adjustment to deal with
|
||||||
that sort of load. Of course, your mileage may vary based on the speed
|
that sort of load. Of course, your mileage may vary based on the speed
|
||||||
of your CPUs and the size of your memory.
|
of your CPUs and the size of your memory.
|
||||||
|
|
||||||
The `SRCU
|
The `SRCU API
|
||||||
API <https://lwn.net/Articles/609973/#RCU%20Per-Flavor%20API%20Table>`__
|
<https://lwn.net/Articles/609973/#RCU%20Per-Flavor%20API%20Table>`__
|
||||||
includes srcu_read_lock(), srcu_read_unlock(),
|
includes srcu_read_lock(), srcu_read_unlock(),
|
||||||
srcu_dereference(), srcu_dereference_check(),
|
srcu_dereference(), srcu_dereference_check(), synchronize_srcu(),
|
||||||
synchronize_srcu(), synchronize_srcu_expedited(),
|
synchronize_srcu_expedited(), call_srcu(), srcu_barrier(),
|
||||||
call_srcu(), srcu_barrier(), and srcu_read_lock_held(). It
|
and srcu_read_lock_held(). It also includes DEFINE_SRCU(),
|
||||||
also includes DEFINE_SRCU(), DEFINE_STATIC_SRCU(), and
|
DEFINE_STATIC_SRCU(), DEFINE_SRCU_FAST(), DEFINE_STATIC_SRCU_FAST(),
|
||||||
init_srcu_struct() APIs for defining and initializing
|
init_srcu_struct(), and init_srcu_struct_fast() APIs for defining and
|
||||||
``srcu_struct`` structures.
|
initializing ``srcu_struct`` structures.
|
||||||
|
|
||||||
More recently, the SRCU API has added polling interfaces:
|
More recently, the SRCU API has added polling interfaces:
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -417,11 +417,13 @@ over a rather long period of time, but improvements are always welcome!
|
||||||
you should be using RCU rather than SRCU, because RCU is almost
|
you should be using RCU rather than SRCU, because RCU is almost
|
||||||
always faster and easier to use than is SRCU.
|
always faster and easier to use than is SRCU.
|
||||||
|
|
||||||
Also unlike other forms of RCU, explicit initialization and
|
Also unlike other forms of RCU, explicit initialization
|
||||||
cleanup is required either at build time via DEFINE_SRCU()
|
and cleanup is required either at build time via
|
||||||
or DEFINE_STATIC_SRCU() or at runtime via init_srcu_struct()
|
DEFINE_SRCU(), DEFINE_STATIC_SRCU(), DEFINE_SRCU_FAST(),
|
||||||
and cleanup_srcu_struct(). These last two are passed a
|
or DEFINE_STATIC_SRCU_FAST() or at runtime via either
|
||||||
"struct srcu_struct" that defines the scope of a given
|
init_srcu_struct() or init_srcu_struct_fast() and
|
||||||
|
cleanup_srcu_struct(). These last three are passed a
|
||||||
|
`struct srcu_struct` that defines the scope of a given
|
||||||
SRCU domain. Once initialized, the srcu_struct is passed
|
SRCU domain. Once initialized, the srcu_struct is passed
|
||||||
to srcu_read_lock(), srcu_read_unlock() synchronize_srcu(),
|
to srcu_read_lock(), srcu_read_unlock() synchronize_srcu(),
|
||||||
synchronize_srcu_expedited(), and call_srcu(). A given
|
synchronize_srcu_expedited(), and call_srcu(). A given
|
||||||
|
|
|
||||||
|
|
@ -1227,7 +1227,10 @@ SRCU: Initialization/cleanup/ordering::
|
||||||
|
|
||||||
DEFINE_SRCU
|
DEFINE_SRCU
|
||||||
DEFINE_STATIC_SRCU
|
DEFINE_STATIC_SRCU
|
||||||
|
DEFINE_SRCU_FAST // for srcu_read_lock_fast() and friends
|
||||||
|
DEFINE_STATIC_SRCU_FAST // for srcu_read_lock_fast() and friends
|
||||||
init_srcu_struct
|
init_srcu_struct
|
||||||
|
init_srcu_struct_fast
|
||||||
cleanup_srcu_struct
|
cleanup_srcu_struct
|
||||||
smp_mb__after_srcu_read_unlock
|
smp_mb__after_srcu_read_unlock
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -76,41 +76,43 @@ The messages are in the format::
|
||||||
The taskstats payload is one of the following three kinds:
|
The taskstats payload is one of the following three kinds:
|
||||||
|
|
||||||
1. Commands: Sent from user to kernel. Commands to get data on
|
1. Commands: Sent from user to kernel. Commands to get data on
|
||||||
a pid/tgid consist of one attribute, of type TASKSTATS_CMD_ATTR_PID/TGID,
|
a pid/tgid consist of one attribute, of type TASKSTATS_CMD_ATTR_PID/TGID,
|
||||||
containing a u32 pid or tgid in the attribute payload. The pid/tgid denotes
|
containing a u32 pid or tgid in the attribute payload. The pid/tgid denotes
|
||||||
the task/process for which userspace wants statistics.
|
the task/process for which userspace wants statistics.
|
||||||
|
|
||||||
Commands to register/deregister interest in exit data from a set of cpus
|
Commands to register/deregister interest in exit data from a set of cpus
|
||||||
consist of one attribute, of type
|
consist of one attribute, of type
|
||||||
TASKSTATS_CMD_ATTR_REGISTER/DEREGISTER_CPUMASK and contain a cpumask in the
|
TASKSTATS_CMD_ATTR_REGISTER/DEREGISTER_CPUMASK and contain a cpumask in the
|
||||||
attribute payload. The cpumask is specified as an ascii string of
|
attribute payload. The cpumask is specified as an ascii string of
|
||||||
comma-separated cpu ranges e.g. to listen to exit data from cpus 1,2,3,5,7,8
|
comma-separated cpu ranges e.g. to listen to exit data from cpus 1,2,3,5,7,8
|
||||||
the cpumask would be "1-3,5,7-8". If userspace forgets to deregister interest
|
the cpumask would be "1-3,5,7-8". If userspace forgets to deregister
|
||||||
in cpus before closing the listening socket, the kernel cleans up its interest
|
interest in cpus before closing the listening socket, the kernel cleans up
|
||||||
set over time. However, for the sake of efficiency, an explicit deregistration
|
its interest set over time. However, for the sake of efficiency, an explicit
|
||||||
is advisable.
|
deregistration is advisable.
|
||||||
|
|
||||||
2. Response for a command: sent from the kernel in response to a userspace
|
2. Response for a command: sent from the kernel in response to a userspace
|
||||||
command. The payload is a series of three attributes of type:
|
command. The payload is a series of three attributes of type:
|
||||||
|
|
||||||
a) TASKSTATS_TYPE_AGGR_PID/TGID : attribute containing no payload but indicates
|
a) TASKSTATS_TYPE_AGGR_PID/TGID: attribute containing no payload but
|
||||||
a pid/tgid will be followed by some stats.
|
indicates a pid/tgid will be followed by some stats.
|
||||||
|
|
||||||
b) TASKSTATS_TYPE_PID/TGID: attribute whose payload is the pid/tgid whose stats
|
b) TASKSTATS_TYPE_PID/TGID: attribute whose payload is the pid/tgid whose
|
||||||
are being returned.
|
stats are being returned.
|
||||||
|
|
||||||
c) TASKSTATS_TYPE_STATS: attribute with a struct taskstats as payload. The
|
c) TASKSTATS_TYPE_STATS: attribute with a struct taskstats as payload. The
|
||||||
same structure is used for both per-pid and per-tgid stats.
|
same structure is used for both per-pid and per-tgid stats.
|
||||||
|
|
||||||
3. New message sent by kernel whenever a task exits. The payload consists of a
|
3. New message sent by kernel whenever a task exits. The payload consists of a
|
||||||
series of attributes of the following type:
|
series of attributes of the following type:
|
||||||
|
|
||||||
a) TASKSTATS_TYPE_AGGR_PID: indicates next two attributes will be pid+stats
|
a) TASKSTATS_TYPE_AGGR_PID: indicates next two attributes will be pid+stats
|
||||||
b) TASKSTATS_TYPE_PID: contains exiting task's pid
|
b) TASKSTATS_TYPE_PID: contains exiting task's pid
|
||||||
c) TASKSTATS_TYPE_STATS: contains the exiting task's per-pid stats
|
c) TASKSTATS_TYPE_STATS: contains the exiting task's per-pid stats
|
||||||
d) TASKSTATS_TYPE_AGGR_TGID: indicates next two attributes will be tgid+stats
|
d) TASKSTATS_TYPE_AGGR_TGID: indicates next two attributes will be
|
||||||
e) TASKSTATS_TYPE_TGID: contains tgid of process to which task belongs
|
tgid+stats
|
||||||
f) TASKSTATS_TYPE_STATS: contains the per-tgid stats for exiting task's process
|
e) TASKSTATS_TYPE_TGID: contains tgid of process to which task belongs
|
||||||
|
f) TASKSTATS_TYPE_STATS: contains the per-tgid stats for exiting task's
|
||||||
|
process
|
||||||
|
|
||||||
|
|
||||||
per-tgid stats
|
per-tgid stats
|
||||||
|
|
|
||||||
|
|
@ -601,10 +601,15 @@ specification.
|
||||||
Task Attribute
|
Task Attribute
|
||||||
~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~
|
||||||
|
|
||||||
The Smack label of a process can be read from /proc/<pid>/attr/current. A
|
The Smack label of a process can be read from ``/proc/<pid>/attr/current``. A
|
||||||
process can read its own Smack label from /proc/self/attr/current. A
|
process can read its own Smack label from ``/proc/self/attr/current``. A
|
||||||
privileged process can change its own Smack label by writing to
|
privileged process can change its own Smack label by writing to
|
||||||
/proc/self/attr/current but not the label of another process.
|
``/proc/self/attr/current`` but not the label of another process.
|
||||||
|
|
||||||
|
Format of writing is : only the label or the label followed by one of the
|
||||||
|
3 trailers: ``\n`` (by common agreement for ``/proc/...`` interfaces),
|
||||||
|
``\0`` (because some applications incorrectly include it),
|
||||||
|
``\n\0`` (because we think some applications may incorrectly include it).
|
||||||
|
|
||||||
File Attribute
|
File Attribute
|
||||||
~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~
|
||||||
|
|
@ -696,6 +701,11 @@ sockets.
|
||||||
A privileged program may set this to match the label of another
|
A privileged program may set this to match the label of another
|
||||||
task with which it hopes to communicate.
|
task with which it hopes to communicate.
|
||||||
|
|
||||||
|
UNIX domain socket (UDS) with a BSD address functions both as a file in a
|
||||||
|
filesystem and as a socket. As a file, it carries the SMACK64 attribute. This
|
||||||
|
attribute is not involved in Smack security enforcement and is immutably
|
||||||
|
assigned the label "*".
|
||||||
|
|
||||||
Smack Netlabel Exceptions
|
Smack Netlabel Exceptions
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -95,7 +95,20 @@ languages when these scripts are invoked by passing these program files
|
||||||
to the interpreter. This is because the way interpreters execute these
|
to the interpreter. This is because the way interpreters execute these
|
||||||
files; the scripts themselves are not evaluated as executable code
|
files; the scripts themselves are not evaluated as executable code
|
||||||
through one of IPE's hooks, but they are merely text files that are read
|
through one of IPE's hooks, but they are merely text files that are read
|
||||||
(as opposed to compiled executables) [#interpreters]_.
|
(as opposed to compiled executables). However, with the introduction of the
|
||||||
|
``AT_EXECVE_CHECK`` flag (:doc:`AT_EXECVE_CHECK </userspace-api/check_exec>`),
|
||||||
|
interpreters can use it to signal the kernel that a script file will be executed,
|
||||||
|
and request the kernel to perform LSM security checks on it.
|
||||||
|
|
||||||
|
IPE's EXECUTE operation enforcement differs between compiled executables and
|
||||||
|
interpreted scripts: For compiled executables, enforcement is triggered
|
||||||
|
automatically by the kernel during ``execve()``, ``execveat()``, ``mmap()``
|
||||||
|
and ``mprotect()`` syscalls when loading executable content. For interpreted
|
||||||
|
scripts, enforcement requires explicit interpreter integration using
|
||||||
|
``execveat()`` with ``AT_EXECVE_CHECK`` flag. Unlike exec syscalls that IPE
|
||||||
|
intercepts during the execution process, this mechanism needs the interpreter
|
||||||
|
to take the initiative, and existing interpreters won't be automatically
|
||||||
|
supported unless the signal call is added.
|
||||||
|
|
||||||
Threat Model
|
Threat Model
|
||||||
------------
|
------------
|
||||||
|
|
@ -806,8 +819,6 @@ A:
|
||||||
|
|
||||||
.. [#digest_cache_lsm] https://lore.kernel.org/lkml/20240415142436.2545003-1-roberto.sassu@huaweicloud.com/
|
.. [#digest_cache_lsm] https://lore.kernel.org/lkml/20240415142436.2545003-1-roberto.sassu@huaweicloud.com/
|
||||||
|
|
||||||
.. [#interpreters] There is `some interest in solving this issue <https://lore.kernel.org/lkml/20220321161557.495388-1-mic@digikod.net/>`_.
|
|
||||||
|
|
||||||
.. [#devdoc] Please see :doc:`the design docs </security/ipe>` for more on
|
.. [#devdoc] Please see :doc:`the design docs </security/ipe>` for more on
|
||||||
this topic.
|
this topic.
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -406,24 +406,8 @@ index of the MC::
|
||||||
|->mc2
|
|->mc2
|
||||||
....
|
....
|
||||||
|
|
||||||
Under each ``mcX`` directory each ``csrowX`` is again represented by a
|
Within each of the ``mcX`` directory are several EDAC control and
|
||||||
``csrowX``, where ``X`` is the csrow index::
|
attribute files.
|
||||||
|
|
||||||
.../mc/mc0/
|
|
||||||
|
|
|
||||||
|->csrow0
|
|
||||||
|->csrow2
|
|
||||||
|->csrow3
|
|
||||||
....
|
|
||||||
|
|
||||||
Notice that there is no csrow1, which indicates that csrow0 is composed
|
|
||||||
of a single ranked DIMMs. This should also apply in both Channels, in
|
|
||||||
order to have dual-channel mode be operational. Since both csrow2 and
|
|
||||||
csrow3 are populated, this indicates a dual ranked set of DIMMs for
|
|
||||||
channels 0 and 1.
|
|
||||||
|
|
||||||
Within each of the ``mcX`` and ``csrowX`` directories are several EDAC
|
|
||||||
control and attribute files.
|
|
||||||
|
|
||||||
``mcX`` directories
|
``mcX`` directories
|
||||||
-------------------
|
-------------------
|
||||||
|
|
@ -569,7 +553,7 @@ this ``X`` memory module:
|
||||||
- Unbuffered-DDR
|
- Unbuffered-DDR
|
||||||
|
|
||||||
.. [#f5] On some systems, the memory controller doesn't have any logic
|
.. [#f5] On some systems, the memory controller doesn't have any logic
|
||||||
to identify the memory module. On such systems, the directory is called ``rankX`` and works on a similar way as the ``csrowX`` directories.
|
to identify the memory module. On such systems, the directory is called ``rankX``.
|
||||||
On modern Intel memory controllers, the memory controller identifies the
|
On modern Intel memory controllers, the memory controller identifies the
|
||||||
memory modules directly. On such systems, the directory is called ``dimmX``.
|
memory modules directly. On such systems, the directory is called ``dimmX``.
|
||||||
|
|
||||||
|
|
@ -577,126 +561,6 @@ this ``X`` memory module:
|
||||||
symlinks inside the sysfs mapping that are automatically created by
|
symlinks inside the sysfs mapping that are automatically created by
|
||||||
the sysfs subsystem. Currently, they serve no purpose.
|
the sysfs subsystem. Currently, they serve no purpose.
|
||||||
|
|
||||||
``csrowX`` directories
|
|
||||||
----------------------
|
|
||||||
|
|
||||||
When CONFIG_EDAC_LEGACY_SYSFS is enabled, sysfs will contain the ``csrowX``
|
|
||||||
directories. As this API doesn't work properly for Rambus, FB-DIMMs and
|
|
||||||
modern Intel Memory Controllers, this is being deprecated in favor of
|
|
||||||
``dimmX`` directories.
|
|
||||||
|
|
||||||
In the ``csrowX`` directories are EDAC control and attribute files for
|
|
||||||
this ``X`` instance of csrow:
|
|
||||||
|
|
||||||
|
|
||||||
- ``ue_count`` - Total Uncorrectable Errors count attribute file
|
|
||||||
|
|
||||||
This attribute file displays the total count of uncorrectable
|
|
||||||
errors that have occurred on this csrow. If panic_on_ue is set
|
|
||||||
this counter will not have a chance to increment, since EDAC
|
|
||||||
will panic the system.
|
|
||||||
|
|
||||||
|
|
||||||
- ``ce_count`` - Total Correctable Errors count attribute file
|
|
||||||
|
|
||||||
This attribute file displays the total count of correctable
|
|
||||||
errors that have occurred on this csrow. This count is very
|
|
||||||
important to examine. CEs provide early indications that a
|
|
||||||
DIMM is beginning to fail. This count field should be
|
|
||||||
monitored for non-zero values and report such information
|
|
||||||
to the system administrator.
|
|
||||||
|
|
||||||
|
|
||||||
- ``size_mb`` - Total memory managed by this csrow attribute file
|
|
||||||
|
|
||||||
This attribute file displays, in count of megabytes, the memory
|
|
||||||
that this csrow contains.
|
|
||||||
|
|
||||||
|
|
||||||
- ``mem_type`` - Memory Type attribute file
|
|
||||||
|
|
||||||
This attribute file will display what type of memory is currently
|
|
||||||
on this csrow. Normally, either buffered or unbuffered memory.
|
|
||||||
Examples:
|
|
||||||
|
|
||||||
- Registered-DDR
|
|
||||||
- Unbuffered-DDR
|
|
||||||
|
|
||||||
|
|
||||||
- ``edac_mode`` - EDAC Mode of operation attribute file
|
|
||||||
|
|
||||||
This attribute file will display what type of Error detection
|
|
||||||
and correction is being utilized.
|
|
||||||
|
|
||||||
|
|
||||||
- ``dev_type`` - Device type attribute file
|
|
||||||
|
|
||||||
This attribute file will display what type of DRAM device is
|
|
||||||
being utilized on this DIMM.
|
|
||||||
Examples:
|
|
||||||
|
|
||||||
- x1
|
|
||||||
- x2
|
|
||||||
- x4
|
|
||||||
- x8
|
|
||||||
|
|
||||||
|
|
||||||
- ``ch0_ce_count`` - Channel 0 CE Count attribute file
|
|
||||||
|
|
||||||
This attribute file will display the count of CEs on this
|
|
||||||
DIMM located in channel 0.
|
|
||||||
|
|
||||||
|
|
||||||
- ``ch0_ue_count`` - Channel 0 UE Count attribute file
|
|
||||||
|
|
||||||
This attribute file will display the count of UEs on this
|
|
||||||
DIMM located in channel 0.
|
|
||||||
|
|
||||||
|
|
||||||
- ``ch0_dimm_label`` - Channel 0 DIMM Label control file
|
|
||||||
|
|
||||||
|
|
||||||
This control file allows this DIMM to have a label assigned
|
|
||||||
to it. With this label in the module, when errors occur
|
|
||||||
the output can provide the DIMM label in the system log.
|
|
||||||
This becomes vital for panic events to isolate the
|
|
||||||
cause of the UE event.
|
|
||||||
|
|
||||||
DIMM Labels must be assigned after booting, with information
|
|
||||||
that correctly identifies the physical slot with its
|
|
||||||
silk screen label. This information is currently very
|
|
||||||
motherboard specific and determination of this information
|
|
||||||
must occur in userland at this time.
|
|
||||||
|
|
||||||
|
|
||||||
- ``ch1_ce_count`` - Channel 1 CE Count attribute file
|
|
||||||
|
|
||||||
|
|
||||||
This attribute file will display the count of CEs on this
|
|
||||||
DIMM located in channel 1.
|
|
||||||
|
|
||||||
|
|
||||||
- ``ch1_ue_count`` - Channel 1 UE Count attribute file
|
|
||||||
|
|
||||||
|
|
||||||
This attribute file will display the count of UEs on this
|
|
||||||
DIMM located in channel 0.
|
|
||||||
|
|
||||||
|
|
||||||
- ``ch1_dimm_label`` - Channel 1 DIMM Label control file
|
|
||||||
|
|
||||||
This control file allows this DIMM to have a label assigned
|
|
||||||
to it. With this label in the module, when errors occur
|
|
||||||
the output can provide the DIMM label in the system log.
|
|
||||||
This becomes vital for panic events to isolate the
|
|
||||||
cause of the UE event.
|
|
||||||
|
|
||||||
DIMM Labels must be assigned after booting, with information
|
|
||||||
that correctly identifies the physical slot with its
|
|
||||||
silk screen label. This information is currently very
|
|
||||||
motherboard specific and determination of this information
|
|
||||||
must occur in userland at this time.
|
|
||||||
|
|
||||||
|
|
||||||
System Logging
|
System Logging
|
||||||
--------------
|
--------------
|
||||||
|
|
|
||||||
|
|
@ -17,8 +17,7 @@ The latest bcache kernel code can be found from mainline Linux kernel:
|
||||||
It's designed around the performance characteristics of SSDs - it only allocates
|
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
|
in erase block sized buckets, and it uses a hybrid btree/log to track cached
|
||||||
extents (which can be anywhere from a single sector to the bucket size). It's
|
extents (which can be anywhere from a single sector to the bucket size). It's
|
||||||
designed to avoid random writes at all costs; it fills up an erase block
|
designed to avoid random writes at all costs.
|
||||||
sequentially, then issues a discard before reusing it.
|
|
||||||
|
|
||||||
Both writethrough and writeback caching are supported. Writeback defaults to
|
Both writethrough and writeback caching are supported. Writeback defaults to
|
||||||
off, but can be switched on and off arbitrarily at runtime. Bcache goes to
|
off, but can be switched on and off arbitrarily at runtime. Bcache goes to
|
||||||
|
|
@ -618,19 +617,11 @@ bucket_size
|
||||||
cache_replacement_policy
|
cache_replacement_policy
|
||||||
One of either lru, fifo or random.
|
One of either lru, fifo or random.
|
||||||
|
|
||||||
discard
|
|
||||||
Boolean; if on a discard/TRIM will be issued to each bucket before it is
|
|
||||||
reused. Defaults to off, since SATA TRIM is an unqueued command (and thus
|
|
||||||
slow).
|
|
||||||
|
|
||||||
freelist_percent
|
freelist_percent
|
||||||
Size of the freelist as a percentage of nbuckets. Can be written to to
|
Size of the freelist as a percentage of nbuckets. Can be written to to
|
||||||
increase the number of buckets kept on the freelist, which lets you
|
increase the number of buckets kept on the freelist, which lets you
|
||||||
artificially reduce the size of the cache at runtime. Mostly for testing
|
artificially reduce the size of the cache at runtime. Mostly for testing
|
||||||
purposes (i.e. testing how different size caches affect your hit rate), but
|
purposes (i.e. testing how different size caches affect your hit rate).
|
||||||
since buckets are discarded when they move on to the freelist will also make
|
|
||||||
the SSD's garbage collection easier by effectively giving it more reserved
|
|
||||||
space.
|
|
||||||
|
|
||||||
io_errors
|
io_errors
|
||||||
Number of errors that have occurred, decayed by io_error_halflife.
|
Number of errors that have occurred, decayed by io_error_halflife.
|
||||||
|
|
|
||||||
|
|
@ -68,30 +68,43 @@ The options available for the add command can be listed by reading the
|
||||||
In more details, the options that can be used with the "add" command are as
|
In more details, the options that can be used with the "add" command are as
|
||||||
follows.
|
follows.
|
||||||
|
|
||||||
================ ===========================================================
|
=================== =========================================================
|
||||||
id Device number (the X in /dev/zloopX).
|
id Device number (the X in /dev/zloopX).
|
||||||
Default: automatically assigned.
|
Default: automatically assigned.
|
||||||
capacity_mb Device total capacity in MiB. This is always rounded up to
|
capacity_mb Device total capacity in MiB. This is always rounded up
|
||||||
the nearest higher multiple of the zone size.
|
to the nearest higher multiple of the zone size.
|
||||||
Default: 16384 MiB (16 GiB).
|
Default: 16384 MiB (16 GiB).
|
||||||
zone_size_mb Device zone size in MiB. Default: 256 MiB.
|
zone_size_mb Device zone size in MiB. Default: 256 MiB.
|
||||||
zone_capacity_mb Device zone capacity (must always be equal to or lower than
|
zone_capacity_mb Device zone capacity (must always be equal to or lower
|
||||||
the zone size. Default: zone size.
|
than the zone size. Default: zone size.
|
||||||
conv_zones Total number of conventioanl zones starting from sector 0.
|
conv_zones Total number of conventioanl zones starting from
|
||||||
Default: 8.
|
sector 0
|
||||||
base_dir Path to the base directory where to create the directory
|
Default: 8
|
||||||
containing the zone files of the device.
|
base_dir Path to the base directory where to create the directory
|
||||||
Default=/var/local/zloop.
|
containing the zone files of the device.
|
||||||
The device directory containing the zone files is always
|
Default=/var/local/zloop.
|
||||||
named with the device ID. E.g. the default zone file
|
The device directory containing the zone files is always
|
||||||
directory for /dev/zloop0 is /var/local/zloop/0.
|
named with the device ID. E.g. the default zone file
|
||||||
nr_queues Number of I/O queues of the zoned block device. This value is
|
directory for /dev/zloop0 is /var/local/zloop/0.
|
||||||
always capped by the number of online CPUs
|
nr_queues Number of I/O queues of the zoned block device. This
|
||||||
Default: 1
|
value is always capped by the number of online CPUs
|
||||||
queue_depth Maximum I/O queue depth per I/O queue.
|
Default: 1
|
||||||
Default: 64
|
queue_depth Maximum I/O queue depth per I/O queue.
|
||||||
buffered_io Do buffered IOs instead of direct IOs (default: false)
|
Default: 64
|
||||||
================ ===========================================================
|
buffered_io Do buffered IOs instead of direct IOs (default: false)
|
||||||
|
zone_append Enable or disable a zloop device native zone append
|
||||||
|
support.
|
||||||
|
Default: 1 (enabled).
|
||||||
|
If native zone append support is disabled, the block layer
|
||||||
|
will emulate this operation using regular write
|
||||||
|
operations.
|
||||||
|
ordered_zone_append Enable zloop mitigation of zone append reordering.
|
||||||
|
Default: disabled.
|
||||||
|
This is useful for testing file systems file data mapping
|
||||||
|
(extents), as when enabled, this can significantly reduce
|
||||||
|
the number of data extents needed to for a file data
|
||||||
|
mapping.
|
||||||
|
=================== =========================================================
|
||||||
|
|
||||||
3) Deleting a Zoned Device
|
3) Deleting a Zoned Device
|
||||||
--------------------------
|
--------------------------
|
||||||
|
|
|
||||||
|
|
@ -53,7 +53,8 @@ v1 is available under :ref:`Documentation/admin-guide/cgroup-v1/index.rst <cgrou
|
||||||
5-2. Memory
|
5-2. Memory
|
||||||
5-2-1. Memory Interface Files
|
5-2-1. Memory Interface Files
|
||||||
5-2-2. Usage Guidelines
|
5-2-2. Usage Guidelines
|
||||||
5-2-3. Memory Ownership
|
5-2-3. Reclaim Protection
|
||||||
|
5-2-4. Memory Ownership
|
||||||
5-3. IO
|
5-3. IO
|
||||||
5-3-1. IO Interface Files
|
5-3-1. IO Interface Files
|
||||||
5-3-2. Writeback
|
5-3-2. Writeback
|
||||||
|
|
@ -1317,7 +1318,7 @@ PAGE_SIZE multiple when read back.
|
||||||
smaller overages.
|
smaller overages.
|
||||||
|
|
||||||
Effective min boundary is limited by memory.min values of
|
Effective min boundary is limited by memory.min values of
|
||||||
all ancestor cgroups. If there is memory.min overcommitment
|
ancestor cgroups. If there is memory.min overcommitment
|
||||||
(child cgroup or cgroups are requiring more protected memory
|
(child cgroup or cgroups are requiring more protected memory
|
||||||
than parent will allow), then each child cgroup will get
|
than parent will allow), then each child cgroup will get
|
||||||
the part of parent's protection proportional to its
|
the part of parent's protection proportional to its
|
||||||
|
|
@ -1326,9 +1327,6 @@ PAGE_SIZE multiple when read back.
|
||||||
Putting more memory than generally available under this
|
Putting more memory than generally available under this
|
||||||
protection is discouraged and may lead to constant OOMs.
|
protection is discouraged and may lead to constant OOMs.
|
||||||
|
|
||||||
If a memory cgroup is not populated with processes,
|
|
||||||
its memory.min is ignored.
|
|
||||||
|
|
||||||
memory.low
|
memory.low
|
||||||
A read-write single value file which exists on non-root
|
A read-write single value file which exists on non-root
|
||||||
cgroups. The default is "0".
|
cgroups. The default is "0".
|
||||||
|
|
@ -1343,7 +1341,7 @@ PAGE_SIZE multiple when read back.
|
||||||
smaller overages.
|
smaller overages.
|
||||||
|
|
||||||
Effective low boundary is limited by memory.low values of
|
Effective low boundary is limited by memory.low values of
|
||||||
all ancestor cgroups. If there is memory.low overcommitment
|
ancestor cgroups. If there is memory.low overcommitment
|
||||||
(child cgroup or cgroups are requiring more protected memory
|
(child cgroup or cgroups are requiring more protected memory
|
||||||
than parent will allow), then each child cgroup will get
|
than parent will allow), then each child cgroup will get
|
||||||
the part of parent's protection proportional to its
|
the part of parent's protection proportional to its
|
||||||
|
|
@ -1515,6 +1513,10 @@ The following nested keys are defined.
|
||||||
oom_group_kill
|
oom_group_kill
|
||||||
The number of times a group OOM has occurred.
|
The number of times a group OOM has occurred.
|
||||||
|
|
||||||
|
sock_throttled
|
||||||
|
The number of times network sockets associated with
|
||||||
|
this cgroup are throttled.
|
||||||
|
|
||||||
memory.events.local
|
memory.events.local
|
||||||
Similar to memory.events but the fields in the file are local
|
Similar to memory.events but the fields in the file are local
|
||||||
to the cgroup i.e. not hierarchical. The file modified event
|
to the cgroup i.e. not hierarchical. The file modified event
|
||||||
|
|
@ -1934,6 +1936,27 @@ memory - is necessary to determine whether a workload needs more
|
||||||
memory; unfortunately, memory pressure monitoring mechanism isn't
|
memory; unfortunately, memory pressure monitoring mechanism isn't
|
||||||
implemented yet.
|
implemented yet.
|
||||||
|
|
||||||
|
Reclaim Protection
|
||||||
|
~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
The protection configured with "memory.low" or "memory.min" applies relatively
|
||||||
|
to the target of the reclaim (i.e. any of memory cgroup limits, proactive
|
||||||
|
memory.reclaim or global reclaim apparently located in the root cgroup).
|
||||||
|
The protection value configured for B applies unchanged to the reclaim
|
||||||
|
targeting A (i.e. caused by competition with the sibling E)::
|
||||||
|
|
||||||
|
root - ... - A - B - C
|
||||||
|
\ ` D
|
||||||
|
` E
|
||||||
|
|
||||||
|
When the reclaim targets ancestors of A, the effective protection of B is
|
||||||
|
capped by the protection value configured for A (and any other intermediate
|
||||||
|
ancestors between A and the target).
|
||||||
|
|
||||||
|
To express indifference about relative sibling protection, it is suggested to
|
||||||
|
use memory_recursiveprot. Configuring all descendants of a parent with finite
|
||||||
|
protection to "max" works but it may unnecessarily skew memory.events:low
|
||||||
|
field.
|
||||||
|
|
||||||
Memory Ownership
|
Memory Ownership
|
||||||
~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~
|
||||||
|
|
|
||||||
|
|
@ -20,10 +20,10 @@ The target is named "raid" and it accepts the following parameters::
|
||||||
raid0 RAID0 striping (no resilience)
|
raid0 RAID0 striping (no resilience)
|
||||||
raid1 RAID1 mirroring
|
raid1 RAID1 mirroring
|
||||||
raid4 RAID4 with dedicated last parity disk
|
raid4 RAID4 with dedicated last parity disk
|
||||||
raid5_n RAID5 with dedicated last parity disk supporting takeover
|
raid5_n RAID5 with dedicated last parity disk supporting takeover from/to raid1
|
||||||
Same as raid4
|
Same as raid4
|
||||||
|
|
||||||
- Transitory layout
|
- Transitory layout for takeover from/to raid1
|
||||||
raid5_la RAID5 left asymmetric
|
raid5_la RAID5 left asymmetric
|
||||||
|
|
||||||
- rotating parity 0 with data continuation
|
- rotating parity 0 with data continuation
|
||||||
|
|
@ -48,8 +48,8 @@ The target is named "raid" and it accepts the following parameters::
|
||||||
raid6_n_6 RAID6 with dedicate parity disks
|
raid6_n_6 RAID6 with dedicate parity disks
|
||||||
|
|
||||||
- parity and Q-syndrome on the last 2 disks;
|
- parity and Q-syndrome on the last 2 disks;
|
||||||
layout for takeover from/to raid4/raid5_n
|
layout for takeover from/to raid0/raid4/raid5_n
|
||||||
raid6_la_6 Same as "raid_la" plus dedicated last Q-syndrome disk
|
raid6_la_6 Same as "raid_la" plus dedicated last Q-syndrome disk supporting takeover from/to raid5
|
||||||
|
|
||||||
- layout for takeover from raid5_la from/to raid6
|
- layout for takeover from raid5_la from/to raid6
|
||||||
raid6_ra_6 Same as "raid5_ra" dedicated last Q-syndrome disk
|
raid6_ra_6 Same as "raid5_ra" dedicated last Q-syndrome disk
|
||||||
|
|
@ -173,9 +173,9 @@ The target is named "raid" and it accepts the following parameters::
|
||||||
The delta_disks option value (-251 < N < +251) triggers
|
The delta_disks option value (-251 < N < +251) triggers
|
||||||
device removal (negative value) or device addition (positive
|
device removal (negative value) or device addition (positive
|
||||||
value) to any reshape supporting raid levels 4/5/6 and 10.
|
value) to any reshape supporting raid levels 4/5/6 and 10.
|
||||||
RAID levels 4/5/6 allow for addition of devices (metadata
|
RAID levels 4/5/6 allow for addition and removal of devices
|
||||||
and data device tuple), raid10_near and raid10_offset only
|
(metadata and data device tuple), raid10_near and raid10_offset
|
||||||
allow for device addition. raid10_far does not support any
|
only allow for device addition. raid10_far does not support any
|
||||||
reshaping at all.
|
reshaping at all.
|
||||||
A minimum of devices have to be kept to enforce resilience,
|
A minimum of devices have to be kept to enforce resilience,
|
||||||
which is 3 devices for raid4/5 and 4 devices for raid6.
|
which is 3 devices for raid4/5 and 4 devices for raid6.
|
||||||
|
|
@ -372,6 +372,72 @@ to safely enable discard support for RAID 4/5/6:
|
||||||
'devices_handle_discards_safely'
|
'devices_handle_discards_safely'
|
||||||
|
|
||||||
|
|
||||||
|
Takeover/Reshape Support
|
||||||
|
------------------------
|
||||||
|
The target natively supports these two types of MDRAID conversions:
|
||||||
|
|
||||||
|
o Takeover: Converts an array from one RAID level to another
|
||||||
|
|
||||||
|
o Reshape: Changes the internal layout while maintaining the current RAID level
|
||||||
|
|
||||||
|
Each operation is only valid under specific constraints imposed by the existing array's layout and configuration.
|
||||||
|
|
||||||
|
|
||||||
|
Takeover:
|
||||||
|
linear -> raid1 with N >= 2 mirrors
|
||||||
|
raid0 -> raid4 (add dedicated parity device)
|
||||||
|
raid0 -> raid5 (add dedicated parity device)
|
||||||
|
raid0 -> raid10 with near layout and N >= 2 mirror groups (raid0 stripes have to become first member within mirror groups)
|
||||||
|
raid1 -> linear
|
||||||
|
raid1 -> raid5 with 2 mirrors
|
||||||
|
raid4 -> raid5 w/ rotating parity
|
||||||
|
raid5 with dedicated parity device -> raid4
|
||||||
|
raid5 -> raid6 (with dedicated Q-syndrome)
|
||||||
|
raid6 (with dedicated Q-syndrome) -> raid5
|
||||||
|
raid10 with near layout and even number of disks -> raid0 (select any in-sync device from each mirror group)
|
||||||
|
|
||||||
|
Reshape:
|
||||||
|
linear: not possible
|
||||||
|
raid0: not possible
|
||||||
|
raid1: change number of mirrors
|
||||||
|
raid4: add and remove stripes (minimum 3), change stripesize
|
||||||
|
raid5: add and remove stripes (minimum 3, special case 2 for raid1 takeover), change rotating parity algorithms, change stripesize
|
||||||
|
raid6: add and remove stripes (minimum 4), change rotating syndrome algorithms, change stripesize
|
||||||
|
raid10 near: add stripes (minimum 4), change stripesize, no stripe removal possible, change to offset layout
|
||||||
|
raid10 offset: add stripes, change stripesize, no stripe removal possible, change to near layout
|
||||||
|
raid10 far: not possible
|
||||||
|
|
||||||
|
Table line examples:
|
||||||
|
|
||||||
|
### raid1 -> raid5
|
||||||
|
#
|
||||||
|
# 2 devices limitation in raid1.
|
||||||
|
# raid5 personality is able to just map 2 like raid1.
|
||||||
|
# Reshape after takeover to change to full raid5 layout
|
||||||
|
|
||||||
|
0 1960886272 raid raid1 3 0 region_size 2048 2 /dev/dm-0 /dev/dm-1 /dev/dm-2 /dev/dm-3
|
||||||
|
|
||||||
|
# dm-0 and dm-2 are e.g. 4MiB large metadata devices, dm-1 and dm-3 have to be at least 1960886272 big.
|
||||||
|
#
|
||||||
|
# Table line to takeover to raid5
|
||||||
|
|
||||||
|
0 1960886272 raid raid5 3 0 region_size 2048 2 /dev/dm-0 /dev/dm-1 /dev/dm-2 /dev/dm-3
|
||||||
|
|
||||||
|
# Add required out-of-place reshape space to the beginniong of the given 2 data devices,
|
||||||
|
# allocate another metadata/data device tuple with the same sizes for the parity space
|
||||||
|
# and zero the first 4K of the metadata device.
|
||||||
|
#
|
||||||
|
# Example table of the out-of-place reshape space addition for one data device, e.g. dm-1
|
||||||
|
|
||||||
|
0 8192 linear 8:0 0 1960903888 # <- must be free space segment
|
||||||
|
8192 1960886272 linear 8:0 0 2048 # previous data segment
|
||||||
|
|
||||||
|
# Mapping table for e.g. raid5_rs reshape causing the size of the raid device to double-fold once the reshape finishes.
|
||||||
|
# Check the status output (e.g. "dmsetup status $RaidDev") for progess.
|
||||||
|
|
||||||
|
0 $((2 * 1960886272)) raid raid5 7 0 region_size 2048 data_offset 8192 delta_disk 1 2 /dev/dm-0 /dev/dm-1 /dev/dm-2 /dev/dm-3
|
||||||
|
|
||||||
|
|
||||||
Version History
|
Version History
|
||||||
---------------
|
---------------
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -236,8 +236,10 @@ is available at the cryptsetup project's wiki page
|
||||||
|
|
||||||
Status
|
Status
|
||||||
======
|
======
|
||||||
V (for Valid) is returned if every check performed so far was valid.
|
1. V (for Valid) is returned if every check performed so far was valid.
|
||||||
If any check failed, C (for Corruption) is returned.
|
If any check failed, C (for Corruption) is returned.
|
||||||
|
2. Number of corrected blocks by Forward Error Correction.
|
||||||
|
'-' if Forward Error Correction is not enabled.
|
||||||
|
|
||||||
Example
|
Example
|
||||||
=======
|
=======
|
||||||
|
|
|
||||||
|
|
@ -223,12 +223,13 @@ The flags are::
|
||||||
f Include the function name
|
f Include the function name
|
||||||
s Include the source file name
|
s Include the source file name
|
||||||
l Include line number
|
l Include line number
|
||||||
|
d Include call trace
|
||||||
|
|
||||||
For ``print_hex_dump_debug()`` and ``print_hex_dump_bytes()``, only
|
For ``print_hex_dump_debug()`` and ``print_hex_dump_bytes()``, only
|
||||||
the ``p`` flag has meaning, other flags are ignored.
|
the ``p`` flag has meaning, other flags are ignored.
|
||||||
|
|
||||||
Note the regexp ``^[-+=][fslmpt_]+$`` matches a flags specification.
|
Note the regexp ``^[-+=][fslmptd_]+$`` matches a flags specification.
|
||||||
To clear all flags at once, use ``=_`` or ``-fslmpt``.
|
To clear all flags at once, use ``=_`` or ``-fslmptd``.
|
||||||
|
|
||||||
|
|
||||||
Debug messages during Boot Process
|
Debug messages during Boot Process
|
||||||
|
|
|
||||||
|
|
@ -79,6 +79,9 @@ because the image we're executing is interpreted by the EFI shell,
|
||||||
which understands relative paths, whereas the rest of the command line
|
which understands relative paths, whereas the rest of the command line
|
||||||
is passed to bzImage.efi.
|
is passed to bzImage.efi.
|
||||||
|
|
||||||
|
.. hint::
|
||||||
|
It is also possible to provide an initrd using a Linux-specific UEFI
|
||||||
|
protocol at boot time. See :ref:`pe-coff-entry-point` for details.
|
||||||
|
|
||||||
The "dtb=" option
|
The "dtb=" option
|
||||||
-----------------
|
-----------------
|
||||||
|
|
|
||||||
|
|
@ -31,7 +31,7 @@ specifically opt into the feature to enable it.
|
||||||
Mitigation
|
Mitigation
|
||||||
----------
|
----------
|
||||||
|
|
||||||
When PR_SET_L1D_FLUSH is enabled for a task a flush of the L1D cache is
|
When PR_SPEC_L1D_FLUSH is enabled for a task a flush of the L1D cache is
|
||||||
performed when the task is scheduled out and the incoming task belongs to a
|
performed when the task is scheduled out and the incoming task belongs to a
|
||||||
different process and therefore to a different address space.
|
different process and therefore to a different address space.
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -406,7 +406,7 @@ The possible values in this file are:
|
||||||
|
|
||||||
- Single threaded indirect branch prediction (STIBP) status for protection
|
- Single threaded indirect branch prediction (STIBP) status for protection
|
||||||
between different hyper threads. This feature can be controlled through
|
between different hyper threads. This feature can be controlled through
|
||||||
prctl per process, or through kernel command line options. This is x86
|
prctl per process, or through kernel command line options. This is an x86
|
||||||
only feature. For more details see below.
|
only feature. For more details see below.
|
||||||
|
|
||||||
==================== ========================================================
|
==================== ========================================================
|
||||||
|
|
|
||||||
|
|
@ -110,102 +110,7 @@ The parameters listed below are only valid if certain kernel build options
|
||||||
were enabled and if respective hardware is present. This list should be kept
|
were enabled and if respective hardware is present. This list should be kept
|
||||||
in alphabetical order. The text in square brackets at the beginning
|
in alphabetical order. The text in square brackets at the beginning
|
||||||
of each description states the restrictions within which a parameter
|
of each description states the restrictions within which a parameter
|
||||||
is applicable::
|
is applicable.
|
||||||
|
|
||||||
ACPI ACPI support is enabled.
|
|
||||||
AGP AGP (Accelerated Graphics Port) is enabled.
|
|
||||||
ALSA ALSA sound support is enabled.
|
|
||||||
APIC APIC support is enabled.
|
|
||||||
APM Advanced Power Management support is enabled.
|
|
||||||
APPARMOR AppArmor support is enabled.
|
|
||||||
ARM ARM architecture is enabled.
|
|
||||||
ARM64 ARM64 architecture is enabled.
|
|
||||||
AX25 Appropriate AX.25 support is enabled.
|
|
||||||
CLK Common clock infrastructure is enabled.
|
|
||||||
CMA Contiguous Memory Area support is enabled.
|
|
||||||
DRM Direct Rendering Management support is enabled.
|
|
||||||
DYNAMIC_DEBUG Build in debug messages and enable them at runtime
|
|
||||||
EARLY Parameter processed too early to be embedded in initrd.
|
|
||||||
EDD BIOS Enhanced Disk Drive Services (EDD) is enabled
|
|
||||||
EFI EFI Partitioning (GPT) is enabled
|
|
||||||
EVM Extended Verification Module
|
|
||||||
FB The frame buffer device is enabled.
|
|
||||||
FTRACE Function tracing enabled.
|
|
||||||
GCOV GCOV profiling is enabled.
|
|
||||||
HIBERNATION HIBERNATION is enabled.
|
|
||||||
HW Appropriate hardware is enabled.
|
|
||||||
HYPER_V HYPERV support is enabled.
|
|
||||||
IMA Integrity measurement architecture is enabled.
|
|
||||||
IP_PNP IP DHCP, BOOTP, or RARP is enabled.
|
|
||||||
IPV6 IPv6 support is enabled.
|
|
||||||
ISAPNP ISA PnP code is enabled.
|
|
||||||
ISDN Appropriate ISDN support is enabled.
|
|
||||||
ISOL CPU Isolation is enabled.
|
|
||||||
JOY Appropriate joystick support is enabled.
|
|
||||||
KGDB Kernel debugger support is enabled.
|
|
||||||
KVM Kernel Virtual Machine support is enabled.
|
|
||||||
LIBATA Libata driver is enabled
|
|
||||||
LOONGARCH LoongArch architecture is enabled.
|
|
||||||
LOOP Loopback device support is enabled.
|
|
||||||
LP Printer support is enabled.
|
|
||||||
M68k M68k architecture is enabled.
|
|
||||||
These options have more detailed description inside of
|
|
||||||
Documentation/arch/m68k/kernel-options.rst.
|
|
||||||
MDA MDA console support is enabled.
|
|
||||||
MIPS MIPS architecture is enabled.
|
|
||||||
MOUSE Appropriate mouse support is enabled.
|
|
||||||
MSI Message Signaled Interrupts (PCI).
|
|
||||||
MTD MTD (Memory Technology Device) support is enabled.
|
|
||||||
NET Appropriate network support is enabled.
|
|
||||||
NFS Appropriate NFS support is enabled.
|
|
||||||
NUMA NUMA support is enabled.
|
|
||||||
OF Devicetree is enabled.
|
|
||||||
PARISC The PA-RISC architecture is enabled.
|
|
||||||
PCI PCI bus support is enabled.
|
|
||||||
PCIE PCI Express support is enabled.
|
|
||||||
PCMCIA The PCMCIA subsystem is enabled.
|
|
||||||
PNP Plug & Play support is enabled.
|
|
||||||
PPC PowerPC architecture is enabled.
|
|
||||||
PPT Parallel port support is enabled.
|
|
||||||
PS2 Appropriate PS/2 support is enabled.
|
|
||||||
PV_OPS A paravirtualized kernel is enabled.
|
|
||||||
RAM RAM disk support is enabled.
|
|
||||||
RDT Intel Resource Director Technology.
|
|
||||||
RISCV RISCV architecture is enabled.
|
|
||||||
S390 S390 architecture is enabled.
|
|
||||||
SCSI Appropriate SCSI support is enabled.
|
|
||||||
A lot of drivers have their options described inside
|
|
||||||
the Documentation/scsi/ sub-directory.
|
|
||||||
SDW SoundWire support is enabled.
|
|
||||||
SECURITY Different security models are enabled.
|
|
||||||
SELINUX SELinux support is enabled.
|
|
||||||
SERIAL Serial support is enabled.
|
|
||||||
SH SuperH architecture is enabled.
|
|
||||||
SMP The kernel is an SMP kernel.
|
|
||||||
SPARC Sparc architecture is enabled.
|
|
||||||
SUSPEND System suspend states are enabled.
|
|
||||||
SWSUSP Software suspend (hibernation) is enabled.
|
|
||||||
TPM TPM drivers are enabled.
|
|
||||||
UMS USB Mass Storage support is enabled.
|
|
||||||
USB USB support is enabled.
|
|
||||||
USBHID USB Human Interface Device support is enabled.
|
|
||||||
V4L Video For Linux support is enabled.
|
|
||||||
VGA The VGA console has been enabled.
|
|
||||||
VMMIO Driver for memory mapped virtio devices is enabled.
|
|
||||||
VT Virtual terminal support is enabled.
|
|
||||||
WDT Watchdog support is enabled.
|
|
||||||
X86-32 X86-32, aka i386 architecture is enabled.
|
|
||||||
X86-64 X86-64 architecture is enabled.
|
|
||||||
X86 Either 32-bit or 64-bit x86 (same as X86-32+X86-64)
|
|
||||||
X86_UV SGI UV support is enabled.
|
|
||||||
XEN Xen support is enabled
|
|
||||||
XTENSA xtensa architecture is enabled.
|
|
||||||
|
|
||||||
In addition, the following text indicates that the option::
|
|
||||||
|
|
||||||
BOOT Is a boot loader parameter.
|
|
||||||
BUGS= Relates to possible processor bugs on the said processor.
|
|
||||||
KNL Is a kernel start-up parameter.
|
|
||||||
|
|
||||||
Parameters denoted with BOOT are actually interpreted by the boot
|
Parameters denoted with BOOT are actually interpreted by the boot
|
||||||
loader, and have no meaning to the kernel directly.
|
loader, and have no meaning to the kernel directly.
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,101 @@
|
||||||
|
ACPI ACPI support is enabled.
|
||||||
|
AGP AGP (Accelerated Graphics Port) is enabled.
|
||||||
|
ALSA ALSA sound support is enabled.
|
||||||
|
APIC APIC support is enabled.
|
||||||
|
APM Advanced Power Management support is enabled.
|
||||||
|
APPARMOR AppArmor support is enabled.
|
||||||
|
ARM ARM architecture is enabled.
|
||||||
|
ARM64 ARM64 architecture is enabled.
|
||||||
|
AX25 Appropriate AX.25 support is enabled.
|
||||||
|
CLK Common clock infrastructure is enabled.
|
||||||
|
CMA Contiguous Memory Area support is enabled.
|
||||||
|
DRM Direct Rendering Management support is enabled.
|
||||||
|
DYNAMIC_DEBUG Build in debug messages and enable them at runtime
|
||||||
|
EARLY Parameter processed too early to be embedded in initrd.
|
||||||
|
EDD BIOS Enhanced Disk Drive Services (EDD) is enabled
|
||||||
|
EFI EFI Partitioning (GPT) is enabled
|
||||||
|
EVM Extended Verification Module
|
||||||
|
FB The frame buffer device is enabled.
|
||||||
|
FTRACE Function tracing enabled.
|
||||||
|
GCOV GCOV profiling is enabled.
|
||||||
|
HIBERNATION HIBERNATION is enabled.
|
||||||
|
HW Appropriate hardware is enabled.
|
||||||
|
HYPER_V HYPERV support is enabled.
|
||||||
|
IMA Integrity measurement architecture is enabled.
|
||||||
|
IP_PNP IP DHCP, BOOTP, or RARP is enabled.
|
||||||
|
IPV6 IPv6 support is enabled.
|
||||||
|
ISAPNP ISA PnP code is enabled.
|
||||||
|
ISDN Appropriate ISDN support is enabled.
|
||||||
|
ISOL CPU Isolation is enabled.
|
||||||
|
JOY Appropriate joystick support is enabled.
|
||||||
|
KGDB Kernel debugger support is enabled.
|
||||||
|
KVM Kernel Virtual Machine support is enabled.
|
||||||
|
LIBATA Libata driver is enabled
|
||||||
|
LOONGARCH LoongArch architecture is enabled.
|
||||||
|
LOOP Loopback device support is enabled.
|
||||||
|
LP Printer support is enabled.
|
||||||
|
M68k M68k architecture is enabled.
|
||||||
|
These options have more detailed description inside of
|
||||||
|
Documentation/arch/m68k/kernel-options.rst.
|
||||||
|
MDA MDA console support is enabled.
|
||||||
|
MIPS MIPS architecture is enabled.
|
||||||
|
MOUSE Appropriate mouse support is enabled.
|
||||||
|
MSI Message Signaled Interrupts (PCI).
|
||||||
|
MTD MTD (Memory Technology Device) support is enabled.
|
||||||
|
NET Appropriate network support is enabled.
|
||||||
|
NFS Appropriate NFS support is enabled.
|
||||||
|
NUMA NUMA support is enabled.
|
||||||
|
OF Devicetree is enabled.
|
||||||
|
PARISC The PA-RISC architecture is enabled.
|
||||||
|
PCI PCI bus support is enabled.
|
||||||
|
PCIE PCI Express support is enabled.
|
||||||
|
PCMCIA The PCMCIA subsystem is enabled.
|
||||||
|
PNP Plug & Play support is enabled.
|
||||||
|
PPC PowerPC architecture is enabled.
|
||||||
|
PPT Parallel port support is enabled.
|
||||||
|
PS2 Appropriate PS/2 support is enabled.
|
||||||
|
PV_OPS A paravirtualized kernel is enabled.
|
||||||
|
RAM RAM disk support is enabled.
|
||||||
|
RDT Intel Resource Director Technology.
|
||||||
|
RISCV RISCV architecture is enabled.
|
||||||
|
S390 S390 architecture is enabled.
|
||||||
|
SCSI Appropriate SCSI support is enabled.
|
||||||
|
A lot of drivers have their options described inside
|
||||||
|
the Documentation/scsi/ sub-directory.
|
||||||
|
SDW SoundWire support is enabled.
|
||||||
|
SECURITY Different security models are enabled.
|
||||||
|
SELINUX SELinux support is enabled.
|
||||||
|
SERIAL Serial support is enabled.
|
||||||
|
SH SuperH architecture is enabled.
|
||||||
|
SMP The kernel is an SMP kernel.
|
||||||
|
SPARC Sparc architecture is enabled.
|
||||||
|
SUSPEND System suspend states are enabled.
|
||||||
|
SWSUSP Software suspend (hibernation) is enabled.
|
||||||
|
TPM TPM drivers are enabled.
|
||||||
|
UMS USB Mass Storage support is enabled.
|
||||||
|
USB USB support is enabled.
|
||||||
|
USBHID USB Human Interface Device support is enabled.
|
||||||
|
V4L Video For Linux support is enabled.
|
||||||
|
VGA The VGA console has been enabled.
|
||||||
|
VMMIO Driver for memory mapped virtio devices is enabled.
|
||||||
|
VT Virtual terminal support is enabled.
|
||||||
|
WDT Watchdog support is enabled.
|
||||||
|
X86-32 X86-32, aka i386 architecture is enabled.
|
||||||
|
X86-64 X86-64 architecture is enabled.
|
||||||
|
X86 Either 32-bit or 64-bit x86 (same as X86-32+X86-64)
|
||||||
|
X86_UV SGI UV support is enabled.
|
||||||
|
XEN Xen support is enabled
|
||||||
|
XTENSA xtensa architecture is enabled.
|
||||||
|
|
||||||
|
In addition, the following text indicates that the option
|
||||||
|
|
||||||
|
BOOT Is a boot loader parameter.
|
||||||
|
BUGS= Relates to possible processor bugs on the said processor.
|
||||||
|
KNL Is a kernel start-up parameter.
|
||||||
|
|
||||||
|
|
||||||
|
Kernel parameters
|
||||||
|
|
||||||
accept_memory= [MM]
|
accept_memory= [MM]
|
||||||
Format: { eager | lazy }
|
Format: { eager | lazy }
|
||||||
default: lazy
|
default: lazy
|
||||||
|
|
@ -669,6 +767,14 @@
|
||||||
nokmem -- Disable kernel memory accounting.
|
nokmem -- Disable kernel memory accounting.
|
||||||
nobpf -- Disable BPF memory accounting.
|
nobpf -- Disable BPF memory accounting.
|
||||||
|
|
||||||
|
check_pages= [MM,EARLY] Enable sanity checking of pages after
|
||||||
|
allocations / before freeing. This adds checks to catch
|
||||||
|
double-frees, use-after-frees, and other sources of
|
||||||
|
page corruption by inspecting page internals (flags,
|
||||||
|
mapcount/refcount, memcg_data, etc.).
|
||||||
|
Format: { "0" | "1" }
|
||||||
|
Default: 0 (1 if CONFIG_DEBUG_VM is set)
|
||||||
|
|
||||||
checkreqprot= [SELINUX] Set initial checkreqprot flag value.
|
checkreqprot= [SELINUX] Set initial checkreqprot flag value.
|
||||||
Format: { "0" | "1" }
|
Format: { "0" | "1" }
|
||||||
See security/selinux/Kconfig help text.
|
See security/selinux/Kconfig help text.
|
||||||
|
|
@ -1013,7 +1119,7 @@
|
||||||
It will be ignored when crashkernel=X,high is not used
|
It will be ignored when crashkernel=X,high is not used
|
||||||
or memory reserved is below 4G.
|
or memory reserved is below 4G.
|
||||||
crashkernel=size[KMG],cma
|
crashkernel=size[KMG],cma
|
||||||
[KNL, X86] Reserve additional crash kernel memory from
|
[KNL, X86, ppc] Reserve additional crash kernel memory from
|
||||||
CMA. This reservation is usable by the first system's
|
CMA. This reservation is usable by the first system's
|
||||||
userspace memory and kernel movable allocations (memory
|
userspace memory and kernel movable allocations (memory
|
||||||
balloon, zswap). Pages allocated from this memory range
|
balloon, zswap). Pages allocated from this memory range
|
||||||
|
|
@ -1113,12 +1219,8 @@
|
||||||
|
|
||||||
debugfs= [KNL,EARLY] This parameter enables what is exposed to
|
debugfs= [KNL,EARLY] This parameter enables what is exposed to
|
||||||
userspace and debugfs internal clients.
|
userspace and debugfs internal clients.
|
||||||
Format: { on, no-mount, off }
|
Format: { on, off }
|
||||||
on: All functions are enabled.
|
on: All functions are enabled.
|
||||||
no-mount:
|
|
||||||
Filesystem is not registered but kernel clients can
|
|
||||||
access APIs and a crashkernel can be used to read
|
|
||||||
its content. There is nothing to mount.
|
|
||||||
off: Filesystem is not registered and clients
|
off: Filesystem is not registered and clients
|
||||||
get a -EPERM as result when trying to register files
|
get a -EPERM as result when trying to register files
|
||||||
or directories within debugfs.
|
or directories within debugfs.
|
||||||
|
|
@ -1907,6 +2009,16 @@
|
||||||
/sys/power/pm_test). Only available when CONFIG_PM_DEBUG
|
/sys/power/pm_test). Only available when CONFIG_PM_DEBUG
|
||||||
is set. Default value is 5.
|
is set. Default value is 5.
|
||||||
|
|
||||||
|
hibernate_compression_threads=
|
||||||
|
[HIBERNATION]
|
||||||
|
Set the number of threads used for compressing or decompressing
|
||||||
|
hibernation images.
|
||||||
|
|
||||||
|
Format: <integer>
|
||||||
|
Default: 3
|
||||||
|
Minimum: 1
|
||||||
|
Example: hibernate_compression_threads=4
|
||||||
|
|
||||||
highmem=nn[KMG] [KNL,BOOT,EARLY] forces the highmem zone to have an exact
|
highmem=nn[KMG] [KNL,BOOT,EARLY] forces the highmem zone to have an exact
|
||||||
size of <nn>. This works even on boxes that have no
|
size of <nn>. This works even on boxes that have no
|
||||||
highmem otherwise. This also works to reduce highmem
|
highmem otherwise. This also works to reduce highmem
|
||||||
|
|
@ -2010,14 +2122,20 @@
|
||||||
the added memory block itself do not be affected.
|
the added memory block itself do not be affected.
|
||||||
|
|
||||||
hung_task_panic=
|
hung_task_panic=
|
||||||
[KNL] Should the hung task detector generate panics.
|
[KNL] Number of hung tasks to trigger kernel panic.
|
||||||
Format: 0 | 1
|
Format: <int>
|
||||||
|
|
||||||
A value of 1 instructs the kernel to panic when a
|
When set to a non-zero value, a kernel panic will be triggered if
|
||||||
hung task is detected. The default value is controlled
|
the number of detected hung tasks reaches this value.
|
||||||
by the CONFIG_BOOTPARAM_HUNG_TASK_PANIC build-time
|
|
||||||
option. The value selected by this boot parameter can
|
0: don't panic
|
||||||
be changed later by the kernel.hung_task_panic sysctl.
|
1: panic immediately on first hung task
|
||||||
|
N: panic after N hung tasks are detected in a single scan
|
||||||
|
|
||||||
|
The default value is controlled by the
|
||||||
|
CONFIG_BOOTPARAM_HUNG_TASK_PANIC build-time option. The value
|
||||||
|
selected by this boot parameter can be changed later by the
|
||||||
|
kernel.hung_task_panic sysctl.
|
||||||
|
|
||||||
hvc_iucv= [S390] Number of z/VM IUCV hypervisor console (HVC)
|
hvc_iucv= [S390] Number of z/VM IUCV hypervisor console (HVC)
|
||||||
terminal devices. Valid values: 0..8
|
terminal devices. Valid values: 0..8
|
||||||
|
|
@ -6207,7 +6325,7 @@
|
||||||
rdt= [HW,X86,RDT]
|
rdt= [HW,X86,RDT]
|
||||||
Turn on/off individual RDT features. List is:
|
Turn on/off individual RDT features. List is:
|
||||||
cmt, mbmtotal, mbmlocal, l3cat, l3cdp, l2cat, l2cdp,
|
cmt, mbmtotal, mbmlocal, l3cat, l3cdp, l2cat, l2cdp,
|
||||||
mba, smba, bmec, abmc.
|
mba, smba, bmec, abmc, sdciae.
|
||||||
E.g. to turn on cmt and turn off mba use:
|
E.g. to turn on cmt and turn off mba use:
|
||||||
rdt=cmt,!mba
|
rdt=cmt,!mba
|
||||||
|
|
||||||
|
|
@ -6404,7 +6522,7 @@
|
||||||
that don't.
|
that don't.
|
||||||
|
|
||||||
off - no mitigation
|
off - no mitigation
|
||||||
auto - automatically select a migitation
|
auto - automatically select a mitigation
|
||||||
auto,nosmt - automatically select a mitigation,
|
auto,nosmt - automatically select a mitigation,
|
||||||
disabling SMT if necessary for
|
disabling SMT if necessary for
|
||||||
the full mitigation (only on Zen1
|
the full mitigation (only on Zen1
|
||||||
|
|
@ -6500,6 +6618,10 @@
|
||||||
Memory area to be used by remote processor image,
|
Memory area to be used by remote processor image,
|
||||||
managed by CMA.
|
managed by CMA.
|
||||||
|
|
||||||
|
rseq_debug= [KNL] Enable or disable restartable sequence
|
||||||
|
debug mode. Defaults to CONFIG_RSEQ_DEBUG_DEFAULT_ENABLE.
|
||||||
|
Format: <bool>
|
||||||
|
|
||||||
rt_group_sched= [KNL] Enable or disable SCHED_RR/FIFO group scheduling
|
rt_group_sched= [KNL] Enable or disable SCHED_RR/FIFO group scheduling
|
||||||
when CONFIG_RT_GROUP_SCHED=y. Defaults to
|
when CONFIG_RT_GROUP_SCHED=y. Defaults to
|
||||||
!CONFIG_RT_GROUP_SCHED_DEFAULT_DISABLED.
|
!CONFIG_RT_GROUP_SCHED_DEFAULT_DISABLED.
|
||||||
|
|
@ -7150,7 +7272,7 @@
|
||||||
limit. Default value is 8191 pools.
|
limit. Default value is 8191 pools.
|
||||||
|
|
||||||
stacktrace [FTRACE]
|
stacktrace [FTRACE]
|
||||||
Enabled the stack tracer on boot up.
|
Enable the stack tracer on boot up.
|
||||||
|
|
||||||
stacktrace_filter=[function-list]
|
stacktrace_filter=[function-list]
|
||||||
[FTRACE] Limit the functions that the stack tracer
|
[FTRACE] Limit the functions that the stack tracer
|
||||||
|
|
@ -7192,6 +7314,9 @@
|
||||||
them frequently to increase the rate of SLB faults
|
them frequently to increase the rate of SLB faults
|
||||||
on kernel addresses.
|
on kernel addresses.
|
||||||
|
|
||||||
|
no_slb_preload [PPC,EARLY]
|
||||||
|
Disables slb preloading for userspace.
|
||||||
|
|
||||||
sunrpc.min_resvport=
|
sunrpc.min_resvport=
|
||||||
sunrpc.max_resvport=
|
sunrpc.max_resvport=
|
||||||
[NFS,SUNRPC]
|
[NFS,SUNRPC]
|
||||||
|
|
|
||||||
|
|
@ -17,3 +17,4 @@ Laptop Drivers
|
||||||
sonypi
|
sonypi
|
||||||
thinkpad-acpi
|
thinkpad-acpi
|
||||||
toshiba_haps
|
toshiba_haps
|
||||||
|
uniwill-laptop
|
||||||
|
|
|
||||||
60
Documentation/admin-guide/laptops/uniwill-laptop.rst
Normal file
60
Documentation/admin-guide/laptops/uniwill-laptop.rst
Normal file
|
|
@ -0,0 +1,60 @@
|
||||||
|
.. SPDX-License-Identifier: GPL-2.0+
|
||||||
|
|
||||||
|
Uniwill laptop extra features
|
||||||
|
=============================
|
||||||
|
|
||||||
|
On laptops manufactured by Uniwill (either directly or as ODM), the ``uniwill-laptop`` driver
|
||||||
|
handles various platform-specific features.
|
||||||
|
|
||||||
|
Module Loading
|
||||||
|
--------------
|
||||||
|
|
||||||
|
The ``uniwill-laptop`` driver relies on a DMI table to automatically load on supported devices.
|
||||||
|
When using the ``force`` module parameter, this DMI check will be omitted, allowing the driver
|
||||||
|
to be loaded on unsupported devices for testing purposes.
|
||||||
|
|
||||||
|
Hotkeys
|
||||||
|
-------
|
||||||
|
|
||||||
|
Usually the FN keys work without a special driver. However as soon as the ``uniwill-laptop`` driver
|
||||||
|
is loaded, the FN keys need to be handled manually. This is done automatically by the driver itself.
|
||||||
|
|
||||||
|
Keyboard settings
|
||||||
|
-----------------
|
||||||
|
|
||||||
|
The ``uniwill-laptop`` driver allows the user to enable/disable:
|
||||||
|
|
||||||
|
- the FN and super key lock functionality of the integrated keyboard
|
||||||
|
- the touchpad toggle functionality of the integrated touchpad
|
||||||
|
|
||||||
|
See Documentation/ABI/testing/sysfs-driver-uniwill-laptop for details.
|
||||||
|
|
||||||
|
Hwmon interface
|
||||||
|
---------------
|
||||||
|
|
||||||
|
The ``uniwill-laptop`` driver supports reading of the CPU and GPU temperature and supports up to
|
||||||
|
two fans. Userspace applications can access sensor readings over the hwmon sysfs interface.
|
||||||
|
|
||||||
|
Platform profile
|
||||||
|
----------------
|
||||||
|
|
||||||
|
Support for changing the platform performance mode is currently not implemented.
|
||||||
|
|
||||||
|
Battery Charging Control
|
||||||
|
------------------------
|
||||||
|
|
||||||
|
The ``uniwill-laptop`` driver supports controlling the battery charge limit. This happens over
|
||||||
|
the standard ``charge_control_end_threshold`` power supply sysfs attribute. All values
|
||||||
|
between 1 and 100 percent are supported.
|
||||||
|
|
||||||
|
Additionally the driver signals the presence of battery charging issues through the standard
|
||||||
|
``health`` power supply sysfs attribute.
|
||||||
|
|
||||||
|
Lightbar
|
||||||
|
--------
|
||||||
|
|
||||||
|
The ``uniwill-laptop`` driver exposes the lightbar found on some models as a standard multicolor
|
||||||
|
LED class device. The default name of this LED class device is ``uniwill:multicolor:status``.
|
||||||
|
|
||||||
|
See Documentation/ABI/testing/sysfs-driver-uniwill-laptop for details on how to control the various
|
||||||
|
animation modes of the lightbar.
|
||||||
|
|
@ -238,6 +238,16 @@ All md devices contain:
|
||||||
the number of devices in a raid4/5/6, or to support external
|
the number of devices in a raid4/5/6, or to support external
|
||||||
metadata formats which mandate such clipping.
|
metadata formats which mandate such clipping.
|
||||||
|
|
||||||
|
logical_block_size
|
||||||
|
Configure the array's logical block size in bytes. This attribute
|
||||||
|
is only supported for 1.x meta. Write the value before starting
|
||||||
|
array. The final array LBS uses the maximum between this
|
||||||
|
configuration and LBS of all combined devices. Note that
|
||||||
|
LBS cannot exceed PAGE_SIZE before RAID supports folio.
|
||||||
|
WARNING: Arrays created on new kernel cannot be assembled at old
|
||||||
|
kernel due to padding check, Set module parameter 'check_new_feature'
|
||||||
|
to false to bypass, but data loss may occur.
|
||||||
|
|
||||||
reshape_position
|
reshape_position
|
||||||
This is either ``none`` or a sector number within the devices of
|
This is either ``none`` or a sector number within the devices of
|
||||||
the array where ``reshape`` is up to. If this is set, the three
|
the array where ``reshape`` is up to. If this is set, the three
|
||||||
|
|
|
||||||
19
Documentation/admin-guide/media/mali-c55-graph.dot
Normal file
19
Documentation/admin-guide/media/mali-c55-graph.dot
Normal file
|
|
@ -0,0 +1,19 @@
|
||||||
|
digraph board {
|
||||||
|
rankdir=TB
|
||||||
|
n00000001 [label="{{} | mali-c55 tpg\n/dev/v4l-subdev0 | {<port0> 0}}", shape=Mrecord, style=filled, fillcolor=green]
|
||||||
|
n00000001:port0 -> n00000003:port0 [style=dashed]
|
||||||
|
n00000003 [label="{{<port0> 0} | mali-c55 isp\n/dev/v4l-subdev1 | {<port1> 1 | <port2> 2}}", shape=Mrecord, style=filled, fillcolor=green]
|
||||||
|
n00000003:port1 -> n00000007:port0 [style=bold]
|
||||||
|
n00000003:port2 -> n00000007:port2 [style=bold]
|
||||||
|
n00000003:port1 -> n0000000b:port0 [style=bold]
|
||||||
|
n00000007 [label="{{<port0> 0 | <port2> 2} | mali-c55 resizer fr\n/dev/v4l-subdev2 | {<port1> 1}}", shape=Mrecord, style=filled, fillcolor=green]
|
||||||
|
n00000007:port1 -> n0000000e [style=bold]
|
||||||
|
n0000000b [label="{{<port0> 0} | mali-c55 resizer ds\n/dev/v4l-subdev3 | {<port1> 1}}", shape=Mrecord, style=filled, fillcolor=green]
|
||||||
|
n0000000b:port1 -> n00000012 [style=bold]
|
||||||
|
n0000000e [label="mali-c55 fr\n/dev/video0", shape=box, style=filled, fillcolor=yellow]
|
||||||
|
n00000012 [label="mali-c55 ds\n/dev/video1", shape=box, style=filled, fillcolor=yellow]
|
||||||
|
n00000022 [label="{{<port0> 0} | csi2-rx\n/dev/v4l-subdev4 | {<port1> 1}}", shape=Mrecord, style=filled, fillcolor=green]
|
||||||
|
n00000022:port1 -> n00000003:port0
|
||||||
|
n00000027 [label="{{} | imx415 1-001a\n/dev/v4l-subdev5 | {<port0> 0}}", shape=Mrecord, style=filled, fillcolor=green]
|
||||||
|
n00000027:port0 -> n00000022:port0 [style=bold]
|
||||||
|
}
|
||||||
413
Documentation/admin-guide/media/mali-c55.rst
Normal file
413
Documentation/admin-guide/media/mali-c55.rst
Normal file
|
|
@ -0,0 +1,413 @@
|
||||||
|
.. SPDX-License-Identifier: GPL-2.0
|
||||||
|
|
||||||
|
==========================================
|
||||||
|
ARM Mali-C55 Image Signal Processor driver
|
||||||
|
==========================================
|
||||||
|
|
||||||
|
Introduction
|
||||||
|
============
|
||||||
|
|
||||||
|
This file documents the driver for ARM's Mali-C55 Image Signal Processor. The
|
||||||
|
driver is located under drivers/media/platform/arm/mali-c55.
|
||||||
|
|
||||||
|
The Mali-C55 ISP receives data in either raw Bayer format or RGB/YUV format from
|
||||||
|
sensors through either a parallel interface or a memory bus before processing it
|
||||||
|
and outputting it through an internal DMA engine. Two output pipelines are
|
||||||
|
possible (though one may not be fitted, depending on the implementation). These
|
||||||
|
are referred to as "Full resolution" and "Downscale", but the naming is historic
|
||||||
|
and both pipes are capable of cropping/scaling operations. The full resolution
|
||||||
|
pipe is also capable of outputting RAW data, bypassing much of the ISP's
|
||||||
|
processing. The downscale pipe cannot output RAW data. An integrated test
|
||||||
|
pattern generator can be used to drive the ISP and produce image data in the
|
||||||
|
absence of a connected camera sensor. The driver module is named mali_c55, and
|
||||||
|
is enabled through the CONFIG_VIDEO_MALI_C55 config option.
|
||||||
|
|
||||||
|
The driver implements V4L2, Media Controller and V4L2 Subdevice interfaces and
|
||||||
|
expects camera sensors connected to the ISP to have V4L2 subdevice interfaces.
|
||||||
|
|
||||||
|
Mali-C55 ISP hardware
|
||||||
|
=====================
|
||||||
|
|
||||||
|
A high level functional view of the Mali-C55 ISP is presented below. The ISP
|
||||||
|
takes input from either a live source or through a DMA engine for memory input,
|
||||||
|
depending on the SoC integration.::
|
||||||
|
|
||||||
|
+---------+ +----------+ +--------+
|
||||||
|
| Sensor |--->| CSI-2 Rx | "Full Resolution" | DMA |
|
||||||
|
+---------+ +----------+ |\ Output +--->| Writer |
|
||||||
|
| | \ | +--------+
|
||||||
|
| | \ +----------+ +------+---> Streaming I/O
|
||||||
|
+------------+ +------->| | | | |
|
||||||
|
| | | |-->| Mali-C55 |--+
|
||||||
|
| DMA Reader |--------------->| | | ISP | |
|
||||||
|
| | | / | | | +---> Streaming I/O
|
||||||
|
+------------+ | / +----------+ | |
|
||||||
|
|/ +------+
|
||||||
|
| +--------+
|
||||||
|
+--->| DMA |
|
||||||
|
"Downscaled" | Writer |
|
||||||
|
Output +--------+
|
||||||
|
|
||||||
|
Media Controller Topology
|
||||||
|
=========================
|
||||||
|
|
||||||
|
An example of the ISP's topology (as implemented in a system with an IMX415
|
||||||
|
camera sensor and generic CSI-2 receiver) is below:
|
||||||
|
|
||||||
|
|
||||||
|
.. kernel-figure:: mali-c55-graph.dot
|
||||||
|
:alt: mali-c55-graph.dot
|
||||||
|
:align: center
|
||||||
|
|
||||||
|
The driver has 4 V4L2 subdevices:
|
||||||
|
|
||||||
|
- `mali_c55 isp`: Responsible for configuring input crop and color space
|
||||||
|
conversion
|
||||||
|
- `mali_c55 tpg`: The test pattern generator, emulating a camera sensor.
|
||||||
|
- `mali_c55 resizer fr`: The Full-Resolution pipe resizer
|
||||||
|
- `mali_c55 resizer ds`: The Downscale pipe resizer
|
||||||
|
|
||||||
|
The driver has 3 V4L2 video devices:
|
||||||
|
|
||||||
|
- `mali-c55 fr`: The full-resolution pipe's capture device
|
||||||
|
- `mali-c55 ds`: The downscale pipe's capture device
|
||||||
|
- `mali-c55 3a stats`: The 3A statistics capture device
|
||||||
|
|
||||||
|
Frame sequences are synchronised across to two capture devices, meaning if one
|
||||||
|
pipe is started later than the other the sequence numbers returned in its
|
||||||
|
buffers will match those of the other pipe rather than starting from zero.
|
||||||
|
|
||||||
|
Idiosyncrasies
|
||||||
|
--------------
|
||||||
|
|
||||||
|
**mali-c55 isp**
|
||||||
|
The `mali-c55 isp` subdevice has a single sink pad to which all sources of data
|
||||||
|
should be connected. The active source is selected by enabling the appropriate
|
||||||
|
media link and disabling all others. The ISP has two source pads, reflecting the
|
||||||
|
different paths through which it can internally route data. Tap points within
|
||||||
|
the ISP allow users to divert data to avoid processing by some or all of the
|
||||||
|
hardware's processing steps. The diagram below is intended only to highlight how
|
||||||
|
the bypassing works and is not a true reflection of those processing steps; for
|
||||||
|
a high-level functional block diagram see ARM's developer page for the
|
||||||
|
ISP [3]_::
|
||||||
|
|
||||||
|
+--------------------------------------------------------------+
|
||||||
|
| Possible Internal ISP Data Routes |
|
||||||
|
| +------------+ +----------+ +------------+ |
|
||||||
|
+---+ | | | | | Colour | +---+
|
||||||
|
| 0 |--+-->| Processing |->| Demosaic |->| Space |--->| 1 |
|
||||||
|
+---+ | | | | | | Conversion | +---+
|
||||||
|
| | +------------+ +----------+ +------------+ |
|
||||||
|
| | +---+
|
||||||
|
| +---------------------------------------------------| 2 |
|
||||||
|
| +---+
|
||||||
|
| |
|
||||||
|
+--------------------------------------------------------------+
|
||||||
|
|
||||||
|
|
||||||
|
.. flat-table::
|
||||||
|
:header-rows: 1
|
||||||
|
|
||||||
|
* - Pad
|
||||||
|
- Direction
|
||||||
|
- Purpose
|
||||||
|
|
||||||
|
* - 0
|
||||||
|
- sink
|
||||||
|
- Data input, connected to the TPG and camera sensors
|
||||||
|
|
||||||
|
* - 1
|
||||||
|
- source
|
||||||
|
- RGB/YUV data, connected to the FR and DS V4L2 subdevices
|
||||||
|
|
||||||
|
* - 2
|
||||||
|
- source
|
||||||
|
- RAW bayer data, connected to the FR V4L2 subdevices
|
||||||
|
|
||||||
|
The ISP is limited to both input and output resolutions between 640x480 and
|
||||||
|
8192x8192, and this is reflected in the ISP and resizer subdevice's .set_fmt()
|
||||||
|
operations.
|
||||||
|
|
||||||
|
**mali-c55 resizer fr**
|
||||||
|
The `mali-c55 resizer fr` subdevice has two _sink_ pads to reflect the different
|
||||||
|
insertion points in the hardware (either RAW or demosaiced data):
|
||||||
|
|
||||||
|
.. flat-table::
|
||||||
|
:header-rows: 1
|
||||||
|
|
||||||
|
* - Pad
|
||||||
|
- Direction
|
||||||
|
- Purpose
|
||||||
|
|
||||||
|
* - 0
|
||||||
|
- sink
|
||||||
|
- Data input connected to the ISP's demosaiced stream.
|
||||||
|
|
||||||
|
* - 1
|
||||||
|
- source
|
||||||
|
- Data output connected to the capture video device
|
||||||
|
|
||||||
|
* - 2
|
||||||
|
- sink
|
||||||
|
- Data input connected to the ISP's raw data stream
|
||||||
|
|
||||||
|
The data source in use is selected through the routing API; two routes each of a
|
||||||
|
single stream are available:
|
||||||
|
|
||||||
|
.. flat-table::
|
||||||
|
:header-rows: 1
|
||||||
|
|
||||||
|
* - Sink Pad
|
||||||
|
- Source Pad
|
||||||
|
- Purpose
|
||||||
|
|
||||||
|
* - 0
|
||||||
|
- 1
|
||||||
|
- Demosaiced data route
|
||||||
|
|
||||||
|
* - 2
|
||||||
|
- 1
|
||||||
|
- Raw data route
|
||||||
|
|
||||||
|
|
||||||
|
If the demosaiced route is active then the FR pipe is only capable of output
|
||||||
|
in RGB/YUV formats. If the raw route is active then the output reflects the
|
||||||
|
input (which may be either Bayer or RGB/YUV data).
|
||||||
|
|
||||||
|
Using the driver to capture video
|
||||||
|
=================================
|
||||||
|
|
||||||
|
Using the media controller APIs we can configure the input source and ISP to
|
||||||
|
capture images in a variety of formats. In the examples below, configuring the
|
||||||
|
media graph is done with the v4l-utils [1]_ package's media-ctl utility.
|
||||||
|
Capturing the images is done with yavta [2]_.
|
||||||
|
|
||||||
|
Configuring the input source
|
||||||
|
----------------------------
|
||||||
|
|
||||||
|
The first step is to set the input source that we wish by enabling the correct
|
||||||
|
media link. Using the example topology above, we can select the TPG as follows:
|
||||||
|
|
||||||
|
.. code-block:: none
|
||||||
|
|
||||||
|
media-ctl -l "'lte-csi2-rx':1->'mali-c55 isp':0[0]"
|
||||||
|
media-ctl -l "'mali-c55 tpg':0->'mali-c55 isp':0[1]"
|
||||||
|
|
||||||
|
Configuring which video devices will stream data
|
||||||
|
------------------------------------------------
|
||||||
|
|
||||||
|
The driver will wait for all video devices to have their VIDIOC_STREAMON ioctl
|
||||||
|
called before it tells the sensor to start streaming. To facilitate this we need
|
||||||
|
to enable links to the video devices that we want to use. In the example below
|
||||||
|
we enable the links to both of the image capture video devices
|
||||||
|
|
||||||
|
.. code-block:: none
|
||||||
|
|
||||||
|
media-ctl -l "'mali-c55 resizer fr':1->'mali-c55 fr':0[1]"
|
||||||
|
media-ctl -l "'mali-c55 resizer ds':1->'mali-c55 ds':0[1]"
|
||||||
|
|
||||||
|
Capturing bayer data from the source and processing to RGB/YUV
|
||||||
|
--------------------------------------------------------------
|
||||||
|
|
||||||
|
To capture 1920x1080 bayer data from the source and push it through the ISP's
|
||||||
|
full processing pipeline, we configure the data formats appropriately on the
|
||||||
|
source, ISP and resizer subdevices and set the FR resizer's routing to select
|
||||||
|
processed data. The media bus format on the resizer's source pad will be either
|
||||||
|
RGB121212_1X36 or YUV10_1X30, depending on whether you want to capture RGB or
|
||||||
|
YUV. The ISP's debayering block outputs RGB data natively, setting the source
|
||||||
|
pad format to YUV10_1X30 enables the colour space conversion block.
|
||||||
|
|
||||||
|
In this example we target RGB565 output, so select RGB121212_1X36 as the resizer
|
||||||
|
source pad's format:
|
||||||
|
|
||||||
|
.. code-block:: none
|
||||||
|
|
||||||
|
# Set formats on the TPG and ISP
|
||||||
|
media-ctl -V "'mali-c55 tpg':0[fmt:SRGGB20_1X20/1920x1080]"
|
||||||
|
media-ctl -V "'mali-c55 isp':0[fmt:SRGGB20_1X20/1920x1080]"
|
||||||
|
media-ctl -V "'mali-c55 isp':1[fmt:SRGGB20_1X20/1920x1080]"
|
||||||
|
|
||||||
|
# Set routing on the FR resizer
|
||||||
|
media-ctl -R "'mali-c55 resizer fr'[0/0->1/0[1],2/0->1/0[0]]"
|
||||||
|
|
||||||
|
# Set format on the resizer, must be done AFTER the routing.
|
||||||
|
media-ctl -V "'mali-c55 resizer fr':1[fmt:RGB121212_1X36/1920x1080]"
|
||||||
|
|
||||||
|
The downscale output can also be used to stream data at the same time. In this
|
||||||
|
case since only processed data can be captured through the downscale output no
|
||||||
|
routing need be set:
|
||||||
|
|
||||||
|
.. code-block:: none
|
||||||
|
|
||||||
|
# Set format on the resizer
|
||||||
|
media-ctl -V "'mali-c55 resizer ds':1[fmt:RGB121212_1X36/1920x1080]"
|
||||||
|
|
||||||
|
Following which images can be captured from both the FR and DS output's video
|
||||||
|
devices (simultaneously, if desired):
|
||||||
|
|
||||||
|
.. code-block:: none
|
||||||
|
|
||||||
|
yavta -f RGB565 -s 1920x1080 -c10 /dev/video0
|
||||||
|
yavta -f RGB565 -s 1920x1080 -c10 /dev/video1
|
||||||
|
|
||||||
|
Cropping the image
|
||||||
|
~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
Both the full resolution and downscale pipes can crop to a minimum resolution of
|
||||||
|
640x480. To crop the image simply configure the resizer's sink pad's crop and
|
||||||
|
compose rectangles and set the format on the video device:
|
||||||
|
|
||||||
|
.. code-block:: none
|
||||||
|
|
||||||
|
media-ctl -V "'mali-c55 resizer fr':0[fmt:RGB121212_1X36/1920x1080 crop:(480,270)/640x480 compose:(0,0)/640x480]"
|
||||||
|
media-ctl -V "'mali-c55 resizer fr':1[fmt:RGB121212_1X36/640x480]"
|
||||||
|
yavta -f RGB565 -s 640x480 -c10 /dev/video0
|
||||||
|
|
||||||
|
Downscaling the image
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
Both the full resolution and downscale pipes can downscale the image by up to 8x
|
||||||
|
provided the minimum 640x480 output resolution is adhered to. For the best image
|
||||||
|
result the scaling ratio for each direction should be the same. To configure
|
||||||
|
scaling we use the compose rectangle on the resizer's sink pad:
|
||||||
|
|
||||||
|
.. code-block:: none
|
||||||
|
|
||||||
|
media-ctl -V "'mali-c55 resizer fr':0[fmt:RGB121212_1X36/1920x1080 crop:(0,0)/1920x1080 compose:(0,0)/640x480]"
|
||||||
|
media-ctl -V "'mali-c55 resizer fr':1[fmt:RGB121212_1X36/640x480]"
|
||||||
|
yavta -f RGB565 -s 640x480 -c10 /dev/video0
|
||||||
|
|
||||||
|
Capturing images in YUV formats
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
If we need to output YUV data rather than RGB the color space conversion block
|
||||||
|
needs to be active, which is achieved by setting MEDIA_BUS_FMT_YUV10_1X30 on the
|
||||||
|
resizer's source pad. We can then configure a capture format like NV12 (here in
|
||||||
|
its multi-planar variant)
|
||||||
|
|
||||||
|
.. code-block:: none
|
||||||
|
|
||||||
|
media-ctl -V "'mali-c55 resizer fr':1[fmt:YUV10_1X30/1920x1080]"
|
||||||
|
yavta -f NV12M -s 1920x1080 -c10 /dev/video0
|
||||||
|
|
||||||
|
Capturing RGB data from the source and processing it with the resizers
|
||||||
|
----------------------------------------------------------------------
|
||||||
|
|
||||||
|
The Mali-C55 ISP can work with sensors capable of outputting RGB data. In this
|
||||||
|
case although none of the image quality blocks would be used it can still
|
||||||
|
crop/scale the data in the usual way. For this reason RGB data input to the ISP
|
||||||
|
still goes through the ISP subdevice's pad 1 to the resizer.
|
||||||
|
|
||||||
|
To achieve this, the ISP's sink pad's format is set to
|
||||||
|
MEDIA_BUS_FMT_RGB202020_1X60 - this reflects the format that data must be in to
|
||||||
|
work with the ISP. Converting the camera sensor's output to that format is the
|
||||||
|
responsibility of external hardware.
|
||||||
|
|
||||||
|
In this example we ask the test pattern generator to give us RGB data instead of
|
||||||
|
bayer.
|
||||||
|
|
||||||
|
.. code-block:: none
|
||||||
|
|
||||||
|
media-ctl -V "'mali-c55 tpg':0[fmt:RGB202020_1X60/1920x1080]"
|
||||||
|
media-ctl -V "'mali-c55 isp':0[fmt:RGB202020_1X60/1920x1080]"
|
||||||
|
|
||||||
|
Cropping or scaling the data can be done in exactly the same way as outlined
|
||||||
|
earlier.
|
||||||
|
|
||||||
|
Capturing raw data from the source and outputting it unmodified
|
||||||
|
-----------------------------------------------------------------
|
||||||
|
|
||||||
|
The ISP can additionally capture raw data from the source and output it on the
|
||||||
|
full resolution pipe only, completely unmodified. In this case the downscale
|
||||||
|
pipe can still process the data normally and be used at the same time.
|
||||||
|
|
||||||
|
To configure raw bypass the FR resizer's subdevice's routing table needs to be
|
||||||
|
configured, followed by formats in the appropriate places:
|
||||||
|
|
||||||
|
.. code-block:: none
|
||||||
|
|
||||||
|
media-ctl -R "'mali-c55 resizer fr'[0/0->1/0[0],2/0->1/0[1]]"
|
||||||
|
media-ctl -V "'mali-c55 isp':0[fmt:RGB202020_1X60/1920x1080]"
|
||||||
|
media-ctl -V "'mali-c55 resizer fr':2[fmt:RGB202020_1X60/1920x1080]"
|
||||||
|
media-ctl -V "'mali-c55 resizer fr':1[fmt:RGB202020_1X60/1920x1080]"
|
||||||
|
|
||||||
|
# Set format on the video device and stream
|
||||||
|
yavta -f RGB565 -s 1920x1080 -c10 /dev/video0
|
||||||
|
|
||||||
|
.. _mali-c55-3a-stats:
|
||||||
|
|
||||||
|
Capturing ISP Statistics
|
||||||
|
========================
|
||||||
|
|
||||||
|
The ISP is capable of producing statistics for consumption by image processing
|
||||||
|
algorithms running in userspace. These statistics can be captured by queueing
|
||||||
|
buffers to the `mali-c55 3a stats` V4L2 Device whilst the ISP is streaming. Only
|
||||||
|
the :ref:`V4L2_META_FMT_MALI_C55_STATS <v4l2-meta-fmt-mali-c55-stats>`
|
||||||
|
format is supported, so no format-setting need be done:
|
||||||
|
|
||||||
|
.. code-block:: none
|
||||||
|
|
||||||
|
# We assume the media graph has been configured to support RGB565 capture
|
||||||
|
# from the mali-c55 fr V4L2 Device, which is at /dev/video0. The statistics
|
||||||
|
# V4L2 device is at /dev/video3
|
||||||
|
|
||||||
|
yavta -f RGB565 -s 1920x1080 -c32 /dev/video0 && \
|
||||||
|
yavta -c10 -F /dev/video3
|
||||||
|
|
||||||
|
The layout of the buffer is described by :c:type:`mali_c55_stats_buffer`,
|
||||||
|
but broadly statistics are generated to support three image processing
|
||||||
|
algorithms; AEXP (Auto-Exposure), AWB (Auto-White Balance) and AF (Auto-Focus).
|
||||||
|
These stats can be drawn from various places in the Mali C55 ISP pipeline, known
|
||||||
|
as "tap points". This high-level block diagram is intended to explain where in
|
||||||
|
the processing flow the statistics can be drawn from::
|
||||||
|
|
||||||
|
+--> AEXP-2 +----> AEXP-1 +--> AF-0
|
||||||
|
| +----> AF-1 |
|
||||||
|
| | |
|
||||||
|
+---------+ | +--------------+ | +--------------+ |
|
||||||
|
| Input +-+-->+ Digital Gain +---+-->+ Black Level +---+---+
|
||||||
|
+---------+ +--------------+ +--------------+ |
|
||||||
|
+-----------------------------------------------------------------+
|
||||||
|
|
|
||||||
|
| +--------------+ +---------+ +----------------+
|
||||||
|
+-->| Sinter Noise +-+ White +--+--->| Lens Shading +--+---------------+
|
||||||
|
| Reduction | | Balance | | | | | |
|
||||||
|
+--------------+ +---------+ | +----------------+ | |
|
||||||
|
+---> AEXP-0 (A) +--> AEXP-0 (B) |
|
||||||
|
+--------------------------------------------------------------------------+
|
||||||
|
|
|
||||||
|
| +----------------+ +--------------+ +----------------+
|
||||||
|
+-->| Tone mapping +-+--->| Demosaicing +->+ Purple Fringe +-+-----------+
|
||||||
|
| | | +--------------+ | Correction | | |
|
||||||
|
+----------------+ +-> AEXP-IRIDIX +----------------+ +---> AWB-0 |
|
||||||
|
+----------------------------------------------------------------------------+
|
||||||
|
| +-------------+ +-------------+
|
||||||
|
+------------------->| Colour +---+--->| Output |
|
||||||
|
| Correction | | | Pipelines |
|
||||||
|
+-------------+ | +-------------+
|
||||||
|
+--> AWB-1
|
||||||
|
|
||||||
|
By default all statistics are drawn from the 0th tap point for each algorithm;
|
||||||
|
I.E. AEXP statistics from AEXP-0 (A), AWB statistics from AWB-0 and AF
|
||||||
|
statistics from AF-0. This is configurable for AEXP and AWB statsistics through
|
||||||
|
programming the ISP's parameters.
|
||||||
|
|
||||||
|
.. _mali-c55-3a-params:
|
||||||
|
|
||||||
|
Programming ISP Parameters
|
||||||
|
==========================
|
||||||
|
|
||||||
|
The ISP can be programmed with various parameters from userspace to apply to the
|
||||||
|
hardware before and during video stream. This allows userspace to dynamically
|
||||||
|
change values such as black level, white balance and lens shading gains and so
|
||||||
|
on.
|
||||||
|
|
||||||
|
The buffer format and how to populate it are described by the
|
||||||
|
:ref:`V4L2_META_FMT_MALI_C55_PARAMS <v4l2-meta-fmt-mali-c55-params>` format,
|
||||||
|
which should be set as the data format for the `mali-c55 3a params` video node.
|
||||||
|
|
||||||
|
References
|
||||||
|
==========
|
||||||
|
.. [1] https://git.linuxtv.org/v4l-utils.git/
|
||||||
|
.. [2] https://git.ideasonboard.org/yavta.git
|
||||||
|
.. [3] https://developer.arm.com/Processors/Mali-C55
|
||||||
|
|
@ -18,8 +18,6 @@ am437x-vpfe TI AM437x VPFE
|
||||||
aspeed-video Aspeed AST2400 and AST2500
|
aspeed-video Aspeed AST2400 and AST2500
|
||||||
atmel-isc ATMEL Image Sensor Controller (ISC)
|
atmel-isc ATMEL Image Sensor Controller (ISC)
|
||||||
atmel-isi ATMEL Image Sensor Interface (ISI)
|
atmel-isi ATMEL Image Sensor Interface (ISI)
|
||||||
c8sectpfe SDR platform devices
|
|
||||||
c8sectpfe SDR platform devices
|
|
||||||
cafe_ccic Marvell 88ALP01 (Cafe) CMOS Camera Controller
|
cafe_ccic Marvell 88ALP01 (Cafe) CMOS Camera Controller
|
||||||
cdns-csi2rx Cadence MIPI-CSI2 RX Controller
|
cdns-csi2rx Cadence MIPI-CSI2 RX Controller
|
||||||
cdns-csi2tx Cadence MIPI-CSI2 TX Controller
|
cdns-csi2tx Cadence MIPI-CSI2 TX Controller
|
||||||
|
|
|
||||||
|
|
@ -30,7 +30,6 @@ radio-terratec TerraTec ActiveRadio ISA Standalone
|
||||||
radio-timb Enable the Timberdale radio driver
|
radio-timb Enable the Timberdale radio driver
|
||||||
radio-trust Trust FM radio card
|
radio-trust Trust FM radio card
|
||||||
radio-typhoon Typhoon Radio (a.k.a. EcoRadio)
|
radio-typhoon Typhoon Radio (a.k.a. EcoRadio)
|
||||||
radio-wl1273 Texas Instruments WL1273 I2C FM Radio
|
|
||||||
fm_drv ISA radio devices
|
fm_drv ISA radio devices
|
||||||
fm_drv ISA radio devices
|
fm_drv ISA radio devices
|
||||||
radio-zoltrix Zoltrix Radio
|
radio-zoltrix Zoltrix Radio
|
||||||
|
|
|
||||||
8
Documentation/admin-guide/media/rkcif-rk3568-vicap.dot
Normal file
8
Documentation/admin-guide/media/rkcif-rk3568-vicap.dot
Normal file
|
|
@ -0,0 +1,8 @@
|
||||||
|
digraph board {
|
||||||
|
rankdir=TB
|
||||||
|
n00000001 [label="{{<port0> 0} | rkcif-dvp0\n/dev/v4l-subdev0 | {<port1> 1}}", shape=Mrecord, style=filled, fillcolor=green]
|
||||||
|
n00000001:port1 -> n00000004
|
||||||
|
n00000004 [label="rkcif-dvp0-id0\n/dev/video0", shape=box, style=filled, fillcolor=yellow]
|
||||||
|
n00000025 [label="{{} | it6801 2-0048\n/dev/v4l-subdev1 | {<port0> 0}}", shape=Mrecord, style=filled, fillcolor=green]
|
||||||
|
n00000025:port0 -> n00000001:port0
|
||||||
|
}
|
||||||
79
Documentation/admin-guide/media/rkcif.rst
Normal file
79
Documentation/admin-guide/media/rkcif.rst
Normal file
|
|
@ -0,0 +1,79 @@
|
||||||
|
.. SPDX-License-Identifier: GPL-2.0
|
||||||
|
|
||||||
|
=========================================
|
||||||
|
Rockchip Camera Interface (CIF)
|
||||||
|
=========================================
|
||||||
|
|
||||||
|
Introduction
|
||||||
|
============
|
||||||
|
|
||||||
|
The Rockchip Camera Interface (CIF) is featured in many Rockchip SoCs in
|
||||||
|
different variants.
|
||||||
|
The different variants are combinations of common building blocks, such as
|
||||||
|
|
||||||
|
* INTERFACE blocks of different types, namely
|
||||||
|
|
||||||
|
* the Digital Video Port (DVP, a parallel data interface)
|
||||||
|
* the interface block for the MIPI CSI-2 receiver
|
||||||
|
|
||||||
|
* CROP units
|
||||||
|
|
||||||
|
* MIPI CSI-2 receiver (not available on all variants): This unit is referred
|
||||||
|
to as MIPI CSI HOST in the Rockchip documentation.
|
||||||
|
Technically, it is a separate hardware block, but it is strongly coupled to
|
||||||
|
the CIF and therefore included here.
|
||||||
|
|
||||||
|
* MUX units (not available on all variants) that pass the video data to an
|
||||||
|
image signal processor (ISP)
|
||||||
|
|
||||||
|
* SCALE units (not available on all variants)
|
||||||
|
|
||||||
|
* DMA engines that transfer video data into system memory using a
|
||||||
|
double-buffering mechanism called ping-pong mode
|
||||||
|
|
||||||
|
* Support for four streams per INTERFACE block (not available on all
|
||||||
|
variants), e.g., for MIPI CSI-2 Virtual Channels (VCs)
|
||||||
|
|
||||||
|
This document describes the different variants of the CIF, their hardware
|
||||||
|
layout, as well as their representation in the media controller centric rkcif
|
||||||
|
device driver, which is located under drivers/media/platform/rockchip/rkcif.
|
||||||
|
|
||||||
|
Variants
|
||||||
|
========
|
||||||
|
|
||||||
|
Rockchip PX30 Video Input Processor (VIP)
|
||||||
|
-----------------------------------------
|
||||||
|
|
||||||
|
The PX30 Video Input Processor (VIP) features a digital video port that accepts
|
||||||
|
parallel video data or BT.656.
|
||||||
|
Since these protocols do not feature multiple streams, the VIP has one DMA
|
||||||
|
engine that transfers the input video data into system memory.
|
||||||
|
|
||||||
|
The rkcif driver represents this hardware variant by exposing one V4L2 subdevice
|
||||||
|
(the DVP INTERFACE/CROP block) and one V4L2 device (the DVP DMA engine).
|
||||||
|
|
||||||
|
Rockchip RK3568 Video Capture (VICAP)
|
||||||
|
-------------------------------------
|
||||||
|
|
||||||
|
The RK3568 Video Capture (VICAP) unit features a digital video port and a MIPI
|
||||||
|
CSI-2 receiver that can receive video data independently.
|
||||||
|
The DVP accepts parallel video data, BT.656 and BT.1120.
|
||||||
|
Since the BT.1120 protocol may feature more than one stream, the RK3568 VICAP
|
||||||
|
DVP features four DMA engines that can capture different streams.
|
||||||
|
Similarly, the RK3568 VICAP MIPI CSI-2 receiver features four DMA engines to
|
||||||
|
handle different Virtual Channels (VCs).
|
||||||
|
|
||||||
|
The rkcif driver represents this hardware variant by exposing up the following
|
||||||
|
V4L2 subdevices:
|
||||||
|
|
||||||
|
* rkcif-dvp0: INTERFACE/CROP block for the DVP
|
||||||
|
|
||||||
|
and the following video devices:
|
||||||
|
|
||||||
|
* rkcif-dvp0-id0: The support for multiple streams on the DVP is not yet
|
||||||
|
implemented, as it is hard to find test hardware. Thus, this video device
|
||||||
|
represents the first DMA engine of the RK3568 DVP.
|
||||||
|
|
||||||
|
.. kernel-figure:: rkcif-rk3568-vicap.dot
|
||||||
|
:alt: Topology of the RK3568 Video Capture (VICAP) unit
|
||||||
|
:align: center
|
||||||
|
|
@ -19,12 +19,14 @@ Video4Linux (V4L) driver-specific documentation
|
||||||
ipu3
|
ipu3
|
||||||
ipu6-isys
|
ipu6-isys
|
||||||
ivtv
|
ivtv
|
||||||
|
mali-c55
|
||||||
mgb4
|
mgb4
|
||||||
omap3isp
|
omap3isp
|
||||||
philips
|
philips
|
||||||
qcom_camss
|
qcom_camss
|
||||||
raspberrypi-pisp-be
|
raspberrypi-pisp-be
|
||||||
rcar-fdp1
|
rcar-fdp1
|
||||||
|
rkcif
|
||||||
rkisp1
|
rkisp1
|
||||||
raspberrypi-rp1-cfe
|
raspberrypi-rp1-cfe
|
||||||
saa7134
|
saa7134
|
||||||
|
|
|
||||||
|
|
@ -211,6 +211,28 @@ End of target memory region in physical address.
|
||||||
The end physical address of memory region that DAMON_LRU_SORT will do work
|
The end physical address of memory region that DAMON_LRU_SORT will do work
|
||||||
against. By default, biggest System RAM is used as the region.
|
against. By default, biggest System RAM is used as the region.
|
||||||
|
|
||||||
|
addr_unit
|
||||||
|
---------
|
||||||
|
|
||||||
|
A scale factor for memory addresses and bytes.
|
||||||
|
|
||||||
|
This parameter is for setting and getting the :ref:`address unit
|
||||||
|
<damon_design_addr_unit>` parameter of the DAMON instance for DAMON_RECLAIM.
|
||||||
|
|
||||||
|
``monitor_region_start`` and ``monitor_region_end`` should be provided in this
|
||||||
|
unit. For example, let's suppose ``addr_unit``, ``monitor_region_start`` and
|
||||||
|
``monitor_region_end`` are set as ``1024``, ``0`` and ``10``, respectively.
|
||||||
|
Then DAMON_LRU_SORT will work for 10 KiB length of physical address range that
|
||||||
|
starts from address zero (``[0 * 1024, 10 * 1024)`` in bytes).
|
||||||
|
|
||||||
|
Stat parameters having ``bytes_`` prefix are also in this unit. For example,
|
||||||
|
let's suppose values of ``addr_unit``, ``bytes_lru_sort_tried_hot_regions`` and
|
||||||
|
``bytes_lru_sorted_hot_regions`` are ``1024``, ``42``, and ``32``,
|
||||||
|
respectively. Then it means DAMON_LRU_SORT tried to LRU-sort 42 KiB of hot
|
||||||
|
memory and successfully LRU-sorted 32 KiB of the memory in total.
|
||||||
|
|
||||||
|
If unsure, use only the default value (``1``) and forget about this.
|
||||||
|
|
||||||
kdamond_pid
|
kdamond_pid
|
||||||
-----------
|
-----------
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -232,6 +232,28 @@ The end physical address of memory region that DAMON_RECLAIM will do work
|
||||||
against. That is, DAMON_RECLAIM will find cold memory regions in this region
|
against. That is, DAMON_RECLAIM will find cold memory regions in this region
|
||||||
and reclaims. By default, biggest System RAM is used as the region.
|
and reclaims. By default, biggest System RAM is used as the region.
|
||||||
|
|
||||||
|
addr_unit
|
||||||
|
---------
|
||||||
|
|
||||||
|
A scale factor for memory addresses and bytes.
|
||||||
|
|
||||||
|
This parameter is for setting and getting the :ref:`address unit
|
||||||
|
<damon_design_addr_unit>` parameter of the DAMON instance for DAMON_RECLAIM.
|
||||||
|
|
||||||
|
``monitor_region_start`` and ``monitor_region_end`` should be provided in this
|
||||||
|
unit. For example, let's suppose ``addr_unit``, ``monitor_region_start`` and
|
||||||
|
``monitor_region_end`` are set as ``1024``, ``0`` and ``10``, respectively.
|
||||||
|
Then DAMON_RECLAIM will work for 10 KiB length of physical address range that
|
||||||
|
starts from address zero (``[0 * 1024, 10 * 1024)`` in bytes).
|
||||||
|
|
||||||
|
``bytes_reclaim_tried_regions`` and ``bytes_reclaimed_regions`` are also in
|
||||||
|
this unit. For example, let's suppose values of ``addr_unit``,
|
||||||
|
``bytes_reclaim_tried_regions`` and ``bytes_reclaimed_regions`` are ``1024``,
|
||||||
|
``42``, and ``32``, respectively. Then it means DAMON_RECLAIM tried to reclaim
|
||||||
|
42 KiB memory and successfully reclaimed 32 KiB memory in total.
|
||||||
|
|
||||||
|
If unsure, use only the default value (``1``) and forget about this.
|
||||||
|
|
||||||
skip_anon
|
skip_anon
|
||||||
---------
|
---------
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -10,6 +10,8 @@ on the system's entire physical memory using DAMON, and provides simplified
|
||||||
access monitoring results statistics, namely idle time percentiles and
|
access monitoring results statistics, namely idle time percentiles and
|
||||||
estimated memory bandwidth.
|
estimated memory bandwidth.
|
||||||
|
|
||||||
|
.. _damon_stat_monitoring_accuracy_overhead:
|
||||||
|
|
||||||
Monitoring Accuracy and Overhead
|
Monitoring Accuracy and Overhead
|
||||||
================================
|
================================
|
||||||
|
|
||||||
|
|
@ -17,9 +19,11 @@ DAMON_STAT uses monitoring intervals :ref:`auto-tuning
|
||||||
<damon_design_monitoring_intervals_autotuning>` to make its accuracy high and
|
<damon_design_monitoring_intervals_autotuning>` to make its accuracy high and
|
||||||
overhead minimum. It auto-tunes the intervals aiming 4 % of observable access
|
overhead minimum. It auto-tunes the intervals aiming 4 % of observable access
|
||||||
events to be captured in each snapshot, while limiting the resulting sampling
|
events to be captured in each snapshot, while limiting the resulting sampling
|
||||||
events to be 5 milliseconds in minimum and 10 seconds in maximum. On a few
|
interval to be 5 milliseconds in minimum and 10 seconds in maximum. On a few
|
||||||
production server systems, it resulted in consuming only 0.x % single CPU time,
|
production server systems, it resulted in consuming only 0.x % single CPU time,
|
||||||
while capturing reasonable quality of access patterns.
|
while capturing reasonable quality of access patterns. The tuning-resulting
|
||||||
|
intervals can be retrieved via ``aggr_interval_us`` :ref:`parameter
|
||||||
|
<damon_stat_aggr_interval_us>`.
|
||||||
|
|
||||||
Interface: Module Parameters
|
Interface: Module Parameters
|
||||||
============================
|
============================
|
||||||
|
|
@ -41,6 +45,18 @@ You can enable DAMON_STAT by setting the value of this parameter as ``Y``.
|
||||||
Setting it as ``N`` disables DAMON_STAT. The default value is set by
|
Setting it as ``N`` disables DAMON_STAT. The default value is set by
|
||||||
``CONFIG_DAMON_STAT_ENABLED_DEFAULT`` build config option.
|
``CONFIG_DAMON_STAT_ENABLED_DEFAULT`` build config option.
|
||||||
|
|
||||||
|
.. _damon_stat_aggr_interval_us:
|
||||||
|
|
||||||
|
aggr_interval_us
|
||||||
|
----------------
|
||||||
|
|
||||||
|
Auto-tuned aggregation time interval in microseconds.
|
||||||
|
|
||||||
|
Users can read the aggregation interval of DAMON that is being used by the
|
||||||
|
DAMON instance for DAMON_STAT. It is :ref:`auto-tuned
|
||||||
|
<damon_stat_monitoring_accuracy_overhead>` and therefore the value is
|
||||||
|
dynamically changed.
|
||||||
|
|
||||||
estimated_memory_bandwidth
|
estimated_memory_bandwidth
|
||||||
--------------------------
|
--------------------------
|
||||||
|
|
||||||
|
|
@ -58,12 +74,13 @@ memory_idle_ms_percentiles
|
||||||
Per-byte idle time (milliseconds) percentiles of the system.
|
Per-byte idle time (milliseconds) percentiles of the system.
|
||||||
|
|
||||||
DAMON_STAT calculates how long each byte of the memory was not accessed until
|
DAMON_STAT calculates how long each byte of the memory was not accessed until
|
||||||
now (idle time), based on the current DAMON results snapshot. If DAMON found a
|
now (idle time), based on the current DAMON results snapshot. For regions
|
||||||
region of access frequency (nr_accesses) larger than zero, every byte of the
|
having access frequency (nr_accesses) larger than zero, how long the current
|
||||||
region gets zero idle time. If a region has zero access frequency
|
access frequency level was kept multiplied by ``-1`` becomes the idlee time of
|
||||||
(nr_accesses), how long the region was keeping the zero access frequency (age)
|
every byte of the region. If a region has zero access frequency (nr_accesses),
|
||||||
becomes the idle time of every byte of the region. Then, DAMON_STAT exposes
|
how long the region was keeping the zero access frequency (age) becomes the
|
||||||
the percentiles of the idle time values via this read-only parameter. Reading
|
idle time of every byte of the region. Then, DAMON_STAT exposes the
|
||||||
the parameter returns 101 idle time values in milliseconds, separated by comma.
|
percentiles of the idle time values via this read-only parameter. Reading the
|
||||||
|
parameter returns 101 idle time values in milliseconds, separated by comma.
|
||||||
Each value represents 0-th, 1st, 2nd, 3rd, ..., 99th and 100th percentile idle
|
Each value represents 0-th, 1st, 2nd, 3rd, ..., 99th and 100th percentile idle
|
||||||
times.
|
times.
|
||||||
|
|
|
||||||
|
|
@ -67,7 +67,7 @@ comma (",").
|
||||||
│ │ │ │ │ │ │ intervals_goal/access_bp,aggrs,min_sample_us,max_sample_us
|
│ │ │ │ │ │ │ intervals_goal/access_bp,aggrs,min_sample_us,max_sample_us
|
||||||
│ │ │ │ │ │ nr_regions/min,max
|
│ │ │ │ │ │ nr_regions/min,max
|
||||||
│ │ │ │ │ :ref:`targets <sysfs_targets>`/nr_targets
|
│ │ │ │ │ :ref:`targets <sysfs_targets>`/nr_targets
|
||||||
│ │ │ │ │ │ :ref:`0 <sysfs_target>`/pid_target
|
│ │ │ │ │ │ :ref:`0 <sysfs_target>`/pid_target,obsolete_target
|
||||||
│ │ │ │ │ │ │ :ref:`regions <sysfs_regions>`/nr_regions
|
│ │ │ │ │ │ │ :ref:`regions <sysfs_regions>`/nr_regions
|
||||||
│ │ │ │ │ │ │ │ :ref:`0 <sysfs_region>`/start,end
|
│ │ │ │ │ │ │ │ :ref:`0 <sysfs_region>`/start,end
|
||||||
│ │ │ │ │ │ │ │ ...
|
│ │ │ │ │ │ │ │ ...
|
||||||
|
|
@ -81,7 +81,7 @@ comma (",").
|
||||||
│ │ │ │ │ │ │ :ref:`quotas <sysfs_quotas>`/ms,bytes,reset_interval_ms,effective_bytes
|
│ │ │ │ │ │ │ :ref:`quotas <sysfs_quotas>`/ms,bytes,reset_interval_ms,effective_bytes
|
||||||
│ │ │ │ │ │ │ │ weights/sz_permil,nr_accesses_permil,age_permil
|
│ │ │ │ │ │ │ │ weights/sz_permil,nr_accesses_permil,age_permil
|
||||||
│ │ │ │ │ │ │ │ :ref:`goals <sysfs_schemes_quota_goals>`/nr_goals
|
│ │ │ │ │ │ │ │ :ref:`goals <sysfs_schemes_quota_goals>`/nr_goals
|
||||||
│ │ │ │ │ │ │ │ │ 0/target_metric,target_value,current_value,nid
|
│ │ │ │ │ │ │ │ │ 0/target_metric,target_value,current_value,nid,path
|
||||||
│ │ │ │ │ │ │ :ref:`watermarks <sysfs_watermarks>`/metric,interval_us,high,mid,low
|
│ │ │ │ │ │ │ :ref:`watermarks <sysfs_watermarks>`/metric,interval_us,high,mid,low
|
||||||
│ │ │ │ │ │ │ :ref:`{core_,ops_,}filters <sysfs_filters>`/nr_filters
|
│ │ │ │ │ │ │ :ref:`{core_,ops_,}filters <sysfs_filters>`/nr_filters
|
||||||
│ │ │ │ │ │ │ │ 0/type,matching,allow,memcg_path,addr_start,addr_end,target_idx,min,max
|
│ │ │ │ │ │ │ │ 0/type,matching,allow,memcg_path,addr_start,addr_end,target_idx,min,max
|
||||||
|
|
@ -134,7 +134,8 @@ Users can write below commands for the kdamond to the ``state`` file.
|
||||||
- ``on``: Start running.
|
- ``on``: Start running.
|
||||||
- ``off``: Stop running.
|
- ``off``: Stop running.
|
||||||
- ``commit``: Read the user inputs in the sysfs files except ``state`` file
|
- ``commit``: Read the user inputs in the sysfs files except ``state`` file
|
||||||
again.
|
again. Monitoring :ref:`target region <sysfs_regions>` inputs are also be
|
||||||
|
ignored if no target region is specified.
|
||||||
- ``update_tuned_intervals``: Update the contents of ``sample_us`` and
|
- ``update_tuned_intervals``: Update the contents of ``sample_us`` and
|
||||||
``aggr_us`` files of the kdamond with the auto-tuning applied ``sampling
|
``aggr_us`` files of the kdamond with the auto-tuning applied ``sampling
|
||||||
interval`` and ``aggregation interval`` for the files. Please refer to
|
interval`` and ``aggregation interval`` for the files. Please refer to
|
||||||
|
|
@ -264,13 +265,20 @@ to ``N-1``. Each directory represents each monitoring target.
|
||||||
targets/<N>/
|
targets/<N>/
|
||||||
------------
|
------------
|
||||||
|
|
||||||
In each target directory, one file (``pid_target``) and one directory
|
In each target directory, two files (``pid_target`` and ``obsolete_target``)
|
||||||
(``regions``) exist.
|
and one directory (``regions``) exist.
|
||||||
|
|
||||||
If you wrote ``vaddr`` to the ``contexts/<N>/operations``, each target should
|
If you wrote ``vaddr`` to the ``contexts/<N>/operations``, each target should
|
||||||
be a process. You can specify the process to DAMON by writing the pid of the
|
be a process. You can specify the process to DAMON by writing the pid of the
|
||||||
process to the ``pid_target`` file.
|
process to the ``pid_target`` file.
|
||||||
|
|
||||||
|
Users can selectively remove targets in the middle of the targets array by
|
||||||
|
writing non-zero value to ``obsolete_target`` file and committing it (writing
|
||||||
|
``commit`` to ``state`` file). DAMON will remove the matching targets from its
|
||||||
|
internal targets array. Users are responsible to construct target directories
|
||||||
|
again, so that those correctly represent the changed internal targets array.
|
||||||
|
|
||||||
|
|
||||||
.. _sysfs_regions:
|
.. _sysfs_regions:
|
||||||
|
|
||||||
targets/<N>/regions
|
targets/<N>/regions
|
||||||
|
|
@ -289,6 +297,11 @@ In the beginning, this directory has only one file, ``nr_regions``. Writing a
|
||||||
number (``N``) to the file creates the number of child directories named ``0``
|
number (``N``) to the file creates the number of child directories named ``0``
|
||||||
to ``N-1``. Each directory represents each initial monitoring target region.
|
to ``N-1``. Each directory represents each initial monitoring target region.
|
||||||
|
|
||||||
|
If ``nr_regions`` is zero when committing new DAMON parameters online (writing
|
||||||
|
``commit`` to ``state`` file of :ref:`kdamond <sysfs_kdamond>`), the commit
|
||||||
|
logic ignores the target regions. In other words, the current monitoring
|
||||||
|
results for the target are preserved.
|
||||||
|
|
||||||
.. _sysfs_region:
|
.. _sysfs_region:
|
||||||
|
|
||||||
regions/<N>/
|
regions/<N>/
|
||||||
|
|
@ -402,9 +415,9 @@ number (``N``) to the file creates the number of child directories named ``0``
|
||||||
to ``N-1``. Each directory represents each goal and current achievement.
|
to ``N-1``. Each directory represents each goal and current achievement.
|
||||||
Among the multiple feedback, the best one is used.
|
Among the multiple feedback, the best one is used.
|
||||||
|
|
||||||
Each goal directory contains four files, namely ``target_metric``,
|
Each goal directory contains five files, namely ``target_metric``,
|
||||||
``target_value``, ``current_value`` and ``nid``. Users can set and get the
|
``target_value``, ``current_value`` ``nid`` and ``path``. Users can set and
|
||||||
four parameters for the quota auto-tuning goals that specified on the
|
get the five parameters for the quota auto-tuning goals that specified on the
|
||||||
:ref:`design doc <damon_design_damos_quotas_auto_tuning>` by writing to and
|
:ref:`design doc <damon_design_damos_quotas_auto_tuning>` by writing to and
|
||||||
reading from each of the files. Note that users should further write
|
reading from each of the files. Note that users should further write
|
||||||
``commit_schemes_quota_goals`` to the ``state`` file of the :ref:`kdamond
|
``commit_schemes_quota_goals`` to the ``state`` file of the :ref:`kdamond
|
||||||
|
|
|
||||||
|
|
@ -39,7 +39,6 @@ the Linux memory management.
|
||||||
shrinker_debugfs
|
shrinker_debugfs
|
||||||
slab
|
slab
|
||||||
soft-dirty
|
soft-dirty
|
||||||
swap_numa
|
|
||||||
transhuge
|
transhuge
|
||||||
userfaultfd
|
userfaultfd
|
||||||
zswap
|
zswap
|
||||||
|
|
|
||||||
|
|
@ -115,7 +115,8 @@ Short descriptions to the page flags
|
||||||
A free memory block managed by the buddy system allocator.
|
A free memory block managed by the buddy system allocator.
|
||||||
The buddy system organizes free memory in blocks of various orders.
|
The buddy system organizes free memory in blocks of various orders.
|
||||||
An order N block has 2^N physically contiguous pages, with the BUDDY flag
|
An order N block has 2^N physically contiguous pages, with the BUDDY flag
|
||||||
set for and _only_ for the first page.
|
set for all pages.
|
||||||
|
Before 4.6 only the first page of the block had the flag set.
|
||||||
15 - COMPOUND_HEAD
|
15 - COMPOUND_HEAD
|
||||||
A compound page with order N consists of 2^N physically contiguous pages.
|
A compound page with order N consists of 2^N physically contiguous pages.
|
||||||
A compound page with order 2 takes the form of "HTTT", where H donates its
|
A compound page with order 2 takes the form of "HTTT", where H donates its
|
||||||
|
|
|
||||||
|
|
@ -1,78 +0,0 @@
|
||||||
===========================================
|
|
||||||
Automatically bind swap device to numa node
|
|
||||||
===========================================
|
|
||||||
|
|
||||||
If the system has more than one swap device and swap device has the node
|
|
||||||
information, we can make use of this information to decide which swap
|
|
||||||
device to use in get_swap_pages() to get better performance.
|
|
||||||
|
|
||||||
|
|
||||||
How to use this feature
|
|
||||||
=======================
|
|
||||||
|
|
||||||
Swap device has priority and that decides the order of it to be used. To make
|
|
||||||
use of automatically binding, there is no need to manipulate priority settings
|
|
||||||
for swap devices. e.g. on a 2 node machine, assume 2 swap devices swapA and
|
|
||||||
swapB, with swapA attached to node 0 and swapB attached to node 1, are going
|
|
||||||
to be swapped on. Simply swapping them on by doing::
|
|
||||||
|
|
||||||
# swapon /dev/swapA
|
|
||||||
# swapon /dev/swapB
|
|
||||||
|
|
||||||
Then node 0 will use the two swap devices in the order of swapA then swapB and
|
|
||||||
node 1 will use the two swap devices in the order of swapB then swapA. Note
|
|
||||||
that the order of them being swapped on doesn't matter.
|
|
||||||
|
|
||||||
A more complex example on a 4 node machine. Assume 6 swap devices are going to
|
|
||||||
be swapped on: swapA and swapB are attached to node 0, swapC is attached to
|
|
||||||
node 1, swapD and swapE are attached to node 2 and swapF is attached to node3.
|
|
||||||
The way to swap them on is the same as above::
|
|
||||||
|
|
||||||
# swapon /dev/swapA
|
|
||||||
# swapon /dev/swapB
|
|
||||||
# swapon /dev/swapC
|
|
||||||
# swapon /dev/swapD
|
|
||||||
# swapon /dev/swapE
|
|
||||||
# swapon /dev/swapF
|
|
||||||
|
|
||||||
Then node 0 will use them in the order of::
|
|
||||||
|
|
||||||
swapA/swapB -> swapC -> swapD -> swapE -> swapF
|
|
||||||
|
|
||||||
swapA and swapB will be used in a round robin mode before any other swap device.
|
|
||||||
|
|
||||||
node 1 will use them in the order of::
|
|
||||||
|
|
||||||
swapC -> swapA -> swapB -> swapD -> swapE -> swapF
|
|
||||||
|
|
||||||
node 2 will use them in the order of::
|
|
||||||
|
|
||||||
swapD/swapE -> swapA -> swapB -> swapC -> swapF
|
|
||||||
|
|
||||||
Similaly, swapD and swapE will be used in a round robin mode before any
|
|
||||||
other swap devices.
|
|
||||||
|
|
||||||
node 3 will use them in the order of::
|
|
||||||
|
|
||||||
swapF -> swapA -> swapB -> swapC -> swapD -> swapE
|
|
||||||
|
|
||||||
|
|
||||||
Implementation details
|
|
||||||
======================
|
|
||||||
|
|
||||||
The current code uses a priority based list, swap_avail_list, to decide
|
|
||||||
which swap device to use and if multiple swap devices share the same
|
|
||||||
priority, they are used round robin. This change here replaces the single
|
|
||||||
global swap_avail_list with a per-numa-node list, i.e. for each numa node,
|
|
||||||
it sees its own priority based list of available swap devices. Swap
|
|
||||||
device's priority can be promoted on its matching node's swap_avail_list.
|
|
||||||
|
|
||||||
The current swap device's priority is set as: user can set a >=0 value,
|
|
||||||
or the system will pick one starting from -1 then downwards. The priority
|
|
||||||
value in the swap_avail_list is the negated value of the swap device's
|
|
||||||
due to plist being sorted from low to high. The new policy doesn't change
|
|
||||||
the semantics for priority >=0 cases, the previous starting from -1 then
|
|
||||||
downwards now becomes starting from -2 then downwards and -1 is reserved
|
|
||||||
as the promoted value. So if multiple swap devices are attached to the same
|
|
||||||
node, they will all be promoted to priority -1 on that node's plist and will
|
|
||||||
be used round robin before any other swap devices.
|
|
||||||
|
|
@ -381,6 +381,11 @@ hugepage allocation policy for the tmpfs mount by using the kernel parameter
|
||||||
four valid policies for tmpfs (``always``, ``within_size``, ``advise``,
|
four valid policies for tmpfs (``always``, ``within_size``, ``advise``,
|
||||||
``never``). The tmpfs mount default policy is ``never``.
|
``never``). The tmpfs mount default policy is ``never``.
|
||||||
|
|
||||||
|
Additionally, Kconfig options are available to set the default hugepage
|
||||||
|
policies for shmem (``CONFIG_TRANSPARENT_HUGEPAGE_SHMEM_HUGE_*``) and tmpfs
|
||||||
|
(``CONFIG_TRANSPARENT_HUGEPAGE_TMPFS_HUGE_*``) at build time. Refer to the
|
||||||
|
Kconfig help for more details.
|
||||||
|
|
||||||
In the same manner as ``thp_anon`` controls each supported anonymous THP
|
In the same manner as ``thp_anon`` controls each supported anonymous THP
|
||||||
size, ``thp_shmem`` controls each supported shmem THP size. ``thp_shmem``
|
size, ``thp_shmem`` controls each supported shmem THP size. ``thp_shmem``
|
||||||
has the same format as ``thp_anon``, but also supports the policy
|
has the same format as ``thp_anon``, but also supports the policy
|
||||||
|
|
|
||||||
|
|
@ -59,11 +59,11 @@ returned by the allocation routine and that handle must be mapped before being
|
||||||
accessed. The compressed memory pool grows on demand and shrinks as compressed
|
accessed. The compressed memory pool grows on demand and shrinks as compressed
|
||||||
pages are freed. The pool is not preallocated.
|
pages are freed. The pool is not preallocated.
|
||||||
|
|
||||||
When a swap page is passed from swapout to zswap, zswap maintains a mapping
|
When a swap page is passed from swapout to zswap, zswap maintains a mapping of
|
||||||
of the swap entry, a combination of the swap type and swap offset, to the
|
the swap entry, a combination of the swap type and swap offset, to the zsmalloc
|
||||||
zsmalloc handle that references that compressed swap page. This mapping is
|
handle that references that compressed swap page. This mapping is achieved
|
||||||
achieved with a red-black tree per swap type. The swap offset is the search
|
with an xarray per swap type. The swap offset is the search key for the xarray
|
||||||
key for the tree nodes.
|
nodes.
|
||||||
|
|
||||||
During a page fault on a PTE that is a swap entry, the swapin code calls the
|
During a page fault on a PTE that is a swap entry, the swapin code calls the
|
||||||
zswap load function to decompress the page into the page allocated by the page
|
zswap load function to decompress the page into the page allocated by the page
|
||||||
|
|
|
||||||
|
|
@ -580,6 +580,15 @@ the given CPU as the upper limit for the exit latency of the idle states that
|
||||||
they are allowed to select for that CPU. They should never select any idle
|
they are allowed to select for that CPU. They should never select any idle
|
||||||
states with exit latency beyond that limit.
|
states with exit latency beyond that limit.
|
||||||
|
|
||||||
|
While the above CPU QoS constraints apply to CPU idle time management, user
|
||||||
|
space may also request a CPU system wakeup latency QoS limit, via the
|
||||||
|
`cpu_wakeup_latency` file. This QoS constraint is respected when selecting a
|
||||||
|
suitable idle state for the CPUs, while entering the system-wide suspend-to-idle
|
||||||
|
sleep state, but also to the regular CPU idle time management.
|
||||||
|
|
||||||
|
Note that, the management of the `cpu_wakeup_latency` file works according to
|
||||||
|
the 'cpu_dma_latency' file from user space point of view. Moreover, the unit
|
||||||
|
is also microseconds.
|
||||||
|
|
||||||
Idle States Control Via Kernel Command Line
|
Idle States Control Via Kernel Command Line
|
||||||
===========================================
|
===========================================
|
||||||
|
|
|
||||||
|
|
@ -48,8 +48,9 @@ only way to pass early-configuration-time parameters to it is via the kernel
|
||||||
command line. However, its configuration can be adjusted via ``sysfs`` to a
|
command line. However, its configuration can be adjusted via ``sysfs`` to a
|
||||||
great extent. In some configurations it even is possible to unregister it via
|
great extent. In some configurations it even is possible to unregister it via
|
||||||
``sysfs`` which allows another ``CPUFreq`` scaling driver to be loaded and
|
``sysfs`` which allows another ``CPUFreq`` scaling driver to be loaded and
|
||||||
registered (see `below <status_attr_>`_).
|
registered (see :ref:`below <status_attr>`).
|
||||||
|
|
||||||
|
.. _operation_modes:
|
||||||
|
|
||||||
Operation Modes
|
Operation Modes
|
||||||
===============
|
===============
|
||||||
|
|
@ -62,6 +63,8 @@ a certain performance scaling algorithm. Which of them will be in effect
|
||||||
depends on what kernel command line options are used and on the capabilities of
|
depends on what kernel command line options are used and on the capabilities of
|
||||||
the processor.
|
the processor.
|
||||||
|
|
||||||
|
.. _active_mode:
|
||||||
|
|
||||||
Active Mode
|
Active Mode
|
||||||
-----------
|
-----------
|
||||||
|
|
||||||
|
|
@ -94,6 +97,8 @@ Which of the P-state selection algorithms is used by default depends on the
|
||||||
Namely, if that option is set, the ``performance`` algorithm will be used by
|
Namely, if that option is set, the ``performance`` algorithm will be used by
|
||||||
default, and the other one will be used by default if it is not set.
|
default, and the other one will be used by default if it is not set.
|
||||||
|
|
||||||
|
.. _active_mode_hwp:
|
||||||
|
|
||||||
Active Mode With HWP
|
Active Mode With HWP
|
||||||
~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
|
@ -123,7 +128,7 @@ Energy-Performance Bias (EPB) knob (otherwise), which means that the processor's
|
||||||
internal P-state selection logic is expected to focus entirely on performance.
|
internal P-state selection logic is expected to focus entirely on performance.
|
||||||
|
|
||||||
This will override the EPP/EPB setting coming from the ``sysfs`` interface
|
This will override the EPP/EPB setting coming from the ``sysfs`` interface
|
||||||
(see `Energy vs Performance Hints`_ below). Moreover, any attempts to change
|
(see :ref:`energy_performance_hints` below). Moreover, any attempts to change
|
||||||
the EPP/EPB to a value different from 0 ("performance") via ``sysfs`` in this
|
the EPP/EPB to a value different from 0 ("performance") via ``sysfs`` in this
|
||||||
configuration will be rejected.
|
configuration will be rejected.
|
||||||
|
|
||||||
|
|
@ -192,6 +197,8 @@ This is the default P-state selection algorithm if the
|
||||||
:c:macro:`CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE` kernel configuration option
|
:c:macro:`CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE` kernel configuration option
|
||||||
is not set.
|
is not set.
|
||||||
|
|
||||||
|
.. _passive_mode:
|
||||||
|
|
||||||
Passive Mode
|
Passive Mode
|
||||||
------------
|
------------
|
||||||
|
|
||||||
|
|
@ -289,12 +296,12 @@ Unlike ``_PSS`` objects in the ACPI tables, ``intel_pstate`` always exposes
|
||||||
the entire range of available P-states, including the whole turbo range, to the
|
the entire range of available P-states, including the whole turbo range, to the
|
||||||
``CPUFreq`` core and (in the passive mode) to generic scaling governors. This
|
``CPUFreq`` core and (in the passive mode) to generic scaling governors. This
|
||||||
generally causes turbo P-states to be set more often when ``intel_pstate`` is
|
generally causes turbo P-states to be set more often when ``intel_pstate`` is
|
||||||
used relative to ACPI-based CPU performance scaling (see `below <acpi-cpufreq_>`_
|
used relative to ACPI-based CPU performance scaling (see
|
||||||
for more information).
|
:ref:`below <acpi-cpufreq>` for more information).
|
||||||
|
|
||||||
Moreover, since ``intel_pstate`` always knows what the real turbo threshold is
|
Moreover, since ``intel_pstate`` always knows what the real turbo threshold is
|
||||||
(even if the Configurable TDP feature is enabled in the processor), its
|
(even if the Configurable TDP feature is enabled in the processor), its
|
||||||
``no_turbo`` attribute in ``sysfs`` (described `below <no_turbo_attr_>`_) should
|
``no_turbo`` attribute in ``sysfs`` (described :ref:`below <no_turbo_attr>`) should
|
||||||
work as expected in all cases (that is, if set to disable turbo P-states, it
|
work as expected in all cases (that is, if set to disable turbo P-states, it
|
||||||
always should prevent ``intel_pstate`` from using them).
|
always should prevent ``intel_pstate`` from using them).
|
||||||
|
|
||||||
|
|
@ -307,12 +314,12 @@ pieces of information on it to be known, including:
|
||||||
|
|
||||||
* The minimum supported P-state.
|
* The minimum supported P-state.
|
||||||
|
|
||||||
* The maximum supported `non-turbo P-state <turbo_>`_.
|
* The maximum supported :ref:`non-turbo P-state <turbo>`.
|
||||||
|
|
||||||
* Whether or not turbo P-states are supported at all.
|
* Whether or not turbo P-states are supported at all.
|
||||||
|
|
||||||
* The maximum supported `one-core turbo P-state <turbo_>`_ (if turbo P-states
|
* The maximum supported :ref:`one-core turbo P-state <turbo>` (if turbo
|
||||||
are supported).
|
P-states are supported).
|
||||||
|
|
||||||
* The scaling formula to translate the driver's internal representation
|
* The scaling formula to translate the driver's internal representation
|
||||||
of P-states into frequencies and the other way around.
|
of P-states into frequencies and the other way around.
|
||||||
|
|
@ -400,10 +407,10 @@ Energy-Aware Scheduling Support
|
||||||
|
|
||||||
If ``CONFIG_ENERGY_MODEL`` has been set during kernel configuration and
|
If ``CONFIG_ENERGY_MODEL`` has been set during kernel configuration and
|
||||||
``intel_pstate`` runs on a hybrid processor without SMT, in addition to enabling
|
``intel_pstate`` runs on a hybrid processor without SMT, in addition to enabling
|
||||||
`CAS <CAS_>`_ it registers an Energy Model for the processor. This allows the
|
:ref:`CAS` it registers an Energy Model for the processor. This allows the
|
||||||
Energy-Aware Scheduling (EAS) support to be enabled in the CPU scheduler if
|
Energy-Aware Scheduling (EAS) support to be enabled in the CPU scheduler if
|
||||||
``schedutil`` is used as the ``CPUFreq`` governor which requires ``intel_pstate``
|
``schedutil`` is used as the ``CPUFreq`` governor which requires ``intel_pstate``
|
||||||
to operate in the `passive mode <Passive Mode_>`_.
|
to operate in the :ref:`passive mode <passive_mode>`.
|
||||||
|
|
||||||
The Energy Model registered by ``intel_pstate`` is artificial (that is, it is
|
The Energy Model registered by ``intel_pstate`` is artificial (that is, it is
|
||||||
based on abstract cost values and it does not include any real power numbers)
|
based on abstract cost values and it does not include any real power numbers)
|
||||||
|
|
@ -432,6 +439,8 @@ the ``energy_model`` directory in ``debugfs`` (typlically mounted on
|
||||||
User Space Interface in ``sysfs``
|
User Space Interface in ``sysfs``
|
||||||
=================================
|
=================================
|
||||||
|
|
||||||
|
.. _global_attributes:
|
||||||
|
|
||||||
Global Attributes
|
Global Attributes
|
||||||
-----------------
|
-----------------
|
||||||
|
|
||||||
|
|
@ -444,8 +453,8 @@ argument is passed to the kernel in the command line.
|
||||||
|
|
||||||
``max_perf_pct``
|
``max_perf_pct``
|
||||||
Maximum P-state the driver is allowed to set in percent of the
|
Maximum P-state the driver is allowed to set in percent of the
|
||||||
maximum supported performance level (the highest supported `turbo
|
maximum supported performance level (the highest supported :ref:`turbo
|
||||||
P-state <turbo_>`_).
|
P-state <turbo>`).
|
||||||
|
|
||||||
This attribute will not be exposed if the
|
This attribute will not be exposed if the
|
||||||
``intel_pstate=per_cpu_perf_limits`` argument is present in the kernel
|
``intel_pstate=per_cpu_perf_limits`` argument is present in the kernel
|
||||||
|
|
@ -453,8 +462,8 @@ argument is passed to the kernel in the command line.
|
||||||
|
|
||||||
``min_perf_pct``
|
``min_perf_pct``
|
||||||
Minimum P-state the driver is allowed to set in percent of the
|
Minimum P-state the driver is allowed to set in percent of the
|
||||||
maximum supported performance level (the highest supported `turbo
|
maximum supported performance level (the highest supported :ref:`turbo
|
||||||
P-state <turbo_>`_).
|
P-state <turbo>`).
|
||||||
|
|
||||||
This attribute will not be exposed if the
|
This attribute will not be exposed if the
|
||||||
``intel_pstate=per_cpu_perf_limits`` argument is present in the kernel
|
``intel_pstate=per_cpu_perf_limits`` argument is present in the kernel
|
||||||
|
|
@ -463,18 +472,18 @@ argument is passed to the kernel in the command line.
|
||||||
``num_pstates``
|
``num_pstates``
|
||||||
Number of P-states supported by the processor (between 0 and 255
|
Number of P-states supported by the processor (between 0 and 255
|
||||||
inclusive) including both turbo and non-turbo P-states (see
|
inclusive) including both turbo and non-turbo P-states (see
|
||||||
`Turbo P-states Support`_).
|
:ref:`turbo`).
|
||||||
|
|
||||||
This attribute is present only if the value exposed by it is the same
|
This attribute is present only if the value exposed by it is the same
|
||||||
for all of the CPUs in the system.
|
for all of the CPUs in the system.
|
||||||
|
|
||||||
The value of this attribute is not affected by the ``no_turbo``
|
The value of this attribute is not affected by the ``no_turbo``
|
||||||
setting described `below <no_turbo_attr_>`_.
|
setting described :ref:`below <no_turbo_attr>`.
|
||||||
|
|
||||||
This attribute is read-only.
|
This attribute is read-only.
|
||||||
|
|
||||||
``turbo_pct``
|
``turbo_pct``
|
||||||
Ratio of the `turbo range <turbo_>`_ size to the size of the entire
|
Ratio of the :ref:`turbo range <turbo>` size to the size of the entire
|
||||||
range of supported P-states, in percent.
|
range of supported P-states, in percent.
|
||||||
|
|
||||||
This attribute is present only if the value exposed by it is the same
|
This attribute is present only if the value exposed by it is the same
|
||||||
|
|
@ -486,7 +495,7 @@ argument is passed to the kernel in the command line.
|
||||||
|
|
||||||
``no_turbo``
|
``no_turbo``
|
||||||
If set (equal to 1), the driver is not allowed to set any turbo P-states
|
If set (equal to 1), the driver is not allowed to set any turbo P-states
|
||||||
(see `Turbo P-states Support`_). If unset (equal to 0, which is the
|
(see :ref:`turbo`). If unset (equal to 0, which is the
|
||||||
default), turbo P-states can be set by the driver.
|
default), turbo P-states can be set by the driver.
|
||||||
[Note that ``intel_pstate`` does not support the general ``boost``
|
[Note that ``intel_pstate`` does not support the general ``boost``
|
||||||
attribute (supported by some other scaling drivers) which is replaced
|
attribute (supported by some other scaling drivers) which is replaced
|
||||||
|
|
@ -495,11 +504,11 @@ argument is passed to the kernel in the command line.
|
||||||
This attribute does not affect the maximum supported frequency value
|
This attribute does not affect the maximum supported frequency value
|
||||||
supplied to the ``CPUFreq`` core and exposed via the policy interface,
|
supplied to the ``CPUFreq`` core and exposed via the policy interface,
|
||||||
but it affects the maximum possible value of per-policy P-state limits
|
but it affects the maximum possible value of per-policy P-state limits
|
||||||
(see `Interpretation of Policy Attributes`_ below for details).
|
(see :ref:`policy_attributes_interpretation` below for details).
|
||||||
|
|
||||||
``hwp_dynamic_boost``
|
``hwp_dynamic_boost``
|
||||||
This attribute is only present if ``intel_pstate`` works in the
|
This attribute is only present if ``intel_pstate`` works in the
|
||||||
`active mode with the HWP feature enabled <Active Mode With HWP_>`_ in
|
:ref:`active mode with the HWP feature enabled <active_mode_hwp>` in
|
||||||
the processor. If set (equal to 1), it causes the minimum P-state limit
|
the processor. If set (equal to 1), it causes the minimum P-state limit
|
||||||
to be increased dynamically for a short time whenever a task previously
|
to be increased dynamically for a short time whenever a task previously
|
||||||
waiting on I/O is selected to run on a given logical CPU (the purpose
|
waiting on I/O is selected to run on a given logical CPU (the purpose
|
||||||
|
|
@ -514,12 +523,12 @@ argument is passed to the kernel in the command line.
|
||||||
Operation mode of the driver: "active", "passive" or "off".
|
Operation mode of the driver: "active", "passive" or "off".
|
||||||
|
|
||||||
"active"
|
"active"
|
||||||
The driver is functional and in the `active mode
|
The driver is functional and in the :ref:`active mode
|
||||||
<Active Mode_>`_.
|
<active_mode>`.
|
||||||
|
|
||||||
"passive"
|
"passive"
|
||||||
The driver is functional and in the `passive mode
|
The driver is functional and in the :ref:`passive mode
|
||||||
<Passive Mode_>`_.
|
<passive_mode>`.
|
||||||
|
|
||||||
"off"
|
"off"
|
||||||
The driver is not functional (it is not registered as a scaling
|
The driver is not functional (it is not registered as a scaling
|
||||||
|
|
@ -547,13 +556,15 @@ argument is passed to the kernel in the command line.
|
||||||
attribute to "1" enables the energy-efficiency optimizations and setting
|
attribute to "1" enables the energy-efficiency optimizations and setting
|
||||||
to "0" disables them.
|
to "0" disables them.
|
||||||
|
|
||||||
|
.. _policy_attributes_interpretation:
|
||||||
|
|
||||||
Interpretation of Policy Attributes
|
Interpretation of Policy Attributes
|
||||||
-----------------------------------
|
-----------------------------------
|
||||||
|
|
||||||
The interpretation of some ``CPUFreq`` policy attributes described in
|
The interpretation of some ``CPUFreq`` policy attributes described in
|
||||||
Documentation/admin-guide/pm/cpufreq.rst is special with ``intel_pstate``
|
Documentation/admin-guide/pm/cpufreq.rst is special with ``intel_pstate``
|
||||||
as the current scaling driver and it generally depends on the driver's
|
as the current scaling driver and it generally depends on the driver's
|
||||||
`operation mode <Operation Modes_>`_.
|
:ref:`operation mode <operation_modes>`.
|
||||||
|
|
||||||
First of all, the values of the ``cpuinfo_max_freq``, ``cpuinfo_min_freq`` and
|
First of all, the values of the ``cpuinfo_max_freq``, ``cpuinfo_min_freq`` and
|
||||||
``scaling_cur_freq`` attributes are produced by applying a processor-specific
|
``scaling_cur_freq`` attributes are produced by applying a processor-specific
|
||||||
|
|
@ -562,9 +573,10 @@ Also, the values of the ``scaling_max_freq`` and ``scaling_min_freq``
|
||||||
attributes are capped by the frequency corresponding to the maximum P-state that
|
attributes are capped by the frequency corresponding to the maximum P-state that
|
||||||
the driver is allowed to set.
|
the driver is allowed to set.
|
||||||
|
|
||||||
If the ``no_turbo`` `global attribute <no_turbo_attr_>`_ is set, the driver is
|
If the ``no_turbo`` :ref:`global attribute <no_turbo_attr>` is set, the driver
|
||||||
not allowed to use turbo P-states, so the maximum value of ``scaling_max_freq``
|
is not allowed to use turbo P-states, so the maximum value of
|
||||||
and ``scaling_min_freq`` is limited to the maximum non-turbo P-state frequency.
|
``scaling_max_freq`` and ``scaling_min_freq`` is limited to the maximum
|
||||||
|
non-turbo P-state frequency.
|
||||||
Accordingly, setting ``no_turbo`` causes ``scaling_max_freq`` and
|
Accordingly, setting ``no_turbo`` causes ``scaling_max_freq`` and
|
||||||
``scaling_min_freq`` to go down to that value if they were above it before.
|
``scaling_min_freq`` to go down to that value if they were above it before.
|
||||||
However, the old values of ``scaling_max_freq`` and ``scaling_min_freq`` will be
|
However, the old values of ``scaling_max_freq`` and ``scaling_min_freq`` will be
|
||||||
|
|
@ -576,7 +588,7 @@ and ``scaling_min_freq`` corresponds to the maximum supported turbo P-state,
|
||||||
which also is the value of ``cpuinfo_max_freq`` in either case.
|
which also is the value of ``cpuinfo_max_freq`` in either case.
|
||||||
|
|
||||||
Next, the following policy attributes have special meaning if
|
Next, the following policy attributes have special meaning if
|
||||||
``intel_pstate`` works in the `active mode <Active Mode_>`_:
|
``intel_pstate`` works in the :ref:`active mode <active_mode>`:
|
||||||
|
|
||||||
``scaling_available_governors``
|
``scaling_available_governors``
|
||||||
List of P-state selection algorithms provided by ``intel_pstate``.
|
List of P-state selection algorithms provided by ``intel_pstate``.
|
||||||
|
|
@ -597,20 +609,22 @@ processor:
|
||||||
Shows the base frequency of the CPU. Any frequency above this will be
|
Shows the base frequency of the CPU. Any frequency above this will be
|
||||||
in the turbo frequency range.
|
in the turbo frequency range.
|
||||||
|
|
||||||
The meaning of these attributes in the `passive mode <Passive Mode_>`_ is the
|
The meaning of these attributes in the :ref:`passive mode <passive_mode>` is the
|
||||||
same as for other scaling drivers.
|
same as for other scaling drivers.
|
||||||
|
|
||||||
Additionally, the value of the ``scaling_driver`` attribute for ``intel_pstate``
|
Additionally, the value of the ``scaling_driver`` attribute for ``intel_pstate``
|
||||||
depends on the operation mode of the driver. Namely, it is either
|
depends on the operation mode of the driver. Namely, it is either
|
||||||
"intel_pstate" (in the `active mode <Active Mode_>`_) or "intel_cpufreq" (in the
|
"intel_pstate" (in the :ref:`active mode <active_mode>`) or "intel_cpufreq"
|
||||||
`passive mode <Passive Mode_>`_).
|
(in the :ref:`passive mode <passive_mode>`).
|
||||||
|
|
||||||
|
.. _pstate_limits_coordination:
|
||||||
|
|
||||||
Coordination of P-State Limits
|
Coordination of P-State Limits
|
||||||
------------------------------
|
------------------------------
|
||||||
|
|
||||||
``intel_pstate`` allows P-state limits to be set in two ways: with the help of
|
``intel_pstate`` allows P-state limits to be set in two ways: with the help of
|
||||||
the ``max_perf_pct`` and ``min_perf_pct`` `global attributes
|
the ``max_perf_pct`` and ``min_perf_pct`` :ref:`global attributes
|
||||||
<Global Attributes_>`_ or via the ``scaling_max_freq`` and ``scaling_min_freq``
|
<global_attributes>` or via the ``scaling_max_freq`` and ``scaling_min_freq``
|
||||||
``CPUFreq`` policy attributes. The coordination between those limits is based
|
``CPUFreq`` policy attributes. The coordination between those limits is based
|
||||||
on the following rules, regardless of the current operation mode of the driver:
|
on the following rules, regardless of the current operation mode of the driver:
|
||||||
|
|
||||||
|
|
@ -632,17 +646,18 @@ on the following rules, regardless of the current operation mode of the driver:
|
||||||
|
|
||||||
3. The global and per-policy limits can be set independently.
|
3. The global and per-policy limits can be set independently.
|
||||||
|
|
||||||
In the `active mode with the HWP feature enabled <Active Mode With HWP_>`_, the
|
In the :ref:`active mode with the HWP feature enabled <active_mode_hwp>`, the
|
||||||
resulting effective values are written into hardware registers whenever the
|
resulting effective values are written into hardware registers whenever the
|
||||||
limits change in order to request its internal P-state selection logic to always
|
limits change in order to request its internal P-state selection logic to always
|
||||||
set P-states within these limits. Otherwise, the limits are taken into account
|
set P-states within these limits. Otherwise, the limits are taken into account
|
||||||
by scaling governors (in the `passive mode <Passive Mode_>`_) and by the driver
|
by scaling governors (in the :ref:`passive mode <passive_mode>`) and by the
|
||||||
every time before setting a new P-state for a CPU.
|
driver every time before setting a new P-state for a CPU.
|
||||||
|
|
||||||
Additionally, if the ``intel_pstate=per_cpu_perf_limits`` command line argument
|
Additionally, if the ``intel_pstate=per_cpu_perf_limits`` command line argument
|
||||||
is passed to the kernel, ``max_perf_pct`` and ``min_perf_pct`` are not exposed
|
is passed to the kernel, ``max_perf_pct`` and ``min_perf_pct`` are not exposed
|
||||||
at all and the only way to set the limits is by using the policy attributes.
|
at all and the only way to set the limits is by using the policy attributes.
|
||||||
|
|
||||||
|
.. _energy_performance_hints:
|
||||||
|
|
||||||
Energy vs Performance Hints
|
Energy vs Performance Hints
|
||||||
---------------------------
|
---------------------------
|
||||||
|
|
@ -702,9 +717,9 @@ output.
|
||||||
On those systems each ``_PSS`` object returns a list of P-states supported by
|
On those systems each ``_PSS`` object returns a list of P-states supported by
|
||||||
the corresponding CPU which basically is a subset of the P-states range that can
|
the corresponding CPU which basically is a subset of the P-states range that can
|
||||||
be used by ``intel_pstate`` on the same system, with one exception: the whole
|
be used by ``intel_pstate`` on the same system, with one exception: the whole
|
||||||
`turbo range <turbo_>`_ is represented by one item in it (the topmost one). By
|
:ref:`turbo range <turbo>` is represented by one item in it (the topmost one).
|
||||||
convention, the frequency returned by ``_PSS`` for that item is greater by 1 MHz
|
By convention, the frequency returned by ``_PSS`` for that item is greater by
|
||||||
than the frequency of the highest non-turbo P-state listed by it, but the
|
1 MHz than the frequency of the highest non-turbo P-state listed by it, but the
|
||||||
corresponding P-state representation (following the hardware specification)
|
corresponding P-state representation (following the hardware specification)
|
||||||
returned for it matches the maximum supported turbo P-state (or is the
|
returned for it matches the maximum supported turbo P-state (or is the
|
||||||
special value 255 meaning essentially "go as high as you can get").
|
special value 255 meaning essentially "go as high as you can get").
|
||||||
|
|
@ -730,18 +745,18 @@ benefit from running at turbo frequencies will be given non-turbo P-states
|
||||||
instead.
|
instead.
|
||||||
|
|
||||||
One more issue related to that may appear on systems supporting the
|
One more issue related to that may appear on systems supporting the
|
||||||
`Configurable TDP feature <turbo_>`_ allowing the platform firmware to set the
|
:ref:`Configurable TDP feature <turbo>` allowing the platform firmware to set
|
||||||
turbo threshold. Namely, if that is not coordinated with the lists of P-states
|
the turbo threshold. Namely, if that is not coordinated with the lists of
|
||||||
returned by ``_PSS`` properly, there may be more than one item corresponding to
|
P-states returned by ``_PSS`` properly, there may be more than one item
|
||||||
a turbo P-state in those lists and there may be a problem with avoiding the
|
corresponding to a turbo P-state in those lists and there may be a problem with
|
||||||
turbo range (if desirable or necessary). Usually, to avoid using turbo
|
avoiding the turbo range (if desirable or necessary). Usually, to avoid using
|
||||||
P-states overall, ``acpi-cpufreq`` simply avoids using the topmost state listed
|
turbo P-states overall, ``acpi-cpufreq`` simply avoids using the topmost state
|
||||||
by ``_PSS``, but that is not sufficient when there are other turbo P-states in
|
listed by ``_PSS``, but that is not sufficient when there are other turbo
|
||||||
the list returned by it.
|
P-states in the list returned by it.
|
||||||
|
|
||||||
Apart from the above, ``acpi-cpufreq`` works like ``intel_pstate`` in the
|
Apart from the above, ``acpi-cpufreq`` works like ``intel_pstate`` in the
|
||||||
`passive mode <Passive Mode_>`_, except that the number of P-states it can set
|
:ref:`passive mode <passive_mode>`, except that the number of P-states it can
|
||||||
is limited to the ones listed by the ACPI ``_PSS`` objects.
|
set is limited to the ones listed by the ACPI ``_PSS`` objects.
|
||||||
|
|
||||||
|
|
||||||
Kernel Command Line Options for ``intel_pstate``
|
Kernel Command Line Options for ``intel_pstate``
|
||||||
|
|
@ -756,11 +771,11 @@ of them have to be prepended with the ``intel_pstate=`` prefix.
|
||||||
processor is supported by it.
|
processor is supported by it.
|
||||||
|
|
||||||
``active``
|
``active``
|
||||||
Register ``intel_pstate`` in the `active mode <Active Mode_>`_ to start
|
Register ``intel_pstate`` in the :ref:`active mode <active_mode>` to
|
||||||
with.
|
start with.
|
||||||
|
|
||||||
``passive``
|
``passive``
|
||||||
Register ``intel_pstate`` in the `passive mode <Passive Mode_>`_ to
|
Register ``intel_pstate`` in the :ref:`passive mode <passive_mode>` to
|
||||||
start with.
|
start with.
|
||||||
|
|
||||||
``force``
|
``force``
|
||||||
|
|
@ -793,12 +808,12 @@ of them have to be prepended with the ``intel_pstate=`` prefix.
|
||||||
and this option has no effect.
|
and this option has no effect.
|
||||||
|
|
||||||
``per_cpu_perf_limits``
|
``per_cpu_perf_limits``
|
||||||
Use per-logical-CPU P-State limits (see `Coordination of P-state
|
Use per-logical-CPU P-State limits (see
|
||||||
Limits`_ for details).
|
:ref:`pstate_limits_coordination` for details).
|
||||||
|
|
||||||
``no_cas``
|
``no_cas``
|
||||||
Do not enable `capacity-aware scheduling <CAS_>`_ which is enabled by
|
Do not enable :ref:`capacity-aware scheduling <CAS>` which is enabled
|
||||||
default on hybrid systems without SMT.
|
by default on hybrid systems without SMT.
|
||||||
|
|
||||||
Diagnostics and Tuning
|
Diagnostics and Tuning
|
||||||
======================
|
======================
|
||||||
|
|
@ -810,7 +825,7 @@ There are two static trace events that can be used for ``intel_pstate``
|
||||||
diagnostics. One of them is the ``cpu_frequency`` trace event generally used
|
diagnostics. One of them is the ``cpu_frequency`` trace event generally used
|
||||||
by ``CPUFreq``, and the other one is the ``pstate_sample`` trace event specific
|
by ``CPUFreq``, and the other one is the ``pstate_sample`` trace event specific
|
||||||
to ``intel_pstate``. Both of them are triggered by ``intel_pstate`` only if
|
to ``intel_pstate``. Both of them are triggered by ``intel_pstate`` only if
|
||||||
it works in the `active mode <Active Mode_>`_.
|
it works in the :ref:`active mode <active_mode>`.
|
||||||
|
|
||||||
The following sequence of shell commands can be used to enable them and see
|
The following sequence of shell commands can be used to enable them and see
|
||||||
their output (if the kernel is generally configured to support event tracing)::
|
their output (if the kernel is generally configured to support event tracing)::
|
||||||
|
|
@ -822,7 +837,7 @@ their output (if the kernel is generally configured to support event tracing)::
|
||||||
gnome-terminal--4510 [001] ..s. 1177.680733: pstate_sample: core_busy=107 scaled=94 from=26 to=26 mperf=1143818 aperf=1230607 tsc=29838618 freq=2474476
|
gnome-terminal--4510 [001] ..s. 1177.680733: pstate_sample: core_busy=107 scaled=94 from=26 to=26 mperf=1143818 aperf=1230607 tsc=29838618 freq=2474476
|
||||||
cat-5235 [002] ..s. 1177.681723: cpu_frequency: state=2900000 cpu_id=2
|
cat-5235 [002] ..s. 1177.681723: cpu_frequency: state=2900000 cpu_id=2
|
||||||
|
|
||||||
If ``intel_pstate`` works in the `passive mode <Passive Mode_>`_, the
|
If ``intel_pstate`` works in the :ref:`passive mode <passive_mode>`, the
|
||||||
``cpu_frequency`` trace event will be triggered either by the ``schedutil``
|
``cpu_frequency`` trace event will be triggered either by the ``schedutil``
|
||||||
scaling governor (for the policies it is attached to), or by the ``CPUFreq``
|
scaling governor (for the policies it is attached to), or by the ``CPUFreq``
|
||||||
core (for the policies with other scaling governors).
|
core (for the policies with other scaling governors).
|
||||||
|
|
|
||||||
|
|
@ -397,13 +397,14 @@ a hung task is detected.
|
||||||
hung_task_panic
|
hung_task_panic
|
||||||
===============
|
===============
|
||||||
|
|
||||||
Controls the kernel's behavior when a hung task is detected.
|
When set to a non-zero value, a kernel panic will be triggered if the
|
||||||
|
number of hung tasks found during a single scan reaches this value.
|
||||||
This file shows up if ``CONFIG_DETECT_HUNG_TASK`` is enabled.
|
This file shows up if ``CONFIG_DETECT_HUNG_TASK`` is enabled.
|
||||||
|
|
||||||
= =================================================
|
= =======================================================
|
||||||
0 Continue operation. This is the default behavior.
|
0 Continue operation. This is the default behavior.
|
||||||
1 Panic immediately.
|
N Panic when N hung tasks are found during a single scan.
|
||||||
= =================================================
|
= =======================================================
|
||||||
|
|
||||||
|
|
||||||
hung_task_check_count
|
hung_task_check_count
|
||||||
|
|
@ -421,6 +422,11 @@ the system boot.
|
||||||
|
|
||||||
This file shows up if ``CONFIG_DETECT_HUNG_TASK`` is enabled.
|
This file shows up if ``CONFIG_DETECT_HUNG_TASK`` is enabled.
|
||||||
|
|
||||||
|
hung_task_sys_info
|
||||||
|
==================
|
||||||
|
A comma separated list of extra system information to be dumped when
|
||||||
|
hung task is detected, for example, "tasks,mem,timers,locks,...".
|
||||||
|
Refer 'panic_sys_info' section below for more details.
|
||||||
|
|
||||||
hung_task_timeout_secs
|
hung_task_timeout_secs
|
||||||
======================
|
======================
|
||||||
|
|
@ -515,6 +521,15 @@ default), only processes with the CAP_SYS_ADMIN capability may create
|
||||||
io_uring instances.
|
io_uring instances.
|
||||||
|
|
||||||
|
|
||||||
|
kernel_sys_info
|
||||||
|
===============
|
||||||
|
A comma separated list of extra system information to be dumped when
|
||||||
|
soft/hard lockup is detected, for example, "tasks,mem,timers,locks,...".
|
||||||
|
Refer 'panic_sys_info' section below for more details.
|
||||||
|
|
||||||
|
It serves as the default kernel control knob, which will take effect
|
||||||
|
when a kernel module calls sys_info() with parameter==0.
|
||||||
|
|
||||||
kexec_load_disabled
|
kexec_load_disabled
|
||||||
===================
|
===================
|
||||||
|
|
||||||
|
|
@ -576,6 +591,11 @@ if leaking kernel pointer values to unprivileged users is a concern.
|
||||||
When ``kptr_restrict`` is set to 2, kernel pointers printed using
|
When ``kptr_restrict`` is set to 2, kernel pointers printed using
|
||||||
%pK will be replaced with 0s regardless of privileges.
|
%pK will be replaced with 0s regardless of privileges.
|
||||||
|
|
||||||
|
softlockup_sys_info & hardlockup_sys_info
|
||||||
|
=========================================
|
||||||
|
A comma separated list of extra system information to be dumped when
|
||||||
|
soft/hard lockup is detected, for example, "tasks,mem,timers,locks,...".
|
||||||
|
Refer 'panic_sys_info' section below for more details.
|
||||||
|
|
||||||
modprobe
|
modprobe
|
||||||
========
|
========
|
||||||
|
|
@ -910,8 +930,8 @@ to 'panic_print'. Possible values are:
|
||||||
============= ===================================================
|
============= ===================================================
|
||||||
tasks print all tasks info
|
tasks print all tasks info
|
||||||
mem print system memory info
|
mem print system memory info
|
||||||
timer print timers info
|
timers print timers info
|
||||||
lock print locks info if CONFIG_LOCKDEP is on
|
locks print locks info if CONFIG_LOCKDEP is on
|
||||||
ftrace print ftrace buffer
|
ftrace print ftrace buffer
|
||||||
all_bt print all CPUs backtrace (if available in the arch)
|
all_bt print all CPUs backtrace (if available in the arch)
|
||||||
blocked_tasks print only tasks in uninterruptible (blocked) state
|
blocked_tasks print only tasks in uninterruptible (blocked) state
|
||||||
|
|
|
||||||
|
|
@ -212,6 +212,14 @@ mem_pcpu_rsv
|
||||||
|
|
||||||
Per-cpu reserved forward alloc cache size in page units. Default 1MB per CPU.
|
Per-cpu reserved forward alloc cache size in page units. Default 1MB per CPU.
|
||||||
|
|
||||||
|
bypass_prot_mem
|
||||||
|
---------------
|
||||||
|
|
||||||
|
Skip charging socket buffers to the global per-protocol memory
|
||||||
|
accounting controlled by net.ipv4.tcp_mem, net.ipv4.udp_mem, etc.
|
||||||
|
|
||||||
|
Default: 0 (off)
|
||||||
|
|
||||||
rmem_default
|
rmem_default
|
||||||
------------
|
------------
|
||||||
|
|
||||||
|
|
@ -347,9 +355,9 @@ skb_defer_max
|
||||||
-------------
|
-------------
|
||||||
|
|
||||||
Max size (in skbs) of the per-cpu list of skbs being freed
|
Max size (in skbs) of the per-cpu list of skbs being freed
|
||||||
by the cpu which allocated them. Used by TCP stack so far.
|
by the cpu which allocated them.
|
||||||
|
|
||||||
Default: 64
|
Default: 128
|
||||||
|
|
||||||
optmem_max
|
optmem_max
|
||||||
----------
|
----------
|
||||||
|
|
@ -406,6 +414,23 @@ to SOCK_TXREHASH_DEFAULT (i. e. not overridden by setsockopt).
|
||||||
If set to 1 (default), hash rethink is performed on listening socket.
|
If set to 1 (default), hash rethink is performed on listening socket.
|
||||||
If set to 0, hash rethink is not performed.
|
If set to 0, hash rethink is not performed.
|
||||||
|
|
||||||
|
txq_reselection_ms
|
||||||
|
------------------
|
||||||
|
|
||||||
|
Controls how often (in ms) a busy connected flow can select another tx queue.
|
||||||
|
|
||||||
|
A resection is desirable when/if user thread has migrated and XPS
|
||||||
|
would select a different queue. Same can occur without XPS
|
||||||
|
if the flow hash has changed.
|
||||||
|
|
||||||
|
But switching txq can introduce reorders, especially if the
|
||||||
|
old queue is under high pressure. Modern TCP stacks deal
|
||||||
|
well with reorders if they happen not too often.
|
||||||
|
|
||||||
|
To disable this feature, set the value to 0.
|
||||||
|
|
||||||
|
Default : 1000
|
||||||
|
|
||||||
gro_normal_batch
|
gro_normal_batch
|
||||||
----------------
|
----------------
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -186,6 +186,6 @@ More detailed explanation for tainting
|
||||||
|
|
||||||
18) ``N`` if an in-kernel test, such as a KUnit test, has been run.
|
18) ``N`` if an in-kernel test, such as a KUnit test, has been run.
|
||||||
|
|
||||||
19) ``J`` if userpace opened /dev/fwctl/* and performed a FWTCL_RPC_DEBUG_WRITE
|
19) ``J`` if userspace opened /dev/fwctl/* and performed a FWTCL_RPC_DEBUG_WRITE
|
||||||
to use the devices debugging features. Device debugging features could
|
to use the devices debugging features. Device debugging features could
|
||||||
cause the device to malfunction in undefined ways.
|
cause the device to malfunction in undefined ways.
|
||||||
|
|
|
||||||
|
|
@ -6,3 +6,4 @@ Thermal Subsystem
|
||||||
:maxdepth: 1
|
:maxdepth: 1
|
||||||
|
|
||||||
intel_powerclamp
|
intel_powerclamp
|
||||||
|
intel_thermal_throttle
|
||||||
|
|
|
||||||
91
Documentation/admin-guide/thermal/intel_thermal_throttle.rst
Normal file
91
Documentation/admin-guide/thermal/intel_thermal_throttle.rst
Normal file
|
|
@ -0,0 +1,91 @@
|
||||||
|
.. SPDX-License-Identifier: GPL-2.0
|
||||||
|
.. include:: <isonum.txt>
|
||||||
|
|
||||||
|
=======================================
|
||||||
|
Intel thermal throttle events reporting
|
||||||
|
=======================================
|
||||||
|
|
||||||
|
:Author: Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
|
||||||
|
|
||||||
|
Introduction
|
||||||
|
------------
|
||||||
|
|
||||||
|
Intel processors have built in automatic and adaptive thermal monitoring
|
||||||
|
mechanisms that force the processor to reduce its power consumption in order
|
||||||
|
to operate within predetermined temperature limits.
|
||||||
|
|
||||||
|
Refer to section "THERMAL MONITORING AND PROTECTION" in the "Intel® 64 and
|
||||||
|
IA-32 Architectures Software Developer’s Manual Volume 3 (3A, 3B, 3C, & 3D):
|
||||||
|
System Programming Guide" for more details.
|
||||||
|
|
||||||
|
In general, there are two mechanisms to control the core temperature of the
|
||||||
|
processor. They are called "Thermal Monitor 1 (TM1) and Thermal Monitor 2 (TM2)".
|
||||||
|
|
||||||
|
The status of the temperature sensor that triggers the thermal monitor (TM1/TM2)
|
||||||
|
is indicated through the "thermal status flag" and "thermal status log flag" in
|
||||||
|
MSR_IA32_THERM_STATUS for core level and MSR_IA32_PACKAGE_THERM_STATUS for
|
||||||
|
package level.
|
||||||
|
|
||||||
|
Thermal Status flag, bit 0 — When set, indicates that the processor core
|
||||||
|
temperature is currently at the trip temperature of the thermal monitor and that
|
||||||
|
the processor power consumption is being reduced via either TM1 or TM2, depending
|
||||||
|
on which is enabled. When clear, the flag indicates that the core temperature is
|
||||||
|
below the thermal monitor trip temperature. This flag is read only.
|
||||||
|
|
||||||
|
Thermal Status Log flag, bit 1 — When set, indicates that the thermal sensor has
|
||||||
|
tripped since the last power-up or reset or since the last time that software
|
||||||
|
cleared this flag. This flag is a sticky bit; once set it remains set until
|
||||||
|
cleared by software or until a power-up or reset of the processor. The default
|
||||||
|
state is clear.
|
||||||
|
|
||||||
|
It is possible that when user reads MSR_IA32_THERM_STATUS or
|
||||||
|
MSR_IA32_PACKAGE_THERM_STATUS, TM1/TM2 is not active. In this case,
|
||||||
|
"Thermal Status flag" will read "0" and the "Thermal Status Log flag" will be set
|
||||||
|
to show any previous "TM1/TM2" activation. But since it needs to be cleared by
|
||||||
|
the software, it can't show the number of occurrences of "TM1/TM2" activations.
|
||||||
|
|
||||||
|
Hence, Linux provides counters of how many times the "Thermal Status flag" was
|
||||||
|
set. Also presents how long the "Thermal Status flag" was active in milliseconds.
|
||||||
|
Using these counters, users can check if the performance was limited because of
|
||||||
|
thermal events. It is recommended to read from sysfs instead of directly reading
|
||||||
|
MSRs as the "Thermal Status Log flag" is reset by the driver to implement rate
|
||||||
|
control.
|
||||||
|
|
||||||
|
Sysfs Interface
|
||||||
|
---------------
|
||||||
|
|
||||||
|
Thermal throttling events are presented for each CPU under
|
||||||
|
"/sys/devices/system/cpu/cpuX/thermal_throttle/", where "X" is the CPU number.
|
||||||
|
|
||||||
|
All these counters are read-only. They can't be reset to 0. So, they can potentially
|
||||||
|
overflow after reaching the maximum 64 bit unsigned integer.
|
||||||
|
|
||||||
|
``core_throttle_count``
|
||||||
|
Shows the number of times "Thermal Status flag" changed from 0 to 1 for this
|
||||||
|
CPU since OS boot and thermal vector is initialized. This is a 64 bit counter.
|
||||||
|
|
||||||
|
``package_throttle_count``
|
||||||
|
Shows the number of times "Thermal Status flag" changed from 0 to 1 for the
|
||||||
|
package containing this CPU since OS boot and thermal vector is initialized.
|
||||||
|
Package status is broadcast to all CPUs; all CPUs in the package increment
|
||||||
|
this count. This is a 64-bit counter.
|
||||||
|
|
||||||
|
``core_throttle_max_time_ms``
|
||||||
|
Shows the maximum amount of time for which "Thermal Status flag" has been
|
||||||
|
set to 1 for this CPU at the core level since OS boot and thermal vector
|
||||||
|
is initialized.
|
||||||
|
|
||||||
|
``package_throttle_max_time_ms``
|
||||||
|
Shows the maximum amount of time for which "Thermal Status flag" has been
|
||||||
|
set to 1 for the package containing this CPU since OS boot and thermal
|
||||||
|
vector is initialized.
|
||||||
|
|
||||||
|
``core_throttle_total_time_ms``
|
||||||
|
Shows the cumulative time for which "Thermal Status flag" has been
|
||||||
|
set to 1 for this CPU for core level since OS boot and thermal vector
|
||||||
|
is initialized.
|
||||||
|
|
||||||
|
``package_throttle_total_time_ms``
|
||||||
|
Shows the cumulative time for which "Thermal Status flag" has been set
|
||||||
|
to 1 for the package containing this CPU since OS boot and thermal vector
|
||||||
|
is initialized.
|
||||||
|
|
@ -203,10 +203,10 @@ host controller or a device, it is important that the firmware can be
|
||||||
upgraded to the latest where possible bugs in it have been fixed.
|
upgraded to the latest where possible bugs in it have been fixed.
|
||||||
Typically OEMs provide this firmware from their support site.
|
Typically OEMs provide this firmware from their support site.
|
||||||
|
|
||||||
There is also a central site which has links where to download firmware
|
Currently, recommended method of updating firmware is through "fwupd" tool.
|
||||||
for some machines:
|
It uses LVFS (Linux Vendor Firmware Service) portal by default to get the
|
||||||
|
latest firmware from hardware vendors and updates connected devices if found
|
||||||
`Thunderbolt Updates <https://thunderbolttechnology.net/updates>`_
|
compatible. For details refer to: https://github.com/fwupd/fwupd.
|
||||||
|
|
||||||
Before you upgrade firmware on a device, host or retimer, please make
|
Before you upgrade firmware on a device, host or retimer, please make
|
||||||
sure it is a suitable upgrade. Failing to do that may render the device
|
sure it is a suitable upgrade. Failing to do that may render the device
|
||||||
|
|
@ -215,18 +215,40 @@ tools!
|
||||||
|
|
||||||
Host NVM upgrade on Apple Macs is not supported.
|
Host NVM upgrade on Apple Macs is not supported.
|
||||||
|
|
||||||
Once the NVM image has been downloaded, you need to plug in a
|
Fwupd is installed by default. If you don't have it on your system, simply
|
||||||
Thunderbolt device so that the host controller appears. It does not
|
use your distro package manager to get it.
|
||||||
matter which device is connected (unless you are upgrading NVM on a
|
|
||||||
device - then you need to connect that particular device).
|
To see possible updates through fwupd, you need to plug in a Thunderbolt
|
||||||
|
device so that the host controller appears. It does not matter which
|
||||||
|
device is connected (unless you are upgrading NVM on a device - then you
|
||||||
|
need to connect that particular device).
|
||||||
|
|
||||||
Note an OEM-specific method to power the controller up ("force power") may
|
Note an OEM-specific method to power the controller up ("force power") may
|
||||||
be available for your system in which case there is no need to plug in a
|
be available for your system in which case there is no need to plug in a
|
||||||
Thunderbolt device.
|
Thunderbolt device.
|
||||||
|
|
||||||
After that we can write the firmware to the non-active parts of the NVM
|
Updating firmware using fwupd is straightforward - refer to official
|
||||||
of the host or device. As an example here is how Intel NUC6i7KYK (Skull
|
readme on fwupd github.
|
||||||
Canyon) Thunderbolt controller NVM is upgraded::
|
|
||||||
|
If firmware image is written successfully, the device shortly disappears.
|
||||||
|
Once it comes back, the driver notices it and initiates a full power
|
||||||
|
cycle. After a while device appears again and this time it should be
|
||||||
|
fully functional.
|
||||||
|
|
||||||
|
Device of interest should display new version under "Current version"
|
||||||
|
and "Update State: Success" in fwupd's interface.
|
||||||
|
|
||||||
|
Upgrading firmware manually
|
||||||
|
---------------------------------------------------------------
|
||||||
|
If possible, use fwupd to updated the firmware. However, if your device OEM
|
||||||
|
has not uploaded the firmware to LVFS, but it is available for download
|
||||||
|
from their side, you can use method below to directly upgrade the
|
||||||
|
firmware.
|
||||||
|
|
||||||
|
Manual firmware update can be done with 'dd' tool. To update firmware
|
||||||
|
using this method, you need to write it to the non-active parts of NVM
|
||||||
|
of the host or device. Example on how to update Intel NUC6i7KYK
|
||||||
|
(Skull Canyon) Thunderbolt controller NVM::
|
||||||
|
|
||||||
# dd if=KYK_TBT_FW_0018.bin of=/sys/bus/thunderbolt/devices/0-0/nvm_non_active0/nvmem
|
# dd if=KYK_TBT_FW_0018.bin of=/sys/bus/thunderbolt/devices/0-0/nvm_non_active0/nvmem
|
||||||
|
|
||||||
|
|
@ -235,10 +257,8 @@ upgrade process as follows::
|
||||||
|
|
||||||
# echo 1 > /sys/bus/thunderbolt/devices/0-0/nvm_authenticate
|
# echo 1 > /sys/bus/thunderbolt/devices/0-0/nvm_authenticate
|
||||||
|
|
||||||
If no errors are returned, the host controller shortly disappears. Once
|
If no errors are returned, device should behave as described in previous
|
||||||
it comes back the driver notices it and initiates a full power cycle.
|
section.
|
||||||
After a while the host controller appears again and this time it should
|
|
||||||
be fully functional.
|
|
||||||
|
|
||||||
We can verify that the new NVM firmware is active by running the following
|
We can verify that the new NVM firmware is active by running the following
|
||||||
commands::
|
commands::
|
||||||
|
|
|
||||||
|
|
@ -196,11 +196,11 @@ Let’s checkout the latest Linux repository and build cscope database::
|
||||||
cscope -R -p10 # builds cscope.out database before starting browse session
|
cscope -R -p10 # builds cscope.out database before starting browse session
|
||||||
cscope -d -p10 # starts browse session on cscope.out database
|
cscope -d -p10 # starts browse session on cscope.out database
|
||||||
|
|
||||||
Note: Run "cscope -R -p10" to build the database and c"scope -d -p10" to
|
Note: Run "cscope -R -p10" to build the database and "cscope -d -p10" to
|
||||||
enter into the browsing session. cscope by default cscope.out database.
|
enter into the browsing session. cscope by default uses the cscope.out
|
||||||
To get out of this mode press ctrl+d. -p option is used to specify the
|
database. To get out of this mode press ctrl+d. -p option is used to
|
||||||
number of file path components to display. -p10 is optimal for browsing
|
specify the number of file path components to display. -p10 is optimal
|
||||||
kernel sources.
|
for browsing kernel sources.
|
||||||
|
|
||||||
What is perf and how do we use it?
|
What is perf and how do we use it?
|
||||||
==================================
|
==================================
|
||||||
|
|
|
||||||
|
|
@ -391,13 +391,13 @@ Before jumping into the kernel, the following conditions must be met:
|
||||||
- SMCR_EL2.LEN must be initialised to the same value for all CPUs the
|
- SMCR_EL2.LEN must be initialised to the same value for all CPUs the
|
||||||
kernel will execute on.
|
kernel will execute on.
|
||||||
|
|
||||||
- HWFGRTR_EL2.nTPIDR2_EL0 (bit 55) must be initialised to 0b01.
|
- HFGRTR_EL2.nTPIDR2_EL0 (bit 55) must be initialised to 0b01.
|
||||||
|
|
||||||
- HWFGWTR_EL2.nTPIDR2_EL0 (bit 55) must be initialised to 0b01.
|
- HFGWTR_EL2.nTPIDR2_EL0 (bit 55) must be initialised to 0b01.
|
||||||
|
|
||||||
- HWFGRTR_EL2.nSMPRI_EL1 (bit 54) must be initialised to 0b01.
|
- HFGRTR_EL2.nSMPRI_EL1 (bit 54) must be initialised to 0b01.
|
||||||
|
|
||||||
- HWFGWTR_EL2.nSMPRI_EL1 (bit 54) must be initialised to 0b01.
|
- HFGWTR_EL2.nSMPRI_EL1 (bit 54) must be initialised to 0b01.
|
||||||
|
|
||||||
For CPUs with the Scalable Matrix Extension FA64 feature (FEAT_SME_FA64):
|
For CPUs with the Scalable Matrix Extension FA64 feature (FEAT_SME_FA64):
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -402,6 +402,11 @@ The regset data starts with struct user_sve_header, containing:
|
||||||
streaming mode and any SETREGSET of NT_ARM_SSVE will enter streaming mode
|
streaming mode and any SETREGSET of NT_ARM_SSVE will enter streaming mode
|
||||||
if the target was not in streaming mode.
|
if the target was not in streaming mode.
|
||||||
|
|
||||||
|
* On systems that do not support SVE it is permitted to use SETREGSET to
|
||||||
|
write SVE_PT_REGS_FPSIMD formatted data via NT_ARM_SVE, in this case the
|
||||||
|
vector length should be specified as 0. This allows streaming mode to be
|
||||||
|
disabled on systems with SME but not SVE.
|
||||||
|
|
||||||
* If any register data is provided along with SVE_PT_VL_ONEXEC then the
|
* If any register data is provided along with SVE_PT_VL_ONEXEC then the
|
||||||
registers data will be interpreted with the current vector length, not
|
registers data will be interpreted with the current vector length, not
|
||||||
the vector length configured for use on exec.
|
the vector length configured for use on exec.
|
||||||
|
|
|
||||||
|
|
@ -249,6 +249,9 @@ The following keys are defined:
|
||||||
defined in the in the RISC-V ISA manual starting from commit e87412e621f1
|
defined in the in the RISC-V ISA manual starting from commit e87412e621f1
|
||||||
("integrate Zaamo and Zalrsc text (#1304)").
|
("integrate Zaamo and Zalrsc text (#1304)").
|
||||||
|
|
||||||
|
* :c:macro:`RISCV_HWPROBE_EXT_ZALASR`: The Zalasr extension is supported as
|
||||||
|
frozen at commit 194f0094 ("Version 0.9 for freeze") of riscv-zalasr.
|
||||||
|
|
||||||
* :c:macro:`RISCV_HWPROBE_EXT_ZALRSC`: The Zalrsc extension is supported as
|
* :c:macro:`RISCV_HWPROBE_EXT_ZALRSC`: The Zalrsc extension is supported as
|
||||||
defined in the in the RISC-V ISA manual starting from commit e87412e621f1
|
defined in the in the RISC-V ISA manual starting from commit e87412e621f1
|
||||||
("integrate Zaamo and Zalrsc text (#1304)").
|
("integrate Zaamo and Zalrsc text (#1304)").
|
||||||
|
|
@ -275,6 +278,9 @@ The following keys are defined:
|
||||||
ratified in commit 49f49c842ff9 ("Update to Rafified state") of
|
ratified in commit 49f49c842ff9 ("Update to Rafified state") of
|
||||||
riscv-zabha.
|
riscv-zabha.
|
||||||
|
|
||||||
|
* :c:macro:`RISCV_HWPROBE_EXT_ZICBOP`: The Zicbop extension is supported, as
|
||||||
|
ratified in commit 3dd606f ("Create cmobase-v1.0.pdf") of riscv-CMOs.
|
||||||
|
|
||||||
* :c:macro:`RISCV_HWPROBE_KEY_CPUPERF_0`: Deprecated. Returns similar values to
|
* :c:macro:`RISCV_HWPROBE_KEY_CPUPERF_0`: Deprecated. Returns similar values to
|
||||||
:c:macro:`RISCV_HWPROBE_KEY_MISALIGNED_SCALAR_PERF`, but the key was
|
:c:macro:`RISCV_HWPROBE_KEY_MISALIGNED_SCALAR_PERF`, but the key was
|
||||||
mistakenly classified as a bitmask rather than a value.
|
mistakenly classified as a bitmask rather than a value.
|
||||||
|
|
@ -369,4 +375,7 @@ The following keys are defined:
|
||||||
|
|
||||||
* :c:macro:`RISCV_HWPROBE_VENDOR_EXT_XSFVFWMACCQQQ`: The Xsfvfwmaccqqq
|
* :c:macro:`RISCV_HWPROBE_VENDOR_EXT_XSFVFWMACCQQQ`: The Xsfvfwmaccqqq
|
||||||
vendor extension is supported in version 1.0 of Matrix Multiply Accumulate
|
vendor extension is supported in version 1.0 of Matrix Multiply Accumulate
|
||||||
Instruction Extensions Specification.
|
Instruction Extensions Specification.
|
||||||
|
|
||||||
|
* :c:macro:`RISCV_HWPROBE_KEY_ZICBOP_BLOCK_SIZE`: An unsigned int which
|
||||||
|
represents the size of the Zicbop block in bytes.
|
||||||
|
|
|
||||||
|
|
@ -243,9 +243,8 @@ Examples:
|
||||||
|
|
||||||
Changing the size of debug areas
|
Changing the size of debug areas
|
||||||
------------------------------------
|
------------------------------------
|
||||||
It is possible the change the size of debug areas through piping
|
To resize a debug area, write the desired page count to the "pages" file.
|
||||||
the number of pages to the debugfs file "pages". The resize request will
|
Existing data is preserved if it fits; otherwise, oldest entries are dropped.
|
||||||
also flush the debug areas.
|
|
||||||
|
|
||||||
Example:
|
Example:
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -416,7 +416,7 @@ Offset/size: 0x210/1
|
||||||
Protocol: 2.00+
|
Protocol: 2.00+
|
||||||
============ ==================
|
============ ==================
|
||||||
|
|
||||||
If your boot loader has an assigned id (see table below), enter
|
If your boot loader has an assigned ID (see table below), enter
|
||||||
0xTV here, where T is an identifier for the boot loader and V is
|
0xTV here, where T is an identifier for the boot loader and V is
|
||||||
a version number. Otherwise, enter 0xFF here.
|
a version number. Otherwise, enter 0xFF here.
|
||||||
|
|
||||||
|
|
@ -431,31 +431,31 @@ Protocol: 2.00+
|
||||||
ext_loader_type <- 0x05
|
ext_loader_type <- 0x05
|
||||||
ext_loader_ver <- 0x23
|
ext_loader_ver <- 0x23
|
||||||
|
|
||||||
Assigned boot loader ids (hexadecimal):
|
Assigned boot loader IDs:
|
||||||
|
|
||||||
== =======================================
|
== =======================================
|
||||||
0 LILO
|
0x0 LILO
|
||||||
(0x00 reserved for pre-2.00 bootloader)
|
(0x00 reserved for pre-2.00 bootloader)
|
||||||
1 Loadlin
|
0x1 Loadlin
|
||||||
2 bootsect-loader
|
0x2 bootsect-loader
|
||||||
(0x20, all other values reserved)
|
(0x20, all other values reserved)
|
||||||
3 Syslinux
|
0x3 Syslinux
|
||||||
4 Etherboot/gPXE/iPXE
|
0x4 Etherboot/gPXE/iPXE
|
||||||
5 ELILO
|
0x5 ELILO
|
||||||
7 GRUB
|
0x7 GRUB
|
||||||
8 U-Boot
|
0x8 U-Boot
|
||||||
9 Xen
|
0x9 Xen
|
||||||
A Gujin
|
0xA Gujin
|
||||||
B Qemu
|
0xB Qemu
|
||||||
C Arcturus Networks uCbootloader
|
0xC Arcturus Networks uCbootloader
|
||||||
D kexec-tools
|
0xD kexec-tools
|
||||||
E Extended (see ext_loader_type)
|
0xE Extended (see ext_loader_type)
|
||||||
F Special (0xFF = undefined)
|
0xF Special (0xFF = undefined)
|
||||||
10 Reserved
|
0x10 Reserved
|
||||||
11 Minimal Linux Bootloader
|
0x11 Minimal Linux Bootloader
|
||||||
<http://sebastian-plotz.blogspot.de>
|
<http://sebastian-plotz.blogspot.de>
|
||||||
12 OVMF UEFI virtualization stack
|
0x12 OVMF UEFI virtualization stack
|
||||||
13 barebox
|
0x13 barebox
|
||||||
== =======================================
|
== =======================================
|
||||||
|
|
||||||
Please contact <hpa@zytor.com> if you need a bootloader ID value assigned.
|
Please contact <hpa@zytor.com> if you need a bootloader ID value assigned.
|
||||||
|
|
@ -1431,12 +1431,34 @@ The boot loader *must* fill out the following fields in bp::
|
||||||
All other fields should be zero.
|
All other fields should be zero.
|
||||||
|
|
||||||
.. note::
|
.. note::
|
||||||
The EFI Handover Protocol is deprecated in favour of the ordinary PE/COFF
|
The EFI Handover Protocol is deprecated in favour of the ordinary PE/COFF
|
||||||
entry point, combined with the LINUX_EFI_INITRD_MEDIA_GUID based initrd
|
entry point described below.
|
||||||
loading protocol (refer to [0] for an example of the bootloader side of
|
|
||||||
this), which removes the need for any knowledge on the part of the EFI
|
|
||||||
bootloader regarding the internal representation of boot_params or any
|
|
||||||
requirements/limitations regarding the placement of the command line
|
|
||||||
and ramdisk in memory, or the placement of the kernel image itself.
|
|
||||||
|
|
||||||
[0] https://github.com/u-boot/u-boot/commit/ec80b4735a593961fe701cc3a5d717d4739b0fd0
|
.. _pe-coff-entry-point:
|
||||||
|
|
||||||
|
PE/COFF entry point
|
||||||
|
===================
|
||||||
|
|
||||||
|
When compiled with ``CONFIG_EFI_STUB=y``, the kernel can be executed as a
|
||||||
|
regular PE/COFF binary. See Documentation/admin-guide/efi-stub.rst for
|
||||||
|
implementation details.
|
||||||
|
|
||||||
|
The stub loader can request the initrd via a UEFI protocol. For this to work,
|
||||||
|
the firmware or bootloader needs to register a handle which carries
|
||||||
|
implementations of the ``EFI_LOAD_FILE2`` protocol and the device path
|
||||||
|
protocol exposing the ``LINUX_EFI_INITRD_MEDIA_GUID`` vendor media device path.
|
||||||
|
In this case, a kernel booting via the EFI stub will invoke
|
||||||
|
``LoadFile2::LoadFile()`` method on the registered protocol to instruct the
|
||||||
|
firmware to load the initrd into a memory location chosen by the kernel/EFI
|
||||||
|
stub.
|
||||||
|
|
||||||
|
This approach removes the need for any knowledge on the part of the EFI
|
||||||
|
bootloader regarding the internal representation of boot_params or any
|
||||||
|
requirements/limitations regarding the placement of the command line and
|
||||||
|
ramdisk in memory, or the placement of the kernel image itself.
|
||||||
|
|
||||||
|
For sample implementations, refer to `the original u-boot implementation`_ or
|
||||||
|
`the OVMF implementation`_.
|
||||||
|
|
||||||
|
.. _the original u-boot implementation: https://github.com/u-boot/u-boot/commit/ec80b4735a593961fe701cc3a5d717d4739b0fd0
|
||||||
|
.. _the OVMF implementation: https://github.com/tianocore/edk2/blob/1780373897f12c25075f8883e073144506441168/OvmfPkg/LinuxInitrdDynamicShellCommand/LinuxInitrdDynamicShellCommand.c
|
||||||
|
|
|
||||||
|
|
@ -100,10 +100,26 @@ described in more detail in the footnotes.
|
||||||
| | | ``uretprobe.s+`` [#uprobe]_ | Yes |
|
| | | ``uretprobe.s+`` [#uprobe]_ | Yes |
|
||||||
+ + +----------------------------------+-----------+
|
+ + +----------------------------------+-----------+
|
||||||
| | | ``usdt+`` [#usdt]_ | |
|
| | | ``usdt+`` [#usdt]_ | |
|
||||||
|
+ + +----------------------------------+-----------+
|
||||||
|
| | | ``usdt.s+`` [#usdt]_ | Yes |
|
||||||
+ +----------------------------------------+----------------------------------+-----------+
|
+ +----------------------------------------+----------------------------------+-----------+
|
||||||
| | ``BPF_TRACE_KPROBE_MULTI`` | ``kprobe.multi+`` [#kpmulti]_ | |
|
| | ``BPF_TRACE_KPROBE_MULTI`` | ``kprobe.multi+`` [#kpmulti]_ | |
|
||||||
+ + +----------------------------------+-----------+
|
+ + +----------------------------------+-----------+
|
||||||
| | | ``kretprobe.multi+`` [#kpmulti]_ | |
|
| | | ``kretprobe.multi+`` [#kpmulti]_ | |
|
||||||
|
+ +----------------------------------------+----------------------------------+-----------+
|
||||||
|
| | ``BPF_TRACE_KPROBE_SESSION`` | ``kprobe.session+`` [#kpmulti]_ | |
|
||||||
|
+ +----------------------------------------+----------------------------------+-----------+
|
||||||
|
| | ``BPF_TRACE_UPROBE_MULTI`` | ``uprobe.multi+`` [#upmul]_ | |
|
||||||
|
+ + +----------------------------------+-----------+
|
||||||
|
| | | ``uprobe.multi.s+`` [#upmul]_ | Yes |
|
||||||
|
+ + +----------------------------------+-----------+
|
||||||
|
| | | ``uretprobe.multi+`` [#upmul]_ | |
|
||||||
|
+ + +----------------------------------+-----------+
|
||||||
|
| | | ``uretprobe.multi.s+`` [#upmul]_ | Yes |
|
||||||
|
+ +----------------------------------------+----------------------------------+-----------+
|
||||||
|
| | ``BPF_TRACE_UPROBE_SESSION`` | ``uprobe.session+`` [#upmul]_ | |
|
||||||
|
+ + +----------------------------------+-----------+
|
||||||
|
| | | ``uprobe.session.s+`` [#upmul]_ | Yes |
|
||||||
+-------------------------------------------+----------------------------------------+----------------------------------+-----------+
|
+-------------------------------------------+----------------------------------------+----------------------------------+-----------+
|
||||||
| ``BPF_PROG_TYPE_LIRC_MODE2`` | ``BPF_LIRC_MODE2`` | ``lirc_mode2`` | |
|
| ``BPF_PROG_TYPE_LIRC_MODE2`` | ``BPF_LIRC_MODE2`` | ``lirc_mode2`` | |
|
||||||
+-------------------------------------------+----------------------------------------+----------------------------------+-----------+
|
+-------------------------------------------+----------------------------------------+----------------------------------+-----------+
|
||||||
|
|
@ -219,6 +235,8 @@ described in more detail in the footnotes.
|
||||||
non-negative integer.
|
non-negative integer.
|
||||||
.. [#ksyscall] The ``ksyscall`` attach format is ``ksyscall/<syscall>``.
|
.. [#ksyscall] The ``ksyscall`` attach format is ``ksyscall/<syscall>``.
|
||||||
.. [#uprobe] The ``uprobe`` attach format is ``uprobe[.s]/<path>:<function>[+<offset>]``.
|
.. [#uprobe] The ``uprobe`` attach format is ``uprobe[.s]/<path>:<function>[+<offset>]``.
|
||||||
|
.. [#upmul] The ``uprobe.multi`` attach format is ``uprobe.multi[.s]/<path>:<function-pattern>``
|
||||||
|
where ``function-pattern`` supports ``*`` and ``?`` wildcards.
|
||||||
.. [#usdt] The ``usdt`` attach format is ``usdt/<path>:<provider>:<name>``.
|
.. [#usdt] The ``usdt`` attach format is ``usdt/<path>:<provider>:<name>``.
|
||||||
.. [#kpmulti] The ``kprobe.multi`` attach format is ``kprobe.multi/<pattern>`` where ``pattern``
|
.. [#kpmulti] The ``kprobe.multi`` attach format is ``kprobe.multi/<pattern>`` where ``pattern``
|
||||||
supports ``*`` and ``?`` wildcards. Valid characters for pattern are
|
supports ``*`` and ``?`` wildcards. Valid characters for pattern are
|
||||||
|
|
|
||||||
|
|
@ -15,8 +15,9 @@ of constant size. The size of the array is defined in ``max_entries`` at
|
||||||
creation time. All array elements are pre-allocated and zero initialized when
|
creation time. All array elements are pre-allocated and zero initialized when
|
||||||
created. ``BPF_MAP_TYPE_PERCPU_ARRAY`` uses a different memory region for each
|
created. ``BPF_MAP_TYPE_PERCPU_ARRAY`` uses a different memory region for each
|
||||||
CPU whereas ``BPF_MAP_TYPE_ARRAY`` uses the same memory region. The value
|
CPU whereas ``BPF_MAP_TYPE_ARRAY`` uses the same memory region. The value
|
||||||
stored can be of any size, however, all array elements are aligned to 8
|
stored can be of any size for ``BPF_MAP_TYPE_ARRAY`` and not more than
|
||||||
bytes.
|
``PCPU_MIN_UNIT_SIZE`` (32 kB) for ``BPF_MAP_TYPE_PERCPU_ARRAY``. All
|
||||||
|
array elements are aligned to 8 bytes.
|
||||||
|
|
||||||
Since kernel 5.5, memory mapping may be enabled for ``BPF_MAP_TYPE_ARRAY`` by
|
Since kernel 5.5, memory mapping may be enabled for ``BPF_MAP_TYPE_ARRAY`` by
|
||||||
setting the flag ``BPF_F_MMAPABLE``. The map definition is page-aligned and
|
setting the flag ``BPF_F_MMAPABLE``. The map definition is page-aligned and
|
||||||
|
|
|
||||||
|
|
@ -18,8 +18,6 @@ import sphinx
|
||||||
# documentation root, use os.path.abspath to make it absolute, like shown here.
|
# documentation root, use os.path.abspath to make it absolute, like shown here.
|
||||||
sys.path.insert(0, os.path.abspath("sphinx"))
|
sys.path.insert(0, os.path.abspath("sphinx"))
|
||||||
|
|
||||||
from load_config import loadConfig # pylint: disable=C0413,E0401
|
|
||||||
|
|
||||||
# Minimal supported version
|
# Minimal supported version
|
||||||
needs_sphinx = "3.4.3"
|
needs_sphinx = "3.4.3"
|
||||||
|
|
||||||
|
|
@ -93,8 +91,12 @@ def config_init(app, config):
|
||||||
# LaTeX and PDF output require a list of documents with are dependent
|
# LaTeX and PDF output require a list of documents with are dependent
|
||||||
# of the app.srcdir. Add them here
|
# of the app.srcdir. Add them here
|
||||||
|
|
||||||
# When SPHINXDIRS is used, we just need to get index.rst, if it exists
|
# Handle the case where SPHINXDIRS is used
|
||||||
if not os.path.samefile(doctree, app.srcdir):
|
if not os.path.samefile(doctree, app.srcdir):
|
||||||
|
# Add a tag to mark that the build is actually a subproject
|
||||||
|
tags.add("subproject")
|
||||||
|
|
||||||
|
# get index.rst, if it exists
|
||||||
doc = os.path.basename(app.srcdir)
|
doc = os.path.basename(app.srcdir)
|
||||||
fname = "index"
|
fname = "index"
|
||||||
if os.path.exists(os.path.join(app.srcdir, fname + ".rst")):
|
if os.path.exists(os.path.join(app.srcdir, fname + ".rst")):
|
||||||
|
|
@ -583,13 +585,6 @@ pdf_documents = [
|
||||||
kerneldoc_bin = "../scripts/kernel-doc.py"
|
kerneldoc_bin = "../scripts/kernel-doc.py"
|
||||||
kerneldoc_srctree = ".."
|
kerneldoc_srctree = ".."
|
||||||
|
|
||||||
# ------------------------------------------------------------------------------
|
|
||||||
# Since loadConfig overwrites settings from the global namespace, it has to be
|
|
||||||
# the last statement in the conf.py file
|
|
||||||
# ------------------------------------------------------------------------------
|
|
||||||
loadConfig(globals())
|
|
||||||
|
|
||||||
|
|
||||||
def setup(app):
|
def setup(app):
|
||||||
"""Patterns need to be updated at init time on older Sphinx versions"""
|
"""Patterns need to be updated at init time on older Sphinx versions"""
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -92,18 +92,18 @@ There are two functions for dealing with the script:
|
||||||
|
|
||||||
void assoc_array_apply_edit(struct assoc_array_edit *edit);
|
void assoc_array_apply_edit(struct assoc_array_edit *edit);
|
||||||
|
|
||||||
This will perform the edit functions, interpolating various write barriers
|
This will perform the edit functions, interpolating various write barriers
|
||||||
to permit accesses under the RCU read lock to continue. The edit script
|
to permit accesses under the RCU read lock to continue. The edit script
|
||||||
will then be passed to ``call_rcu()`` to free it and any dead stuff it points
|
will then be passed to ``call_rcu()`` to free it and any dead stuff it
|
||||||
to.
|
points to.
|
||||||
|
|
||||||
2. Cancel an edit script::
|
2. Cancel an edit script::
|
||||||
|
|
||||||
void assoc_array_cancel_edit(struct assoc_array_edit *edit);
|
void assoc_array_cancel_edit(struct assoc_array_edit *edit);
|
||||||
|
|
||||||
This frees the edit script and all preallocated memory immediately. If
|
This frees the edit script and all preallocated memory immediately. If
|
||||||
this was for insertion, the new object is _not_ released by this function,
|
this was for insertion, the new object is *not* released by this function,
|
||||||
but must rather be released by the caller.
|
but must rather be released by the caller.
|
||||||
|
|
||||||
These functions are guaranteed not to fail.
|
These functions are guaranteed not to fail.
|
||||||
|
|
||||||
|
|
@ -123,43 +123,43 @@ This points to a number of methods, all of which need to be provided:
|
||||||
|
|
||||||
unsigned long (*get_key_chunk)(const void *index_key, int level);
|
unsigned long (*get_key_chunk)(const void *index_key, int level);
|
||||||
|
|
||||||
This should return a chunk of caller-supplied index key starting at the
|
This should return a chunk of caller-supplied index key starting at the
|
||||||
*bit* position given by the level argument. The level argument will be a
|
*bit* position given by the level argument. The level argument will be a
|
||||||
multiple of ``ASSOC_ARRAY_KEY_CHUNK_SIZE`` and the function should return
|
multiple of ``ASSOC_ARRAY_KEY_CHUNK_SIZE`` and the function should return
|
||||||
``ASSOC_ARRAY_KEY_CHUNK_SIZE bits``. No error is possible.
|
``ASSOC_ARRAY_KEY_CHUNK_SIZE bits``. No error is possible.
|
||||||
|
|
||||||
|
|
||||||
2. Get a chunk of an object's index key::
|
2. Get a chunk of an object's index key::
|
||||||
|
|
||||||
unsigned long (*get_object_key_chunk)(const void *object, int level);
|
unsigned long (*get_object_key_chunk)(const void *object, int level);
|
||||||
|
|
||||||
As the previous function, but gets its data from an object in the array
|
As the previous function, but gets its data from an object in the array
|
||||||
rather than from a caller-supplied index key.
|
rather than from a caller-supplied index key.
|
||||||
|
|
||||||
|
|
||||||
3. See if this is the object we're looking for::
|
3. See if this is the object we're looking for::
|
||||||
|
|
||||||
bool (*compare_object)(const void *object, const void *index_key);
|
bool (*compare_object)(const void *object, const void *index_key);
|
||||||
|
|
||||||
Compare the object against an index key and return ``true`` if it matches and
|
Compare the object against an index key and return ``true`` if it matches
|
||||||
``false`` if it doesn't.
|
and ``false`` if it doesn't.
|
||||||
|
|
||||||
|
|
||||||
4. Diff the index keys of two objects::
|
4. Diff the index keys of two objects::
|
||||||
|
|
||||||
int (*diff_objects)(const void *object, const void *index_key);
|
int (*diff_objects)(const void *object, const void *index_key);
|
||||||
|
|
||||||
Return the bit position at which the index key of the specified object
|
Return the bit position at which the index key of the specified object
|
||||||
differs from the given index key or -1 if they are the same.
|
differs from the given index key or -1 if they are the same.
|
||||||
|
|
||||||
|
|
||||||
5. Free an object::
|
5. Free an object::
|
||||||
|
|
||||||
void (*free_object)(void *object);
|
void (*free_object)(void *object);
|
||||||
|
|
||||||
Free the specified object. Note that this may be called an RCU grace period
|
Free the specified object. Note that this may be called an RCU grace period
|
||||||
after ``assoc_array_apply_edit()`` was called, so ``synchronize_rcu()`` may be
|
after ``assoc_array_apply_edit()`` was called, so ``synchronize_rcu()`` may
|
||||||
necessary on module unloading.
|
be necessary on module unloading.
|
||||||
|
|
||||||
|
|
||||||
Manipulation Functions
|
Manipulation Functions
|
||||||
|
|
@ -171,7 +171,7 @@ There are a number of functions for manipulating an associative array:
|
||||||
|
|
||||||
void assoc_array_init(struct assoc_array *array);
|
void assoc_array_init(struct assoc_array *array);
|
||||||
|
|
||||||
This initialises the base structure for an associative array. It can't fail.
|
This initialises the base structure for an associative array. It can't fail.
|
||||||
|
|
||||||
|
|
||||||
2. Insert/replace an object in an associative array::
|
2. Insert/replace an object in an associative array::
|
||||||
|
|
@ -182,21 +182,21 @@ This initialises the base structure for an associative array. It can't fail.
|
||||||
const void *index_key,
|
const void *index_key,
|
||||||
void *object);
|
void *object);
|
||||||
|
|
||||||
This inserts the given object into the array. Note that the least
|
This inserts the given object into the array. Note that the least
|
||||||
significant bit of the pointer must be zero as it's used to type-mark
|
significant bit of the pointer must be zero as it's used to type-mark
|
||||||
pointers internally.
|
pointers internally.
|
||||||
|
|
||||||
If an object already exists for that key then it will be replaced with the
|
If an object already exists for that key then it will be replaced with the
|
||||||
new object and the old one will be freed automatically.
|
new object and the old one will be freed automatically.
|
||||||
|
|
||||||
The ``index_key`` argument should hold index key information and is
|
The ``index_key`` argument should hold index key information and is
|
||||||
passed to the methods in the ops table when they are called.
|
passed to the methods in the ops table when they are called.
|
||||||
|
|
||||||
This function makes no alteration to the array itself, but rather returns
|
This function makes no alteration to the array itself, but rather returns
|
||||||
an edit script that must be applied. ``-ENOMEM`` is returned in the case of
|
an edit script that must be applied. ``-ENOMEM`` is returned in the case of
|
||||||
an out-of-memory error.
|
an out-of-memory error.
|
||||||
|
|
||||||
The caller should lock exclusively against other modifiers of the array.
|
The caller should lock exclusively against other modifiers of the array.
|
||||||
|
|
||||||
|
|
||||||
3. Delete an object from an associative array::
|
3. Delete an object from an associative array::
|
||||||
|
|
@ -206,15 +206,15 @@ The caller should lock exclusively against other modifiers of the array.
|
||||||
const struct assoc_array_ops *ops,
|
const struct assoc_array_ops *ops,
|
||||||
const void *index_key);
|
const void *index_key);
|
||||||
|
|
||||||
This deletes an object that matches the specified data from the array.
|
This deletes an object that matches the specified data from the array.
|
||||||
|
|
||||||
The ``index_key`` argument should hold index key information and is
|
The ``index_key`` argument should hold index key information and is
|
||||||
passed to the methods in the ops table when they are called.
|
passed to the methods in the ops table when they are called.
|
||||||
|
|
||||||
This function makes no alteration to the array itself, but rather returns
|
This function makes no alteration to the array itself, but rather returns
|
||||||
an edit script that must be applied. ``-ENOMEM`` is returned in the case of
|
an edit script that must be applied. ``-ENOMEM`` is returned in the case of
|
||||||
an out-of-memory error. ``NULL`` will be returned if the specified object is
|
an out-of-memory error. ``NULL`` will be returned if the specified object
|
||||||
not found within the array.
|
is not found within the array.
|
||||||
|
|
||||||
The caller should lock exclusively against other modifiers of the array.
|
The caller should lock exclusively against other modifiers of the array.
|
||||||
|
|
||||||
|
|
@ -225,14 +225,14 @@ The caller should lock exclusively against other modifiers of the array.
|
||||||
assoc_array_clear(struct assoc_array *array,
|
assoc_array_clear(struct assoc_array *array,
|
||||||
const struct assoc_array_ops *ops);
|
const struct assoc_array_ops *ops);
|
||||||
|
|
||||||
This deletes all the objects from an associative array and leaves it
|
This deletes all the objects from an associative array and leaves it
|
||||||
completely empty.
|
completely empty.
|
||||||
|
|
||||||
This function makes no alteration to the array itself, but rather returns
|
This function makes no alteration to the array itself, but rather returns
|
||||||
an edit script that must be applied. ``-ENOMEM`` is returned in the case of
|
an edit script that must be applied. ``-ENOMEM`` is returned in the case of
|
||||||
an out-of-memory error.
|
an out-of-memory error.
|
||||||
|
|
||||||
The caller should lock exclusively against other modifiers of the array.
|
The caller should lock exclusively against other modifiers of the array.
|
||||||
|
|
||||||
|
|
||||||
5. Destroy an associative array, deleting all objects::
|
5. Destroy an associative array, deleting all objects::
|
||||||
|
|
@ -240,14 +240,14 @@ The caller should lock exclusively against other modifiers of the array.
|
||||||
void assoc_array_destroy(struct assoc_array *array,
|
void assoc_array_destroy(struct assoc_array *array,
|
||||||
const struct assoc_array_ops *ops);
|
const struct assoc_array_ops *ops);
|
||||||
|
|
||||||
This destroys the contents of the associative array and leaves it
|
This destroys the contents of the associative array and leaves it
|
||||||
completely empty. It is not permitted for another thread to be traversing
|
completely empty. It is not permitted for another thread to be traversing
|
||||||
the array under the RCU read lock at the same time as this function is
|
the array under the RCU read lock at the same time as this function is
|
||||||
destroying it as no RCU deferral is performed on memory release -
|
destroying it as no RCU deferral is performed on memory release -
|
||||||
something that would require memory to be allocated.
|
something that would require memory to be allocated.
|
||||||
|
|
||||||
The caller should lock exclusively against other modifiers and accessors
|
The caller should lock exclusively against other modifiers and accessors
|
||||||
of the array.
|
of the array.
|
||||||
|
|
||||||
|
|
||||||
6. Garbage collect an associative array::
|
6. Garbage collect an associative array::
|
||||||
|
|
@ -257,24 +257,24 @@ of the array.
|
||||||
bool (*iterator)(void *object, void *iterator_data),
|
bool (*iterator)(void *object, void *iterator_data),
|
||||||
void *iterator_data);
|
void *iterator_data);
|
||||||
|
|
||||||
This iterates over the objects in an associative array and passes each one to
|
This iterates over the objects in an associative array and passes each one
|
||||||
``iterator()``. If ``iterator()`` returns ``true``, the object is kept. If it
|
to ``iterator()``. If ``iterator()`` returns ``true``, the object is kept.
|
||||||
returns ``false``, the object will be freed. If the ``iterator()`` function
|
If it returns ``false``, the object will be freed. If the ``iterator()``
|
||||||
returns ``true``, it must perform any appropriate refcount incrementing on the
|
function returns ``true``, it must perform any appropriate refcount
|
||||||
object before returning.
|
incrementing on the object before returning.
|
||||||
|
|
||||||
The internal tree will be packed down if possible as part of the iteration
|
The internal tree will be packed down if possible as part of the iteration
|
||||||
to reduce the number of nodes in it.
|
to reduce the number of nodes in it.
|
||||||
|
|
||||||
The ``iterator_data`` is passed directly to ``iterator()`` and is otherwise
|
The ``iterator_data`` is passed directly to ``iterator()`` and is otherwise
|
||||||
ignored by the function.
|
ignored by the function.
|
||||||
|
|
||||||
The function will return ``0`` if successful and ``-ENOMEM`` if there wasn't
|
The function will return ``0`` if successful and ``-ENOMEM`` if there wasn't
|
||||||
enough memory.
|
enough memory.
|
||||||
|
|
||||||
It is possible for other threads to iterate over or search the array under
|
It is possible for other threads to iterate over or search the array under
|
||||||
the RCU read lock while this function is in progress. The caller should
|
the RCU read lock while this function is in progress. The caller should
|
||||||
lock exclusively against other modifiers of the array.
|
lock exclusively against other modifiers of the array.
|
||||||
|
|
||||||
|
|
||||||
Access Functions
|
Access Functions
|
||||||
|
|
@ -289,19 +289,19 @@ There are two functions for accessing an associative array:
|
||||||
void *iterator_data),
|
void *iterator_data),
|
||||||
void *iterator_data);
|
void *iterator_data);
|
||||||
|
|
||||||
This passes each object in the array to the iterator callback function.
|
This passes each object in the array to the iterator callback function.
|
||||||
``iterator_data`` is private data for that function.
|
``iterator_data`` is private data for that function.
|
||||||
|
|
||||||
This may be used on an array at the same time as the array is being
|
This may be used on an array at the same time as the array is being
|
||||||
modified, provided the RCU read lock is held. Under such circumstances,
|
modified, provided the RCU read lock is held. Under such circumstances,
|
||||||
it is possible for the iteration function to see some objects twice. If
|
it is possible for the iteration function to see some objects twice. If
|
||||||
this is a problem, then modification should be locked against. The
|
this is a problem, then modification should be locked against. The
|
||||||
iteration algorithm should not, however, miss any objects.
|
iteration algorithm should not, however, miss any objects.
|
||||||
|
|
||||||
The function will return ``0`` if no objects were in the array or else it will
|
The function will return ``0`` if no objects were in the array or else it
|
||||||
return the result of the last iterator function called. Iteration stops
|
will return the result of the last iterator function called. Iteration
|
||||||
immediately if any call to the iteration function results in a non-zero
|
stops immediately if any call to the iteration function results in a
|
||||||
return.
|
non-zero return.
|
||||||
|
|
||||||
|
|
||||||
2. Find an object in an associative array::
|
2. Find an object in an associative array::
|
||||||
|
|
@ -310,14 +310,14 @@ return.
|
||||||
const struct assoc_array_ops *ops,
|
const struct assoc_array_ops *ops,
|
||||||
const void *index_key);
|
const void *index_key);
|
||||||
|
|
||||||
This walks through the array's internal tree directly to the object
|
This walks through the array's internal tree directly to the object
|
||||||
specified by the index key..
|
specified by the index key.
|
||||||
|
|
||||||
This may be used on an array at the same time as the array is being
|
This may be used on an array at the same time as the array is being
|
||||||
modified, provided the RCU read lock is held.
|
modified, provided the RCU read lock is held.
|
||||||
|
|
||||||
The function will return the object if found (and set ``*_type`` to the object
|
The function will return the object if found (and set ``*_type`` to the
|
||||||
type) or will return ``NULL`` if the object was not found.
|
object type) or will return ``NULL`` if the object was not found.
|
||||||
|
|
||||||
|
|
||||||
Index Key Form
|
Index Key Form
|
||||||
|
|
@ -399,10 +399,11 @@ fixed levels. For example::
|
||||||
|
|
||||||
In the above example, there are 7 nodes (A-G), each with 16 slots (0-f).
|
In the above example, there are 7 nodes (A-G), each with 16 slots (0-f).
|
||||||
Assuming no other meta data nodes in the tree, the key space is divided
|
Assuming no other meta data nodes in the tree, the key space is divided
|
||||||
thusly::
|
thusly:
|
||||||
|
|
||||||
|
=========== ====
|
||||||
KEY PREFIX NODE
|
KEY PREFIX NODE
|
||||||
========== ====
|
=========== ====
|
||||||
137* D
|
137* D
|
||||||
138* E
|
138* E
|
||||||
13[0-69-f]* C
|
13[0-69-f]* C
|
||||||
|
|
@ -410,10 +411,12 @@ thusly::
|
||||||
e6* G
|
e6* G
|
||||||
e[0-57-f]* F
|
e[0-57-f]* F
|
||||||
[02-df]* A
|
[02-df]* A
|
||||||
|
=========== ====
|
||||||
|
|
||||||
So, for instance, keys with the following example index keys will be found in
|
So, for instance, keys with the following example index keys will be found in
|
||||||
the appropriate nodes::
|
the appropriate nodes:
|
||||||
|
|
||||||
|
=============== ======= ====
|
||||||
INDEX KEY PREFIX NODE
|
INDEX KEY PREFIX NODE
|
||||||
=============== ======= ====
|
=============== ======= ====
|
||||||
13694892892489 13 C
|
13694892892489 13 C
|
||||||
|
|
@ -422,12 +425,13 @@ the appropriate nodes::
|
||||||
138bbb89003093 138 E
|
138bbb89003093 138 E
|
||||||
1394879524789 12 C
|
1394879524789 12 C
|
||||||
1458952489 1 B
|
1458952489 1 B
|
||||||
9431809de993ba - A
|
9431809de993ba \- A
|
||||||
b4542910809cd - A
|
b4542910809cd \- A
|
||||||
e5284310def98 e F
|
e5284310def98 e F
|
||||||
e68428974237 e6 G
|
e68428974237 e6 G
|
||||||
e7fffcbd443 e F
|
e7fffcbd443 e F
|
||||||
f3842239082 - A
|
f3842239082 \- A
|
||||||
|
=============== ======= ====
|
||||||
|
|
||||||
To save memory, if a node can hold all the leaves in its portion of keyspace,
|
To save memory, if a node can hold all the leaves in its portion of keyspace,
|
||||||
then the node will have all those leaves in it and will not have any metadata
|
then the node will have all those leaves in it and will not have any metadata
|
||||||
|
|
@ -441,8 +445,9 @@ metadata pointer. If the metadata pointer is there, any leaf whose key matches
|
||||||
the metadata key prefix must be in the subtree that the metadata pointer points
|
the metadata key prefix must be in the subtree that the metadata pointer points
|
||||||
to.
|
to.
|
||||||
|
|
||||||
In the above example list of index keys, node A will contain::
|
In the above example list of index keys, node A will contain:
|
||||||
|
|
||||||
|
==== =============== ==================
|
||||||
SLOT CONTENT INDEX KEY (PREFIX)
|
SLOT CONTENT INDEX KEY (PREFIX)
|
||||||
==== =============== ==================
|
==== =============== ==================
|
||||||
1 PTR TO NODE B 1*
|
1 PTR TO NODE B 1*
|
||||||
|
|
@ -450,11 +455,16 @@ In the above example list of index keys, node A will contain::
|
||||||
any LEAF b4542910809cd
|
any LEAF b4542910809cd
|
||||||
e PTR TO NODE F e*
|
e PTR TO NODE F e*
|
||||||
any LEAF f3842239082
|
any LEAF f3842239082
|
||||||
|
==== =============== ==================
|
||||||
|
|
||||||
and node B::
|
and node B:
|
||||||
|
|
||||||
3 PTR TO NODE C 13*
|
==== =============== ==================
|
||||||
any LEAF 1458952489
|
SLOT CONTENT INDEX KEY (PREFIX)
|
||||||
|
==== =============== ==================
|
||||||
|
3 PTR TO NODE C 13*
|
||||||
|
any LEAF 1458952489
|
||||||
|
==== =============== ==================
|
||||||
|
|
||||||
|
|
||||||
Shortcuts
|
Shortcuts
|
||||||
|
|
|
||||||
|
|
@ -138,6 +138,7 @@ Documents that don't fit elsewhere or which have yet to be categorized.
|
||||||
:maxdepth: 1
|
:maxdepth: 1
|
||||||
|
|
||||||
librs
|
librs
|
||||||
|
liveupdate
|
||||||
netlink
|
netlink
|
||||||
|
|
||||||
.. only:: subproject and html
|
.. only:: subproject and html
|
||||||
|
|
|
||||||
|
|
@ -70,5 +70,5 @@ in the FDT. That state is called the KHO finalization phase.
|
||||||
|
|
||||||
Public API
|
Public API
|
||||||
==========
|
==========
|
||||||
.. kernel-doc:: kernel/kexec_handover.c
|
.. kernel-doc:: kernel/liveupdate/kexec_handover.c
|
||||||
:export:
|
:export:
|
||||||
|
|
|
||||||
61
Documentation/core-api/liveupdate.rst
Normal file
61
Documentation/core-api/liveupdate.rst
Normal file
|
|
@ -0,0 +1,61 @@
|
||||||
|
.. SPDX-License-Identifier: GPL-2.0
|
||||||
|
|
||||||
|
========================
|
||||||
|
Live Update Orchestrator
|
||||||
|
========================
|
||||||
|
:Author: Pasha Tatashin <pasha.tatashin@soleen.com>
|
||||||
|
|
||||||
|
.. kernel-doc:: kernel/liveupdate/luo_core.c
|
||||||
|
:doc: Live Update Orchestrator (LUO)
|
||||||
|
|
||||||
|
LUO Sessions
|
||||||
|
============
|
||||||
|
.. kernel-doc:: kernel/liveupdate/luo_session.c
|
||||||
|
:doc: LUO Sessions
|
||||||
|
|
||||||
|
LUO Preserving File Descriptors
|
||||||
|
===============================
|
||||||
|
.. kernel-doc:: kernel/liveupdate/luo_file.c
|
||||||
|
:doc: LUO File Descriptors
|
||||||
|
|
||||||
|
Live Update Orchestrator ABI
|
||||||
|
============================
|
||||||
|
.. kernel-doc:: include/linux/kho/abi/luo.h
|
||||||
|
:doc: Live Update Orchestrator ABI
|
||||||
|
|
||||||
|
The following types of file descriptors can be preserved
|
||||||
|
|
||||||
|
.. toctree::
|
||||||
|
:maxdepth: 1
|
||||||
|
|
||||||
|
../mm/memfd_preservation
|
||||||
|
|
||||||
|
Public API
|
||||||
|
==========
|
||||||
|
.. kernel-doc:: include/linux/liveupdate.h
|
||||||
|
|
||||||
|
.. kernel-doc:: include/linux/kho/abi/luo.h
|
||||||
|
:functions:
|
||||||
|
|
||||||
|
.. kernel-doc:: kernel/liveupdate/luo_core.c
|
||||||
|
:export:
|
||||||
|
|
||||||
|
.. kernel-doc:: kernel/liveupdate/luo_file.c
|
||||||
|
:export:
|
||||||
|
|
||||||
|
Internal API
|
||||||
|
============
|
||||||
|
.. kernel-doc:: kernel/liveupdate/luo_core.c
|
||||||
|
:internal:
|
||||||
|
|
||||||
|
.. kernel-doc:: kernel/liveupdate/luo_session.c
|
||||||
|
:internal:
|
||||||
|
|
||||||
|
.. kernel-doc:: kernel/liveupdate/luo_file.c
|
||||||
|
:internal:
|
||||||
|
|
||||||
|
See Also
|
||||||
|
========
|
||||||
|
|
||||||
|
- :doc:`Live Update uAPI </userspace-api/liveupdate>`
|
||||||
|
- :doc:`/core-api/kho/concepts`
|
||||||
|
|
@ -547,11 +547,13 @@ Time and date
|
||||||
%pt[RT]s YYYY-mm-dd HH:MM:SS
|
%pt[RT]s YYYY-mm-dd HH:MM:SS
|
||||||
%pt[RT]d YYYY-mm-dd
|
%pt[RT]d YYYY-mm-dd
|
||||||
%pt[RT]t HH:MM:SS
|
%pt[RT]t HH:MM:SS
|
||||||
%pt[RT][dt][r][s]
|
%ptSp <seconds>.<nanoseconds>
|
||||||
|
%pt[RST][dt][r][s]
|
||||||
|
|
||||||
For printing date and time as represented by::
|
For printing date and time as represented by::
|
||||||
|
|
||||||
R struct rtc_time structure
|
R content of struct rtc_time
|
||||||
|
S content of struct timespec64
|
||||||
T time64_t type
|
T time64_t type
|
||||||
|
|
||||||
in human readable format.
|
in human readable format.
|
||||||
|
|
@ -563,6 +565,11 @@ The %pt[RT]s (space) will override ISO 8601 separator by using ' ' (space)
|
||||||
instead of 'T' (Capital T) between date and time. It won't have any effect
|
instead of 'T' (Capital T) between date and time. It won't have any effect
|
||||||
when date or time is omitted.
|
when date or time is omitted.
|
||||||
|
|
||||||
|
The %ptSp is equivalent to %lld.%09ld for the content of the struct timespec64.
|
||||||
|
When the other specifiers are given, it becomes the respective equivalent of
|
||||||
|
%ptT[dt][r][s].%09ld. In other words, the seconds are being printed in
|
||||||
|
the human readable format followed by a dot and nanoseconds.
|
||||||
|
|
||||||
Passed by reference.
|
Passed by reference.
|
||||||
|
|
||||||
struct clk
|
struct clk
|
||||||
|
|
|
||||||
|
|
@ -27,3 +27,4 @@ for cryptographic use cases, as well as programming examples.
|
||||||
descore-readme
|
descore-readme
|
||||||
device_drivers/index
|
device_drivers/index
|
||||||
krb5
|
krb5
|
||||||
|
sha3
|
||||||
|
|
|
||||||
130
Documentation/crypto/sha3.rst
Normal file
130
Documentation/crypto/sha3.rst
Normal file
|
|
@ -0,0 +1,130 @@
|
||||||
|
.. SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
|
|
||||||
|
==========================
|
||||||
|
SHA-3 Algorithm Collection
|
||||||
|
==========================
|
||||||
|
|
||||||
|
.. contents::
|
||||||
|
|
||||||
|
Overview
|
||||||
|
========
|
||||||
|
|
||||||
|
The SHA-3 family of algorithms, as specified in NIST FIPS-202 [1]_, contains six
|
||||||
|
algorithms based on the Keccak sponge function. The differences between them
|
||||||
|
are: the "rate" (how much of the state buffer gets updated with new data between
|
||||||
|
invocations of the Keccak function and analogous to the "block size"), what
|
||||||
|
domain separation suffix gets appended to the input data, and how much output
|
||||||
|
data is extracted at the end. The Keccak sponge function is designed such that
|
||||||
|
arbitrary amounts of output can be obtained for certain algorithms.
|
||||||
|
|
||||||
|
Four digest algorithms are provided:
|
||||||
|
|
||||||
|
- SHA3-224
|
||||||
|
- SHA3-256
|
||||||
|
- SHA3-384
|
||||||
|
- SHA3-512
|
||||||
|
|
||||||
|
Additionally, two Extendable-Output Functions (XOFs) are provided:
|
||||||
|
|
||||||
|
- SHAKE128
|
||||||
|
- SHAKE256
|
||||||
|
|
||||||
|
The SHA-3 library API supports all six of these algorithms. The four digest
|
||||||
|
algorithms are also supported by the crypto_shash and crypto_ahash APIs.
|
||||||
|
|
||||||
|
This document describes the SHA-3 library API.
|
||||||
|
|
||||||
|
|
||||||
|
Digests
|
||||||
|
=======
|
||||||
|
|
||||||
|
The following functions compute SHA-3 digests::
|
||||||
|
|
||||||
|
void sha3_224(const u8 *in, size_t in_len, u8 out[SHA3_224_DIGEST_SIZE]);
|
||||||
|
void sha3_256(const u8 *in, size_t in_len, u8 out[SHA3_256_DIGEST_SIZE]);
|
||||||
|
void sha3_384(const u8 *in, size_t in_len, u8 out[SHA3_384_DIGEST_SIZE]);
|
||||||
|
void sha3_512(const u8 *in, size_t in_len, u8 out[SHA3_512_DIGEST_SIZE]);
|
||||||
|
|
||||||
|
For users that need to pass in data incrementally, an incremental API is also
|
||||||
|
provided. The incremental API uses the following struct::
|
||||||
|
|
||||||
|
struct sha3_ctx { ... };
|
||||||
|
|
||||||
|
Initialization is done with one of::
|
||||||
|
|
||||||
|
void sha3_224_init(struct sha3_ctx *ctx);
|
||||||
|
void sha3_256_init(struct sha3_ctx *ctx);
|
||||||
|
void sha3_384_init(struct sha3_ctx *ctx);
|
||||||
|
void sha3_512_init(struct sha3_ctx *ctx);
|
||||||
|
|
||||||
|
Input data is then added with any number of calls to::
|
||||||
|
|
||||||
|
void sha3_update(struct sha3_ctx *ctx, const u8 *in, size_t in_len);
|
||||||
|
|
||||||
|
Finally, the digest is generated using::
|
||||||
|
|
||||||
|
void sha3_final(struct sha3_ctx *ctx, u8 *out);
|
||||||
|
|
||||||
|
which also zeroizes the context. The length of the digest is determined by the
|
||||||
|
initialization function that was called.
|
||||||
|
|
||||||
|
|
||||||
|
Extendable-Output Functions
|
||||||
|
===========================
|
||||||
|
|
||||||
|
The following functions compute the SHA-3 extendable-output functions (XOFs)::
|
||||||
|
|
||||||
|
void shake128(const u8 *in, size_t in_len, u8 *out, size_t out_len);
|
||||||
|
void shake256(const u8 *in, size_t in_len, u8 *out, size_t out_len);
|
||||||
|
|
||||||
|
For users that need to provide the input data incrementally and/or receive the
|
||||||
|
output data incrementally, an incremental API is also provided. The incremental
|
||||||
|
API uses the following struct::
|
||||||
|
|
||||||
|
struct shake_ctx { ... };
|
||||||
|
|
||||||
|
Initialization is done with one of::
|
||||||
|
|
||||||
|
void shake128_init(struct shake_ctx *ctx);
|
||||||
|
void shake256_init(struct shake_ctx *ctx);
|
||||||
|
|
||||||
|
Input data is then added with any number of calls to::
|
||||||
|
|
||||||
|
void shake_update(struct shake_ctx *ctx, const u8 *in, size_t in_len);
|
||||||
|
|
||||||
|
Finally, the output data is extracted with any number of calls to::
|
||||||
|
|
||||||
|
void shake_squeeze(struct shake_ctx *ctx, u8 *out, size_t out_len);
|
||||||
|
|
||||||
|
and telling it how much data should be extracted. Note that performing multiple
|
||||||
|
squeezes, with the output laid consecutively in a buffer, gets exactly the same
|
||||||
|
output as doing a single squeeze for the combined amount over the same buffer.
|
||||||
|
|
||||||
|
More input data cannot be added after squeezing has started.
|
||||||
|
|
||||||
|
Once all the desired output has been extracted, zeroize the context::
|
||||||
|
|
||||||
|
void shake_zeroize_ctx(struct shake_ctx *ctx);
|
||||||
|
|
||||||
|
|
||||||
|
Testing
|
||||||
|
=======
|
||||||
|
|
||||||
|
To test the SHA-3 code, use sha3_kunit (CONFIG_CRYPTO_LIB_SHA3_KUNIT_TEST).
|
||||||
|
|
||||||
|
Since the SHA-3 algorithms are FIPS-approved, when the kernel is booted in FIPS
|
||||||
|
mode the SHA-3 library also performs a simple self-test. This is purely to meet
|
||||||
|
a FIPS requirement. Normal testing done by kernel developers and integrators
|
||||||
|
should use the much more comprehensive KUnit test suite instead.
|
||||||
|
|
||||||
|
|
||||||
|
References
|
||||||
|
==========
|
||||||
|
|
||||||
|
.. [1] https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.202.pdf
|
||||||
|
|
||||||
|
|
||||||
|
API Function Reference
|
||||||
|
======================
|
||||||
|
|
||||||
|
.. kernel-doc:: include/crypto/sha3.h
|
||||||
|
|
@ -302,10 +302,9 @@ follows:
|
||||||
|
|
||||||
|
|
||||||
Depending on the RNG type, the RNG must be seeded. The seed is provided
|
Depending on the RNG type, the RNG must be seeded. The seed is provided
|
||||||
using the setsockopt interface to set the key. For example, the
|
using the setsockopt interface to set the key. The SP800-90A DRBGs do
|
||||||
ansi_cprng requires a seed. The DRBGs do not require a seed, but may be
|
not require a seed, but may be seeded. The seed is also known as a
|
||||||
seeded. The seed is also known as a *Personalization String* in NIST SP 800-90A
|
*Personalization String* in NIST SP 800-90A standard.
|
||||||
standard.
|
|
||||||
|
|
||||||
Using the read()/recvmsg() system calls, random numbers can be obtained.
|
Using the read()/recvmsg() system calls, random numbers can be obtained.
|
||||||
The kernel generates at most 128 bytes in one call. If user space
|
The kernel generates at most 128 bytes in one call. If user space
|
||||||
|
|
|
||||||
|
|
@ -461,16 +461,9 @@ Comments
|
||||||
line comments is::
|
line comments is::
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* This is the preferred style
|
* This is the preferred style
|
||||||
* for multi line comments.
|
* for multi line comments.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
The networking comment style is a bit different, with the first line
|
|
||||||
not empty like the former::
|
|
||||||
|
|
||||||
/* This is the preferred comment style
|
|
||||||
* for files in net/ and drivers/net/
|
|
||||||
*/
|
|
||||||
|
|
||||||
See: https://www.kernel.org/doc/html/latest/process/coding-style.html#commenting
|
See: https://www.kernel.org/doc/html/latest/process/coding-style.html#commenting
|
||||||
|
|
||||||
|
|
@ -1009,6 +1002,29 @@ Functions and Variables
|
||||||
|
|
||||||
return bar;
|
return bar;
|
||||||
|
|
||||||
|
**UNINITIALIZED_PTR_WITH_FREE**
|
||||||
|
Pointers with __free attribute should be declared at the place of use
|
||||||
|
and initialized (see include/linux/cleanup.h). In this case
|
||||||
|
declarations at the top of the function rule can be relaxed. Not doing
|
||||||
|
so may lead to undefined behavior as the memory assigned (garbage,
|
||||||
|
in case not initialized) to the pointer is freed automatically when
|
||||||
|
the pointer goes out of scope.
|
||||||
|
|
||||||
|
Also see: https://lore.kernel.org/lkml/58fd478f408a34b578ee8d949c5c4b4da4d4f41d.camel@HansenPartnership.com/
|
||||||
|
|
||||||
|
Example::
|
||||||
|
|
||||||
|
type var __free(free_func);
|
||||||
|
... // var not used, but, in future someone might add a return here
|
||||||
|
var = malloc(var_size);
|
||||||
|
...
|
||||||
|
|
||||||
|
should be initialized as::
|
||||||
|
|
||||||
|
...
|
||||||
|
type var __free(free_func) = malloc(var_size);
|
||||||
|
...
|
||||||
|
|
||||||
|
|
||||||
Permissions
|
Permissions
|
||||||
-----------
|
-----------
|
||||||
|
|
@ -1245,6 +1261,16 @@ Others
|
||||||
The patch file does not appear to be in unified-diff format. Please
|
The patch file does not appear to be in unified-diff format. Please
|
||||||
regenerate the patch file before sending it to the maintainer.
|
regenerate the patch file before sending it to the maintainer.
|
||||||
|
|
||||||
|
**PLACEHOLDER_USE**
|
||||||
|
Detects unhandled placeholder text left in cover letters or commit headers/logs.
|
||||||
|
Common placeholders include lines like::
|
||||||
|
|
||||||
|
*** SUBJECT HERE ***
|
||||||
|
*** BLURB HERE ***
|
||||||
|
|
||||||
|
These typically come from autogenerated templates. Replace them with a proper
|
||||||
|
subject and description before sending.
|
||||||
|
|
||||||
**PRINTF_0XDECIMAL**
|
**PRINTF_0XDECIMAL**
|
||||||
Prefixing 0x with decimal output is defective and should be corrected.
|
Prefixing 0x with decimal output is defective and should be corrected.
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -35,6 +35,12 @@ or be built into the kernel.
|
||||||
a good way of quickly testing everything applicable to the current
|
a good way of quickly testing everything applicable to the current
|
||||||
config.
|
config.
|
||||||
|
|
||||||
|
KUnit can be enabled or disabled at boot time, and this behavior is
|
||||||
|
controlled by the kunit.enable kernel parameter.
|
||||||
|
By default, kunit.enable is set to 1 because KUNIT_DEFAULT_ENABLED is
|
||||||
|
enabled by default. To ensure that tests are executed as expected,
|
||||||
|
verify that kunit.enable=1 at boot time.
|
||||||
|
|
||||||
Once we have built our kernel (and/or modules), it is simple to run
|
Once we have built our kernel (and/or modules), it is simple to run
|
||||||
the tests. If the tests are built-in, they will run automatically on the
|
the tests. If the tests are built-in, they will run automatically on the
|
||||||
kernel boot. The results will be written to the kernel log (``dmesg``)
|
kernel boot. The results will be written to the kernel log (``dmesg``)
|
||||||
|
|
|
||||||
|
|
@ -30,7 +30,7 @@ rules:
|
||||||
document-start:
|
document-start:
|
||||||
present: true
|
present: true
|
||||||
empty-lines:
|
empty-lines:
|
||||||
max: 3
|
max: 1
|
||||||
max-end: 1
|
max-end: 1
|
||||||
empty-values:
|
empty-values:
|
||||||
forbid-in-block-mappings: true
|
forbid-in-block-mappings: true
|
||||||
|
|
|
||||||
|
|
@ -32,7 +32,8 @@ find_cmd = $(find_all_cmd) | \
|
||||||
sed 's|^$(srctree)/||' | \
|
sed 's|^$(srctree)/||' | \
|
||||||
grep -F -e "$(subst :," -e ",$(DT_SCHEMA_FILES))" | \
|
grep -F -e "$(subst :," -e ",$(DT_SCHEMA_FILES))" | \
|
||||||
sed 's|^|$(srctree)/|'
|
sed 's|^|$(srctree)/|'
|
||||||
CHK_DT_EXAMPLES := $(patsubst $(srctree)/%.yaml,%.example.dtb, $(shell $(find_cmd)))
|
CHK_DT_EXAMPLES := $(patsubst $(srctree)/%.yaml,%.example.dtb, \
|
||||||
|
$(shell $(find_cmd) | xargs grep -l '^examples:'))
|
||||||
|
|
||||||
quiet_cmd_yamllint = LINT $(src)
|
quiet_cmd_yamllint = LINT $(src)
|
||||||
cmd_yamllint = ($(find_cmd) | \
|
cmd_yamllint = ($(find_cmd) | \
|
||||||
|
|
|
||||||
|
|
@ -31,7 +31,9 @@ properties:
|
||||||
- description: Mercury+ AA1 boards
|
- description: Mercury+ AA1 boards
|
||||||
items:
|
items:
|
||||||
- enum:
|
- enum:
|
||||||
- enclustra,mercury-pe1
|
- enclustra,mercury-aa1-pe1
|
||||||
|
- enclustra,mercury-aa1-pe3
|
||||||
|
- enclustra,mercury-aa1-st1
|
||||||
- google,chameleon-v3
|
- google,chameleon-v3
|
||||||
- const: enclustra,mercury-aa1
|
- const: enclustra,mercury-aa1
|
||||||
- const: altr,socfpga-arria10
|
- const: altr,socfpga-arria10
|
||||||
|
|
@ -52,6 +54,26 @@ properties:
|
||||||
- const: altr,socfpga-cyclone5
|
- const: altr,socfpga-cyclone5
|
||||||
- const: altr,socfpga
|
- const: altr,socfpga
|
||||||
|
|
||||||
|
- description: Mercury SA1 boards
|
||||||
|
items:
|
||||||
|
- enum:
|
||||||
|
- enclustra,mercury-sa1-pe1
|
||||||
|
- enclustra,mercury-sa1-pe3
|
||||||
|
- enclustra,mercury-sa1-st1
|
||||||
|
- const: enclustra,mercury-sa1
|
||||||
|
- const: altr,socfpga-cyclone5
|
||||||
|
- const: altr,socfpga
|
||||||
|
|
||||||
|
- description: Mercury+ SA2 boards
|
||||||
|
items:
|
||||||
|
- enum:
|
||||||
|
- enclustra,mercury-sa2-pe1
|
||||||
|
- enclustra,mercury-sa2-pe3
|
||||||
|
- enclustra,mercury-sa2-st1
|
||||||
|
- const: enclustra,mercury-sa2
|
||||||
|
- const: altr,socfpga-cyclone5
|
||||||
|
- const: altr,socfpga
|
||||||
|
|
||||||
- description: Stratix 10 boards
|
- description: Stratix 10 boards
|
||||||
items:
|
items:
|
||||||
- enum:
|
- enum:
|
||||||
|
|
|
||||||
|
|
@ -27,17 +27,17 @@ properties:
|
||||||
additionalProperties: false
|
additionalProperties: false
|
||||||
|
|
||||||
properties:
|
properties:
|
||||||
"#address-cells":
|
'#address-cells':
|
||||||
const: 1
|
const: 1
|
||||||
|
|
||||||
"#size-cells":
|
'#size-cells':
|
||||||
const: 0
|
const: 0
|
||||||
|
|
||||||
patternProperties:
|
patternProperties:
|
||||||
"^osc[0-9]$":
|
'^osc[0-9]$':
|
||||||
type: object
|
type: object
|
||||||
|
|
||||||
"^[a-z0-9,_]+(clk|pll|clk_gate|clk_divided)(@[a-f0-9]+)?$":
|
'^[a-z0-9,_]+(clk|pll|clk_gate|clk_divided)(@[a-f0-9]+)?$':
|
||||||
type: object
|
type: object
|
||||||
$ref: '#/$defs/clock-props'
|
$ref: '#/$defs/clock-props'
|
||||||
unevaluatedProperties: false
|
unevaluatedProperties: false
|
||||||
|
|
@ -58,14 +58,14 @@ properties:
|
||||||
minItems: 1
|
minItems: 1
|
||||||
maxItems: 5
|
maxItems: 5
|
||||||
|
|
||||||
"#address-cells":
|
'#address-cells':
|
||||||
const: 1
|
const: 1
|
||||||
|
|
||||||
"#size-cells":
|
'#size-cells':
|
||||||
const: 0
|
const: 0
|
||||||
|
|
||||||
patternProperties:
|
patternProperties:
|
||||||
"^[a-z0-9,_]+(clk|pll)(@[a-f0-9]+)?$":
|
'^[a-z0-9,_]+(clk|pll)(@[a-f0-9]+)?$':
|
||||||
type: object
|
type: object
|
||||||
$ref: '#/$defs/clock-props'
|
$ref: '#/$defs/clock-props'
|
||||||
unevaluatedProperties: false
|
unevaluatedProperties: false
|
||||||
|
|
@ -86,11 +86,11 @@ properties:
|
||||||
required:
|
required:
|
||||||
- compatible
|
- compatible
|
||||||
- clocks
|
- clocks
|
||||||
- "#clock-cells"
|
- '#clock-cells'
|
||||||
|
|
||||||
required:
|
required:
|
||||||
- compatible
|
- compatible
|
||||||
- "#clock-cells"
|
- '#clock-cells'
|
||||||
|
|
||||||
required:
|
required:
|
||||||
- compatible
|
- compatible
|
||||||
|
|
@ -104,7 +104,7 @@ $defs:
|
||||||
reg:
|
reg:
|
||||||
maxItems: 1
|
maxItems: 1
|
||||||
|
|
||||||
"#clock-cells":
|
'#clock-cells':
|
||||||
const: 0
|
const: 0
|
||||||
|
|
||||||
clk-gate:
|
clk-gate:
|
||||||
|
|
|
||||||
24
Documentation/devicetree/bindings/arm/amd,seattle.yaml
Normal file
24
Documentation/devicetree/bindings/arm/amd,seattle.yaml
Normal file
|
|
@ -0,0 +1,24 @@
|
||||||
|
# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
|
||||||
|
%YAML 1.2
|
||||||
|
---
|
||||||
|
$id: http://devicetree.org/schemas/arm/amd,seattle.yaml#
|
||||||
|
$schema: http://devicetree.org/meta-schemas/core.yaml#
|
||||||
|
|
||||||
|
title: AMD Seattle SoC Platforms
|
||||||
|
|
||||||
|
maintainers:
|
||||||
|
- Suravee Suthikulpanit <suravee.suthikulpanit@amd.com>
|
||||||
|
- Tom Lendacky <thomas.lendacky@amd.com>
|
||||||
|
|
||||||
|
properties:
|
||||||
|
$nodename:
|
||||||
|
const: "/"
|
||||||
|
compatible:
|
||||||
|
oneOf:
|
||||||
|
- description: Boards with AMD Seattle SoC
|
||||||
|
items:
|
||||||
|
- const: amd,seattle-overdrive
|
||||||
|
- const: amd,seattle
|
||||||
|
|
||||||
|
additionalProperties: true
|
||||||
|
...
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user