Compare commits
160 Commits
6298de0220
...
6.12-non-g
| Author | SHA1 | Date | |
|---|---|---|---|
| 1529c65700 | |||
| d33417366f | |||
| a1929690c5 | |||
| 50119fb291 | |||
| f615fff570 | |||
| 36202b6dc2 | |||
|
|
6c5e31fc75 | ||
| b33310ac0b | |||
|
|
d1351e804e | ||
|
|
3ac7bfa0f3 | ||
|
|
f6a8256ac3 | ||
|
|
3a39898f0d | ||
|
|
e3a136b7a7 | ||
|
|
00f1cf7c84 | ||
|
|
b011642f03 | ||
|
|
2b7a4256cc | ||
|
|
dd0f08b513 | ||
|
|
8e42e98420 | ||
|
|
44c081db2a | ||
|
|
3db69fdfe2 | ||
| a248214f65 | |||
| 6c26ccf6d2 | |||
| 94681aeae8 | |||
| 6f1f1abf26 | |||
| 6d44dc2607 | |||
| b6b5a56f88 | |||
| c6ca332037 | |||
| 963c5f5011 | |||
| 0c1e29cf14 | |||
| 0bb8fa8047 | |||
|
|
b9ed6706e1 | ||
| f005bd8b44 | |||
| c818120483 | |||
|
|
77f7f06729 | ||
|
|
4ba2917a97 | ||
|
|
13c3818949 | ||
| eeb92feb05 | |||
|
|
9448b31662 | ||
|
|
b8a786039a | ||
| 7530eba983 | |||
| 19be22ef9a | |||
| 0ac6a10eaa | |||
|
|
40380c8c38 | ||
|
|
31ecc0af39 | ||
|
|
9f565ad57c | ||
|
|
eb74f85a1f | ||
|
|
8cf759f651 | ||
|
|
b39c839c7f | ||
|
|
fa5772ad55 | ||
|
|
abeb79e303 | ||
|
|
234fadb4f4 | ||
|
|
201b0a8131 | ||
|
|
06ba67e49f | ||
|
|
d842dcc46b | ||
|
|
39ed1555a2 | ||
|
|
97f611dcd2 | ||
|
|
361e8f46a4 | ||
|
|
8c79250f5e | ||
|
|
eb6a966d67 | ||
|
|
afe22b10e3 | ||
|
|
bc31a9092d | ||
|
|
99260f415c | ||
|
|
2825a74d67 | ||
|
|
da694360e3 | ||
|
|
1141b0ace0 | ||
|
|
b6c886e75e | ||
|
|
8b4602a837 | ||
|
|
13da52bbd1 | ||
|
|
25d30a45af | ||
|
|
9401bac24d | ||
|
|
8daf4ee46f | ||
|
|
343e60550d | ||
|
|
091bffaf7e | ||
|
|
50699fa40a | ||
|
|
e95129a161 | ||
|
|
b75fae54c9 | ||
|
|
16e7bf68b1 | ||
|
|
06ba4c8e65 | ||
|
|
21164c1535 | ||
|
|
cc70760341 | ||
|
|
1ef6885568 | ||
|
|
b66348d05a | ||
|
|
77a33fa2f7 | ||
|
|
5de5a7b521 | ||
|
|
bd9ce31a9a | ||
|
|
17c9b0eac7 | ||
|
|
796fc53eb5 | ||
|
|
9490ce4c50 | ||
|
|
18f020320f | ||
|
|
52dedf079c | ||
|
|
e8eeb3dd61 | ||
| 99c38e06b6 | |||
|
|
d5fb30731c | ||
|
|
07ed2fb23b | ||
|
|
47ce25d2c5 | ||
|
|
dff5ed4c9a | ||
|
|
cce56005b7 | ||
|
|
16de65709b | ||
|
|
fab2cba2df | ||
|
|
ec0d70298b | ||
|
|
412e4e172e | ||
|
|
e24dd8dceb | ||
|
|
5145442e1e | ||
|
|
a5c7fa6a90 | ||
|
|
ffe7238665 | ||
|
|
ed8702254a | ||
|
|
07b857abe5 | ||
|
|
49a0bd6704 | ||
|
|
c1548709ab | ||
|
|
6aed033f53 | ||
|
|
dec2ac6aff | ||
|
|
78b406880f | ||
|
|
b70766325d | ||
|
|
65aa274d15 | ||
|
|
b715036d9c | ||
|
|
d271e4e311 | ||
|
|
a4ac4e98a5 | ||
|
|
b603d035b1 | ||
|
|
d66de87b6b | ||
|
|
9e4030a477 | ||
|
|
7a04b9bc51 | ||
|
|
0455ca103d | ||
|
|
169c7531b2 | ||
|
|
6c03bcbfb3 | ||
|
|
e6e75e0cc4 | ||
|
|
c5fc330ec4 | ||
|
|
7816b529c5 | ||
|
|
c01c8b6b14 | ||
|
|
db2ded908b | ||
|
|
fca2d7886c | ||
|
|
0af726c616 | ||
|
|
e99e8cac91 | ||
|
|
381fdbc5a5 | ||
|
|
888868a8e9 | ||
|
|
7a7de6ab35 | ||
|
|
3549513b0d | ||
|
|
30d99c8fd7 | ||
|
|
3d7de18141 | ||
|
|
6f188fca32 | ||
|
|
21041900eb | ||
|
|
fbb227f786 | ||
|
|
13f4490c9d | ||
|
|
a6c8c18494 | ||
|
|
d904038ff4 | ||
|
|
0005ac0f5e | ||
|
|
f25ac04f34 | ||
|
|
0fe7d9f01b | ||
|
|
d6fddffbe3 | ||
|
|
ce444f4987 | ||
|
|
666dc7bf47 | ||
|
|
939d7a1bbd | ||
|
|
8b643632f0 | ||
|
|
2df944f323 | ||
|
|
7ee206935e | ||
|
|
9c56b5cd14 | ||
|
|
3eb493ef4f | ||
|
|
bca7de3c9e | ||
|
|
1064acd8e0 | ||
|
|
5ca021df5f | ||
|
|
adf95f6f2d |
@@ -1 +0,0 @@
|
||||
common/.kunit
|
||||
@@ -1,9 +0,0 @@
|
||||
# SPDX-License-Identifier: GPL-2.0
|
||||
|
||||
check-private-items = true
|
||||
|
||||
disallowed-macros = [
|
||||
# The `clippy::dbg_macro` lint only works with `std::dbg!`, thus we simulate
|
||||
# it here, see: https://github.com/rust-lang/rust-clippy/issues/11303.
|
||||
{ path = "kernel::dbg", reason = "the `dbg!` macro is intended as a debugging tool", allow-invalid = true },
|
||||
]
|
||||
1
.gitignore
vendored
1
.gitignore
vendored
@@ -103,7 +103,6 @@ modules.order
|
||||
# We don't want to ignore the following even if they are dot-files
|
||||
#
|
||||
!.clang-format
|
||||
!.clippy.toml
|
||||
!.cocciconfig
|
||||
!.editorconfig
|
||||
!.get_maintainer.ignore
|
||||
|
||||
3326
BUILD.bazel
3326
BUILD.bazel
File diff suppressed because it is too large
Load Diff
@@ -1,9 +0,0 @@
|
||||
What: /sys/class/bluetooth/hci<index>/reset
|
||||
Date: 14-Jan-2025
|
||||
KernelVersion: 6.13
|
||||
Contact: linux-bluetooth@vger.kernel.org
|
||||
Description: This write-only attribute allows users to trigger the vendor reset
|
||||
method on the Bluetooth device when arbitrary data is written.
|
||||
The reset may or may not be done through the device transport
|
||||
(e.g., UART/USB), and can also be done through an out-of-band
|
||||
approach such as GPIO.
|
||||
@@ -45,21 +45,3 @@ Date: Jun 2005
|
||||
Description:
|
||||
If the module source has MODULE_VERSION, this file will contain
|
||||
the version of the source code.
|
||||
|
||||
What: /sys/module/MODULENAME/scmversion
|
||||
Date: November 2020
|
||||
KernelVersion: 5.12
|
||||
Contact: Will McVicker <willmcvicker@google.com>
|
||||
Description: This read-only file will appear if modpost was supplied with an
|
||||
SCM version for the module. It can be enabled with the config
|
||||
MODULE_SCMVERSION. The SCM version is retrieved by
|
||||
scripts/setlocalversion, which means that the presence of this
|
||||
file depends on CONFIG_LOCALVERSION_AUTO=y. When read, the SCM
|
||||
version that the module was compiled with is returned. The SCM
|
||||
version is returned in the following format::
|
||||
|
||||
===
|
||||
Git: g[a-f0-9]\+(-dirty)\?
|
||||
Mercurial: hg[a-f0-9]\+(-dirty)\?
|
||||
Subversion: svn[0-9]\+
|
||||
===
|
||||
|
||||
@@ -163,17 +163,6 @@ Description:
|
||||
will be present in sysfs. Writing 1 to this file
|
||||
will perform reset.
|
||||
|
||||
What: /sys/bus/pci/devices/.../reset_subordinate
|
||||
Date: October 2024
|
||||
Contact: linux-pci@vger.kernel.org
|
||||
Description:
|
||||
This is visible only for bridge devices. If you want to reset
|
||||
all devices attached through the subordinate bus of a specific
|
||||
bridge device, writing 1 to this will try to do it. This will
|
||||
affect all devices attached to the system through this bridge
|
||||
similiar to writing 1 to their individual "reset" file, so use
|
||||
with caution.
|
||||
|
||||
What: /sys/bus/pci/devices/.../vpd
|
||||
Date: February 2008
|
||||
Contact: Ben Hutchings <bwh@kernel.org>
|
||||
|
||||
@@ -1,16 +0,0 @@
|
||||
Android USB devices (eg. /sys/class/android_usb/android0/)
|
||||
|
||||
What: /sys/class/android_usb/<android_device>/state
|
||||
Date: Feb 2024
|
||||
Contact: Neill Kapron <nkapron@google.com>
|
||||
Description:
|
||||
The state of the USB connection. This attribute is likely
|
||||
redundant with the /sys/class/UDC/state attribute, and should
|
||||
be deprecated/removed when userspace can be refactored.
|
||||
Change on the state will also generate uevent KOBJ_CHANGE on
|
||||
the port with the new state included in the message as
|
||||
"USB_STATE=<STATE>". Note this is not the correct usage of
|
||||
uevents, but necessary due to the requirement to maintaine
|
||||
userspace API compatibility.
|
||||
|
||||
Valid values: CONNECTED, DISCONNECTED, CONFIGURED
|
||||
@@ -511,7 +511,6 @@ Description: information about CPUs heterogeneity.
|
||||
|
||||
What: /sys/devices/system/cpu/vulnerabilities
|
||||
/sys/devices/system/cpu/vulnerabilities/gather_data_sampling
|
||||
/sys/devices/system/cpu/vulnerabilities/indirect_target_selection
|
||||
/sys/devices/system/cpu/vulnerabilities/itlb_multihit
|
||||
/sys/devices/system/cpu/vulnerabilities/l1tf
|
||||
/sys/devices/system/cpu/vulnerabilities/mds
|
||||
@@ -523,7 +522,6 @@ What: /sys/devices/system/cpu/vulnerabilities
|
||||
/sys/devices/system/cpu/vulnerabilities/spectre_v1
|
||||
/sys/devices/system/cpu/vulnerabilities/spectre_v2
|
||||
/sys/devices/system/cpu/vulnerabilities/srbds
|
||||
/sys/devices/system/cpu/vulnerabilities/tsa
|
||||
/sys/devices/system/cpu/vulnerabilities/tsx_async_abort
|
||||
Date: January 2018
|
||||
Contact: Linux kernel mailing list <linux-kernel@vger.kernel.org>
|
||||
|
||||
@@ -711,7 +711,7 @@ Description: This file shows the thin provisioning type. This is one of
|
||||
|
||||
The file is read only.
|
||||
|
||||
What: /sys/class/scsi_device/*/device/unit_descriptor/physical_memory_resource_count
|
||||
What: /sys/class/scsi_device/*/device/unit_descriptor/physical_memory_resourse_count
|
||||
Date: February 2018
|
||||
Contact: Stanislav Nijnikov <stanislav.nijnikov@wdc.com>
|
||||
Description: This file shows the total physical memory resources. This is
|
||||
@@ -1559,163 +1559,3 @@ Description:
|
||||
Symbol - HCMID. This file shows the UFSHCD manufacturer id.
|
||||
The Manufacturer ID is defined by JEDEC in JEDEC-JEP106.
|
||||
The file is read only.
|
||||
|
||||
What: /sys/bus/platform/drivers/ufshcd/*/critical_health
|
||||
What: /sys/bus/platform/devices/*.ufs/critical_health
|
||||
Date: February 2025
|
||||
Contact: Avri Altman <avri.altman@wdc.com>
|
||||
Description: Report the number of times a critical health event has been
|
||||
reported by a UFS device. Further insight into the specific
|
||||
issue can be gained by reading one of: bPreEOLInfo,
|
||||
bDeviceLifeTimeEstA, bDeviceLifeTimeEstB,
|
||||
bWriteBoosterBufferLifeTimeEst, and bRPMBLifeTimeEst.
|
||||
|
||||
The file is read only.
|
||||
|
||||
What: /sys/bus/platform/drivers/ufshcd/*/clkscale_enable
|
||||
What: /sys/bus/platform/devices/*.ufs/clkscale_enable
|
||||
Date: January 2025
|
||||
Contact: Ziqi Chen <quic_ziqichen@quicinc.com>
|
||||
Description:
|
||||
This attribute shows whether the UFS clock scaling is enabled or not.
|
||||
And it can be used to enable/disable the clock scaling by writing
|
||||
1 or 0 to this attribute.
|
||||
|
||||
The attribute is read/write.
|
||||
|
||||
What: /sys/bus/platform/drivers/ufshcd/*/clkgate_enable
|
||||
What: /sys/bus/platform/devices/*.ufs/clkgate_enable
|
||||
Date: January 2025
|
||||
Contact: Ziqi Chen <quic_ziqichen@quicinc.com>
|
||||
Description:
|
||||
This attribute shows whether the UFS clock gating is enabled or not.
|
||||
And it can be used to enable/disable the clock gating by writing
|
||||
1 or 0 to this attribute.
|
||||
|
||||
The attribute is read/write.
|
||||
|
||||
What: /sys/bus/platform/drivers/ufshcd/*/clkgate_delay_ms
|
||||
What: /sys/bus/platform/devices/*.ufs/clkgate_delay_ms
|
||||
Date: January 2025
|
||||
Contact: Ziqi Chen <quic_ziqichen@quicinc.com>
|
||||
Description:
|
||||
This attribute shows and sets the number of milliseconds of idle time
|
||||
before the UFS driver starts to perform clock gating. This can
|
||||
prevent the UFS from frequently performing clock gating/ungating.
|
||||
|
||||
The attribute is read/write.
|
||||
|
||||
What: /sys/bus/platform/drivers/ufshcd/*/device_lvl_exception_count
|
||||
What: /sys/bus/platform/devices/*.ufs/device_lvl_exception_count
|
||||
Date: March 2025
|
||||
Contact: Bao D. Nguyen <quic_nguyenb@quicinc.com>
|
||||
Description:
|
||||
This attribute is applicable to ufs devices compliant to the
|
||||
JEDEC specifications version 4.1 or later. The
|
||||
device_lvl_exception_count is a counter indicating the number of
|
||||
times the device level exceptions have occurred since the last
|
||||
time this variable is reset. Writing a 0 value to this
|
||||
attribute will reset the device_lvl_exception_count. If the
|
||||
device_lvl_exception_count reads a positive value, the user
|
||||
application should read the device_lvl_exception_id attribute to
|
||||
know more information about the exception.
|
||||
|
||||
The attribute is read/write.
|
||||
|
||||
What: /sys/bus/platform/drivers/ufshcd/*/device_lvl_exception_id
|
||||
What: /sys/bus/platform/devices/*.ufs/device_lvl_exception_id
|
||||
Date: March 2025
|
||||
Contact: Bao D. Nguyen <quic_nguyenb@quicinc.com>
|
||||
Description:
|
||||
Reading the device_lvl_exception_id returns the
|
||||
qDeviceLevelExceptionID attribute of the ufs device JEDEC
|
||||
specification version 4.1. The definition of the
|
||||
qDeviceLevelExceptionID is the ufs device vendor specific
|
||||
implementation. Refer to the device manufacturer datasheet for
|
||||
more information on the meaning of the qDeviceLevelExceptionID
|
||||
attribute value.
|
||||
|
||||
The attribute is read only.
|
||||
|
||||
What: /sys/bus/platform/drivers/ufshcd/*/hid/analysis_trigger
|
||||
What: /sys/bus/platform/devices/*.ufs/hid/analysis_trigger
|
||||
Date: May 2025
|
||||
Contact: Huan Tang <tanghuan@vivo.com>
|
||||
Description:
|
||||
The host can enable or disable HID analysis operation.
|
||||
|
||||
======= =========================================
|
||||
disable disable HID analysis operation
|
||||
enable enable HID analysis operation
|
||||
======= =========================================
|
||||
|
||||
The file is write only.
|
||||
|
||||
What: /sys/bus/platform/drivers/ufshcd/*/hid/defrag_trigger
|
||||
What: /sys/bus/platform/devices/*.ufs/hid/defrag_trigger
|
||||
Date: May 2025
|
||||
Contact: Huan Tang <tanghuan@vivo.com>
|
||||
Description:
|
||||
The host can enable or disable HID defragmentation operation.
|
||||
|
||||
======= =========================================
|
||||
disable disable HID defragmentation operation
|
||||
enable enable HID defragmentation operation
|
||||
======= =========================================
|
||||
|
||||
The attribute is write only.
|
||||
|
||||
What: /sys/bus/platform/drivers/ufshcd/*/hid/fragmented_size
|
||||
What: /sys/bus/platform/devices/*.ufs/hid/fragmented_size
|
||||
Date: May 2025
|
||||
Contact: Huan Tang <tanghuan@vivo.com>
|
||||
Description:
|
||||
The total fragmented size in the device is reported through
|
||||
this attribute.
|
||||
|
||||
The attribute is read only.
|
||||
|
||||
What: /sys/bus/platform/drivers/ufshcd/*/hid/defrag_size
|
||||
What: /sys/bus/platform/devices/*.ufs/hid/defrag_size
|
||||
Date: May 2025
|
||||
Contact: Huan Tang <tanghuan@vivo.com>
|
||||
Description:
|
||||
The host sets the size to be defragmented by an HID
|
||||
defragmentation operation.
|
||||
|
||||
The attribute is read/write.
|
||||
|
||||
What: /sys/bus/platform/drivers/ufshcd/*/hid/progress_ratio
|
||||
What: /sys/bus/platform/devices/*.ufs/hid/progress_ratio
|
||||
Date: May 2025
|
||||
Contact: Huan Tang <tanghuan@vivo.com>
|
||||
Description:
|
||||
Defragmentation progress is reported by this attribute,
|
||||
indicates the ratio of the completed defragmentation size
|
||||
over the requested defragmentation size.
|
||||
|
||||
==== ============================================
|
||||
1 1%
|
||||
...
|
||||
100 100%
|
||||
==== ============================================
|
||||
|
||||
The attribute is read only.
|
||||
|
||||
What: /sys/bus/platform/drivers/ufshcd/*/hid/state
|
||||
What: /sys/bus/platform/devices/*.ufs/hid/state
|
||||
Date: May 2025
|
||||
Contact: Huan Tang <tanghuan@vivo.com>
|
||||
Description:
|
||||
The HID state is reported by this attribute.
|
||||
|
||||
==================== ===========================
|
||||
idle Idle (analysis required)
|
||||
analysis_in_progress Analysis in progress
|
||||
defrag_required Defrag required
|
||||
defrag_in_progress Defrag in progress
|
||||
defrag_completed Defrag completed
|
||||
defrag_not_required Defrag is not required
|
||||
==================== ===========================
|
||||
|
||||
The attribute is read only.
|
||||
|
||||
@@ -270,7 +270,7 @@ Description: Shows all enabled kernel features.
|
||||
inode_checksum, flexible_inline_xattr, quota_ino,
|
||||
inode_crtime, lost_found, verity, sb_checksum,
|
||||
casefold, readonly, compression, test_dummy_encryption_v2,
|
||||
atomic_write, pin_file, encrypted_casefold, linear_lookup.
|
||||
atomic_write, pin_file, encrypted_casefold.
|
||||
|
||||
What: /sys/fs/f2fs/<disk>/inject_rate
|
||||
Date: May 2016
|
||||
@@ -311,13 +311,10 @@ Description: Do background GC aggressively when set. Set to 0 by default.
|
||||
GC approach and turns SSR mode on.
|
||||
gc urgent low(2): lowers the bar of checking I/O idling in
|
||||
order to process outstanding discard commands and GC a
|
||||
little bit aggressively. always uses cost benefit GC approach,
|
||||
and will override age-threshold GC approach if ATGC is enabled
|
||||
at the same time.
|
||||
little bit aggressively. uses cost benefit GC approach.
|
||||
gc urgent mid(3): does GC forcibly in a period of given
|
||||
gc_urgent_sleep_time and executes a mid level of I/O idling check.
|
||||
always uses cost benefit GC approach, and will override
|
||||
age-threshold GC approach if ATGC is enabled at the same time.
|
||||
uses cost benefit GC approach.
|
||||
|
||||
What: /sys/fs/f2fs/<disk>/gc_urgent_sleep_time
|
||||
Date: August 2017
|
||||
@@ -734,7 +731,6 @@ Description: Support configuring fault injection type, should be
|
||||
FAULT_BLKADDR_VALIDITY 0x000040000
|
||||
FAULT_BLKADDR_CONSISTENCE 0x000080000
|
||||
FAULT_NO_SEGMENT 0x000100000
|
||||
FAULT_INCONSISTENT_FOOTER 0x000200000
|
||||
=========================== ===========
|
||||
|
||||
What: /sys/fs/f2fs/<disk>/discard_io_aware_gran
|
||||
@@ -823,63 +819,3 @@ Description: It controls the valid block ratio threshold not to trigger excessiv
|
||||
for zoned deivces. The initial value of it is 95(%). F2FS will stop the
|
||||
background GC thread from intiating GC for sections having valid blocks
|
||||
exceeding the ratio.
|
||||
|
||||
What: /sys/fs/f2fs/<disk>/max_read_extent_count
|
||||
Date: November 2024
|
||||
Contact: "Chao Yu" <chao@kernel.org>
|
||||
Description: It controls max read extent count for per-inode, the value of threshold
|
||||
is 10240 by default.
|
||||
|
||||
What: /sys/fs/f2fs/tuning/reclaim_caches_kb
|
||||
Date: February 2025
|
||||
Contact: "Jaegeuk Kim" <jaegeuk@kernel.org>
|
||||
Description: It reclaims the given KBs of file-backed pages registered by
|
||||
ioctl(F2FS_IOC_DONATE_RANGE).
|
||||
For example, writing N tries to drop N KBs spaces in LRU.
|
||||
|
||||
What: /sys/fs/f2fs/<disk>/carve_out
|
||||
Date: March 2025
|
||||
Contact: "Daeho Jeong" <daehojeong@google.com>
|
||||
Description: For several zoned storage devices, vendors will provide extra space which
|
||||
was used for device level GC than specs and F2FS can use this space for
|
||||
filesystem level GC. To do that, we can reserve the space using
|
||||
reserved_blocks. However, it is not enough, since this extra space should
|
||||
not be shown to users. So, with this new sysfs node, we can hide the space
|
||||
by substracting reserved_blocks from total bytes.
|
||||
|
||||
What: /sys/fs/f2fs/<disk>/encoding_flags
|
||||
Date: April 2025
|
||||
Contact: "Chao Yu" <chao@kernel.org>
|
||||
Description: This is a read-only entry to show the value of sb.s_encoding_flags, the
|
||||
value is hexadecimal.
|
||||
|
||||
============================ ==========
|
||||
Flag_Name Flag_Value
|
||||
============================ ==========
|
||||
SB_ENC_STRICT_MODE_FL 0x00000001
|
||||
SB_ENC_NO_COMPAT_FALLBACK_FL 0x00000002
|
||||
============================ ==========
|
||||
|
||||
What: /sys/fs/f2fs/<disk>/reserved_pin_section
|
||||
Date: June 2025
|
||||
Contact: "Chao Yu" <chao@kernel.org>
|
||||
Description: This threshold is used to control triggering garbage collection while
|
||||
fallocating on pinned file, so, it can guarantee there is enough free
|
||||
reserved section before preallocating on pinned file.
|
||||
By default, the value is ovp_sections, especially, for zoned ufs, the
|
||||
value is 1.
|
||||
|
||||
What: /sys/fs/f2fs/<disk>/effective_lookup_mode
|
||||
Date: August 2025
|
||||
Contact: "Daniel Lee" <chullee@google.com>
|
||||
Description:
|
||||
This is a read-only entry to show the effective directory lookup mode
|
||||
F2FS is currently using for casefolded directories.
|
||||
This considers both the "lookup_mode" mount option and the on-disk
|
||||
encoding flag, SB_ENC_NO_COMPAT_FALLBACK_FL.
|
||||
|
||||
Possible values are:
|
||||
- "perf": Hash-only lookup.
|
||||
- "compat": Hash-based lookup with a linear search fallback enabled
|
||||
- "auto:perf": lookup_mode is auto and fallback is disabled on-disk
|
||||
- "auto:compat": lookup_mode is auto and fallback is enabled on-disk
|
||||
|
||||
@@ -1,27 +0,0 @@
|
||||
What: /sys/fs/fuse/features/fuse_bpf
|
||||
Date: December 2022
|
||||
Contact: Paul Lawrence <paullawrence@google.com>
|
||||
Description:
|
||||
Read-only file that contains the word 'supported' if fuse-bpf is
|
||||
supported, does not exist otherwise
|
||||
|
||||
What: /sys/fs/fuse/features/fuse_passthrough
|
||||
Date: February 2025
|
||||
Contact: Daniel Rosenberg <drosen@google.com>
|
||||
Description:
|
||||
Read-only file that contains the word 'supported' if fuse
|
||||
passthrough with Android modifications is supported, does not
|
||||
exist otherwise
|
||||
|
||||
What: /sys/fs/fuse/bpf_prog_type_fuse
|
||||
Date: December 2022
|
||||
Contact: Paul Lawrence <paullawrence@google.com>
|
||||
Description:
|
||||
bpf_prog_type_fuse defines the program type of bpf programs that
|
||||
may be passed to fuse-bpf. For upstream bpf program types, this
|
||||
is a constant defined in a contiguous array of constants.
|
||||
bpf_prog_type_fuse is appended to the end of the list, so it may
|
||||
change and therefore its value must be read from this file.
|
||||
|
||||
Contents is ASCII decimal representation of bpf_prog_type_fuse
|
||||
|
||||
@@ -1,70 +0,0 @@
|
||||
What: /sys/fs/incremental-fs/features/corefs
|
||||
Date: 2019
|
||||
Contact: Paul Lawrence <paullawrence@google.com>
|
||||
Description: Reads 'supported'. Always present.
|
||||
|
||||
What: /sys/fs/incremental-fs/features/v2
|
||||
Date: April 2021
|
||||
Contact: Paul Lawrence <paullawrence@google.com>
|
||||
Description: Reads 'supported'. Present if all v2 features of incfs are
|
||||
supported.
|
||||
|
||||
What: /sys/fs/incremental-fs/features/zstd
|
||||
Date: April 2021
|
||||
Contact: Paul Lawrence <paullawrence@google.com>
|
||||
Description: Reads 'supported'. Present if zstd compression is supported
|
||||
for data blocks.
|
||||
|
||||
What: /sys/fs/incremental-fs/features/bugfix_throttling
|
||||
Date: January 2023
|
||||
Contact: Paul Lawrence <paullawrence@google.com>
|
||||
Description: Reads 'supported'. Present if the throttling lock bug is fixed
|
||||
https://android-review.git.corp.google.com/c/kernel/common/+/2381827
|
||||
|
||||
What: /sys/fs/incremental-fs/instances/[name]
|
||||
Date: April 2021
|
||||
Contact: Paul Lawrence <paullawrence@google.com>
|
||||
Description: Folder created when incfs is mounted with the sysfs_name=[name]
|
||||
option. If this option is used, the following values are created
|
||||
in this folder.
|
||||
|
||||
What: /sys/fs/incremental-fs/instances/[name]/reads_delayed_min
|
||||
Date: April 2021
|
||||
Contact: Paul Lawrence <paullawrence@google.com>
|
||||
Description: Returns a count of the number of reads that were delayed as a
|
||||
result of the per UID read timeouts min time setting.
|
||||
|
||||
What: /sys/fs/incremental-fs/instances/[name]/reads_delayed_min_us
|
||||
Date: April 2021
|
||||
Contact: Paul Lawrence <paullawrence@google.com>
|
||||
Description: Returns total delay time for all files since first mount as a
|
||||
result of the per UID read timeouts min time setting.
|
||||
|
||||
What: /sys/fs/incremental-fs/instances/[name]/reads_delayed_pending
|
||||
Date: April 2021
|
||||
Contact: Paul Lawrence <paullawrence@google.com>
|
||||
Description: Returns a count of the number of reads that were delayed as a
|
||||
result of waiting for a pending read.
|
||||
|
||||
What: /sys/fs/incremental-fs/instances/[name]/reads_delayed_pending_us
|
||||
Date: April 2021
|
||||
Contact: Paul Lawrence <paullawrence@google.com>
|
||||
Description: Returns total delay time for all files since first mount as a
|
||||
result of waiting for a pending read.
|
||||
|
||||
What: /sys/fs/incremental-fs/instances/[name]/reads_failed_hash_verification
|
||||
Date: April 2021
|
||||
Contact: Paul Lawrence <paullawrence@google.com>
|
||||
Description: Returns number of reads that failed because of hash verification
|
||||
failures.
|
||||
|
||||
What: /sys/fs/incremental-fs/instances/[name]/reads_failed_other
|
||||
Date: April 2021
|
||||
Contact: Paul Lawrence <paullawrence@google.com>
|
||||
Description: Returns number of reads that failed for reasons other than
|
||||
timing out or hash failures.
|
||||
|
||||
What: /sys/fs/incremental-fs/instances/[name]/reads_failed_timed_out
|
||||
Date: April 2021
|
||||
Contact: Paul Lawrence <paullawrence@google.com>
|
||||
Description: Returns number of reads that timed out.
|
||||
@@ -1,7 +0,0 @@
|
||||
What: /sys/kernel/dma_heap/total_pools_kb
|
||||
Date: Feb 2021
|
||||
KernelVersion: 5.10
|
||||
Contact: T.J. Mercier <tjmercier@google.com>
|
||||
Description:
|
||||
The total_pools_kb file is read-only and specifies how much
|
||||
memory in KiB is allocated to DMA-BUF heap pools.
|
||||
@@ -1,16 +0,0 @@
|
||||
What: /sys/kernel/wakeup_reasons/last_resume_reason
|
||||
Date: February 2014
|
||||
Contact: Ruchi Kandoi <kandoiruchi@google.com>
|
||||
Description:
|
||||
The /sys/kernel/wakeup_reasons/last_resume_reason is
|
||||
used to report wakeup reasons after system exited suspend.
|
||||
|
||||
What: /sys/kernel/wakeup_reasons/last_suspend_time
|
||||
Date: March 2015
|
||||
Contact: jinqian <jinqian@google.com>
|
||||
Description:
|
||||
The /sys/kernel/wakeup_reasons/last_suspend_time is
|
||||
used to report time spent in last suspend cycle. It contains
|
||||
two numbers (in seconds) separated by space. First number is
|
||||
the time spent in suspend and resume processes. Second number
|
||||
is the time spent in sleep state.
|
||||
@@ -249,7 +249,7 @@ ticks this GP)" indicates that this CPU has not taken any scheduling-clock
|
||||
interrupts during the current stalled grace period.
|
||||
|
||||
The "idle=" portion of the message prints the dyntick-idle state.
|
||||
The hex number before the first "/" is the low-order 16 bits of the
|
||||
The hex number before the first "/" is the low-order 12 bits of the
|
||||
dynticks counter, which will have an even-numbered value if the CPU
|
||||
is in dyntick-idle mode and an odd-numbered value otherwise. The hex
|
||||
number between the two "/"s is the value of the nesting, which will be
|
||||
|
||||
@@ -971,16 +971,6 @@ unfortunately any spinlock in a ``SLAB_TYPESAFE_BY_RCU`` object must be
|
||||
initialized after each and every call to kmem_cache_alloc(), which renders
|
||||
reference-free spinlock acquisition completely unsafe. Therefore, when
|
||||
using ``SLAB_TYPESAFE_BY_RCU``, make proper use of a reference counter.
|
||||
If using refcount_t, the specialized refcount_{add|inc}_not_zero_acquire()
|
||||
and refcount_set_release() APIs should be used to ensure correct operation
|
||||
ordering when verifying object identity and when initializing newly
|
||||
allocated objects. Acquire fence in refcount_{add|inc}_not_zero_acquire()
|
||||
ensures that identity checks happen *after* reference count is taken.
|
||||
refcount_set_release() should be called after a newly allocated object is
|
||||
fully initialized and release fence ensures that new values are visible
|
||||
*before* refcount can be successfully taken by other users. Once
|
||||
refcount_set_release() is called, the object should be considered visible
|
||||
by other tasks.
|
||||
(Those willing to initialize their locks in a kmem_cache constructor
|
||||
may also use locking, including cache-friendly sequence locking.)
|
||||
|
||||
|
||||
@@ -1,14 +0,0 @@
|
||||
.. SPDX-License-Identifier: GPL-2.0-only
|
||||
|
||||
===============================
|
||||
Qualcomm Cloud AI 80 (AIC080)
|
||||
===============================
|
||||
|
||||
Overview
|
||||
========
|
||||
|
||||
The Qualcomm Cloud AI 80/AIC080 family of products are a derivative of AIC100.
|
||||
The number of NSPs and clock rates are reduced to fit within resource
|
||||
constrained solutions. The PCIe Product ID is 0xa080.
|
||||
|
||||
As a derivative product, all AIC100 documentation applies.
|
||||
@@ -10,5 +10,4 @@ accelerator cards.
|
||||
.. toctree::
|
||||
|
||||
qaic
|
||||
aic080
|
||||
aic100
|
||||
|
||||
@@ -47,8 +47,6 @@ The list of possible return codes:
|
||||
-ENOMEM zram was not able to allocate enough memory to fulfil your
|
||||
needs.
|
||||
-EINVAL invalid input has been provided.
|
||||
-EAGAIN re-try operation later (e.g. when attempting to run recompress
|
||||
and writeback simultaneously).
|
||||
======== =============================================================
|
||||
|
||||
If you use 'echo', the returned value is set by the 'echo' utility,
|
||||
|
||||
@@ -2954,7 +2954,7 @@ following two functions.
|
||||
a queue (device) has been associated with the bio and
|
||||
before submission.
|
||||
|
||||
wbc_account_cgroup_owner(@wbc, @folio, @bytes)
|
||||
wbc_account_cgroup_owner(@wbc, @page, @bytes)
|
||||
Should be called for each data segment being written out.
|
||||
While this function doesn't care exactly when it's called
|
||||
during the writeback session, it's the easiest and most
|
||||
|
||||
@@ -142,15 +142,8 @@ root_hash_sig_key_desc <key_description>
|
||||
already in the secondary trusted keyring.
|
||||
|
||||
try_verify_in_tasklet
|
||||
If verity hashes are in cache and the IO size does not exceed the limit,
|
||||
verify data blocks in bottom half instead of workqueue. This option can
|
||||
reduce IO latency. The size limits can be configured via
|
||||
/sys/module/dm_verity/parameters/use_bh_bytes. The four parameters
|
||||
correspond to limits for IOPRIO_CLASS_NONE, IOPRIO_CLASS_RT,
|
||||
IOPRIO_CLASS_BE and IOPRIO_CLASS_IDLE in turn.
|
||||
For example:
|
||||
<none>,<rt>,<be>,<idle>
|
||||
4096,4096,4096,4096
|
||||
If verity hashes are in cache, verify data blocks in kernel tasklet instead
|
||||
of workqueue. This option can reduce IO latency.
|
||||
|
||||
Theory of operation
|
||||
===================
|
||||
|
||||
@@ -22,4 +22,3 @@ are configurable at compile, boot or run time.
|
||||
srso
|
||||
gather_data_sampling
|
||||
reg-file-data-sampling
|
||||
indirect-target-selection
|
||||
|
||||
@@ -1,168 +0,0 @@
|
||||
.. SPDX-License-Identifier: GPL-2.0
|
||||
|
||||
Indirect Target Selection (ITS)
|
||||
===============================
|
||||
|
||||
ITS is a vulnerability in some Intel CPUs that support Enhanced IBRS and were
|
||||
released before Alder Lake. ITS may allow an attacker to control the prediction
|
||||
of indirect branches and RETs located in the lower half of a cacheline.
|
||||
|
||||
ITS is assigned CVE-2024-28956 with a CVSS score of 4.7 (Medium).
|
||||
|
||||
Scope of Impact
|
||||
---------------
|
||||
- **eIBRS Guest/Host Isolation**: Indirect branches in KVM/kernel may still be
|
||||
predicted with unintended target corresponding to a branch in the guest.
|
||||
|
||||
- **Intra-Mode BTI**: In-kernel training such as through cBPF or other native
|
||||
gadgets.
|
||||
|
||||
- **Indirect Branch Prediction Barrier (IBPB)**: After an IBPB, indirect
|
||||
branches may still be predicted with targets corresponding to direct branches
|
||||
executed prior to the IBPB. This is fixed by the IPU 2025.1 microcode, which
|
||||
should be available via distro updates. Alternatively microcode can be
|
||||
obtained from Intel's github repository [#f1]_.
|
||||
|
||||
Affected CPUs
|
||||
-------------
|
||||
Below is the list of ITS affected CPUs [#f2]_ [#f3]_:
|
||||
|
||||
======================== ============ ==================== ===============
|
||||
Common name Family_Model eIBRS Intra-mode BTI
|
||||
Guest/Host Isolation
|
||||
======================== ============ ==================== ===============
|
||||
SKYLAKE_X (step >= 6) 06_55H Affected Affected
|
||||
ICELAKE_X 06_6AH Not affected Affected
|
||||
ICELAKE_D 06_6CH Not affected Affected
|
||||
ICELAKE_L 06_7EH Not affected Affected
|
||||
TIGERLAKE_L 06_8CH Not affected Affected
|
||||
TIGERLAKE 06_8DH Not affected Affected
|
||||
KABYLAKE_L (step >= 12) 06_8EH Affected Affected
|
||||
KABYLAKE (step >= 13) 06_9EH Affected Affected
|
||||
COMETLAKE 06_A5H Affected Affected
|
||||
COMETLAKE_L 06_A6H Affected Affected
|
||||
ROCKETLAKE 06_A7H Not affected Affected
|
||||
======================== ============ ==================== ===============
|
||||
|
||||
- All affected CPUs enumerate Enhanced IBRS feature.
|
||||
- IBPB isolation is affected on all ITS affected CPUs, and need a microcode
|
||||
update for mitigation.
|
||||
- None of the affected CPUs enumerate BHI_CTRL which was introduced in Golden
|
||||
Cove (Alder Lake and Sapphire Rapids). This can help guests to determine the
|
||||
host's affected status.
|
||||
- Intel Atom CPUs are not affected by ITS.
|
||||
|
||||
Mitigation
|
||||
----------
|
||||
As only the indirect branches and RETs that have their last byte of instruction
|
||||
in the lower half of the cacheline are vulnerable to ITS, the basic idea behind
|
||||
the mitigation is to not allow indirect branches in the lower half.
|
||||
|
||||
This is achieved by relying on existing retpoline support in the kernel, and in
|
||||
compilers. ITS-vulnerable retpoline sites are runtime patched to point to newly
|
||||
added ITS-safe thunks. These safe thunks consists of indirect branch in the
|
||||
second half of the cacheline. Not all retpoline sites are patched to thunks, if
|
||||
a retpoline site is evaluated to be ITS-safe, it is replaced with an inline
|
||||
indirect branch.
|
||||
|
||||
Dynamic thunks
|
||||
~~~~~~~~~~~~~~
|
||||
From a dynamically allocated pool of safe-thunks, each vulnerable site is
|
||||
replaced with a new thunk, such that they get a unique address. This could
|
||||
improve the branch prediction accuracy. Also, it is a defense-in-depth measure
|
||||
against aliasing.
|
||||
|
||||
Note, for simplicity, indirect branches in eBPF programs are always replaced
|
||||
with a jump to a static thunk in __x86_indirect_its_thunk_array. If required,
|
||||
in future this can be changed to use dynamic thunks.
|
||||
|
||||
All vulnerable RETs are replaced with a static thunk, they do not use dynamic
|
||||
thunks. This is because RETs get their prediction from RSB mostly that does not
|
||||
depend on source address. RETs that underflow RSB may benefit from dynamic
|
||||
thunks. But, RETs significantly outnumber indirect branches, and any benefit
|
||||
from a unique source address could be outweighed by the increased icache
|
||||
footprint and iTLB pressure.
|
||||
|
||||
Retpoline
|
||||
~~~~~~~~~
|
||||
Retpoline sequence also mitigates ITS-unsafe indirect branches. For this
|
||||
reason, when retpoline is enabled, ITS mitigation only relocates the RETs to
|
||||
safe thunks. Unless user requested the RSB-stuffing mitigation.
|
||||
|
||||
RSB Stuffing
|
||||
~~~~~~~~~~~~
|
||||
RSB-stuffing via Call Depth Tracking is a mitigation for Retbleed RSB-underflow
|
||||
attacks. And it also mitigates RETs that are vulnerable to ITS.
|
||||
|
||||
Mitigation in guests
|
||||
^^^^^^^^^^^^^^^^^^^^
|
||||
All guests deploy ITS mitigation by default, irrespective of eIBRS enumeration
|
||||
and Family/Model of the guest. This is because eIBRS feature could be hidden
|
||||
from a guest. One exception to this is when a guest enumerates BHI_DIS_S, which
|
||||
indicates that the guest is running on an unaffected host.
|
||||
|
||||
To prevent guests from unnecessarily deploying the mitigation on unaffected
|
||||
platforms, Intel has defined ITS_NO bit(62) in MSR IA32_ARCH_CAPABILITIES. When
|
||||
a guest sees this bit set, it should not enumerate the ITS bug. Note, this bit
|
||||
is not set by any hardware, but is **intended for VMMs to synthesize** it for
|
||||
guests as per the host's affected status.
|
||||
|
||||
Mitigation options
|
||||
^^^^^^^^^^^^^^^^^^
|
||||
The ITS mitigation can be controlled using the "indirect_target_selection"
|
||||
kernel parameter. The available options are:
|
||||
|
||||
======== ===================================================================
|
||||
on (default) Deploy the "Aligned branch/return thunks" mitigation.
|
||||
If spectre_v2 mitigation enables retpoline, aligned-thunks are only
|
||||
deployed for the affected RET instructions. Retpoline mitigates
|
||||
indirect branches.
|
||||
|
||||
off Disable ITS mitigation.
|
||||
|
||||
vmexit Equivalent to "=on" if the CPU is affected by guest/host isolation
|
||||
part of ITS. Otherwise, mitigation is not deployed. This option is
|
||||
useful when host userspace is not in the threat model, and only
|
||||
attacks from guest to host are considered.
|
||||
|
||||
stuff Deploy RSB-fill mitigation when retpoline is also deployed.
|
||||
Otherwise, deploy the default mitigation. When retpoline mitigation
|
||||
is enabled, RSB-stuffing via Call-Depth-Tracking also mitigates
|
||||
ITS.
|
||||
|
||||
force Force the ITS bug and deploy the default mitigation.
|
||||
======== ===================================================================
|
||||
|
||||
Sysfs reporting
|
||||
---------------
|
||||
|
||||
The sysfs file showing ITS mitigation status is:
|
||||
|
||||
/sys/devices/system/cpu/vulnerabilities/indirect_target_selection
|
||||
|
||||
Note, microcode mitigation status is not reported in this file.
|
||||
|
||||
The possible values in this file are:
|
||||
|
||||
.. list-table::
|
||||
|
||||
* - Not affected
|
||||
- The processor is not vulnerable.
|
||||
* - Vulnerable
|
||||
- System is vulnerable and no mitigation has been applied.
|
||||
* - Vulnerable, KVM: Not affected
|
||||
- System is vulnerable to intra-mode BTI, but not affected by eIBRS
|
||||
guest/host isolation.
|
||||
* - Mitigation: Aligned branch/return thunks
|
||||
- The mitigation is enabled, affected indirect branches and RETs are
|
||||
relocated to safe thunks.
|
||||
* - Mitigation: Retpolines, Stuffing RSB
|
||||
- The mitigation is enabled using retpoline and RSB stuffing.
|
||||
|
||||
References
|
||||
----------
|
||||
.. [#f1] Microcode repository - https://github.com/intel/Intel-Linux-Processor-Microcode-Data-Files
|
||||
|
||||
.. [#f2] Affected Processors list - https://www.intel.com/content/www/us/en/developer/topic-technology/software-security-guidance/processors-affected-consolidated-product-cpu-model.html
|
||||
|
||||
.. [#f3] Affected Processors list (machine readable) - https://github.com/intel/Intel-affected-processor-list
|
||||
@@ -157,7 +157,9 @@ This is achieved by using the otherwise unused and obsolete VERW instruction in
|
||||
combination with a microcode update. The microcode clears the affected CPU
|
||||
buffers when the VERW instruction is executed.
|
||||
|
||||
Kernel does the buffer clearing with x86_clear_cpu_buffers().
|
||||
Kernel reuses the MDS function to invoke the buffer clearing:
|
||||
|
||||
mds_clear_cpu_buffers()
|
||||
|
||||
On MDS affected CPUs, the kernel already invokes CPU buffer clear on
|
||||
kernel/userspace, hypervisor/guest and C-state (idle) transitions. No
|
||||
|
||||
@@ -449,9 +449,6 @@
|
||||
arm64.nomops [ARM64] Unconditionally disable Memory Copy and Memory
|
||||
Set instructions support
|
||||
|
||||
arm64.nompam [ARM64] Unconditionally disable Memory Partitioning And
|
||||
Monitoring support
|
||||
|
||||
arm64.nomte [ARM64] Unconditionally disable Memory Tagging Extension
|
||||
support
|
||||
|
||||
@@ -1136,10 +1133,6 @@
|
||||
can be useful when debugging issues that require an SLB
|
||||
miss to occur.
|
||||
|
||||
disable_dma32= [KNL]
|
||||
Dynamically disable ZONE_DMA32 on kernels compiled with
|
||||
CONFIG_ZONE_DMA32=y.
|
||||
|
||||
disable= [IPV6]
|
||||
See Documentation/networking/ipv6.rst.
|
||||
|
||||
@@ -1541,10 +1534,6 @@
|
||||
Format: { "fix" }
|
||||
Permit 'security.evm' to be updated regardless of
|
||||
current integrity status.
|
||||
export_pmu_events
|
||||
[KNL,ARM64] Sets the PMU export bit (PMCR_EL0.X), which enables
|
||||
the exporting of events over an IMPLEMENTATION DEFINED PMU event
|
||||
export bus to another device.
|
||||
|
||||
early_page_ext [KNL,EARLY] Enforces page_ext initialization to earlier
|
||||
stages so cover more early boot allocations.
|
||||
@@ -1919,10 +1908,6 @@
|
||||
If specified, z/VM IUCV HVC accepts connections
|
||||
from listed z/VM user IDs only.
|
||||
|
||||
hvc_dcc.enable= [ARM,ARM64] Enable DCC driver at runtime. For GKI,
|
||||
disabled at runtime by default to prevent
|
||||
crashes in devices which do not support DCC.
|
||||
|
||||
hv_nopvspin [X86,HYPER_V,EARLY]
|
||||
Disables the paravirt spinlock optimizations
|
||||
which allow the hypervisor to 'idle' the guest
|
||||
@@ -2164,23 +2149,6 @@
|
||||
different crypto accelerators. This option can be used
|
||||
to achieve best performance for particular HW.
|
||||
|
||||
indirect_target_selection= [X86,Intel] Mitigation control for Indirect
|
||||
Target Selection(ITS) bug in Intel CPUs. Updated
|
||||
microcode is also required for a fix in IBPB.
|
||||
|
||||
on: Enable mitigation (default).
|
||||
off: Disable mitigation.
|
||||
force: Force the ITS bug and deploy default
|
||||
mitigation.
|
||||
vmexit: Only deploy mitigation if CPU is affected by
|
||||
guest/host isolation part of ITS.
|
||||
stuff: Deploy RSB-fill mitigation when retpoline is
|
||||
also deployed. Otherwise, deploy the default
|
||||
mitigation.
|
||||
|
||||
For details see:
|
||||
Documentation/admin-guide/hw-vuln/indirect-target-selection.rst
|
||||
|
||||
init= [KNL]
|
||||
Format: <full_path>
|
||||
Run specified binary instead of /sbin/init as init
|
||||
@@ -2679,7 +2647,7 @@
|
||||
CONFIG_KUNIT to be set to be fully enabled. The
|
||||
default value can be overridden via
|
||||
KUNIT_DEFAULT_ENABLED.
|
||||
Default is 0 (disabled)
|
||||
Default is 1 (enabled)
|
||||
|
||||
kvm.ignore_msrs=[KVM] Ignore guest accesses to unhandled MSRs.
|
||||
Default is 0 (don't ignore, but inject #GP)
|
||||
@@ -2763,11 +2731,6 @@
|
||||
(enabled). Disable by KVM if hardware lacks support
|
||||
for NPT.
|
||||
|
||||
kvm-arm.hyp_lm_size_mb=
|
||||
[KVM,ARM,EARLY] Maximum amount of contiguous memory mappable in
|
||||
the pKVM hypervisor linear map, in MB. Any attempt to map more
|
||||
memory than this into pKVM stage-1 at run-time may be fatal.
|
||||
|
||||
kvm-arm.mode=
|
||||
[KVM,ARM,EARLY] Select one of KVM/arm64's modes of
|
||||
operation.
|
||||
@@ -2778,9 +2741,7 @@
|
||||
protected guests.
|
||||
|
||||
protected: nVHE-based mode with support for guests whose
|
||||
state is kept private from the host. See
|
||||
Documentation/virt/kvm/arm/pkvm.rst for more
|
||||
information about this mode of operation.
|
||||
state is kept private from the host.
|
||||
|
||||
nested: VHE-based mode with support for nested
|
||||
virtualization. Requires at least ARMv8.3
|
||||
@@ -2791,17 +2752,6 @@
|
||||
for the host. "nested" is experimental and should be
|
||||
used with extreme caution.
|
||||
|
||||
kvm-arm.protected_modules=
|
||||
[KVM,ARM] List of pKVM modules to load before the host
|
||||
is deprevileged.
|
||||
|
||||
This option only applies when booting with
|
||||
kvm-arm.mode=protected.
|
||||
|
||||
kvm-arm.protected_prefault=
|
||||
[KVM,ARM] Minimum order for each protected VM fault.
|
||||
This range from 0 (default) to 9.
|
||||
|
||||
kvm-arm.vgic_v3_group0_trap=
|
||||
[KVM,ARM,EARLY] Trap guest accesses to GICv3 group-0
|
||||
system registers
|
||||
@@ -3078,8 +3028,6 @@
|
||||
* max_sec_lba48: Set or clear transfer size limit to
|
||||
65535 sectors.
|
||||
|
||||
* external: Mark port as external (hotplug-capable).
|
||||
|
||||
* [no]lpm: Enable or disable link power management.
|
||||
|
||||
* [no]setxfer: Indicate if transfer speed mode setting
|
||||
@@ -3560,7 +3508,6 @@
|
||||
expose users to several CPU vulnerabilities.
|
||||
Equivalent to: if nokaslr then kpti=0 [ARM64]
|
||||
gather_data_sampling=off [X86]
|
||||
indirect_target_selection=off [X86]
|
||||
kvm.nx_huge_pages=off [X86]
|
||||
l1tf=off [X86]
|
||||
mds=off [X86]
|
||||
@@ -4759,11 +4706,6 @@
|
||||
|
||||
pcmv= [HW,PCMCIA] BadgePAD 4
|
||||
|
||||
pcp_thp_order= [MM]
|
||||
Specify the order of the pcp used by THP.
|
||||
The specified value must be no greater than HPAGE_PMD_ORDER
|
||||
(default) and greater than 3 (PAGE_ALLOC_COSTLY_ORDER).
|
||||
|
||||
pd_ignore_unused
|
||||
[PM]
|
||||
Keep all power-domains already enabled by bootloader on,
|
||||
@@ -4897,14 +4839,6 @@
|
||||
Format: <bool>
|
||||
default: 0 (auto_verbose is enabled)
|
||||
|
||||
printk.debug_non_panic_cpus=
|
||||
Allows storing messages from non-panic CPUs into
|
||||
the printk log buffer during panic(). They are
|
||||
flushed to consoles by the panic-CPU on
|
||||
a best-effort basis.
|
||||
Format: <bool> (1/Y/y=enable, 0/N/n=disable)
|
||||
Default: disabled
|
||||
|
||||
printk.devkmsg={on,off,ratelimit}
|
||||
Control writing to /dev/kmsg.
|
||||
on - unlimited logging to /dev/kmsg from userspace
|
||||
@@ -5568,21 +5502,6 @@
|
||||
rcutorture.verbose= [KNL]
|
||||
Enable additional printk() statements.
|
||||
|
||||
rcupdate.rcu_boot_end_delay= [KNL]
|
||||
Minimum time in milliseconds from the start of boot
|
||||
that must elapse before the boot sequence can be marked
|
||||
complete from RCU's perspective, after which RCU's
|
||||
behavior becomes more relaxed. The default value is also
|
||||
configurable via CONFIG_RCU_BOOT_END_DELAY.
|
||||
Userspace can also mark the boot as completed
|
||||
sooner by writing the time in milliseconds, say once
|
||||
userspace considers the system as booted, to:
|
||||
/sys/module/rcupdate/parameters/rcu_boot_end_delay
|
||||
Or even just writing a value of 0 to this sysfs node.
|
||||
The sysfs node can also be used to extend the delay
|
||||
to be larger than the default, assuming the marking
|
||||
of boot complete has not yet occurred.
|
||||
|
||||
rcupdate.rcu_cpu_stall_ftrace_dump= [KNL]
|
||||
Dump ftrace buffer after reporting RCU CPU
|
||||
stall warning.
|
||||
@@ -6025,11 +5944,6 @@
|
||||
sa1100ir [NET]
|
||||
See drivers/net/irda/sa1100_ir.c.
|
||||
|
||||
sched_proxy_exec= [KNL]
|
||||
Enables or disables "proxy execution" style
|
||||
solution to mutex-based priority inversion.
|
||||
Format: <bool>
|
||||
|
||||
sched_verbose [KNL,EARLY] Enables verbose scheduler debug messages.
|
||||
|
||||
schedstats= [KNL,X86] Enable or disable scheduled statistics.
|
||||
@@ -6327,8 +6241,6 @@
|
||||
|
||||
Selecting 'on' will also enable the mitigation
|
||||
against user space to user space task attacks.
|
||||
Selecting specific mitigation does not force enable
|
||||
user mitigations.
|
||||
|
||||
Selecting 'off' will disable both the kernel and
|
||||
the user space protections.
|
||||
@@ -7059,19 +6971,6 @@
|
||||
having this key zero'ed is acceptable. E.g. in testing
|
||||
scenarios.
|
||||
|
||||
tsa= [X86] Control mitigation for Transient Scheduler
|
||||
Attacks on AMD CPUs. Search the following in your
|
||||
favourite search engine for more details:
|
||||
|
||||
"Technical guidance for mitigating transient scheduler
|
||||
attacks".
|
||||
|
||||
off - disable the mitigation
|
||||
on - enable the mitigation (default)
|
||||
user - mitigate only user/kernel transitions
|
||||
vm - mitigate only guest/host transitions
|
||||
|
||||
|
||||
tsc= Disable clocksource stability checks for TSC.
|
||||
Format: <string>
|
||||
[x86] reliable: mark tsc clocksource as reliable, this
|
||||
|
||||
@@ -445,10 +445,8 @@ event code Key Notes
|
||||
0x1008 0x07 FN+F8 IBM: toggle screen expand
|
||||
Lenovo: configure UltraNav,
|
||||
or toggle screen expand.
|
||||
On 2024 platforms replaced by
|
||||
0x131f (see below) and on newer
|
||||
platforms (2025 +) keycode is
|
||||
replaced by 0x1401 (see below).
|
||||
On newer platforms (2024+)
|
||||
replaced by 0x131f (see below)
|
||||
|
||||
0x1009 0x08 FN+F9 -
|
||||
|
||||
@@ -508,11 +506,9 @@ event code Key Notes
|
||||
|
||||
0x1019 0x18 unknown
|
||||
|
||||
0x131f ... FN+F8 Platform Mode change (2024 systems).
|
||||
0x131f ... FN+F8 Platform Mode change.
|
||||
Implemented in driver.
|
||||
|
||||
0x1401 ... FN+F8 Platform Mode change (2025 + systems).
|
||||
Implemented in driver.
|
||||
... ... ...
|
||||
|
||||
0x1020 0x1F unknown
|
||||
|
||||
@@ -15,7 +15,7 @@ Please notice, however, that, if:
|
||||
|
||||
you should use the main media development tree ``master`` branch:
|
||||
|
||||
https://git.linuxtv.org/media.git/
|
||||
https://git.linuxtv.org/media_tree.git/
|
||||
|
||||
In this case, you may find some useful information at the
|
||||
`LinuxTv wiki pages <https://linuxtv.org/wiki>`_:
|
||||
|
||||
@@ -67,7 +67,7 @@ Changes / Fixes
|
||||
Please mail to linux-media AT vger.kernel.org unified diffs against
|
||||
the linux media git tree:
|
||||
|
||||
https://git.linuxtv.org/media.git/
|
||||
https://git.linuxtv.org/media_tree.git/
|
||||
|
||||
This is done by committing a patch at a clone of the git tree and
|
||||
submitting the patch using ``git send-email``. Don't forget to
|
||||
|
||||
@@ -21,8 +21,7 @@ There are four components to pagemap:
|
||||
* Bit 56 page exclusively mapped (since 4.2)
|
||||
* Bit 57 pte is uffd-wp write-protected (since 5.13) (see
|
||||
Documentation/admin-guide/mm/userfaultfd.rst)
|
||||
* Bit 58 pte is a guard region (since 6.15) (see madvise (2) man page)
|
||||
* Bits 59-60 zero
|
||||
* Bits 58-60 zero
|
||||
* Bit 61 page is file-page or shared-anon (since 3.5)
|
||||
* Bit 62 page swapped
|
||||
* Bit 63 page present
|
||||
|
||||
@@ -212,17 +212,6 @@ pid>/``).
|
||||
This value defaults to 0.
|
||||
|
||||
|
||||
core_sort_vma
|
||||
=============
|
||||
|
||||
The default coredump writes VMAs in address order. By setting
|
||||
``core_sort_vma`` to 1, VMAs will be written from smallest size
|
||||
to largest size. This is known to break at least elfutils, but
|
||||
can be handy when dealing with very large (and truncated)
|
||||
coredumps where the more useful debugging details are included
|
||||
in the smaller VMAs.
|
||||
|
||||
|
||||
core_uses_pid
|
||||
=============
|
||||
|
||||
@@ -286,17 +275,6 @@ domain names are in general different. For a detailed discussion
|
||||
see the ``hostname(1)`` man page.
|
||||
|
||||
|
||||
export_pmu_events (arm64 only)
|
||||
==============================
|
||||
|
||||
Controls the PMU export bit (PMCR_EL0.X), which enables the exporting of
|
||||
events over an IMPLEMENTATION DEFINED PMU event export bus to another device.
|
||||
|
||||
0: disables exporting of events (default).
|
||||
|
||||
1: enables exporting of events.
|
||||
|
||||
|
||||
firmware_config
|
||||
===============
|
||||
|
||||
|
||||
@@ -285,12 +285,6 @@ Before jumping into the kernel, the following conditions must be met:
|
||||
|
||||
- SCR_EL3.FGTEn (bit 27) must be initialised to 0b1.
|
||||
|
||||
For CPUs with the Fine Grained Traps 2 (FEAT_FGT2) extension present:
|
||||
|
||||
- If EL3 is present and the kernel is entered at EL2:
|
||||
|
||||
- SCR_EL3.FGTEn2 (bit 59) must be initialised to 0b1.
|
||||
|
||||
For CPUs with support for HCRX_EL2 (FEAT_HCX) present:
|
||||
|
||||
- If EL3 is present and the kernel is entered at EL2:
|
||||
@@ -385,22 +379,6 @@ Before jumping into the kernel, the following conditions must be met:
|
||||
|
||||
- SMCR_EL2.EZT0 (bit 30) must be initialised to 0b1.
|
||||
|
||||
For CPUs with the Performance Monitors Extension (FEAT_PMUv3p9):
|
||||
|
||||
- If EL3 is present:
|
||||
|
||||
- MDCR_EL3.EnPM2 (bit 7) must be initialised to 0b1.
|
||||
|
||||
- If the kernel is entered at EL1 and EL2 is present:
|
||||
|
||||
- HDFGRTR2_EL2.nPMICNTR_EL0 (bit 2) must be initialised to 0b1.
|
||||
- HDFGRTR2_EL2.nPMICFILTR_EL0 (bit 3) must be initialised to 0b1.
|
||||
- HDFGRTR2_EL2.nPMUACR_EL1 (bit 4) must be initialised to 0b1.
|
||||
|
||||
- HDFGWTR2_EL2.nPMICNTR_EL0 (bit 2) must be initialised to 0b1.
|
||||
- HDFGWTR2_EL2.nPMICFILTR_EL0 (bit 3) must be initialised to 0b1.
|
||||
- HDFGWTR2_EL2.nPMUACR_EL1 (bit 4) must be initialised to 0b1.
|
||||
|
||||
For CPUs with Memory Copy and Memory Set instructions (FEAT_MOPS):
|
||||
|
||||
- If the kernel is entered at EL1 and EL2 is present:
|
||||
|
||||
@@ -152,8 +152,6 @@ infrastructure:
|
||||
+------------------------------+---------+---------+
|
||||
| DIT | [51-48] | y |
|
||||
+------------------------------+---------+---------+
|
||||
| MPAM | [43-40] | n |
|
||||
+------------------------------+---------+---------+
|
||||
| SVE | [35-32] | y |
|
||||
+------------------------------+---------+---------+
|
||||
| GIC | [27-24] | n |
|
||||
|
||||
@@ -174,28 +174,22 @@ HWCAP2_DCPODP
|
||||
Functionality implied by ID_AA64ISAR1_EL1.DPB == 0b0010.
|
||||
|
||||
HWCAP2_SVE2
|
||||
Functionality implied by ID_AA64PFR0_EL1.SVE == 0b0001 and
|
||||
ID_AA64ZFR0_EL1.SVEver == 0b0001.
|
||||
Functionality implied by ID_AA64ZFR0_EL1.SVEver == 0b0001.
|
||||
|
||||
HWCAP2_SVEAES
|
||||
Functionality implied by ID_AA64PFR0_EL1.SVE == 0b0001 and
|
||||
ID_AA64ZFR0_EL1.AES == 0b0001.
|
||||
Functionality implied by ID_AA64ZFR0_EL1.AES == 0b0001.
|
||||
|
||||
HWCAP2_SVEPMULL
|
||||
Functionality implied by ID_AA64PFR0_EL1.SVE == 0b0001 and
|
||||
ID_AA64ZFR0_EL1.AES == 0b0010.
|
||||
Functionality implied by ID_AA64ZFR0_EL1.AES == 0b0010.
|
||||
|
||||
HWCAP2_SVEBITPERM
|
||||
Functionality implied by ID_AA64PFR0_EL1.SVE == 0b0001 and
|
||||
ID_AA64ZFR0_EL1.BitPerm == 0b0001.
|
||||
Functionality implied by ID_AA64ZFR0_EL1.BitPerm == 0b0001.
|
||||
|
||||
HWCAP2_SVESHA3
|
||||
Functionality implied by ID_AA64PFR0_EL1.SVE == 0b0001 and
|
||||
ID_AA64ZFR0_EL1.SHA3 == 0b0001.
|
||||
Functionality implied by ID_AA64ZFR0_EL1.SHA3 == 0b0001.
|
||||
|
||||
HWCAP2_SVESM4
|
||||
Functionality implied by ID_AA64PFR0_EL1.SVE == 0b0001 and
|
||||
ID_AA64ZFR0_EL1.SM4 == 0b0001.
|
||||
Functionality implied by ID_AA64ZFR0_EL1.SM4 == 0b0001.
|
||||
|
||||
HWCAP2_FLAGM2
|
||||
Functionality implied by ID_AA64ISAR0_EL1.TS == 0b0010.
|
||||
@@ -204,20 +198,16 @@ HWCAP2_FRINT
|
||||
Functionality implied by ID_AA64ISAR1_EL1.FRINTTS == 0b0001.
|
||||
|
||||
HWCAP2_SVEI8MM
|
||||
Functionality implied by ID_AA64PFR0_EL1.SVE == 0b0001 and
|
||||
ID_AA64ZFR0_EL1.I8MM == 0b0001.
|
||||
Functionality implied by ID_AA64ZFR0_EL1.I8MM == 0b0001.
|
||||
|
||||
HWCAP2_SVEF32MM
|
||||
Functionality implied by ID_AA64PFR0_EL1.SVE == 0b0001 and
|
||||
ID_AA64ZFR0_EL1.F32MM == 0b0001.
|
||||
Functionality implied by ID_AA64ZFR0_EL1.F32MM == 0b0001.
|
||||
|
||||
HWCAP2_SVEF64MM
|
||||
Functionality implied by ID_AA64PFR0_EL1.SVE == 0b0001 and
|
||||
ID_AA64ZFR0_EL1.F64MM == 0b0001.
|
||||
Functionality implied by ID_AA64ZFR0_EL1.F64MM == 0b0001.
|
||||
|
||||
HWCAP2_SVEBF16
|
||||
Functionality implied by ID_AA64PFR0_EL1.SVE == 0b0001 and
|
||||
ID_AA64ZFR0_EL1.BF16 == 0b0001.
|
||||
Functionality implied by ID_AA64ZFR0_EL1.BF16 == 0b0001.
|
||||
|
||||
HWCAP2_I8MM
|
||||
Functionality implied by ID_AA64ISAR1_EL1.I8MM == 0b0001.
|
||||
@@ -283,8 +273,7 @@ HWCAP2_EBF16
|
||||
Functionality implied by ID_AA64ISAR1_EL1.BF16 == 0b0010.
|
||||
|
||||
HWCAP2_SVE_EBF16
|
||||
Functionality implied by ID_AA64PFR0_EL1.SVE == 0b0001 and
|
||||
ID_AA64ZFR0_EL1.BF16 == 0b0010.
|
||||
Functionality implied by ID_AA64ZFR0_EL1.BF16 == 0b0010.
|
||||
|
||||
HWCAP2_CSSC
|
||||
Functionality implied by ID_AA64ISAR2_EL1.CSSC == 0b0001.
|
||||
@@ -293,8 +282,7 @@ HWCAP2_RPRFM
|
||||
Functionality implied by ID_AA64ISAR2_EL1.RPRFM == 0b0001.
|
||||
|
||||
HWCAP2_SVE2P1
|
||||
Functionality implied by ID_AA64PFR0_EL1.SVE == 0b0001 and
|
||||
ID_AA64ZFR0_EL1.SVEver == 0b0010.
|
||||
Functionality implied by ID_AA64ZFR0_EL1.SVEver == 0b0010.
|
||||
|
||||
HWCAP2_SME2
|
||||
Functionality implied by ID_AA64SMFR0_EL1.SMEver == 0b0001.
|
||||
@@ -321,8 +309,7 @@ HWCAP2_HBC
|
||||
Functionality implied by ID_AA64ISAR2_EL1.BC == 0b0001.
|
||||
|
||||
HWCAP2_SVE_B16B16
|
||||
Functionality implied by ID_AA64PFR0_EL1.SVE == 0b0001 and
|
||||
ID_AA64ZFR0_EL1.B16B16 == 0b0001.
|
||||
Functionality implied by ID_AA64ZFR0_EL1.B16B16 == 0b0001.
|
||||
|
||||
HWCAP2_LRCPC3
|
||||
Functionality implied by ID_AA64ISAR1_EL1.LRCPC == 0b0011.
|
||||
|
||||
@@ -255,11 +255,8 @@ stable kernels.
|
||||
+----------------+-----------------+-----------------+-----------------------------+
|
||||
| Hisilicon | Hip08 SMMU PMCG | #162001800 | N/A |
|
||||
+----------------+-----------------+-----------------+-----------------------------+
|
||||
| Hisilicon | Hip{08,09,09A,10| #162001900 | N/A |
|
||||
| | ,10C,11} | | |
|
||||
| | SMMU PMCG | | |
|
||||
+----------------+-----------------+-----------------+-----------------------------+
|
||||
| Hisilicon | Hip09 | #162100801 | HISILICON_ERRATUM_162100801 |
|
||||
| Hisilicon | Hip{08,09,10,10C| #162001900 | N/A |
|
||||
| | ,11} SMMU PMCG | | |
|
||||
+----------------+-----------------+-----------------+-----------------------------+
|
||||
+----------------+-----------------+-----------------+-----------------------------+
|
||||
| Qualcomm Tech. | Kryo/Falkor v1 | E1003 | QCOM_FALKOR_ERRATUM_1003 |
|
||||
|
||||
@@ -69,8 +69,8 @@ model features for SME is included in Appendix A.
|
||||
vectors from 0 to VL/8-1 stored in the same endianness invariant format as is
|
||||
used for SVE vectors.
|
||||
|
||||
* On thread creation PSTATE.ZA and TPIDR2_EL0 are preserved unless CLONE_VM
|
||||
is specified, in which case PSTATE.ZA is set to 0 and TPIDR2_EL0 is set to 0.
|
||||
* On thread creation TPIDR2_EL0 is preserved unless CLONE_SETTLS is specified,
|
||||
in which case it is set to 0.
|
||||
|
||||
2. Vector lengths
|
||||
------------------
|
||||
@@ -115,7 +115,7 @@ be zeroed.
|
||||
5. Signal handling
|
||||
-------------------
|
||||
|
||||
* Signal handlers are invoked with PSTATE.SM=0, PSTATE.ZA=0, and TPIDR2_EL0=0.
|
||||
* Signal handlers are invoked with streaming mode and ZA disabled.
|
||||
|
||||
* A new signal frame record TPIDR2_MAGIC is added formatted as a struct
|
||||
tpidr2_context to allow access to TPIDR2_EL0 from signal handlers.
|
||||
@@ -241,7 +241,7 @@ prctl(PR_SME_SET_VL, unsigned long arg)
|
||||
length, or calling PR_SME_SET_VL with the PR_SME_SET_VL_ONEXEC flag,
|
||||
does not constitute a change to the vector length for this purpose.
|
||||
|
||||
* Changing the vector length causes PSTATE.ZA to be cleared.
|
||||
* Changing the vector length causes PSTATE.ZA and PSTATE.SM to be cleared.
|
||||
Calling PR_SME_SET_VL with vl equal to the thread's current vector
|
||||
length, or calling PR_SME_SET_VL with the PR_SME_SET_VL_ONEXEC flag,
|
||||
does not constitute a change to the vector length for this purpose.
|
||||
|
||||
@@ -896,19 +896,10 @@ Offset/size: 0x260/4
|
||||
|
||||
The kernel runtime start address is determined by the following algorithm::
|
||||
|
||||
if (relocatable_kernel) {
|
||||
if (load_address < pref_address)
|
||||
load_address = pref_address;
|
||||
runtime_start = align_up(load_address, kernel_alignment);
|
||||
} else {
|
||||
runtime_start = pref_address;
|
||||
}
|
||||
|
||||
Hence the necessary memory window location and size can be estimated by
|
||||
a boot loader as::
|
||||
|
||||
memory_window_start = runtime_start;
|
||||
memory_window_size = init_size;
|
||||
if (relocatable_kernel)
|
||||
runtime_start = align_up(load_address, kernel_alignment)
|
||||
else
|
||||
runtime_start = pref_address
|
||||
|
||||
============ ===============
|
||||
Field name: handover_offset
|
||||
|
||||
@@ -93,7 +93,7 @@ enters a C-state.
|
||||
|
||||
The kernel provides a function to invoke the buffer clearing:
|
||||
|
||||
x86_clear_cpu_buffers()
|
||||
mds_clear_cpu_buffers()
|
||||
|
||||
Also macro CLEAR_CPU_BUFFERS can be used in ASM late in exit-to-user path.
|
||||
Other than CFLAGS.ZF, this macro doesn't clobber any registers.
|
||||
@@ -185,9 +185,9 @@ Mitigation points
|
||||
idle clearing would be a window dressing exercise and is therefore not
|
||||
activated.
|
||||
|
||||
The invocation is controlled by the static key cpu_buf_idle_clear which is
|
||||
switched depending on the chosen mitigation mode and the SMT state of the
|
||||
system.
|
||||
The invocation is controlled by the static key mds_idle_clear which is
|
||||
switched depending on the chosen mitigation mode and the SMT state of
|
||||
the system.
|
||||
|
||||
The buffer clear is only invoked before entering the C-State to prevent
|
||||
that stale data from the idling CPU from spilling to the Hyper-Thread
|
||||
|
||||
@@ -77,10 +77,10 @@ Basic design
|
||||
============
|
||||
|
||||
We introduce ``struct blk_crypto_key`` to represent an inline encryption key and
|
||||
how it will be used. This includes the type of the key (standard or
|
||||
hardware-wrapped); the actual bytes of the key; the size of the key; the
|
||||
algorithm and data unit size the key will be used with; and the number of bytes
|
||||
needed to represent the maximum data unit number the key will be used with.
|
||||
how it will be used. This includes the actual bytes of the key; the size of the
|
||||
key; the algorithm and data unit size the key will be used with; and the number
|
||||
of bytes needed to represent the maximum data unit number the key will be used
|
||||
with.
|
||||
|
||||
We introduce ``struct bio_crypt_ctx`` to represent an encryption context. It
|
||||
contains a data unit number and a pointer to a blk_crypto_key. We add pointers
|
||||
@@ -301,216 +301,3 @@ kernel will pretend that the device does not support hardware inline encryption
|
||||
When the crypto API fallback is enabled, this means that all bios with and
|
||||
encryption context will use the fallback, and IO will complete as usual. When
|
||||
the fallback is disabled, a bio with an encryption context will be failed.
|
||||
|
||||
.. _hardware_wrapped_keys:
|
||||
|
||||
Hardware-wrapped keys
|
||||
=====================
|
||||
|
||||
Motivation and threat model
|
||||
---------------------------
|
||||
|
||||
Linux storage encryption (dm-crypt, fscrypt, eCryptfs, etc.) traditionally
|
||||
relies on the raw encryption key(s) being present in kernel memory so that the
|
||||
encryption can be performed. This traditionally isn't seen as a problem because
|
||||
the key(s) won't be present during an offline attack, which is the main type of
|
||||
attack that storage encryption is intended to protect from.
|
||||
|
||||
However, there is an increasing desire to also protect users' data from other
|
||||
types of attacks (to the extent possible), including:
|
||||
|
||||
- Cold boot attacks, where an attacker with physical access to a system suddenly
|
||||
powers it off, then immediately dumps the system memory to extract recently
|
||||
in-use encryption keys, then uses these keys to decrypt user data on-disk.
|
||||
|
||||
- Online attacks where the attacker is able to read kernel memory without fully
|
||||
compromising the system, followed by an offline attack where any extracted
|
||||
keys can be used to decrypt user data on-disk. An example of such an online
|
||||
attack would be if the attacker is able to run some code on the system that
|
||||
exploits a Meltdown-like vulnerability but is unable to escalate privileges.
|
||||
|
||||
- Online attacks where the attacker fully compromises the system, but their data
|
||||
exfiltration is significantly time-limited and/or bandwidth-limited, so in
|
||||
order to completely exfiltrate the data they need to extract the encryption
|
||||
keys to use in a later offline attack.
|
||||
|
||||
Hardware-wrapped keys are a feature of inline encryption hardware that is
|
||||
designed to protect users' data from the above attacks (to the extent possible),
|
||||
without introducing limitations such as a maximum number of keys.
|
||||
|
||||
Note that it is impossible to **fully** protect users' data from these attacks.
|
||||
Even in the attacks where the attacker "just" gets read access to kernel memory,
|
||||
they can still extract any user data that is present in memory, including
|
||||
plaintext pagecache pages of encrypted files. The focus here is just on
|
||||
protecting the encryption keys, as those instantly give access to **all** user
|
||||
data in any following offline attack, rather than just some of it (where which
|
||||
data is included in that "some" might not be controlled by the attacker).
|
||||
|
||||
Solution overview
|
||||
-----------------
|
||||
|
||||
Inline encryption hardware typically has "keyslots" into which software can
|
||||
program keys for the hardware to use; the contents of keyslots typically can't
|
||||
be read back by software. As such, the above security goals could be achieved
|
||||
if the kernel simply erased its copy of the key(s) after programming them into
|
||||
keyslot(s) and thereafter only referred to them via keyslot number.
|
||||
|
||||
However, that naive approach runs into the problem that it limits the number of
|
||||
unlocked keys to the number of keyslots, which typically is a small number. In
|
||||
cases where there is only one encryption key system-wide (e.g., a full-disk
|
||||
encryption key), that can be tolerable. However, in general there can be many
|
||||
logged-in users with many different keys, and/or many running applications with
|
||||
application-specific encrypted storage areas. This is especially true if
|
||||
file-based encryption (e.g. fscrypt) is being used.
|
||||
|
||||
Thus, it is important for the kernel to still have a way to "remind" the
|
||||
hardware about a key, without actually having the raw key itself. This would
|
||||
ensure that the number of hardware keyslots only limits the number of active I/O
|
||||
requests, not other things such as the number of logged-in users, the number of
|
||||
running apps, or the number of encrypted storage areas that apps can create.
|
||||
|
||||
Somewhat less importantly, it is also desirable that the raw keys are never
|
||||
visible to software at all, even while being initially unlocked. This would
|
||||
ensure that a read-only compromise of system memory will never allow a key to be
|
||||
extracted to be used off-system, even if it occurs when a key is being unlocked.
|
||||
|
||||
To solve all these problems, some vendors of inline encryption hardware have
|
||||
made their hardware support *hardware-wrapped keys*. Hardware-wrapped keys
|
||||
are encrypted keys that can only be unwrapped (decrypted) and used by hardware
|
||||
-- either by the inline encryption hardware itself, or by a dedicated hardware
|
||||
block that can directly provision keys to the inline encryption hardware.
|
||||
|
||||
(We refer to them as "hardware-wrapped keys" rather than simply "wrapped keys"
|
||||
to add some clarity in cases where there could be other types of wrapped keys,
|
||||
such as in file-based encryption. Key wrapping is a commonly used technique.)
|
||||
|
||||
The key which wraps (encrypts) hardware-wrapped keys is a hardware-internal key
|
||||
that is never exposed to software; it is either a persistent key (a "long-term
|
||||
wrapping key") or a per-boot key (an "ephemeral wrapping key"). The long-term
|
||||
wrapped form of the key is what is initially unlocked, but it is erased from
|
||||
memory as soon as it is converted into an ephemerally-wrapped key. In-use
|
||||
hardware-wrapped keys are always ephemerally-wrapped, not long-term wrapped.
|
||||
|
||||
As inline encryption hardware can only be used to encrypt/decrypt data on-disk,
|
||||
the hardware also includes a level of indirection; it doesn't use the unwrapped
|
||||
key directly for inline encryption, but rather derives both an inline encryption
|
||||
key and a "software secret" from it. Software can use the "software secret" for
|
||||
tasks that can't use the inline encryption hardware, such as filenames
|
||||
encryption. The software secret is not protected from memory compromise.
|
||||
|
||||
Key hierarchy
|
||||
-------------
|
||||
|
||||
Here is the key hierarchy for a hardware-wrapped key::
|
||||
|
||||
Hardware-wrapped key
|
||||
|
|
||||
|
|
||||
<Hardware KDF>
|
||||
|
|
||||
-----------------------------
|
||||
| |
|
||||
Inline encryption key Software secret
|
||||
|
||||
The components are:
|
||||
|
||||
- *Hardware-wrapped key*: a key for the hardware's KDF (Key Derivation
|
||||
Function), in ephemerally-wrapped form. The key wrapping algorithm is a
|
||||
hardware implementation detail that doesn't impact kernel operation, but a
|
||||
strong authenticated encryption algorithm such as AES-256-GCM is recommended.
|
||||
|
||||
- *Hardware KDF*: a KDF (Key Derivation Function) which the hardware uses to
|
||||
derive subkeys after unwrapping the wrapped key. The hardware's choice of KDF
|
||||
doesn't impact kernel operation, but it does need to be known for testing
|
||||
purposes, and it's also assumed to have at least a 256-bit security strength.
|
||||
All known hardware uses the SP800-108 KDF in Counter Mode with AES-256-CMAC,
|
||||
with a particular choice of labels and contexts; new hardware should use this
|
||||
already-vetted KDF.
|
||||
|
||||
- *Inline encryption key*: a derived key which the hardware directly provisions
|
||||
to a keyslot of the inline encryption hardware, without exposing it to
|
||||
software. In all known hardware, this will always be an AES-256-XTS key.
|
||||
However, in principle other encryption algorithms could be supported too.
|
||||
Hardware must derive distinct subkeys for each supported encryption algorithm.
|
||||
|
||||
- *Software secret*: a derived key which the hardware returns to software so
|
||||
that software can use it for cryptographic tasks that can't use inline
|
||||
encryption. This value is cryptographically isolated from the inline
|
||||
encryption key, i.e. knowing one doesn't reveal the other. (The KDF ensures
|
||||
this.) Currently, the software secret is always 32 bytes and thus is suitable
|
||||
for cryptographic applications that require up to a 256-bit security strength.
|
||||
Some use cases (e.g. full-disk encryption) won't require the software secret.
|
||||
|
||||
Example: in the case of fscrypt, the fscrypt master key (the key that protects a
|
||||
particular set of encrypted directories) is made hardware-wrapped. The inline
|
||||
encryption key is used as the file contents encryption key, while the software
|
||||
secret (rather than the master key directly) is used to key fscrypt's KDF
|
||||
(HKDF-SHA512) to derive other subkeys such as filenames encryption keys.
|
||||
|
||||
Note that currently this design assumes a single inline encryption key per
|
||||
hardware-wrapped key, without any further key derivation. Thus, in the case of
|
||||
fscrypt, currently hardware-wrapped keys are only compatible with the "inline
|
||||
encryption optimized" settings, which use one file contents encryption key per
|
||||
encryption policy rather than one per file. This design could be extended to
|
||||
make the hardware derive per-file keys using per-file nonces passed down the
|
||||
storage stack, and in fact some hardware already supports this; future work is
|
||||
planned to remove this limitation by adding the corresponding kernel support.
|
||||
|
||||
Kernel support
|
||||
--------------
|
||||
|
||||
The inline encryption support of the kernel's block layer ("blk-crypto") has
|
||||
been extended to support hardware-wrapped keys as an alternative to standard
|
||||
keys, when hardware support is available. This works in the following way:
|
||||
|
||||
- A ``key_types_supported`` field is added to the crypto capabilities in
|
||||
``struct blk_crypto_profile``. This allows device drivers to declare that
|
||||
they support standard keys, hardware-wrapped keys, or both.
|
||||
|
||||
- ``struct blk_crypto_key`` can now contain a hardware-wrapped key as an
|
||||
alternative to a standard key; a ``key_type`` field is added to
|
||||
``struct blk_crypto_config`` to distinguish between the different key types.
|
||||
This allows users of blk-crypto to en/decrypt data using a hardware-wrapped
|
||||
key in a way very similar to using a standard key.
|
||||
|
||||
- A new method ``blk_crypto_ll_ops::derive_sw_secret`` is added. Device drivers
|
||||
that support hardware-wrapped keys must implement this method. Users of
|
||||
blk-crypto can call ``blk_crypto_derive_sw_secret()`` to access this method.
|
||||
|
||||
- The programming and eviction of hardware-wrapped keys happens via
|
||||
``blk_crypto_ll_ops::keyslot_program`` and
|
||||
``blk_crypto_ll_ops::keyslot_evict``, just like it does for standard keys. If
|
||||
a driver supports hardware-wrapped keys, then it must handle hardware-wrapped
|
||||
keys being passed to these methods.
|
||||
|
||||
blk-crypto-fallback doesn't support hardware-wrapped keys. Therefore,
|
||||
hardware-wrapped keys can only be used with actual inline encryption hardware.
|
||||
|
||||
Currently, the kernel only works with hardware-wrapped keys in
|
||||
ephemerally-wrapped form. No generic kernel interfaces are provided for
|
||||
generating or importing hardware-wrapped keys in the first place, or converting
|
||||
them to ephemerally-wrapped form. In Android, SoC vendors are required to
|
||||
support these operations in their KeyMint implementation (a hardware abstraction
|
||||
layer in userspace); for details, see the `Android documentation
|
||||
<https://source.android.com/security/encryption/hw-wrapped-keys>`_.
|
||||
|
||||
Testability
|
||||
-----------
|
||||
|
||||
Both the hardware KDF and the inline encryption itself are well-defined
|
||||
algorithms that don't depend on any secrets other than the unwrapped key.
|
||||
Therefore, if the unwrapped key is known to software, these algorithms can be
|
||||
reproduced in software in order to verify the ciphertext that is written to disk
|
||||
by the inline encryption hardware.
|
||||
|
||||
However, the unwrapped key will only be known to software for testing if the
|
||||
"import" functionality is used. Proper testing is not possible in the
|
||||
"generate" case where the hardware generates the key itself. The correct
|
||||
operation of the "generate" mode thus relies on the security and correctness of
|
||||
the hardware RNG and its use to generate the key, as well as the testing of the
|
||||
"import" mode as that should cover all parts other than the key generation.
|
||||
|
||||
For an example of a test that verifies the ciphertext written to disk in the
|
||||
"import" mode, see the fscrypt hardware-wrapped key tests in xfstests, or
|
||||
`Android's vts_kernel_encryption_test
|
||||
<https://android.googlesource.com/platform/test/vts-testcase/kernel/+/refs/heads/master/encryption/>`_.
|
||||
|
||||
@@ -382,14 +382,6 @@ In case of new BPF instructions, once the changes have been accepted
|
||||
into the Linux kernel, please implement support into LLVM's BPF back
|
||||
end. See LLVM_ section below for further information.
|
||||
|
||||
Q: What "BPF_INTERNAL" symbol namespace is for?
|
||||
-----------------------------------------------
|
||||
A: Symbols exported as BPF_INTERNAL can only be used by BPF infrastructure
|
||||
like preload kernel modules with light skeleton. Most symbols outside
|
||||
of BPF_INTERNAL are not expected to be used by code outside of BPF either.
|
||||
Symbols may lack the designation because they predate the namespaces,
|
||||
or due to an oversight.
|
||||
|
||||
Stable submission
|
||||
=================
|
||||
|
||||
|
||||
@@ -530,77 +530,6 @@ routines, e.g.:::
|
||||
....
|
||||
}
|
||||
|
||||
Part Ie - IOVA-based DMA mappings
|
||||
---------------------------------
|
||||
|
||||
These APIs allow a very efficient mapping when using an IOMMU. They are an
|
||||
optional path that requires extra code and are only recommended for drivers
|
||||
where DMA mapping performance, or the space usage for storing the DMA addresses
|
||||
matter. All the considerations from the previous section apply here as well.
|
||||
|
||||
::
|
||||
|
||||
bool dma_iova_try_alloc(struct device *dev, struct dma_iova_state *state,
|
||||
phys_addr_t phys, size_t size);
|
||||
|
||||
Is used to try to allocate IOVA space for mapping operation. If it returns
|
||||
false this API can't be used for the given device and the normal streaming
|
||||
DMA mapping API should be used. The ``struct dma_iova_state`` is allocated
|
||||
by the driver and must be kept around until unmap time.
|
||||
|
||||
::
|
||||
|
||||
static inline bool dma_use_iova(struct dma_iova_state *state)
|
||||
|
||||
Can be used by the driver to check if the IOVA-based API is used after a
|
||||
call to dma_iova_try_alloc. This can be useful in the unmap path.
|
||||
|
||||
::
|
||||
|
||||
int dma_iova_link(struct device *dev, struct dma_iova_state *state,
|
||||
phys_addr_t phys, size_t offset, size_t size,
|
||||
enum dma_data_direction dir, unsigned long attrs);
|
||||
|
||||
Is used to link ranges to the IOVA previously allocated. The start of all
|
||||
but the first call to dma_iova_link for a given state must be aligned
|
||||
to the DMA merge boundary returned by ``dma_get_merge_boundary())``, and
|
||||
the size of all but the last range must be aligned to the DMA merge boundary
|
||||
as well.
|
||||
|
||||
::
|
||||
|
||||
int dma_iova_sync(struct device *dev, struct dma_iova_state *state,
|
||||
size_t offset, size_t size);
|
||||
|
||||
Must be called to sync the IOMMU page tables for IOVA-range mapped by one or
|
||||
more calls to ``dma_iova_link()``.
|
||||
|
||||
For drivers that use a one-shot mapping, all ranges can be unmapped and the
|
||||
IOVA freed by calling:
|
||||
|
||||
::
|
||||
|
||||
void dma_iova_destroy(struct device *dev, struct dma_iova_state *state,
|
||||
size_t mapped_len, enum dma_data_direction dir,
|
||||
unsigned long attrs);
|
||||
|
||||
Alternatively drivers can dynamically manage the IOVA space by unmapping
|
||||
and mapping individual regions. In that case
|
||||
|
||||
::
|
||||
|
||||
void dma_iova_unlink(struct device *dev, struct dma_iova_state *state,
|
||||
size_t offset, size_t size, enum dma_data_direction dir,
|
||||
unsigned long attrs);
|
||||
|
||||
is used to unmap a range previously mapped, and
|
||||
|
||||
::
|
||||
|
||||
void dma_iova_free(struct device *dev, struct dma_iova_state *state);
|
||||
|
||||
is used to free the IOVA space. All regions must have been unmapped using
|
||||
``dma_iova_unlink()`` before calling ``dma_iova_free()``.
|
||||
|
||||
Part II - Non-coherent DMA allocations
|
||||
--------------------------------------
|
||||
|
||||
@@ -86,19 +86,7 @@ Memory ordering guarantee changes:
|
||||
* none (both fully unordered)
|
||||
|
||||
|
||||
case 2) - non-"Read/Modify/Write" (RMW) ops with release ordering
|
||||
-----------------------------------------------------------------
|
||||
|
||||
Function changes:
|
||||
|
||||
* atomic_set_release() --> refcount_set_release()
|
||||
|
||||
Memory ordering guarantee changes:
|
||||
|
||||
* none (both provide RELEASE ordering)
|
||||
|
||||
|
||||
case 3) - increment-based ops that return no value
|
||||
case 2) - increment-based ops that return no value
|
||||
--------------------------------------------------
|
||||
|
||||
Function changes:
|
||||
@@ -110,7 +98,7 @@ Memory ordering guarantee changes:
|
||||
|
||||
* none (both fully unordered)
|
||||
|
||||
case 4) - decrement-based RMW ops that return no value
|
||||
case 3) - decrement-based RMW ops that return no value
|
||||
------------------------------------------------------
|
||||
|
||||
Function changes:
|
||||
@@ -122,7 +110,7 @@ Memory ordering guarantee changes:
|
||||
* fully unordered --> RELEASE ordering
|
||||
|
||||
|
||||
case 5) - increment-based RMW ops that return a value
|
||||
case 4) - increment-based RMW ops that return a value
|
||||
-----------------------------------------------------
|
||||
|
||||
Function changes:
|
||||
@@ -138,20 +126,7 @@ Memory ordering guarantees changes:
|
||||
result of obtaining pointer to the object!
|
||||
|
||||
|
||||
case 6) - increment-based RMW ops with acquire ordering that return a value
|
||||
---------------------------------------------------------------------------
|
||||
|
||||
Function changes:
|
||||
|
||||
* atomic_inc_not_zero() --> refcount_inc_not_zero_acquire()
|
||||
* no atomic counterpart --> refcount_add_not_zero_acquire()
|
||||
|
||||
Memory ordering guarantees changes:
|
||||
|
||||
* fully ordered --> ACQUIRE ordering on success
|
||||
|
||||
|
||||
case 7) - generic dec/sub decrement-based RMW ops that return a value
|
||||
case 5) - generic dec/sub decrement-based RMW ops that return a value
|
||||
---------------------------------------------------------------------
|
||||
|
||||
Function changes:
|
||||
@@ -164,7 +139,7 @@ Memory ordering guarantees changes:
|
||||
* fully ordered --> RELEASE ordering + ACQUIRE ordering on success
|
||||
|
||||
|
||||
case 8) other decrement-based RMW ops that return a value
|
||||
case 6) other decrement-based RMW ops that return a value
|
||||
---------------------------------------------------------
|
||||
|
||||
Function changes:
|
||||
@@ -179,7 +154,7 @@ Memory ordering guarantees changes:
|
||||
.. note:: atomic_add_unless() only provides full order on success.
|
||||
|
||||
|
||||
case 9) - lock-based RMW
|
||||
case 7) - lock-based RMW
|
||||
------------------------
|
||||
|
||||
Function changes:
|
||||
|
||||
@@ -28,9 +28,6 @@ kernel. As of today, modules that make use of symbols exported into namespaces,
|
||||
are required to import the namespace. Otherwise the kernel will, depending on
|
||||
its configuration, reject loading the module or warn about a missing import.
|
||||
|
||||
Additionally, it is possible to put symbols into a module namespace, strictly
|
||||
limiting which modules are allowed to use these symbols.
|
||||
|
||||
2. How to define Symbol Namespaces
|
||||
==================================
|
||||
|
||||
@@ -71,7 +68,7 @@ is to define the default namespace in the ``Makefile`` of the subsystem. E.g. to
|
||||
export all symbols defined in usb-common into the namespace USB_COMMON, add a
|
||||
line like this to drivers/usb/common/Makefile::
|
||||
|
||||
ccflags-y += -DDEFAULT_SYMBOL_NAMESPACE='"USB_COMMON"'
|
||||
ccflags-y += -DDEFAULT_SYMBOL_NAMESPACE=USB_COMMON
|
||||
|
||||
That will affect all EXPORT_SYMBOL() and EXPORT_SYMBOL_GPL() statements. A
|
||||
symbol exported with EXPORT_SYMBOL_NS() while this definition is present, will
|
||||
@@ -82,27 +79,11 @@ A second option to define the default namespace is directly in the compilation
|
||||
unit as preprocessor statement. The above example would then read::
|
||||
|
||||
#undef DEFAULT_SYMBOL_NAMESPACE
|
||||
#define DEFAULT_SYMBOL_NAMESPACE "USB_COMMON"
|
||||
#define DEFAULT_SYMBOL_NAMESPACE USB_COMMON
|
||||
|
||||
within the corresponding compilation unit before any EXPORT_SYMBOL macro is
|
||||
used.
|
||||
|
||||
2.3 Using the EXPORT_SYMBOL_GPL_FOR_MODULES() macro
|
||||
===================================================
|
||||
|
||||
Symbols exported using this macro are put into a module namespace. This
|
||||
namespace cannot be imported.
|
||||
|
||||
The macro takes a comma separated list of module names, allowing only those
|
||||
modules to access this symbol. Simple tail-globs are supported.
|
||||
|
||||
For example:
|
||||
|
||||
EXPORT_SYMBOL_GPL_FOR_MODULES(preempt_notifier_inc, "kvm,kvm-*")
|
||||
|
||||
will limit usage of this symbol to modules whoes name matches the given
|
||||
patterns.
|
||||
|
||||
3. How to use Symbols exported in Namespaces
|
||||
============================================
|
||||
|
||||
@@ -174,6 +155,3 @@ in-tree modules::
|
||||
You can also run nsdeps for external module builds. A typical usage is::
|
||||
|
||||
$ make -C <path_to_kernel_src> M=$PWD nsdeps
|
||||
|
||||
Note: it will happily generate an import statement for the module namespace;
|
||||
which will not work and generates build and runtime failures.
|
||||
|
||||
@@ -1,184 +0,0 @@
|
||||
.. SPDX-License-Identifier: GPL-2.0
|
||||
|
||||
===================================
|
||||
Using AutoFDO with the Linux kernel
|
||||
===================================
|
||||
|
||||
This enables AutoFDO build support for the kernel when using
|
||||
the Clang compiler. AutoFDO (Auto-Feedback-Directed Optimization)
|
||||
is a type of profile-guided optimization (PGO) used to enhance the
|
||||
performance of binary executables. It gathers information about the
|
||||
frequency of execution of various code paths within a binary using
|
||||
hardware sampling. This data is then used to guide the compiler's
|
||||
optimization decisions, resulting in a more efficient binary. AutoFDO
|
||||
is a powerful optimization technique, and data indicates that it can
|
||||
significantly improve kernel performance. It's especially beneficial
|
||||
for workloads affected by front-end stalls.
|
||||
|
||||
For AutoFDO builds, unlike non-FDO builds, the user must supply a
|
||||
profile. Acquiring an AutoFDO profile can be done in several ways.
|
||||
AutoFDO profiles are created by converting hardware sampling using
|
||||
the "perf" tool. It is crucial that the workload used to create these
|
||||
perf files is representative; they must exhibit runtime
|
||||
characteristics similar to the workloads that are intended to be
|
||||
optimized. Failure to do so will result in the compiler optimizing
|
||||
for the wrong objective.
|
||||
|
||||
The AutoFDO profile often encapsulates the program's behavior. If the
|
||||
performance-critical codes are architecture-independent, the profile
|
||||
can be applied across platforms to achieve performance gains. For
|
||||
instance, using the profile generated on Intel architecture to build
|
||||
a kernel for AMD architecture can also yield performance improvements.
|
||||
|
||||
There are two methods for acquiring a representative profile:
|
||||
(1) Sample real workloads using a production environment.
|
||||
(2) Generate the profile using a representative load test.
|
||||
When enabling the AutoFDO build configuration without providing an
|
||||
AutoFDO profile, the compiler only modifies the dwarf information in
|
||||
the kernel without impacting runtime performance. It's advisable to
|
||||
use a kernel binary built with the same AutoFDO configuration to
|
||||
collect the perf profile. While it's possible to use a kernel built
|
||||
with different options, it may result in inferior performance.
|
||||
|
||||
One can collect profiles using AutoFDO build for the previous kernel.
|
||||
AutoFDO employs relative line numbers to match the profiles, offering
|
||||
some tolerance for source changes. This mode is commonly used in a
|
||||
production environment for profile collection.
|
||||
|
||||
In a profile collection based on a load test, the AutoFDO collection
|
||||
process consists of the following steps:
|
||||
|
||||
#. Initial build: The kernel is built with AutoFDO options
|
||||
without a profile.
|
||||
|
||||
#. Profiling: The above kernel is then run with a representative
|
||||
workload to gather execution frequency data. This data is
|
||||
collected using hardware sampling, via perf. AutoFDO is most
|
||||
effective on platforms supporting advanced PMU features like
|
||||
LBR on Intel machines, ETM traces on ARM machines.
|
||||
|
||||
#. AutoFDO profile generation: Perf output file is converted to
|
||||
the AutoFDO profile via offline tools.
|
||||
|
||||
The support requires a Clang compiler LLVM 17 or later.
|
||||
|
||||
Preparation
|
||||
===========
|
||||
|
||||
Configure the kernel with::
|
||||
|
||||
CONFIG_AUTOFDO_CLANG=y
|
||||
|
||||
Customization
|
||||
=============
|
||||
|
||||
The default CONFIG_AUTOFDO_CLANG setting covers kernel space objects for
|
||||
AutoFDO builds. One can, however, enable or disable AutoFDO build for
|
||||
individual files and directories by adding a line similar to the following
|
||||
to the respective kernel Makefile:
|
||||
|
||||
- For enabling a single file (e.g. foo.o) ::
|
||||
|
||||
AUTOFDO_PROFILE_foo.o := y
|
||||
|
||||
- For enabling all files in one directory ::
|
||||
|
||||
AUTOFDO_PROFILE := y
|
||||
|
||||
- For disabling one file ::
|
||||
|
||||
AUTOFDO_PROFILE_foo.o := n
|
||||
|
||||
- For disabling all files in one directory ::
|
||||
|
||||
AUTOFDO_PROFILE := n
|
||||
|
||||
Workflow
|
||||
========
|
||||
|
||||
Here is an example workflow for AutoFDO kernel:
|
||||
|
||||
1) Build the kernel on the host machine with LLVM enabled,
|
||||
for example, ::
|
||||
|
||||
$ make menuconfig LLVM=1
|
||||
|
||||
Turn on AutoFDO build config::
|
||||
|
||||
CONFIG_AUTOFDO_CLANG=y
|
||||
|
||||
With a configuration that with LLVM enabled, use the following command::
|
||||
|
||||
$ scripts/config -e AUTOFDO_CLANG
|
||||
|
||||
After getting the config, build with ::
|
||||
|
||||
$ make LLVM=1
|
||||
|
||||
2) Install the kernel on the test machine.
|
||||
|
||||
3) Run the load tests. The '-c' option in perf specifies the sample
|
||||
event period. We suggest using a suitable prime number, like 500009,
|
||||
for this purpose.
|
||||
|
||||
- For Intel platforms::
|
||||
|
||||
$ perf record -e BR_INST_RETIRED.NEAR_TAKEN:k -a -N -b -c <count> -o <perf_file> -- <loadtest>
|
||||
|
||||
- For AMD platforms:
|
||||
|
||||
The supported systems are: Zen3 with BRS, or Zen4 with amd_lbr_v2. To check,
|
||||
|
||||
For Zen3::
|
||||
|
||||
$ cat proc/cpuinfo | grep " brs"
|
||||
|
||||
For Zen4::
|
||||
|
||||
$ cat proc/cpuinfo | grep amd_lbr_v2
|
||||
|
||||
The following command generated the perf data file::
|
||||
|
||||
$ perf record --pfm-events RETIRED_TAKEN_BRANCH_INSTRUCTIONS:k -a -N -b -c <count> -o <perf_file> -- <loadtest>
|
||||
|
||||
- For ARM platforms with ETM trace:
|
||||
|
||||
Follow the instructions in the `Linaro OpenCSD document
|
||||
https://github.com/Linaro/OpenCSD/blob/master/decoder/tests/auto-fdo/autofdo.md`_
|
||||
to record ETM traces for AutoFDO::
|
||||
|
||||
$ perf record -e cs_etm/@tmc_etr0/k -a -o <etm_perf_file> -- <loadtest>
|
||||
$ perf inject -i <etm_perf_file> -o <perf_file> --itrace=i500009il
|
||||
|
||||
For ARM platforms running Android, follow the instructions in the
|
||||
`Android simpleperf document
|
||||
<https://android.googlesource.com/platform/system/extras/+/main/simpleperf/doc/collect_etm_data_for_autofdo.md>`_
|
||||
to record ETM traces for AutoFDO::
|
||||
|
||||
$ simpleperf record -e cs-etm:k -a -o <perf_file> -- <loadtest>
|
||||
|
||||
4) (Optional) Download the raw perf file to the host machine.
|
||||
|
||||
5) To generate an AutoFDO profile, two offline tools are available:
|
||||
create_llvm_prof and llvm_profgen. The create_llvm_prof tool is part
|
||||
of the AutoFDO project and can be found on GitHub
|
||||
(https://github.com/google/autofdo), version v0.30.1 or later.
|
||||
The llvm_profgen tool is included in the LLVM compiler itself. It's
|
||||
important to note that the version of llvm_profgen doesn't need to match
|
||||
the version of Clang. It needs to be the LLVM 19 release of Clang
|
||||
or later, or just from the LLVM trunk. ::
|
||||
|
||||
$ llvm-profgen --kernel --binary=<vmlinux> --perfdata=<perf_file> -o <profile_file>
|
||||
|
||||
or ::
|
||||
|
||||
$ create_llvm_prof --binary=<vmlinux> --profile=<perf_file> --format=extbinary --out=<profile_file>
|
||||
|
||||
Note that multiple AutoFDO profile files can be merged into one via::
|
||||
|
||||
$ llvm-profdata merge -o <profile_file> <profile_1> <profile_2> ... <profile_n>
|
||||
|
||||
6) Rebuild the kernel using the AutoFDO profile file with the same config as step 1,
|
||||
(Note CONFIG_AUTOFDO_CLANG needs to be enabled)::
|
||||
|
||||
$ make LLVM=1 CLANG_AUTOFDO_PROFILE=<profile_file>
|
||||
@@ -34,7 +34,6 @@ Documentation/dev-tools/testing-overview.rst
|
||||
ktap
|
||||
checkuapi
|
||||
gpio-sloppy-logic-analyzer
|
||||
autofdo
|
||||
|
||||
|
||||
.. only:: subproject and html
|
||||
|
||||
@@ -18,15 +18,6 @@ KUnit - Linux Kernel Unit Testing
|
||||
faq
|
||||
running_tips
|
||||
|
||||
.. warning::
|
||||
AOSP only supports running tests loaded with modules. Built-in
|
||||
test execution support has been disabled. In addition, in order
|
||||
to fully enable running module loaded tests both CONFIG_KUNIT
|
||||
needs to be enabled and kernel command line argument
|
||||
`kunit.enable` needs to be set to 1.
|
||||
|
||||
The remaining KUnit documentation has been left as-is.
|
||||
|
||||
This section details the kernel unit testing framework.
|
||||
|
||||
Introduction
|
||||
|
||||
@@ -1,99 +0,0 @@
|
||||
dm_bow (backup on write)
|
||||
========================
|
||||
|
||||
dm_bow is a device mapper driver that uses the free space on a device to back up
|
||||
data that is overwritten. The changes can then be committed by a simple state
|
||||
change, or rolled back by removing the dm_bow device and running a command line
|
||||
utility over the underlying device.
|
||||
|
||||
dm_bow has three states, set by writing ‘1’ or ‘2’ to /sys/block/dm-?/bow/state.
|
||||
It is only possible to go from state 0 (initial state) to state 1, and then from
|
||||
state 1 to state 2.
|
||||
|
||||
State 0: dm_bow collects all trims to the device and assumes that these mark
|
||||
free space on the overlying file system that can be safely used. Typically the
|
||||
mount code would create the dm_bow device, mount the file system, call the
|
||||
FITRIM ioctl on the file system then switch to state 1. These trims are not
|
||||
propagated to the underlying device.
|
||||
|
||||
State 1: All writes to the device cause the underlying data to be backed up to
|
||||
the free (trimmed) area as needed in such a way as they can be restored.
|
||||
However, the writes, with one exception, then happen exactly as they would
|
||||
without dm_bow, so the device is always in a good final state. The exception is
|
||||
that sector 0 is used to keep a log of the latest changes, both to indicate that
|
||||
we are in this state and to allow rollback. See below for all details. If there
|
||||
isn't enough free space, writes are failed with -ENOSPC.
|
||||
|
||||
State 2: The transition to state 2 triggers replacing the special sector 0 with
|
||||
the normal sector 0, and the freeing of all state information. dm_bow then
|
||||
becomes a pass-through driver, allowing the device to continue to be used with
|
||||
minimal performance impact.
|
||||
|
||||
Usage
|
||||
=====
|
||||
dm-bow takes one command line parameter, the name of the underlying device.
|
||||
|
||||
dm-bow will typically be used in the following way. dm-bow will be loaded with a
|
||||
suitable underlying device and the resultant device will be mounted. A file
|
||||
system trim will be issued via the FITRIM ioctl, then the device will be
|
||||
switched to state 1. The file system will now be used as normal. At some point,
|
||||
the changes can either be committed by switching to state 2, or rolled back by
|
||||
unmounting the file system, removing the dm-bow device and running the command
|
||||
line utility. Note that rebooting the device will be equivalent to unmounting
|
||||
and removing, but the command line utility must still be run
|
||||
|
||||
Details of operation in state 1
|
||||
===============================
|
||||
|
||||
dm_bow maintains a type for all sectors. A sector can be any of:
|
||||
|
||||
SECTOR0
|
||||
SECTOR0_CURRENT
|
||||
UNCHANGED
|
||||
FREE
|
||||
CHANGED
|
||||
BACKUP
|
||||
|
||||
SECTOR0 is the first sector on the device, and is used to hold the log of
|
||||
changes. This is the one exception.
|
||||
|
||||
SECTOR0_CURRENT is a sector picked from the FREE sectors, and is where reads and
|
||||
writes from the true sector zero are redirected to. Note that like any backup
|
||||
sector, if the sector is written to directly, it must be moved again.
|
||||
|
||||
UNCHANGED means that the sector has not been changed since we entered state 1.
|
||||
Thus if it is written to or trimmed, the contents must first be backed up.
|
||||
|
||||
FREE means that the sector was trimmed in state 0 and has not yet been written
|
||||
to or used for backup. On being written to, a FREE sector is changed to CHANGED.
|
||||
|
||||
CHANGED means that the sector has been modified, and can be further modified
|
||||
without further backup.
|
||||
|
||||
BACKUP means that this is a free sector being used as a backup. On being written
|
||||
to, the contents must first be backed up again.
|
||||
|
||||
All backup operations are logged to the first sector. The log sector has the
|
||||
format:
|
||||
--------------------------------------------------------
|
||||
| Magic | Count | Sequence | Log entry | Log entry | …
|
||||
--------------------------------------------------------
|
||||
|
||||
Magic is a magic number. Count is the number of log entries. Sequence is 0
|
||||
initially. A log entry is
|
||||
|
||||
-----------------------------------
|
||||
| Source | Dest | Size | Checksum |
|
||||
-----------------------------------
|
||||
|
||||
When SECTOR0 is full, the log sector is backed up and another empty log sector
|
||||
created with sequence number one higher. The first entry in any log entry with
|
||||
sequence > 0 therefore must be the log of the backing up of the previous log
|
||||
sector. Note that sequence is not strictly needed, but is a useful sanity check
|
||||
and potentially limits the time spent trying to restore a corrupted snapshot.
|
||||
|
||||
On entering state 1, dm_bow has a list of free sectors. All other sectors are
|
||||
unchanged. Sector0_current is selected from the free sectors and the contents of
|
||||
sector 0 are copied there. The sector 0 is backed up, which triggers the first
|
||||
log entry to be written.
|
||||
|
||||
@@ -55,7 +55,8 @@ properties:
|
||||
- const: arm,primecell
|
||||
|
||||
reg:
|
||||
maxItems: 1
|
||||
minItems: 1
|
||||
maxItems: 2
|
||||
|
||||
clocks:
|
||||
maxItems: 1
|
||||
|
||||
@@ -41,7 +41,8 @@ properties:
|
||||
- const: arm,primecell
|
||||
|
||||
reg:
|
||||
maxItems: 1
|
||||
minItems: 1
|
||||
maxItems: 2
|
||||
|
||||
qcom,dsb-element-bits:
|
||||
description:
|
||||
|
||||
@@ -39,11 +39,11 @@ properties:
|
||||
|
||||
reg:
|
||||
minItems: 2
|
||||
maxItems: 10
|
||||
maxItems: 9
|
||||
|
||||
reg-names:
|
||||
minItems: 2
|
||||
maxItems: 10
|
||||
maxItems: 9
|
||||
|
||||
interrupts:
|
||||
maxItems: 1
|
||||
@@ -134,36 +134,6 @@ allOf:
|
||||
- qcom,qdu1000-llcc
|
||||
- qcom,sc8180x-llcc
|
||||
- qcom,sc8280xp-llcc
|
||||
then:
|
||||
properties:
|
||||
reg:
|
||||
items:
|
||||
- description: LLCC0 base register region
|
||||
- description: LLCC1 base register region
|
||||
- description: LLCC2 base register region
|
||||
- description: LLCC3 base register region
|
||||
- description: LLCC4 base register region
|
||||
- description: LLCC5 base register region
|
||||
- description: LLCC6 base register region
|
||||
- description: LLCC7 base register region
|
||||
- description: LLCC broadcast base register region
|
||||
reg-names:
|
||||
items:
|
||||
- const: llcc0_base
|
||||
- const: llcc1_base
|
||||
- const: llcc2_base
|
||||
- const: llcc3_base
|
||||
- const: llcc4_base
|
||||
- const: llcc5_base
|
||||
- const: llcc6_base
|
||||
- const: llcc7_base
|
||||
- const: llcc_broadcast_base
|
||||
|
||||
- if:
|
||||
properties:
|
||||
compatible:
|
||||
contains:
|
||||
enum:
|
||||
- qcom,x1e80100-llcc
|
||||
then:
|
||||
properties:
|
||||
@@ -178,7 +148,6 @@ allOf:
|
||||
- description: LLCC6 base register region
|
||||
- description: LLCC7 base register region
|
||||
- description: LLCC broadcast base register region
|
||||
- description: LLCC broadcast AND register region
|
||||
reg-names:
|
||||
items:
|
||||
- const: llcc0_base
|
||||
@@ -190,7 +159,6 @@ allOf:
|
||||
- const: llcc6_base
|
||||
- const: llcc7_base
|
||||
- const: llcc_broadcast_base
|
||||
- const: llcc_broadcast_and_base
|
||||
|
||||
- if:
|
||||
properties:
|
||||
|
||||
@@ -26,21 +26,9 @@ properties:
|
||||
description:
|
||||
Specifies the reference clock(s) from which the output frequency is
|
||||
derived. This must either reference one clock if only the first clock
|
||||
input is connected or two if both clock inputs are connected. The last
|
||||
clock is the AXI bus clock that needs to be enabled so we can access the
|
||||
core registers.
|
||||
minItems: 2
|
||||
maxItems: 3
|
||||
|
||||
clock-names:
|
||||
oneOf:
|
||||
- items:
|
||||
- const: clkin1
|
||||
- const: s_axi_aclk
|
||||
- items:
|
||||
- const: clkin1
|
||||
- const: clkin2
|
||||
- const: s_axi_aclk
|
||||
input is connected or two if both clock inputs are connected.
|
||||
minItems: 1
|
||||
maxItems: 2
|
||||
|
||||
'#clock-cells':
|
||||
const: 0
|
||||
@@ -52,7 +40,6 @@ required:
|
||||
- compatible
|
||||
- reg
|
||||
- clocks
|
||||
- clock-names
|
||||
- '#clock-cells'
|
||||
|
||||
additionalProperties: false
|
||||
@@ -63,6 +50,5 @@ examples:
|
||||
compatible = "adi,axi-clkgen-2.00.a";
|
||||
#clock-cells = <0>;
|
||||
reg = <0xff000000 0x1000>;
|
||||
clocks = <&osc 1>, <&clkc 15>;
|
||||
clock-names = "clkin1", "s_axi_aclk";
|
||||
clocks = <&osc 1>;
|
||||
};
|
||||
|
||||
@@ -16,7 +16,6 @@ description: |
|
||||
properties:
|
||||
compatible:
|
||||
enum:
|
||||
- fsl,imx91-ccm
|
||||
- fsl,imx93-ccm
|
||||
|
||||
reg:
|
||||
|
||||
@@ -253,53 +253,6 @@ properties:
|
||||
|
||||
additionalProperties: false
|
||||
|
||||
sink-wait-cap-time-ms:
|
||||
description: Represents the max time in ms that USB Type-C port (in sink
|
||||
role) should wait for the port partner (source role) to send source caps.
|
||||
SinkWaitCap timer starts when port in sink role attaches to the source.
|
||||
This timer will stop when sink receives PD source cap advertisement before
|
||||
timeout in which case it'll move to capability negotiation stage. A
|
||||
timeout leads to a hard reset message by the port.
|
||||
minimum: 310
|
||||
maximum: 620
|
||||
default: 310
|
||||
|
||||
ps-source-off-time-ms:
|
||||
description: Represents the max time in ms that a DRP in source role should
|
||||
take to turn off power after the PsSourceOff timer starts. PsSourceOff
|
||||
timer starts when a sink's PHY layer receives EOP of the GoodCRC message
|
||||
(corresponding to an Accept message sent in response to a PR_Swap or a
|
||||
FR_Swap request). This timer stops when last bit of GoodCRC EOP
|
||||
corresponding to the received PS_RDY message is transmitted by the PHY
|
||||
layer. A timeout shall lead to error recovery in the type-c port.
|
||||
minimum: 750
|
||||
maximum: 920
|
||||
default: 920
|
||||
|
||||
cc-debounce-time-ms:
|
||||
description: Represents the max time in ms that a port shall wait to
|
||||
determine if it's attached to a partner.
|
||||
minimum: 100
|
||||
maximum: 200
|
||||
default: 200
|
||||
|
||||
sink-bc12-completion-time-ms:
|
||||
description: Represents the max time in ms that a port in sink role takes
|
||||
to complete Battery Charger (BC1.2) Detection. BC1.2 detection is a
|
||||
hardware mechanism, which in some TCPC implementations, can run in
|
||||
parallel once the Type-C connection state machine reaches the "potential
|
||||
connect as sink" state. In TCPCs where this causes delays to respond to
|
||||
the incoming PD messages, sink-bc12-completion-time-ms is used to delay
|
||||
PD negotiation till BC1.2 detection completes.
|
||||
default: 0
|
||||
|
||||
pd-revision:
|
||||
description: Specifies the maximum USB PD revision and version supported by
|
||||
the connector. This property is specified in the following order;
|
||||
<revision_major, revision_minor, version_major, version_minor>.
|
||||
$ref: /schemas/types.yaml#/definitions/uint8-array
|
||||
maxItems: 4
|
||||
|
||||
dependencies:
|
||||
sink-vdos-v1: [ sink-vdos ]
|
||||
sink-vdos: [ sink-vdos-v1 ]
|
||||
@@ -427,7 +380,7 @@ examples:
|
||||
};
|
||||
|
||||
# USB-C connector attached to a typec port controller(ptn5110), which has
|
||||
# power delivery support, explicitly defines time properties and enables drp.
|
||||
# power delivery support and enables drp.
|
||||
- |
|
||||
#include <dt-bindings/usb/pd.h>
|
||||
typec: ptn5110 {
|
||||
@@ -440,10 +393,6 @@ examples:
|
||||
sink-pdos = <PDO_FIXED(5000, 2000, PDO_FIXED_USB_COMM)
|
||||
PDO_VAR(5000, 12000, 2000)>;
|
||||
op-sink-microwatt = <10000000>;
|
||||
sink-wait-cap-time-ms = <465>;
|
||||
ps-source-off-time-ms = <835>;
|
||||
cc-debounce-time-ms = <101>;
|
||||
sink-bc12-completion-time-ms = <500>;
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
@@ -1,48 +0,0 @@
|
||||
# SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause
|
||||
%YAML 1.2
|
||||
---
|
||||
$id: http://devicetree.org/schemas/cpufreq/qemu,virtual-cpufreq.yaml#
|
||||
$schema: http://devicetree.org/meta-schemas/core.yaml#
|
||||
|
||||
title: Virtual CPUFreq
|
||||
|
||||
maintainers:
|
||||
- David Dai <davidai@google.com>
|
||||
- Saravana Kannan <saravanak@google.com>
|
||||
|
||||
description:
|
||||
Virtual CPUFreq is a virtualized driver in guest kernels that sends performance
|
||||
selection of its vCPUs as a hint to the host through MMIO regions. Each vCPU
|
||||
is associated with a performance domain which can be shared with other vCPUs.
|
||||
Each performance domain has its own set of registers for performance controls.
|
||||
|
||||
properties:
|
||||
compatible:
|
||||
const: qemu,virtual-cpufreq
|
||||
|
||||
reg:
|
||||
maxItems: 1
|
||||
description:
|
||||
Address and size of region containing performance controls for each of the
|
||||
performance domains. Regions for each performance domain is placed
|
||||
contiguously and contain registers for controlling DVFS(Dynamic Frequency
|
||||
and Voltage) characteristics. The size of the region is proportional to
|
||||
total number of performance domains.
|
||||
|
||||
required:
|
||||
- compatible
|
||||
- reg
|
||||
|
||||
additionalProperties: false
|
||||
|
||||
examples:
|
||||
- |
|
||||
soc {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
|
||||
cpufreq@1040000 {
|
||||
compatible = "qemu,virtual-cpufreq";
|
||||
reg = <0x1040000 0x2000>;
|
||||
};
|
||||
};
|
||||
@@ -90,7 +90,7 @@ properties:
|
||||
adi,dsi-lanes:
|
||||
description: Number of DSI data lanes connected to the DSI host.
|
||||
$ref: /schemas/types.yaml#/definitions/uint32
|
||||
enum: [ 2, 3, 4 ]
|
||||
enum: [ 1, 2, 3, 4 ]
|
||||
|
||||
"#sound-dai-cells":
|
||||
const: 0
|
||||
|
||||
@@ -1,49 +0,0 @@
|
||||
# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
|
||||
%YAML 1.2
|
||||
---
|
||||
$id: http://devicetree.org/schemas/firmware/gunyah-cma-mem.yaml#
|
||||
$schema: http://devicetree.org/meta-schemas/core.yaml#
|
||||
|
||||
title: Contiguous memory allocator for Virtual Machines
|
||||
|
||||
maintainers:
|
||||
- Prakruthi Deepak Heragu <quic_pheragu@quicinc.com>
|
||||
- Elliot Berman <quic_eberman@quicinc.com>
|
||||
|
||||
description: |+
|
||||
gunyah-cma-mem is a CMA memory manager that allows VMMs to use
|
||||
contiguous memory to backup Virtual Machines running on Gunyah. These
|
||||
regions are pre-defined by the firmware to have special attributes
|
||||
like memory encryption.
|
||||
|
||||
properties:
|
||||
compatible:
|
||||
- const: gunyah-cma-vm-mem
|
||||
|
||||
memory-region:
|
||||
$ref: '/schemas/types.yaml#/definitions/phandle'
|
||||
items:
|
||||
- description: |
|
||||
Describes the specific reserved memory region that this allocator
|
||||
will allocate memory from for a Virtual Machine. Refer to
|
||||
Documentation/devicetree/bindings/reserved-memory/reserved-memory.txt
|
||||
for more information.
|
||||
|
||||
memory-region-names:
|
||||
$ref: /schemas/types.yaml#/definitions/string-array
|
||||
items:
|
||||
- description: Name of the memory-region to be used by VMM for operation
|
||||
|
||||
required:
|
||||
- compatible
|
||||
- memory-region
|
||||
- memory-region-names
|
||||
|
||||
example:
|
||||
- |
|
||||
gunyah-cma-mem {
|
||||
compatible = "gunyah-cma-vm-mem";
|
||||
memory-region = <&trust_ui_vm_mem &oem_vm_mem>;
|
||||
memory-region-names = "trustedvm_cma" , "oemvm_cma";
|
||||
};
|
||||
|
||||
@@ -1,82 +0,0 @@
|
||||
# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
|
||||
%YAML 1.2
|
||||
---
|
||||
$id: http://devicetree.org/schemas/firmware/gunyah-hypervisor.yaml#
|
||||
$schema: http://devicetree.org/meta-schemas/core.yaml#
|
||||
|
||||
title: Gunyah Hypervisor
|
||||
|
||||
maintainers:
|
||||
- Prakruthi Deepak Heragu <quic_pheragu@quicinc.com>
|
||||
- Elliot Berman <quic_eberman@quicinc.com>
|
||||
|
||||
description: |+
|
||||
Gunyah virtual machines use this information to determine the capability IDs
|
||||
of the message queues used to communicate with the Gunyah Resource Manager.
|
||||
See also: https://github.com/quic/gunyah-resource-manager/blob/develop/src/vm_creation/dto_construct.c
|
||||
|
||||
properties:
|
||||
compatible:
|
||||
const: gunyah-hypervisor
|
||||
|
||||
"#address-cells":
|
||||
description: Number of cells needed to represent 64-bit capability IDs.
|
||||
const: 2
|
||||
|
||||
"#size-cells":
|
||||
description: must be 0, because capability IDs are not memory address
|
||||
ranges and do not have a size.
|
||||
const: 0
|
||||
|
||||
patternProperties:
|
||||
"^gunyah-resource-mgr(@.*)?":
|
||||
type: object
|
||||
description:
|
||||
Resource Manager node which is required to communicate to Resource
|
||||
Manager VM using Gunyah Message Queues.
|
||||
|
||||
properties:
|
||||
compatible:
|
||||
const: gunyah-resource-manager
|
||||
|
||||
reg:
|
||||
items:
|
||||
- description: Gunyah capability ID of the TX message queue
|
||||
- description: Gunyah capability ID of the RX message queue
|
||||
|
||||
interrupts:
|
||||
items:
|
||||
- description: Interrupt for the TX message queue
|
||||
- description: Interrupt for the RX message queue
|
||||
|
||||
additionalProperties: false
|
||||
|
||||
required:
|
||||
- compatible
|
||||
- reg
|
||||
- interrupts
|
||||
|
||||
additionalProperties: false
|
||||
|
||||
required:
|
||||
- compatible
|
||||
- "#address-cells"
|
||||
- "#size-cells"
|
||||
|
||||
examples:
|
||||
- |
|
||||
#include <dt-bindings/interrupt-controller/arm-gic.h>
|
||||
|
||||
hypervisor {
|
||||
#address-cells = <2>;
|
||||
#size-cells = <0>;
|
||||
compatible = "gunyah-hypervisor";
|
||||
|
||||
gunyah-resource-mgr@0 {
|
||||
compatible = "gunyah-resource-manager";
|
||||
interrupts = <GIC_SPI 3 IRQ_TYPE_EDGE_RISING>, /* TX allowed IRQ */
|
||||
<GIC_SPI 4 IRQ_TYPE_EDGE_RISING>; /* RX requested IRQ */
|
||||
reg = <0x00000000 0x00000000>, /* TX capability ID */
|
||||
<0x00000000 0x00000001>; /* RX capability ID */
|
||||
};
|
||||
};
|
||||
@@ -1,34 +0,0 @@
|
||||
# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
|
||||
%YAML 1.2
|
||||
---
|
||||
$id: http://devicetree.org/schemas/firmware/mediatek,geniezone.yaml#
|
||||
$schema: http://devicetree.org/meta-schemas/core.yaml#
|
||||
|
||||
title: MediaTek GenieZone hypervisor
|
||||
|
||||
maintainers:
|
||||
- Yingshiuan Pan <yingshiuan.pan@mediatek.com>
|
||||
|
||||
description:
|
||||
GenieZone is a proprietary type-I hypervisor firmware developed by MediaTek,
|
||||
providing an isolated execution environment for mTEE (MediaTek Trusted
|
||||
Execution Environment) and AVF (Android Virtualization Framework) virtual
|
||||
machines. This binding facilitates the integration of GenieZone into the
|
||||
Android Virtualization Framework (AVF) with Crosvm as the VMM. The driver
|
||||
exposes hypervisor control interfaces to the VMM for managing virtual
|
||||
machine lifecycles and assisting virtual device emulation.
|
||||
|
||||
properties:
|
||||
compatible:
|
||||
const: mediatek,geniezone
|
||||
|
||||
required:
|
||||
- compatible
|
||||
|
||||
additionalProperties: false
|
||||
|
||||
examples:
|
||||
- |
|
||||
hypervisor {
|
||||
compatible = "mediatek,geniezone";
|
||||
};
|
||||
@@ -97,10 +97,7 @@ properties:
|
||||
|
||||
resets:
|
||||
items:
|
||||
- description:
|
||||
Module reset. This property is optional for controllers in Tegra194,
|
||||
Tegra234 etc where an internal software reset is available as an
|
||||
alternative.
|
||||
- description: module reset
|
||||
|
||||
reset-names:
|
||||
items:
|
||||
@@ -119,13 +116,6 @@ properties:
|
||||
- const: rx
|
||||
- const: tx
|
||||
|
||||
required:
|
||||
- compatible
|
||||
- reg
|
||||
- interrupts
|
||||
- clocks
|
||||
- clock-names
|
||||
|
||||
allOf:
|
||||
- $ref: /schemas/i2c/i2c-controller.yaml
|
||||
- if:
|
||||
@@ -179,18 +169,6 @@ allOf:
|
||||
properties:
|
||||
power-domains: false
|
||||
|
||||
- if:
|
||||
not:
|
||||
properties:
|
||||
compatible:
|
||||
contains:
|
||||
enum:
|
||||
- nvidia,tegra194-i2c
|
||||
then:
|
||||
required:
|
||||
- resets
|
||||
- reset-names
|
||||
|
||||
unevaluatedProperties: false
|
||||
|
||||
examples:
|
||||
|
||||
@@ -30,7 +30,7 @@ properties:
|
||||
maxItems: 1
|
||||
|
||||
spi-max-frequency:
|
||||
maximum: 66000000
|
||||
maximum: 30000000
|
||||
|
||||
reset-gpios:
|
||||
maxItems: 1
|
||||
|
||||
@@ -1,52 +0,0 @@
|
||||
# SPDX-License-Identifier: GPL-2.0-only
|
||||
%YAML 1.2
|
||||
---
|
||||
title: pKVM pvIOMMU
|
||||
|
||||
maintainers:
|
||||
- Mostafa Saleh <smostafa@google.org>
|
||||
|
||||
description: |+
|
||||
pvIOMMU is a paravirtual IOMMU implemented through arm64 hypercalls (HVC).
|
||||
What distinguishes it from other paravirtual IOMMUs (virtio-iommu)
|
||||
is that it has very simple transport which makes it easy for
|
||||
hypervisors with a small TCB as in confidential computing to implement
|
||||
it without complexity and with lower performance overhead.
|
||||
pvIOMMU was initially developed for protected KVM (pKVM), but it has no
|
||||
KVM specific interface, so it can be implemented by other hypervisors
|
||||
also.
|
||||
|
||||
properties:
|
||||
$nodename:
|
||||
pattern: "^iommu@[0-9a-f]*"
|
||||
compatible:
|
||||
const: pkvm,pviommu
|
||||
|
||||
id:
|
||||
maxItems: 1
|
||||
|
||||
'#iommu-cells':
|
||||
enum: [ 1, 2 ]
|
||||
description: |
|
||||
See Documentation/devicetree/bindings/iommu/iommu.txt for details. With a
|
||||
value of 1, each IOMMU specifier represents a distinct stream ID emitted
|
||||
by that device into the relevant SMMU.
|
||||
|
||||
pvIOMMU would assume each device belongs to a different group, to describe
|
||||
iommu groups, it is optionally passed in the second field of "iommus", where
|
||||
devices having the same ID are part of the same group.
|
||||
|
||||
required:
|
||||
- compatible
|
||||
- id
|
||||
- '#iommu-cells'
|
||||
|
||||
additionalProperties: false
|
||||
|
||||
examples:
|
||||
- |+
|
||||
iommu@55 {
|
||||
compatible = "pkvm,pviommu";
|
||||
id = <0x55>;
|
||||
#iommu-cells = <1>;
|
||||
};
|
||||
@@ -27,7 +27,7 @@ properties:
|
||||
description: |
|
||||
For multicolor LED support this property should be defined as either
|
||||
LED_COLOR_ID_RGB or LED_COLOR_ID_MULTI which can be found in
|
||||
include/dt-bindings/leds/common.h.
|
||||
include/linux/leds/common.h.
|
||||
enum: [ 8, 9 ]
|
||||
|
||||
required:
|
||||
|
||||
@@ -71,7 +71,7 @@ properties:
|
||||
description:
|
||||
Any lane can be inverted or not.
|
||||
minItems: 1
|
||||
maxItems: 3
|
||||
maxItems: 2
|
||||
|
||||
required:
|
||||
- data-lanes
|
||||
|
||||
@@ -50,15 +50,15 @@ properties:
|
||||
minimum: 0
|
||||
maximum: 1
|
||||
|
||||
rohm,charger-sense-resistor-micro-ohms:
|
||||
minimum: 10000
|
||||
maximum: 50000
|
||||
rohm,charger-sense-resistor-ohms:
|
||||
minimum: 10000000
|
||||
maximum: 50000000
|
||||
description: |
|
||||
BD71815 has SAR ADC for measuring charging currents. External sense
|
||||
resistor (RSENSE in data sheet) should be used. If something other
|
||||
but a 30 mOhm resistor is used the resistance value should be given
|
||||
here in micro Ohms.
|
||||
default: 30000
|
||||
BD71827 and BD71828 have SAR ADC for measuring charging currents.
|
||||
External sense resistor (RSENSE in data sheet) should be used. If
|
||||
something other but 30MOhm resistor is used the resistance value
|
||||
should be given here in Ohms.
|
||||
default: 30000000
|
||||
|
||||
regulators:
|
||||
$ref: /schemas/regulator/rohm,bd71815-regulator.yaml
|
||||
@@ -67,7 +67,7 @@ properties:
|
||||
|
||||
gpio-reserved-ranges:
|
||||
description: |
|
||||
Usage of BD71815 GPIO pins can be changed via OTP. This property can be
|
||||
Usage of BD71828 GPIO pins can be changed via OTP. This property can be
|
||||
used to mark the pins which should not be configured for GPIO. Please see
|
||||
the ../gpio/gpio.txt for more information.
|
||||
|
||||
@@ -113,7 +113,7 @@ examples:
|
||||
gpio-controller;
|
||||
#gpio-cells = <2>;
|
||||
|
||||
rohm,charger-sense-resistor-micro-ohms = <10000>;
|
||||
rohm,charger-sense-resistor-ohms = <10000000>;
|
||||
|
||||
regulators {
|
||||
buck1: buck1 {
|
||||
|
||||
@@ -25,7 +25,7 @@ properties:
|
||||
"#address-cells":
|
||||
const: 1
|
||||
description: |
|
||||
The cell is the SDIO function number if a function subnode is used.
|
||||
The cell is the slot ID if a function subnode is used.
|
||||
|
||||
"#size-cells":
|
||||
const: 0
|
||||
|
||||
@@ -170,7 +170,7 @@ allOf:
|
||||
const: renesas,r8a779h0-canfd
|
||||
then:
|
||||
patternProperties:
|
||||
"^channel[4-7]$": false
|
||||
"^channel[5-7]$": false
|
||||
else:
|
||||
if:
|
||||
not:
|
||||
|
||||
@@ -183,13 +183,6 @@ properties:
|
||||
description:
|
||||
Register bits of stop mode control, the format is <&gpr req_gpr req_bit>.
|
||||
|
||||
fsl,pps-channel:
|
||||
$ref: /schemas/types.yaml#/definitions/uint32
|
||||
default: 0
|
||||
description:
|
||||
Specifies to which timer instance the PPS signal is routed.
|
||||
enum: [0, 1, 2, 3]
|
||||
|
||||
mdio:
|
||||
$ref: mdio.yaml#
|
||||
unevaluatedProperties: false
|
||||
|
||||
@@ -149,7 +149,7 @@ allOf:
|
||||
then:
|
||||
properties:
|
||||
clocks:
|
||||
minItems: 6
|
||||
minItems: 4
|
||||
|
||||
clock-names:
|
||||
items:
|
||||
@@ -178,7 +178,7 @@ allOf:
|
||||
then:
|
||||
properties:
|
||||
clocks:
|
||||
minItems: 6
|
||||
minItems: 4
|
||||
|
||||
clock-names:
|
||||
items:
|
||||
@@ -207,7 +207,6 @@ allOf:
|
||||
properties:
|
||||
clocks:
|
||||
minItems: 4
|
||||
maxItems: 4
|
||||
|
||||
clock-names:
|
||||
items:
|
||||
|
||||
@@ -58,7 +58,8 @@ properties:
|
||||
fsl,phy-tx-vboost-level-microvolt:
|
||||
description:
|
||||
Adjust the boosted transmit launch pk-pk differential amplitude
|
||||
enum: [844, 1008, 1156]
|
||||
minimum: 880
|
||||
maximum: 1120
|
||||
|
||||
fsl,phy-comp-dis-tune-percent:
|
||||
description:
|
||||
|
||||
@@ -91,17 +91,14 @@ allOf:
|
||||
- if:
|
||||
properties:
|
||||
compatible:
|
||||
oneOf:
|
||||
# Match without "contains", to skip newer variants which are still
|
||||
# compatible with samsung,exynos7-wakeup-eint
|
||||
- enum:
|
||||
- samsung,exynos4210-wakeup-eint
|
||||
- samsung,exynos7-wakeup-eint
|
||||
- samsung,s5pv210-wakeup-eint
|
||||
- contains:
|
||||
enum:
|
||||
- samsung,exynos5433-wakeup-eint
|
||||
- samsung,exynos7885-wakeup-eint
|
||||
# Match without "contains", to skip newer variants which are still
|
||||
# compatible with samsung,exynos7-wakeup-eint
|
||||
enum:
|
||||
- samsung,s5pv210-wakeup-eint
|
||||
- samsung,exynos4210-wakeup-eint
|
||||
- samsung,exynos5433-wakeup-eint
|
||||
- samsung,exynos7-wakeup-eint
|
||||
- samsung,exynos7885-wakeup-eint
|
||||
then:
|
||||
properties:
|
||||
interrupts:
|
||||
|
||||
@@ -27,31 +27,22 @@ properties:
|
||||
maxItems: 1
|
||||
|
||||
"#pwm-cells":
|
||||
const: 3
|
||||
const: 2
|
||||
|
||||
clocks:
|
||||
minItems: 1
|
||||
maxItems: 2
|
||||
|
||||
clock-names:
|
||||
minItems: 1
|
||||
items:
|
||||
- const: axi
|
||||
- const: ext
|
||||
maxItems: 1
|
||||
|
||||
required:
|
||||
- reg
|
||||
- clocks
|
||||
- clock-names
|
||||
|
||||
unevaluatedProperties: false
|
||||
|
||||
examples:
|
||||
- |
|
||||
pwm@44b00000 {
|
||||
compatible = "adi,axi-pwmgen-2.00.a";
|
||||
reg = <0x44b00000 0x1000>;
|
||||
clocks = <&fpga_clk>, <&spi_clk>;
|
||||
clock-names = "axi", "ext";
|
||||
#pwm-cells = <3>;
|
||||
compatible = "adi,axi-pwmgen-2.00.a";
|
||||
reg = <0x44b00000 0x1000>;
|
||||
clocks = <&spi_clk>;
|
||||
#pwm-cells = <2>;
|
||||
};
|
||||
|
||||
@@ -35,8 +35,8 @@ additionalProperties: false
|
||||
examples:
|
||||
- |
|
||||
pwm: pwm@f0408000 {
|
||||
compatible = "brcm,bcm7038-pwm";
|
||||
reg = <0xf0408000 0x28>;
|
||||
#pwm-cells = <2>;
|
||||
clocks = <&upg_fixed>;
|
||||
compatible = "brcm,bcm7038-pwm";
|
||||
reg = <0xf0408000 0x28>;
|
||||
#pwm-cells = <2>;
|
||||
clocks = <&upg_fixed>;
|
||||
};
|
||||
|
||||
@@ -43,9 +43,9 @@ examples:
|
||||
#include <dt-bindings/clock/bcm281xx.h>
|
||||
|
||||
pwm@3e01a000 {
|
||||
compatible = "brcm,bcm11351-pwm", "brcm,kona-pwm";
|
||||
reg = <0x3e01a000 0xcc>;
|
||||
clocks = <&slave_ccu BCM281XX_SLAVE_CCU_PWM>;
|
||||
#pwm-cells = <3>;
|
||||
compatible = "brcm,bcm11351-pwm", "brcm,kona-pwm";
|
||||
reg = <0x3e01a000 0xcc>;
|
||||
clocks = <&slave_ccu BCM281XX_SLAVE_CCU_PWM>;
|
||||
#pwm-cells = <3>;
|
||||
};
|
||||
...
|
||||
|
||||
@@ -33,7 +33,7 @@ patternProperties:
|
||||
|
||||
"^ldo-v(camio18|aud28|aux18|io18|io28|rf12|rf18|cn18|cn28|fe28)$":
|
||||
type: object
|
||||
$ref: regulator.yaml#
|
||||
$ref: fixed-regulator.yaml#
|
||||
unevaluatedProperties: false
|
||||
description:
|
||||
Properties for single fixed LDO regulator.
|
||||
@@ -112,6 +112,7 @@ examples:
|
||||
regulator-enable-ramp-delay = <220>;
|
||||
};
|
||||
mt6357_vfe28_reg: ldo-vfe28 {
|
||||
compatible = "regulator-fixed";
|
||||
regulator-name = "vfe28";
|
||||
regulator-min-microvolt = <2800000>;
|
||||
regulator-max-microvolt = <2800000>;
|
||||
@@ -124,12 +125,14 @@ examples:
|
||||
regulator-enable-ramp-delay = <110>;
|
||||
};
|
||||
mt6357_vrf18_reg: ldo-vrf18 {
|
||||
compatible = "regulator-fixed";
|
||||
regulator-name = "vrf18";
|
||||
regulator-min-microvolt = <1800000>;
|
||||
regulator-max-microvolt = <1800000>;
|
||||
regulator-enable-ramp-delay = <110>;
|
||||
};
|
||||
mt6357_vrf12_reg: ldo-vrf12 {
|
||||
compatible = "regulator-fixed";
|
||||
regulator-name = "vrf12";
|
||||
regulator-min-microvolt = <1200000>;
|
||||
regulator-max-microvolt = <1200000>;
|
||||
@@ -154,12 +157,14 @@ examples:
|
||||
regulator-enable-ramp-delay = <264>;
|
||||
};
|
||||
mt6357_vcn28_reg: ldo-vcn28 {
|
||||
compatible = "regulator-fixed";
|
||||
regulator-name = "vcn28";
|
||||
regulator-min-microvolt = <2800000>;
|
||||
regulator-max-microvolt = <2800000>;
|
||||
regulator-enable-ramp-delay = <264>;
|
||||
};
|
||||
mt6357_vcn18_reg: ldo-vcn18 {
|
||||
compatible = "regulator-fixed";
|
||||
regulator-name = "vcn18";
|
||||
regulator-min-microvolt = <1800000>;
|
||||
regulator-max-microvolt = <1800000>;
|
||||
@@ -178,6 +183,7 @@ examples:
|
||||
regulator-enable-ramp-delay = <264>;
|
||||
};
|
||||
mt6357_vcamio_reg: ldo-vcamio18 {
|
||||
compatible = "regulator-fixed";
|
||||
regulator-name = "vcamio";
|
||||
regulator-min-microvolt = <1800000>;
|
||||
regulator-max-microvolt = <1800000>;
|
||||
@@ -206,24 +212,28 @@ examples:
|
||||
regulator-always-on;
|
||||
};
|
||||
mt6357_vaux18_reg: ldo-vaux18 {
|
||||
compatible = "regulator-fixed";
|
||||
regulator-name = "vaux18";
|
||||
regulator-min-microvolt = <1800000>;
|
||||
regulator-max-microvolt = <1800000>;
|
||||
regulator-enable-ramp-delay = <264>;
|
||||
};
|
||||
mt6357_vaud28_reg: ldo-vaud28 {
|
||||
compatible = "regulator-fixed";
|
||||
regulator-name = "vaud28";
|
||||
regulator-min-microvolt = <2800000>;
|
||||
regulator-max-microvolt = <2800000>;
|
||||
regulator-enable-ramp-delay = <264>;
|
||||
};
|
||||
mt6357_vio28_reg: ldo-vio28 {
|
||||
compatible = "regulator-fixed";
|
||||
regulator-name = "vio28";
|
||||
regulator-min-microvolt = <2800000>;
|
||||
regulator-max-microvolt = <2800000>;
|
||||
regulator-enable-ramp-delay = <264>;
|
||||
};
|
||||
mt6357_vio18_reg: ldo-vio18 {
|
||||
compatible = "regulator-fixed";
|
||||
regulator-name = "vio18";
|
||||
regulator-min-microvolt = <1800000>;
|
||||
regulator-max-microvolt = <1800000>;
|
||||
|
||||
@@ -35,6 +35,10 @@ properties:
|
||||
$ref: regulator.yaml#
|
||||
unevaluatedProperties: false
|
||||
|
||||
properties:
|
||||
regulator-compatible:
|
||||
pattern: "^vbuck[1-4]$"
|
||||
|
||||
additionalProperties: false
|
||||
|
||||
required:
|
||||
@@ -52,6 +56,7 @@ examples:
|
||||
|
||||
regulators {
|
||||
vbuck1 {
|
||||
regulator-compatible = "vbuck1";
|
||||
regulator-min-microvolt = <300000>;
|
||||
regulator-max-microvolt = <1193750>;
|
||||
regulator-enable-ramp-delay = <256>;
|
||||
@@ -59,6 +64,7 @@ examples:
|
||||
};
|
||||
|
||||
vbuck3 {
|
||||
regulator-compatible = "vbuck3";
|
||||
regulator-min-microvolt = <300000>;
|
||||
regulator-max-microvolt = <1193750>;
|
||||
regulator-enable-ramp-delay = <256>;
|
||||
|
||||
@@ -22,7 +22,7 @@ description:
|
||||
Each sub-node is identified using the node's name, with valid values listed
|
||||
for each of the pmics below.
|
||||
|
||||
For mp5496, s1, s2, l2, l5
|
||||
For mp5496, s1, s2
|
||||
|
||||
For pm2250, s1, s2, s3, s4, l1, l2, l3, l4, l5, l6, l7, l8, l9, l10, l11,
|
||||
l12, l13, l14, l15, l16, l17, l18, l19, l20, l21, l22
|
||||
|
||||
@@ -45,7 +45,7 @@ allOf:
|
||||
- ns16550
|
||||
- ns16550a
|
||||
then:
|
||||
oneOf:
|
||||
anyOf:
|
||||
- required: [ clock-frequency ]
|
||||
- required: [ clocks ]
|
||||
|
||||
|
||||
@@ -18,15 +18,16 @@ properties:
|
||||
description: prop-encoded-array <a b>
|
||||
$ref: /schemas/types.yaml#/definitions/uint32-array
|
||||
items:
|
||||
- description: Delay between rts signal and beginning of data sent in
|
||||
milliseconds. It corresponds to the delay before sending data.
|
||||
default: 0
|
||||
maximum: 100
|
||||
- description: Delay between end of data sent and rts signal in milliseconds.
|
||||
It corresponds to the delay after sending data and actual release
|
||||
of the line.
|
||||
default: 0
|
||||
maximum: 100
|
||||
items:
|
||||
- description: Delay between rts signal and beginning of data sent in
|
||||
milliseconds. It corresponds to the delay before sending data.
|
||||
default: 0
|
||||
maximum: 100
|
||||
- description: Delay between end of data sent and rts signal in milliseconds.
|
||||
It corresponds to the delay after sending data and actual release
|
||||
of the line.
|
||||
default: 0
|
||||
maximum: 100
|
||||
|
||||
rs485-rts-active-high:
|
||||
description: drive RTS high when sending (this is the default).
|
||||
|
||||
@@ -7,7 +7,7 @@ $schema: http://devicetree.org/meta-schemas/core.yaml#
|
||||
title: Freescale Layerscape Reset Registers Module
|
||||
|
||||
maintainers:
|
||||
- Frank Li <Frank.Li@nxp.com>
|
||||
- Frank Li
|
||||
|
||||
description:
|
||||
Reset Module includes chip reset, service processor control and Reset Control
|
||||
|
||||
@@ -50,7 +50,7 @@ required:
|
||||
- compatible
|
||||
|
||||
allOf:
|
||||
- $ref: /schemas/reserved-memory/reserved-memory.yaml
|
||||
- $ref: reserved-memory.yaml
|
||||
|
||||
unevaluatedProperties: false
|
||||
|
||||
@@ -61,7 +61,7 @@ examples:
|
||||
#size-cells = <2>;
|
||||
|
||||
qman-fqd {
|
||||
compatible = "fsl,qman-fqd";
|
||||
compatible = "shared-dma-pool";
|
||||
size = <0 0x400000>;
|
||||
alignment = <0 0x400000>;
|
||||
no-map;
|
||||
|
||||
@@ -23,8 +23,8 @@ properties:
|
||||
Indicates how many data pins are used to transmit two channels of PDM
|
||||
signal. 0 means two wires, 1 means one wire. Default value is 0.
|
||||
enum:
|
||||
- 0 # two wires
|
||||
- 1 # one wire
|
||||
- 0 # one wire
|
||||
- 1 # two wires
|
||||
|
||||
mediatek,mic-type-0:
|
||||
$ref: /schemas/types.yaml#/definitions/uint32
|
||||
@@ -53,9 +53,9 @@ additionalProperties: false
|
||||
|
||||
examples:
|
||||
- |
|
||||
mt6359codec: audio-codec {
|
||||
mediatek,dmic-mode = <0>;
|
||||
mediatek,mic-type-0 = <2>;
|
||||
mt6359codec: mt6359codec {
|
||||
mediatek,dmic-mode = <0>;
|
||||
mediatek,mic-type-0 = <2>;
|
||||
};
|
||||
|
||||
...
|
||||
|
||||
@@ -51,7 +51,7 @@ properties:
|
||||
description: Power supply for AVDD, providing 1.8V.
|
||||
|
||||
cpvdd-supply:
|
||||
description: Power supply for CPVDD, providing 1.8V.
|
||||
description: Power supply for CPVDD, providing 3.5V.
|
||||
|
||||
hp-detect-gpios:
|
||||
description:
|
||||
|
||||
@@ -101,12 +101,6 @@ patternProperties:
|
||||
IO mem address range, relative to the SRAM range.
|
||||
maxItems: 1
|
||||
|
||||
reg-io-width:
|
||||
description:
|
||||
The size (in bytes) of the IO accesses that should be performed on the
|
||||
SRAM.
|
||||
enum: [1, 2, 4, 8]
|
||||
|
||||
pool:
|
||||
description:
|
||||
Indicates that the particular reserved SRAM area is addressable
|
||||
|
||||
@@ -14,22 +14,9 @@ allOf:
|
||||
|
||||
properties:
|
||||
compatible:
|
||||
oneOf:
|
||||
- enum:
|
||||
- usb4b4,6504
|
||||
- usb4b4,6506
|
||||
- items:
|
||||
- enum:
|
||||
- usb4b4,6500
|
||||
- usb4b4,6508
|
||||
- const: usb4b4,6504
|
||||
- items:
|
||||
- enum:
|
||||
- usb4b4,6502
|
||||
- usb4b4,6503
|
||||
- usb4b4,6507
|
||||
- usb4b4,650a
|
||||
- const: usb4b4,6506
|
||||
enum:
|
||||
- usb4b4,6504
|
||||
- usb4b4,6506
|
||||
|
||||
reg: true
|
||||
|
||||
|
||||
@@ -69,8 +69,6 @@ examples:
|
||||
PDO_FIXED_DATA_SWAP |
|
||||
PDO_FIXED_DUAL_ROLE)
|
||||
PDO_FIXED(9000, 2000, 0)>;
|
||||
sink-bc12-completion-time-ms = <500>;
|
||||
pd-revision = /bits/ 8 <0x03 0x01 0x01 0x08>;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
@@ -581,8 +581,6 @@ patternProperties:
|
||||
description: GlobalTop Technology, Inc.
|
||||
"^gmt,.*":
|
||||
description: Global Mixed-mode Technology, Inc.
|
||||
"^gocontroll,.*":
|
||||
description: GOcontroll Modular Embedded Electronics B.V.
|
||||
"^goldelico,.*":
|
||||
description: Golden Delicious Computers GmbH & Co. KG
|
||||
"^goodix,.*":
|
||||
@@ -846,8 +844,6 @@ patternProperties:
|
||||
description: Linux-specific binding
|
||||
"^linx,.*":
|
||||
description: Linx Technologies
|
||||
"^liontron,.*":
|
||||
description: Shenzhen Liontron Technology Co., Ltd
|
||||
"^liteon,.*":
|
||||
description: LITE-ON Technology Corp.
|
||||
"^litex,.*":
|
||||
@@ -1017,8 +1013,6 @@ patternProperties:
|
||||
description: Shanghai Neardi Technology Co., Ltd.
|
||||
"^nec,.*":
|
||||
description: NEC LCD Technologies, Ltd.
|
||||
"^neofidelity,.*":
|
||||
description: Neofidelity Inc.
|
||||
"^neonode,.*":
|
||||
description: Neonode Inc.
|
||||
"^netgear,.*":
|
||||
|
||||
@@ -272,7 +272,7 @@ The available attributes are:
|
||||
echo async_irq > /sys/bus/dsa/drivers/crypto/sync_mode
|
||||
|
||||
Async mode without interrupts (caller must poll) can be enabled by
|
||||
writing 'async' to it (please see Caveat)::
|
||||
writing 'async' to it::
|
||||
|
||||
echo async > /sys/bus/dsa/drivers/crypto/sync_mode
|
||||
|
||||
@@ -283,13 +283,6 @@ The available attributes are:
|
||||
|
||||
The default mode is 'sync'.
|
||||
|
||||
Caveat: since the only mechanism that iaa_crypto currently implements
|
||||
for async polling without interrupts is via the 'sync' mode as
|
||||
described earlier, writing 'async' to
|
||||
'/sys/bus/dsa/drivers/crypto/sync_mode' will internally enable the
|
||||
'sync' mode. This is to ensure correct iaa_crypto behavior until true
|
||||
async polling without interrupts is enabled in iaa_crypto.
|
||||
|
||||
.. _iaa_default_config:
|
||||
|
||||
IAA Default Configuration
|
||||
|
||||
@@ -670,29 +670,6 @@ This implementation has some specifics:
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
pvIOMMU implementation note
|
||||
-------------------------------
|
||||
1) pKVM provides mutual distrust between host kernel and protected VMs(pVM)
|
||||
One solution to provide DMA isolation in this model, is to move the IOMMU
|
||||
control to the hypervisor and para-virtualize the IOMMU interface for
|
||||
the host and guest kernels. (none of them have direct access to IOMMU
|
||||
programming interface).
|
||||
|
||||
2) In the case of device assignment, the host can't map memory for the
|
||||
guest kernel in the IOMMU (as it is not trusted).
|
||||
|
||||
3) To statify these requirements a new VFIO IOMMU container type is added
|
||||
VFIO_PKVM_IOMMU which attaches the device to a blocking domain, and
|
||||
denies any MAP_DMA/UNMAP_DMA IOCTLs.
|
||||
|
||||
4) The guest IOMMU is configured by the host (virtual toplogy) but the mappings
|
||||
are controlled by the guest, you can find more about this in:
|
||||
- Documentation/virt/kvm/devices/vfio.rst
|
||||
- Documentation/virt/kvm/arm/pviommu.rst
|
||||
|
||||
So, a new container type is added: `VFIO_PKVM_IOMMU`
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
.. [1] VFIO was originally an acronym for "Virtual Function I/O" in its
|
||||
initial implementation by Tom Lyon while as Cisco. We've since
|
||||
outgrown the acronym, but it's catchy.
|
||||
|
||||
@@ -128,7 +128,6 @@ device=%s Specify a path to an extra device to be used together.
|
||||
fsid=%s Specify a filesystem image ID for Fscache back-end.
|
||||
domain_id=%s Specify a domain ID in fscache mode so that different images
|
||||
with the same blobs under a given domain ID can share storage.
|
||||
fsoffset=%llu Specify block-aligned filesystem offset for the primary device.
|
||||
=================== =========================================================
|
||||
|
||||
Sysfs Entries
|
||||
|
||||
@@ -206,7 +206,6 @@ fault_type=%d Support configuring fault injection type, should be
|
||||
FAULT_BLKADDR_VALIDITY 0x000040000
|
||||
FAULT_BLKADDR_CONSISTENCE 0x000080000
|
||||
FAULT_NO_SEGMENT 0x000100000
|
||||
FAULT_INCONSISTENT_FOOTER 0x000200000
|
||||
=========================== ===========
|
||||
mode=%s Control block allocation mode which supports "adaptive"
|
||||
and "lfs". In "lfs" mode, there should be no random
|
||||
@@ -366,27 +365,6 @@ errors=%s Specify f2fs behavior on critical errors. This supports modes:
|
||||
pending node write drop keep N/A
|
||||
pending meta write keep keep N/A
|
||||
====================== =============== =============== ========
|
||||
nat_bits Enable nat_bits feature to enhance full/empty nat blocks access,
|
||||
by default it's disabled.
|
||||
lookup_mode=%s Control the directory lookup behavior for casefolded
|
||||
directories. This option has no effect on directories
|
||||
that do not have the casefold feature enabled.
|
||||
|
||||
================== ========================================
|
||||
Value Description
|
||||
================== ========================================
|
||||
perf (Default) Enforces a hash-only lookup.
|
||||
The linear search fallback is always
|
||||
disabled, ignoring the on-disk flag.
|
||||
compat Enables the linear search fallback for
|
||||
compatibility with directory entries
|
||||
created by older kernel that used a
|
||||
different case-folding algorithm.
|
||||
This mode ignores the on-disk flag.
|
||||
auto F2FS determines the mode based on the
|
||||
on-disk `SB_ENC_NO_COMPAT_FALLBACK_FL`
|
||||
flag.
|
||||
================== ========================================
|
||||
======================== ============================================================
|
||||
|
||||
Debugfs Entries
|
||||
@@ -965,47 +943,3 @@ NVMe Zoned Namespace devices
|
||||
can start before the zone-capacity and span across zone-capacity boundary.
|
||||
Such spanning segments are also considered as usable segments. All blocks
|
||||
past the zone-capacity are considered unusable in these segments.
|
||||
|
||||
Device aliasing feature
|
||||
-----------------------
|
||||
|
||||
f2fs can utilize a special file called a "device aliasing file." This file allows
|
||||
the entire storage device to be mapped with a single, large extent, not using
|
||||
the usual f2fs node structures. This mapped area is pinned and primarily intended
|
||||
for holding the space.
|
||||
|
||||
Essentially, this mechanism allows a portion of the f2fs area to be temporarily
|
||||
reserved and used by another filesystem or for different purposes. Once that
|
||||
external usage is complete, the device aliasing file can be deleted, releasing
|
||||
the reserved space back to F2FS for its own use.
|
||||
|
||||
<use-case>
|
||||
|
||||
# ls /dev/vd*
|
||||
/dev/vdb (32GB) /dev/vdc (32GB)
|
||||
# mkfs.ext4 /dev/vdc
|
||||
# mkfs.f2fs -c /dev/vdc@vdc.file /dev/vdb
|
||||
# mount /dev/vdb /mnt/f2fs
|
||||
# ls -l /mnt/f2fs
|
||||
vdc.file
|
||||
# df -h
|
||||
/dev/vdb 64G 33G 32G 52% /mnt/f2fs
|
||||
|
||||
# mount -o loop /dev/vdc /mnt/ext4
|
||||
# df -h
|
||||
/dev/vdb 64G 33G 32G 52% /mnt/f2fs
|
||||
/dev/loop7 32G 24K 30G 1% /mnt/ext4
|
||||
# umount /mnt/ext4
|
||||
|
||||
# f2fs_io getflags /mnt/f2fs/vdc.file
|
||||
get a flag on /mnt/f2fs/vdc.file ret=0, flags=nocow(pinned),immutable
|
||||
# f2fs_io setflags noimmutable /mnt/f2fs/vdc.file
|
||||
get a flag on noimmutable ret=0, flags=800010
|
||||
set a flag on /mnt/f2fs/vdc.file ret=0, flags=noimmutable
|
||||
# rm /mnt/f2fs/vdc.file
|
||||
# df -h
|
||||
/dev/vdb 64G 753M 64G 2% /mnt/f2fs
|
||||
|
||||
So, the key idea is, user can do any file operations on /dev/vdc, and
|
||||
reclaim the space after the use, while the space is counted as /data.
|
||||
That doesn't require modifying partition size and filesystem format.
|
||||
|
||||
@@ -1,85 +0,0 @@
|
||||
.. SPDX-License-Identifier: GPL-2.0
|
||||
|
||||
=================================================
|
||||
incfs: A stacked incremental filesystem for Linux
|
||||
=================================================
|
||||
|
||||
/sys/fs interface
|
||||
=================
|
||||
|
||||
Please update Documentation/ABI/testing/sysfs-fs-incfs if you update this
|
||||
section.
|
||||
|
||||
incfs creates the following files in /sys/fs.
|
||||
|
||||
Features
|
||||
--------
|
||||
|
||||
/sys/fs/incremental-fs/features/corefs
|
||||
Reads 'supported'. Always present.
|
||||
|
||||
/sys/fs/incremental-fs/features/v2
|
||||
Reads 'supported'. Present if all v2 features of incfs are supported. These
|
||||
are:
|
||||
fs-verity support
|
||||
inotify support
|
||||
ioclts:
|
||||
INCFS_IOC_SET_READ_TIMEOUTS
|
||||
INCFS_IOC_GET_READ_TIMEOUTS
|
||||
INCFS_IOC_GET_BLOCK_COUNT
|
||||
INCFS_IOC_CREATE_MAPPED_FILE
|
||||
.incomplete folder
|
||||
.blocks_written pseudo file
|
||||
report_uid mount option
|
||||
|
||||
/sys/fs/incremental-fs/features/zstd
|
||||
Reads 'supported'. Present if zstd compression is supported for data blocks.
|
||||
|
||||
/sys/fs/incremental-fs/features/bugfix_throttling
|
||||
Reads 'supported'. Present if the throttling lock bug is fixed
|
||||
|
||||
Optional per mount
|
||||
------------------
|
||||
|
||||
For each incfs mount, the mount option sysfs_name=[name] creates a /sys/fs
|
||||
node called:
|
||||
|
||||
/sys/fs/incremental-fs/instances/[name]
|
||||
|
||||
This will contain the following files:
|
||||
|
||||
/sys/fs/incremental-fs/instances/[name]/reads_delayed_min
|
||||
Returns a count of the number of reads that were delayed as a result of the
|
||||
per UID read timeouts min time setting.
|
||||
|
||||
/sys/fs/incremental-fs/instances/[name]/reads_delayed_min_us
|
||||
Returns total delay time for all files since first mount as a result of the
|
||||
per UID read timeouts min time setting.
|
||||
|
||||
/sys/fs/incremental-fs/instances/[name]/reads_delayed_pending
|
||||
Returns a count of the number of reads that were delayed as a result of
|
||||
waiting for a pending read.
|
||||
|
||||
/sys/fs/incremental-fs/instances/[name]/reads_delayed_pending_us
|
||||
Returns total delay time for all files since first mount as a result of
|
||||
waiting for a pending read.
|
||||
|
||||
/sys/fs/incremental-fs/instances/[name]/reads_failed_hash_verification
|
||||
Returns number of reads that failed because of hash verification failures.
|
||||
|
||||
/sys/fs/incremental-fs/instances/[name]/reads_failed_other
|
||||
Returns number of reads that failed for reasons other than timing out or
|
||||
hash failures.
|
||||
|
||||
/sys/fs/incremental-fs/instances/[name]/reads_failed_timed_out
|
||||
Returns number of reads that timed out.
|
||||
|
||||
For reads_delayed_*** settings, note that a file can count for both
|
||||
reads_delayed_min and reads_delayed_pending if incfs first waits for a pending
|
||||
read then has to wait further for the min time. In that case, the time spent
|
||||
waiting is split between reads_delayed_pending_us, which is increased by the
|
||||
time spent waiting for the pending read, and reads_delayed_min_us, which is
|
||||
increased by the remainder of the time spent waiting.
|
||||
|
||||
Reads that timed out are not added to the reads_delayed_pending or the
|
||||
reads_delayed_pending_us counters.
|
||||
@@ -770,8 +770,7 @@ process the parameters it is given.
|
||||
|
||||
* ::
|
||||
|
||||
bool fs_validate_description(const char *name,
|
||||
const struct fs_parameter_description *desc);
|
||||
bool fs_validate_description(const struct fs_parameter_description *desc);
|
||||
|
||||
This performs some validation checks on a parameter description. It
|
||||
returns true if the description is good and false if it is not. It will
|
||||
|
||||
@@ -204,7 +204,7 @@ handle it in two different ways:
|
||||
|
||||
1. return EXDEV error: this error is returned by rename(2) when trying to
|
||||
move a file or directory across filesystem boundaries. Hence
|
||||
applications are usually prepared to hande this error (mv(1) for example
|
||||
applications are usually prepared to handle this error (mv(1) for example
|
||||
recursively copies the directory tree). This is the default behavior.
|
||||
|
||||
2. If the "redirect_dir" feature is enabled, then the directory will be
|
||||
|
||||
@@ -12,14 +12,11 @@ ACPI in general allows referring to device objects in the tree only.
|
||||
Hierarchical data extension nodes may not be referred to directly, hence this
|
||||
document defines a scheme to implement such references.
|
||||
|
||||
A reference to a _DSD hierarchical data node is a string consisting of a
|
||||
device object reference followed by a dot (".") and a relative path to a data
|
||||
node object. Do not use non-string references as this will produce a copy of
|
||||
the hierarchical data node, not a reference!
|
||||
|
||||
The hierarchical data extension node which is referred to shall be located
|
||||
directly under its parent object i.e. either the device object or another
|
||||
hierarchical data extension node [dsd-guide].
|
||||
A reference consist of the device object name followed by one or more
|
||||
hierarchical data extension [dsd-guide] keys. Specifically, the hierarchical
|
||||
data extension node which is referred to by the key shall lie directly under
|
||||
the parent object i.e. either the device object or another hierarchical data
|
||||
extension node.
|
||||
|
||||
The keys in the hierarchical data nodes shall consist of the name of the node,
|
||||
"@" character and the number of the node in hexadecimal notation (without pre-
|
||||
@@ -36,9 +33,11 @@ extension key.
|
||||
Example
|
||||
=======
|
||||
|
||||
In the ASL snippet below, the "reference" _DSD property contains a string
|
||||
reference to a hierarchical data extension node ANOD under DEV0 under the parent
|
||||
of DEV1. ANOD is also the final target node of the reference.
|
||||
In the ASL snippet below, the "reference" _DSD property contains a
|
||||
device object reference to DEV0 and under that device object, a
|
||||
hierarchical data extension key "node@1" referring to the NOD1 object
|
||||
and lastly, a hierarchical data extension key "anothernode" referring to
|
||||
the ANOD object which is also the final target node of the reference.
|
||||
::
|
||||
|
||||
Device (DEV0)
|
||||
@@ -77,7 +76,10 @@ of DEV1. ANOD is also the final target node of the reference.
|
||||
Name (_DSD, Package () {
|
||||
ToUUID("daffd814-6eba-4d8c-8a91-bc9bbf4aa301"),
|
||||
Package () {
|
||||
Package () { "reference", "^DEV0.ANOD" }
|
||||
Package () {
|
||||
"reference", Package () {
|
||||
^DEV0, "node@1", "anothernode"
|
||||
}
|
||||
},
|
||||
}
|
||||
})
|
||||
|
||||
@@ -66,9 +66,12 @@ of that port shall be zero. Similarly, if a port may only have a single
|
||||
endpoint, the number of that endpoint shall be zero.
|
||||
|
||||
The endpoint reference uses property extension with "remote-endpoint" property
|
||||
name followed by a string reference in the same package. [data-node-ref]::
|
||||
name followed by a reference in the same package. Such references consist of
|
||||
the remote device reference, the first package entry of the port data extension
|
||||
reference under the device and finally the first package entry of the endpoint
|
||||
data extension reference under the port. Individual references thus appear as::
|
||||
|
||||
"device.datanode"
|
||||
Package() { device, "port@X", "endpoint@Y" }
|
||||
|
||||
In the above example, "X" is the number of the port and "Y" is the number of
|
||||
the endpoint.
|
||||
@@ -106,7 +109,7 @@ A simple example of this is show below::
|
||||
ToUUID("daffd814-6eba-4d8c-8a91-bc9bbf4aa301"),
|
||||
Package () {
|
||||
Package () { "reg", 0 },
|
||||
Package () { "remote-endpoint", "\\_SB.PCI0.ISP.EP40" },
|
||||
Package () { "remote-endpoint", Package() { \_SB.PCI0.ISP, "port@4", "endpoint@0" } },
|
||||
}
|
||||
})
|
||||
}
|
||||
@@ -138,7 +141,7 @@ A simple example of this is show below::
|
||||
ToUUID("daffd814-6eba-4d8c-8a91-bc9bbf4aa301"),
|
||||
Package () {
|
||||
Package () { "reg", 0 },
|
||||
Package () { "remote-endpoint", "\\_SB.PCI0.I2C2.CAM0.EP00" },
|
||||
Package () { "remote-endpoint", Package () { \_SB.PCI0.I2C2.CAM0, "port@0", "endpoint@0" } },
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
@@ -15,6 +15,11 @@ Referring to LEDs in Device tree is documented in [video-interfaces], in
|
||||
"flash-leds" property documentation. In short, LEDs are directly referred to by
|
||||
using phandles.
|
||||
|
||||
While Device tree allows referring to any node in the tree [devicetree], in
|
||||
ACPI references are limited to device nodes only [acpi]. For this reason using
|
||||
the same mechanism on ACPI is not possible. A mechanism to refer to non-device
|
||||
ACPI nodes is documented in [data-node-ref].
|
||||
|
||||
ACPI allows (as does DT) using integer arguments after the reference. A
|
||||
combination of the LED driver device reference and an integer argument,
|
||||
referring to the "reg" property of the relevant LED, is used to identify
|
||||
@@ -69,7 +74,7 @@ omitted. ::
|
||||
Package () {
|
||||
Package () {
|
||||
"flash-leds",
|
||||
Package () { "^LED.LED0", "^LED.LED1" },
|
||||
Package () { ^LED, "led@0", ^LED, "led@1" },
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
@@ -230,9 +230,6 @@ Panel Helper Reference
|
||||
.. kernel-doc:: drivers/gpu/drm/drm_panel_orientation_quirks.c
|
||||
:export:
|
||||
|
||||
.. kernel-doc:: drivers/gpu/drm/drm_panel_backlight_quirks.c
|
||||
:export:
|
||||
|
||||
Panel Self Refresh Helper Reference
|
||||
===================================
|
||||
|
||||
|
||||
@@ -16,7 +16,6 @@ DG2, etc is provided to prototype the driver.
|
||||
xe_migrate
|
||||
xe_cs
|
||||
xe_pm
|
||||
xe_gt_freq
|
||||
xe_pcode
|
||||
xe_gt_mcr
|
||||
xe_wa
|
||||
|
||||
@@ -1,14 +0,0 @@
|
||||
.. SPDX-License-Identifier: (GPL-2.0+ OR MIT)
|
||||
|
||||
==========================
|
||||
Xe GT Frequency Management
|
||||
==========================
|
||||
|
||||
.. kernel-doc:: drivers/gpu/drm/xe/xe_gt_freq.c
|
||||
:doc: Xe GT Frequency Management
|
||||
|
||||
Internal API
|
||||
============
|
||||
|
||||
.. kernel-doc:: drivers/gpu/drm/xe/xe_gt_freq.c
|
||||
:internal:
|
||||
@@ -32,12 +32,12 @@ Temperature sensors and fans can be queried and set via the standard
|
||||
=============================== ======= =======================================
|
||||
Name Perm Description
|
||||
=============================== ======= =======================================
|
||||
fan[1-4]_input RO Fan speed in RPM.
|
||||
fan[1-4]_label RO Fan label.
|
||||
fan[1-4]_min RO Minimal Fan speed in RPM
|
||||
fan[1-4]_max RO Maximal Fan speed in RPM
|
||||
fan[1-4]_target RO Expected Fan speed in RPM
|
||||
pwm[1-4] RW Control the fan PWM duty-cycle.
|
||||
fan[1-3]_input RO Fan speed in RPM.
|
||||
fan[1-3]_label RO Fan label.
|
||||
fan[1-3]_min RO Minimal Fan speed in RPM
|
||||
fan[1-3]_max RO Maximal Fan speed in RPM
|
||||
fan[1-3]_target RO Expected Fan speed in RPM
|
||||
pwm[1-3] RW Control the fan PWM duty-cycle.
|
||||
pwm1_enable WO Enable or disable automatic BIOS fan
|
||||
control (not supported on all laptops,
|
||||
see below for details).
|
||||
@@ -93,7 +93,7 @@ Again, when you find new codes, we'd be happy to have your patches!
|
||||
---------------------------
|
||||
|
||||
The driver also exports the fans as thermal cooling devices with
|
||||
``type`` set to ``dell-smm-fan[1-4]``. This allows for easy fan control
|
||||
``type`` set to ``dell-smm-fan[1-3]``. This allows for easy fan control
|
||||
using one of the thermal governors.
|
||||
|
||||
Module parameters
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user