Merge branch 'for-7.1-printf-kunit-build' into for-linus
This commit is contained in:
commit
3e9e952bb3
12392 changed files with 282643 additions and 137177 deletions
|
|
@ -259,6 +259,7 @@ ForEachMacros:
|
|||
- 'for_each_collection'
|
||||
- 'for_each_comp_order'
|
||||
- 'for_each_compatible_node'
|
||||
- 'for_each_compatible_node_scoped'
|
||||
- 'for_each_component_dais'
|
||||
- 'for_each_component_dais_safe'
|
||||
- 'for_each_conduit'
|
||||
|
|
|
|||
|
|
@ -1,8 +1,6 @@
|
|||
# SPDX-License-Identifier: GPL-2.0-only
|
||||
|
||||
root = true
|
||||
|
||||
[{*.{awk,c,dts,dtsi,dtso,h,mk,s,S},Kconfig,Makefile,Makefile.*}]
|
||||
[{*.{awk,c,dts,dtsi,dtso,h,mk,rst,s,S},Kconfig,Makefile,Makefile.*}]
|
||||
charset = utf-8
|
||||
end_of_line = lf
|
||||
insert_final_newline = true
|
||||
|
|
|
|||
1
.mailmap
1
.mailmap
|
|
@ -563,6 +563,7 @@ Michel Dänzer <michel@tungstengraphics.com>
|
|||
Michel Lespinasse <michel@lespinasse.org>
|
||||
Michel Lespinasse <michel@lespinasse.org> <walken@google.com>
|
||||
Michel Lespinasse <michel@lespinasse.org> <walken@zoy.org>
|
||||
Mickaël Salaün <mic@digikod.net> <mic@linux.microsoft.com>
|
||||
Miguel Ojeda <ojeda@kernel.org> <miguel.ojeda.sandonis@gmail.com>
|
||||
Mike Rapoport <rppt@kernel.org> <mike@compulab.co.il>
|
||||
Mike Rapoport <rppt@kernel.org> <mike.rapoport@gmail.com>
|
||||
|
|
|
|||
11
CREDITS
11
CREDITS
|
|
@ -2663,6 +2663,10 @@ S: 3404 E. Harmony Road
|
|||
S: Fort Collins, CO 80528
|
||||
S: USA
|
||||
|
||||
N: Jon Mason
|
||||
E: jdmason@kudzu.us
|
||||
D: Neterion 10GbE drivers (s2io/vxge)
|
||||
|
||||
N: Torben Mathiasen
|
||||
E: torben.mathiasen@compaq.com
|
||||
E: torben@kernel.dk
|
||||
|
|
@ -3488,7 +3492,8 @@ S: Brazil
|
|||
N: Stephen Rothwell
|
||||
E: sfr@canb.auug.org.au
|
||||
W: http://www.canb.auug.org.au/~sfr
|
||||
P: 1024/BD8C7805 CD A4 9D 01 10 6E 7E 3B 91 88 FA D9 C8 40 AA 02
|
||||
P: 4096R/5AD24211C060D1C8 D41C A3ED 5B30 275C F5A0 1B05 5AD2 4211 C060 D1C8
|
||||
D: Created linux-next and maintained it 2008-2026
|
||||
D: Boot/setup/build work for setup > 2K
|
||||
D: Author, APM driver
|
||||
D: Directory notification
|
||||
|
|
@ -3810,6 +3815,10 @@ S: Post Office Box 500
|
|||
S: Batavia, Illinois 60510
|
||||
S: USA
|
||||
|
||||
N: Jes Sorensen
|
||||
E: jes@trained-monkey.org
|
||||
D: HIPPI support and Essential RoadRunner driver
|
||||
|
||||
N: Leo Spiekman
|
||||
E: leo@netlabs.net
|
||||
W: http://www.netlabs.net/hp/leo/
|
||||
|
|
|
|||
|
|
@ -819,7 +819,6 @@ networking/device_drivers/intel/ixgbe networking/device_drivers/ethernet/intel/i
|
|||
networking/device_drivers/intel/ixgbevf networking/device_drivers/ethernet/intel/ixgbevf
|
||||
networking/device_drivers/marvell/octeontx2 networking/device_drivers/ethernet/marvell/octeontx2
|
||||
networking/device_drivers/microsoft/netvsc networking/device_drivers/ethernet/microsoft/netvsc
|
||||
networking/device_drivers/neterion/s2io networking/device_drivers/ethernet/neterion/s2io
|
||||
networking/device_drivers/netronome/nfp networking/device_drivers/ethernet/netronome/nfp
|
||||
networking/device_drivers/pensando/ionic networking/device_drivers/ethernet/pensando/ionic
|
||||
networking/device_drivers/qualcomm/rmnet networking/device_drivers/cellular/qualcomm/rmnet
|
||||
|
|
|
|||
|
|
@ -136,6 +136,21 @@ Description: The last executed device administrative command's status/error.
|
|||
Also last configuration error overloaded.
|
||||
Writing to it will clear the status.
|
||||
|
||||
What: /sys/bus/dsa/devices/dsa<m>/dsacaps
|
||||
Date: April 5, 2026
|
||||
KernelVersion: 6.20.0
|
||||
Contact: dmaengine@vger.kernel.org
|
||||
Description: The DSA3 specification introduces three new capability
|
||||
registers: dsacap[0-2]. User components (e.g., configuration
|
||||
libraries and workload applications) require this information
|
||||
to properly utilize the DSA3 features.
|
||||
This includes SGL capability support, Enabling hardware-specific
|
||||
optimizations, Configuring memory, etc.
|
||||
The output format is '<dsacap2>,<dsacap1>,<dsacap0>' where each
|
||||
DSA cap value is a 64 bit hex value.
|
||||
This attribute should only be visible on DSA devices of version
|
||||
3 or later.
|
||||
|
||||
What: /sys/bus/dsa/devices/dsa<m>/iaa_cap
|
||||
Date: Sept 14, 2022
|
||||
KernelVersion: 6.0.0
|
||||
|
|
|
|||
|
|
@ -23,8 +23,7 @@ What: /sys/accessibility/speakup/bleep_time
|
|||
KernelVersion: 2.6
|
||||
Contact: speakup@linux-speakup.org
|
||||
Description: This controls the duration of the PC speaker beeps speakup
|
||||
produces.
|
||||
TODO: What are the units? Jiffies?
|
||||
produces, in milliseconds.
|
||||
|
||||
What: /sys/accessibility/speakup/cursor_time
|
||||
KernelVersion: 2.6
|
||||
|
|
|
|||
|
|
@ -17,6 +17,12 @@ Description:
|
|||
where the implementation is conveyed via the @provider
|
||||
attribute.
|
||||
|
||||
This interface fails reads and sets errno to EFBIG when the
|
||||
report generated by @provider exceeds the configfs-tsm-report
|
||||
internal maximums. Contact the platform provider for the
|
||||
compatible security module, driver, and attestation library
|
||||
combination.
|
||||
|
||||
What: /sys/kernel/config/tsm/report/$name/auxblob
|
||||
Date: October, 2023
|
||||
KernelVersion: v6.7
|
||||
|
|
@ -31,6 +37,9 @@ Description:
|
|||
Standardization v2.03 Section 4.1.8.1 MSG_REPORT_REQ.
|
||||
https://www.amd.com/content/dam/amd/en/documents/epyc-technical-docs/specifications/56421.pdf
|
||||
|
||||
See "EFBIG" comment in the @outblob description for potential
|
||||
error conditions.
|
||||
|
||||
What: /sys/kernel/config/tsm/report/$name/manifestblob
|
||||
Date: January, 2024
|
||||
KernelVersion: v6.10
|
||||
|
|
@ -43,6 +52,9 @@ Description:
|
|||
See 'service_provider' for information on the format of the
|
||||
manifest blob.
|
||||
|
||||
See "EFBIG" comment in the @outblob description for potential
|
||||
error conditions.
|
||||
|
||||
What: /sys/kernel/config/tsm/report/$name/provider
|
||||
Date: September, 2023
|
||||
KernelVersion: v6.7
|
||||
|
|
@ -61,6 +73,10 @@ Description:
|
|||
Library Revision 0.8 Appendix 4,5
|
||||
https://download.01.org/intel-sgx/latest/dcap-latest/linux/docs/Intel_TDX_DCAP_Quoting_Library_API.pdf
|
||||
|
||||
Intel TDX platforms with DICE-based attestation use CBOR Web Token
|
||||
(CWT) format for the Quote payload. This is indicated by the Quote
|
||||
size exceeding 8KB.
|
||||
|
||||
What: /sys/kernel/config/tsm/report/$name/generation
|
||||
Date: September, 2023
|
||||
KernelVersion: v6.7
|
||||
|
|
|
|||
|
|
@ -4,11 +4,12 @@ KernelVersion: 3.19
|
|||
Description:
|
||||
The attributes:
|
||||
|
||||
========== ====================================
|
||||
index index value for the USB MIDI adapter
|
||||
id ID string for the USB MIDI adapter
|
||||
buflen MIDI buffer length
|
||||
qlen USB read request queue length
|
||||
in_ports number of MIDI input ports
|
||||
out_ports number of MIDI output ports
|
||||
========== ====================================
|
||||
================ ====================================
|
||||
index index value for the USB MIDI adapter
|
||||
id ID string for the USB MIDI adapter
|
||||
buflen MIDI buffer length
|
||||
qlen USB read request queue length
|
||||
in_ports number of MIDI input ports
|
||||
out_ports number of MIDI output ports
|
||||
interface_string USB AudioControl interface string
|
||||
================ ====================================
|
||||
|
|
|
|||
|
|
@ -150,3 +150,17 @@ Contact: Sergey Senozhatsky <senozhatsky@chromium.org>
|
|||
Description:
|
||||
The algorithm_params file is write-only and is used to setup
|
||||
compression algorithm parameters.
|
||||
|
||||
What: /sys/block/zram<id>/writeback_compressed
|
||||
Date: Decemeber 2025
|
||||
Contact: Richard Chang <richardycc@google.com>
|
||||
Description:
|
||||
The writeback_compressed device atrribute toggles compressed
|
||||
writeback feature.
|
||||
|
||||
What: /sys/block/zram<id>/writeback_batch_size
|
||||
Date: November 2025
|
||||
Contact: Sergey Senozhatsky <senozhatsky@chromium.org>
|
||||
Description:
|
||||
The writeback_batch_size device atrribute sets the maximum
|
||||
number of in-flight writeback operations.
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
What: /sys/bus/coresight/devices/dummy_source<N>/enable_source
|
||||
Date: Dec 2024
|
||||
KernelVersion: 6.14
|
||||
Contact: Mao Jinlong <quic_jinlmao@quicinc.com>
|
||||
Contact: Mao Jinlong <jinlong.mao@oss.qualcomm.com>
|
||||
Description: (RW) Enable/disable tracing of dummy source. A sink should be activated
|
||||
before enabling the source. The path of coresight components linking
|
||||
the source to the sink is configured and managed automatically by the
|
||||
|
|
@ -10,7 +10,7 @@ Description: (RW) Enable/disable tracing of dummy source. A sink should be activ
|
|||
What: /sys/bus/coresight/devices/dummy_source<N>/traceid
|
||||
Date: Dec 2024
|
||||
KernelVersion: 6.14
|
||||
Contact: Mao Jinlong <quic_jinlmao@quicinc.com>
|
||||
Contact: Mao Jinlong <jinlong.mao@oss.qualcomm.com>
|
||||
Description: (R) Show the trace ID that will appear in the trace stream
|
||||
coming from this trace entity.
|
||||
|
||||
|
|
|
|||
69
Documentation/ABI/testing/sysfs-bus-coresight-devices-tpda
Normal file
69
Documentation/ABI/testing/sysfs-bus-coresight-devices-tpda
Normal file
|
|
@ -0,0 +1,69 @@
|
|||
What: /sys/bus/coresight/devices/<tpda-name>/trig_async_enable
|
||||
Date: December 2025
|
||||
KernelVersion: 6.20
|
||||
Contact: Jinlong Mao <jinlong.mao@oss.qualcomm.com>, Tao Zhang <tao.zhang@oss.qualcomm.com>, Jie Gan <jie.gan@oss.qualcomm.com>
|
||||
Description:
|
||||
(RW) Enable/disable cross trigger synchronization sequence interface.
|
||||
|
||||
What: /sys/bus/coresight/devices/<tpda-name>/trig_flag_ts_enable
|
||||
Date: December 2025
|
||||
KernelVersion: 6.20
|
||||
Contact: Jinlong Mao <jinlong.mao@oss.qualcomm.com>, Tao Zhang <tao.zhang@oss.qualcomm.com>, Jie Gan <jie.gan@oss.qualcomm.com>
|
||||
Description:
|
||||
(RW) Enable/disable cross trigger FLAG packet request interface.
|
||||
|
||||
What: /sys/bus/coresight/devices/<tpda-name>/trig_freq_enable
|
||||
Date: December 2025
|
||||
KernelVersion: 6.20
|
||||
Contact: Jinlong Mao <jinlong.mao@oss.qualcomm.com>, Tao Zhang <tao.zhang@oss.qualcomm.com>, Jie Gan <jie.gan@oss.qualcomm.com>
|
||||
Description:
|
||||
(RW) Enable/disable cross trigger FREQ packet request interface.
|
||||
|
||||
What: /sys/bus/coresight/devices/<tpda-name>/freq_ts_enable
|
||||
Date: December 2025
|
||||
KernelVersion: 6.20
|
||||
Contact: Jinlong Mao <jinlong.mao@oss.qualcomm.com>, Tao Zhang <tao.zhang@oss.qualcomm.com>, Jie Gan <jie.gan@oss.qualcomm.com>
|
||||
Description:
|
||||
(RW) Enable/disable the timestamp for all FREQ packets.
|
||||
|
||||
What: /sys/bus/coresight/devices/<tpda-name>/cmbchan_mode
|
||||
Date: December 2025
|
||||
KernelVersion: 6.20
|
||||
Contact: Jinlong Mao <jinlong.mao@oss.qualcomm.com>, Tao Zhang <tao.zhang@oss.qualcomm.com>, Jie Gan <jie.gan@oss.qualcomm.com>
|
||||
Description:
|
||||
(RW) Configure the CMB/MCMB channel mode for all enabled ports.
|
||||
Value 0 means raw channel mapping mode. Value 1 means channel pair marking mode.
|
||||
|
||||
What: /sys/bus/coresight/devices/<tpda-name>/global_flush_req
|
||||
Date: December 2025
|
||||
KernelVersion: 6.20
|
||||
Contact: Jinlong Mao <jinlong.mao@oss.qualcomm.com>, Tao Zhang <tao.zhang@oss.qualcomm.com>, Jie Gan <jie.gan@oss.qualcomm.com>
|
||||
Description:
|
||||
(RW) Set global (all ports) flush request bit. The bit remains set until a
|
||||
global flush request sequence completes.
|
||||
|
||||
What: /sys/bus/coresight/devices/<tpda-name>/syncr_mode
|
||||
Date: December 2025
|
||||
KernelVersion: 6.20
|
||||
Contact: Jinlong Mao <jinlong.mao@oss.qualcomm.com>, Tao Zhang <tao.zhang@oss.qualcomm.com>, Jie Gan <jie.gan@oss.qualcomm.com>
|
||||
Description:
|
||||
(RW) Set mode the of the syncr counter.
|
||||
mode 0 - COUNT[11:0] value represents the approximate number of bytes moved between two ASYNC packet requests
|
||||
mode 1 - the bits COUNT[11:7] are used as a power of 2. for example, we could insert an async packet every 8K
|
||||
data by writing a value 13 to the COUNT[11:7] field.
|
||||
|
||||
What: /sys/bus/coresight/devices/<tpda-name>/syncr_count
|
||||
Date: December 2025
|
||||
KernelVersion: 6.20
|
||||
Contact: Jinlong Mao <jinlong.mao@oss.qualcomm.com>, Tao Zhang <tao.zhang@oss.qualcomm.com>, Jie Gan <jie.gan@oss.qualcomm.com>
|
||||
Description:
|
||||
(RW) Set value the of the syncr counter.
|
||||
Range: 0-4095
|
||||
|
||||
What: /sys/bus/coresight/devices/<tpda-name>/port_flush_req
|
||||
Date: December 2025
|
||||
KernelVersion: 6.20
|
||||
Contact: Jinlong Mao <jinlong.mao@oss.qualcomm.com>, Tao Zhang <tao.zhang@oss.qualcomm.com>, Jie Gan <jie.gan@oss.qualcomm.com>
|
||||
Description:
|
||||
(RW) Configure the bit i to requests a flush operation of port i on the TPDA.
|
||||
The requested bit(s) remain set until the flush request completes.
|
||||
|
|
@ -1,7 +1,7 @@
|
|||
What: /sys/bus/coresight/devices/<tpdm-name>/integration_test
|
||||
Date: January 2023
|
||||
KernelVersion: 6.2
|
||||
Contact: Jinlong Mao (QUIC) <quic_jinlmao@quicinc.com>, Tao Zhang (QUIC) <quic_taozha@quicinc.com>
|
||||
Contact: Jinlong Mao <jinlong.mao@oss.qualcomm.com>, Tao Zhang <tao.zhang@oss.qualcomm.com>
|
||||
Description:
|
||||
(Write) Run integration test for tpdm. Integration test
|
||||
will generate test data for tpdm. It can help to make
|
||||
|
|
@ -15,7 +15,7 @@ Description:
|
|||
What: /sys/bus/coresight/devices/<tpdm-name>/reset_dataset
|
||||
Date: March 2023
|
||||
KernelVersion: 6.7
|
||||
Contact: Jinlong Mao (QUIC) <quic_jinlmao@quicinc.com>, Tao Zhang (QUIC) <quic_taozha@quicinc.com>
|
||||
Contact: Jinlong Mao <jinlong.mao@oss.qualcomm.com>, Tao Zhang <tao.zhang@oss.qualcomm.com>
|
||||
Description:
|
||||
(Write) Reset the dataset of the tpdm.
|
||||
|
||||
|
|
@ -25,7 +25,7 @@ Description:
|
|||
What: /sys/bus/coresight/devices/<tpdm-name>/dsb_trig_type
|
||||
Date: March 2023
|
||||
KernelVersion: 6.7
|
||||
Contact: Jinlong Mao (QUIC) <quic_jinlmao@quicinc.com>, Tao Zhang (QUIC) <quic_taozha@quicinc.com>
|
||||
Contact: Jinlong Mao <jinlong.mao@oss.qualcomm.com>, Tao Zhang <tao.zhang@oss.qualcomm.com>
|
||||
Description:
|
||||
(RW) Set/Get the trigger type of the DSB for tpdm.
|
||||
|
||||
|
|
@ -36,7 +36,7 @@ Description:
|
|||
What: /sys/bus/coresight/devices/<tpdm-name>/dsb_trig_ts
|
||||
Date: March 2023
|
||||
KernelVersion: 6.7
|
||||
Contact: Jinlong Mao (QUIC) <quic_jinlmao@quicinc.com>, Tao Zhang (QUIC) <quic_taozha@quicinc.com>
|
||||
Contact: Jinlong Mao <jinlong.mao@oss.qualcomm.com>, Tao Zhang <tao.zhang@oss.qualcomm.com>
|
||||
Description:
|
||||
(RW) Set/Get the trigger timestamp of the DSB for tpdm.
|
||||
|
||||
|
|
@ -47,7 +47,7 @@ Description:
|
|||
What: /sys/bus/coresight/devices/<tpdm-name>/dsb_mode
|
||||
Date: March 2023
|
||||
KernelVersion: 6.7
|
||||
Contact: Jinlong Mao (QUIC) <quic_jinlmao@quicinc.com>, Tao Zhang (QUIC) <quic_taozha@quicinc.com>
|
||||
Contact: Jinlong Mao <jinlong.mao@oss.qualcomm.com>, Tao Zhang <tao.zhang@oss.qualcomm.com>
|
||||
Description:
|
||||
(RW) Set/Get the programming mode of the DSB for tpdm.
|
||||
|
||||
|
|
@ -61,7 +61,7 @@ Description:
|
|||
What: /sys/bus/coresight/devices/<tpdm-name>/dsb_edge/ctrl_idx
|
||||
Date: March 2023
|
||||
KernelVersion: 6.7
|
||||
Contact: Jinlong Mao (QUIC) <quic_jinlmao@quicinc.com>, Tao Zhang (QUIC) <quic_taozha@quicinc.com>
|
||||
Contact: Jinlong Mao <jinlong.mao@oss.qualcomm.com>, Tao Zhang <tao.zhang@oss.qualcomm.com>
|
||||
Description:
|
||||
(RW) Set/Get the index number of the edge detection for the DSB
|
||||
subunit TPDM. Since there are at most 256 edge detections, this
|
||||
|
|
@ -70,7 +70,7 @@ Description:
|
|||
What: /sys/bus/coresight/devices/<tpdm-name>/dsb_edge/ctrl_val
|
||||
Date: March 2023
|
||||
KernelVersion: 6.7
|
||||
Contact: Jinlong Mao (QUIC) <quic_jinlmao@quicinc.com>, Tao Zhang (QUIC) <quic_taozha@quicinc.com>
|
||||
Contact: Jinlong Mao <jinlong.mao@oss.qualcomm.com>, Tao Zhang <tao.zhang@oss.qualcomm.com>
|
||||
Description:
|
||||
Write a data to control the edge detection corresponding to
|
||||
the index number. Before writing data to this sysfs file,
|
||||
|
|
@ -86,7 +86,7 @@ Description:
|
|||
What: /sys/bus/coresight/devices/<tpdm-name>/dsb_edge/ctrl_mask
|
||||
Date: March 2023
|
||||
KernelVersion: 6.7
|
||||
Contact: Jinlong Mao (QUIC) <quic_jinlmao@quicinc.com>, Tao Zhang (QUIC) <quic_taozha@quicinc.com>
|
||||
Contact: Jinlong Mao <jinlong.mao@oss.qualcomm.com>, Tao Zhang <tao.zhang@oss.qualcomm.com>
|
||||
Description:
|
||||
Write a data to mask the edge detection corresponding to the index
|
||||
number. Before writing data to this sysfs file, "ctrl_idx" should
|
||||
|
|
@ -98,21 +98,21 @@ Description:
|
|||
What: /sys/bus/coresight/devices/<tpdm-name>/dsb_edge/edcr[0:15]
|
||||
Date: March 2023
|
||||
KernelVersion: 6.7
|
||||
Contact: Jinlong Mao (QUIC) <quic_jinlmao@quicinc.com>, Tao Zhang (QUIC) <quic_taozha@quicinc.com>
|
||||
Contact: Jinlong Mao <jinlong.mao@oss.qualcomm.com>, Tao Zhang <tao.zhang@oss.qualcomm.com>
|
||||
Description:
|
||||
Read a set of the edge control value of the DSB in TPDM.
|
||||
|
||||
What: /sys/bus/coresight/devices/<tpdm-name>/dsb_edge/edcmr[0:7]
|
||||
Date: March 2023
|
||||
KernelVersion: 6.7
|
||||
Contact: Jinlong Mao (QUIC) <quic_jinlmao@quicinc.com>, Tao Zhang (QUIC) <quic_taozha@quicinc.com>
|
||||
Contact: Jinlong Mao <jinlong.mao@oss.qualcomm.com>, Tao Zhang <tao.zhang@oss.qualcomm.com>
|
||||
Description:
|
||||
Read a set of the edge control mask of the DSB in TPDM.
|
||||
|
||||
What: /sys/bus/coresight/devices/<tpdm-name>/dsb_trig_patt/xpr[0:7]
|
||||
Date: March 2023
|
||||
KernelVersion: 6.7
|
||||
Contact: Jinlong Mao (QUIC) <quic_jinlmao@quicinc.com>, Tao Zhang (QUIC) <quic_taozha@quicinc.com>
|
||||
Contact: Jinlong Mao <jinlong.mao@oss.qualcomm.com>, Tao Zhang <tao.zhang@oss.qualcomm.com>
|
||||
Description:
|
||||
(RW) Set/Get the value of the trigger pattern for the DSB
|
||||
subunit TPDM.
|
||||
|
|
@ -120,7 +120,7 @@ Description:
|
|||
What: /sys/bus/coresight/devices/<tpdm-name>/dsb_trig_patt/xpmr[0:7]
|
||||
Date: March 2023
|
||||
KernelVersion: 6.7
|
||||
Contact: Jinlong Mao (QUIC) <quic_jinlmao@quicinc.com>, Tao Zhang (QUIC) <quic_taozha@quicinc.com>
|
||||
Contact: Jinlong Mao <jinlong.mao@oss.qualcomm.com>, Tao Zhang <tao.zhang@oss.qualcomm.com>
|
||||
Description:
|
||||
(RW) Set/Get the mask of the trigger pattern for the DSB
|
||||
subunit TPDM.
|
||||
|
|
@ -128,21 +128,21 @@ Description:
|
|||
What: /sys/bus/coresight/devices/<tpdm-name>/dsb_patt/tpr[0:7]
|
||||
Date: March 2023
|
||||
KernelVersion: 6.7
|
||||
Contact: Jinlong Mao (QUIC) <quic_jinlmao@quicinc.com>, Tao Zhang (QUIC) <quic_taozha@quicinc.com>
|
||||
Contact: Jinlong Mao <jinlong.mao@oss.qualcomm.com>, Tao Zhang <tao.zhang@oss.qualcomm.com>
|
||||
Description:
|
||||
(RW) Set/Get the value of the pattern for the DSB subunit TPDM.
|
||||
|
||||
What: /sys/bus/coresight/devices/<tpdm-name>/dsb_patt/tpmr[0:7]
|
||||
Date: March 2023
|
||||
KernelVersion: 6.7
|
||||
Contact: Jinlong Mao (QUIC) <quic_jinlmao@quicinc.com>, Tao Zhang (QUIC) <quic_taozha@quicinc.com>
|
||||
Contact: Jinlong Mao <jinlong.mao@oss.qualcomm.com>, Tao Zhang <tao.zhang@oss.qualcomm.com>
|
||||
Description:
|
||||
(RW) Set/Get the mask of the pattern for the DSB subunit TPDM.
|
||||
|
||||
What: /sys/bus/coresight/devices/<tpdm-name>/dsb_patt/enable_ts
|
||||
Date: March 2023
|
||||
KernelVersion: 6.7
|
||||
Contact: Jinlong Mao (QUIC) <quic_jinlmao@quicinc.com>, Tao Zhang (QUIC) <quic_taozha@quicinc.com>
|
||||
Contact: Jinlong Mao <jinlong.mao@oss.qualcomm.com>, Tao Zhang <tao.zhang@oss.qualcomm.com>
|
||||
Description:
|
||||
(Write) Set the pattern timestamp of DSB tpdm. Read
|
||||
the pattern timestamp of DSB tpdm.
|
||||
|
|
@ -154,7 +154,7 @@ Description:
|
|||
What: /sys/bus/coresight/devices/<tpdm-name>/dsb_patt/set_type
|
||||
Date: March 2023
|
||||
KernelVersion: 6.7
|
||||
Contact: Jinlong Mao (QUIC) <quic_jinlmao@quicinc.com>, Tao Zhang (QUIC) <quic_taozha@quicinc.com>
|
||||
Contact: Jinlong Mao <jinlong.mao@oss.qualcomm.com>, Tao Zhang <tao.zhang@oss.qualcomm.com>
|
||||
Description:
|
||||
(Write) Set the pattern type of DSB tpdm. Read
|
||||
the pattern type of DSB tpdm.
|
||||
|
|
@ -166,7 +166,7 @@ Description:
|
|||
What: /sys/bus/coresight/devices/<tpdm-name>/dsb_msr/msr[0:31]
|
||||
Date: March 2023
|
||||
KernelVersion: 6.7
|
||||
Contact: Jinlong Mao (QUIC) <quic_jinlmao@quicinc.com>, Tao Zhang (QUIC) <quic_taozha@quicinc.com>
|
||||
Contact: Jinlong Mao <jinlong.mao@oss.qualcomm.com>, Tao Zhang <tao.zhang@oss.qualcomm.com>
|
||||
Description:
|
||||
(RW) Set/Get the MSR(mux select register) for the DSB subunit
|
||||
TPDM.
|
||||
|
|
@ -174,7 +174,7 @@ Description:
|
|||
What: /sys/bus/coresight/devices/<tpdm-name>/cmb_mode
|
||||
Date: January 2024
|
||||
KernelVersion: 6.9
|
||||
Contact: Jinlong Mao (QUIC) <quic_jinlmao@quicinc.com>, Tao Zhang (QUIC) <quic_taozha@quicinc.com>
|
||||
Contact: Jinlong Mao <jinlong.mao@oss.qualcomm.com>, Tao Zhang <tao.zhang@oss.qualcomm.com>
|
||||
Description: (Write) Set the data collection mode of CMB tpdm. Continuous
|
||||
change creates CMB data set elements on every CMBCLK edge.
|
||||
Trace-on-change creates CMB data set elements only when a new
|
||||
|
|
@ -188,7 +188,7 @@ Description: (Write) Set the data collection mode of CMB tpdm. Continuous
|
|||
What: /sys/bus/coresight/devices/<tpdm-name>/cmb_trig_patt/xpr[0:1]
|
||||
Date: January 2024
|
||||
KernelVersion: 6.9
|
||||
Contact: Jinlong Mao (QUIC) <quic_jinlmao@quicinc.com>, Tao Zhang (QUIC) <quic_taozha@quicinc.com>
|
||||
Contact: Jinlong Mao <jinlong.mao@oss.qualcomm.com>, Tao Zhang <tao.zhang@oss.qualcomm.com>
|
||||
Description:
|
||||
(RW) Set/Get the value of the trigger pattern for the CMB
|
||||
subunit TPDM.
|
||||
|
|
@ -196,7 +196,7 @@ Description:
|
|||
What: /sys/bus/coresight/devices/<tpdm-name>/cmb_trig_patt/xpmr[0:1]
|
||||
Date: January 2024
|
||||
KernelVersion: 6.9
|
||||
Contact: Jinlong Mao (QUIC) <quic_jinlmao@quicinc.com>, Tao Zhang (QUIC) <quic_taozha@quicinc.com>
|
||||
Contact: Jinlong Mao <jinlong.mao@oss.qualcomm.com>, Tao Zhang <tao.zhang@oss.qualcomm.com>
|
||||
Description:
|
||||
(RW) Set/Get the mask of the trigger pattern for the CMB
|
||||
subunit TPDM.
|
||||
|
|
@ -204,21 +204,21 @@ Description:
|
|||
What: /sys/bus/coresight/devices/<tpdm-name>/dsb_patt/tpr[0:1]
|
||||
Date: January 2024
|
||||
KernelVersion: 6.9
|
||||
Contact: Jinlong Mao (QUIC) <quic_jinlmao@quicinc.com>, Tao Zhang (QUIC) <quic_taozha@quicinc.com>
|
||||
Contact: Jinlong Mao <jinlong.mao@oss.qualcomm.com>, Tao Zhang <tao.zhang@oss.qualcomm.com>
|
||||
Description:
|
||||
(RW) Set/Get the value of the pattern for the CMB subunit TPDM.
|
||||
|
||||
What: /sys/bus/coresight/devices/<tpdm-name>/dsb_patt/tpmr[0:1]
|
||||
Date: January 2024
|
||||
KernelVersion: 6.9
|
||||
Contact: Jinlong Mao (QUIC) <quic_jinlmao@quicinc.com>, Tao Zhang (QUIC) <quic_taozha@quicinc.com>
|
||||
Contact: Jinlong Mao <jinlong.mao@oss.qualcomm.com>, Tao Zhang <tao.zhang@oss.qualcomm.com>
|
||||
Description:
|
||||
(RW) Set/Get the mask of the pattern for the CMB subunit TPDM.
|
||||
|
||||
What: /sys/bus/coresight/devices/<tpdm-name>/cmb_patt/enable_ts
|
||||
Date: January 2024
|
||||
KernelVersion: 6.9
|
||||
Contact: Jinlong Mao (QUIC) <quic_jinlmao@quicinc.com>, Tao Zhang (QUIC) <quic_taozha@quicinc.com>
|
||||
Contact: Jinlong Mao <jinlong.mao@oss.qualcomm.com>, Tao Zhang <tao.zhang@oss.qualcomm.com>
|
||||
Description:
|
||||
(Write) Set the pattern timestamp of CMB tpdm. Read
|
||||
the pattern timestamp of CMB tpdm.
|
||||
|
|
@ -230,7 +230,7 @@ Description:
|
|||
What: /sys/bus/coresight/devices/<tpdm-name>/cmb_trig_ts
|
||||
Date: January 2024
|
||||
KernelVersion: 6.9
|
||||
Contact: Jinlong Mao (QUIC) <quic_jinlmao@quicinc.com>, Tao Zhang (QUIC) <quic_taozha@quicinc.com>
|
||||
Contact: Jinlong Mao <jinlong.mao@oss.qualcomm.com>, Tao Zhang <tao.zhang@oss.qualcomm.com>
|
||||
Description:
|
||||
(RW) Set/Get the trigger timestamp of the CMB for tpdm.
|
||||
|
||||
|
|
@ -241,7 +241,7 @@ Description:
|
|||
What: /sys/bus/coresight/devices/<tpdm-name>/cmb_ts_all
|
||||
Date: January 2024
|
||||
KernelVersion: 6.9
|
||||
Contact: Jinlong Mao (QUIC) <quic_jinlmao@quicinc.com>, Tao Zhang (QUIC) <quic_taozha@quicinc.com>
|
||||
Contact: Jinlong Mao <jinlong.mao@oss.qualcomm.com>, Tao Zhang <tao.zhang@oss.qualcomm.com>
|
||||
Description:
|
||||
(RW) Read or write the status of timestamp upon all interface.
|
||||
Only value 0 and 1 can be written to this node. Set this node to 1 to request
|
||||
|
|
@ -253,7 +253,7 @@ Description:
|
|||
What: /sys/bus/coresight/devices/<tpdm-name>/cmb_msr/msr[0:31]
|
||||
Date: January 2024
|
||||
KernelVersion: 6.9
|
||||
Contact: Jinlong Mao (QUIC) <quic_jinlmao@quicinc.com>, Tao Zhang (QUIC) <quic_taozha@quicinc.com>
|
||||
Contact: Jinlong Mao <jinlong.mao@oss.qualcomm.com>, Tao Zhang <tao.zhang@oss.qualcomm.com>
|
||||
Description:
|
||||
(RW) Set/Get the MSR(mux select register) for the CMB subunit
|
||||
TPDM.
|
||||
|
|
@ -261,7 +261,7 @@ Description:
|
|||
What: /sys/bus/coresight/devices/<tpdm-name>/mcmb_trig_lane
|
||||
Date: Feb 2025
|
||||
KernelVersion 6.15
|
||||
Contact: Jinlong Mao (QUIC) <quic_jinlmao@quicinc.com>, Tao Zhang (QUIC) <quic_taozha@quicinc.com>
|
||||
Contact: Jinlong Mao <jinlong.mao@oss.qualcomm.com>, Tao Zhang <tao.zhang@oss.qualcomm.com>
|
||||
Description:
|
||||
(RW) Set/Get which lane participates in the output pattern
|
||||
match cross trigger mechanism for the MCMB subunit TPDM.
|
||||
|
|
@ -269,7 +269,7 @@ Description:
|
|||
What: /sys/bus/coresight/devices/<tpdm-name>/mcmb_lanes_select
|
||||
Date: Feb 2025
|
||||
KernelVersion 6.15
|
||||
Contact: Jinlong Mao (QUIC) <quic_jinlmao@quicinc.com>, Tao Zhang (QUIC) <quic_taozha@quicinc.com>
|
||||
Contact: Jinlong Mao <jinlong.mao@oss.qualcomm.com>, Tao Zhang <tao.zhang@oss.qualcomm.com>
|
||||
Description:
|
||||
(RW) Set/Get the enablement of the individual lane.
|
||||
|
||||
|
|
|
|||
|
|
@ -3,9 +3,12 @@ Date: July 2015
|
|||
KernelVersion: 4.7
|
||||
Contact: linux-iio@vger.kernel.org
|
||||
Description:
|
||||
Writing '1' will perform a FOC (Fast Online Calibration). The
|
||||
corresponding calibration offsets can be read from `*_calibbias`
|
||||
entries.
|
||||
Writing '1' either perform a FOC (Fast Online Calibration) or
|
||||
enter calibration mode.
|
||||
Writing '0` exits calibration mode. It is a NOP for FOC enabled
|
||||
sensors.
|
||||
The corresponding calibration offsets can be read from `*_calibbias`
|
||||
entries.
|
||||
|
||||
What: /sys/bus/iio/devices/iio:deviceX/id
|
||||
Date: September 2017
|
||||
|
|
|
|||
|
|
@ -85,3 +85,45 @@ Description:
|
|||
up to 5000. The default value is 64 ms.
|
||||
This polling interval is used while DbC is enabled but has no
|
||||
active data transfers.
|
||||
|
||||
What: /sys/bus/pci/drivers/xhci_hcd/.../dbc_serial
|
||||
Date: January 2026
|
||||
Contact: Łukasz Bartosik <ukaszb@chromium.org>
|
||||
Description:
|
||||
The dbc_serial attribute allows to change the serial number
|
||||
string descriptor presented by the debug device when a host
|
||||
requests a string descriptor with iSerialNumber index.
|
||||
Index is found in the iSerialNumber field in the device
|
||||
descriptor.
|
||||
Value can only be changed while debug capability (DbC) is in
|
||||
disabled state to prevent USB device descriptor change while
|
||||
connected to a USB host.
|
||||
The default value is "0001".
|
||||
The field length can be from 1 to 126 characters.
|
||||
|
||||
What: /sys/bus/pci/drivers/xhci_hcd/.../dbc_product
|
||||
Date: January 2026
|
||||
Contact: Łukasz Bartosik <ukaszb@chromium.org>
|
||||
Description:
|
||||
The dbc_product attribute allows to change the product string
|
||||
descriptor presented by the debug device when a host requests
|
||||
a string descriptor with iProduct index.
|
||||
Index is found in the iProduct field in the device descriptor.
|
||||
Value can only be changed while debug capability (DbC) is in
|
||||
disabled state to prevent USB device descriptor change while
|
||||
connected to a USB host.
|
||||
The default value is "Linux USB Debug Target".
|
||||
The field length can be from 1 to 126 characters.
|
||||
|
||||
What: /sys/bus/pci/drivers/xhci_hcd/.../dbc_manufacturer
|
||||
Date: January 2026
|
||||
Contact: Łukasz Bartosik <ukaszb@chromium.org>
|
||||
Description:
|
||||
The dbc_manufacturer attribute allows to change the manufacturer
|
||||
string descriptor presented by the debug device when a host
|
||||
requests a string descriptor with iManufacturer index.
|
||||
Value can only be changed while debug capability (DbC) is in
|
||||
disabled state to prevent USB device descriptor change while
|
||||
connected to a USB host.
|
||||
The default value is "Linux Foundation".
|
||||
The field length can be from 1 to 126 characters.
|
||||
|
|
|
|||
|
|
@ -17,3 +17,14 @@ Description:
|
|||
from the device.
|
||||
|
||||
This is a read-only attribute.
|
||||
|
||||
What: /sys/class/spi_master/spi<bus>/spi<bus>.<dev>/jedec_id
|
||||
Date: January 2026
|
||||
KernelVersion: 6.19
|
||||
Contact: Patrick Wicki <patrick.wicki@siemens.com>
|
||||
Description:
|
||||
Contains the raw JEDEC ID bytes returned by the RDID (0x9f) command. The
|
||||
bytes are exposed as a hex string in big-endian order as read from the
|
||||
device.
|
||||
|
||||
This is a read-only attribute.
|
||||
|
|
|
|||
|
|
@ -162,6 +162,17 @@ Description: Lists the supported USB Modes. The default USB mode that is used
|
|||
- usb3 (USB 3.2)
|
||||
- usb4 (USB4)
|
||||
|
||||
What: /sys/class/typec/<port>/<alt-mode>/priority
|
||||
Date: July 2025
|
||||
Contact: Andrei Kuchynski <akuchynski@chromium.org>
|
||||
Description:
|
||||
Displays and allows setting the priority for a specific alternate mode.
|
||||
The priority is an integer in the range 0-255. A lower numerical value
|
||||
indicates a higher priority (0 is the highest).
|
||||
If the new value is already in use by another mode, the priority of the
|
||||
conflicting mode and any subsequent modes will be incremented until they
|
||||
are all unique.
|
||||
|
||||
USB Type-C partner devices (eg. /sys/class/typec/port0-partner/)
|
||||
|
||||
What: /sys/class/typec/<port>-partner/accessory_mode
|
||||
|
|
|
|||
|
|
@ -520,7 +520,7 @@ What: /sys/fs/f2fs/<disk>/ckpt_thread_ioprio
|
|||
Date: January 2021
|
||||
Contact: "Daeho Jeong" <daehojeong@google.com>
|
||||
Description: Give a way to change checkpoint merge daemon's io priority.
|
||||
Its default value is "be,3", which means "BE" I/O class and
|
||||
Its default value is "rt,3", which means "RT" I/O class and
|
||||
I/O priority "3". We can select the class between "rt" and "be",
|
||||
and set the I/O priority within valid range of it. "," delimiter
|
||||
is necessary in between I/O class and priority number.
|
||||
|
|
@ -732,7 +732,7 @@ Description: Support configuring fault injection type, should be
|
|||
FAULT_TRUNCATE 0x00000400
|
||||
FAULT_READ_IO 0x00000800
|
||||
FAULT_CHECKPOINT 0x00001000
|
||||
FAULT_DISCARD 0x00002000
|
||||
FAULT_DISCARD 0x00002000 (obsolete)
|
||||
FAULT_WRITE_IO 0x00004000
|
||||
FAULT_SLAB_ALLOC 0x00008000
|
||||
FAULT_DQUOT_INIT 0x00010000
|
||||
|
|
@ -741,8 +741,10 @@ Description: Support configuring fault injection type, should be
|
|||
FAULT_BLKADDR_CONSISTENCE 0x00080000
|
||||
FAULT_NO_SEGMENT 0x00100000
|
||||
FAULT_INCONSISTENT_FOOTER 0x00200000
|
||||
FAULT_TIMEOUT 0x00400000 (1000ms)
|
||||
FAULT_ATOMIC_TIMEOUT 0x00400000 (1000ms)
|
||||
FAULT_VMALLOC 0x00800000
|
||||
FAULT_LOCK_TIMEOUT 0x01000000 (1000ms)
|
||||
FAULT_SKIP_WRITE 0x02000000
|
||||
=========================== ==========
|
||||
|
||||
What: /sys/fs/f2fs/<disk>/discard_io_aware_gran
|
||||
|
|
@ -939,3 +941,57 @@ Description: Controls write priority in multi-devices setups. A value of 0 means
|
|||
allocate_section_policy = 1 Prioritize writing to section before allocate_section_hint
|
||||
allocate_section_policy = 2 Prioritize writing to section after allocate_section_hint
|
||||
=========================== ==========================================================
|
||||
|
||||
What: /sys/fs/f2fs/<disk>/max_lock_elapsed_time
|
||||
Date: December 2025
|
||||
Contact: "Chao Yu" <chao@kernel.org>
|
||||
Description: This is a threshold, once a thread enters critical region that lock covers, total
|
||||
elapsed time exceeds this threshold, f2fs will print tracepoint to dump information
|
||||
of related context. This sysfs entry can be used to control the value of threshold,
|
||||
by default, the value is 500 ms.
|
||||
|
||||
What: /sys/fs/f2fs/<disk>/inject_timeout_type
|
||||
Date: December 2025
|
||||
Contact: "Chao Yu" <chao@kernel.org>
|
||||
Description: This sysfs entry can be used to change type of injected timeout:
|
||||
========== ===============================
|
||||
Flag_Value Flag_Description
|
||||
========== ===============================
|
||||
0x00000000 No timeout (default)
|
||||
0x00000001 Simulate running time
|
||||
0x00000002 Simulate IO type sleep time
|
||||
0x00000003 Simulate Non-IO type sleep time
|
||||
0x00000004 Simulate runnable time
|
||||
========== ===============================
|
||||
|
||||
What: /sys/fs/f2fs/<disk>/adjust_lock_priority
|
||||
Date: January 2026
|
||||
Contact: "Chao Yu" <chao@kernel.org>
|
||||
Description: This sysfs entry can be used to enable/disable to adjust priority for task
|
||||
which is in critical region covered by lock.
|
||||
========== ==================
|
||||
Flag_Value Flag_Description
|
||||
========== ==================
|
||||
0x00000000 Disabled (default)
|
||||
0x00000001 cp_rwsem
|
||||
0x00000002 node_change
|
||||
0x00000004 node_write
|
||||
0x00000008 gc_lock
|
||||
0x00000010 cp_global
|
||||
0x00000020 io_rwsem
|
||||
========== ==================
|
||||
|
||||
What: /sys/fs/f2fs/<disk>/lock_duration_priority
|
||||
Date: January 2026
|
||||
Contact: "Chao Yu" <chao@kernel.org>
|
||||
Description: f2fs can tune priority of thread which has entered into critical region covered by
|
||||
f2fs rwsemphore lock. This sysfs entry can be used to control priority value, the
|
||||
range is [100,139], by default the value is 120.
|
||||
|
||||
What: /sys/fs/f2fs/<disk>/critical_task_priority
|
||||
Date: February 2026
|
||||
Contact: "Chao Yu" <chao@kernel.org>
|
||||
Description: It can be used to tune priority of f2fs critical task, e.g. f2fs_ckpt, f2fs_gc
|
||||
threads, limitation as below:
|
||||
- it requires user has CAP_SYS_NICE capability.
|
||||
- the range is [100, 139], by default the value is 100.
|
||||
|
|
|
|||
|
|
@ -516,6 +516,19 @@ Contact: SeongJae Park <sj@kernel.org>
|
|||
Description: Reading this file returns the number of the exceed events of
|
||||
the scheme's quotas.
|
||||
|
||||
What: /sys/kernel/mm/damon/admin/kdamonds/<K>/contexts/<C>/schemes/<S>/stats/nr_snapshots
|
||||
Date: Dec 2025
|
||||
Contact: SeongJae Park <sj@kernel.org>
|
||||
Description: Reading this file returns the total number of DAMON snapshots
|
||||
that the scheme has tried to be applied.
|
||||
|
||||
What: /sys/kernel/mm/damon/admin/kdamonds/<K>/contexts/<C>/schemes/<S>/stats/max_nr_snapshots
|
||||
Date: Dec 2025
|
||||
Contact: SeongJae Park <sj@kernel.org>
|
||||
Description: Writing a number to this file sets the upper limit of
|
||||
nr_snapshots that deactivates the scheme when the limit is
|
||||
reached or exceeded.
|
||||
|
||||
What: /sys/kernel/mm/damon/admin/kdamonds/<K>/contexts/<C>/schemes/<S>/tried_regions/total_bytes
|
||||
Date: Jul 2023
|
||||
Contact: SeongJae Park <sj@kernel.org>
|
||||
|
|
|
|||
|
|
@ -95,6 +95,30 @@ by the PCI endpoint function driver.
|
|||
Register space of the function driver is usually configured
|
||||
using this API.
|
||||
|
||||
Some endpoint controllers also support calling pci_epc_set_bar() again
|
||||
for the same BAR (without calling pci_epc_clear_bar()) to update inbound
|
||||
address translations after the host has programmed the BAR base address.
|
||||
Endpoint function drivers can check this capability via the
|
||||
dynamic_inbound_mapping EPC feature bit.
|
||||
|
||||
When pci_epf_bar.num_submap is non-zero, the endpoint function driver is
|
||||
requesting BAR subrange mapping using pci_epf_bar.submap. This requires
|
||||
the EPC to advertise support via the subrange_mapping EPC feature bit.
|
||||
|
||||
When an EPF driver wants to make use of the inbound subrange mapping
|
||||
feature, it requires that the BAR base address has been programmed by
|
||||
the host during enumeration. Thus, it needs to call pci_epc_set_bar()
|
||||
twice for the same BAR (requires dynamic_inbound_mapping): first with
|
||||
num_submap set to zero and configuring the BAR size, then after the PCIe
|
||||
link is up and the host enumerates the endpoint and programs the BAR
|
||||
base address, again with num_submap set to non-zero value.
|
||||
|
||||
Note that when making use of the inbound subrange mapping feature, the
|
||||
EPF driver must not call pci_epc_clear_bar() between the two
|
||||
pci_epc_set_bar() calls, because clearing the BAR can clear/disable the
|
||||
BAR register or BAR decode on the endpoint while the host still expects
|
||||
the assigned BAR address to remain valid.
|
||||
|
||||
* pci_epc_clear_bar()
|
||||
|
||||
The PCI endpoint function driver should use pci_epc_clear_bar() to reset
|
||||
|
|
|
|||
|
|
@ -84,6 +84,25 @@ device, the following commands can be used::
|
|||
# echo 32 > functions/pci_epf_test/func1/msi_interrupts
|
||||
# echo 2048 > functions/pci_epf_test/func1/msix_interrupts
|
||||
|
||||
By default, pci-epf-test uses the following BAR sizes::
|
||||
|
||||
# grep . functions/pci_epf_test/func1/pci_epf_test.0/bar?_size
|
||||
functions/pci_epf_test/func1/pci_epf_test.0/bar0_size:131072
|
||||
functions/pci_epf_test/func1/pci_epf_test.0/bar1_size:131072
|
||||
functions/pci_epf_test/func1/pci_epf_test.0/bar2_size:131072
|
||||
functions/pci_epf_test/func1/pci_epf_test.0/bar3_size:131072
|
||||
functions/pci_epf_test/func1/pci_epf_test.0/bar4_size:131072
|
||||
functions/pci_epf_test/func1/pci_epf_test.0/bar5_size:1048576
|
||||
|
||||
The user can override a default value using e.g.::
|
||||
# echo 1048576 > functions/pci_epf_test/func1/pci_epf_test.0/bar1_size
|
||||
|
||||
Overriding the default BAR sizes can only be done before binding the
|
||||
pci-epf-test device to a PCI endpoint controller driver.
|
||||
|
||||
Note: Some endpoint controllers might have fixed-size BARs or reserved BARs;
|
||||
for such controllers, the corresponding BAR size in configfs will be ignored.
|
||||
|
||||
|
||||
Binding pci-epf-test Device to EP Controller
|
||||
--------------------------------------------
|
||||
|
|
|
|||
|
|
@ -52,14 +52,14 @@ pci-epf-vntb device, the following commands can be used::
|
|||
# cd /sys/kernel/config/pci_ep/
|
||||
# mkdir functions/pci_epf_vntb/func1
|
||||
|
||||
The "mkdir func1" above creates the pci-epf-ntb function device that will
|
||||
The "mkdir func1" above creates the pci-epf-vntb function device that will
|
||||
be probed by pci_epf_vntb driver.
|
||||
|
||||
The PCI endpoint framework populates the directory with the following
|
||||
configurable fields::
|
||||
|
||||
# ls functions/pci_epf_ntb/func1
|
||||
baseclass_code deviceid msi_interrupts pci-epf-ntb.0
|
||||
# ls functions/pci_epf_vntb/func1
|
||||
baseclass_code deviceid msi_interrupts pci-epf-vntb.0
|
||||
progif_code secondary subsys_id vendorid
|
||||
cache_line_size interrupt_pin msix_interrupts primary
|
||||
revid subclass_code subsys_vendor_id
|
||||
|
|
@ -111,13 +111,13 @@ A sample configuration for virtual NTB driver for virtual PCI bus::
|
|||
# echo 0x080A > functions/pci_epf_vntb/func1/pci_epf_vntb.0/vntb_pid
|
||||
# echo 0x10 > functions/pci_epf_vntb/func1/pci_epf_vntb.0/vbus_number
|
||||
|
||||
Binding pci-epf-ntb Device to EP Controller
|
||||
Binding pci-epf-vntb Device to EP Controller
|
||||
--------------------------------------------
|
||||
|
||||
NTB function device should be attached to PCI endpoint controllers
|
||||
connected to the host.
|
||||
|
||||
# ln -s controllers/5f010000.pcie_ep functions/pci-epf-ntb/func1/primary
|
||||
# ln -s controllers/5f010000.pcie_ep functions/pci_epf_vntb/func1/primary
|
||||
|
||||
Once the above step is completed, the PCI endpoint controllers are ready to
|
||||
establish a link with the host.
|
||||
|
|
@ -139,7 +139,7 @@ lspci Output at Host side
|
|||
-------------------------
|
||||
|
||||
Note that the devices listed here correspond to the values populated in
|
||||
"Creating pci-epf-ntb Device" section above::
|
||||
"Creating pci-epf-vntb Device" section above::
|
||||
|
||||
# lspci
|
||||
00:00.0 PCI bridge: Freescale Semiconductor Inc Device 0000 (rev 01)
|
||||
|
|
@ -152,7 +152,7 @@ lspci Output at EP Side / Virtual PCI bus
|
|||
-----------------------------------------
|
||||
|
||||
Note that the devices listed here correspond to the values populated in
|
||||
"Creating pci-epf-ntb Device" section above::
|
||||
"Creating pci-epf-vntb Device" section above::
|
||||
|
||||
# lspci
|
||||
10:00.0 Unassigned class [ffff]: Dawicontrol Computersysteme GmbH Device 1234 (rev ff)
|
||||
|
|
|
|||
|
|
@ -98,7 +98,7 @@ function::
|
|||
|
||||
which allocates up to max_vecs interrupt vectors for a PCI device. It
|
||||
returns the number of vectors allocated or a negative error. If the device
|
||||
has a requirements for a minimum number of vectors the driver can pass a
|
||||
has a requirement for a minimum number of vectors the driver can pass a
|
||||
min_vecs argument set to this limit, and the PCI core will return -ENOSPC
|
||||
if it can't meet the minimum number of vectors.
|
||||
|
||||
|
|
@ -127,7 +127,7 @@ not be able to allocate as many vectors for MSI as it could for MSI-X. On
|
|||
some platforms, MSI interrupts must all be targeted at the same set of CPUs
|
||||
whereas MSI-X interrupts can all be targeted at different CPUs.
|
||||
|
||||
If a device supports neither MSI-X or MSI it will fall back to a single
|
||||
If a device supports neither MSI-X nor MSI it will fall back to a single
|
||||
legacy IRQ vector.
|
||||
|
||||
The typical usage of MSI or MSI-X interrupts is to allocate as many vectors
|
||||
|
|
@ -203,7 +203,7 @@ How to tell whether MSI/MSI-X is enabled on a device
|
|||
----------------------------------------------------
|
||||
|
||||
Using 'lspci -v' (as root) may show some devices with "MSI", "Message
|
||||
Signalled Interrupts" or "MSI-X" capabilities. Each of these capabilities
|
||||
Signaled Interrupts" or "MSI-X" capabilities. Each of these capabilities
|
||||
has an 'Enable' flag which is followed with either "+" (enabled)
|
||||
or "-" (disabled).
|
||||
|
||||
|
|
|
|||
|
|
@ -460,7 +460,6 @@ That is, the recovery API only requires that:
|
|||
- drivers/net/e1000e
|
||||
- drivers/net/ixgbe
|
||||
- drivers/net/cxgb3
|
||||
- drivers/net/s2io.c
|
||||
|
||||
The cor_error_detected() callback is invoked in handle_error_source() when
|
||||
the error severity is "correctable". The callback is optional and allows
|
||||
|
|
|
|||
|
|
@ -107,22 +107,22 @@ Get sum and peak of delays, since system boot, for all pids with tgid 242::
|
|||
TGID 242
|
||||
|
||||
|
||||
CPU count real total virtual total delay total delay average delay max delay min
|
||||
39 156000000 156576579 2111069 0.054ms 0.212296ms 0.031307ms
|
||||
IO count delay total delay average delay max delay min
|
||||
0 0 0.000ms 0.000000ms 0.000000ms
|
||||
SWAP count delay total delay average delay max delay min
|
||||
0 0 0.000ms 0.000000ms 0.000000ms
|
||||
RECLAIM count delay total delay average delay max delay min
|
||||
0 0 0.000ms 0.000000ms 0.000000ms
|
||||
THRASHING count delay total delay average delay max delay min
|
||||
0 0 0.000ms 0.000000ms 0.000000ms
|
||||
COMPACT count delay total delay average delay max delay min
|
||||
0 0 0.000ms 0.000000ms 0.000000ms
|
||||
WPCOPY count delay total delay average delay max delay min
|
||||
156 11215873 0.072ms 0.207403ms 0.033913ms
|
||||
IRQ count delay total delay average delay max delay min
|
||||
0 0 0.000ms 0.000000ms 0.000000ms
|
||||
CPU count real total virtual total delay total delay average delay max delay min delay max timestamp
|
||||
46 188000000 192348334 4098012 0.089ms 0.429260ms 0.051205ms 2026-01-15T15:06:58
|
||||
IO count delay total delay average delay max delay min delay max timestamp
|
||||
0 0 0.000ms 0.000000ms 0.000000ms N/A
|
||||
SWAP count delay total delay average delay max delay min delay max timestamp
|
||||
0 0 0.000ms 0.000000ms 0.000000ms N/A
|
||||
RECLAIM count delay total delay average delay max delay min delay max timestamp
|
||||
0 0 0.000ms 0.000000ms 0.000000ms N/A
|
||||
THRASHING count delay total delay average delay max delay min delay max timestamp
|
||||
0 0 0.000ms 0.000000ms 0.000000ms N/A
|
||||
COMPACT count delay total delay average delay max delay min delay max timestamp
|
||||
0 0 0.000ms 0.000000ms 0.000000ms N/A
|
||||
WPCOPY count delay total delay average delay max delay min delay max timestamp
|
||||
182 19413338 0.107ms 0.547353ms 0.022462ms 2026-01-15T15:05:24
|
||||
IRQ count delay total delay average delay max delay min delay max timestamp
|
||||
0 0 0.000ms 0.000000ms 0.000000ms N/A
|
||||
|
||||
Get IO accounting for pid 1, it works only with -p::
|
||||
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@ Landlock: system-wide management
|
|||
================================
|
||||
|
||||
:Author: Mickaël Salaün
|
||||
:Date: March 2025
|
||||
:Date: January 2026
|
||||
|
||||
Landlock can leverage the audit framework to log events.
|
||||
|
||||
|
|
@ -38,6 +38,37 @@ AUDIT_LANDLOCK_ACCESS
|
|||
domain=195ba459b blockers=fs.refer path="/usr/bin" dev="vda2" ino=351
|
||||
domain=195ba459b blockers=fs.make_reg,fs.refer path="/usr/local" dev="vda2" ino=365
|
||||
|
||||
|
||||
The ``blockers`` field uses dot-separated prefixes to indicate the type of
|
||||
restriction that caused the denial:
|
||||
|
||||
**fs.*** - Filesystem access rights (ABI 1+):
|
||||
- fs.execute, fs.write_file, fs.read_file, fs.read_dir
|
||||
- fs.remove_dir, fs.remove_file
|
||||
- fs.make_char, fs.make_dir, fs.make_reg, fs.make_sock
|
||||
- fs.make_fifo, fs.make_block, fs.make_sym
|
||||
- fs.refer (ABI 2+)
|
||||
- fs.truncate (ABI 3+)
|
||||
- fs.ioctl_dev (ABI 5+)
|
||||
|
||||
**net.*** - Network access rights (ABI 4+):
|
||||
- net.bind_tcp - TCP port binding was denied
|
||||
- net.connect_tcp - TCP connection was denied
|
||||
|
||||
**scope.*** - IPC scoping restrictions (ABI 6+):
|
||||
- scope.abstract_unix_socket - Abstract UNIX socket connection denied
|
||||
- scope.signal - Signal sending denied
|
||||
|
||||
Multiple blockers can appear in a single event (comma-separated) when
|
||||
multiple access rights are missing. For example, creating a regular file
|
||||
in a directory that lacks both ``make_reg`` and ``refer`` rights would show
|
||||
``blockers=fs.make_reg,fs.refer``.
|
||||
|
||||
The object identification fields (path, dev, ino for filesystem; opid,
|
||||
ocomm for signals) depend on the type of access being blocked and provide
|
||||
context about what resource was involved in the denial.
|
||||
|
||||
|
||||
AUDIT_LANDLOCK_DOMAIN
|
||||
This record type describes the status of a Landlock domain. The ``status``
|
||||
field can be either ``allocated`` or ``deallocated``.
|
||||
|
|
@ -86,7 +117,7 @@ This command generates two events, each identified with a unique serial
|
|||
number following a timestamp (``msg=audit(1729738800.268:30)``). The first
|
||||
event (serial ``30``) contains 4 records. The first record
|
||||
(``type=LANDLOCK_ACCESS``) shows an access denied by the domain `1a6fdc66f`.
|
||||
The cause of this denial is signal scopping restriction
|
||||
The cause of this denial is signal scoping restriction
|
||||
(``blockers=scope.signal``). The process that would have receive this signal
|
||||
is the init process (``opid=1 ocomm="systemd"``).
|
||||
|
||||
|
|
|
|||
|
|
@ -214,6 +214,9 @@ mem_limit WO specifies the maximum amount of memory ZRAM can
|
|||
writeback_limit WO specifies the maximum amount of write IO zram
|
||||
can write out to backing device as 4KB unit
|
||||
writeback_limit_enable RW show and set writeback_limit feature
|
||||
writeback_batch_size RW show and set maximum number of in-flight
|
||||
writeback operations
|
||||
writeback_compressed RW show and set compressed writeback feature
|
||||
comp_algorithm RW show and change the compression algorithm
|
||||
algorithm_params WO setup compression algorithm parameters
|
||||
compact WO trigger memory compaction
|
||||
|
|
@ -222,7 +225,6 @@ backing_dev RW set up backend storage for zram to write out
|
|||
idle WO mark allocated slot as idle
|
||||
====================== ====== ===============================================
|
||||
|
||||
|
||||
User space is advised to use the following files to read the device statistics.
|
||||
|
||||
File /sys/block/zram<id>/stat
|
||||
|
|
@ -434,6 +436,26 @@ system reboot, echo 1 > /sys/block/zramX/reset) so keeping how many of
|
|||
writeback happened until you reset the zram to allocate extra writeback
|
||||
budget in next setting is user's job.
|
||||
|
||||
By default zram stores written back pages in decompressed (raw) form, which
|
||||
means that writeback operation involves decompression of the page before
|
||||
writing it to the backing device. This behavior can be changed by enabling
|
||||
`writeback_compressed` feature, which causes zram to write compressed pages
|
||||
to the backing device, thus avoiding decompression overhead. To enable
|
||||
this feature, execute::
|
||||
|
||||
$ echo yes > /sys/block/zramX/writeback_compressed
|
||||
|
||||
Note that this feature should be configured before the `zramX` device is
|
||||
initialized.
|
||||
|
||||
Depending on backing device storage type, writeback operation may benefit
|
||||
from a higher number of in-flight write requests (batched writes). The
|
||||
number of maximum in-flight writeback operations can be configured via
|
||||
`writeback_batch_size` attribute. To change the default value (which is 32),
|
||||
execute::
|
||||
|
||||
$ echo 64 > /sys/block/zramX/writeback_batch_size
|
||||
|
||||
If admin wants to measure writeback count in a certain period, they could
|
||||
know it via /sys/block/zram0/bd_stat's 3rd column.
|
||||
|
||||
|
|
|
|||
|
|
@ -20,18 +20,26 @@ Config File Syntax
|
|||
|
||||
The boot config syntax is a simple structured key-value. Each key consists
|
||||
of dot-connected-words, and key and value are connected by ``=``. The value
|
||||
has to be terminated by semi-colon (``;``) or newline (``\n``).
|
||||
For array value, array entries are separated by comma (``,``). ::
|
||||
|
||||
KEY[.WORD[...]] = VALUE[, VALUE2[...]][;]
|
||||
|
||||
Unlike the kernel command line syntax, spaces are OK around the comma and ``=``.
|
||||
string has to be terminated by the following delimiters described below.
|
||||
|
||||
Each key word must contain only alphabets, numbers, dash (``-``) or underscore
|
||||
(``_``). And each value only contains printable characters or spaces except
|
||||
for delimiters such as semi-colon (``;``), new-line (``\n``), comma (``,``),
|
||||
hash (``#``) and closing brace (``}``).
|
||||
|
||||
If the ``=`` is followed by whitespace up to one of these delimiters, the
|
||||
key is assigned an empty value.
|
||||
|
||||
For arrays, the array values are comma (``,``) separated, and comments and
|
||||
line breaks with newline (``\n``) are allowed between array values for
|
||||
readability. Thus the first entry of the array must be on the same line as
|
||||
the key.::
|
||||
|
||||
KEY[.WORD[...]] = VALUE[, VALUE2[...]][;]
|
||||
|
||||
Unlike the kernel command line syntax, white spaces (including tabs) are
|
||||
ignored around the comma and ``=``.
|
||||
|
||||
If you want to use those delimiters in a value, you can use either double-
|
||||
quotes (``"VALUE"``) or single-quotes (``'VALUE'``) to quote it. Note that
|
||||
you can not escape these quotes.
|
||||
|
|
@ -138,8 +146,8 @@ This is parsed as below::
|
|||
foo = value
|
||||
bar = 1, 2, 3
|
||||
|
||||
Note that you can not put a comment between value and delimiter(``,`` or
|
||||
``;``). This means following config has a syntax error ::
|
||||
Note that you can NOT put a comment or a newline between value and delimiter
|
||||
(``,`` or ``;``). This means following config has a syntax error ::
|
||||
|
||||
key = 1 # comment
|
||||
,2
|
||||
|
|
|
|||
|
|
@ -311,9 +311,8 @@ Lock order is as follows::
|
|||
|
||||
folio_lock
|
||||
mm->page_table_lock or split pte_lock
|
||||
folio_memcg_lock (memcg->move_lock)
|
||||
mapping->i_pages lock
|
||||
lruvec->lru_lock.
|
||||
mapping->i_pages lock
|
||||
lruvec->lru_lock.
|
||||
|
||||
Per-node-per-memcgroup LRU (cgroup's private LRU) is guarded by
|
||||
lruvec->lru_lock; the folio LRU flag is cleared before
|
||||
|
|
|
|||
|
|
@ -433,7 +433,7 @@ Table line examples:
|
|||
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.
|
||||
# Check the status output (e.g. "dmsetup status $RaidDev") for progress.
|
||||
|
||||
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
|
||||
|
||||
|
|
|
|||
|
|
@ -352,7 +352,7 @@
|
|||
216 = /dev/fujitsu/apanel Fujitsu/Siemens application panel
|
||||
217 = /dev/ni/natmotn National Instruments Motion
|
||||
218 = /dev/kchuid Inter-process chuid control
|
||||
219 = /dev/modems/mwave MWave modem firmware upload
|
||||
219 =
|
||||
220 = /dev/mptctl Message passing technology (MPT) control
|
||||
221 = /dev/mvista/hssdsi Montavista PICMG hot swap system driver
|
||||
222 = /dev/mvista/hasi Montavista PICMG high availability
|
||||
|
|
|
|||
|
|
@ -1372,6 +1372,13 @@ Kernel parameters
|
|||
For details see:
|
||||
Documentation/admin-guide/hw-vuln/reg-file-data-sampling.rst
|
||||
|
||||
dm_verity.keyring_unsealed=
|
||||
[KNL] When set to 1, leave the dm-verity keyring
|
||||
unsealed after initialization so userspace can
|
||||
provision keys. Once the keyring is restricted
|
||||
it becomes active and is searched during signature
|
||||
verification.
|
||||
|
||||
driver_async_probe= [KNL]
|
||||
List of driver names to be probed asynchronously. *
|
||||
matches with all driver names. If * is specified, the
|
||||
|
|
@ -2680,6 +2687,15 @@ Kernel parameters
|
|||
1 - Bypass the IOMMU for DMA.
|
||||
unset - Use value of CONFIG_IOMMU_DEFAULT_PASSTHROUGH.
|
||||
|
||||
iommu.debug_pagealloc=
|
||||
[KNL,EARLY] When CONFIG_IOMMU_DEBUG_PAGEALLOC is set, this
|
||||
parameter enables the feature at boot time. By default, it
|
||||
is disabled and the system behaves the same way as a kernel
|
||||
built without CONFIG_IOMMU_DEBUG_PAGEALLOC.
|
||||
Format: { "0" | "1" }
|
||||
0 - Sanitizer disabled.
|
||||
1 - Sanitizer enabled, expect runtime overhead.
|
||||
|
||||
io7= [HW] IO7 for Marvel-based Alpha systems
|
||||
See comment before marvel_specify_io7 in
|
||||
arch/alpha/kernel/core_marvel.c.
|
||||
|
|
@ -3084,6 +3100,26 @@ Kernel parameters
|
|||
|
||||
Default is Y (on).
|
||||
|
||||
kvm.enable_pmu=[KVM,X86]
|
||||
If enabled, KVM will virtualize PMU functionality based
|
||||
on the virtual CPU model defined by userspace. This
|
||||
can be overridden on a per-VM basis via
|
||||
KVM_CAP_PMU_CAPABILITY.
|
||||
|
||||
If disabled, KVM will not virtualize PMU functionality,
|
||||
e.g. MSRs, PMCs, PMIs, etc., even if userspace defines
|
||||
a virtual CPU model that contains PMU assets.
|
||||
|
||||
Note, KVM's vPMU support implicitly requires running
|
||||
with an in-kernel local APIC, e.g. to deliver PMIs to
|
||||
the guest. Running without an in-kernel local APIC is
|
||||
not supported, though KVM will allow such a combination
|
||||
(with severely degraded functionality).
|
||||
|
||||
See also enable_mediated_pmu.
|
||||
|
||||
Default is Y (on).
|
||||
|
||||
kvm.enable_virt_at_load=[KVM,ARM64,LOONGARCH,MIPS,RISCV,X86]
|
||||
If enabled, KVM will enable virtualization in hardware
|
||||
when KVM is loaded, and disable virtualization when KVM
|
||||
|
|
@ -3130,6 +3166,35 @@ Kernel parameters
|
|||
If the value is 0 (the default), KVM will pick a period based
|
||||
on the ratio, such that a page is zapped after 1 hour on average.
|
||||
|
||||
kvm-{amd,intel}.enable_mediated_pmu=[KVM,AMD,INTEL]
|
||||
If enabled, KVM will provide a mediated virtual PMU,
|
||||
instead of the default perf-based virtual PMU (if
|
||||
kvm.enable_pmu is true and PMU is enumerated via the
|
||||
virtual CPU model).
|
||||
|
||||
With a perf-based vPMU, KVM operates as a user of perf,
|
||||
i.e. emulates guest PMU counters using perf events.
|
||||
KVM-created perf events are managed by perf as regular
|
||||
(guest-only) events, e.g. are scheduled in/out, contend
|
||||
for hardware resources, etc. Using a perf-based vPMU
|
||||
allows guest and host usage of the PMU to co-exist, but
|
||||
incurs non-trivial overhead and can result in silently
|
||||
dropped guest events (due to resource contention).
|
||||
|
||||
With a mediated vPMU, hardware PMU state is context
|
||||
switched around the world switch to/from the guest.
|
||||
KVM mediates which events the guest can utilize, but
|
||||
gives the guest direct access to all other PMU assets
|
||||
when possible (KVM may intercept some accesses if the
|
||||
virtual CPU model provides a subset of hardware PMU
|
||||
functionality). Using a mediated vPMU significantly
|
||||
reduces PMU virtualization overhead and eliminates lost
|
||||
guest events, but is mutually exclusive with using perf
|
||||
to profile KVM guests and adds latency to most VM-Exits
|
||||
(to context switch PMU state).
|
||||
|
||||
Default is N (off).
|
||||
|
||||
kvm-amd.nested= [KVM,AMD] Control nested virtualization feature in
|
||||
KVM/SVM. Default is 1 (enabled).
|
||||
|
||||
|
|
@ -3452,6 +3517,11 @@ Kernel parameters
|
|||
* [no]logdir: Enable or disable access to the general
|
||||
purpose log directory.
|
||||
|
||||
* max_sec=<sectors>: Set the transfer size limit, in
|
||||
number of 512-byte sectors, to the value specified in
|
||||
<sectors>. The value specified in <sectors> has to be
|
||||
a non-zero positive integer.
|
||||
|
||||
* max_sec_128: Set transfer size limit to 128 sectors.
|
||||
|
||||
* max_sec_1024: Set or clear transfer size limit to
|
||||
|
|
@ -4591,7 +4661,7 @@ Kernel parameters
|
|||
nosmt [KNL,MIPS,PPC,EARLY] Disable symmetric multithreading (SMT).
|
||||
Equivalent to smt=1.
|
||||
|
||||
[KNL,X86,PPC,S390] Disable symmetric multithreading (SMT).
|
||||
[KNL,LOONGARCH,X86,PPC,S390] Disable symmetric multithreading (SMT).
|
||||
nosmt=force: Force disable SMT, cannot be undone
|
||||
via the sysfs control file.
|
||||
|
||||
|
|
@ -4799,6 +4869,21 @@ Kernel parameters
|
|||
panic_on_warn=1 panic() instead of WARN(). Useful to cause kdump
|
||||
on a WARN().
|
||||
|
||||
panic_force_cpu=
|
||||
[KNL,SMP] Force panic handling to execute on a specific CPU.
|
||||
Format: <cpu number>
|
||||
Some platforms require panic handling to occur on a
|
||||
specific CPU for the crash kernel to function correctly.
|
||||
This can be due to firmware limitations, interrupt routing
|
||||
constraints, or platform-specific requirements where only
|
||||
a particular CPU can safely enter the crash kernel.
|
||||
When set, panic() will redirect execution to the specified
|
||||
CPU before proceeding with the normal panic and kexec flow.
|
||||
If the target CPU is offline or unavailable, panic proceeds
|
||||
on the current CPU.
|
||||
This option should only be used for systems with the above
|
||||
constraints as it might cause the panic operation to be less reliable.
|
||||
|
||||
panic_print= Bitmask for printing system info when panic happens.
|
||||
User can chose combination of the following bits:
|
||||
bit 0: print all tasks info
|
||||
|
|
@ -6605,6 +6690,14 @@ Kernel parameters
|
|||
replacement properties are not found. See the Kconfig
|
||||
entry for RISCV_ISA_FALLBACK.
|
||||
|
||||
riscv_nousercfi=
|
||||
all Disable user CFI ABI to userspace even if cpu extension
|
||||
are available.
|
||||
bcfi Disable user backward CFI ABI to userspace even if
|
||||
the shadow stack extension is available.
|
||||
fcfi Disable user forward CFI ABI to userspace even if the
|
||||
landing pad extension is available.
|
||||
|
||||
ro [KNL] Mount root device read-only on boot
|
||||
|
||||
rodata= [KNL,EARLY]
|
||||
|
|
@ -6973,12 +7066,12 @@ Kernel parameters
|
|||
|
||||
softlockup_panic=
|
||||
[KNL] Should the soft-lockup detector generate panics.
|
||||
Format: 0 | 1
|
||||
Format: <int>
|
||||
|
||||
A value of 1 instructs the soft-lockup detector
|
||||
to panic the machine when a soft-lockup occurs. It is
|
||||
also controlled by the kernel.softlockup_panic sysctl
|
||||
and CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC, which is the
|
||||
A value of non-zero instructs the soft-lockup detector
|
||||
to panic the machine when a soft-lockup duration exceeds
|
||||
N thresholds. It is also controlled by the kernel.softlockup_panic
|
||||
sysctl and CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC, which is the
|
||||
respective build-time switch to that functionality.
|
||||
|
||||
softlockup_all_cpu_backtrace=
|
||||
|
|
|
|||
|
|
@ -10,7 +10,6 @@ Laptop Drivers
|
|||
alienware-wmi
|
||||
asus-laptop
|
||||
disk-shock-protection
|
||||
laptop-mode
|
||||
lg-laptop
|
||||
samsung-galaxybook
|
||||
sony-laptop
|
||||
|
|
|
|||
|
|
@ -1,770 +0,0 @@
|
|||
===============================================
|
||||
How to conserve battery power using laptop-mode
|
||||
===============================================
|
||||
|
||||
Document Author: Bart Samwel (bart@samwel.tk)
|
||||
|
||||
Date created: January 2, 2004
|
||||
|
||||
Last modified: December 06, 2004
|
||||
|
||||
Introduction
|
||||
------------
|
||||
|
||||
Laptop mode is used to minimize the time that the hard disk needs to be spun up,
|
||||
to conserve battery power on laptops. It has been reported to cause significant
|
||||
power savings.
|
||||
|
||||
.. Contents
|
||||
|
||||
* Introduction
|
||||
* Installation
|
||||
* Caveats
|
||||
* The Details
|
||||
* Tips & Tricks
|
||||
* Control script
|
||||
* ACPI integration
|
||||
* Monitoring tool
|
||||
|
||||
|
||||
Installation
|
||||
------------
|
||||
|
||||
To use laptop mode, you don't need to set any kernel configuration options
|
||||
or anything. Simply install all the files included in this document, and
|
||||
laptop mode will automatically be started when you're on battery. For
|
||||
your convenience, a tarball containing an installer can be downloaded at:
|
||||
|
||||
http://www.samwel.tk/laptop_mode/laptop_mode/
|
||||
|
||||
To configure laptop mode, you need to edit the configuration file, which is
|
||||
located in /etc/default/laptop-mode on Debian-based systems, or in
|
||||
/etc/sysconfig/laptop-mode on other systems.
|
||||
|
||||
Unfortunately, automatic enabling of laptop mode does not work for
|
||||
laptops that don't have ACPI. On those laptops, you need to start laptop
|
||||
mode manually. To start laptop mode, run "laptop_mode start", and to
|
||||
stop it, run "laptop_mode stop". (Note: The laptop mode tools package now
|
||||
has experimental support for APM, you might want to try that first.)
|
||||
|
||||
|
||||
Caveats
|
||||
-------
|
||||
|
||||
* The downside of laptop mode is that you have a chance of losing up to 10
|
||||
minutes of work. If you cannot afford this, don't use it! The supplied ACPI
|
||||
scripts automatically turn off laptop mode when the battery almost runs out,
|
||||
so that you won't lose any data at the end of your battery life.
|
||||
|
||||
* Most desktop hard drives have a very limited lifetime measured in spindown
|
||||
cycles, typically about 50.000 times (it's usually listed on the spec sheet).
|
||||
Check your drive's rating, and don't wear down your drive's lifetime if you
|
||||
don't need to.
|
||||
|
||||
* If you mount some of your ext3 filesystems with the -n option, then
|
||||
the control script will not be able to remount them correctly. You must set
|
||||
DO_REMOUNTS=0 in the control script, otherwise it will remount them with the
|
||||
wrong options -- or it will fail because it cannot write to /etc/mtab.
|
||||
|
||||
* If you have your filesystems listed as type "auto" in fstab, like I did, then
|
||||
the control script will not recognize them as filesystems that need remounting.
|
||||
You must list the filesystems with their true type instead.
|
||||
|
||||
* It has been reported that some versions of the mutt mail client use file access
|
||||
times to determine whether a folder contains new mail. If you use mutt and
|
||||
experience this, you must disable the noatime remounting by setting the option
|
||||
DO_REMOUNT_NOATIME to 0 in the configuration file.
|
||||
|
||||
|
||||
The Details
|
||||
-----------
|
||||
|
||||
Laptop mode is controlled by the knob /proc/sys/vm/laptop_mode. This knob is
|
||||
present for all kernels that have the laptop mode patch, regardless of any
|
||||
configuration options. When the knob is set, any physical disk I/O (that might
|
||||
have caused the hard disk to spin up) causes Linux to flush all dirty blocks. The
|
||||
result of this is that after a disk has spun down, it will not be spun up
|
||||
anymore to write dirty blocks, because those blocks had already been written
|
||||
immediately after the most recent read operation. The value of the laptop_mode
|
||||
knob determines the time between the occurrence of disk I/O and when the flush
|
||||
is triggered. A sensible value for the knob is 5 seconds. Setting the knob to
|
||||
0 disables laptop mode.
|
||||
|
||||
To increase the effectiveness of the laptop_mode strategy, the laptop_mode
|
||||
control script increases dirty_expire_centisecs and dirty_writeback_centisecs in
|
||||
/proc/sys/vm to about 10 minutes (by default), which means that pages that are
|
||||
dirtied are not forced to be written to disk as often. The control script also
|
||||
changes the dirty background ratio, so that background writeback of dirty pages
|
||||
is not done anymore. Combined with a higher commit value (also 10 minutes) for
|
||||
ext3 filesystem (also done automatically by the control script),
|
||||
this results in concentration of disk activity in a small time interval which
|
||||
occurs only once every 10 minutes, or whenever the disk is forced to spin up by
|
||||
a cache miss. The disk can then be spun down in the periods of inactivity.
|
||||
|
||||
|
||||
Configuration
|
||||
-------------
|
||||
|
||||
The laptop mode configuration file is located in /etc/default/laptop-mode on
|
||||
Debian-based systems, or in /etc/sysconfig/laptop-mode on other systems. It
|
||||
contains the following options:
|
||||
|
||||
MAX_AGE:
|
||||
|
||||
Maximum time, in seconds, of hard drive spindown time that you are
|
||||
comfortable with. Worst case, it's possible that you could lose this
|
||||
amount of work if your battery fails while you're in laptop mode.
|
||||
|
||||
MINIMUM_BATTERY_MINUTES:
|
||||
|
||||
Automatically disable laptop mode if the remaining number of minutes of
|
||||
battery power is less than this value. Default is 10 minutes.
|
||||
|
||||
AC_HD/BATT_HD:
|
||||
|
||||
The idle timeout that should be set on your hard drive when laptop mode
|
||||
is active (BATT_HD) and when it is not active (AC_HD). The defaults are
|
||||
20 seconds (value 4) for BATT_HD and 2 hours (value 244) for AC_HD. The
|
||||
possible values are those listed in the manual page for "hdparm" for the
|
||||
"-S" option.
|
||||
|
||||
HD:
|
||||
|
||||
The devices for which the spindown timeout should be adjusted by laptop mode.
|
||||
Default is /dev/hda. If you specify multiple devices, separate them by a space.
|
||||
|
||||
READAHEAD:
|
||||
|
||||
Disk readahead, in 512-byte sectors, while laptop mode is active. A large
|
||||
readahead can prevent disk accesses for things like executable pages (which are
|
||||
loaded on demand while the application executes) and sequentially accessed data
|
||||
(MP3s).
|
||||
|
||||
DO_REMOUNTS:
|
||||
|
||||
The control script automatically remounts any mounted journaled filesystems
|
||||
with appropriate commit interval options. When this option is set to 0, this
|
||||
feature is disabled.
|
||||
|
||||
DO_REMOUNT_NOATIME:
|
||||
|
||||
When remounting, should the filesystems be remounted with the noatime option?
|
||||
Normally, this is set to "1" (enabled), but there may be programs that require
|
||||
access time recording.
|
||||
|
||||
DIRTY_RATIO:
|
||||
|
||||
The percentage of memory that is allowed to contain "dirty" or unsaved data
|
||||
before a writeback is forced, while laptop mode is active. Corresponds to
|
||||
the /proc/sys/vm/dirty_ratio sysctl.
|
||||
|
||||
DIRTY_BACKGROUND_RATIO:
|
||||
|
||||
The percentage of memory that is allowed to contain "dirty" or unsaved data
|
||||
after a forced writeback is done due to an exceeding of DIRTY_RATIO. Set
|
||||
this nice and low. This corresponds to the /proc/sys/vm/dirty_background_ratio
|
||||
sysctl.
|
||||
|
||||
Note that the behaviour of dirty_background_ratio is quite different
|
||||
when laptop mode is active and when it isn't. When laptop mode is inactive,
|
||||
dirty_background_ratio is the threshold percentage at which background writeouts
|
||||
start taking place. When laptop mode is active, however, background writeouts
|
||||
are disabled, and the dirty_background_ratio only determines how much writeback
|
||||
is done when dirty_ratio is reached.
|
||||
|
||||
DO_CPU:
|
||||
|
||||
Enable CPU frequency scaling when in laptop mode. (Requires CPUFreq to be setup.
|
||||
See Documentation/admin-guide/pm/cpufreq.rst for more info. Disabled by default.)
|
||||
|
||||
CPU_MAXFREQ:
|
||||
|
||||
When on battery, what is the maximum CPU speed that the system should use? Legal
|
||||
values are "slowest" for the slowest speed that your CPU is able to operate at,
|
||||
or a value listed in /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_frequencies.
|
||||
|
||||
|
||||
Tips & Tricks
|
||||
-------------
|
||||
|
||||
* Bartek Kania reports getting up to 50 minutes of extra battery life (on top
|
||||
of his regular 3 to 3.5 hours) using a spindown time of 5 seconds (BATT_HD=1).
|
||||
|
||||
* You can spin down the disk while playing MP3, by setting disk readahead
|
||||
to 8MB (READAHEAD=16384). Effectively, the disk will read a complete MP3 at
|
||||
once, and will then spin down while the MP3 is playing. (Thanks to Bartek
|
||||
Kania.)
|
||||
|
||||
* Drew Scott Daniels observed: "I don't know why, but when I decrease the number
|
||||
of colours that my display uses it consumes less battery power. I've seen
|
||||
this on powerbooks too. I hope that this is a piece of information that
|
||||
might be useful to the Laptop Mode patch or its users."
|
||||
|
||||
* In syslog.conf, you can prefix entries with a dash `-` to omit syncing the
|
||||
file after every logging. When you're using laptop-mode and your disk doesn't
|
||||
spin down, this is a likely culprit.
|
||||
|
||||
* Richard Atterer observed that laptop mode does not work well with noflushd
|
||||
(http://noflushd.sourceforge.net/), it seems that noflushd prevents laptop-mode
|
||||
from doing its thing.
|
||||
|
||||
* If you're worried about your data, you might want to consider using a USB
|
||||
memory stick or something like that as a "working area". (Be aware though
|
||||
that flash memory can only handle a limited number of writes, and overuse
|
||||
may wear out your memory stick pretty quickly. Do _not_ use journalling
|
||||
filesystems on flash memory sticks.)
|
||||
|
||||
|
||||
Configuration file for control and ACPI battery scripts
|
||||
-------------------------------------------------------
|
||||
|
||||
This allows the tunables to be changed for the scripts via an external
|
||||
configuration file
|
||||
|
||||
It should be installed as /etc/default/laptop-mode on Debian, and as
|
||||
/etc/sysconfig/laptop-mode on Red Hat, SUSE, Mandrake, and other work-alikes.
|
||||
|
||||
Config file::
|
||||
|
||||
# Maximum time, in seconds, of hard drive spindown time that you are
|
||||
# comfortable with. Worst case, it's possible that you could lose this
|
||||
# amount of work if your battery fails you while in laptop mode.
|
||||
#MAX_AGE=600
|
||||
|
||||
# Automatically disable laptop mode when the number of minutes of battery
|
||||
# that you have left goes below this threshold.
|
||||
MINIMUM_BATTERY_MINUTES=10
|
||||
|
||||
# Read-ahead, in 512-byte sectors. You can spin down the disk while playing MP3/OGG
|
||||
# by setting the disk readahead to 8MB (READAHEAD=16384). Effectively, the disk
|
||||
# will read a complete MP3 at once, and will then spin down while the MP3/OGG is
|
||||
# playing.
|
||||
#READAHEAD=4096
|
||||
|
||||
# Shall we remount journaled fs. with appropriate commit interval? (1=yes)
|
||||
#DO_REMOUNTS=1
|
||||
|
||||
# And shall we add the "noatime" option to that as well? (1=yes)
|
||||
#DO_REMOUNT_NOATIME=1
|
||||
|
||||
# Dirty synchronous ratio. At this percentage of dirty pages the process
|
||||
# which
|
||||
# calls write() does its own writeback
|
||||
#DIRTY_RATIO=40
|
||||
|
||||
#
|
||||
# Allowed dirty background ratio, in percent. Once DIRTY_RATIO has been
|
||||
# exceeded, the kernel will wake flusher threads which will then reduce the
|
||||
# amount of dirty memory to dirty_background_ratio. Set this nice and low,
|
||||
# so once some writeout has commenced, we do a lot of it.
|
||||
#
|
||||
#DIRTY_BACKGROUND_RATIO=5
|
||||
|
||||
# kernel default dirty buffer age
|
||||
#DEF_AGE=30
|
||||
#DEF_UPDATE=5
|
||||
#DEF_DIRTY_BACKGROUND_RATIO=10
|
||||
#DEF_DIRTY_RATIO=40
|
||||
#DEF_XFS_AGE_BUFFER=15
|
||||
#DEF_XFS_SYNC_INTERVAL=30
|
||||
#DEF_XFS_BUFD_INTERVAL=1
|
||||
|
||||
# This must be adjusted manually to the value of HZ in the running kernel
|
||||
# on 2.4, until the XFS people change their 2.4 external interfaces to work in
|
||||
# centisecs. This can be automated, but it's a work in progress that still
|
||||
# needs# some fixes. On 2.6 kernels, XFS uses USER_HZ instead of HZ for
|
||||
# external interfaces, and that is currently always set to 100. So you don't
|
||||
# need to change this on 2.6.
|
||||
#XFS_HZ=100
|
||||
|
||||
# Should the maximum CPU frequency be adjusted down while on battery?
|
||||
# Requires CPUFreq to be setup.
|
||||
# See Documentation/admin-guide/pm/cpufreq.rst for more info
|
||||
#DO_CPU=0
|
||||
|
||||
# When on battery what is the maximum CPU speed that the system should
|
||||
# use? Legal values are "slowest" for the slowest speed that your
|
||||
# CPU is able to operate at, or a value listed in:
|
||||
# /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_frequencies
|
||||
# Only applicable if DO_CPU=1.
|
||||
#CPU_MAXFREQ=slowest
|
||||
|
||||
# Idle timeout for your hard drive (man hdparm for valid values, -S option)
|
||||
# Default is 2 hours on AC (AC_HD=244) and 20 seconds for battery (BATT_HD=4).
|
||||
#AC_HD=244
|
||||
#BATT_HD=4
|
||||
|
||||
# The drives for which to adjust the idle timeout. Separate them by a space,
|
||||
# e.g. HD="/dev/hda /dev/hdb".
|
||||
#HD="/dev/hda"
|
||||
|
||||
# Set the spindown timeout on a hard drive?
|
||||
#DO_HD=1
|
||||
|
||||
|
||||
Control script
|
||||
--------------
|
||||
|
||||
Please note that this control script works for the Linux 2.4 and 2.6 series (thanks
|
||||
to Kiko Piris).
|
||||
|
||||
Control script::
|
||||
|
||||
#!/bin/bash
|
||||
|
||||
# start or stop laptop_mode, best run by a power management daemon when
|
||||
# ac gets connected/disconnected from a laptop
|
||||
#
|
||||
# install as /sbin/laptop_mode
|
||||
#
|
||||
# Contributors to this script: Kiko Piris
|
||||
# Bart Samwel
|
||||
# Micha Feigin
|
||||
# Andrew Morton
|
||||
# Herve Eychenne
|
||||
# Dax Kelson
|
||||
#
|
||||
# Original Linux 2.4 version by: Jens Axboe
|
||||
|
||||
#############################################################################
|
||||
|
||||
# Source config
|
||||
if [ -f /etc/default/laptop-mode ] ; then
|
||||
# Debian
|
||||
. /etc/default/laptop-mode
|
||||
elif [ -f /etc/sysconfig/laptop-mode ] ; then
|
||||
# Others
|
||||
. /etc/sysconfig/laptop-mode
|
||||
fi
|
||||
|
||||
# Don't raise an error if the config file is incomplete
|
||||
# set defaults instead:
|
||||
|
||||
# Maximum time, in seconds, of hard drive spindown time that you are
|
||||
# comfortable with. Worst case, it's possible that you could lose this
|
||||
# amount of work if your battery fails you while in laptop mode.
|
||||
MAX_AGE=${MAX_AGE:-'600'}
|
||||
|
||||
# Read-ahead, in kilobytes
|
||||
READAHEAD=${READAHEAD:-'4096'}
|
||||
|
||||
# Shall we remount journaled fs. with appropriate commit interval? (1=yes)
|
||||
DO_REMOUNTS=${DO_REMOUNTS:-'1'}
|
||||
|
||||
# And shall we add the "noatime" option to that as well? (1=yes)
|
||||
DO_REMOUNT_NOATIME=${DO_REMOUNT_NOATIME:-'1'}
|
||||
|
||||
# Shall we adjust the idle timeout on a hard drive?
|
||||
DO_HD=${DO_HD:-'1'}
|
||||
|
||||
# Adjust idle timeout on which hard drive?
|
||||
HD="${HD:-'/dev/hda'}"
|
||||
|
||||
# spindown time for HD (hdparm -S values)
|
||||
AC_HD=${AC_HD:-'244'}
|
||||
BATT_HD=${BATT_HD:-'4'}
|
||||
|
||||
# Dirty synchronous ratio. At this percentage of dirty pages the process which
|
||||
# calls write() does its own writeback
|
||||
DIRTY_RATIO=${DIRTY_RATIO:-'40'}
|
||||
|
||||
# cpu frequency scaling
|
||||
# See Documentation/admin-guide/pm/cpufreq.rst for more info
|
||||
DO_CPU=${CPU_MANAGE:-'0'}
|
||||
CPU_MAXFREQ=${CPU_MAXFREQ:-'slowest'}
|
||||
|
||||
#
|
||||
# Allowed dirty background ratio, in percent. Once DIRTY_RATIO has been
|
||||
# exceeded, the kernel will wake flusher threads which will then reduce the
|
||||
# amount of dirty memory to dirty_background_ratio. Set this nice and low,
|
||||
# so once some writeout has commenced, we do a lot of it.
|
||||
#
|
||||
DIRTY_BACKGROUND_RATIO=${DIRTY_BACKGROUND_RATIO:-'5'}
|
||||
|
||||
# kernel default dirty buffer age
|
||||
DEF_AGE=${DEF_AGE:-'30'}
|
||||
DEF_UPDATE=${DEF_UPDATE:-'5'}
|
||||
DEF_DIRTY_BACKGROUND_RATIO=${DEF_DIRTY_BACKGROUND_RATIO:-'10'}
|
||||
DEF_DIRTY_RATIO=${DEF_DIRTY_RATIO:-'40'}
|
||||
DEF_XFS_AGE_BUFFER=${DEF_XFS_AGE_BUFFER:-'15'}
|
||||
DEF_XFS_SYNC_INTERVAL=${DEF_XFS_SYNC_INTERVAL:-'30'}
|
||||
DEF_XFS_BUFD_INTERVAL=${DEF_XFS_BUFD_INTERVAL:-'1'}
|
||||
|
||||
# This must be adjusted manually to the value of HZ in the running kernel
|
||||
# on 2.4, until the XFS people change their 2.4 external interfaces to work in
|
||||
# centisecs. This can be automated, but it's a work in progress that still needs
|
||||
# some fixes. On 2.6 kernels, XFS uses USER_HZ instead of HZ for external
|
||||
# interfaces, and that is currently always set to 100. So you don't need to
|
||||
# change this on 2.6.
|
||||
XFS_HZ=${XFS_HZ:-'100'}
|
||||
|
||||
#############################################################################
|
||||
|
||||
KLEVEL="$(uname -r |
|
||||
{
|
||||
IFS='.' read a b c
|
||||
echo $a.$b
|
||||
}
|
||||
)"
|
||||
case "$KLEVEL" in
|
||||
"2.4"|"2.6")
|
||||
;;
|
||||
*)
|
||||
echo "Unhandled kernel version: $KLEVEL ('uname -r' = '$(uname -r)')" >&2
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
if [ ! -e /proc/sys/vm/laptop_mode ] ; then
|
||||
echo "Kernel is not patched with laptop_mode patch." >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ ! -w /proc/sys/vm/laptop_mode ] ; then
|
||||
echo "You do not have enough privileges to enable laptop_mode." >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Remove an option (the first parameter) of the form option=<number> from
|
||||
# a mount options string (the rest of the parameters).
|
||||
parse_mount_opts () {
|
||||
OPT="$1"
|
||||
shift
|
||||
echo ",$*," | sed \
|
||||
-e 's/,'"$OPT"'=[0-9]*,/,/g' \
|
||||
-e 's/,,*/,/g' \
|
||||
-e 's/^,//' \
|
||||
-e 's/,$//'
|
||||
}
|
||||
|
||||
# Remove an option (the first parameter) without any arguments from
|
||||
# a mount option string (the rest of the parameters).
|
||||
parse_nonumber_mount_opts () {
|
||||
OPT="$1"
|
||||
shift
|
||||
echo ",$*," | sed \
|
||||
-e 's/,'"$OPT"',/,/g' \
|
||||
-e 's/,,*/,/g' \
|
||||
-e 's/^,//' \
|
||||
-e 's/,$//'
|
||||
}
|
||||
|
||||
# Find out the state of a yes/no option (e.g. "atime"/"noatime") in
|
||||
# fstab for a given filesystem, and use this state to replace the
|
||||
# value of the option in another mount options string. The device
|
||||
# is the first argument, the option name the second, and the default
|
||||
# value the third. The remainder is the mount options string.
|
||||
#
|
||||
# Example:
|
||||
# parse_yesno_opts_wfstab /dev/hda1 atime atime defaults,noatime
|
||||
#
|
||||
# If fstab contains, say, "rw" for this filesystem, then the result
|
||||
# will be "defaults,atime".
|
||||
parse_yesno_opts_wfstab () {
|
||||
L_DEV="$1"
|
||||
OPT="$2"
|
||||
DEF_OPT="$3"
|
||||
shift 3
|
||||
L_OPTS="$*"
|
||||
PARSEDOPTS1="$(parse_nonumber_mount_opts $OPT $L_OPTS)"
|
||||
PARSEDOPTS1="$(parse_nonumber_mount_opts no$OPT $PARSEDOPTS1)"
|
||||
# Watch for a default atime in fstab
|
||||
FSTAB_OPTS="$(awk '$1 == "'$L_DEV'" { print $4 }' /etc/fstab)"
|
||||
if echo "$FSTAB_OPTS" | grep "$OPT" > /dev/null ; then
|
||||
# option specified in fstab: extract the value and use it
|
||||
if echo "$FSTAB_OPTS" | grep "no$OPT" > /dev/null ; then
|
||||
echo "$PARSEDOPTS1,no$OPT"
|
||||
else
|
||||
# no$OPT not found -- so we must have $OPT.
|
||||
echo "$PARSEDOPTS1,$OPT"
|
||||
fi
|
||||
else
|
||||
# option not specified in fstab -- choose the default.
|
||||
echo "$PARSEDOPTS1,$DEF_OPT"
|
||||
fi
|
||||
}
|
||||
|
||||
# Find out the state of a numbered option (e.g. "commit=NNN") in
|
||||
# fstab for a given filesystem, and use this state to replace the
|
||||
# value of the option in another mount options string. The device
|
||||
# is the first argument, and the option name the second. The
|
||||
# remainder is the mount options string in which the replacement
|
||||
# must be done.
|
||||
#
|
||||
# Example:
|
||||
# parse_mount_opts_wfstab /dev/hda1 commit defaults,commit=7
|
||||
#
|
||||
# If fstab contains, say, "commit=3,rw" for this filesystem, then the
|
||||
# result will be "rw,commit=3".
|
||||
parse_mount_opts_wfstab () {
|
||||
L_DEV="$1"
|
||||
OPT="$2"
|
||||
shift 2
|
||||
L_OPTS="$*"
|
||||
PARSEDOPTS1="$(parse_mount_opts $OPT $L_OPTS)"
|
||||
# Watch for a default commit in fstab
|
||||
FSTAB_OPTS="$(awk '$1 == "'$L_DEV'" { print $4 }' /etc/fstab)"
|
||||
if echo "$FSTAB_OPTS" | grep "$OPT=" > /dev/null ; then
|
||||
# option specified in fstab: extract the value, and use it
|
||||
echo -n "$PARSEDOPTS1,$OPT="
|
||||
echo ",$FSTAB_OPTS," | sed \
|
||||
-e 's/.*,'"$OPT"'=//' \
|
||||
-e 's/,.*//'
|
||||
else
|
||||
# option not specified in fstab: set it to 0
|
||||
echo "$PARSEDOPTS1,$OPT=0"
|
||||
fi
|
||||
}
|
||||
|
||||
deduce_fstype () {
|
||||
MP="$1"
|
||||
# My root filesystem unfortunately has
|
||||
# type "unknown" in /etc/mtab. If we encounter
|
||||
# "unknown", we try to get the type from fstab.
|
||||
cat /etc/fstab |
|
||||
grep -v '^#' |
|
||||
while read FSTAB_DEV FSTAB_MP FSTAB_FST FSTAB_OPTS FSTAB_DUMP FSTAB_DUMP ; do
|
||||
if [ "$FSTAB_MP" = "$MP" ]; then
|
||||
echo $FSTAB_FST
|
||||
exit 0
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
if [ $DO_REMOUNT_NOATIME -eq 1 ] ; then
|
||||
NOATIME_OPT=",noatime"
|
||||
fi
|
||||
|
||||
case "$1" in
|
||||
start)
|
||||
AGE=$((100*$MAX_AGE))
|
||||
XFS_AGE=$(($XFS_HZ*$MAX_AGE))
|
||||
echo -n "Starting laptop_mode"
|
||||
|
||||
if [ -d /proc/sys/vm/pagebuf ] ; then
|
||||
# (For 2.4 and early 2.6.)
|
||||
# This only needs to be set, not reset -- it is only used when
|
||||
# laptop mode is enabled.
|
||||
echo $XFS_AGE > /proc/sys/vm/pagebuf/lm_flush_age
|
||||
echo $XFS_AGE > /proc/sys/fs/xfs/lm_sync_interval
|
||||
elif [ -f /proc/sys/fs/xfs/lm_age_buffer ] ; then
|
||||
# (A couple of early 2.6 laptop mode patches had these.)
|
||||
# The same goes for these.
|
||||
echo $XFS_AGE > /proc/sys/fs/xfs/lm_age_buffer
|
||||
echo $XFS_AGE > /proc/sys/fs/xfs/lm_sync_interval
|
||||
elif [ -f /proc/sys/fs/xfs/age_buffer ] ; then
|
||||
# (2.6.6)
|
||||
# But not for these -- they are also used in normal
|
||||
# operation.
|
||||
echo $XFS_AGE > /proc/sys/fs/xfs/age_buffer
|
||||
echo $XFS_AGE > /proc/sys/fs/xfs/sync_interval
|
||||
elif [ -f /proc/sys/fs/xfs/age_buffer_centisecs ] ; then
|
||||
# (2.6.7 upwards)
|
||||
# And not for these either. These are in centisecs,
|
||||
# not USER_HZ, so we have to use $AGE, not $XFS_AGE.
|
||||
echo $AGE > /proc/sys/fs/xfs/age_buffer_centisecs
|
||||
echo $AGE > /proc/sys/fs/xfs/xfssyncd_centisecs
|
||||
echo 3000 > /proc/sys/fs/xfs/xfsbufd_centisecs
|
||||
fi
|
||||
|
||||
case "$KLEVEL" in
|
||||
"2.4")
|
||||
echo 1 > /proc/sys/vm/laptop_mode
|
||||
echo "30 500 0 0 $AGE $AGE 60 20 0" > /proc/sys/vm/bdflush
|
||||
;;
|
||||
"2.6")
|
||||
echo 5 > /proc/sys/vm/laptop_mode
|
||||
echo "$AGE" > /proc/sys/vm/dirty_writeback_centisecs
|
||||
echo "$AGE" > /proc/sys/vm/dirty_expire_centisecs
|
||||
echo "$DIRTY_RATIO" > /proc/sys/vm/dirty_ratio
|
||||
echo "$DIRTY_BACKGROUND_RATIO" > /proc/sys/vm/dirty_background_ratio
|
||||
;;
|
||||
esac
|
||||
if [ $DO_REMOUNTS -eq 1 ]; then
|
||||
cat /etc/mtab | while read DEV MP FST OPTS DUMP PASS ; do
|
||||
PARSEDOPTS="$(parse_mount_opts "$OPTS")"
|
||||
if [ "$FST" = 'unknown' ]; then
|
||||
FST=$(deduce_fstype $MP)
|
||||
fi
|
||||
case "$FST" in
|
||||
"ext3")
|
||||
PARSEDOPTS="$(parse_mount_opts commit "$OPTS")"
|
||||
mount $DEV -t $FST $MP -o remount,$PARSEDOPTS,commit=$MAX_AGE$NOATIME_OPT
|
||||
;;
|
||||
"xfs")
|
||||
mount $DEV -t $FST $MP -o remount,$OPTS$NOATIME_OPT
|
||||
;;
|
||||
esac
|
||||
if [ -b $DEV ] ; then
|
||||
blockdev --setra $(($READAHEAD * 2)) $DEV
|
||||
fi
|
||||
done
|
||||
fi
|
||||
if [ $DO_HD -eq 1 ] ; then
|
||||
for THISHD in $HD ; do
|
||||
/sbin/hdparm -S $BATT_HD $THISHD > /dev/null 2>&1
|
||||
/sbin/hdparm -B 1 $THISHD > /dev/null 2>&1
|
||||
done
|
||||
fi
|
||||
if [ $DO_CPU -eq 1 -a -e /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_min_freq ]; then
|
||||
if [ $CPU_MAXFREQ = 'slowest' ]; then
|
||||
CPU_MAXFREQ=`cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_min_freq`
|
||||
fi
|
||||
echo $CPU_MAXFREQ > /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq
|
||||
fi
|
||||
echo "."
|
||||
;;
|
||||
stop)
|
||||
U_AGE=$((100*$DEF_UPDATE))
|
||||
B_AGE=$((100*$DEF_AGE))
|
||||
echo -n "Stopping laptop_mode"
|
||||
echo 0 > /proc/sys/vm/laptop_mode
|
||||
if [ -f /proc/sys/fs/xfs/age_buffer -a ! -f /proc/sys/fs/xfs/lm_age_buffer ] ; then
|
||||
# These need to be restored, if there are no lm_*.
|
||||
echo $(($XFS_HZ*$DEF_XFS_AGE_BUFFER)) > /proc/sys/fs/xfs/age_buffer
|
||||
echo $(($XFS_HZ*$DEF_XFS_SYNC_INTERVAL)) > /proc/sys/fs/xfs/sync_interval
|
||||
elif [ -f /proc/sys/fs/xfs/age_buffer_centisecs ] ; then
|
||||
# These need to be restored as well.
|
||||
echo $((100*$DEF_XFS_AGE_BUFFER)) > /proc/sys/fs/xfs/age_buffer_centisecs
|
||||
echo $((100*$DEF_XFS_SYNC_INTERVAL)) > /proc/sys/fs/xfs/xfssyncd_centisecs
|
||||
echo $((100*$DEF_XFS_BUFD_INTERVAL)) > /proc/sys/fs/xfs/xfsbufd_centisecs
|
||||
fi
|
||||
case "$KLEVEL" in
|
||||
"2.4")
|
||||
echo "30 500 0 0 $U_AGE $B_AGE 60 20 0" > /proc/sys/vm/bdflush
|
||||
;;
|
||||
"2.6")
|
||||
echo "$U_AGE" > /proc/sys/vm/dirty_writeback_centisecs
|
||||
echo "$B_AGE" > /proc/sys/vm/dirty_expire_centisecs
|
||||
echo "$DEF_DIRTY_RATIO" > /proc/sys/vm/dirty_ratio
|
||||
echo "$DEF_DIRTY_BACKGROUND_RATIO" > /proc/sys/vm/dirty_background_ratio
|
||||
;;
|
||||
esac
|
||||
if [ $DO_REMOUNTS -eq 1 ] ; then
|
||||
cat /etc/mtab | while read DEV MP FST OPTS DUMP PASS ; do
|
||||
# Reset commit and atime options to defaults.
|
||||
if [ "$FST" = 'unknown' ]; then
|
||||
FST=$(deduce_fstype $MP)
|
||||
fi
|
||||
case "$FST" in
|
||||
"ext3")
|
||||
PARSEDOPTS="$(parse_mount_opts_wfstab $DEV commit $OPTS)"
|
||||
PARSEDOPTS="$(parse_yesno_opts_wfstab $DEV atime atime $PARSEDOPTS)"
|
||||
mount $DEV -t $FST $MP -o remount,$PARSEDOPTS
|
||||
;;
|
||||
"xfs")
|
||||
PARSEDOPTS="$(parse_yesno_opts_wfstab $DEV atime atime $OPTS)"
|
||||
mount $DEV -t $FST $MP -o remount,$PARSEDOPTS
|
||||
;;
|
||||
esac
|
||||
if [ -b $DEV ] ; then
|
||||
blockdev --setra 256 $DEV
|
||||
fi
|
||||
done
|
||||
fi
|
||||
if [ $DO_HD -eq 1 ] ; then
|
||||
for THISHD in $HD ; do
|
||||
/sbin/hdparm -S $AC_HD $THISHD > /dev/null 2>&1
|
||||
/sbin/hdparm -B 255 $THISHD > /dev/null 2>&1
|
||||
done
|
||||
fi
|
||||
if [ $DO_CPU -eq 1 -a -e /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_min_freq ]; then
|
||||
echo `cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_max_freq` > /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq
|
||||
fi
|
||||
echo "."
|
||||
;;
|
||||
*)
|
||||
echo "Usage: $0 {start|stop}" 2>&1
|
||||
exit 1
|
||||
;;
|
||||
|
||||
esac
|
||||
|
||||
exit 0
|
||||
|
||||
|
||||
ACPI integration
|
||||
----------------
|
||||
|
||||
Dax Kelson submitted this so that the ACPI acpid daemon will
|
||||
kick off the laptop_mode script and run hdparm. The part that
|
||||
automatically disables laptop mode when the battery is low was
|
||||
written by Jan Topinski.
|
||||
|
||||
/etc/acpi/events/ac_adapter::
|
||||
|
||||
event=ac_adapter
|
||||
action=/etc/acpi/actions/ac.sh %e
|
||||
|
||||
/etc/acpi/events/battery::
|
||||
|
||||
event=battery.*
|
||||
action=/etc/acpi/actions/battery.sh %e
|
||||
|
||||
/etc/acpi/actions/ac.sh::
|
||||
|
||||
#!/bin/bash
|
||||
|
||||
# ac on/offline event handler
|
||||
|
||||
status=`awk '/^state: / { print $2 }' /proc/acpi/ac_adapter/$2/state`
|
||||
|
||||
case $status in
|
||||
"on-line")
|
||||
/sbin/laptop_mode stop
|
||||
exit 0
|
||||
;;
|
||||
"off-line")
|
||||
/sbin/laptop_mode start
|
||||
exit 0
|
||||
;;
|
||||
esac
|
||||
|
||||
|
||||
/etc/acpi/actions/battery.sh::
|
||||
|
||||
#! /bin/bash
|
||||
|
||||
# Automatically disable laptop mode when the battery almost runs out.
|
||||
|
||||
BATT_INFO=/proc/acpi/battery/$2/state
|
||||
|
||||
if [[ -f /proc/sys/vm/laptop_mode ]]
|
||||
then
|
||||
LM=`cat /proc/sys/vm/laptop_mode`
|
||||
if [[ $LM -gt 0 ]]
|
||||
then
|
||||
if [[ -f $BATT_INFO ]]
|
||||
then
|
||||
# Source the config file only now that we know we need
|
||||
if [ -f /etc/default/laptop-mode ] ; then
|
||||
# Debian
|
||||
. /etc/default/laptop-mode
|
||||
elif [ -f /etc/sysconfig/laptop-mode ] ; then
|
||||
# Others
|
||||
. /etc/sysconfig/laptop-mode
|
||||
fi
|
||||
MINIMUM_BATTERY_MINUTES=${MINIMUM_BATTERY_MINUTES:-'10'}
|
||||
|
||||
ACTION="`cat $BATT_INFO | grep charging | cut -c 26-`"
|
||||
if [[ ACTION -eq "discharging" ]]
|
||||
then
|
||||
PRESENT_RATE=`cat $BATT_INFO | grep "present rate:" | sed "s/.* \([0-9][0-9]* \).*/\1/" `
|
||||
REMAINING=`cat $BATT_INFO | grep "remaining capacity:" | sed "s/.* \([0-9][0-9]* \).*/\1/" `
|
||||
fi
|
||||
if (($REMAINING * 60 / $PRESENT_RATE < $MINIMUM_BATTERY_MINUTES))
|
||||
then
|
||||
/sbin/laptop_mode stop
|
||||
fi
|
||||
else
|
||||
logger -p daemon.warning "You are using laptop mode and your battery interface $BATT_INFO is missing. This may lead to loss of data when the battery runs out. Check kernel ACPI support and /proc/acpi/battery folder, and edit /etc/acpi/battery.sh to set BATT_INFO to the correct path."
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
|
||||
Monitoring tool
|
||||
---------------
|
||||
|
||||
Bartek Kania submitted this, it can be used to measure how much time your disk
|
||||
spends spun up/down. See tools/laptop/dslm/dslm.c
|
||||
|
|
@ -54,6 +54,7 @@ detailed description):
|
|||
- Setting keyboard language
|
||||
- WWAN Antenna type
|
||||
- Auxmac
|
||||
- Hardware damage detection capability
|
||||
|
||||
A compatibility table by model and feature is maintained on the web
|
||||
site, http://ibm-acpi.sf.net/. I appreciate any success or failure
|
||||
|
|
@ -1576,6 +1577,42 @@ percentage level, above which charging will stop.
|
|||
The exact semantics of the attributes may be found in
|
||||
Documentation/ABI/testing/sysfs-class-power.
|
||||
|
||||
Hardware damage detection capability
|
||||
------------------------------------
|
||||
|
||||
sysfs attributes: hwdd_status, hwdd_detail
|
||||
|
||||
Thinkpads are adding the ability to detect and report hardware damage.
|
||||
Add new sysfs interface to identify the damaged device status.
|
||||
Initial support is available for the USB-C replaceable connector.
|
||||
|
||||
The command to check device damaged status is::
|
||||
|
||||
cat /sys/devices/platform/thinkpad_acpi/hwdd_status
|
||||
|
||||
This value displays status of device damaged.
|
||||
|
||||
- 0 = Not Damaged
|
||||
- 1 = Damaged
|
||||
|
||||
The command to check location of damaged device is::
|
||||
|
||||
cat /sys/devices/platform/thinkpad_acpi/hwdd_detail
|
||||
|
||||
This value displays location of damaged device having 1 line per damaged "item".
|
||||
For example:
|
||||
|
||||
if no damage is detected:
|
||||
|
||||
- No damage detected
|
||||
|
||||
if damage detected:
|
||||
|
||||
- TYPE-C: Base, Right side, Center port
|
||||
|
||||
The property is read-only. If feature is not supported then sysfs
|
||||
attribute is not created.
|
||||
|
||||
Multiple Commands, Module Parameters
|
||||
------------------------------------
|
||||
|
||||
|
|
|
|||
|
|
@ -43,7 +43,7 @@ RSSS Shuts down the HDD protection interface for a few seconds,
|
|||
==== =====================================================================
|
||||
|
||||
Note:
|
||||
The presence of Solid State Drives (SSD) can make this driver to fail loading,
|
||||
The presence of Solid State Drives (SSD) can cause this driver to fail loading,
|
||||
given the fact that such drives have no movable parts, and thus, not requiring
|
||||
any "protection" as well as failing during the evaluation of the _STA method
|
||||
found under this device.
|
||||
|
|
|
|||
|
|
@ -79,6 +79,43 @@ of parametrs except ``enabled`` again. Once the re-reading is done, this
|
|||
parameter is set as ``N``. If invalid parameters are found while the
|
||||
re-reading, DAMON_LRU_SORT will be disabled.
|
||||
|
||||
active_mem_bp
|
||||
-------------
|
||||
|
||||
Desired active to [in]active memory ratio in bp (1/10,000).
|
||||
|
||||
While keeping the caps that set by other quotas, DAMON_LRU_SORT automatically
|
||||
increases and decreases the effective level of the quota aiming the LRU
|
||||
[de]prioritizations of the hot and cold memory resulting in this active to
|
||||
[in]active memory ratio. Value zero means disabling this auto-tuning feature.
|
||||
|
||||
Disabled by default.
|
||||
|
||||
Auto-tune monitoring intervals
|
||||
------------------------------
|
||||
|
||||
If this parameter is set as ``Y``, DAMON_LRU_SORT automatically tunes DAMON's
|
||||
sampling and aggregation intervals. The auto-tuning aims to capture meaningful
|
||||
amount of access events in each DAMON-snapshot, while keeping the sampling
|
||||
interval 5 milliseconds in minimum, and 10 seconds in maximum. Setting this as
|
||||
``N`` disables the auto-tuning.
|
||||
|
||||
Disabled by default.
|
||||
|
||||
filter_young_pages
|
||||
------------------
|
||||
|
||||
Filter [non-]young pages accordingly for LRU [de]prioritizations.
|
||||
|
||||
If this is set, check page level access (youngness) once again before each
|
||||
LRU [de]prioritization operation. LRU prioritization operation is skipped
|
||||
if the page has not accessed since the last check (not young). LRU
|
||||
deprioritization operation is skipped if the page has accessed since the
|
||||
last check (young). The feature is enabled or disabled if this parameter is
|
||||
set as ``Y`` or ``N``, respectively.
|
||||
|
||||
Disabled by default.
|
||||
|
||||
hot_thres_access_freq
|
||||
---------------------
|
||||
|
||||
|
|
|
|||
|
|
@ -6,6 +6,11 @@ Detailed Usages
|
|||
|
||||
DAMON provides below interfaces for different users.
|
||||
|
||||
- *Special-purpose DAMON modules.*
|
||||
:ref:`This <damon_modules_special_purpose>` is for people who are building,
|
||||
distributing, and/or administrating the kernel with special-purpose DAMON
|
||||
usages. Using this, users can use DAMON's major features for the given
|
||||
purposes in build, boot, or runtime in simple ways.
|
||||
- *DAMON user space tool.*
|
||||
`This <https://github.com/damonitor/damo>`_ is for privileged people such as
|
||||
system administrators who want a just-working human-friendly interface.
|
||||
|
|
@ -87,7 +92,7 @@ comma (",").
|
|||
│ │ │ │ │ │ │ │ 0/type,matching,allow,memcg_path,addr_start,addr_end,target_idx,min,max
|
||||
│ │ │ │ │ │ │ :ref:`dests <damon_sysfs_dests>`/nr_dests
|
||||
│ │ │ │ │ │ │ │ 0/id,weight
|
||||
│ │ │ │ │ │ │ :ref:`stats <sysfs_schemes_stats>`/nr_tried,sz_tried,nr_applied,sz_applied,sz_ops_filter_passed,qt_exceeds
|
||||
│ │ │ │ │ │ │ :ref:`stats <sysfs_schemes_stats>`/nr_tried,sz_tried,nr_applied,sz_applied,sz_ops_filter_passed,qt_exceeds,nr_snapshots,max_nr_snapshots
|
||||
│ │ │ │ │ │ │ :ref:`tried_regions <sysfs_schemes_tried_regions>`/total_bytes
|
||||
│ │ │ │ │ │ │ │ 0/start,end,nr_accesses,age,sz_filter_passed
|
||||
│ │ │ │ │ │ │ │ ...
|
||||
|
|
@ -543,10 +548,14 @@ online analysis or tuning of the schemes. Refer to :ref:`design doc
|
|||
|
||||
The statistics can be retrieved by reading the files under ``stats`` directory
|
||||
(``nr_tried``, ``sz_tried``, ``nr_applied``, ``sz_applied``,
|
||||
``sz_ops_filter_passed``, and ``qt_exceeds``), respectively. The files are not
|
||||
updated in real time, so you should ask DAMON sysfs interface to update the
|
||||
content of the files for the stats by writing a special keyword,
|
||||
``update_schemes_stats`` to the relevant ``kdamonds/<N>/state`` file.
|
||||
``sz_ops_filter_passed``, ``qt_exceeds``, ``nr_snapshots`` and
|
||||
``max_nr_snapshots``), respectively.
|
||||
|
||||
The files are not updated in real time by default. Users should ask DAMON
|
||||
sysfs interface to periodically update those using ``refresh_ms``, or do a one
|
||||
time update by writing a special keyword, ``update_schemes_stats`` to the
|
||||
relevant ``kdamonds/<N>/state`` file. Refer to :ref:`kdamond directory
|
||||
<sysfs_kdamond>` for more details.
|
||||
|
||||
.. _sysfs_schemes_tried_regions:
|
||||
|
||||
|
|
|
|||
|
|
@ -603,17 +603,18 @@ ZONE_MOVABLE, especially when fine-tuning zone ratios:
|
|||
memory for metadata and page tables in the direct map; having a lot of offline
|
||||
memory blocks is not a typical case, though.
|
||||
|
||||
- Memory ballooning without balloon compaction is incompatible with
|
||||
ZONE_MOVABLE. Only some implementations, such as virtio-balloon and
|
||||
pseries CMM, fully support balloon compaction.
|
||||
- Memory ballooning without support for balloon memory migration is incompatible
|
||||
with ZONE_MOVABLE. Only some implementations, such as virtio-balloon and
|
||||
pseries CMM, fully support balloon memory migration.
|
||||
|
||||
Further, the CONFIG_BALLOON_COMPACTION kernel configuration option might be
|
||||
Further, the CONFIG_BALLOON_MIGRATION kernel configuration option might be
|
||||
disabled. In that case, balloon inflation will only perform unmovable
|
||||
allocations and silently create a zone imbalance, usually triggered by
|
||||
inflation requests from the hypervisor.
|
||||
|
||||
- Gigantic pages are unmovable, resulting in user space consuming a
|
||||
lot of unmovable memory.
|
||||
- Gigantic pages are unmovable when an architecture does not support
|
||||
huge page migration and/or the ``movable_gigantic_pages`` sysctl is false.
|
||||
See Documentation/admin-guide/sysctl/vm.rst for more info on this sysctl.
|
||||
|
||||
- Huge pages are unmovable when an architectures does not support huge
|
||||
page migration, resulting in a similar issue as with gigantic pages.
|
||||
|
|
@ -672,6 +673,15 @@ block might fail:
|
|||
- Concurrent activity that operates on the same physical memory area, such as
|
||||
allocating gigantic pages, can result in temporary offlining failures.
|
||||
|
||||
- When an admin sets the ``movable_gigantic_pages`` sysctl to true, gigantic
|
||||
pages are allowed in ZONE_MOVABLE. This only allows migratable gigantic
|
||||
pages to be allocated; however, if there are no eligible destination gigantic
|
||||
pages at offline, the offlining operation will fail.
|
||||
|
||||
Users leveraging ``movable_gigantic_pages`` should weigh the value of
|
||||
ZONE_MOVABLE for increasing the reliability of gigantic page allocation
|
||||
against the potential loss of hot-unplug reliability.
|
||||
|
||||
- Out of memory when dissolving huge pages, especially when HugeTLB Vmemmap
|
||||
Optimization (HVO) is enabled.
|
||||
|
||||
|
|
|
|||
|
|
@ -260,6 +260,17 @@ mode to off when the CPU is in any one of the available idle states. This may
|
|||
help performance of a sibling CPU at the expense of a slightly higher wakeup
|
||||
latency for the idle CPU.
|
||||
|
||||
The ``table`` argument allows customization of idle state latency and target
|
||||
residency. The syntax is a comma-separated list of ``name:latency:residency``
|
||||
entries, where ``name`` is the idle state name, ``latency`` is the exit latency
|
||||
in microseconds, and ``residency`` is the target residency in microseconds. It
|
||||
is not necessary to specify all idle states; only those to be customized. For
|
||||
example, ``C1:1:3,C6:50:100`` sets the exit latency and target residency for
|
||||
C1 and C6 to 1/3 and 50/100 microseconds, respectively. Remaining idle states
|
||||
keep their default values. The driver verifies that deeper idle states have
|
||||
higher latency and target residency than shallower ones. Also, target
|
||||
residency cannot be smaller than exit latency. If any of these conditions is
|
||||
not met, the driver ignores the entire ``table`` parameter.
|
||||
|
||||
.. _intel-idle-core-and-package-idle-states:
|
||||
|
||||
|
|
|
|||
|
|
@ -40,8 +40,8 @@ Table : Subdirectories in /proc/sys/net
|
|||
bridge Bridging rose X.25 PLP layer
|
||||
core General parameter tipc TIPC
|
||||
ethernet Ethernet protocol unix Unix domain sockets
|
||||
ipv4 IP version 4 x25 X.25 protocol
|
||||
ipv6 IP version 6
|
||||
ipv4 IP version 4 vsock VSOCK sockets
|
||||
ipv6 IP version 6 x25 X.25 protocol
|
||||
========= =================== = ========== ===================
|
||||
|
||||
1. /proc/sys/net/core - Network core options
|
||||
|
|
@ -314,21 +314,22 @@ Default: 1000
|
|||
netdev_rss_key
|
||||
--------------
|
||||
|
||||
RSS (Receive Side Scaling) enabled drivers use a 40 bytes host key that is
|
||||
randomly generated.
|
||||
RSS (Receive Side Scaling) enabled drivers use a host key that
|
||||
is randomly generated.
|
||||
Some user space might need to gather its content even if drivers do not
|
||||
provide ethtool -x support yet.
|
||||
|
||||
::
|
||||
|
||||
myhost:~# cat /proc/sys/net/core/netdev_rss_key
|
||||
84:50:f4:00:a8:15:d1:a7:e9:7f:1d:60:35:c7:47:25:42:97:74:ca:56:bb:b6:a1:d8: ... (52 bytes total)
|
||||
84:50:f4:00:a8:15:d1:a7:e9:7f:1d:60:35:c7:47:25:42:97:74:ca:56:bb:b6:a1:d8: ... (256 bytes total)
|
||||
|
||||
File contains nul bytes if no driver ever called netdev_rss_key_fill() function.
|
||||
File contains all nul bytes if no driver ever called netdev_rss_key_fill()
|
||||
function.
|
||||
|
||||
Note:
|
||||
/proc/sys/net/core/netdev_rss_key contains 52 bytes of key,
|
||||
but most drivers only use 40 bytes of it.
|
||||
/proc/sys/net/core/netdev_rss_key contains 256 bytes of key,
|
||||
but many drivers only use 40 or 52 bytes of it.
|
||||
|
||||
::
|
||||
|
||||
|
|
@ -550,3 +551,51 @@ originally may have been issued in the correct sequential order.
|
|||
If named_timeout is nonzero, failed topology updates will be placed on a defer
|
||||
queue until another event arrives that clears the error, or until the timeout
|
||||
expires. Value is in milliseconds.
|
||||
|
||||
6. /proc/sys/net/vsock - VSOCK sockets
|
||||
--------------------------------------
|
||||
|
||||
VSOCK sockets (AF_VSOCK) provide communication between virtual machines and
|
||||
their hosts. The behavior of VSOCK sockets in a network namespace is determined
|
||||
by the namespace's mode (``global`` or ``local``), which controls how CIDs
|
||||
(Context IDs) are allocated and how sockets interact across namespaces.
|
||||
|
||||
ns_mode
|
||||
-------
|
||||
|
||||
Read-only. Reports the current namespace's mode, set at namespace creation
|
||||
and immutable thereafter.
|
||||
|
||||
Values:
|
||||
|
||||
- ``global`` - the namespace shares system-wide CID allocation and
|
||||
its sockets can reach any VM or socket in any global namespace.
|
||||
Sockets in this namespace cannot reach sockets in local
|
||||
namespaces.
|
||||
- ``local`` - the namespace has private CID allocation and its
|
||||
sockets can only connect to VMs or sockets within the same
|
||||
namespace.
|
||||
|
||||
The init_net mode is always ``global``.
|
||||
|
||||
child_ns_mode
|
||||
-------------
|
||||
|
||||
Controls what mode newly created child namespaces will inherit. At namespace
|
||||
creation, ``ns_mode`` is inherited from the parent's ``child_ns_mode``. The
|
||||
initial value matches the namespace's own ``ns_mode``.
|
||||
|
||||
Values:
|
||||
|
||||
- ``global`` - child namespaces will share system-wide CID allocation
|
||||
and their sockets will be able to reach any VM or socket in any
|
||||
global namespace.
|
||||
- ``local`` - child namespaces will have private CID allocation and
|
||||
their sockets will only be able to connect within their own
|
||||
namespace.
|
||||
|
||||
Changing ``child_ns_mode`` only affects namespaces created after the change;
|
||||
it does not modify the current namespace or any existing children.
|
||||
|
||||
A namespace with ``ns_mode`` set to ``local`` cannot change
|
||||
``child_ns_mode`` to ``global`` (returns ``-EPERM``).
|
||||
|
|
|
|||
|
|
@ -41,7 +41,6 @@ Currently, these files are in /proc/sys/vm:
|
|||
- extfrag_threshold
|
||||
- highmem_is_dirtyable
|
||||
- hugetlb_shm_group
|
||||
- laptop_mode
|
||||
- legacy_va_layout
|
||||
- lowmem_reserve_ratio
|
||||
- max_map_count
|
||||
|
|
@ -54,6 +53,7 @@ Currently, these files are in /proc/sys/vm:
|
|||
- mmap_min_addr
|
||||
- mmap_rnd_bits
|
||||
- mmap_rnd_compat_bits
|
||||
- movable_gigantic_pages
|
||||
- nr_hugepages
|
||||
- nr_hugepages_mempolicy
|
||||
- nr_overcommit_hugepages
|
||||
|
|
@ -365,13 +365,6 @@ hugetlb_shm_group contains group id that is allowed to create SysV
|
|||
shared memory segment using hugetlb page.
|
||||
|
||||
|
||||
laptop_mode
|
||||
===========
|
||||
|
||||
laptop_mode is a knob that controls "laptop mode". All the things that are
|
||||
controlled by this knob are discussed in Documentation/admin-guide/laptops/laptop-mode.rst.
|
||||
|
||||
|
||||
legacy_va_layout
|
||||
================
|
||||
|
||||
|
|
@ -630,6 +623,33 @@ This value can be changed after boot using the
|
|||
/proc/sys/vm/mmap_rnd_compat_bits tunable
|
||||
|
||||
|
||||
movable_gigantic_pages
|
||||
======================
|
||||
|
||||
This parameter controls whether gigantic pages may be allocated from
|
||||
ZONE_MOVABLE. If set to non-zero, gigantic pages can be allocated
|
||||
from ZONE_MOVABLE. ZONE_MOVABLE memory may be created via the kernel
|
||||
boot parameter `kernelcore` or via memory hotplug as discussed in
|
||||
Documentation/admin-guide/mm/memory-hotplug.rst.
|
||||
|
||||
Support may depend on specific architecture.
|
||||
|
||||
Note that using ZONE_MOVABLE gigantic pages make memory hotremove unreliable.
|
||||
|
||||
Memory hot-remove operations will block indefinitely until the admin reserves
|
||||
sufficient gigantic pages to service migration requests associated with the
|
||||
memory offlining process. As HugeTLB gigantic page reservation is a manual
|
||||
process (via `nodeN/hugepages/.../nr_hugepages` interfaces) this may not be
|
||||
obvious when just attempting to offline a block of memory.
|
||||
|
||||
Additionally, as multiple gigantic pages may be reserved on a single block,
|
||||
it may appear that gigantic pages are available for migration when in reality
|
||||
they are in the process of being removed. For example if `memoryN` contains
|
||||
two gigantic pages, one reserved and one allocated, and an admin attempts to
|
||||
offline that block, this operations may hang indefinitely unless another
|
||||
reserved gigantic page is available on another block `memoryM`.
|
||||
|
||||
|
||||
nr_hugepages
|
||||
============
|
||||
|
||||
|
|
|
|||
|
|
@ -370,7 +370,7 @@ is built-in to the kernel image, there is no need to do anything.
|
|||
|
||||
The driver will create one virtual ethernet interface per Thunderbolt
|
||||
port which are named like ``thunderbolt0`` and so on. From this point
|
||||
you can either use standard userspace tools like ``ifconfig`` to
|
||||
you can either use standard userspace tools like ``ip`` to
|
||||
configure the interface or let your GUI handle it automatically.
|
||||
|
||||
Forcing power
|
||||
|
|
|
|||
|
|
@ -67,7 +67,7 @@ The following keys are defined:
|
|||
programs (it may still be executed in userspace via a
|
||||
kernel-controlled mechanism such as the vDSO).
|
||||
|
||||
* :c:macro:`RISCV_HWPROBE_KEY_IMA_EXT_0`: A bitmask containing the extensions
|
||||
* :c:macro:`RISCV_HWPROBE_KEY_IMA_EXT_0`: A bitmask containing extensions
|
||||
that are compatible with the :c:macro:`RISCV_HWPROBE_BASE_BEHAVIOR_IMA`:
|
||||
base system behavior.
|
||||
|
||||
|
|
@ -387,3 +387,7 @@ The following keys are defined:
|
|||
|
||||
* :c:macro:`RISCV_HWPROBE_KEY_ZICBOP_BLOCK_SIZE`: An unsigned int which
|
||||
represents the size of the Zicbop block in bytes.
|
||||
|
||||
* :c:macro:`RISCV_HWPROBE_KEY_IMA_EXT_1`: A bitmask containing additional
|
||||
extensions that are compatible with the
|
||||
:c:macro:`RISCV_HWPROBE_BASE_BEHAVIOR_IMA`: base system behavior.
|
||||
|
|
|
|||
|
|
@ -14,5 +14,7 @@ RISC-V architecture
|
|||
uabi
|
||||
vector
|
||||
cmodx
|
||||
zicfilp
|
||||
zicfiss
|
||||
|
||||
features
|
||||
|
|
|
|||
122
Documentation/arch/riscv/zicfilp.rst
Normal file
122
Documentation/arch/riscv/zicfilp.rst
Normal file
|
|
@ -0,0 +1,122 @@
|
|||
.. SPDX-License-Identifier: GPL-2.0
|
||||
|
||||
:Author: Deepak Gupta <debug@rivosinc.com>
|
||||
:Date: 12 January 2024
|
||||
|
||||
====================================================
|
||||
Tracking indirect control transfers on RISC-V Linux
|
||||
====================================================
|
||||
|
||||
This document briefly describes the interface provided to userspace by Linux
|
||||
to enable indirect branch tracking for user mode applications on RISC-V.
|
||||
|
||||
1. Feature Overview
|
||||
--------------------
|
||||
|
||||
Memory corruption issues usually result in crashes. However, in the
|
||||
hands of a creative adversary, these can result in a variety of
|
||||
security issues.
|
||||
|
||||
Some of those security issues can be code re-use attacks, where an
|
||||
adversary can use corrupt function pointers, chaining them together to
|
||||
perform jump oriented programming (JOP) or call oriented programming
|
||||
(COP) and thus compromise control flow integrity (CFI) of the program.
|
||||
|
||||
Function pointers live in read-write memory and thus are susceptible
|
||||
to corruption. This can allow an adversary to control the program
|
||||
counter (PC) value. On RISC-V, the zicfilp extension enforces a
|
||||
restriction on such indirect control transfers:
|
||||
|
||||
- Indirect control transfers must land on a landing pad instruction ``lpad``.
|
||||
There are two exceptions to this rule:
|
||||
|
||||
- rs1 = x1 or rs1 = x5, i.e. a return from a function and returns are
|
||||
protected using shadow stack (see zicfiss.rst)
|
||||
|
||||
- rs1 = x7. On RISC-V, the compiler usually does the following to reach a
|
||||
function which is beyond the offset of possible J-type instruction::
|
||||
|
||||
auipc x7, <imm>
|
||||
jalr (x7)
|
||||
|
||||
This form of indirect control transfer is immutable and doesn't
|
||||
rely on memory. Thus rs1=x7 is exempted from tracking and
|
||||
these are considered software guarded jumps.
|
||||
|
||||
The ``lpad`` instruction is a pseudo-op of ``auipc rd, <imm_20bit>``
|
||||
with ``rd=x0``. This is a HINT op. The ``lpad`` instruction must be
|
||||
aligned on a 4 byte boundary. It compares the 20 bit immediate with
|
||||
x7. If ``imm_20bit`` == 0, the CPU doesn't perform any comparison with
|
||||
``x7``. If ``imm_20bit`` != 0, then ``imm_20bit`` must match ``x7``
|
||||
else CPU will raise ``software check exception`` (``cause=18``) with
|
||||
``*tval = 2``.
|
||||
|
||||
The compiler can generate a hash over function signatures and set them
|
||||
up (truncated to 20 bits) in x7 at callsites. Function prologues can
|
||||
have ``lpad`` instructions encoded with the same function hash. This
|
||||
further reduces the number of valid program counter addresses a call
|
||||
site can reach.
|
||||
|
||||
2. ELF and psABI
|
||||
-----------------
|
||||
|
||||
The toolchain sets up :c:macro:`GNU_PROPERTY_RISCV_FEATURE_1_FCFI` for
|
||||
property :c:macro:`GNU_PROPERTY_RISCV_FEATURE_1_AND` in the notes
|
||||
section of the object file.
|
||||
|
||||
3. Linux enabling
|
||||
------------------
|
||||
|
||||
User space programs can have multiple shared objects loaded in their
|
||||
address spaces. It's a difficult task to make sure all the
|
||||
dependencies have been compiled with indirect branch support. Thus
|
||||
it's left to the dynamic loader to enable indirect branch tracking for
|
||||
the program.
|
||||
|
||||
4. prctl() enabling
|
||||
--------------------
|
||||
|
||||
:c:macro:`PR_SET_INDIR_BR_LP_STATUS` / :c:macro:`PR_GET_INDIR_BR_LP_STATUS` /
|
||||
:c:macro:`PR_LOCK_INDIR_BR_LP_STATUS` are three prctls added to manage indirect
|
||||
branch tracking. These prctls are architecture-agnostic and return -EINVAL if
|
||||
the underlying functionality is not supported.
|
||||
|
||||
* prctl(PR_SET_INDIR_BR_LP_STATUS, unsigned long arg)
|
||||
|
||||
If arg1 is :c:macro:`PR_INDIR_BR_LP_ENABLE` and if CPU supports
|
||||
``zicfilp`` then the kernel will enable indirect branch tracking for the
|
||||
task. The dynamic loader can issue this :c:macro:`prctl` once it has
|
||||
determined that all the objects loaded in the address space support
|
||||
indirect branch tracking. Additionally, if there is a `dlopen` to an
|
||||
object which wasn't compiled with ``zicfilp``, the dynamic loader can
|
||||
issue this prctl with arg1 set to 0 (i.e. :c:macro:`PR_INDIR_BR_LP_ENABLE`
|
||||
cleared).
|
||||
|
||||
* prctl(PR_GET_INDIR_BR_LP_STATUS, unsigned long * arg)
|
||||
|
||||
Returns the current status of indirect branch tracking. If enabled
|
||||
it'll return :c:macro:`PR_INDIR_BR_LP_ENABLE`
|
||||
|
||||
* prctl(PR_LOCK_INDIR_BR_LP_STATUS, unsigned long arg)
|
||||
|
||||
Locks the current status of indirect branch tracking on the task. User
|
||||
space may want to run with a strict security posture and wouldn't want
|
||||
loading of objects without ``zicfilp`` support in them, to disallow
|
||||
disabling of indirect branch tracking. In this case, user space can
|
||||
use this prctl to lock the current settings.
|
||||
|
||||
5. violations related to indirect branch tracking
|
||||
--------------------------------------------------
|
||||
|
||||
Pertaining to indirect branch tracking, the CPU raises a software
|
||||
check exception in the following conditions:
|
||||
|
||||
- missing ``lpad`` after indirect call / jmp
|
||||
- ``lpad`` not on 4 byte boundary
|
||||
- ``imm_20bit`` embedded in ``lpad`` instruction doesn't match with ``x7``
|
||||
|
||||
In all 3 cases, ``*tval = 2`` is captured and software check exception is
|
||||
raised (``cause=18``).
|
||||
|
||||
The kernel will treat this as :c:macro:`SIGSEGV` with code =
|
||||
:c:macro:`SEGV_CPERR` and follow the normal course of signal delivery.
|
||||
194
Documentation/arch/riscv/zicfiss.rst
Normal file
194
Documentation/arch/riscv/zicfiss.rst
Normal file
|
|
@ -0,0 +1,194 @@
|
|||
.. SPDX-License-Identifier: GPL-2.0
|
||||
|
||||
:Author: Deepak Gupta <debug@rivosinc.com>
|
||||
:Date: 12 January 2024
|
||||
|
||||
=========================================================
|
||||
Shadow stack to protect function returns on RISC-V Linux
|
||||
=========================================================
|
||||
|
||||
This document briefly describes the interface provided to userspace by Linux
|
||||
to enable shadow stacks for user mode applications on RISC-V.
|
||||
|
||||
1. Feature Overview
|
||||
--------------------
|
||||
|
||||
Memory corruption issues usually result in crashes. However, in the
|
||||
hands of a creative adversary, these issues can result in a variety of
|
||||
security problems.
|
||||
|
||||
Some of those security issues can be code re-use attacks on programs
|
||||
where an adversary can use corrupt return addresses present on the
|
||||
stack. chaining them together to perform return oriented programming
|
||||
(ROP) and thus compromising the control flow integrity (CFI) of the
|
||||
program.
|
||||
|
||||
Return addresses live on the stack in read-write memory. Therefore
|
||||
they are susceptible to corruption, which allows an adversary to
|
||||
control the program counter. On RISC-V, the ``zicfiss`` extension
|
||||
provides an alternate stack (the "shadow stack") on which return
|
||||
addresses can be safely placed in the prologue of the function and
|
||||
retrieved in the epilogue. The ``zicfiss`` extension makes the
|
||||
following changes:
|
||||
|
||||
- PTE encodings for shadow stack virtual memory
|
||||
An earlier reserved encoding in first stage translation i.e.
|
||||
PTE.R=0, PTE.W=1, PTE.X=0 becomes the PTE encoding for shadow stack pages.
|
||||
|
||||
- The ``sspush x1/x5`` instruction pushes (stores) ``x1/x5`` to shadow stack.
|
||||
|
||||
- The ``sspopchk x1/x5`` instruction pops (loads) from shadow stack and compares
|
||||
with ``x1/x5`` and if not equal, the CPU raises a ``software check exception``
|
||||
with ``*tval = 3``
|
||||
|
||||
The compiler toolchain ensures that function prologues have ``sspush
|
||||
x1/x5`` to save the return address on shadow stack in addition to the
|
||||
regular stack. Similarly, function epilogues have ``ld x5,
|
||||
offset(x2)`` followed by ``sspopchk x5`` to ensure that a popped value
|
||||
from the regular stack matches with the popped value from the shadow
|
||||
stack.
|
||||
|
||||
2. Shadow stack protections and linux memory manager
|
||||
-----------------------------------------------------
|
||||
|
||||
As mentioned earlier, shadow stacks get new page table encodings that
|
||||
have some special properties assigned to them, along with instructions
|
||||
that operate on the shadow stacks:
|
||||
|
||||
- Regular stores to shadow stack memory raise store access faults. This
|
||||
protects shadow stack memory from stray writes.
|
||||
|
||||
- Regular loads from shadow stack memory are allowed. This allows
|
||||
stack trace utilities or backtrace functions to read the true call
|
||||
stack and ensure that it has not been tampered with.
|
||||
|
||||
- Only shadow stack instructions can generate shadow stack loads or
|
||||
shadow stack stores.
|
||||
|
||||
- Shadow stack loads and stores on read-only memory raise AMO/store
|
||||
page faults. Thus both ``sspush x1/x5`` and ``sspopchk x1/x5`` will
|
||||
raise AMO/store page fault. This simplies COW handling in kernel
|
||||
during fork(). The kernel can convert shadow stack pages into
|
||||
read-only memory (as it does for regular read-write memory). As
|
||||
soon as subsequent ``sspush`` or ``sspopchk`` instructions in
|
||||
userspace are encountered, the kernel can perform COW.
|
||||
|
||||
- Shadow stack loads and stores on read-write or read-write-execute
|
||||
memory raise an access fault. This is a fatal condition because
|
||||
shadow stack loads and stores should never be operating on
|
||||
read-write or read-write-execute memory.
|
||||
|
||||
3. ELF and psABI
|
||||
-----------------
|
||||
|
||||
The toolchain sets up :c:macro:`GNU_PROPERTY_RISCV_FEATURE_1_BCFI` for
|
||||
property :c:macro:`GNU_PROPERTY_RISCV_FEATURE_1_AND` in the notes
|
||||
section of the object file.
|
||||
|
||||
4. Linux enabling
|
||||
------------------
|
||||
|
||||
User space programs can have multiple shared objects loaded in their
|
||||
address space. It's a difficult task to make sure all the
|
||||
dependencies have been compiled with shadow stack support. Thus
|
||||
it's left to the dynamic loader to enable shadow stacks for the
|
||||
program.
|
||||
|
||||
5. prctl() enabling
|
||||
--------------------
|
||||
|
||||
:c:macro:`PR_SET_SHADOW_STACK_STATUS` / :c:macro:`PR_GET_SHADOW_STACK_STATUS` /
|
||||
:c:macro:`PR_LOCK_SHADOW_STACK_STATUS` are three prctls added to manage shadow
|
||||
stack enabling for tasks. These prctls are architecture-agnostic and return
|
||||
-EINVAL if not implemented.
|
||||
|
||||
* prctl(PR_SET_SHADOW_STACK_STATUS, unsigned long arg)
|
||||
|
||||
If arg = :c:macro:`PR_SHADOW_STACK_ENABLE` and if CPU supports
|
||||
``zicfiss`` then the kernel will enable shadow stacks for the task.
|
||||
The dynamic loader can issue this :c:macro:`prctl` once it has
|
||||
determined that all the objects loaded in address space have support
|
||||
for shadow stacks. Additionally, if there is a :c:macro:`dlopen` to
|
||||
an object which wasn't compiled with ``zicfiss``, the dynamic loader
|
||||
can issue this prctl with arg set to 0 (i.e.
|
||||
:c:macro:`PR_SHADOW_STACK_ENABLE` being clear)
|
||||
|
||||
* prctl(PR_GET_SHADOW_STACK_STATUS, unsigned long * arg)
|
||||
|
||||
Returns the current status of indirect branch tracking. If enabled
|
||||
it'll return :c:macro:`PR_SHADOW_STACK_ENABLE`.
|
||||
|
||||
* prctl(PR_LOCK_SHADOW_STACK_STATUS, unsigned long arg)
|
||||
|
||||
Locks the current status of shadow stack enabling on the
|
||||
task. Userspace may want to run with a strict security posture and
|
||||
wouldn't want loading of objects without ``zicfiss`` support. In this
|
||||
case userspace can use this prctl to disallow disabling of shadow
|
||||
stacks on the current task.
|
||||
|
||||
5. violations related to returns with shadow stack enabled
|
||||
-----------------------------------------------------------
|
||||
|
||||
Pertaining to shadow stacks, the CPU raises a ``software check
|
||||
exception`` upon executing ``sspopchk x1/x5`` if ``x1/x5`` doesn't
|
||||
match the top of shadow stack. If a mismatch happens, then the CPU
|
||||
sets ``*tval = 3`` and raises the exception.
|
||||
|
||||
The Linux kernel will treat this as a :c:macro:`SIGSEGV` with code =
|
||||
:c:macro:`SEGV_CPERR` and follow the normal course of signal delivery.
|
||||
|
||||
6. Shadow stack tokens
|
||||
-----------------------
|
||||
|
||||
Regular stores on shadow stacks are not allowed and thus can't be
|
||||
tampered with via arbitrary stray writes. However, one method of
|
||||
pivoting / switching to a shadow stack is simply writing to the CSR
|
||||
``CSR_SSP``. This will change the active shadow stack for the
|
||||
program. Writes to ``CSR_SSP`` in the program should be mostly
|
||||
limited to context switches, stack unwinds, or longjmp or similar
|
||||
mechanisms (like context switching of Green Threads) in languages like
|
||||
Go and Rust. CSR_SSP writes can be problematic because an attacker can
|
||||
use memory corruption bugs and leverage context switching routines to
|
||||
pivot to any shadow stack. Shadow stack tokens can help mitigate this
|
||||
problem by making sure that:
|
||||
|
||||
- When software is switching away from a shadow stack, the shadow
|
||||
stack pointer should be saved on the shadow stack itself (this is
|
||||
called the ``shadow stack token``).
|
||||
|
||||
- When software is switching to a shadow stack, it should read the
|
||||
``shadow stack token`` from the shadow stack pointer and verify that
|
||||
the ``shadow stack token`` itself is a pointer to the shadow stack
|
||||
itself.
|
||||
|
||||
- Once the token verification is done, software can perform the write
|
||||
to ``CSR_SSP`` to switch shadow stacks.
|
||||
|
||||
Here "software" could refer to the user mode task runtime itself,
|
||||
managing various contexts as part of a single thread. Or "software"
|
||||
could refer to the kernel, when the kernel has to deliver a signal to
|
||||
a user task and must save the shadow stack pointer. The kernel can
|
||||
perform similar procedure itself by saving a token on the user mode
|
||||
task's shadow stack. This way, whenever :c:macro:`sigreturn` happens,
|
||||
the kernel can read and verify the token and then switch to the shadow
|
||||
stack. Using this mechanism, the kernel helps the user task so that
|
||||
any corruption issue in the user task is not exploited by adversaries
|
||||
arbitrarily using :c:macro:`sigreturn`. Adversaries will have to make
|
||||
sure that there is a valid ``shadow stack token`` in addition to
|
||||
invoking :c:macro:`sigreturn`.
|
||||
|
||||
7. Signal shadow stack
|
||||
-----------------------
|
||||
The following structure has been added to sigcontext for RISC-V::
|
||||
|
||||
struct __sc_riscv_cfi_state {
|
||||
unsigned long ss_ptr;
|
||||
};
|
||||
|
||||
As part of signal delivery, the shadow stack token is saved on the
|
||||
current shadow stack itself. The updated pointer is saved away in the
|
||||
:c:macro:`ss_ptr` field in :c:macro:`__sc_riscv_cfi_state` under
|
||||
:c:macro:`sigcontext`. The existing shadow stack allocation is used
|
||||
for signal delivery. During :c:macro:`sigreturn`, kernel will obtain
|
||||
:c:macro:`ss_ptr` from :c:macro:`sigcontext`, verify the saved
|
||||
token on the shadow stack, and switch the shadow stack.
|
||||
|
|
@ -146,6 +146,58 @@ What about block I/O and networking buffers? The block I/O and
|
|||
networking subsystems make sure that the buffers they use are valid
|
||||
for you to DMA from/to.
|
||||
|
||||
__dma_from_device_group_begin/end annotations
|
||||
=============================================
|
||||
|
||||
As explained previously, when a structure contains a DMA_FROM_DEVICE /
|
||||
DMA_BIDIRECTIONAL buffer (device writes to memory) alongside fields that the
|
||||
CPU writes to, cache line sharing between the DMA buffer and CPU-written fields
|
||||
can cause data corruption on CPUs with DMA-incoherent caches.
|
||||
|
||||
The ``__dma_from_device_group_begin(GROUP)/__dma_from_device_group_end(GROUP)``
|
||||
macros ensure proper alignment to prevent this::
|
||||
|
||||
struct my_device {
|
||||
spinlock_t lock1;
|
||||
__dma_from_device_group_begin();
|
||||
char dma_buffer1[16];
|
||||
char dma_buffer2[16];
|
||||
__dma_from_device_group_end();
|
||||
spinlock_t lock2;
|
||||
};
|
||||
|
||||
To isolate a DMA buffer from adjacent fields, use
|
||||
``__dma_from_device_group_begin(GROUP)`` before the first DMA buffer
|
||||
field and ``__dma_from_device_group_end(GROUP)`` after the last DMA
|
||||
buffer field (with the same GROUP name). This protects both the head
|
||||
and tail of the buffer from cache line sharing.
|
||||
|
||||
The GROUP parameter is an optional identifier that names the DMA buffer group
|
||||
(in case you have several in the same structure)::
|
||||
|
||||
struct my_device {
|
||||
spinlock_t lock1;
|
||||
__dma_from_device_group_begin(buffer1);
|
||||
char dma_buffer1[16];
|
||||
__dma_from_device_group_end(buffer1);
|
||||
spinlock_t lock2;
|
||||
__dma_from_device_group_begin(buffer2);
|
||||
char dma_buffer2[16];
|
||||
__dma_from_device_group_end(buffer2);
|
||||
};
|
||||
|
||||
On cache-coherent platforms these macros expand to zero-length array markers.
|
||||
On non-coherent platforms, they also ensure the minimal DMA alignment, which
|
||||
can be as large as 128 bytes.
|
||||
|
||||
.. note::
|
||||
|
||||
It is allowed (though somewhat fragile) to include extra fields, not
|
||||
intended for DMA from the device, within the group (in order to pack the
|
||||
structure tightly) - but only as long as the CPU does not write these
|
||||
fields while any fields in the group are mapped for DMA_FROM_DEVICE or
|
||||
DMA_BIDIRECTIONAL.
|
||||
|
||||
DMA addressing capabilities
|
||||
===========================
|
||||
|
||||
|
|
|
|||
|
|
@ -148,3 +148,12 @@ DMA_ATTR_MMIO is appropriate.
|
|||
For architectures that require cache flushing for DMA coherence
|
||||
DMA_ATTR_MMIO will not perform any cache flushing. The address
|
||||
provided must never be mapped cacheable into the CPU.
|
||||
|
||||
DMA_ATTR_CPU_CACHE_CLEAN
|
||||
------------------------
|
||||
|
||||
This attribute indicates the CPU will not dirty any cacheline overlapping this
|
||||
DMA_FROM_DEVICE/DMA_BIDIRECTIONAL buffer while it is mapped. This allows
|
||||
multiple small buffers to safely share a cacheline without risk of data
|
||||
corruption, suppressing DMA debug warnings about overlapping mappings.
|
||||
All mappings sharing a cacheline should have this attribute.
|
||||
|
|
|
|||
28
Documentation/core-api/kho/abi.rst
Normal file
28
Documentation/core-api/kho/abi.rst
Normal file
|
|
@ -0,0 +1,28 @@
|
|||
.. SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
==================
|
||||
Kexec Handover ABI
|
||||
==================
|
||||
|
||||
Core Kexec Handover ABI
|
||||
========================
|
||||
|
||||
.. kernel-doc:: include/linux/kho/abi/kexec_handover.h
|
||||
:doc: Kexec Handover ABI
|
||||
|
||||
vmalloc preservation ABI
|
||||
========================
|
||||
|
||||
.. kernel-doc:: include/linux/kho/abi/kexec_handover.h
|
||||
:doc: Kexec Handover ABI for vmalloc Preservation
|
||||
|
||||
memblock preservation ABI
|
||||
=========================
|
||||
|
||||
.. kernel-doc:: include/linux/kho/abi/memblock.h
|
||||
:doc: memblock kexec handover ABI
|
||||
|
||||
See Also
|
||||
========
|
||||
|
||||
- :doc:`/admin-guide/mm/kho`
|
||||
|
|
@ -1,43 +0,0 @@
|
|||
# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
|
||||
%YAML 1.2
|
||||
---
|
||||
title: Kexec HandOver (KHO) root tree
|
||||
|
||||
maintainers:
|
||||
- Mike Rapoport <rppt@kernel.org>
|
||||
- Changyuan Lyu <changyuanl@google.com>
|
||||
|
||||
description: |
|
||||
System memory preserved by KHO across kexec.
|
||||
|
||||
properties:
|
||||
compatible:
|
||||
enum:
|
||||
- kho-v1
|
||||
|
||||
preserved-memory-map:
|
||||
description: |
|
||||
physical address (u64) of an in-memory structure describing all preserved
|
||||
folios and memory ranges.
|
||||
|
||||
patternProperties:
|
||||
"$[0-9a-f_]+^":
|
||||
$ref: sub-fdt.yaml#
|
||||
description: physical address of a KHO user's own FDT.
|
||||
|
||||
required:
|
||||
- compatible
|
||||
- preserved-memory-map
|
||||
|
||||
additionalProperties: false
|
||||
|
||||
examples:
|
||||
- |
|
||||
kho {
|
||||
compatible = "kho-v1";
|
||||
preserved-memory-map = <0xf0be16 0x1000000>;
|
||||
|
||||
memblock {
|
||||
fdt = <0x80cc16 0x1000000>;
|
||||
};
|
||||
};
|
||||
|
|
@ -1,39 +0,0 @@
|
|||
# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
|
||||
%YAML 1.2
|
||||
---
|
||||
title: Memblock reserved memory
|
||||
|
||||
maintainers:
|
||||
- Mike Rapoport <rppt@kernel.org>
|
||||
|
||||
description: |
|
||||
Memblock can serialize its current memory reservations created with
|
||||
reserve_mem command line option across kexec through KHO.
|
||||
The post-KHO kernel can then consume these reservations and they are
|
||||
guaranteed to have the same physical address.
|
||||
|
||||
properties:
|
||||
compatible:
|
||||
enum:
|
||||
- reserve-mem-v1
|
||||
|
||||
patternProperties:
|
||||
"$[0-9a-f_]+^":
|
||||
$ref: reserve-mem.yaml#
|
||||
description: reserved memory regions
|
||||
|
||||
required:
|
||||
- compatible
|
||||
|
||||
additionalProperties: false
|
||||
|
||||
examples:
|
||||
- |
|
||||
memblock {
|
||||
compatible = "memblock-v1";
|
||||
n1 {
|
||||
compatible = "reserve-mem-v1";
|
||||
start = <0xc06b 0x4000000>;
|
||||
size = <0x04 0x00>;
|
||||
};
|
||||
};
|
||||
|
|
@ -1,40 +0,0 @@
|
|||
# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
|
||||
%YAML 1.2
|
||||
---
|
||||
title: Memblock reserved memory regions
|
||||
|
||||
maintainers:
|
||||
- Mike Rapoport <rppt@kernel.org>
|
||||
|
||||
description: |
|
||||
Memblock can serialize its current memory reservations created with
|
||||
reserve_mem command line option across kexec through KHO.
|
||||
This object describes each such region.
|
||||
|
||||
properties:
|
||||
compatible:
|
||||
enum:
|
||||
- reserve-mem-v1
|
||||
|
||||
start:
|
||||
description: |
|
||||
physical address (u64) of the reserved memory region.
|
||||
|
||||
size:
|
||||
description: |
|
||||
size (u64) of the reserved memory region.
|
||||
|
||||
required:
|
||||
- compatible
|
||||
- start
|
||||
- size
|
||||
|
||||
additionalProperties: false
|
||||
|
||||
examples:
|
||||
- |
|
||||
n1 {
|
||||
compatible = "reserve-mem-v1";
|
||||
start = <0xc06b 0x4000000>;
|
||||
size = <0x04 0x00>;
|
||||
};
|
||||
|
|
@ -1,27 +0,0 @@
|
|||
# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
|
||||
%YAML 1.2
|
||||
---
|
||||
title: KHO users' FDT address
|
||||
|
||||
maintainers:
|
||||
- Mike Rapoport <rppt@kernel.org>
|
||||
- Changyuan Lyu <changyuanl@google.com>
|
||||
|
||||
description: |
|
||||
Physical address of an FDT blob registered by a KHO user.
|
||||
|
||||
properties:
|
||||
fdt:
|
||||
description: |
|
||||
physical address (u64) of an FDT blob.
|
||||
|
||||
required:
|
||||
- fdt
|
||||
|
||||
additionalProperties: false
|
||||
|
||||
examples:
|
||||
- |
|
||||
memblock {
|
||||
fdt = <0x80cc16 0x1000000>;
|
||||
};
|
||||
|
|
@ -1,74 +0,0 @@
|
|||
.. SPDX-License-Identifier: GPL-2.0-or-later
|
||||
.. _kho-concepts:
|
||||
|
||||
=======================
|
||||
Kexec Handover Concepts
|
||||
=======================
|
||||
|
||||
Kexec HandOver (KHO) is a mechanism that allows Linux to preserve memory
|
||||
regions, which could contain serialized system states, across kexec.
|
||||
|
||||
It introduces multiple concepts:
|
||||
|
||||
KHO FDT
|
||||
=======
|
||||
|
||||
Every KHO kexec carries a KHO specific flattened device tree (FDT) blob
|
||||
that describes preserved memory regions. These regions contain either
|
||||
serialized subsystem states, or in-memory data that shall not be touched
|
||||
across kexec. After KHO, subsystems can retrieve and restore preserved
|
||||
memory regions from KHO FDT.
|
||||
|
||||
KHO only uses the FDT container format and libfdt library, but does not
|
||||
adhere to the same property semantics that normal device trees do: Properties
|
||||
are passed in native endianness and standardized properties like ``regs`` and
|
||||
``ranges`` do not exist, hence there are no ``#...-cells`` properties.
|
||||
|
||||
KHO is still under development. The FDT schema is unstable and would change
|
||||
in the future.
|
||||
|
||||
Scratch Regions
|
||||
===============
|
||||
|
||||
To boot into kexec, we need to have a physically contiguous memory range that
|
||||
contains no handed over memory. Kexec then places the target kernel and initrd
|
||||
into that region. The new kernel exclusively uses this region for memory
|
||||
allocations before during boot up to the initialization of the page allocator.
|
||||
|
||||
We guarantee that we always have such regions through the scratch regions: On
|
||||
first boot KHO allocates several physically contiguous memory regions. Since
|
||||
after kexec these regions will be used by early memory allocations, there is a
|
||||
scratch region per NUMA node plus a scratch region to satisfy allocations
|
||||
requests that do not require particular NUMA node assignment.
|
||||
By default, size of the scratch region is calculated based on amount of memory
|
||||
allocated during boot. The ``kho_scratch`` kernel command line option may be
|
||||
used to explicitly define size of the scratch regions.
|
||||
The scratch regions are declared as CMA when page allocator is initialized so
|
||||
that their memory can be used during system lifetime. CMA gives us the
|
||||
guarantee that no handover pages land in that region, because handover pages
|
||||
must be at a static physical memory location and CMA enforces that only
|
||||
movable pages can be located inside.
|
||||
|
||||
After KHO kexec, we ignore the ``kho_scratch`` kernel command line option and
|
||||
instead reuse the exact same region that was originally allocated. This allows
|
||||
us to recursively execute any amount of KHO kexecs. Because we used this region
|
||||
for boot memory allocations and as target memory for kexec blobs, some parts
|
||||
of that memory region may be reserved. These reservations are irrelevant for
|
||||
the next KHO, because kexec can overwrite even the original kernel.
|
||||
|
||||
.. _kho-finalization-phase:
|
||||
|
||||
KHO finalization phase
|
||||
======================
|
||||
|
||||
To enable user space based kexec file loader, the kernel needs to be able to
|
||||
provide the FDT that describes the current kernel's state before
|
||||
performing the actual kexec. The process of generating that FDT is
|
||||
called serialization. When the FDT is generated, some properties
|
||||
of the system may become immutable because they are already written down
|
||||
in the FDT. That state is called the KHO finalization phase.
|
||||
|
||||
Public API
|
||||
==========
|
||||
.. kernel-doc:: kernel/liveupdate/kexec_handover.c
|
||||
:export:
|
||||
|
|
@ -1,80 +0,0 @@
|
|||
.. SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
=======
|
||||
KHO FDT
|
||||
=======
|
||||
|
||||
KHO uses the flattened device tree (FDT) container format and libfdt
|
||||
library to create and parse the data that is passed between the
|
||||
kernels. The properties in KHO FDT are stored in native format.
|
||||
It includes the physical address of an in-memory structure describing
|
||||
all preserved memory regions, as well as physical addresses of KHO users'
|
||||
own FDTs. Interpreting those sub FDTs is the responsibility of KHO users.
|
||||
|
||||
KHO nodes and properties
|
||||
========================
|
||||
|
||||
Property ``preserved-memory-map``
|
||||
---------------------------------
|
||||
|
||||
KHO saves a special property named ``preserved-memory-map`` under the root node.
|
||||
This node contains the physical address of an in-memory structure for KHO to
|
||||
preserve memory regions across kexec.
|
||||
|
||||
Property ``compatible``
|
||||
-----------------------
|
||||
|
||||
The ``compatible`` property determines compatibility between the kernel
|
||||
that created the KHO FDT and the kernel that attempts to load it.
|
||||
If the kernel that loads the KHO FDT is not compatible with it, the entire
|
||||
KHO process will be bypassed.
|
||||
|
||||
Property ``fdt``
|
||||
----------------
|
||||
|
||||
Generally, a KHO user serialize its state into its own FDT and instructs
|
||||
KHO to preserve the underlying memory, such that after kexec, the new kernel
|
||||
can recover its state from the preserved FDT.
|
||||
|
||||
A KHO user thus can create a node in KHO root tree and save the physical address
|
||||
of its own FDT in that node's property ``fdt`` .
|
||||
|
||||
Examples
|
||||
========
|
||||
|
||||
The following example demonstrates KHO FDT that preserves two memory
|
||||
regions created with ``reserve_mem`` kernel command line parameter::
|
||||
|
||||
/dts-v1/;
|
||||
|
||||
/ {
|
||||
compatible = "kho-v1";
|
||||
|
||||
preserved-memory-map = <0x40be16 0x1000000>;
|
||||
|
||||
memblock {
|
||||
fdt = <0x1517 0x1000000>;
|
||||
};
|
||||
};
|
||||
|
||||
where the ``memblock`` node contains an FDT that is requested by the
|
||||
subsystem memblock for preservation. The FDT contains the following
|
||||
serialized data::
|
||||
|
||||
/dts-v1/;
|
||||
|
||||
/ {
|
||||
compatible = "memblock-v1";
|
||||
|
||||
n1 {
|
||||
compatible = "reserve-mem-v1";
|
||||
start = <0xc06b 0x4000000>;
|
||||
size = <0x04 0x00>;
|
||||
};
|
||||
|
||||
n2 {
|
||||
compatible = "reserve-mem-v1";
|
||||
start = <0xc067 0x4000000>;
|
||||
size = <0x04 0x00>;
|
||||
};
|
||||
};
|
||||
|
|
@ -1,11 +1,89 @@
|
|||
.. SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
.. _kho-concepts:
|
||||
|
||||
========================
|
||||
Kexec Handover Subsystem
|
||||
========================
|
||||
|
||||
Overview
|
||||
========
|
||||
|
||||
Kexec HandOver (KHO) is a mechanism that allows Linux to preserve memory
|
||||
regions, which could contain serialized system states, across kexec.
|
||||
|
||||
KHO uses :ref:`flattened device tree (FDT) <kho_fdt>` to pass information about
|
||||
the preserved state from pre-exec kernel to post-kexec kernel and :ref:`scratch
|
||||
memory regions <kho_scratch>` to ensure integrity of the preserved memory.
|
||||
|
||||
.. _kho_fdt:
|
||||
|
||||
KHO FDT
|
||||
=======
|
||||
Every KHO kexec carries a KHO specific flattened device tree (FDT) blob that
|
||||
describes the preserved state. The FDT includes properties describing preserved
|
||||
memory regions and nodes that hold subsystem specific state.
|
||||
|
||||
The preserved memory regions contain either serialized subsystem states, or
|
||||
in-memory data that shall not be touched across kexec. After KHO, subsystems
|
||||
can retrieve and restore the preserved state from KHO FDT.
|
||||
|
||||
Subsystems participating in KHO can define their own format for state
|
||||
serialization and preservation.
|
||||
|
||||
KHO FDT and structures defined by the subsystems form an ABI between pre-kexec
|
||||
and post-kexec kernels. This ABI is defined by header files in
|
||||
``include/linux/kho/abi`` directory.
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 1
|
||||
|
||||
concepts
|
||||
fdt
|
||||
abi.rst
|
||||
|
||||
.. _kho_scratch:
|
||||
|
||||
Scratch Regions
|
||||
===============
|
||||
|
||||
To boot into kexec, we need to have a physically contiguous memory range that
|
||||
contains no handed over memory. Kexec then places the target kernel and initrd
|
||||
into that region. The new kernel exclusively uses this region for memory
|
||||
allocations before during boot up to the initialization of the page allocator.
|
||||
|
||||
We guarantee that we always have such regions through the scratch regions: On
|
||||
first boot KHO allocates several physically contiguous memory regions. Since
|
||||
after kexec these regions will be used by early memory allocations, there is a
|
||||
scratch region per NUMA node plus a scratch region to satisfy allocations
|
||||
requests that do not require particular NUMA node assignment.
|
||||
By default, size of the scratch region is calculated based on amount of memory
|
||||
allocated during boot. The ``kho_scratch`` kernel command line option may be
|
||||
used to explicitly define size of the scratch regions.
|
||||
The scratch regions are declared as CMA when page allocator is initialized so
|
||||
that their memory can be used during system lifetime. CMA gives us the
|
||||
guarantee that no handover pages land in that region, because handover pages
|
||||
must be at a static physical memory location and CMA enforces that only
|
||||
movable pages can be located inside.
|
||||
|
||||
After KHO kexec, we ignore the ``kho_scratch`` kernel command line option and
|
||||
instead reuse the exact same region that was originally allocated. This allows
|
||||
us to recursively execute any amount of KHO kexecs. Because we used this region
|
||||
for boot memory allocations and as target memory for kexec blobs, some parts
|
||||
of that memory region may be reserved. These reservations are irrelevant for
|
||||
the next KHO, because kexec can overwrite even the original kernel.
|
||||
|
||||
.. _kho-finalization-phase:
|
||||
|
||||
KHO finalization phase
|
||||
======================
|
||||
|
||||
To enable user space based kexec file loader, the kernel needs to be able to
|
||||
provide the FDT that describes the current kernel's state before
|
||||
performing the actual kexec. The process of generating that FDT is
|
||||
called serialization. When the FDT is generated, some properties
|
||||
of the system may become immutable because they are already written down
|
||||
in the FDT. That state is called the KHO finalization phase.
|
||||
|
||||
See Also
|
||||
========
|
||||
|
||||
- :doc:`/admin-guide/mm/kho`
|
||||
|
|
|
|||
|
|
@ -774,3 +774,12 @@ Full List API
|
|||
|
||||
.. kernel-doc:: include/linux/list.h
|
||||
:internal:
|
||||
|
||||
Private List API
|
||||
================
|
||||
|
||||
.. kernel-doc:: include/linux/list_private.h
|
||||
:doc: Private List Primitives
|
||||
|
||||
.. kernel-doc:: include/linux/list_private.h
|
||||
:internal:
|
||||
|
|
|
|||
|
|
@ -18,6 +18,11 @@ LUO Preserving File Descriptors
|
|||
.. kernel-doc:: kernel/liveupdate/luo_file.c
|
||||
:doc: LUO File Descriptors
|
||||
|
||||
LUO File Lifecycle Bound Global Data
|
||||
====================================
|
||||
.. kernel-doc:: kernel/liveupdate/luo_flb.c
|
||||
:doc: LUO File Lifecycle Bound Global Data
|
||||
|
||||
Live Update Orchestrator ABI
|
||||
============================
|
||||
.. kernel-doc:: include/linux/kho/abi/luo.h
|
||||
|
|
@ -40,6 +45,9 @@ Public API
|
|||
.. kernel-doc:: kernel/liveupdate/luo_core.c
|
||||
:export:
|
||||
|
||||
.. kernel-doc:: kernel/liveupdate/luo_flb.c
|
||||
:export:
|
||||
|
||||
.. kernel-doc:: kernel/liveupdate/luo_file.c
|
||||
:export:
|
||||
|
||||
|
|
@ -48,6 +56,9 @@ Internal API
|
|||
.. kernel-doc:: kernel/liveupdate/luo_core.c
|
||||
:internal:
|
||||
|
||||
.. kernel-doc:: kernel/liveupdate/luo_flb.c
|
||||
:internal:
|
||||
|
||||
.. kernel-doc:: kernel/liveupdate/luo_session.c
|
||||
:internal:
|
||||
|
||||
|
|
@ -58,4 +69,4 @@ See Also
|
|||
========
|
||||
|
||||
- :doc:`Live Update uAPI </userspace-api/liveupdate>`
|
||||
- :doc:`/core-api/kho/concepts`
|
||||
- :doc:`/core-api/kho/index`
|
||||
|
|
|
|||
|
|
@ -130,5 +130,5 @@ More Memory Management Functions
|
|||
.. kernel-doc:: mm/vmscan.c
|
||||
.. kernel-doc:: mm/memory_hotplug.c
|
||||
.. kernel-doc:: mm/mmu_notifier.c
|
||||
.. kernel-doc:: mm/balloon_compaction.c
|
||||
.. kernel-doc:: mm/balloon.c
|
||||
.. kernel-doc:: mm/huge_memory.c
|
||||
|
|
|
|||
|
|
@ -197,7 +197,7 @@ Cached rbtrees
|
|||
--------------
|
||||
|
||||
Computing the leftmost (smallest) node is quite a common task for binary
|
||||
search trees, such as for traversals or users relying on a the particular
|
||||
search trees, such as for traversals or users relying on the particular
|
||||
order for their own logic. To this end, users can use 'struct rb_root_cached'
|
||||
to optimize O(logN) rb_first() calls to a simple pointer fetch avoiding
|
||||
potentially expensive tree iterations. This is done at negligible runtime
|
||||
|
|
@ -255,7 +255,7 @@ affected subtrees.
|
|||
|
||||
When erasing a node, the user must call rb_erase_augmented() instead of
|
||||
rb_erase(). rb_erase_augmented() calls back into user provided functions
|
||||
to updated the augmented information on affected subtrees.
|
||||
to update the augmented information on affected subtrees.
|
||||
|
||||
In both cases, the callbacks are provided through struct rb_augment_callbacks.
|
||||
3 callbacks must be defined:
|
||||
|
|
@ -293,7 +293,7 @@ way making it possible to do efficient lookup and exact match.
|
|||
|
||||
This "extra information" stored in each node is the maximum hi
|
||||
(max_hi) value among all the nodes that are its descendants. This
|
||||
information can be maintained at each node just be looking at the node
|
||||
information can be maintained at each node just by looking at the node
|
||||
and its immediate children. And this will be used in O(log n) lookup
|
||||
for lowest match (lowest start address among all possible matches)
|
||||
with something like::
|
||||
|
|
|
|||
|
|
@ -601,6 +601,11 @@ Commit message
|
|||
|
||||
See: https://www.kernel.org/doc/html/latest/process/submitting-patches.html#describe-your-changes
|
||||
|
||||
**BAD_COMMIT_SEPARATOR**
|
||||
The commit separator is a single line with 3 dashes.
|
||||
The regex match is '^---$'
|
||||
Lines that start with 3 dashes and have more content on the same line
|
||||
may confuse tools that apply patches.
|
||||
|
||||
Comparison style
|
||||
----------------
|
||||
|
|
|
|||
|
|
@ -127,6 +127,18 @@ To enable verbose messages set the V= variable, for example::
|
|||
|
||||
make coccicheck MODE=report V=1
|
||||
|
||||
By default, coccicheck will print debug logs to stdout and redirect stderr to
|
||||
/dev/null. This can make coccicheck output difficult to read and understand.
|
||||
Debug and error messages can instead be written to a debug file instead by
|
||||
setting the ``DEBUG_FILE`` variable::
|
||||
|
||||
make coccicheck MODE=report DEBUG_FILE="cocci.log"
|
||||
|
||||
Coccinelle cannot overwrite a debug file. Instead of repeatedly deleting a log
|
||||
file, you could include the datetime in the debug file name::
|
||||
|
||||
make coccicheck MODE=report DEBUG_FILE="cocci-$(date -Iseconds).log"
|
||||
|
||||
Coccinelle parallelization
|
||||
--------------------------
|
||||
|
||||
|
|
@ -208,11 +220,10 @@ include options matching the options used when we compile the kernel.
|
|||
You can learn what these options are by using V=1; you could then
|
||||
manually run Coccinelle with debug options added.
|
||||
|
||||
Alternatively you can debug running Coccinelle against SmPL patches
|
||||
by asking for stderr to be redirected to stderr. By default stderr
|
||||
is redirected to /dev/null; if you'd like to capture stderr you
|
||||
can specify the ``DEBUG_FILE="file.txt"`` option to coccicheck. For
|
||||
instance::
|
||||
An easier approach to debug running Coccinelle against SmPL patches is to ask
|
||||
coccicheck to redirect stderr to a debug file. As mentioned in the examples, by
|
||||
default stderr is redirected to /dev/null; if you'd like to capture stderr you
|
||||
can specify the ``DEBUG_FILE="file.txt"`` option to coccicheck. For instance::
|
||||
|
||||
rm -f cocci.err
|
||||
make coccicheck COCCI=scripts/coccinelle/free/kfree.cocci MODE=report DEBUG_FILE=cocci.err
|
||||
|
|
|
|||
|
|
@ -56,7 +56,6 @@ DT_DOCS = $(patsubst $(srctree)/%,%,$(shell $(find_all_cmd)))
|
|||
|
||||
override DTC_FLAGS := \
|
||||
-Wno-avoid_unnecessary_addr_size \
|
||||
-Wno-graph_child_address \
|
||||
-Wno-unique_unit_address \
|
||||
-Wunique_unit_address_if_enabled
|
||||
|
||||
|
|
@ -82,5 +81,8 @@ clean-files = $(shell find $(obj) \( -name '*.example.dts' -o \
|
|||
dt_compatible_check: $(obj)/processed-schema.json
|
||||
$(Q)$(srctree)/scripts/dtc/dt-extract-compatibles $(srctree) | xargs dt-check-compatible -v -s $<
|
||||
|
||||
PHONY += dt_binding_check_one
|
||||
dt_binding_check_one: $(obj)/.dt-binding.checked $(obj)/.yamllint.checked
|
||||
|
||||
PHONY += dt_binding_check
|
||||
dt_binding_check: $(obj)/.dt-binding.checked $(obj)/.yamllint.checked $(CHK_DT_EXAMPLES)
|
||||
dt_binding_check: dt_binding_check_one $(CHK_DT_EXAMPLES)
|
||||
|
|
|
|||
|
|
@ -31,7 +31,7 @@ maintainers:
|
|||
- Mike Leach <mike.leach@linaro.org>
|
||||
- Suzuki K Poulose <suzuki.poulose@arm.com>
|
||||
- James Clark <james.clark@linaro.org>
|
||||
- Mao Jinlong <quic_jinlmao@quicinc.com>
|
||||
- Mao Jinlong <jinlong.mao@oss.qualcomm.com>
|
||||
- Hao Zhang <quic_hazha@quicinc.com>
|
||||
|
||||
properties:
|
||||
|
|
|
|||
|
|
@ -30,7 +30,7 @@ maintainers:
|
|||
- Mike Leach <mike.leach@linaro.org>
|
||||
- Suzuki K Poulose <suzuki.poulose@arm.com>
|
||||
- James Clark <james.clark@linaro.org>
|
||||
- Mao Jinlong <quic_jinlmao@quicinc.com>
|
||||
- Mao Jinlong <jinlong.mao@oss.qualcomm.com>
|
||||
- Hao Zhang <quic_hazha@quicinc.com>
|
||||
|
||||
properties:
|
||||
|
|
|
|||
|
|
@ -157,6 +157,12 @@ patternProperties:
|
|||
- const: simple-bus
|
||||
- const: simple-bus
|
||||
|
||||
"#interrupt-cells":
|
||||
const: 1
|
||||
|
||||
interrupt-map: true
|
||||
interrupt-map-mask: true
|
||||
|
||||
patternProperties:
|
||||
'^motherboard-bus@':
|
||||
type: object
|
||||
|
|
|
|||
|
|
@ -1,24 +0,0 @@
|
|||
# SPDX-License-Identifier: GPL-2.0
|
||||
%YAML 1.2
|
||||
---
|
||||
$id: http://devicetree.org/schemas/arm/bcm/brcm,vulcan-soc.yaml#
|
||||
$schema: http://devicetree.org/meta-schemas/core.yaml#
|
||||
|
||||
title: Broadcom Vulcan
|
||||
|
||||
maintainers:
|
||||
- Robert Richter <rrichter@marvell.com>
|
||||
|
||||
properties:
|
||||
$nodename:
|
||||
const: '/'
|
||||
compatible:
|
||||
items:
|
||||
- enum:
|
||||
- brcm,vulcan-eval
|
||||
- cavium,thunderx2-cn9900
|
||||
- const: brcm,vulcan-soc
|
||||
|
||||
additionalProperties: true
|
||||
|
||||
...
|
||||
|
|
@ -65,6 +65,11 @@ properties:
|
|||
gpio-line-names:
|
||||
minItems: 8
|
||||
|
||||
patternProperties:
|
||||
'-hog$':
|
||||
required:
|
||||
- gpio-hog
|
||||
|
||||
required:
|
||||
- compatible
|
||||
- gpio-controller
|
||||
|
|
@ -87,6 +92,9 @@ properties:
|
|||
- compatible
|
||||
- "#reset-cells"
|
||||
|
||||
power:
|
||||
$ref: /schemas/power/raspberrypi,bcm2835-power.yaml#
|
||||
|
||||
pwm:
|
||||
type: object
|
||||
additionalProperties: false
|
||||
|
|
|
|||
|
|
@ -1,31 +0,0 @@
|
|||
OMAP PRM instance bindings
|
||||
|
||||
Power and Reset Manager is an IP block on OMAP family of devices which
|
||||
handle the power domains and their current state, and provide reset
|
||||
handling for the domains and/or separate IP blocks under the power domain
|
||||
hierarchy.
|
||||
|
||||
Required properties:
|
||||
- compatible: Must contain one of the following:
|
||||
"ti,am3-prm-inst"
|
||||
"ti,am4-prm-inst"
|
||||
"ti,omap4-prm-inst"
|
||||
"ti,omap5-prm-inst"
|
||||
"ti,dra7-prm-inst"
|
||||
and additionally must contain:
|
||||
"ti,omap-prm-inst"
|
||||
- reg: Contains PRM instance register address range
|
||||
(base address and length)
|
||||
|
||||
Optional properties:
|
||||
- #power-domain-cells: Should be 0 if the instance is a power domain provider.
|
||||
- #reset-cells: Should be 1 if the PRM instance in question supports resets.
|
||||
|
||||
Example:
|
||||
|
||||
prm_dsp2: prm@1b00 {
|
||||
compatible = "ti,dra7-prm-inst", "ti,omap-prm-inst";
|
||||
reg = <0x1b00 0x40>;
|
||||
#power-domain-cells = <0>;
|
||||
#reset-cells = <1>;
|
||||
};
|
||||
|
|
@ -7,9 +7,9 @@ $schema: http://devicetree.org/meta-schemas/core.yaml#
|
|||
title: CoreSight TMC Control Unit
|
||||
|
||||
maintainers:
|
||||
- Yuanfang Zhang <quic_yuanfang@quicinc.com>
|
||||
- Mao Jinlong <quic_jinlmao@quicinc.com>
|
||||
- Jie Gan <quic_jiegan@quicinc.com>
|
||||
- Yuanfang Zhang <yuanfang.zhang@oss.qualcomm.com>
|
||||
- Mao Jinlong <jinlong.mao@oss.qualcomm.com>
|
||||
- Jie Gan <jie.gan@oss.qualcomm.com>
|
||||
|
||||
description: |
|
||||
The Trace Memory Controller(TMC) is used for Embedded Trace Buffer(ETB),
|
||||
|
|
@ -26,8 +26,13 @@ description: |
|
|||
|
||||
properties:
|
||||
compatible:
|
||||
enum:
|
||||
- qcom,sa8775p-ctcu
|
||||
oneOf:
|
||||
- items:
|
||||
- enum:
|
||||
- qcom,qcs8300-ctcu
|
||||
- const: qcom,sa8775p-ctcu
|
||||
- enum:
|
||||
- qcom,sa8775p-ctcu
|
||||
|
||||
reg:
|
||||
maxItems: 1
|
||||
|
|
|
|||
|
|
@ -0,0 +1,90 @@
|
|||
# SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause
|
||||
%YAML 1.2
|
||||
---
|
||||
$id: http://devicetree.org/schemas/arm/qcom,coresight-itnoc.yaml#
|
||||
$schema: http://devicetree.org/meta-schemas/core.yaml#
|
||||
|
||||
title: Qualcomm Interconnect Trace Network On Chip - ITNOC
|
||||
|
||||
maintainers:
|
||||
- Yuanfang Zhang <yuanfang.zhang@oss.qualcomm.com>
|
||||
|
||||
description:
|
||||
The Interconnect TNOC is a CoreSight graph link that forwards trace data
|
||||
from a subsystem to the Aggregator TNOC. Compared to Aggregator TNOC, it
|
||||
does not have aggregation and ATID functionality.
|
||||
|
||||
properties:
|
||||
$nodename:
|
||||
pattern: "^itnoc(@[0-9a-f]+)?$"
|
||||
|
||||
compatible:
|
||||
const: qcom,coresight-itnoc
|
||||
|
||||
reg:
|
||||
maxItems: 1
|
||||
|
||||
clocks:
|
||||
maxItems: 1
|
||||
|
||||
clock-names:
|
||||
items:
|
||||
- const: apb
|
||||
|
||||
in-ports:
|
||||
$ref: /schemas/graph.yaml#/properties/ports
|
||||
|
||||
patternProperties:
|
||||
'^port(@[0-9a-f]{1,2})?$':
|
||||
description: Input connections from CoreSight Trace Bus
|
||||
$ref: /schemas/graph.yaml#/properties/port
|
||||
|
||||
out-ports:
|
||||
$ref: /schemas/graph.yaml#/properties/ports
|
||||
additionalProperties: false
|
||||
|
||||
properties:
|
||||
port:
|
||||
description: out connections to aggregator TNOC
|
||||
$ref: /schemas/graph.yaml#/properties/port
|
||||
|
||||
required:
|
||||
- compatible
|
||||
- reg
|
||||
- clocks
|
||||
- clock-names
|
||||
- in-ports
|
||||
- out-ports
|
||||
|
||||
additionalProperties: false
|
||||
|
||||
examples:
|
||||
- |
|
||||
itnoc@109ac000 {
|
||||
compatible = "qcom,coresight-itnoc";
|
||||
reg = <0x109ac000 0x1000>;
|
||||
|
||||
clocks = <&aoss_qmp>;
|
||||
clock-names = "apb";
|
||||
|
||||
in-ports {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
port@0 {
|
||||
reg = <0>;
|
||||
tn_ic_in_tpdm_dcc: endpoint {
|
||||
remote-endpoint = <&tpdm_dcc_out_tn_ic>;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
out-ports {
|
||||
port {
|
||||
tn_ic_out_tnoc_aggr: endpoint {
|
||||
/* to Aggregator TNOC input */
|
||||
remote-endpoint = <&tn_ag_in_tn_ic>;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
...
|
||||
|
|
@ -7,8 +7,8 @@ $schema: http://devicetree.org/meta-schemas/core.yaml#
|
|||
title: Qualcomm Coresight Remote ETM(Embedded Trace Macrocell)
|
||||
|
||||
maintainers:
|
||||
- Jinlong Mao <quic_jinlmao@quicinc.com>
|
||||
- Tao Zhang <quic_taozha@quicinc.com>
|
||||
- Jinlong Mao <jinlong.mao@oss.qualcomm.com>
|
||||
- Tao Zhang <tao.zhang@oss.qualcomm.com>
|
||||
|
||||
description:
|
||||
Support for ETM trace collection on remote processor using coresight
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@ $schema: http://devicetree.org/meta-schemas/core.yaml#
|
|||
title: Qualcomm Trace Network On Chip - TNOC
|
||||
|
||||
maintainers:
|
||||
- Yuanfang Zhang <quic_yuanfang@quicinc.com>
|
||||
- Yuanfang Zhang <yuanfang.zhang@oss.qualcomm.com>
|
||||
|
||||
description: >
|
||||
The Trace Network On Chip (TNOC) is an integration hierarchy hardware
|
||||
|
|
|
|||
|
|
@ -33,8 +33,8 @@ description: |
|
|||
to sink.
|
||||
|
||||
maintainers:
|
||||
- Mao Jinlong <quic_jinlmao@quicinc.com>
|
||||
- Tao Zhang <quic_taozha@quicinc.com>
|
||||
- Mao Jinlong <jinlong.mao@oss.qualcomm.com>
|
||||
- Tao Zhang <tao.zhang@oss.qualcomm.com>
|
||||
|
||||
# Need a custom select here or 'arm,primecell' will match on lots of nodes
|
||||
select:
|
||||
|
|
|
|||
|
|
@ -19,8 +19,8 @@ description: |
|
|||
sources and send it to a TPDA for packetization, timestamping, and funneling.
|
||||
|
||||
maintainers:
|
||||
- Mao Jinlong <quic_jinlmao@quicinc.com>
|
||||
- Tao Zhang <quic_taozha@quicinc.com>
|
||||
- Mao Jinlong <jinlong.mao@oss.qualcomm.com>
|
||||
- Tao Zhang <tao.zhang@oss.qualcomm.com>
|
||||
|
||||
# Need a custom select here or 'arm,primecell' will match on lots of nodes
|
||||
select:
|
||||
|
|
|
|||
|
|
@ -0,0 +1,55 @@
|
|||
# SPDX-License-Identifier: GPL-2.0-only
|
||||
%YAML 1.2
|
||||
---
|
||||
$id: http://devicetree.org/schemas/arm/ti/ti,omap-prm-inst.yaml#
|
||||
$schema: http://devicetree.org/meta-schemas/core.yaml#
|
||||
|
||||
title: OMAP PRM instances
|
||||
|
||||
maintainers:
|
||||
- Aaro Koskinen <aaro.koskinen@iki.fi>
|
||||
- Andreas Kemnade <andreas@kemnade.info>
|
||||
- Kevin Hilman <khilman@baylibre.com>
|
||||
- Roger Quadros <rogerq@kernel.org>
|
||||
- Tony Lindgren <tony@atomide.com>
|
||||
|
||||
description:
|
||||
Power and Reset Manager is an IP block on OMAP family of devices which
|
||||
handle the power domains and their current state, and provide reset
|
||||
handling for the domains and/or separate IP blocks under the power domain
|
||||
hierarchy.
|
||||
|
||||
properties:
|
||||
compatible:
|
||||
items:
|
||||
- enum:
|
||||
- ti,am3-prm-inst
|
||||
- ti,am4-prm-inst
|
||||
- ti,omap4-prm-inst
|
||||
- ti,omap5-prm-inst
|
||||
- ti,dra7-prm-inst
|
||||
- const: ti,omap-prm-inst
|
||||
|
||||
reg:
|
||||
maxItems: 1
|
||||
|
||||
"#power-domain-cells":
|
||||
const: 0
|
||||
|
||||
"#reset-cells":
|
||||
const: 1
|
||||
|
||||
required:
|
||||
- compatible
|
||||
- reg
|
||||
|
||||
additionalProperties: false
|
||||
|
||||
examples:
|
||||
- |
|
||||
reset-controller@1b00 {
|
||||
compatible = "ti,dra7-prm-inst", "ti,omap-prm-inst";
|
||||
reg = <0x1b00 0x40>;
|
||||
#power-domain-cells = <0>;
|
||||
#reset-cells = <1>;
|
||||
};
|
||||
|
|
@ -103,7 +103,7 @@ required:
|
|||
- arm,vexpress,config-bridge
|
||||
|
||||
patternProperties:
|
||||
'clk[0-9]*$':
|
||||
'^clock-controller.*$':
|
||||
type: object
|
||||
description:
|
||||
clocks
|
||||
|
|
@ -137,7 +137,7 @@ patternProperties:
|
|||
- arm,vexpress-sysreg,func
|
||||
- "#clock-cells"
|
||||
|
||||
"^volt-.+$":
|
||||
"^regulator-.+$":
|
||||
$ref: /schemas/regulator/regulator.yaml#
|
||||
properties:
|
||||
compatible:
|
||||
|
|
@ -272,7 +272,7 @@ examples:
|
|||
compatible = "arm,vexpress,config-bus";
|
||||
arm,vexpress,config-bridge = <&v2m_sysreg>;
|
||||
|
||||
clk0 {
|
||||
clock-controller {
|
||||
compatible = "arm,vexpress-osc";
|
||||
arm,vexpress-sysreg,func = <1 0>;
|
||||
#clock-cells = <0>;
|
||||
|
|
|
|||
|
|
@ -18,26 +18,6 @@ maintainers:
|
|||
- Hans de Goede <hdegoede@redhat.com>
|
||||
- Jens Axboe <axboe@kernel.dk>
|
||||
|
||||
select:
|
||||
properties:
|
||||
compatible:
|
||||
contains:
|
||||
enum:
|
||||
- brcm,iproc-ahci
|
||||
- cavium,octeon-7130-ahci
|
||||
- hisilicon,hisi-ahci
|
||||
- ibm,476gtr-ahci
|
||||
- marvell,armada-3700-ahci
|
||||
- marvell,armada-8k-ahci
|
||||
- marvell,berlin2q-ahci
|
||||
- qcom,apq8064-ahci
|
||||
- qcom,ipq806x-ahci
|
||||
- socionext,uniphier-pro4-ahci
|
||||
- socionext,uniphier-pxs2-ahci
|
||||
- socionext,uniphier-pxs3-ahci
|
||||
required:
|
||||
- compatible
|
||||
|
||||
properties:
|
||||
compatible:
|
||||
oneOf:
|
||||
|
|
|
|||
|
|
@ -54,4 +54,7 @@ $defs:
|
|||
each port can have a Port Multiplier attached thus allowing to
|
||||
access more than one drive by means of a single SATA port.
|
||||
|
||||
port:
|
||||
$ref: /schemas/graph.yaml#/properties/port
|
||||
|
||||
...
|
||||
|
|
|
|||
|
|
@ -17,8 +17,10 @@ description: |
|
|||
|
||||
properties:
|
||||
compatible:
|
||||
enum:
|
||||
- aspeed,ast2600-ahbc
|
||||
items:
|
||||
- enum:
|
||||
- aspeed,ast2600-ahbc
|
||||
- const: syscon
|
||||
|
||||
reg:
|
||||
maxItems: 1
|
||||
|
|
@ -32,6 +34,6 @@ additionalProperties: false
|
|||
examples:
|
||||
- |
|
||||
ahbc@1e600000 {
|
||||
compatible = "aspeed,ast2600-ahbc";
|
||||
compatible = "aspeed,ast2600-ahbc", "syscon";
|
||||
reg = <0x1e600000 0x100>;
|
||||
};
|
||||
|
|
|
|||
|
|
@ -19,21 +19,29 @@ description: |
|
|||
the SDMA can access. There are no special clocks for the bus, because
|
||||
the SDMA controller itself has its interrupt and clock assignments.
|
||||
|
||||
EMI (External Memory Interface) for legacy i.MX35.
|
||||
|
||||
select:
|
||||
properties:
|
||||
compatible:
|
||||
contains:
|
||||
const: fsl,spba-bus
|
||||
enum:
|
||||
- fsl,aips
|
||||
- fsl,emi
|
||||
- fsl,spba-bus
|
||||
required:
|
||||
- compatible
|
||||
|
||||
properties:
|
||||
$nodename:
|
||||
pattern: "^spba-bus(@[0-9a-f]+)?$"
|
||||
pattern: "^((spba|emi)-bus|bus)(@[0-9a-f]+)?$"
|
||||
|
||||
compatible:
|
||||
items:
|
||||
- const: fsl,spba-bus
|
||||
- enum:
|
||||
- fsl,aips
|
||||
- fsl,emi
|
||||
- fsl,spba-bus
|
||||
- const: simple-bus
|
||||
|
||||
'#address-cells':
|
||||
|
|
|
|||
|
|
@ -54,7 +54,7 @@ properties:
|
|||
const: 1
|
||||
|
||||
"#size-cells":
|
||||
const: 1
|
||||
enum: [ 1, 2 ]
|
||||
|
||||
ranges: true
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,116 @@
|
|||
# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
|
||||
# Copyright (C) 2024-2025 Amlogic, Inc. All rights reserved
|
||||
%YAML 1.2
|
||||
---
|
||||
$id: http://devicetree.org/schemas/clock/amlogic,t7-peripherals-clkc.yaml#
|
||||
$schema: http://devicetree.org/meta-schemas/core.yaml#
|
||||
|
||||
title: Amlogic T7 Peripherals Clock Controller
|
||||
|
||||
maintainers:
|
||||
- Neil Armstrong <neil.armstrong@linaro.org>
|
||||
- Jerome Brunet <jbrunet@baylibre.com>
|
||||
- Xianwei Zhao <xianwei.zhao@amlogic.com>
|
||||
- Jian Hu <jian.hu@amlogic.com>
|
||||
|
||||
properties:
|
||||
compatible:
|
||||
const: amlogic,t7-peripherals-clkc
|
||||
|
||||
reg:
|
||||
maxItems: 1
|
||||
|
||||
'#clock-cells':
|
||||
const: 1
|
||||
|
||||
clocks:
|
||||
minItems: 14
|
||||
items:
|
||||
- description: input oscillator
|
||||
- description: input sys clk
|
||||
- description: input fixed pll
|
||||
- description: input fclk div 2
|
||||
- description: input fclk div 2p5
|
||||
- description: input fclk div 3
|
||||
- description: input fclk div 4
|
||||
- description: input fclk div 5
|
||||
- description: input fclk div 7
|
||||
- description: input hifi pll
|
||||
- description: input gp0 pll
|
||||
- description: input gp1 pll
|
||||
- description: input mpll1
|
||||
- description: input mpll2
|
||||
- description: external input rmii oscillator (optional)
|
||||
- description: input video pll0 (optional)
|
||||
- description: external pad input for rtc (optional)
|
||||
|
||||
clock-names:
|
||||
minItems: 14
|
||||
items:
|
||||
- const: xtal
|
||||
- const: sys
|
||||
- const: fix
|
||||
- const: fdiv2
|
||||
- const: fdiv2p5
|
||||
- const: fdiv3
|
||||
- const: fdiv4
|
||||
- const: fdiv5
|
||||
- const: fdiv7
|
||||
- const: hifi
|
||||
- const: gp0
|
||||
- const: gp1
|
||||
- const: mpll1
|
||||
- const: mpll2
|
||||
- const: ext_rmii
|
||||
- const: vid_pll0
|
||||
- const: ext_rtc
|
||||
|
||||
required:
|
||||
- compatible
|
||||
- '#clock-cells'
|
||||
- reg
|
||||
- clocks
|
||||
- clock-names
|
||||
|
||||
additionalProperties: false
|
||||
|
||||
examples:
|
||||
- |
|
||||
apb {
|
||||
#address-cells = <2>;
|
||||
#size-cells = <2>;
|
||||
|
||||
clkc_periphs:clock-controller@0 {
|
||||
compatible = "amlogic,t7-peripherals-clkc";
|
||||
reg = <0 0x0 0 0x1c8>;
|
||||
#clock-cells = <1>;
|
||||
clocks = <&xtal>,
|
||||
<&scmi_clk 13>,
|
||||
<&scmi_clk 16>,
|
||||
<&scmi_clk 18>,
|
||||
<&scmi_clk 20>,
|
||||
<&scmi_clk 22>,
|
||||
<&scmi_clk 24>,
|
||||
<&scmi_clk 26>,
|
||||
<&scmi_clk 28>,
|
||||
<&hifi 1>,
|
||||
<&gp0 1>,
|
||||
<&gp1 1>,
|
||||
<&mpll 4>,
|
||||
<&mpll 6>;
|
||||
clock-names = "xtal",
|
||||
"sys",
|
||||
"fix",
|
||||
"fdiv2",
|
||||
"fdiv2p5",
|
||||
"fdiv3",
|
||||
"fdiv4",
|
||||
"fdiv5",
|
||||
"fdiv7",
|
||||
"hifi",
|
||||
"gp0",
|
||||
"gp1",
|
||||
"mpll1",
|
||||
"mpll2";
|
||||
};
|
||||
};
|
||||
114
Documentation/devicetree/bindings/clock/amlogic,t7-pll-clkc.yaml
Normal file
114
Documentation/devicetree/bindings/clock/amlogic,t7-pll-clkc.yaml
Normal file
|
|
@ -0,0 +1,114 @@
|
|||
# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
|
||||
# Copyright (C) 2024-2025 Amlogic, Inc. All rights reserved
|
||||
%YAML 1.2
|
||||
---
|
||||
$id: http://devicetree.org/schemas/clock/amlogic,t7-pll-clkc.yaml#
|
||||
$schema: http://devicetree.org/meta-schemas/core.yaml#
|
||||
|
||||
title: Amlogic T7 PLL Clock Control Controller
|
||||
|
||||
maintainers:
|
||||
- Neil Armstrong <neil.armstrong@linaro.org>
|
||||
- Jerome Brunet <jbrunet@baylibre.com>
|
||||
- Jian Hu <jian.hu@amlogic.com>
|
||||
- Xianwei Zhao <xianwei.zhao@amlogic.com>
|
||||
|
||||
properties:
|
||||
compatible:
|
||||
enum:
|
||||
- amlogic,t7-gp0-pll
|
||||
- amlogic,t7-gp1-pll
|
||||
- amlogic,t7-hifi-pll
|
||||
- amlogic,t7-pcie-pll
|
||||
- amlogic,t7-mpll
|
||||
- amlogic,t7-hdmi-pll
|
||||
- amlogic,t7-mclk-pll
|
||||
|
||||
reg:
|
||||
maxItems: 1
|
||||
|
||||
'#clock-cells':
|
||||
const: 1
|
||||
|
||||
clocks:
|
||||
items:
|
||||
- description: mclk pll input oscillator gate
|
||||
- description: oscillator input clock source for mclk_sel_0
|
||||
- description: fixed input clock source for mclk_sel_0
|
||||
minItems: 1
|
||||
|
||||
clock-names:
|
||||
items:
|
||||
- const: in0
|
||||
- const: in1
|
||||
- const: in2
|
||||
minItems: 1
|
||||
|
||||
required:
|
||||
- compatible
|
||||
- '#clock-cells'
|
||||
- reg
|
||||
- clocks
|
||||
- clock-names
|
||||
|
||||
allOf:
|
||||
- if:
|
||||
properties:
|
||||
compatible:
|
||||
contains:
|
||||
const: amlogic,t7-mclk-pll
|
||||
|
||||
then:
|
||||
properties:
|
||||
clocks:
|
||||
minItems: 3
|
||||
|
||||
clock-names:
|
||||
minItems: 3
|
||||
|
||||
- if:
|
||||
properties:
|
||||
compatible:
|
||||
contains:
|
||||
enum:
|
||||
- amlogic,t7-gp0-pll
|
||||
- amlogic,t7-gp1--pll
|
||||
- amlogic,t7-hifi-pll
|
||||
- amlogic,t7-pcie-pll
|
||||
- amlogic,t7-mpll
|
||||
- amlogic,t7-hdmi-pll
|
||||
|
||||
then:
|
||||
properties:
|
||||
clocks:
|
||||
maxItems: 1
|
||||
|
||||
clock-names:
|
||||
maxItems: 1
|
||||
|
||||
additionalProperties: false
|
||||
|
||||
examples:
|
||||
- |
|
||||
apb {
|
||||
#address-cells = <2>;
|
||||
#size-cells = <2>;
|
||||
|
||||
clock-controller@8080 {
|
||||
compatible = "amlogic,t7-gp0-pll";
|
||||
reg = <0 0x8080 0 0x20>;
|
||||
clocks = <&scmi_clk 2>;
|
||||
clock-names = "in0";
|
||||
#clock-cells = <1>;
|
||||
};
|
||||
|
||||
clock-controller@8300 {
|
||||
compatible = "amlogic,t7-mclk-pll";
|
||||
reg = <0 0x8300 0 0x18>;
|
||||
clocks = <&scmi_clk 2>,
|
||||
<&xtal>,
|
||||
<&scmi_clk 31>;
|
||||
clock-names = "in0", "in1", "in2";
|
||||
#clock-cells = <1>;
|
||||
};
|
||||
};
|
||||
|
|
@ -53,6 +53,11 @@ properties:
|
|||
reg:
|
||||
maxItems: 1
|
||||
|
||||
samsung,sysreg:
|
||||
$ref: /schemas/types.yaml#/definitions/phandle
|
||||
description:
|
||||
Phandle to system registers interface.
|
||||
|
||||
required:
|
||||
- compatible
|
||||
- "#clock-cells"
|
||||
|
|
@ -185,6 +190,18 @@ allOf:
|
|||
- const: bus
|
||||
- const: ip
|
||||
|
||||
- if:
|
||||
properties:
|
||||
compatible:
|
||||
contains:
|
||||
const: google,gs101-cmu-top
|
||||
then:
|
||||
properties:
|
||||
samsung,sysreg: false
|
||||
else:
|
||||
required:
|
||||
- samsung,sysreg
|
||||
|
||||
additionalProperties: false
|
||||
|
||||
examples:
|
||||
|
|
@ -194,7 +211,7 @@ examples:
|
|||
|
||||
cmu_top: clock-controller@1e080000 {
|
||||
compatible = "google,gs101-cmu-top";
|
||||
reg = <0x1e080000 0x8000>;
|
||||
reg = <0x1e080000 0x10000>;
|
||||
#clock-cells = <1>;
|
||||
clocks = <&ext_24_5m>;
|
||||
clock-names = "oscclk";
|
||||
|
|
|
|||
|
|
@ -14,11 +14,9 @@ maintainers:
|
|||
|
||||
properties:
|
||||
compatible:
|
||||
oneOf:
|
||||
- items:
|
||||
- const: mediatek,mt7622-pciesys
|
||||
- const: syscon
|
||||
- const: mediatek,mt7629-pciesys
|
||||
enum:
|
||||
- mediatek,mt7622-pciesys
|
||||
- mediatek,mt7629-pciesys
|
||||
|
||||
reg:
|
||||
maxItems: 1
|
||||
|
|
@ -40,7 +38,7 @@ additionalProperties: false
|
|||
examples:
|
||||
- |
|
||||
clock-controller@1a100800 {
|
||||
compatible = "mediatek,mt7622-pciesys", "syscon";
|
||||
compatible = "mediatek,mt7622-pciesys";
|
||||
reg = <0x1a100800 0x1000>;
|
||||
#clock-cells = <1>;
|
||||
#reset-cells = <1>;
|
||||
|
|
|
|||
|
|
@ -17,7 +17,11 @@ description: |
|
|||
|
||||
properties:
|
||||
compatible:
|
||||
const: microchip,mpfs-ccc
|
||||
oneOf:
|
||||
- items:
|
||||
- const: microchip,pic64gx-ccc
|
||||
- const: microchip,mpfs-ccc
|
||||
- const: microchip,mpfs-ccc
|
||||
|
||||
reg:
|
||||
items:
|
||||
|
|
|
|||
|
|
@ -19,7 +19,11 @@ description: |
|
|||
|
||||
properties:
|
||||
compatible:
|
||||
const: microchip,mpfs-clkcfg
|
||||
oneOf:
|
||||
- items:
|
||||
- const: microchip,pic64gx-clkcfg
|
||||
- const: microchip,mpfs-clkcfg
|
||||
- const: microchip,mpfs-clkcfg
|
||||
|
||||
reg:
|
||||
oneOf:
|
||||
|
|
@ -69,6 +73,16 @@ required:
|
|||
- clocks
|
||||
- '#clock-cells'
|
||||
|
||||
if:
|
||||
properties:
|
||||
compatible:
|
||||
contains:
|
||||
const: microchip,pic64gx-clkcfg
|
||||
then:
|
||||
properties:
|
||||
reg:
|
||||
maxItems: 1
|
||||
|
||||
additionalProperties: false
|
||||
|
||||
examples:
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@
|
|||
$id: http://devicetree.org/schemas/clock/qcom,gcc-msm8953.yaml#
|
||||
$schema: http://devicetree.org/meta-schemas/core.yaml#
|
||||
|
||||
title: Qualcomm Global Clock & Reset Controller on MSM8953
|
||||
title: Qualcomm Global Clock & Reset Controller on MSM8937, MSM8940, MSM8953 and SDM439
|
||||
|
||||
maintainers:
|
||||
- Adam Skladowski <a_skl39@protonmail.com>
|
||||
|
|
@ -13,7 +13,7 @@ maintainers:
|
|||
|
||||
description: |
|
||||
Qualcomm global clock control module provides the clocks, resets and power
|
||||
domains on MSM8937 or MSM8953.
|
||||
domains on MSM8937, MSM8940, MSM8953 or SDM439.
|
||||
|
||||
See also::
|
||||
include/dt-bindings/clock/qcom,gcc-msm8917.h
|
||||
|
|
@ -23,7 +23,9 @@ properties:
|
|||
compatible:
|
||||
enum:
|
||||
- qcom,gcc-msm8937
|
||||
- qcom,gcc-msm8940
|
||||
- qcom,gcc-msm8953
|
||||
- qcom,gcc-sdm439
|
||||
|
||||
clocks:
|
||||
items:
|
||||
|
|
|
|||
|
|
@ -0,0 +1,63 @@
|
|||
# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
|
||||
%YAML 1.2
|
||||
---
|
||||
$id: http://devicetree.org/schemas/clock/qcom,kaanapali-gxclkctl.yaml#
|
||||
$schema: http://devicetree.org/meta-schemas/core.yaml#
|
||||
|
||||
title: Qualcomm Graphics power domain Controller on Kaanapali
|
||||
|
||||
maintainers:
|
||||
- Taniya Das <taniya.das@oss.qualcomm.com>
|
||||
|
||||
description: |
|
||||
Qualcomm GX(graphics) is a clock controller which has PLLs, clocks and
|
||||
Power domains (GDSC). This module provides the power domains control
|
||||
of gxclkctl on Qualcomm SoCs which helps the recovery of Graphics subsystem.
|
||||
|
||||
See also:
|
||||
include/dt-bindings/clock/qcom,kaanapali-gxclkctl.h
|
||||
|
||||
properties:
|
||||
compatible:
|
||||
enum:
|
||||
- qcom,kaanapali-gxclkctl
|
||||
|
||||
power-domains:
|
||||
description:
|
||||
Power domains required for the clock controller to operate
|
||||
items:
|
||||
- description: GFX power domain
|
||||
- description: GMXC power domain
|
||||
- description: GPUCC(CX) power domain
|
||||
|
||||
'#power-domain-cells':
|
||||
const: 1
|
||||
|
||||
reg:
|
||||
maxItems: 1
|
||||
|
||||
required:
|
||||
- compatible
|
||||
- reg
|
||||
- power-domains
|
||||
- '#power-domain-cells'
|
||||
|
||||
unevaluatedProperties: false
|
||||
|
||||
examples:
|
||||
- |
|
||||
#include <dt-bindings/power/qcom,rpmhpd.h>
|
||||
soc {
|
||||
#address-cells = <2>;
|
||||
#size-cells = <2>;
|
||||
|
||||
clock-controller@3d64000 {
|
||||
compatible = "qcom,kaanapali-gxclkctl";
|
||||
reg = <0x0 0x03d64000 0x0 0x6000>;
|
||||
power-domains = <&rpmhpd RPMHPD_GFX>,
|
||||
<&rpmhpd RPMHPD_GMXC>,
|
||||
<&gpucc 0>;
|
||||
#power-domain-cells = <1>;
|
||||
};
|
||||
};
|
||||
...
|
||||
|
|
@ -9,23 +9,32 @@ title: Qualcomm Camera Clock & Reset Controller on SM8450
|
|||
maintainers:
|
||||
- Vladimir Zapolskiy <vladimir.zapolskiy@linaro.org>
|
||||
- Jagadeesh Kona <quic_jkona@quicinc.com>
|
||||
- Taniya Das <taniya.das@oss.qualcomm.com>
|
||||
|
||||
description: |
|
||||
Qualcomm camera clock control module provides the clocks, resets and power
|
||||
domains on SM8450.
|
||||
|
||||
See also:
|
||||
include/dt-bindings/clock/qcom,kaanapali-camcc.h
|
||||
include/dt-bindings/clock/qcom,kaanapali-cambistmclkcc.h
|
||||
include/dt-bindings/clock/qcom,sm8450-camcc.h
|
||||
include/dt-bindings/clock/qcom,sm8550-camcc.h
|
||||
include/dt-bindings/clock/qcom,sm8650-camcc.h
|
||||
include/dt-bindings/clock/qcom,sm8750-cambistmclkcc.h
|
||||
include/dt-bindings/clock/qcom,sm8750-camcc.h
|
||||
|
||||
properties:
|
||||
compatible:
|
||||
enum:
|
||||
- qcom,kaanapali-cambistmclkcc
|
||||
- qcom,kaanapali-camcc
|
||||
- qcom,sm8450-camcc
|
||||
- qcom,sm8475-camcc
|
||||
- qcom,sm8550-camcc
|
||||
- qcom,sm8650-camcc
|
||||
- qcom,sm8750-cambistmclkcc
|
||||
- qcom,sm8750-camcc
|
||||
|
||||
clocks:
|
||||
items:
|
||||
|
|
@ -63,6 +72,8 @@ allOf:
|
|||
compatible:
|
||||
contains:
|
||||
enum:
|
||||
- qcom,kaanapali-cambistmclkcc
|
||||
- qcom,kaanapali-camcc
|
||||
- qcom,sc8280xp-camcc
|
||||
- qcom,sm8450-camcc
|
||||
- qcom,sm8550-camcc
|
||||
|
|
|
|||
|
|
@ -14,6 +14,7 @@ description: |
|
|||
domains on Qualcomm SoCs.
|
||||
|
||||
See also::
|
||||
include/dt-bindings/clock/qcom,kaanapali-gpucc.h
|
||||
include/dt-bindings/clock/qcom,milos-gpucc.h
|
||||
include/dt-bindings/clock/qcom,sar2130p-gpucc.h
|
||||
include/dt-bindings/clock/qcom,sm4450-gpucc.h
|
||||
|
|
@ -26,6 +27,7 @@ description: |
|
|||
properties:
|
||||
compatible:
|
||||
enum:
|
||||
- qcom,kaanapali-gpucc
|
||||
- qcom,milos-gpucc
|
||||
- qcom,sar2130p-gpucc
|
||||
- qcom,sm4450-gpucc
|
||||
|
|
|
|||
|
|
@ -15,6 +15,7 @@ description: |
|
|||
domains on SM8450.
|
||||
|
||||
See also:
|
||||
include/dt-bindings/clock/qcom,kaanapali-videocc.h
|
||||
include/dt-bindings/clock/qcom,sm8450-videocc.h
|
||||
include/dt-bindings/clock/qcom,sm8650-videocc.h
|
||||
include/dt-bindings/clock/qcom,sm8750-videocc.h
|
||||
|
|
@ -22,6 +23,7 @@ description: |
|
|||
properties:
|
||||
compatible:
|
||||
enum:
|
||||
- qcom,kaanapali-videocc
|
||||
- qcom,sm8450-videocc
|
||||
- qcom,sm8475-videocc
|
||||
- qcom,sm8550-videocc
|
||||
|
|
@ -61,6 +63,7 @@ allOf:
|
|||
compatible:
|
||||
contains:
|
||||
enum:
|
||||
- qcom,kaanapali-videocc
|
||||
- qcom,sm8450-videocc
|
||||
- qcom,sm8550-videocc
|
||||
- qcom,sm8750-videocc
|
||||
|
|
|
|||
|
|
@ -15,6 +15,7 @@ description: |
|
|||
domains on SM8550, SM8650, SM8750 and few other platforms.
|
||||
|
||||
See also:
|
||||
- include/dt-bindings/clock/qcom,kaanapali-dispcc.h
|
||||
- include/dt-bindings/clock/qcom,sm8550-dispcc.h
|
||||
- include/dt-bindings/clock/qcom,sm8650-dispcc.h
|
||||
- include/dt-bindings/clock/qcom,sm8750-dispcc.h
|
||||
|
|
@ -23,6 +24,7 @@ description: |
|
|||
properties:
|
||||
compatible:
|
||||
enum:
|
||||
- qcom,kaanapali-dispcc
|
||||
- qcom,sar2130p-dispcc
|
||||
- qcom,sm8550-dispcc
|
||||
- qcom,sm8650-dispcc
|
||||
|
|
|
|||
|
|
@ -62,7 +62,7 @@ properties:
|
|||
description: Output clock down spread in pcm (1/1000 of percent)
|
||||
|
||||
patternProperties:
|
||||
"^DIF[0-19]$":
|
||||
"^DIF1?[0-9]$":
|
||||
type: object
|
||||
description:
|
||||
Description of one of the outputs (DIF0..DIF19).
|
||||
|
|
@ -107,6 +107,15 @@ examples:
|
|||
DIF0 {
|
||||
renesas,slew-rate = <3000000>;
|
||||
};
|
||||
|
||||
/* Not present on 9FGV0241, used for DT validation only */
|
||||
DIF2 {
|
||||
renesas,slew-rate = <2000000>;
|
||||
};
|
||||
|
||||
DIF19 {
|
||||
renesas,slew-rate = <3000000>;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -40,6 +40,7 @@ properties:
|
|||
- samsung,exynosautov920-cmu-hsi2
|
||||
- samsung,exynosautov920-cmu-m2m
|
||||
- samsung,exynosautov920-cmu-mfc
|
||||
- samsung,exynosautov920-cmu-mfd
|
||||
- samsung,exynosautov920-cmu-misc
|
||||
- samsung,exynosautov920-cmu-peric0
|
||||
- samsung,exynosautov920-cmu-peric1
|
||||
|
|
@ -268,6 +269,24 @@ allOf:
|
|||
- const: mfc
|
||||
- const: wfd
|
||||
|
||||
- if:
|
||||
properties:
|
||||
compatible:
|
||||
contains:
|
||||
const: samsung,exynosautov920-cmu-mfd
|
||||
|
||||
then:
|
||||
properties:
|
||||
clocks:
|
||||
items:
|
||||
- description: External reference clock (38.4 MHz)
|
||||
- description: CMU_MFD NOC clock (from CMU_TOP)
|
||||
|
||||
clock-names:
|
||||
items:
|
||||
- const: oscclk
|
||||
- const: noc
|
||||
|
||||
required:
|
||||
- compatible
|
||||
- "#clock-cells"
|
||||
|
|
|
|||
|
|
@ -4,14 +4,16 @@
|
|||
$id: http://devicetree.org/schemas/clock/spacemit,k1-pll.yaml#
|
||||
$schema: http://devicetree.org/meta-schemas/core.yaml#
|
||||
|
||||
title: SpacemiT K1 PLL
|
||||
title: SpacemiT K1/K3 PLL
|
||||
|
||||
maintainers:
|
||||
- Haylen Chu <heylenay@4d2.org>
|
||||
|
||||
properties:
|
||||
compatible:
|
||||
const: spacemit,k1-pll
|
||||
enum:
|
||||
- spacemit,k1-pll
|
||||
- spacemit,k3-pll
|
||||
|
||||
reg:
|
||||
maxItems: 1
|
||||
|
|
@ -28,7 +30,8 @@ properties:
|
|||
"#clock-cells":
|
||||
const: 1
|
||||
description:
|
||||
See <dt-bindings/clock/spacemit,k1-syscon.h> for valid indices.
|
||||
For K1 SoC, check <dt-bindings/clock/spacemit,k1-syscon.h> for valid indices.
|
||||
For K3 SoC, check <dt-bindings/clock/spacemit,k3-clocks.h> for valid indices.
|
||||
|
||||
required:
|
||||
- compatible
|
||||
|
|
|
|||
|
|
@ -30,11 +30,17 @@ properties:
|
|||
interrupts:
|
||||
maxItems: 1
|
||||
|
||||
aspeed,ahbc:
|
||||
$ref: /schemas/types.yaml#/definitions/phandle
|
||||
description:
|
||||
A phandle to the AHB controller node, which must be a syscon
|
||||
|
||||
required:
|
||||
- compatible
|
||||
- reg
|
||||
- clocks
|
||||
- interrupts
|
||||
- aspeed,ahbc
|
||||
|
||||
additionalProperties: false
|
||||
|
||||
|
|
@ -46,4 +52,5 @@ examples:
|
|||
reg = <0x1e6fa000 0x400>, <0x1e710000 0x1800>;
|
||||
interrupts = <160>;
|
||||
clocks = <&syscon ASPEED_CLK_GATE_RSACLK>;
|
||||
aspeed,ahbc = <&ahbc>;
|
||||
};
|
||||
|
|
|
|||
|
|
@ -12,6 +12,14 @@ maintainers:
|
|||
properties:
|
||||
compatible:
|
||||
oneOf:
|
||||
- items:
|
||||
- const: marvell,armada-cp110-crypto
|
||||
- const: inside-secure,safexcel-eip197b
|
||||
- items:
|
||||
- enum:
|
||||
- marvell,armada-3700-crypto
|
||||
- mediatek,mt7986-crypto
|
||||
- const: inside-secure,safexcel-eip97ies
|
||||
- const: inside-secure,safexcel-eip197b
|
||||
- const: inside-secure,safexcel-eip197d
|
||||
- const: inside-secure,safexcel-eip97ies
|
||||
|
|
@ -26,9 +34,11 @@ properties:
|
|||
maxItems: 1
|
||||
|
||||
interrupts:
|
||||
minItems: 4
|
||||
maxItems: 6
|
||||
|
||||
interrupt-names:
|
||||
minItems: 4
|
||||
items:
|
||||
- const: ring0
|
||||
- const: ring1
|
||||
|
|
@ -65,6 +75,18 @@ allOf:
|
|||
minItems: 2
|
||||
required:
|
||||
- clock-names
|
||||
- if:
|
||||
properties:
|
||||
compatible:
|
||||
not:
|
||||
contains:
|
||||
const: mediatek,mt7986-crypto
|
||||
then:
|
||||
properties:
|
||||
interrupts:
|
||||
minItems: 6
|
||||
interrupt-names:
|
||||
minItems: 6
|
||||
|
||||
additionalProperties: false
|
||||
|
||||
|
|
|
|||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue