Compare commits

..

No commits in common. "android-15.0.0_1.0.0" and "lf-6.6.y" have entirely different histories.

2951 changed files with 30366 additions and 685928 deletions

1
.gitignore vendored
View File

@ -135,6 +135,7 @@ GTAGS
# id-utils files
ID
*.orig
*~
\#*#

File diff suppressed because it is too large Load Diff

View File

@ -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]\+
===

View File

@ -3,7 +3,7 @@ KernelVersion:
Contact: linux-iio@vger.kernel.org
Description:
Reading this returns the valid values that can be written to the
filter_mode attribute:
on_altvoltage0_mode attribute:
- auto -> Adjust bandpass filter to track changes in input clock rate.
- manual -> disable/unregister the clock rate notifier / input clock tracking.

View File

@ -1,32 +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
Android USB MIDI Function devices (eg. /sys/class/android_usb/androidN/f_midi/)
What: /sys/class/android_usb/<android_device>/f_midi/alsa
Date: Feb 2024
Contact Neill Kapron <nkapron@google.com>
Description:
The PCM card and device numbers created by the f_midi driver.
This is not the correct use of sysfs due to passing multiple
values through a single file, which is directly against the
"one value per file" nature of sysfs, however Android userspace
code currently relies on this functionality as-is.
Valid values: card and device numbers in the format of
<PCM_card_number> <device number>", or "-1 -1" if the attr
is read prior to binding the f_midi device.

View File

@ -920,16 +920,14 @@ Description: This file shows whether the configuration descriptor is locked.
What: /sys/bus/platform/drivers/ufshcd/*/attributes/max_number_of_rtt
What: /sys/bus/platform/devices/*.ufs/attributes/max_number_of_rtt
Date: May 2024
Contact: Avri Altman <avri.altman@wdc.com>
Date: February 2018
Contact: Stanislav Nijnikov <stanislav.nijnikov@wdc.com>
Description: This file provides the maximum current number of
outstanding RTTs in device that is allowed. bMaxNumOfRTT is a
read-write persistent attribute and is equal to two after device
manufacturing. It shall not be set to a value greater than
bDeviceRTTCap value, and it may be set only when the hw queues are
empty.
outstanding RTTs in device that is allowed. The full
information about the attribute could be found at
UFS specifications 2.1.
The file is read write.
The file is read only.
What: /sys/bus/platform/drivers/ufshcd/*/attributes/exception_event_control
What: /sys/bus/platform/devices/*.ufs/attributes/exception_event_control

View File

@ -331,7 +331,7 @@ Date: January 2018
Contact: Jaegeuk Kim <jaegeuk@kernel.org>
Description: This indicates how many GC can be failed for the pinned
file. If it exceeds this, F2FS doesn't guarantee its pinning
state. 2048 trials is set by default, and 65535 as maximum.
state. 2048 trials is set by default.
What: /sys/fs/f2fs/<disk>/extension_list
Date: February 2018
@ -498,21 +498,6 @@ Description: Show status of f2fs checkpoint in real time.
CP_RESIZEFS_FLAG 0x00004000
=============================== ==============================
What: /sys/fs/f2fs/<disk>/stat/issued_discard
Date: December 2023
Contact: "Zhiguo Niu" <zhiguo.niu@unisoc.com>
Description: Shows the number of issued discard.
What: /sys/fs/f2fs/<disk>/stat/queued_discard
Date: December 2023
Contact: "Zhiguo Niu" <zhiguo.niu@unisoc.com>
Description: Shows the number of queued discard.
What: /sys/fs/f2fs/<disk>/stat/undiscard_blks
Date: December 2023
Contact: "Zhiguo Niu" <zhiguo.niu@unisoc.com>
Description: Shows the total number of undiscard blocks.
What: /sys/fs/f2fs/<disk>/ckpt_thread_ioprio
Date: January 2021
Contact: "Daeho Jeong" <daehojeong@google.com>
@ -579,12 +564,6 @@ Description: When ATGC is on, it controls age threshold to bypass GCing young
candidates whose age is not beyond the threshold, by default it was
initialized as 604800 seconds (equals to 7 days).
What: /sys/fs/f2fs/<disk>/atgc_enabled
Date: Feb 2024
Contact: "Jinbao Liu" <liujinbao1@xiaomi.com>
Description: It represents whether ATGC is on or off. The value is 1 which
indicates that ATGC is on, and 0 indicates that it is off.
What: /sys/fs/f2fs/<disk>/gc_reclaimed_segments
Date: July 2021
Contact: "Daeho Jeong" <daehojeong@google.com>
@ -707,31 +686,29 @@ Description: Support configuring fault injection type, should be
enabled with fault_injection option, fault type value
is shown below, it supports single or combined type.
=========================== ===========
Type_Name Type_Value
=========================== ===========
FAULT_KMALLOC 0x000000001
FAULT_KVMALLOC 0x000000002
FAULT_PAGE_ALLOC 0x000000004
FAULT_PAGE_GET 0x000000008
FAULT_ALLOC_BIO 0x000000010 (obsolete)
FAULT_ALLOC_NID 0x000000020
FAULT_ORPHAN 0x000000040
FAULT_BLOCK 0x000000080
FAULT_DIR_DEPTH 0x000000100
FAULT_EVICT_INODE 0x000000200
FAULT_TRUNCATE 0x000000400
FAULT_READ_IO 0x000000800
FAULT_CHECKPOINT 0x000001000
FAULT_DISCARD 0x000002000
FAULT_WRITE_IO 0x000004000
FAULT_SLAB_ALLOC 0x000008000
FAULT_DQUOT_INIT 0x000010000
FAULT_LOCK_OP 0x000020000
FAULT_BLKADDR_VALIDITY 0x000040000
FAULT_BLKADDR_CONSISTENCE 0x000080000
FAULT_NO_SEGMENT 0x000100000
=========================== ===========
=================== ===========
Type_Name Type_Value
=================== ===========
FAULT_KMALLOC 0x000000001
FAULT_KVMALLOC 0x000000002
FAULT_PAGE_ALLOC 0x000000004
FAULT_PAGE_GET 0x000000008
FAULT_ALLOC_BIO 0x000000010 (obsolete)
FAULT_ALLOC_NID 0x000000020
FAULT_ORPHAN 0x000000040
FAULT_BLOCK 0x000000080
FAULT_DIR_DEPTH 0x000000100
FAULT_EVICT_INODE 0x000000200
FAULT_TRUNCATE 0x000000400
FAULT_READ_IO 0x000000800
FAULT_CHECKPOINT 0x000001000
FAULT_DISCARD 0x000002000
FAULT_WRITE_IO 0x000004000
FAULT_SLAB_ALLOC 0x000008000
FAULT_DQUOT_INIT 0x000010000
FAULT_LOCK_OP 0x000020000
FAULT_BLKADDR 0x000040000
=================== ===========
What: /sys/fs/f2fs/<disk>/discard_io_aware_gran
Date: January 2023
@ -763,59 +740,3 @@ Description: When compress cache is on, it controls cached page
If cached page percent exceed threshold, then deny caching compress page.
The value should be in range of (0, 100], by default it was initialized
as 20(%).
What: /sys/fs/f2fs/<disk>/discard_io_aware
Date: November 2023
Contact: "Chao Yu" <chao@kernel.org>
Description: It controls to enable/disable IO aware feature for background discard.
By default, the value is 1 which indicates IO aware is on.
What: /sys/fs/f2fs/<disk>/blkzone_alloc_policy
Date: July 2024
Contact: "Yuanhong Liao" <liaoyuanhong@vivo.com>
Description: The zone UFS we are currently using consists of two parts:
conventional zones and sequential zones. It can be used to control which part
to prioritize for writes, with a default value of 0.
======================== =========================================
value description
blkzone_alloc_policy = 0 Prioritize writing to sequential zones
blkzone_alloc_policy = 1 Only allow writing to sequential zones
blkzone_alloc_policy = 2 Prioritize writing to conventional zones
======================== =========================================
What: /sys/fs/f2fs/<disk>/migration_window_granularity
Date: September 2024
Contact: "Daeho Jeong" <daehojeong@google.com>
Description: Controls migration window granularity of garbage collection on large
section. it can control the scanning window granularity for GC migration
in a unit of segment, while migration_granularity controls the number
of segments which can be migrated at the same turn.
What: /sys/fs/f2fs/<disk>/reserved_segments
Date: September 2024
Contact: "Daeho Jeong" <daehojeong@google.com>
Description: In order to fine tune GC behavior, we can control the number of
reserved segments.
What: /sys/fs/f2fs/<disk>/gc_no_zoned_gc_percent
Date: September 2024
Contact: "Daeho Jeong" <daehojeong@google.com>
Description: If the percentage of free sections over total sections is above this
number, F2FS do not garbage collection for zoned devices through the
background GC thread. the default number is "60".
What: /sys/fs/f2fs/<disk>/gc_boost_zoned_gc_percent
Date: September 2024
Contact: "Daeho Jeong" <daehojeong@google.com>
Description: If the percentage of free sections over total sections is under this
number, F2FS boosts garbage collection for zoned devices through the
background GC thread. the default number is "25".
What: /sys/fs/f2fs/<disk>/gc_valid_thresh_ratio
Date: September 2024
Contact: "Daeho Jeong" <daehojeong@google.com>
Description: It controls the valid block ratio threshold not to trigger excessive GC
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.

View File

@ -1,19 +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/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

View File

@ -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.

View File

@ -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.

View File

@ -1,18 +0,0 @@
What: /sys/kernel/mm/transparent_hugepage/
Date: April 2024
Contact: Linux memory management mailing list <linux-mm@kvack.org>
Description:
/sys/kernel/mm/transparent_hugepage/ contains a number of files and
subdirectories,
- defrag
- enabled
- hpage_pmd_size
- khugepaged
- shmem_enabled
- use_zero_page
- subdirectories of the form hugepages-<size>kB, where <size>
is the page size of the hugepages supported by the kernel/CPU
combination.
See Documentation/admin-guide/mm/transhuge.rst for details.

View File

@ -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.

View File

@ -1067,10 +1067,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.
@ -1565,28 +1561,12 @@
The above will cause the "foo" tracing instance to trigger
a snapshot at the end of boot up.
ftrace_dump_on_oops[=2(orig_cpu) | =<instance>][,<instance> |
,<instance>=2(orig_cpu)]
ftrace_dump_on_oops[=orig_cpu]
[FTRACE] will dump the trace buffers on oops.
If no parameter is passed, ftrace will dump global
buffers of all CPUs, if you pass 2 or orig_cpu, it
will dump only the buffer of the CPU that triggered
the oops, or the specific instance will be dumped if
its name is passed. Multiple instance dump is also
supported, and instances are separated by commas. Each
instance supports only dump on CPU that triggered the
oops by passing 2 or orig_cpu to it.
ftrace_dump_on_oops=foo=orig_cpu
The above will dump only the buffer of "foo" instance
on CPU that triggered the oops.
ftrace_dump_on_oops,foo,bar=orig_cpu
The above will dump global buffer on all CPUs, the
buffer of "foo" instance on all CPUs and the buffer
of "bar" instance on CPU that triggered the oops.
If no parameter is passed, ftrace will dump
buffers of all CPUs, but if you pass orig_cpu, it will
dump only the buffer of the CPU that triggered the
oops.
ftrace_filter=[function-list]
[FTRACE] Limit the functions traced by the function
@ -1870,10 +1850,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] Disables the paravirt spinlock optimizations
which allow the hypervisor to 'idle' the
guest on lock contention.
@ -2280,9 +2256,6 @@
1 - Bypass the IOMMU for DMA.
unset - Use value of CONFIG_IOMMU_DEFAULT_PASSTHROUGH.
ioremap_guard [ARM64] enable the KVM MMIO guard functionality
if available.
io7= [HW] IO7 for Marvel-based Alpha systems
See comment before marvel_specify_io7 in
arch/alpha/kernel/core_marvel.c.
@ -2571,7 +2544,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)
@ -2647,9 +2620,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
@ -2660,13 +2631,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.vgic_v3_group0_trap=
[KVM,ARM] Trap guest accesses to GICv3 group-0
system registers
@ -3506,16 +3470,6 @@
allocations which rules out almost all kernel
allocations. Use with caution!
nosplit=X,Y [MM] Set the minimum order of the nosplit zone. Pages in
this zone can't be split down below order Y, while free
or in use.
Like movablecore, X should be either nn[KMGTPE] or n%.
nomerge=X,Y [MM] Set the exact orders of the nomerge zone. Pages in
this zone are always order Y, meaning they can't be
split or merged while free or in use.
Like movablecore, X should be either nn[KMGTPE] or n%.
MTD_Partition= [MTD]
Format: <name>,<region-number>,<size>,<offset>
@ -4685,16 +4639,6 @@
printk.time= Show timing data prefixed to each printk message line
Format: <bool> (1/Y/y=enable, 0/N/n=disable)
proc_mem.force_override= [KNL]
Format: {always | ptrace | never}
Traditionally /proc/pid/mem allows memory permissions to be
overridden without restrictions. This option may be set to
restrict that. Can be one of:
- 'always': traditional behavior always allows mem overrides.
- 'ptrace': only allow mem overrides for active ptracers.
- 'never': never allow mem overrides.
If not specified, default is the CONFIG_PROC_MEM_* choice.
processor.max_cstate= [HW,ACPI]
Limit processor to maximum C-state
max_cstate=9 overrides any DMI blacklist limit.
@ -5015,11 +4959,6 @@
this kernel boot parameter, forcibly setting it
to zero.
rcutree.enable_rcu_lazy= [KNL]
To save power, batch RCU callbacks and flush after
delay, memory pressure or callback list growing too
big.
rcuscale.gp_async= [KNL]
Measure performance of asynchronous
grace-period primitives such as call_rcu().
@ -5297,21 +5236,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.
@ -7214,15 +7138,6 @@
threshold repeatedly. They are likely good
candidates for using WQ_UNBOUND workqueues instead.
workqueue.cpu_intensive_warning_thresh=<uint>
If CONFIG_WQ_CPU_INTENSIVE_REPORT is set, the kernel
will report the work functions which violate the
intensive_threshold_us repeatedly. In order to prevent
spurious warnings, start printing only after a work
function has violated this threshold number of times.
The default is 4 times. 0 disables the warning.
workqueue.power_efficient
Per-cpu workqueues are generally preferred because
they show better performance thanks to cache

View File

@ -45,25 +45,10 @@ components:
the two is using hugepages just because of the fact the TLB miss is
going to run faster.
Modern kernels support "multi-size THP" (mTHP), which introduces the
ability to allocate memory in blocks that are bigger than a base page
but smaller than traditional PMD-size (as described above), in
increments of a power-of-2 number of pages. mTHP can back anonymous
memory (for example 16K, 32K, 64K, etc). These THPs continue to be
PTE-mapped, but in many cases can still provide similar benefits to
those outlined above: Page faults are significantly reduced (by a
factor of e.g. 4, 8, 16, etc), but latency spikes are much less
prominent because the size of each page isn't as huge as the PMD-sized
variant and there is less memory to clear in each page fault. Some
architectures also employ TLB compression mechanisms to squeeze more
entries in when a set of PTEs are virtually and physically contiguous
and approporiately aligned. In this case, TLB misses will occur less
often.
THP can be enabled system wide or restricted to certain tasks or even
memory ranges inside task's address space. Unless THP is completely
disabled, there is ``khugepaged`` daemon that scans memory and
collapses sequences of basic pages into PMD-sized huge pages.
collapses sequences of basic pages into huge pages.
The THP behaviour is controlled via :ref:`sysfs <thp_sysfs>`
interface and using madvise(2) and prctl(2) system calls.
@ -110,40 +95,12 @@ Global THP controls
Transparent Hugepage Support for anonymous memory can be entirely disabled
(mostly for debugging purposes) or only enabled inside MADV_HUGEPAGE
regions (to avoid the risk of consuming more memory resources) or enabled
system wide. This can be achieved per-supported-THP-size with one of::
echo always >/sys/kernel/mm/transparent_hugepage/hugepages-<size>kB/enabled
echo madvise >/sys/kernel/mm/transparent_hugepage/hugepages-<size>kB/enabled
echo never >/sys/kernel/mm/transparent_hugepage/hugepages-<size>kB/enabled
where <size> is the hugepage size being addressed, the available sizes
for which vary by system.
For example::
echo always >/sys/kernel/mm/transparent_hugepage/hugepages-2048kB/enabled
Alternatively it is possible to specify that a given hugepage size
will inherit the top-level "enabled" value::
echo inherit >/sys/kernel/mm/transparent_hugepage/hugepages-<size>kB/enabled
For example::
echo inherit >/sys/kernel/mm/transparent_hugepage/hugepages-2048kB/enabled
The top-level setting (for use with "inherit") can be set by issuing
one of the following commands::
system wide. This can be achieved with one of::
echo always >/sys/kernel/mm/transparent_hugepage/enabled
echo madvise >/sys/kernel/mm/transparent_hugepage/enabled
echo never >/sys/kernel/mm/transparent_hugepage/enabled
By default, PMD-sized hugepages have enabled="inherit" and all other
hugepage sizes have enabled="never". If enabling multiple hugepage
sizes, the kernel will select the most appropriate enabled size for a
given allocation.
It's also possible to limit defrag efforts in the VM to generate
anonymous hugepages in case they're not immediately free to madvise
regions or to never try to defrag memory and simply fallback to regular
@ -189,34 +146,25 @@ madvise
never
should be self-explanatory.
By default kernel tries to use huge, PMD-mappable zero page on read
page fault to anonymous mapping. It's possible to disable huge zero
page by writing 0 or enable it back by writing 1::
By default kernel tries to use huge zero page on read page fault to
anonymous mapping. It's possible to disable huge zero page by writing 0
or enable it back by writing 1::
echo 0 >/sys/kernel/mm/transparent_hugepage/use_zero_page
echo 1 >/sys/kernel/mm/transparent_hugepage/use_zero_page
Some userspace (such as a test program, or an optimized memory
allocation library) may want to know the size (in bytes) of a
PMD-mappable transparent hugepage::
Some userspace (such as a test program, or an optimized memory allocation
library) may want to know the size (in bytes) of a transparent hugepage::
cat /sys/kernel/mm/transparent_hugepage/hpage_pmd_size
khugepaged will be automatically started when one or more hugepage
sizes are enabled (either by directly setting "always" or "madvise",
or by setting "inherit" while the top-level enabled is set to "always"
or "madvise"), and it'll be automatically shutdown when the last
hugepage size is disabled (either by directly setting "never", or by
setting "inherit" while the top-level enabled is set to "never").
khugepaged will be automatically started when
transparent_hugepage/enabled is set to "always" or "madvise, and it'll
be automatically shutdown if it's set to "never".
Khugepaged controls
-------------------
.. note::
khugepaged currently only searches for opportunities to collapse to
PMD-sized THP and no attempt is made to collapse to other THP
sizes.
khugepaged runs usually at low frequency so while one may not want to
invoke defrag algorithms synchronously during the page faults, it
should be worth invoking defrag at least in khugepaged. However it's
@ -334,22 +282,19 @@ force
Need of application restart
===========================
The transparent_hugepage/enabled and
transparent_hugepage/hugepages-<size>kB/enabled values and tmpfs mount
option only affect future behavior. So to make them effective you need
to restart any application that could have been using hugepages. This
also applies to the regions registered in khugepaged.
The transparent_hugepage/enabled values and tmpfs mount option only affect
future behavior. So to make them effective you need to restart any
application that could have been using hugepages. This also applies to the
regions registered in khugepaged.
Monitoring usage
================
The number of PMD-sized anonymous transparent huge pages currently used by the
The number of anonymous transparent huge pages currently used by the
system is available by reading the AnonHugePages field in ``/proc/meminfo``.
To identify what applications are using PMD-sized anonymous transparent huge
pages, it is necessary to read ``/proc/PID/smaps`` and count the AnonHugePages
fields for each mapping. (Note that AnonHugePages only applies to traditional
PMD-sized THP for historical reasons and should have been called
AnonHugePmdMapped).
To identify what applications are using anonymous transparent huge pages,
it is necessary to read ``/proc/PID/smaps`` and count the AnonHugePages fields
for each mapping.
The number of file transparent huge pages mapped to userspace is available
by reading ShmemPmdMapped and ShmemHugePages fields in ``/proc/meminfo``.
@ -365,7 +310,7 @@ monitor how successfully the system is providing huge pages for use.
thp_fault_alloc
is incremented every time a huge page is successfully
allocated and charged to handle a page fault.
allocated to handle a page fault.
thp_collapse_alloc
is incremented by khugepaged when it has found
@ -373,7 +318,7 @@ thp_collapse_alloc
successfully allocated a new huge page to store the data.
thp_fault_fallback
is incremented if a page fault fails to allocate or charge
is incremented if a page fault fails to allocate
a huge page and instead falls back to using small pages.
thp_fault_fallback_charge
@ -443,49 +388,6 @@ thp_swpout_fallback
Usually because failed to allocate some continuous swap space
for the huge page.
In /sys/kernel/mm/transparent_hugepage/hugepages-<size>kB/stats, There are
also individual counters for each huge page size, which can be utilized to
monitor the system's effectiveness in providing huge pages for usage. Each
counter has its own corresponding file.
anon_fault_alloc
is incremented every time a huge page is successfully
allocated and charged to handle a page fault.
anon_fault_fallback
is incremented if a page fault fails to allocate or charge
a huge page and instead falls back to using huge pages with
lower orders or small pages.
anon_fault_fallback_charge
is incremented if a page fault fails to charge a huge page and
instead falls back to using huge pages with lower orders or
small pages even though the allocation was successful.
swpout
is incremented every time a huge page is swapped out in one
piece without splitting.
swpout_fallback
is incremented if a huge page has to be split before swapout.
Usually because failed to allocate some continuous swap space
for the huge page.
split
is incremented every time a huge page is successfully split into
smaller orders. This can happen for a variety of reasons but a
common reason is that a huge page is old and is being reclaimed.
split_failed
is incremented if kernel fails to split huge
page. This can happen if the page was pinned by somebody.
split_deferred
is incremented when a huge page is put onto split queue.
This happens when a huge page is partially unmapped and splitting
it would free up some memory. Pages on split queue are going to
be split under memory pressure, if splitting is possible.
As the system ages, allocating huge pages may be expensive as the
system uses memory compaction to copy data around memory to free a
huge page for use. There are some counters in ``/proc/vmstat`` to help
@ -511,7 +413,7 @@ for huge pages.
Optimizing the applications
===========================
To be guaranteed that the kernel will map a THP immediately in any
To be guaranteed that the kernel will map a 2M page immediately in any
memory region, the mmap region has to be hugepage naturally
aligned. posix_memalign() can provide that guarantee.

View File

@ -113,9 +113,6 @@ events, except page fault notifications, may be generated:
areas. ``UFFD_FEATURE_MINOR_SHMEM`` is the analogous feature indicating
support for shmem virtual memory areas.
- ``UFFD_FEATURE_MOVE`` indicates that the kernel supports moving an
existing page contents from userspace.
The userland application should set the feature flags it intends to use
when invoking the ``UFFDIO_API`` ioctl, to request that those features be
enabled if supported.

View File

@ -296,30 +296,12 @@ kernel panic). This will output the contents of the ftrace buffers to
the console. This is very useful for capturing traces that lead to
crashes and outputting them to a serial console.
======================= ===========================================
0 Disabled (default).
1 Dump buffers of all CPUs.
2(orig_cpu) Dump the buffer of the CPU that triggered the
oops.
<instance> Dump the specific instance buffer on all CPUs.
<instance>=2(orig_cpu) Dump the specific instance buffer on the CPU
that triggered the oops.
======================= ===========================================
= ===================================================
0 Disabled (default).
1 Dump buffers of all CPUs.
2 Dump the buffer of the CPU that triggered the oops.
= ===================================================
Multiple instance dump is also supported, and instances are separated
by commas. If global buffer also needs to be dumped, please specify
the dump mode (1/2/orig_cpu) first for global buffer.
So for example to dump "foo" and "bar" instance buffer on all CPUs,
user can::
echo "foo,bar" > /proc/sys/kernel/ftrace_dump_on_oops
To dump global buffer and "foo" instance buffer on all
CPUs along with the "bar" instance buffer on CPU that triggered the
oops, user can::
echo "1,foo,bar=2" > /proc/sys/kernel/ftrace_dump_on_oops
ftrace_enabled, stack_tracer_enabled
====================================

View File

@ -54,8 +54,6 @@ stable kernels.
+----------------+-----------------+-----------------+-----------------------------+
| Ampere | AmpereOne | AC03_CPU_38 | AMPERE_ERRATUM_AC03_CPU_38 |
+----------------+-----------------+-----------------+-----------------------------+
| Ampere | AmpereOne AC04 | AC04_CPU_10 | AMPERE_ERRATUM_AC03_CPU_38 |
+----------------+-----------------+-----------------+-----------------------------+
+----------------+-----------------+-----------------+-----------------------------+
| ARM | Cortex-A510 | #2457168 | ARM64_ERRATUM_2457168 |
+----------------+-----------------+-----------------+-----------------------------+
@ -141,8 +139,6 @@ stable kernels.
+----------------+-----------------+-----------------+-----------------------------+
| ARM | Cortex-A715 | #2645198 | ARM64_ERRATUM_2645198 |
+----------------+-----------------+-----------------+-----------------------------+
| ARM | Cortex-A715 | #3456084 | ARM64_ERRATUM_3194386 |
+----------------+-----------------+-----------------+-----------------------------+
| ARM | Cortex-A720 | #3456091 | ARM64_ERRATUM_3194386 |
+----------------+-----------------+-----------------+-----------------------------+
| ARM | Cortex-A725 | #3456106 | ARM64_ERRATUM_3194386 |
@ -179,8 +175,6 @@ stable kernels.
+----------------+-----------------+-----------------+-----------------------------+
| ARM | Neoverse-N2 | #3324339 | ARM64_ERRATUM_3194386 |
+----------------+-----------------+-----------------+-----------------------------+
| ARM | Neoverse-N3 | #3456111 | ARM64_ERRATUM_3194386 |
+----------------+-----------------+-----------------+-----------------------------+
| ARM | Neoverse-V1 | #3324341 | ARM64_ERRATUM_3194386 |
+----------------+-----------------+-----------------+-----------------------------+
| ARM | Neoverse-V2 | #3324336 | ARM64_ERRATUM_3194386 |
@ -284,5 +278,3 @@ stable kernels.
+----------------+-----------------+-----------------+-----------------------------+
| Microsoft | Azure Cobalt 100| #2253138 | ARM64_ERRATUM_2253138 |
+----------------+-----------------+-----------------+-----------------------------+
| Microsoft | Azure Cobalt 100| #3324339 | ARM64_ERRATUM_3194386 |
+----------------+-----------------+-----------------+-----------------------------+

View File

@ -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/>`_.

View File

@ -81,9 +81,6 @@ section.
Sometimes it is necessary to ensure the next call to store to a maple tree does
not allocate memory, please see :ref:`maple-tree-advanced-api` for this use case.
You can use mtree_dup() to duplicate an entire maple tree. It is a more
efficient way than inserting all elements one by one into a new tree.
Finally, you can remove all entries from a maple tree by calling
mtree_destroy(). If the maple tree entries are pointers, you may wish to free
the entries first.
@ -115,7 +112,6 @@ Takes ma_lock internally:
* mtree_insert()
* mtree_insert_range()
* mtree_erase()
* mtree_dup()
* mtree_destroy()
* mt_set_in_rcu()
* mt_clear_in_rcu()

View File

@ -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

View File

@ -651,16 +651,12 @@ For example:
}
Note that, for functions like device_unregister which only accept a single
pointer-sized argument, it's possible to automatically generate a wrapper
with the ``KUNIT_DEFINE_ACTION_WRAPPER()`` macro, for example:
pointer-sized argument, it's possible to directly cast that function to
a ``kunit_action_t`` rather than writing a wrapper function, for example:
.. code-block:: C
KUNIT_DEFINE_ACTION_WRAPPER(device_unregister, device_unregister_wrapper, struct device *);
kunit_add_action(test, &device_unregister_wrapper, &dev);
You should do this in preference to manually casting to the ``kunit_action_t`` type,
as casting function pointers will break Control Flow Integrity (CFI).
kunit_add_action(test, (kunit_action_t *)&device_unregister, &dev);
``kunit_add_action`` can fail if, for example, the system is out of memory.
You can use ``kunit_add_action_or_reset`` instead which runs the action

View File

@ -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.

View File

@ -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>;
};
};

View File

@ -1,111 +0,0 @@
# SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause
%YAML 1.2
---
$id: http://devicetree.org/schemas/cpufreq/virtual,android-v-only-cpufreq.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#
title: Android-V-Only Virtual CPUFreq
maintainers:
- David Dai <davidai@google.com>
- Saravana Kannan <saravanak@google.com>
description:
Android-V-Only Virtual CPUFreq is a virtualized driver in guest kernels that
sends frequency selection of its vCPUs as a hint to the host through MMIO
regions. Each vCPU is associated with a frequency domain which can be shared
with other vCPUs. Each frequency domain has its own set of registers for
frequency controls.
properties:
compatible:
const: virtual,android-v-only-cpufreq
reg:
maxItems: 1
description:
Address and size of region containing frequency controls for each of the
frequency domains. Regions for each frequency 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 frequency domains. This device also needs the CPUs to
list their OPPs using operating-points-v2 tables. The OPP tables for the
CPUs should use normalized "frequency" values where the OPP with the
highest performance among all the vCPUs is listed as 1024 KHz. The rest
of the frequencies of all the vCPUs should be normalized based on their
performance relative to that 1024 KHz OPP. This makes it much easier to
migrate the VM across systems which might have different physical CPU
OPPs.
required:
- compatible
- reg
additionalProperties: false
examples:
- |
// This example shows a two CPU configuration with a frequency domain
// for each CPU showing normalized performance points.
cpus {
#address-cells = <1>;
#size-cells = <0>;
cpu@0 {
compatible = "arm,armv8";
device_type = "cpu";
reg = <0x0>;
operating-points-v2 = <&opp_table0>;
};
cpu@1 {
compatible = "arm,armv8";
device_type = "cpu";
reg = <0x0>;
operating-points-v2 = <&opp_table1>;
};
};
opp_table0: opp-table-0 {
compatible = "operating-points-v2";
opp64000 { opp-hz = /bits/ 64 <64000>; };
opp128000 { opp-hz = /bits/ 64 <128000>; };
opp192000 { opp-hz = /bits/ 64 <192000>; };
opp256000 { opp-hz = /bits/ 64 <256000>; };
opp320000 { opp-hz = /bits/ 64 <320000>; };
opp384000 { opp-hz = /bits/ 64 <384000>; };
opp425000 { opp-hz = /bits/ 64 <425000>; };
};
opp_table1: opp-table-1 {
compatible = "operating-points-v2";
opp64000 { opp-hz = /bits/ 64 <64000>; };
opp128000 { opp-hz = /bits/ 64 <128000>; };
opp192000 { opp-hz = /bits/ 64 <192000>; };
opp256000 { opp-hz = /bits/ 64 <256000>; };
opp320000 { opp-hz = /bits/ 64 <320000>; };
opp384000 { opp-hz = /bits/ 64 <384000>; };
opp448000 { opp-hz = /bits/ 64 <448000>; };
opp512000 { opp-hz = /bits/ 64 <512000>; };
opp576000 { opp-hz = /bits/ 64 <576000>; };
opp640000 { opp-hz = /bits/ 64 <640000>; };
opp704000 { opp-hz = /bits/ 64 <704000>; };
opp768000 { opp-hz = /bits/ 64 <768000>; };
opp832000 { opp-hz = /bits/ 64 <832000>; };
opp896000 { opp-hz = /bits/ 64 <896000>; };
opp960000 { opp-hz = /bits/ 64 <960000>; };
opp1024000 { opp-hz = /bits/ 64 <1024000>; };
};
soc {
#address-cells = <1>;
#size-cells = <1>;
cpufreq@1040000 {
compatible = "virtual,android-v-only-cpufreq";
reg = <0x1040000 0x10>;
};
};

View File

@ -69,17 +69,14 @@ properties:
- const: tx
- const: tx_reply
- const: rx
- const: rx_reply
minItems: 2
mboxes:
description:
List of phandle and mailbox channel specifiers. It should contain
exactly one, two, three or four mailboxes; the first one or two for
transmitting messages ("tx") and another optional ("rx") for receiving
notifications and delayed responses, if supported by the platform.
The optional ("rx_reply") is for notifications completion interrupt,
if supported by the platform.
exactly one, two or three mailboxes; the first one or two for transmitting
messages ("tx") and another optional ("rx") for receiving notifications
and delayed responses, if supported by the platform.
The number of mailboxes needed for transmitting messages depends on the
type of channels exposed by the specific underlying mailbox controller;
one single channel descriptor is enough if such channel is bidirectional,
@ -92,10 +89,9 @@ properties:
2 mbox / 2 shmem => SCMI TX and RX over 2 mailbox bidirectional channels
2 mbox / 1 shmem => SCMI TX over 2 mailbox unidirectional channels
3 mbox / 2 shmem => SCMI TX and RX over 3 mailbox unidirectional channels
4 mbox / 2 shmem => SCMI TX and RX over 4 mailbox unidirectional channels
Any other combination of mboxes and shmem is invalid.
minItems: 1
maxItems: 4
maxItems: 3
shmem:
description:
@ -118,13 +114,6 @@ properties:
atomic mode of operation, even if requested.
default: 0
max-rx-timeout-ms:
description:
An optional time value, expressed in milliseconds, representing the
transport maximum timeout value for the receive channel. The value should
be a non-zero value if set.
minimum: 1
arm,smc-id:
$ref: /schemas/types.yaml#/definitions/uint32
description:
@ -251,30 +240,32 @@ properties:
protocol@19:
type: object
allOf:
- $ref: '#/$defs/protocol-node'
- $ref: /schemas/pinctrl/pinctrl.yaml
- $ref: "#/$defs/protocol-node"
- $ref: "../pinctrl/pinctrl.yaml"
unevaluatedProperties: false
properties:
reg:
const: 0x19
'#pinctrl-cells':
const: 0
patternProperties:
'-pins$':
type: object
allOf:
- $ref: /schemas/pinctrl/pincfg-node.yaml#
- $ref: /schemas/pinctrl/pinmux-node.yaml#
- $ref: "../pinctrl/pincfg-node.yaml#"
- $ref: "../pinctrl/pinmux-node.yaml#"
unevaluatedProperties: false
description:
A pin multiplexing sub-node describes how to configure a
set of pins in some desired function.
A pin multiplexing sub-node describe how to configure a
set of pins is some desired function.
A single sub-node may define several pin configurations.
This sub-node is using the default pinctrl bindings to configure
pin multiplexing and using SCMI protocol to apply a specified
configuration.
This sub-node is using default pinctrl bindings to configure
pin multiplexing and using SCMI protocol to apply specified
configuration using SCMI protocol.
required:
- reg
@ -435,19 +426,20 @@ examples:
scmi_pinctrl: protocol@19 {
reg = <0x19>;
#pinctrl-cells = <0>;
i2c2-pins {
groups = "g_i2c2_a", "g_i2c2_b";
function = "f_i2c2";
groups = "i2c2_a", "i2c2_b";
function = "i2c2";
};
mdio-pins {
groups = "g_avb_mdio";
groups = "avb_mdio";
drive-strength = <24>;
};
keys_pins: keys-pins {
pins = "gpio_5_17", "gpio_5_20", "gpio_5_22", "gpio_2_1";
pins = "GP_5_17", "GP_5_20", "GP_5_22", "GP_2_1";
bias-pull-up;
};
};

View File

@ -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 */
};
};

View File

@ -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-II 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";
};

View File

@ -23,6 +23,7 @@ properties:
- ak8963
- ak09911
- ak09912
- ak09916
deprecated: true
reg:

View File

@ -34,7 +34,6 @@ properties:
and length of the AXI DMA controller IO space, unless
axistream-connected is specified, in which case the reg
attribute of the node referenced by it is used.
minItems: 1
maxItems: 2
interrupts:
@ -166,7 +165,7 @@ examples:
clock-names = "s_axi_lite_clk", "axis_clk", "ref_clk", "mgt_clk";
clocks = <&axi_clk>, <&axi_clk>, <&pl_enet_ref_clk>, <&mgt_clk>;
phy-mode = "mii";
reg = <0x40000000 0x40000>;
reg = <0x00 0x40000000 0x00 0x40000>;
xlnx,rxcsum = <0x2>;
xlnx,rxmem = <0x800>;
xlnx,txcsum = <0x2>;

View File

@ -21,7 +21,6 @@ properties:
- nxp,imx8mm-fspi
- nxp,imx8mp-fspi
- nxp,imx8qxp-fspi
- nxp,imx8ulp-fspi
- nxp,lx2160a-fspi
- items:
- enum:

View File

@ -1,2 +0,0 @@
# include OWNERS from the top level trusty repo
include trusty:refs/meta/config:/OWNERS

View File

@ -1,67 +0,0 @@
Trusty irq interface
Trusty requires non-secure irqs to be forwarded to the secure OS.
Required properties:
- compatible: "android,trusty-irq-v1"
Optional properties:
- interrupt-templates: is an optional property that works together
with "interrupt-ranges" to specify secure side to kernel IRQs mapping.
It is a list of entries, each one of which defines a group of interrupts
having common properties, and has the following format:
< phandle irq_id_pos [templ_data]>
phandle - phandle of interrupt controller this template is for
irq_id_pos - the position of irq id in interrupt specifier array
for interrupt controller referenced by phandle.
templ_data - is an array of u32 values (could be empty) in the same
format as interrupt specifier for interrupt controller
referenced by phandle but with omitted irq id field.
- interrupt-ranges: list of entries that specifies secure side to kernel
IRQs mapping.
Each entry in the "interrupt-ranges" list has the following format:
<beg end templ_idx>
beg - first entry in this range
end - last entry in this range
templ_idx - index of entry in "interrupt-templates" property
that must be used as a template for all interrupts
in this range
- ipi-range: optional mapping of a linear range of trusty IRQs to a linear range
of IPIs (inter-processor interrupts). This has the following format:
<beg end ipi_base>
beg - first trusty IRQ number that is an IPI
end - last trusty IRQ number that is an IPI
ipi_base - IPI number of 'beg'
Example:
{
gic: interrupt-controller@50041000 {
compatible = "arm,gic-400";
#interrupt-cells = <3>;
interrupt-controller;
...
};
...
trusty {
compatible = "android,trusty-smc-v1";
ranges;
#address-cells = <2>;
#size-cells = <2>;
irq {
compatible = "android,trusty-irq-v1";
interrupt-templates = <&gic 1 GIC_PPI 0>,
<&gic 1 GIC_SPI 0>;
interrupt-ranges = <16 31 0>,
<32 223 1>;
ipi-range = <8 15 8>;
};
}
}
Must be a child of the node that provides the trusty std/fast call interface.

View File

@ -1,6 +0,0 @@
Trusty smc interface
Trusty is running in secure mode on the same (arm) cpu(s) as the current os.
Required properties:
- compatible: "android,trusty-smc-v1"

View File

@ -540,7 +540,7 @@ at module load time (for a module) with::
alerts_broken
The addresses are normal I2C addresses. The adapter is the string
name of the adapter, as shown in /sys/bus/i2c/devices/i2c-<n>/name.
name of the adapter, as shown in /sys/class/i2c-adapter/i2c-<n>/name.
It is *NOT* i2c-<n> itself. Also, the comparison is done ignoring
spaces, so if the name is "This is an I2C chip" you can say
adapter_name=ThisisanI2cchip. This is because it's hard to pass in

View File

@ -182,31 +182,29 @@ fault_type=%d Support configuring fault injection type, should be
enabled with fault_injection option, fault type value
is shown below, it supports single or combined type.
=========================== ===========
Type_Name Type_Value
=========================== ===========
FAULT_KMALLOC 0x000000001
FAULT_KVMALLOC 0x000000002
FAULT_PAGE_ALLOC 0x000000004
FAULT_PAGE_GET 0x000000008
FAULT_ALLOC_BIO 0x000000010 (obsolete)
FAULT_ALLOC_NID 0x000000020
FAULT_ORPHAN 0x000000040
FAULT_BLOCK 0x000000080
FAULT_DIR_DEPTH 0x000000100
FAULT_EVICT_INODE 0x000000200
FAULT_TRUNCATE 0x000000400
FAULT_READ_IO 0x000000800
FAULT_CHECKPOINT 0x000001000
FAULT_DISCARD 0x000002000
FAULT_WRITE_IO 0x000004000
FAULT_SLAB_ALLOC 0x000008000
FAULT_DQUOT_INIT 0x000010000
FAULT_LOCK_OP 0x000020000
FAULT_BLKADDR_VALIDITY 0x000040000
FAULT_BLKADDR_CONSISTENCE 0x000080000
FAULT_NO_SEGMENT 0x000100000
=========================== ===========
=================== ===========
Type_Name Type_Value
=================== ===========
FAULT_KMALLOC 0x000000001
FAULT_KVMALLOC 0x000000002
FAULT_PAGE_ALLOC 0x000000004
FAULT_PAGE_GET 0x000000008
FAULT_ALLOC_BIO 0x000000010 (obsolete)
FAULT_ALLOC_NID 0x000000020
FAULT_ORPHAN 0x000000040
FAULT_BLOCK 0x000000080
FAULT_DIR_DEPTH 0x000000100
FAULT_EVICT_INODE 0x000000200
FAULT_TRUNCATE 0x000000400
FAULT_READ_IO 0x000000800
FAULT_CHECKPOINT 0x000001000
FAULT_DISCARD 0x000002000
FAULT_WRITE_IO 0x000004000
FAULT_SLAB_ALLOC 0x000008000
FAULT_DQUOT_INIT 0x000010000
FAULT_LOCK_OP 0x000020000
FAULT_BLKADDR 0x000040000
=================== ===========
mode=%s Control block allocation mode which supports "adaptive"
and "lfs". In "lfs" mode, there should be no random
writes towards main area.
@ -774,35 +772,6 @@ In order to identify whether the data in the victim segment are valid or not,
F2FS manages a bitmap. Each bit represents the validity of a block, and the
bitmap is composed of a bit stream covering whole blocks in main area.
Write-hint Policy
-----------------
F2FS sets the whint all the time with the below policy.
===================== ======================== ===================
User F2FS Block
===================== ======================== ===================
N/A META WRITE_LIFE_NONE|REQ_META
N/A HOT_NODE WRITE_LIFE_NONE
N/A WARM_NODE WRITE_LIFE_MEDIUM
N/A COLD_NODE WRITE_LIFE_LONG
ioctl(COLD) COLD_DATA WRITE_LIFE_EXTREME
extension list " "
-- buffered io
N/A COLD_DATA WRITE_LIFE_EXTREME
N/A HOT_DATA WRITE_LIFE_SHORT
N/A WARM_DATA WRITE_LIFE_NOT_SET
-- direct io
WRITE_LIFE_EXTREME COLD_DATA WRITE_LIFE_EXTREME
WRITE_LIFE_SHORT HOT_DATA WRITE_LIFE_SHORT
WRITE_LIFE_NOT_SET WARM_DATA WRITE_LIFE_NOT_SET
WRITE_LIFE_NONE " WRITE_LIFE_NONE
WRITE_LIFE_MEDIUM " WRITE_LIFE_MEDIUM
WRITE_LIFE_LONG " WRITE_LIFE_LONG
===================== ======================== ===================
Fallocate(2) Policy
-------------------

View File

@ -261,9 +261,9 @@ DIRECT_KEY policies
The Adiantum encryption mode (see `Encryption modes and usage`_) is
suitable for both contents and filenames encryption, and it accepts
long IVs --- long enough to hold both an 8-byte data unit index and a
16-byte per-file nonce. Also, the overhead of each Adiantum key is
greater than that of an AES-256-XTS key.
long IVs --- long enough to hold both an 8-byte logical block number
and a 16-byte per-file nonce. Also, the overhead of each Adiantum key
is greater than that of an AES-256-XTS key.
Therefore, to improve performance and save memory, for Adiantum a
"direct key" configuration is supported. When the user has enabled
@ -300,8 +300,8 @@ IV_INO_LBLK_32 policies
IV_INO_LBLK_32 policies work like IV_INO_LBLK_64, except that for
IV_INO_LBLK_32, the inode number is hashed with SipHash-2-4 (where the
SipHash key is derived from the master key) and added to the file data
unit index mod 2^32 to produce a 32-bit IV.
SipHash key is derived from the master key) and added to the file
logical block number mod 2^32 to produce a 32-bit IV.
This format is optimized for use with inline encryption hardware
compliant with the eMMC v5.2 standard, which supports only 32 IV bits
@ -451,62 +451,31 @@ acceleration is recommended:
Contents encryption
-------------------
For contents encryption, each file's contents is divided into "data
units". Each data unit is encrypted independently. The IV for each
data unit incorporates the zero-based index of the data unit within
the file. This ensures that each data unit within a file is encrypted
differently, which is essential to prevent leaking information.
For file contents, each filesystem block is encrypted independently.
Starting from Linux kernel 5.5, encryption of filesystems with block
size less than system's page size is supported.
Note: the encryption depending on the offset into the file means that
operations like "collapse range" and "insert range" that rearrange the
extent mapping of files are not supported on encrypted files.
Each block's IV is set to the logical block number within the file as
a little endian number, except that:
There are two cases for the sizes of the data units:
- With CBC mode encryption, ESSIV is also used. Specifically, each IV
is encrypted with AES-256 where the AES-256 key is the SHA-256 hash
of the file's data encryption key.
* Fixed-size data units. This is how all filesystems other than UBIFS
work. A file's data units are all the same size; the last data unit
is zero-padded if needed. By default, the data unit size is equal
to the filesystem block size. On some filesystems, users can select
a sub-block data unit size via the ``log2_data_unit_size`` field of
the encryption policy; see `FS_IOC_SET_ENCRYPTION_POLICY`_.
- With `DIRECT_KEY policies`_, the file's nonce is appended to the IV.
Currently this is only allowed with the Adiantum encryption mode.
* Variable-size data units. This is what UBIFS does. Each "UBIFS
data node" is treated as a crypto data unit. Each contains variable
length, possibly compressed data, zero-padded to the next 16-byte
boundary. Users cannot select a sub-block data unit size on UBIFS.
- With `IV_INO_LBLK_64 policies`_, the logical block number is limited
to 32 bits and is placed in bits 0-31 of the IV. The inode number
(which is also limited to 32 bits) is placed in bits 32-63.
In the case of compression + encryption, the compressed data is
encrypted. UBIFS compression works as described above. f2fs
compression works a bit differently; it compresses a number of
filesystem blocks into a smaller number of filesystem blocks.
Therefore a f2fs-compressed file still uses fixed-size data units, and
it is encrypted in a similar way to a file containing holes.
- With `IV_INO_LBLK_32 policies`_, the logical block number is limited
to 32 bits and is placed in bits 0-31 of the IV. The inode number
is then hashed and added mod 2^32.
As mentioned in `Key hierarchy`_, the default encryption setting uses
per-file keys. In this case, the IV for each data unit is simply the
index of the data unit in the file. However, users can select an
encryption setting that does not use per-file keys. For these, some
kind of file identifier is incorporated into the IVs as follows:
- With `DIRECT_KEY policies`_, the data unit index is placed in bits
0-63 of the IV, and the file's nonce is placed in bits 64-191.
- With `IV_INO_LBLK_64 policies`_, the data unit index is placed in
bits 0-31 of the IV, and the file's inode number is placed in bits
32-63. This setting is only allowed when data unit indices and
inode numbers fit in 32 bits.
- With `IV_INO_LBLK_32 policies`_, the file's inode number is hashed
and added to the data unit index. The resulting value is truncated
to 32 bits and placed in bits 0-31 of the IV. This setting is only
allowed when data unit indices and inode numbers fit in 32 bits.
The byte order of the IV is always little endian.
If the user selects FSCRYPT_MODE_AES_128_CBC for the contents mode, an
ESSIV layer is automatically included. In this case, before the IV is
passed to AES-128-CBC, it is encrypted with AES-256 where the AES-256
key is the SHA-256 hash of the file's contents encryption key.
Note that because file logical block numbers are included in the IVs,
filesystems must enforce that blocks are never shifted around within
encrypted files, e.g. via "collapse range" or "insert range".
Filenames encryption
--------------------
@ -575,8 +544,7 @@ follows::
__u8 contents_encryption_mode;
__u8 filenames_encryption_mode;
__u8 flags;
__u8 log2_data_unit_size;
__u8 __reserved[3];
__u8 __reserved[4];
__u8 master_key_identifier[FSCRYPT_KEY_IDENTIFIER_SIZE];
};
@ -618,29 +586,6 @@ This structure must be initialized as follows:
The DIRECT_KEY, IV_INO_LBLK_64, and IV_INO_LBLK_32 flags are
mutually exclusive.
- ``log2_data_unit_size`` is the log2 of the data unit size in bytes,
or 0 to select the default data unit size. The data unit size is
the granularity of file contents encryption. For example, setting
``log2_data_unit_size`` to 12 causes file contents be passed to the
underlying encryption algorithm (such as AES-256-XTS) in 4096-byte
data units, each with its own IV.
Not all filesystems support setting ``log2_data_unit_size``. ext4
and f2fs support it since Linux v6.7. On filesystems that support
it, the supported nonzero values are 9 through the log2 of the
filesystem block size, inclusively. The default value of 0 selects
the filesystem block size.
The main use case for ``log2_data_unit_size`` is for selecting a
data unit size smaller than the filesystem block size for
compatibility with inline encryption hardware that only supports
smaller data unit sizes. ``/sys/block/$disk/queue/crypto/`` may be
useful for checking which data unit sizes are supported by a
particular system's inline encryption hardware.
Leave this field zeroed unless you are certain you need it. Using
an unnecessarily small data unit size reduces performance.
- For v2 encryption policies, ``__reserved`` must be zeroed.
- For v1 encryption policies, ``master_key_descriptor`` specifies how
@ -1134,8 +1079,8 @@ The caller must zero all input fields, then fill in ``key_spec``:
On success, 0 is returned and the kernel fills in the output fields:
- ``status`` indicates whether the key is absent, present, or
incompletely removed. Incompletely removed means that removal has
been initiated, but some files are still in use; i.e.,
incompletely removed. Incompletely removed means that the master
secret has been removed, but some files are still in use; i.e.,
`FS_IOC_REMOVE_ENCRYPTION_KEY`_ returned 0 but set the informational
status flag FSCRYPT_KEY_REMOVAL_STATUS_FLAG_FILES_BUSY.

View File

@ -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.

View File

@ -323,30 +323,6 @@ and
The resulting access permissions should be the same. The difference is in
the time of copy (on-demand vs. up-front).
### Non overlapping credentials
As noted above, all access to the upper, lower and work directories is the
recorded mounter's MAC and DAC credentials. The incoming accesses are
checked against the caller's credentials.
In the case where caller MAC or DAC credentials do not overlap the mounter, a
use case available in older versions of the driver, the override_creds mount
flag can be turned off. For when the use pattern has caller with legitimate
credentials where the mounter does not. For example init may have been the
mounter, but the caller would have execute or read MAC permissions where
init would not. override_creds off means all access, incoming, upper, lower
or working, will be tested against the caller.
Several unintended side effects will occur though. The caller without certain
key capabilities or lower privilege will not always be able to delete files or
directories, create nodes, or search some restricted directories. The ability
to search and read a directory entry is spotty as a result of the cache
mechanism not re-testing the credentials because of the assumption, a
privileged caller can fill cache, then a lower privilege can read the directory
cache. The uneven security model where cache, upperdir and workdir are opened
at privilege, but accessed without creating a form of privilege escalation,
should only be used with strict understanding of the side effects and of the
security policies.
Multiple lower layers
---------------------

View File

@ -528,9 +528,9 @@ replaced by copy-on-write) part of the underlying shmem object out on swap.
does not take into account swapped out page of underlying shmem objects.
"Locked" indicates whether the mapping is locked in memory or not.
"THPeligible" indicates whether the mapping is eligible for allocating
naturally aligned THP pages of any currently enabled size. 1 if true, 0
otherwise.
"THPeligible" indicates whether the mapping is eligible for allocating THP
pages as well as the THP is PMD mappable or not - 1 if true, 0 otherwise.
It just shows the current status.
"VmFlags" field deserves a separate description. This member represents the
kernel flags associated with the particular virtual memory area in two letter
@ -571,7 +571,6 @@ encoded manner. The codes are the following:
um userfaultfd missing tracking
uw userfaultfd wr-protect tracking
ss shadow stack page
sl sealed
== =======================================
Note that there is no guarantee that every flag and associated mnemonic will

View File

@ -32,11 +32,6 @@ Additional options to pass when preprocessing. The preprocessing options
will be used in all cases where kbuild does preprocessing including
building C files and assembler files.
KCPPFLAGS_COMPAT
----------------
Additional options to pass to $(CC_COMPAT) when preprocessing C and assembler
files.
KAFLAGS
-------
Additional options to the assembler (for built-in and modules).

View File

@ -21,7 +21,6 @@ This document describes how to build an out-of-tree kernel module.
--- 4.1 Kernel Includes
--- 4.2 Single Subdirectory
--- 4.3 Several Subdirectories
--- 4.4 UAPI Headers Installation
=== 5. Module Installation
--- 5.1 INSTALL_MOD_PATH
--- 5.2 INSTALL_MOD_DIR
@ -132,10 +131,6 @@ executed to make module versioning work.
/lib/modules/<kernel_release>/updates/, but a prefix may
be added with INSTALL_MOD_PATH (discussed in section 5).
headers_install
Export headers in a format suitable for userspace. The default
location is $PWD/usr. INSTALL_HDR_PATH can change this path.
clean
Remove all generated files in the module directory only.
@ -411,17 +406,6 @@ according to the following rule:
pointing to the directory where the currently executing kbuild
file is located.
4.4 UAPI Headers Installation
-----------------------------
External modules may export headers to userspace in a similar
fashion to the in-tree counterpart drivers. kbuild supports
running headers_install target in an out-of-tree. The location
where kbuild searches for headers is $(M)/include/uapi and
$(M)/arch/$(SRCARCH)/include/uapi.
See also Documentation/kbuild/headers_install.rst.
5. Module Installation
======================

View File

@ -117,7 +117,7 @@ pages:
- map/unmap of a PMD entry for the whole THP increment/decrement
folio->_entire_mapcount and also increment/decrement
folio->_nr_pages_mapped by ENTIRELY_MAPPED when _entire_mapcount
folio->_nr_pages_mapped by COMPOUND_MAPPED when _entire_mapcount
goes from -1 to 0 or 0 to -1.
- map/unmap of individual pages with PTE entry increment/decrement
@ -156,7 +156,7 @@ Partial unmap and deferred_split_folio()
Unmapping part of THP (with munmap() or other way) is not going to free
memory immediately. Instead, we detect that a subpage of THP is not in use
in folio_remove_rmap_*() and queue the THP for splitting if memory pressure
in page_remove_rmap() and queue the THP for splitting if memory pressure
comes. Splitting will free up unused subpages.
Splitting the page right away is not an option due to locking context in

View File

@ -486,7 +486,7 @@ munlock the pages if we're removing the last VM_LOCKED VMA that maps the pages.
Before the unevictable/mlock changes, mlocking did not mark the pages in any
way, so unmapping them required no processing.
For each PTE (or PMD) being unmapped from a VMA, folio_remove_rmap_*() calls
For each PTE (or PMD) being unmapped from a VMA, page_remove_rmap() calls
munlock_vma_folio(), which calls munlock_folio() when the VMA is VM_LOCKED
(unless it was a PTE mapping of a part of a transparent huge page).
@ -511,7 +511,7 @@ userspace; truncation even unmaps and deletes any private anonymous pages
which had been Copied-On-Write from the file pages now being truncated.
Mlocked pages can be munlocked and deleted in this way: like with munmap(),
for each PTE (or PMD) being unmapped from a VMA, folio_remove_rmap_*() calls
for each PTE (or PMD) being unmapped from a VMA, page_remove_rmap() calls
munlock_vma_folio(), which calls munlock_folio() when the VMA is VM_LOCKED
(unless it was a PTE mapping of a part of a transparent huge page).

View File

@ -71,31 +71,6 @@ whose performance is scaled together. Performance domains generally have a
required to have the same micro-architecture. CPUs in different performance
domains can have different micro-architectures.
To better reflect power variation due to static power (leakage) the EM
supports runtime modifications of the power values. The mechanism relies on
RCU to free the modifiable EM perf_state table memory. Its user, the task
scheduler, also uses RCU to access this memory. The EM framework provides
API for allocating/freeing the new memory for the modifiable EM table.
The old memory is freed automatically using RCU callback mechanism when there
are no owners anymore for the given EM runtime table instance. This is tracked
using kref mechanism. The device driver which provided the new EM at runtime,
should call EM API to free it safely when it's no longer needed. The EM
framework will handle the clean-up when it's possible.
The kernel code which want to modify the EM values is protected from concurrent
access using a mutex. Therefore, the device driver code must run in sleeping
context when it tries to modify the EM.
With the runtime modifiable EM we switch from a 'single and during the entire
runtime static EM' (system property) design to a 'single EM which can be
changed during runtime according e.g. to the workload' (system and workload
property) design.
It is possible also to modify the CPU performance values for each EM's
performance state. Thus, the full power and performance profile (which
is an exponential curve) can be changed according e.g. to the workload
or system property.
2. Core APIs
------------
@ -200,82 +175,10 @@ CPUfreq governor is in use in case of CPU device. Currently this calculation is
not provided for other type of devices.
More details about the above APIs can be found in ``<linux/energy_model.h>``
or in Section 2.5
or in Section 2.4
2.4 Runtime modifications
^^^^^^^^^^^^^^^^^^^^^^^^^
Drivers willing to update the EM at runtime should use the following dedicated
function to allocate a new instance of the modified EM. The API is listed
below::
struct em_perf_table __rcu *em_table_alloc(struct em_perf_domain *pd);
This allows to allocate a structure which contains the new EM table with
also RCU and kref needed by the EM framework. The 'struct em_perf_table'
contains array 'struct em_perf_state state[]' which is a list of performance
states in ascending order. That list must be populated by the device driver
which wants to update the EM. The list of frequencies can be taken from
existing EM (created during boot). The content in the 'struct em_perf_state'
must be populated by the driver as well.
This is the API which does the EM update, using RCU pointers swap::
int em_dev_update_perf_domain(struct device *dev,
struct em_perf_table __rcu *new_table);
Drivers must provide a pointer to the allocated and initialized new EM
'struct em_perf_table'. That new EM will be safely used inside the EM framework
and will be visible to other sub-systems in the kernel (thermal, powercap).
The main design goal for this API is to be fast and avoid extra calculations
or memory allocations at runtime. When pre-computed EMs are available in the
device driver, than it should be possible to simply re-use them with low
performance overhead.
In order to free the EM, provided earlier by the driver (e.g. when the module
is unloaded), there is a need to call the API::
void em_table_free(struct em_perf_table __rcu *table);
It will allow the EM framework to safely remove the memory, when there is
no other sub-system using it, e.g. EAS.
To use the power values in other sub-systems (like thermal, powercap) there is
a need to call API which protects the reader and provide consistency of the EM
table data::
struct em_perf_state *em_perf_state_from_pd(struct em_perf_domain *pd);
It returns the 'struct em_perf_state' pointer which is an array of performance
states in ascending order.
This function must be called in the RCU read lock section (after the
rcu_read_lock()). When the EM table is not needed anymore there is a need to
call rcu_real_unlock(). In this way the EM safely uses the RCU read section
and protects the users. It also allows the EM framework to manage the memory
and free it. More details how to use it can be found in Section 3.2 in the
example driver.
There is dedicated API for device drivers to calculate em_perf_state::cost
values::
int em_dev_compute_costs(struct device *dev, struct em_perf_state *table,
int nr_states);
These 'cost' values from EM are used in EAS. The new EM table should be passed
together with the number of entries and device pointer. When the computation
of the cost values is done properly the return value from the function is 0.
The function takes care for right setting of inefficiency for each performance
state as well. It updates em_perf_state::flags accordingly.
Then such prepared new EM can be passed to the em_dev_update_perf_domain()
function, which will allow to use it.
More details about the above APIs can be found in ``<linux/energy_model.h>``
or in Section 3.2 with an example code showing simple implementation of the
updating mechanism in a device driver.
2.5 Description details of this API
2.4 Description details of this API
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.. kernel-doc:: include/linux/energy_model.h
:internal:
@ -284,11 +187,8 @@ updating mechanism in a device driver.
:export:
3. Examples
-----------
3.1 Example driver with EM registration
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
3. Example driver
-----------------
The CPUFreq framework supports dedicated callback for registering
the EM for a given CPU(s) 'policy' object: cpufreq_driver::register_em().
@ -342,78 +242,3 @@ EM framework::
39 static struct cpufreq_driver foo_cpufreq_driver = {
40 .register_em = foo_cpufreq_register_em,
41 };
3.2 Example driver with EM modification
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
This section provides a simple example of a thermal driver modifying the EM.
The driver implements a foo_thermal_em_update() function. The driver is woken
up periodically to check the temperature and modify the EM data::
-> drivers/soc/example/example_em_mod.c
01 static void foo_get_new_em(struct foo_context *ctx)
02 {
03 struct em_perf_table __rcu *em_table;
04 struct em_perf_state *table, *new_table;
05 struct device *dev = ctx->dev;
06 struct em_perf_domain *pd;
07 unsigned long freq;
08 int i, ret;
09
10 pd = em_pd_get(dev);
11 if (!pd)
12 return;
13
14 em_table = em_table_alloc(pd);
15 if (!em_table)
16 return;
17
18 new_table = em_table->state;
19
20 rcu_read_lock();
21 table = em_perf_state_from_pd(pd);
22 for (i = 0; i < pd->nr_perf_states; i++) {
23 freq = table[i].frequency;
24 foo_get_power_perf_values(dev, freq, &new_table[i]);
25 }
26 rcu_read_unlock();
27
28 /* Calculate 'cost' values for EAS */
29 ret = em_dev_compute_costs(dev, table, pd->nr_perf_states);
30 if (ret) {
31 dev_warn(dev, "EM: compute costs failed %d\n", ret);
32 em_free_table(em_table);
33 return;
34 }
35
36 ret = em_dev_update_perf_domain(dev, em_table);
37 if (ret) {
38 dev_warn(dev, "EM: update failed %d\n", ret);
39 em_free_table(em_table);
40 return;
41 }
42
43 /*
44 * Since it's one-time-update drop the usage counter.
45 * The EM framework will later free the table when needed.
46 */
47 em_table_free(em_table);
48 }
49
50 /*
51 * Function called periodically to check the temperature and
52 * update the EM if needed
53 */
54 static void foo_thermal_em_update(struct foo_context *ctx)
55 {
56 struct device *dev = ctx->dev;
57 int cpu;
58
59 ctx->temperature = foo_get_temp(dev, ctx);
60 if (ctx->temperature < FOO_EM_UPDATE_TEMP_THRESHOLD)
61 return;
62
63 foo_get_new_em(ctx);
64 }

View File

@ -31,7 +31,7 @@ you probably needn't concern yourself with pcmciautils.
====================== =============== ========================================
GNU C 5.1 gcc --version
Clang/LLVM (optional) 11.0.0 clang --version
Rust (optional) 1.71.1 rustc --version
Rust (optional) 1.73.0 rustc --version
bindgen (optional) 0.65.1 bindgen --version
GNU make 3.82 make --version
bash 4.2 bash --version

View File

@ -402,7 +402,7 @@ Consequently, the only sane governor to use together with EAS is schedutil,
because it is the only one providing some degree of consistency between
frequency requests and energy predictions.
Using EAS with any other governor than schedutil is not recommended.
Using EAS with any other governor than schedutil is not supported.
6.5 Scale-invariant utilization signals

View File

@ -90,8 +90,8 @@ For more detail see:
- Documentation/scheduler/sched-capacity.rst:"1. CPU Capacity + 2. Task utilization"
UTIL_EST
========
UTIL_EST / UTIL_EST_FASTUP
==========================
Because periodic tasks have their averages decayed while they sleep, even
though when running their expected utilization will be the same, they suffer a
@ -99,7 +99,8 @@ though when running their expected utilization will be the same, they suffer a
To alleviate this (a default enabled option) UTIL_EST drives an Infinite
Impulse Response (IIR) EWMA with the 'running' value on dequeue -- when it is
highest. UTIL_EST filters to instantly increase and only decay on decrease.
highest. A further default enabled option UTIL_EST_FASTUP modifies the IIR
filter to instantly increase and only decay on decrease.
A further runqueue wide sum (of runnable tasks) is maintained of:

View File

@ -107,14 +107,14 @@ GetOptions(
);
# Defaults for dynamically discovered regex's
my $regex_direct_begin_default = 'order=([0-9]*) gfp_flags=([A-Z_|]*)';
my $regex_direct_begin_default = 'order=([0-9]*) may_writepage=([0-9]*) gfp_flags=([A-Z_|]*)';
my $regex_direct_end_default = 'nr_reclaimed=([0-9]*)';
my $regex_kswapd_wake_default = 'nid=([0-9]*) order=([0-9]*)';
my $regex_kswapd_sleep_default = 'nid=([0-9]*)';
my $regex_wakeup_kswapd_default = 'nid=([0-9]*) order=([0-9]*) gfp_flags=([A-Z_|]*)';
my $regex_lru_isolate_default = 'classzone=([0-9]*) order=([0-9]*) nr_requested=([0-9]*) nr_scanned=([0-9]*) nr_skipped=([0-9]*) nr_taken=([0-9]*) lru=([a-z_]*)';
my $regex_wakeup_kswapd_default = 'nid=([0-9]*) zid=([0-9]*) order=([0-9]*) gfp_flags=([A-Z_|]*)';
my $regex_lru_isolate_default = 'isolate_mode=([0-9]*) classzone_idx=([0-9]*) order=([0-9]*) nr_requested=([0-9]*) nr_scanned=([0-9]*) nr_skipped=([0-9]*) nr_taken=([0-9]*) lru=([a-z_]*)';
my $regex_lru_shrink_inactive_default = 'nid=([0-9]*) nr_scanned=([0-9]*) nr_reclaimed=([0-9]*) nr_dirty=([0-9]*) nr_writeback=([0-9]*) nr_congested=([0-9]*) nr_immediate=([0-9]*) nr_activate_anon=([0-9]*) nr_activate_file=([0-9]*) nr_ref_keep=([0-9]*) nr_unmap_fail=([0-9]*) priority=([0-9]*) flags=([A-Z_|]*)';
my $regex_lru_shrink_active_default = 'lru=([A-Z_]*) nr_taken=([0-9]*) nr_active=([0-9]*) nr_deactivated=([0-9]*) nr_referenced=([0-9]*) priority=([0-9]*) flags=([A-Z_|]*)' ;
my $regex_lru_shrink_active_default = 'lru=([A-Z_]*) nr_scanned=([0-9]*) nr_rotated=([0-9]*) priority=([0-9]*)';
my $regex_writepage_default = 'page=([0-9a-f]*) pfn=([0-9]*) flags=([A-Z_|]*)';
# Dyanically discovered regex
@ -184,7 +184,8 @@ sub generate_traceevent_regex {
$regex_direct_begin = generate_traceevent_regex(
"vmscan/mm_vmscan_direct_reclaim_begin",
$regex_direct_begin_default,
"order", "gfp_flags");
"order", "may_writepage",
"gfp_flags");
$regex_direct_end = generate_traceevent_regex(
"vmscan/mm_vmscan_direct_reclaim_end",
$regex_direct_end_default,
@ -200,11 +201,11 @@ $regex_kswapd_sleep = generate_traceevent_regex(
$regex_wakeup_kswapd = generate_traceevent_regex(
"vmscan/mm_vmscan_wakeup_kswapd",
$regex_wakeup_kswapd_default,
"nid", "order", "gfp_flags");
"nid", "zid", "order", "gfp_flags");
$regex_lru_isolate = generate_traceevent_regex(
"vmscan/mm_vmscan_lru_isolate",
$regex_lru_isolate_default,
"classzone", "order",
"isolate_mode", "classzone_idx", "order",
"nr_requested", "nr_scanned", "nr_skipped", "nr_taken",
"lru");
$regex_lru_shrink_inactive = generate_traceevent_regex(
@ -217,10 +218,11 @@ $regex_lru_shrink_inactive = generate_traceevent_regex(
$regex_lru_shrink_active = generate_traceevent_regex(
"vmscan/mm_vmscan_lru_shrink_active",
$regex_lru_shrink_active_default,
"nid", "nr_taken", "nr_active", "nr_deactivated", "nr_referenced",
"priority", "flags");
"nid", "zid",
"lru",
"nr_scanned", "nr_rotated", "priority");
$regex_writepage = generate_traceevent_regex(
"vmscan/mm_vmscan_write_folio",
"vmscan/mm_vmscan_writepage",
$regex_writepage_default,
"page", "pfn", "flags");
@ -369,7 +371,7 @@ EVENT_PROCESS:
print " $regex_wakeup_kswapd\n";
next;
}
my $order = $2;
my $order = $3;
$perprocesspid{$process_pid}->{MM_VMSCAN_WAKEUP_KSWAPD_PERORDER}[$order]++;
} elsif ($tracepoint eq "mm_vmscan_lru_isolate") {
$details = $6;
@ -379,14 +381,18 @@ EVENT_PROCESS:
print " $regex_lru_isolate/o\n";
next;
}
my $nr_scanned = $4;
my $lru = $7;
my $isolate_mode = $1;
my $nr_scanned = $5;
my $file = $8;
# To closer match vmstat scanning statistics, only count
# inactive lru as scanning
if ($lru =~ /inactive_/) {
# To closer match vmstat scanning statistics, only count isolate_both
# and isolate_inactive as scanning. isolate_active is rotation
# isolate_inactive == 1
# isolate_active == 2
# isolate_both == 3
if ($isolate_mode != 2) {
$perprocesspid{$process_pid}->{HIGH_NR_SCANNED} += $nr_scanned;
if ($lru =~ /_file/) {
if ($file =~ /_file/) {
$perprocesspid{$process_pid}->{HIGH_NR_FILE_SCANNED} += $nr_scanned;
} else {
$perprocesspid{$process_pid}->{HIGH_NR_ANON_SCANNED} += $nr_scanned;

View File

@ -89,15 +89,16 @@ r_cpu被定义为当前CPU的最高性能水平与系统中任何其它CPU的最
- Documentation/translations/zh_CN/scheduler/sched-capacity.rst:"1. CPU Capacity + 2. Task utilization"
UTIL_EST
========
UTIL_EST / UTIL_EST_FASTUP
==========================
由于周期性任务的平均数在睡眠时会衰减,而在运行时其预期利用率会和睡眠前相同,
因此它们在再次运行后会面临DVFS的上涨。
为了缓解这个问题一个默认使能的编译选项UTIL_EST驱动一个无限脉冲响应
Infinite Impulse ResponseIIR的EWMA“运行”值在出队时是最高的。
UTIL_EST滤波使其在遇到更高值时立刻增加而遇到低值时会缓慢衰减。
另一个默认使能的编译选项UTIL_EST_FASTUP修改了IIR滤波器使其允许立即增加
仅在利用率下降时衰减。
进一步,运行队列的(可运行任务的)利用率之和由下式计算:

View File

@ -137,7 +137,6 @@ Code Seq# Include File Comments
'F' DD video/sstfb.h conflict!
'G' 00-3F drivers/misc/sgi-gru/grulib.h conflict!
'G' 00-0F xen/gntalloc.h, xen/gntdev.h conflict!
'G' 00-0F linux/gunyah.h conflict!
'H' 00-7F linux/hiddev.h conflict!
'H' 00-0F linux/hidraw.h conflict!
'H' 01 linux/mei.h conflict!

View File

@ -602,17 +602,6 @@ Buffer Flags
the format. Any subsequent call to the
:ref:`VIDIOC_DQBUF <VIDIOC_QBUF>` ioctl will not block anymore,
but return an ``EPIPE`` error code.
* .. _`V4L2-BUF-FLAG-HEADERS-ONLY`:
- ``V4L2_BUF_FLAG_HEADERS_ONLY``
- 0x00200000
- This flag may be set when the buffer only contains codec
header, but does not contain any frame data. Usually the codec
header is merged to the next idr frame, with the flag
``V4L2_BUF_FLAG_KEYFRAME``, but there is still some scenes that will
split the header and queue it separately. This flag can set only when
codec support V4L2_MPEG_VIDEO_HEADER_MODE_SEPARATE,
and the header mode is set to V4L2_MPEG_VIDEO_HEADER_MODE_SEPARATE
* .. _`V4L2-BUF-FLAG-REQUEST-FD`:
- ``V4L2_BUF_FLAG_REQUEST_FD``

View File

@ -1386,12 +1386,8 @@ enum v4l2_mpeg_video_intra_refresh_period_type -
(enum)
enum v4l2_mpeg_video_header_mode -
Determines whether the header is returned as the first buffer
with flag V4L2_BUF_FLAG_HEADERS_ONLY or is
it returned together with the first frame.
Applicable to encoders and decoders.
If it's not implemented in a driver,
V4L2_MPEG_VIDEO_HEADER_MODE_JOINED_WITH_1ST_FRAME is to be assumed,
Determines whether the header is returned as the first buffer or is
it returned together with the first frame. Applicable to encoders.
Possible values are:
.. raw:: latex
@ -1405,7 +1401,7 @@ enum v4l2_mpeg_video_header_mode -
:stub-columns: 0
* - ``V4L2_MPEG_VIDEO_HEADER_MODE_SEPARATE``
- The stream header is returned separately in the first buffer with the flag V4L2_BUF_FLAG_HEADERS_ONLY.
- The stream header is returned separately in the first buffer.
* - ``V4L2_MPEG_VIDEO_HEADER_MODE_JOINED_WITH_1ST_FRAME``
- The stream header is returned together with the first encoded
frame.

View File

@ -1,87 +0,0 @@
.. SPDX-License-Identifier: GPL-2.0
======================
GenieZone Introduction
======================
Overview
========
GenieZone hypervisor (gzvm) is a type-1 hypervisor that supports various virtual
machine types and provides security features such as TEE-like scenarios and
secure boot. It can create guest VMs for security use cases and has
virtualization capabilities for both platform and interrupt. Although the
hypervisor can be booted independently, it requires the assistance of GenieZone
hypervisor kernel driver(also named gzvm) to leverage the ability of Linux
kernel for vCPU scheduling, memory management, inter-VM communication and virtio
backend support.
Supported Architecture
======================
GenieZone now only supports MediaTek ARM64 SoC.
Features
========
- vCPU Management
VM manager aims to provide vCPUs on the basis of time sharing on physical
CPUs. It requires Linux kernel in host VM for vCPU scheduling and VM power
management.
- Memory Management
Direct use of physical memory from VMs is forbidden and designed to be
dictated to the privilege models managed by GenieZone hypervisor for security
reason. With the help of gzvm module, the hypervisor would be able to manipulate
memory as objects.
- Virtual Platform
We manage to emulate a virtual mobile platform for guest OS running on guest
VM. The platform supports various architecture-defined devices, such as
virtual arch timer, GIC, MMIO, PSCI, and exception watching...etc.
- Inter-VM Communication
Communication among guest VMs was provided mainly on RPC. More communication
mechanisms were to be provided in the future based on VirtIO-vsock.
- Device Virtualization
The solution is provided using the well-known VirtIO. The gzvm module would
redirect MMIO traps back to VMM where the virtual devices are mostly emulated.
Ioeventfd is implemented using eventfd for signaling host VM that some IO
events in guest VMs need to be processed.
- Interrupt virtualization
All Interrupts during some guest VMs running would be handled by GenieZone
hypervisor with the help of gzvm module, both virtual and physical ones.
In case there's no guest VM running out there, physical interrupts would be
handled by host VM directly for performance reason. Irqfd is also implemented
using eventfd for accepting vIRQ requests in gzvm module.
Platform architecture component
===============================
- vm
The vm component is responsible for setting up the capability and memory
management for the protected VMs. The capability is mainly about the lifecycle
control and boot context initialization. And the memory management is highly
integrated with ARM 2-stage translation tables to convert VA to IPA to PA
under proper security measures required by protected VMs.
- vcpu
The vcpu component is the core of virtualizing aarch64 physical CPU runnable,
and it controls the vCPU lifecycle including creating, running and destroying.
With self-defined exit handler, the vm component would be able to act
accordingly before terminated.
- vgic
The vgic component exposes control interfaces to Linux kernel via irqchip, and
we intend to support all SPI, PPI, and SGI. When it comes to virtual
interrupts, the GenieZone hypervisor would write to list registers and trigger
vIRQ injection in guest VMs via GIC.

View File

@ -1,135 +0,0 @@
.. SPDX-License-Identifier: GPL-2.0
=================
Gunyah Hypervisor
=================
.. toctree::
:maxdepth: 1
message-queue
Gunyah is a Type-1 hypervisor which is independent of any OS kernel, and runs in
a more privileged CPU level (EL2 on Aarch64). It does not depend on a less
privileged operating system for its core functionality. This increases its
security and can support a much smaller trusted computing base than a Type-2
hypervisor.
Gunyah is an open source hypervisor. The source repository is available at
https://github.com/quic/gunyah-hypervisor.
Gunyah provides these following features.
- Scheduling:
A scheduler for virtual CPUs (vCPUs) on physical CPUs enables time-sharing
of the CPUs. Gunyah supports two models of scheduling which can coexist on
a running system:
1. Hypervisor vCPU scheduling in which Gunyah hypervisor schedules vCPUS on
its own. The default is a real-time priority with round-robin scheduler.
2. "Proxy" scheduling in which an owner-VM can donate the remainder of its
own vCPU's time slice to an owned-VM's vCPU via a hypercall.
- Memory Management:
APIs handling memory, abstracted as objects, limiting direct use of physical
addresses. Memory ownership and usage tracking of all memory under its control.
Memory partitioning between VMs is a fundamental security feature.
- Interrupt Virtualization:
Interrupt ownership is tracked and interrupt delivery is directly to the
assigned VM. Gunyah makes use of hardware interrupt virtualization where
possible.
- Inter-VM Communication:
There are several different mechanisms provided for communicating between VMs.
1. Message queues
2. Doorbells
3. Virtio MMIO transport
4. Shared memory
- Virtual platform:
Architectural devices such as interrupt controllers and CPU timers are
directly provided by the hypervisor as well as core virtual platform devices
and system APIs such as ARM PSCI.
- Device Virtualization:
Para-virtualization of devices is supported using inter-VM communication and
virtio transport support. Select stage 2 faults by virtual machines that use
proxy-scheduled vCPUs can be handled directly by Linux to provide Type-2
hypervisor style on-demand paging and/or device emulation.
Architectures supported
=======================
AArch64 with a GICv3 or GICv4.1
Resources and Capabilities
==========================
Services/resources provided by the Gunyah hypervisor are accessible to a
virtual machine through capabilities. A capability is an access control
token granting the holder a set of permissions to operate on a specific
hypervisor object (conceptually similar to a file-descriptor).
For example, inter-VM communication using Gunyah doorbells and message queues
is performed using hypercalls taking Capability ID arguments for the required
IPC objects. These resources are described in Linux as a struct gunyah_resource.
Unlike UNIX file descriptors, there is no path-based or similar lookup of
an object to create a new Capability, meaning simpler security analysis.
Creation of a new Capability requires the holding of a set of privileged
Capabilities which are typically never given out by the Resource Manager (RM).
Gunyah itself provides no APIs for Capability ID discovery. Enumeration of
Capability IDs is provided by RM as a higher level service to VMs.
Resource Manager
================
The Gunyah Resource Manager (RM) is a privileged application VM supporting the
Gunyah Hypervisor. It provides policy enforcement aspects of the virtualization
system. The resource manager can be treated as an extension of the Hypervisor
but is separated to its own partition to ensure that the hypervisor layer itself
remains small and secure and to maintain a separation of policy and mechanism in
the platform. The resource manager runs at arm64 NS-EL1, similar to other
virtual machines.
Communication with the resource manager from other virtual machines happens as
described in message-queue.rst. Details about the specific messages can be found
in drivers/virt/gunyah/rsc_mgr.c
::
+-------+ +--------+ +--------+
| RM | | VM_A | | VM_B |
+-.-.-.-+ +---.----+ +---.----+
| | | |
+-.-.-----------.------------.----+
| | \==========/ | |
| \========================/ |
| Gunyah |
+---------------------------------+
The source for the resource manager is available at
https://github.com/quic/gunyah-resource-manager.
The resource manager provides the following features:
- VM lifecycle management: allocating a VM, starting VMs, destruction of VMs
- VM access control policy, including memory sharing and lending
- Interrupt routing configuration
- Forwarding of system-level events (e.g. VM shutdown) to owner VM
- Resource (capability) discovery
A VM requires boot configuration to establish communication with the resource
manager. This is provided to VMs via a 'hypervisor' device tree node which is
overlaid to the VMs DT by the RM. This node lets guests know they are running
as a Gunyah guest VM, how to communicate with resource manager, and basic
description and capabilities of this VM. See
Documentation/devicetree/bindings/firmware/gunyah-hypervisor.yaml for a
description of this node.

View File

@ -1,68 +0,0 @@
.. SPDX-License-Identifier: GPL-2.0
Message Queues
==============
Message queue is a simple low-capacity IPC channel between two virtual machines.
It is intended for sending small control and configuration messages. Each
message queue is unidirectional and buffered in the hypervisor. A full-duplex
IPC channel requires a pair of queues.
The size of the queue and the maximum size of the message that can be passed is
fixed at creation of the message queue. Resource manager is presently the only
use case for message queues, and creates messages queues between itself and VMs
with a fixed maximum message size of 240 bytes. Longer messages require a
further protocol on top of the message queue messages themselves. For instance,
communication with the resource manager adds a header field for sending longer
messages which are split into smaller fragments.
The diagram below shows how message queue works. A typical configuration
involves 2 message queues. Message queue 1 allows VM_A to send messages to VM_B.
Message queue 2 allows VM_B to send messages to VM_A.
1. VM_A sends a message of up to 240 bytes in length. It makes a hypercall
with the message to request the hypervisor to add the message to
message queue 1's queue. The hypervisor copies memory into the internal
message queue buffer; the memory doesn't need to be shared between
VM_A and VM_B.
2. Gunyah raises the corresponding interrupt for VM_B (Rx vIRQ) when any of
these happens:
a. gunyah_msgq_send() has PUSH flag. This is a typical case when the message
queue is being used to implement an RPC-like interface.
b. Explicitly with gunyah_msgq_push hypercall from VM_A.
c. Message queue has reached a threshold depth. Typically, this threshold
depth is the size of the queue (in other words: when queue is full, Rx
vIRQ is raised).
3. VM_B calls gunyah_msgq_recv() and Gunyah copies message to requested buffer.
4. Gunyah raises the corresponding interrupt for VM_A (Tx vIRQ) when the message
queue falls below a watermark depth. Typically, this is when the queue is
drained. Note the watermark depth and the threshold depth for the Rx vIRQ are
independent values. Coincidentally, this signal is conceptually similar to
Clear-to-Send.
For VM_B to send a message to VM_A, the process is identical, except that
hypercalls reference message queue 2's capability ID. The IRQ will be different
for the second message queue.
::
+-------------------+ +-----------------+ +-------------------+
| VM_A | |Gunyah hypervisor| | VM_B |
| | | | | |
| | | | | |
| | Tx | | | |
| |-------->| | Rx vIRQ | |
|gunyah_msgq_send() | Tx vIRQ |Message queue 1 |-------->|gunyah_msgq_recv() |
| |<------- | | | |
| | | | | |
| | | | | |
| | | | Tx | |
| | Rx vIRQ | |<--------| |
|gunyah_msgq_recv() |<--------|Message queue 2 | Tx vIRQ |gunyah_msgq_send() |
| | | |-------->| |
| | | | | |
| | | | | |
+-------------------+ +-----------------+ +---------------+

View File

@ -16,8 +16,6 @@ Virtualization Support
coco/sev-guest
coco/tdx-guest
hyperv/index
geniezone/introduction
gunyah/index
.. only:: html and subproject

View File

@ -6612,13 +6612,6 @@ Note that KVM does not skip the faulting instruction as it does for
KVM_EXIT_MMIO, but userspace has to emulate any change to the processing state
if it decides to decode and emulate the instruction.
This feature isn't available to protected VMs, as userspace does not
have access to the state that is required to perform the emulation.
Instead, a data abort exception is directly injected in the guest.
Note that although KVM_CAP_ARM_NISV_TO_USER will be reported if
queried outside of a protected VM context, the feature will not be
exposed if queried on a protected VM file descriptor.
::
/* KVM_EXIT_X86_RDMSR / KVM_EXIT_X86_WRMSR */

View File

@ -1,138 +0,0 @@
.. SPDX-License-Identifier: GPL-2.0
=======================================
ARM firmware pseudo-registers interface
=======================================
KVM handles the hypercall services as requested by the guests. New hypercall
services are regularly made available by the ARM specification or by KVM (as
vendor services) if they make sense from a virtualization point of view.
This means that a guest booted on two different versions of KVM can observe
two different "firmware" revisions. This could cause issues if a given guest
is tied to a particular version of a hypercall service, or if a migration
causes a different version to be exposed out of the blue to an unsuspecting
guest.
In order to remedy this situation, KVM exposes a set of "firmware
pseudo-registers" that can be manipulated using the GET/SET_ONE_REG
interface. These registers can be saved/restored by userspace, and set
to a convenient value as required.
The following registers are defined:
* KVM_REG_ARM_PSCI_VERSION:
KVM implements the PSCI (Power State Coordination Interface)
specification in order to provide services such as CPU on/off, reset
and power-off to the guest.
- Only valid if the vcpu has the KVM_ARM_VCPU_PSCI_0_2 feature set
(and thus has already been initialized)
- Returns the current PSCI version on GET_ONE_REG (defaulting to the
highest PSCI version implemented by KVM and compatible with v0.2)
- Allows any PSCI version implemented by KVM and compatible with
v0.2 to be set with SET_ONE_REG
- Affects the whole VM (even if the register view is per-vcpu)
* KVM_REG_ARM_SMCCC_ARCH_WORKAROUND_1:
Holds the state of the firmware support to mitigate CVE-2017-5715, as
offered by KVM to the guest via a HVC call. The workaround is described
under SMCCC_ARCH_WORKAROUND_1 in [1].
Accepted values are:
KVM_REG_ARM_SMCCC_ARCH_WORKAROUND_1_NOT_AVAIL:
KVM does not offer
firmware support for the workaround. The mitigation status for the
guest is unknown.
KVM_REG_ARM_SMCCC_ARCH_WORKAROUND_1_AVAIL:
The workaround HVC call is
available to the guest and required for the mitigation.
KVM_REG_ARM_SMCCC_ARCH_WORKAROUND_1_NOT_REQUIRED:
The workaround HVC call
is available to the guest, but it is not needed on this VCPU.
* KVM_REG_ARM_SMCCC_ARCH_WORKAROUND_2:
Holds the state of the firmware support to mitigate CVE-2018-3639, as
offered by KVM to the guest via a HVC call. The workaround is described
under SMCCC_ARCH_WORKAROUND_2 in [1]_.
Accepted values are:
KVM_REG_ARM_SMCCC_ARCH_WORKAROUND_2_NOT_AVAIL:
A workaround is not
available. KVM does not offer firmware support for the workaround.
KVM_REG_ARM_SMCCC_ARCH_WORKAROUND_2_UNKNOWN:
The workaround state is
unknown. KVM does not offer firmware support for the workaround.
KVM_REG_ARM_SMCCC_ARCH_WORKAROUND_2_AVAIL:
The workaround is available,
and can be disabled by a vCPU. If
KVM_REG_ARM_SMCCC_ARCH_WORKAROUND_2_ENABLED is set, it is active for
this vCPU.
KVM_REG_ARM_SMCCC_ARCH_WORKAROUND_2_NOT_REQUIRED:
The workaround is always active on this vCPU or it is not needed.
Bitmap Feature Firmware Registers
---------------------------------
Contrary to the above registers, the following registers exposes the
hypercall services in the form of a feature-bitmap to the userspace. This
bitmap is translated to the services that are available to the guest.
There is a register defined per service call owner and can be accessed via
GET/SET_ONE_REG interface.
By default, these registers are set with the upper limit of the features
that are supported. This way userspace can discover all the usable
hypercall services via GET_ONE_REG. The user-space can write-back the
desired bitmap back via SET_ONE_REG. The features for the registers that
are untouched, probably because userspace isn't aware of them, will be
exposed as is to the guest.
Note that KVM will not allow the userspace to configure the registers
anymore once any of the vCPUs has run at least once. Instead, it will
return a -EBUSY.
The pseudo-firmware bitmap register are as follows:
* KVM_REG_ARM_STD_BMAP:
Controls the bitmap of the ARM Standard Secure Service Calls.
The following bits are accepted:
Bit-0: KVM_REG_ARM_STD_BIT_TRNG_V1_0:
The bit represents the services offered under v1.0 of ARM True Random
Number Generator (TRNG) specification, ARM DEN0098.
* KVM_REG_ARM_STD_HYP_BMAP:
Controls the bitmap of the ARM Standard Hypervisor Service Calls.
The following bits are accepted:
Bit-0: KVM_REG_ARM_STD_HYP_BIT_PV_TIME:
The bit represents the Paravirtualized Time service as represented by
ARM DEN0057A.
* KVM_REG_ARM_VENDOR_HYP_BMAP:
Controls the bitmap of the Vendor specific Hypervisor Service Calls.
The following bits are accepted:
Bit-0: KVM_REG_ARM_VENDOR_HYP_BIT_FUNC_FEAT
The bit represents the ARM_SMCCC_VENDOR_HYP_KVM_FEATURES_FUNC_ID
and ARM_SMCCC_VENDOR_HYP_CALL_UID_FUNC_ID function-ids.
Bit-1: KVM_REG_ARM_VENDOR_HYP_BIT_PTP:
The bit represents the Precision Time Protocol KVM service.
Errors:
======= =============================================================
-ENOENT Unknown register accessed.
-EBUSY Attempt a 'write' to the register after the VM has started.
-EINVAL Invalid bitmap written to the register.
======= =============================================================
.. [1] https://developer.arm.com/-/media/developer/pdf/ARM_DEN_0070A_Firmware_interfaces_for_mitigating_CVE-2017-5715.pdf

View File

@ -1,190 +1,138 @@
.. SPDX-License-Identifier: GPL-2.0
===============================================
KVM/arm64-specific hypercalls exposed to guests
===============================================
=======================
ARM Hypercall Interface
=======================
This file documents the KVM/arm64-specific hypercalls which may be
exposed by KVM/arm64 to guest operating systems. These hypercalls are
issued using the HVC instruction according to version 1.1 of the Arm SMC
Calling Convention (DEN0028/C):
KVM handles the hypercall services as requested by the guests. New hypercall
services are regularly made available by the ARM specification or by KVM (as
vendor services) if they make sense from a virtualization point of view.
https://developer.arm.com/docs/den0028/c
This means that a guest booted on two different versions of KVM can observe
two different "firmware" revisions. This could cause issues if a given guest
is tied to a particular version of a hypercall service, or if a migration
causes a different version to be exposed out of the blue to an unsuspecting
guest.
All KVM/arm64-specific hypercalls are allocated within the "Vendor
Specific Hypervisor Service Call" range with a UID of
``28b46fb6-2ec5-11e9-a9ca-4b564d003a74``. This UID should be queried by the
guest using the standard "Call UID" function for the service range in
order to determine that the KVM/arm64-specific hypercalls are available.
In order to remedy this situation, KVM exposes a set of "firmware
pseudo-registers" that can be manipulated using the GET/SET_ONE_REG
interface. These registers can be saved/restored by userspace, and set
to a convenient value as required.
``ARM_SMCCC_KVM_FUNC_FEATURES``
---------------------------------------------
The following registers are defined:
Provides a discovery mechanism for other KVM/arm64 hypercalls.
* KVM_REG_ARM_PSCI_VERSION:
+---------------------+-------------------------------------------------------------+
| Presence: | Mandatory for the KVM/arm64 UID |
+---------------------+-------------------------------------------------------------+
| Calling convention: | HVC32 |
+---------------------+----------+--------------------------------------------------+
| Function ID: | (uint32) | 0x86000000 |
+---------------------+----------+--------------------------------------------------+
| Arguments: | None |
+---------------------+----------+----+---------------------------------------------+
| Return Values: | (uint32) | R0 | Bitmap of available function numbers 0-31 |
| +----------+----+---------------------------------------------+
| | (uint32) | R1 | Bitmap of available function numbers 32-63 |
| +----------+----+---------------------------------------------+
| | (uint32) | R2 | Bitmap of available function numbers 64-95 |
| +----------+----+---------------------------------------------+
| | (uint32) | R3 | Bitmap of available function numbers 96-127 |
+---------------------+----------+----+---------------------------------------------+
KVM implements the PSCI (Power State Coordination Interface)
specification in order to provide services such as CPU on/off, reset
and power-off to the guest.
``ARM_SMCCC_KVM_FUNC_PTP``
----------------------------------------
- Only valid if the vcpu has the KVM_ARM_VCPU_PSCI_0_2 feature set
(and thus has already been initialized)
- Returns the current PSCI version on GET_ONE_REG (defaulting to the
highest PSCI version implemented by KVM and compatible with v0.2)
- Allows any PSCI version implemented by KVM and compatible with
v0.2 to be set with SET_ONE_REG
- Affects the whole VM (even if the register view is per-vcpu)
See ptp_kvm.rst
* KVM_REG_ARM_SMCCC_ARCH_WORKAROUND_1:
Holds the state of the firmware support to mitigate CVE-2017-5715, as
offered by KVM to the guest via a HVC call. The workaround is described
under SMCCC_ARCH_WORKAROUND_1 in [1].
``ARM_SMCCC_KVM_FUNC_HYP_MEMINFO``
----------------------------------
Accepted values are:
Query the memory protection parameters for a protected virtual machine.
KVM_REG_ARM_SMCCC_ARCH_WORKAROUND_1_NOT_AVAIL:
KVM does not offer
firmware support for the workaround. The mitigation status for the
guest is unknown.
KVM_REG_ARM_SMCCC_ARCH_WORKAROUND_1_AVAIL:
The workaround HVC call is
available to the guest and required for the mitigation.
KVM_REG_ARM_SMCCC_ARCH_WORKAROUND_1_NOT_REQUIRED:
The workaround HVC call
is available to the guest, but it is not needed on this VCPU.
+---------------------+-------------------------------------------------------------+
| Presence: | Optional; protected guests only. |
+---------------------+-------------------------------------------------------------+
| Calling convention: | HVC64 |
+---------------------+----------+--------------------------------------------------+
| Function ID: | (uint32) | 0xC6000002 |
+---------------------+----------+----+---------------------------------------------+
| Arguments: | (uint64) | R1 | Reserved / Must be zero |
| +----------+----+---------------------------------------------+
| | (uint64) | R2 | Reserved / Must be zero |
| +----------+----+---------------------------------------------+
| | (uint64) | R3 | Reserved / Must be zero |
+---------------------+----------+----+---------------------------------------------+
| Return Values: | (int64) | R0 | ``INVALID_PARAMETER (-3)`` on error, else |
| | | | memory protection granule in bytes |
| +----------+----+---------------------------------------------+
| | (int64) | R1 | ``KVM_FUNC_HAS_RANGE (1)`` if MEM_SHARE and |
| | | | MEM_UNSHARE take a range argument. |
+---------------------+----------+----+---------------------------------------------+
* KVM_REG_ARM_SMCCC_ARCH_WORKAROUND_2:
Holds the state of the firmware support to mitigate CVE-2018-3639, as
offered by KVM to the guest via a HVC call. The workaround is described
under SMCCC_ARCH_WORKAROUND_2 in [1]_.
``ARM_SMCCC_KVM_FUNC_MEM_SHARE``
--------------------------------
Accepted values are:
Share a region of memory with the KVM host, granting it read, write and execute
permissions. The size of the region is equal to the memory protection granule
advertised by ``ARM_SMCCC_KVM_FUNC_HYP_MEMINFO`` times the number of granules
set in R2. See the ``KVM_FUNC_HAS_RANGE`` paragraph for more details about this
argument.
KVM_REG_ARM_SMCCC_ARCH_WORKAROUND_2_NOT_AVAIL:
A workaround is not
available. KVM does not offer firmware support for the workaround.
KVM_REG_ARM_SMCCC_ARCH_WORKAROUND_2_UNKNOWN:
The workaround state is
unknown. KVM does not offer firmware support for the workaround.
KVM_REG_ARM_SMCCC_ARCH_WORKAROUND_2_AVAIL:
The workaround is available,
and can be disabled by a vCPU. If
KVM_REG_ARM_SMCCC_ARCH_WORKAROUND_2_ENABLED is set, it is active for
this vCPU.
KVM_REG_ARM_SMCCC_ARCH_WORKAROUND_2_NOT_REQUIRED:
The workaround is always active on this vCPU or it is not needed.
+---------------------+-------------------------------------------------------------+
| Presence: | Optional; protected guests only. |
+---------------------+-------------------------------------------------------------+
| Calling convention: | HVC64 |
+---------------------+----------+--------------------------------------------------+
| Function ID: | (uint32) | 0xC6000003 |
+---------------------+----------+----+---------------------------------------------+
| Arguments: | (uint64) | R1 | Base IPA of memory region to share |
| +----------+----+---------------------------------------------+
| | (uint64) | R2 | Number of granules to share |
| +----------+----+---------------------------------------------+
| | (uint64) | R3 | Reserved / Must be zero |
+---------------------+----------+----+---------------------------------------------+
| Return Values: | (int64) | R0 | ``SUCCESS (0)`` |
| | | +---------------------------------------------+
| | | | ``INVALID_PARAMETER (-3)`` |
| +----------+----+---------------------------------------------+
| | (uint64) | R1 | Number of shared granules |
+---------------------+----------+----+---------------------------------------------+
``ARM_SMCCC_KVM_FUNC_MEM_UNSHARE``
----------------------------------
Bitmap Feature Firmware Registers
---------------------------------
Revoke access permission from the KVM host to a memory region previously shared
with ``ARM_SMCCC_KVM_FUNC_MEM_SHARE``. The size of the region is equal to the
memory protection granule advertised by ``ARM_SMCCC_KVM_FUNC_HYP_MEMINFO`` times
the number of granules set in R2. See the ``KVM_FUNC_HAS_RANGE`` paragraph for
more details about this argument.
Contrary to the above registers, the following registers exposes the
hypercall services in the form of a feature-bitmap to the userspace. This
bitmap is translated to the services that are available to the guest.
There is a register defined per service call owner and can be accessed via
GET/SET_ONE_REG interface.
+---------------------+-------------------------------------------------------------+
| Presence: | Optional; protected guests only. |
+---------------------+-------------------------------------------------------------+
| Calling convention: | HVC64 |
+---------------------+----------+--------------------------------------------------+
| Function ID: | (uint32) | 0xC6000004 |
+---------------------+----------+----+---------------------------------------------+
| Arguments: | (uint64) | R1 | Base IPA of memory region to unshare |
| +----------+----+---------------------------------------------+
| | (uint64) | R2 | Number of granules to unshare |
| +----------+----+---------------------------------------------+
| | (uint64) | R3 | Reserved / Must be zero |
+---------------------+----------+----+---------------------------------------------+
| Return Values: | (int64) | R0 | ``SUCCESS (0)`` |
| | | +---------------------------------------------+
| | | | ``INVALID_PARAMETER (-3)`` |
| +----------+----+---------------------------------------------+
| | (uint64) | R1 | Number of unshared granules |
+---------------------+----------+----+---------------------------------------------+
By default, these registers are set with the upper limit of the features
that are supported. This way userspace can discover all the usable
hypercall services via GET_ONE_REG. The user-space can write-back the
desired bitmap back via SET_ONE_REG. The features for the registers that
are untouched, probably because userspace isn't aware of them, will be
exposed as is to the guest.
``ARM_SMCCC_KVM_FUNC_MEM_RELINQUISH``
--------------------------------------
Note that KVM will not allow the userspace to configure the registers
anymore once any of the vCPUs has run at least once. Instead, it will
return a -EBUSY.
Cooperatively relinquish ownership of a memory region. The size of the
region is equal to the memory protection granule advertised by
``ARM_SMCCC_KVM_FUNC_HYP_MEMINFO``. If this hypercall is advertised
then it is mandatory to call it before freeing memory via, for
example, virtio balloon. If the caller is a protected VM, it is
guaranteed that the memory region will be completely cleared before
becoming visible to another VM.
The pseudo-firmware bitmap register are as follows:
+---------------------+-------------------------------------------------------------+
| Presence: | Optional. |
+---------------------+-------------------------------------------------------------+
| Calling convention: | HVC64 |
+---------------------+----------+--------------------------------------------------+
| Function ID: | (uint32) | 0xC6000009 |
+---------------------+----------+----+---------------------------------------------+
| Arguments: | (uint64) | R1 | Base IPA of memory region to relinquish |
| +----------+----+---------------------------------------------+
| | (uint64) | R2 | Reserved / Must be zero |
| +----------+----+---------------------------------------------+
| | (uint64) | R3 | Reserved / Must be zero |
+---------------------+----------+----+---------------------------------------------+
| Return Values: | (int64) | R0 | ``SUCCESS (0)`` |
| | | +---------------------------------------------+
| | | | ``INVALID_PARAMETER (-3)`` |
+---------------------+----------+----+---------------------------------------------+
* KVM_REG_ARM_STD_BMAP:
Controls the bitmap of the ARM Standard Secure Service Calls.
``ARM_SMCCC_KVM_FUNC_MMIO_GUARD_*``
-----------------------------------
The following bits are accepted:
See mmio-guard.rst
Bit-0: KVM_REG_ARM_STD_BIT_TRNG_V1_0:
The bit represents the services offered under v1.0 of ARM True Random
Number Generator (TRNG) specification, ARM DEN0098.
``KVM_FUNC_HAS_RANGE``
----------------------
* KVM_REG_ARM_STD_HYP_BMAP:
Controls the bitmap of the ARM Standard Hypervisor Service Calls.
This flag, when set in ARM_SMCCC_KVM_FUNC_HYP_MEMINFO, indicates the guest can
pass a number of granules as an argument to:
The following bits are accepted:
* ARM_SMCCC_KVM_FUNC_MEM_SHARE
* ARM_SMCCC_KVM_FUNC_MEM_UNSHARE
Bit-0: KVM_REG_ARM_STD_HYP_BIT_PV_TIME:
The bit represents the Paravirtualized Time service as represented by
ARM DEN0057A.
In order to support legacy guests, the kernel still accepts ``0`` as a value. In
that case a single granule is shared/unshared.
* KVM_REG_ARM_VENDOR_HYP_BMAP:
Controls the bitmap of the Vendor specific Hypervisor Service Calls.
When set in ARM_SMCCC_KVM_FUNC_MMIO_GUARD_INFO, indicates the guest can call the
HVCs:
The following bits are accepted:
* ARM_SMCCC_KVM_FUNC_MMIO_RGUARD_MAP
* ARM_SMCCC_KVM_FUNC_MMIO_RGUARD_UNMAP
Bit-0: KVM_REG_ARM_VENDOR_HYP_BIT_FUNC_FEAT
The bit represents the ARM_SMCCC_VENDOR_HYP_KVM_FEATURES_FUNC_ID
and ARM_SMCCC_VENDOR_HYP_CALL_UID_FUNC_ID function-ids.
For all those HVCs, the hypervisor is free to stop the process at any time
either because the range isn't physically contiguous or to limit the time spent
at EL2. In a such case, the number of actually shared granules is returned (R1)
and the caller can start again where it stopped, that is, the base IPA + (Number
of processed granules * protection granule size).
Bit-1: KVM_REG_ARM_VENDOR_HYP_BIT_PTP:
The bit represents the Precision Time Protocol KVM service.
If the number of processed granules returned is zero (R1), an error (R0) will be
set.
Errors:
======= =============================================================
-ENOENT Unknown register accessed.
-EBUSY Attempt a 'write' to the register after the VM has started.
-EINVAL Invalid bitmap written to the register.
======= =============================================================
.. [1] https://developer.arm.com/-/media/developer/pdf/ARM_DEN_0070A_Firmware_interfaces_for_mitigating_CVE-2017-5715.pdf

View File

@ -7,10 +7,7 @@ ARM
.. toctree::
:maxdepth: 2
fw-pseudo-registers
hyp-abi
hypercalls
pkvm
pvtime
ptp_kvm
mmio-guard

View File

@ -1,114 +0,0 @@
.. SPDX-License-Identifier: GPL-2.0
==============
KVM MMIO guard
==============
KVM implements device emulation by handling translation faults to any
IPA range that is not contained in a memory slot. Such a translation
fault is in most cases passed on to userspace (or in rare cases to the
host kernel) with the address, size and possibly data of the access
for emulation.
Should the guest exit with an address that is not one that corresponds
to an emulatable device, userspace may take measures that are not the
most graceful as far as the guest is concerned (such as terminating it
or delivering a fatal exception).
There is also an element of trust: by forwarding the request to
userspace, the kernel assumes that the guest trusts userspace to do
the right thing.
The KVM MMIO guard offers a way to mitigate this last point: a guest
can request that only certain regions of the IPA space are valid as
MMIO. Only these regions will be handled as an MMIO, and any other
will result in an exception being delivered to the guest.
This relies on a set of hypercalls defined in the KVM-specific range,
using the HVC64 calling convention.
When operating on a range of contiguous IPA space, it is recommended
to use ARM_SMCCC_KVM_FUNC_MMIO_RGUARD_MAP and
ARM_SMCCC_KVM_FUNC_MMIO_RGUARD_UNMAP. Those HVCs take a number of
granules as an argument. See ``KVM_FUNC_HAS_RANGE`` in hypercalls.rst
for a complete description.
* ARM_SMCCC_KVM_FUNC_MMIO_GUARD_INFO
============== ======== ================================
Function ID: (uint32) 0xC6000005
Arguments: r1-r3 Reserved / Must be zero
Return Values: (int64) NOT_SUPPORTED(-1) on error, or
(uint64) Protection Granule (PG) size in
bytes (r0). KVM_FUNC_HAS_RANGE(1)
is set (r1) if RGUARD_MAP and
RGUARD_UNMAP HVCs are available.
============== ======== ================================
* ARM_SMCCC_KVM_FUNC_MMIO_GUARD_ENROLL
============== ======== ==============================
Function ID: (uint32) 0xC6000006
Arguments: none
Return Values: (int64) NOT_SUPPORTED(-1) on error, or
RET_SUCCESS(0) (r0)
============== ======== ==============================
* ARM_SMCCC_KVM_FUNC_MMIO_GUARD_MAP
============== ======== ====================================
Function ID: (uint32) 0xC6000007
Arguments: (uint64) The base of the PG-sized IPA range
that is allowed to be accessed as
MMIO. Must be aligned to the PG size
(r1)
(uint64) Index in the MAIR_EL1 register
providing the memory attribute that
is used by the guest (r2)
Return Values: (int64) NOT_SUPPORTED(-1) on error, or
RET_SUCCESS(0) (r0)
============== ======== ====================================
* ARM_SMCCC_KVM_FUNC_MMIO_GUARD_UNMAP
============== ======== ======================================
Function ID: (uint32) 0xC6000008
Arguments: (uint64) PG-sized IPA range aligned to the PG
size which has been previously mapped.
Must be aligned to the PG size and
have been previously mapped (r1)
Return Values: (int64) NOT_SUPPORTED(-1) on error, or
RET_SUCCESS(0) (r0)
============== ======== ======================================
* ARM_SMCCC_KVM_FUNC_MMIO_RGUARD_MAP
============== ======== ====================================
Function ID: (uint32) 0xC600000A
Arguments: (uint64) The base of the PG-sized IPA range
that is allowed to be accessed as
MMIO. Must be aligned to the PG size
(r1)
(uint64) Number of granules to guard (r2). See
``KVM_FUNC_HAS_RANGE`` in
hypercalls.rst for more details
Return Values: (int64) NOT_SUPPORTED(-1) on error, or
RET_SUCCESS(0) (r0)
(uint64) Number of shared granules (r1)
============== ======== ====================================
* ARM_SMCCC_KVM_FUNC_MMIO_RGUARD_UNMAP
============== ======== ======================================
Function ID: (uint32) 0xC600000B
Arguments: (uint64) PG-sized IPA range aligned to the PG
size which has been previously mapped.
Must be aligned to the PG size and
have been previously mapped (r1)
(uint64) Number of granules to unguard (r2). See
``KVM_FUNC_HAS_RANGE`` in
hypercalls.rst for more details
Return Values: (int64) NOT_SUPPORTED(-1) on error, or
RET_SUCCESS(0) (r0)
(uint64) Number of shared granules (r1)
============== ======== ======================================

View File

@ -1,96 +0,0 @@
.. SPDX-License-Identifier: GPL-2.0
Protected virtual machines (pKVM)
=================================
Introduction
------------
Protected KVM (pKVM) is a KVM/arm64 extension which uses the two-stage
translation capability of the Armv8 MMU to isolate guest memory from the host
system. This allows for the creation of a confidential computing environment
without relying on whizz-bang features in hardware, but still allowing room for
complementary technologies such as memory encryption and hardware-backed
attestation.
The major implementation change brought about by pKVM is that the hypervisor
code running at EL2 is now largely independent of (and isolated from) the rest
of the host kernel running at EL1 and therefore additional hypercalls are
introduced to manage manipulation of guest stage-2 page tables, creation of VM
data structures and reclamation of memory on teardown. An immediate consequence
of this change is that the host itself runs with an identity mapping enabled
at stage-2, providing the hypervisor code with a mechanism to restrict host
access to an arbitrary physical page.
Enabling pKVM
-------------
The pKVM hypervisor is enabled by booting the host kernel at EL2 with
"``kvm-arm.mode=protected``" on the command-line. Once enabled, VMs can be spawned
in either protected or non-protected state, although the hypervisor is still
responsible for managing most of the VM metadata in either case.
Limitations
-----------
Enabling pKVM places some significant limitations on KVM guests, regardless of
whether they are spawned in protected state. It is therefore recommended only
to enable pKVM if protected VMs are required, with non-protected state acting
primarily as a debug and development aid.
If you're still keen, then here is an incomplete list of caveats that apply
to all VMs running under pKVM:
- Guest memory cannot be file-backed (with the exception of shmem/memfd) and is
pinned as it is mapped into the guest. This prevents the host from
swapping-out, migrating, merging or generally doing anything useful with the
guest pages. It also requires that the VMM has either ``CAP_IPC_LOCK`` or
sufficient ``RLIMIT_MEMLOCK`` to account for this pinned memory.
- GICv2 is not supported and therefore GICv3 hardware is required in order
to expose a virtual GICv3 to the guest.
- Read-only memslots are unsupported and therefore dirty logging cannot be
enabled.
- Memslot configuration is fixed once a VM has started running, with subsequent
move or deletion requests being rejected with ``-EPERM``.
- There are probably many others.
Since the host is unable to tear down the hypervisor when pKVM is enabled,
hibernation (``CONFIG_HIBERNATION``) and kexec (``CONFIG_KEXEC``) will fail
with ``-EBUSY``.
If you are not happy with these limitations, then please don't enable pKVM :)
VM creation
-----------
When pKVM is enabled, protected VMs can be created by specifying the
``KVM_VM_TYPE_ARM_PROTECTED`` flag in the machine type identifier parameter
passed to ``KVM_CREATE_VM``.
Protected VMs are instantiated according to a fixed vCPU configuration
described by the ID register definitions in
``arch/arm64/include/asm/kvm_pkvm.h``. Only a subset of the architectural
features that may be available to the host are exposed to the guest and the
capabilities advertised by ``KVM_CHECK_EXTENSION`` are limited accordingly,
with the vCPU registers being initialised to their architecturally-defined
values.
Where not defined by the architecture, the registers of a protected vCPU
are reset to zero with the exception of the PC and X0 which can be set
either by the ``KVM_SET_ONE_REG`` interface or by a call to PSCI ``CPU_ON``.
VM runtime
----------
By default, memory pages mapped into a protected guest are inaccessible to the
host and any attempt by the host to access such a page will result in the
injection of an abort at EL1 by the hypervisor. For accesses originating from
EL0, the host will then terminate the current task with a ``SIGSEGV``.
pKVM exposes additional hypercalls to protected guests, primarily for the
purpose of establishing shared-memory regions with the host for communication
and I/O. These hypercalls are documented in hypercalls.rst.

View File

@ -7,29 +7,19 @@ PTP_KVM is used for high precision time sync between host and guests.
It relies on transferring the wall clock and counter value from the
host to the guest using a KVM-specific hypercall.
``ARM_SMCCC_KVM_FUNC_PTP``
----------------------------------------
* ARM_SMCCC_VENDOR_HYP_KVM_PTP_FUNC_ID: 0x86000001
Retrieve current time information for the specific counter. There are no
endianness restrictions.
This hypercall uses the SMC32/HVC32 calling convention:
+---------------------+-------------------------------------------------------+
| Presence: | Optional |
+---------------------+-------------------------------------------------------+
| Calling convention: | HVC32 |
+---------------------+----------+--------------------------------------------+
| Function ID: | (uint32) | 0x86000001 |
+---------------------+----------+----+---------------------------------------+
| Arguments: | (uint32) | R1 | ``KVM_PTP_VIRT_COUNTER (0)`` |
| | | +---------------------------------------+
| | | | ``KVM_PTP_PHYS_COUNTER (1)`` |
+---------------------+----------+----+---------------------------------------+
| Return Values: | (int32) | R0 | ``NOT_SUPPORTED (-1)`` on error, else |
| | | | upper 32 bits of wall clock time |
| +----------+----+---------------------------------------+
| | (uint32) | R1 | Lower 32 bits of wall clock time |
| +----------+----+---------------------------------------+
| | (uint32) | R2 | Upper 32 bits of counter |
| +----------+----+---------------------------------------+
| | (uint32) | R3 | Lower 32 bits of counter |
+---------------------+----------+----+---------------------------------------+
ARM_SMCCC_VENDOR_HYP_KVM_PTP_FUNC_ID
============== ======== =====================================
Function ID: (uint32) 0x86000001
Arguments: (uint32) KVM_PTP_VIRT_COUNTER(0)
KVM_PTP_PHYS_COUNTER(1)
Return Values: (int32) NOT_SUPPORTED(-1) on error, or
(uint32) Upper 32 bits of wall clock time (r0)
(uint32) Lower 32 bits of wall clock time (r1)
(uint32) Upper 32 bits of counter (r2)
(uint32) Lower 32 bits of counter (r3)
Endianness: No Restrictions.
============== ======== =====================================

View File

@ -9,7 +9,7 @@ KVM Lock Overview
The acquisition orders for mutexes are as follows:
- cpus_read_lock() is taken outside kvm_lock and kvm_usage_lock
- cpus_read_lock() is taken outside kvm_lock
- kvm->lock is taken outside vcpu->mutex
@ -24,13 +24,6 @@ The acquisition orders for mutexes are as follows:
are taken on the waiting side when modifying memslots, so MMU notifiers
must not take either kvm->slots_lock or kvm->slots_arch_lock.
cpus_read_lock() vs kvm_lock:
- Taking cpus_read_lock() outside of kvm_lock is problematic, despite that
being the official ordering, as it is quite easy to unknowingly trigger
cpus_read_lock() while holding kvm_lock. Use caution when walking vm_list,
e.g. avoid complex operations when possible.
For SRCU:
- ``synchronize_srcu(&kvm->srcu)`` is called inside critical sections
@ -235,17 +228,10 @@ time it will be set using the Dirty tracking mechanism described above.
:Type: mutex
:Arch: any
:Protects: - vm_list
``kvm_usage_lock``
^^^^^^^^^^^^^^^^^^
:Type: mutex
:Arch: any
:Protects: - kvm_usage_count
- kvm_usage_count
- hardware virtualization enable/disable
:Comment: Exists because using kvm_lock leads to deadlock (see earlier comment
on cpus_read_lock() vs kvm_lock). Note, KVM also disables CPU hotplug via
cpus_read_lock() when enabling/disabling virtualization.
:Comment: KVM also disables CPU hotplug via cpus_read_lock() during
enable/disable.
``kvm->mn_invalidate_lock``
^^^^^^^^^^^^^^^^^^^^^^^^^^^
@ -305,12 +291,11 @@ time it will be set using the Dirty tracking mechanism described above.
wakeup.
``vendor_module_lock``
^^^^^^^^^^^^^^^^^^^^^^
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
:Type: mutex
:Arch: x86
:Protects: loading a vendor module (kvm_amd or kvm_intel)
:Comment: Exists because using kvm_lock leads to deadlock. kvm_lock is taken
in notifiers, e.g. __kvmclock_cpufreq_notifier(), that may be invoked while
cpu_hotplug_lock is held, e.g. from cpufreq_boost_trigger_state(), and many
operations need to take cpu_hotplug_lock when loading a vendor module, e.g.
updating static calls.
:Comment: Exists because using kvm_lock leads to deadlock. cpu_hotplug_lock is
taken outside of kvm_lock, e.g. in KVM's CPU online/offline callbacks, and
many operations need to take cpu_hotplug_lock when loading a vendor module,
e.g. updating static calls.

View File

@ -30,6 +30,3 @@ source "lib/Kconfig"
source "lib/Kconfig.debug"
source "Documentation/Kconfig"
# ANDROID: Set KCONFIG_EXT_PREFIX to decend into an external project.
source "$(KCONFIG_EXT_PREFIX)Kconfig.ext"

View File

@ -1,3 +0,0 @@
# SPDX-License-Identifier: GPL-2.0
# This file is intentionally empty. It's used as a placeholder for when
# KCONFIG_EXT_PREFIX isn't defined.

View File

@ -5053,13 +5053,6 @@ F: scripts/Makefile.clang
F: scripts/clang-tools/
K: \b(?i:clang|llvm)\b
CLEANCACHE API
M: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
L: linux-kernel@vger.kernel.org
S: Maintained
F: include/linux/cleancache.h
F: mm/cleancache.c
CLK API
M: Russell King <linux@armlinux.org.uk>
L: linux-clk@vger.kernel.org
@ -8801,17 +8794,6 @@ F: include/vdso/
F: kernel/time/vsyscall.c
F: lib/vdso/
GENIEZONE HYPERVISOR DRIVER
M: Yingshiuan Pan <yingshiuan.pan@mediatek.com>
M: Ze-Yu Wang <ze-yu.wang@mediatek.com>
M: Liju Chen <liju-clr.chen@mediatek.com>
F: Documentation/devicetree/bindings/firmware/mediatek,geniezone.yaml
F: Documentation/virt/geniezone/
F: arch/arm64/geniezone/
F: drivers/virt/geniezone/
F: include/linux/soc/mediatek/gzvm_drv.h
F: include/uapi/linux/gzvm.h
GENWQE (IBM Generic Workqueue Card)
M: Frank Haverkamp <haver@linux.ibm.com>
S: Supported
@ -9101,18 +9083,6 @@ L: linux-efi@vger.kernel.org
S: Maintained
F: block/partitions/efi.*
GUNYAH HYPERVISOR DRIVER
M: Elliot Berman <quic_eberman@quicinc.com>
M: Prakruthi Deepak Heragu <quic_pheragu@quicinc.com>
L: linux-arm-msm@vger.kernel.org
S: Supported
F: Documentation/devicetree/bindings/firmware/gunyah-hypervisor.yaml
F: Documentation/virt/gunyah/
F: arch/arm64/gunyah/
F: drivers/virt/gunyah/
F: include/linux/gunyah*.h
K: gunyah
HABANALABS PCI DRIVER
M: Oded Gabbay <ogabbay@kernel.org>
L: dri-devel@lists.freedesktop.org
@ -10313,13 +10283,6 @@ F: Documentation/hwmon/ina2xx.rst
F: drivers/hwmon/ina2xx.c
F: include/linux/platform_data/ina2xx.h
INCREMENTAL FILE SYSTEM
M: Paul Lawrence <paullawrence@google.com>
L: linux-unionfs@vger.kernel.org
S: Supported
F: fs/incfs/
F: tools/testing/selftests/filesystems/incfs/
INDEX OF FURTHER KERNEL DOCUMENTATION
M: Carlos Bilbao <carlos.bilbao@amd.com>
S: Maintained
@ -20984,6 +20947,13 @@ F: include/linux/sc[mp]i_protocol.h
F: include/trace/events/scmi.h
F: include/uapi/linux/virtio_scmi.h
PINCTRL DRIVER FOR SYSTEM CONTROL MANAGEMENT INTERFACE (SCMI)
M: Oleksii Moisieiev <oleksii_moisieiev@epam.com>
L: linux-arm-kernel@lists.infradead.org
S: Maintained
F: drivers/firmware/arm_scmi/pinctrl.c
F: drivers/pinctrl/pinctrl-scmi.c
SYSTEM RESET/SHUTDOWN DRIVERS
M: Sebastian Reichel <sre@kernel.org>
L: linux-pm@vger.kernel.org

119
Makefile
View File

@ -1,9 +1,9 @@
# SPDX-License-Identifier: GPL-2.0
VERSION = 6
PATCHLEVEL = 6
SUBLEVEL = 56
SUBLEVEL = 52
EXTRAVERSION =
NAME = Pinguïn Aangedreven
NAME = Hurr durr I'ma ninja sloth
# *DOCUMENTATION*
# To see a list of typical targets execute "make help"
@ -155,24 +155,6 @@ endif
export KBUILD_EXTMOD
# ANDROID: set up mixed-build support. mixed-build allows device kernel modules
# to be compiled against a GKI kernel. This approach still uses the headers and
# Kbuild from device kernel, so care must be taken to ensure that those headers match.
ifdef KBUILD_MIXED_TREE
# Need vmlinux.symvers for modpost and System.map for depmod, check whether they exist in KBUILD_MIXED_TREE
required_mixed_files=vmlinux.symvers System.map
$(if $(filter-out $(words $(required_mixed_files)), \
$(words $(wildcard $(add-prefix $(KBUILD_MIXED_TREE)/,$(required_mixed_files))))),,\
$(error KBUILD_MIXED_TREE=$(KBUILD_MIXED_TREE) doesn't contain $(required_mixed_files)))
endif
mixed-build-prefix = $(if $(KBUILD_MIXED_TREE),$(KBUILD_MIXED_TREE)/)
export KBUILD_MIXED_TREE
# This is a hack for kleaf to set mixed-build-prefix within the execution of a make rule, e.g.
# within __modinst_pre.
# TODO(b/205893923): Revert this hack once it is properly handled.
export mixed-build-prefix
# Kbuild will save output files in the current working directory.
# This does not need to match to the root of the kernel source tree.
#
@ -536,7 +518,7 @@ KGZIP = gzip
KBZIP2 = bzip2
KLZOP = lzop
LZMA = lzma
LZ4 = lz4
LZ4 = lz4c
XZ = xz
ZSTD = zstd
@ -766,13 +748,11 @@ drivers-y :=
libs-y := lib/
endif # KBUILD_EXTMOD
ifndef KBUILD_MIXED_TREE
# The all: target is the default when no target is given on the
# command line.
# This allow a user to issue only 'make' to build a kernel including modules
# Defaults to vmlinux, but the arch makefile usually adds further targets
all: vmlinux
endif
CFLAGS_GCOV := -fprofile-arcs -ftest-coverage
ifdef CONFIG_CC_IS_GCC
@ -974,13 +954,7 @@ CC_FLAGS_LTO := -flto=thin -fsplit-lto-unit
else
CC_FLAGS_LTO := -flto
endif
ifeq ($(SRCARCH),x86)
# Workaround for compiler / linker bug
CC_FLAGS_LTO += -fvisibility=hidden
else
CC_FLAGS_LTO += -fvisibility=default
endif
# Limit inlining across translation units to reduce binary size
KBUILD_LDFLAGS += -mllvm -import-instr-limit=5
@ -1001,11 +975,8 @@ export CC_FLAGS_LTO
endif
ifdef CONFIG_CFI_CLANG
CC_FLAGS_CFI := -fsanitize=kcfi
ifdef CONFIG_RUST
$(error "Enabling Rust and CFI silently changes the KMI.")
endif
KBUILD_CFLAGS += $(CC_FLAGS_CFI)
CC_FLAGS_CFI := -fsanitize=kcfi
KBUILD_CFLAGS += $(CC_FLAGS_CFI)
export CC_FLAGS_CFI
endif
@ -1129,40 +1100,6 @@ export extmod_prefix = $(if $(KBUILD_EXTMOD),$(KBUILD_EXTMOD)/)
export MODORDER := $(extmod_prefix)modules.order
export MODULES_NSDEPS := $(extmod_prefix)modules.nsdeps
# ---------------------------------------------------------------------------
# Kernel headers
PHONY += headers
#Default location for installed headers
ifeq ($(KBUILD_EXTMOD),)
PHONY += archheaders archscripts
hdr-inst := -f $(srctree)/scripts/Makefile.headersinst obj
headers: $(version_h) scripts_unifdef uapi-asm-generic archheaders archscripts
else
hdr-prefix = $(KBUILD_EXTMOD)/
hdr-inst := -f $(srctree)/scripts/Makefile.headersinst dst=$(KBUILD_EXTMOD)/usr/include objtree=$(objtree)/$(KBUILD_EXTMOD) obj
endif
export INSTALL_HDR_PATH = $(objtree)/$(hdr-prefix)usr
quiet_cmd_headers_install = INSTALL $(INSTALL_HDR_PATH)/include
cmd_headers_install = \
mkdir -p $(INSTALL_HDR_PATH); \
rsync -mrl --include='*/' --include='*\.h' --exclude='*' \
$(hdr-prefix)usr/include $(INSTALL_HDR_PATH);
PHONY += headers_install
headers_install: headers
$(call cmd,headers_install)
headers:
ifeq ($(KBUILD_EXTMOD),)
$(if $(filter um, $(SRCARCH)), $(error Headers not exportable for UML))
endif
$(Q)$(MAKE) $(hdr-inst)=$(hdr-prefix)include/uapi
$(Q)$(MAKE) $(hdr-inst)=$(hdr-prefix)arch/$(SRCARCH)/include/uapi
ifeq ($(KBUILD_EXTMOD),)
build-dir := .
@ -1203,7 +1140,6 @@ targets += vmlinux.a
vmlinux.a: $(KBUILD_VMLINUX_OBJS) scripts/head-object-list.txt FORCE
$(call if_changed,ar_vmlinux.a)
ifndef KBUILD_MIXED_TREE
PHONY += vmlinux_o
vmlinux_o: vmlinux.a $(KBUILD_VMLINUX_LIBS)
$(Q)$(MAKE) -f $(srctree)/scripts/Makefile.vmlinux_o
@ -1226,7 +1162,6 @@ vmlinux: private _LDFLAGS_vmlinux := $(LDFLAGS_vmlinux)
vmlinux: export LDFLAGS_vmlinux = $(_LDFLAGS_vmlinux)
vmlinux: vmlinux.o $(KBUILD_LDS) modpost
$(Q)$(MAKE) -f $(srctree)/scripts/Makefile.vmlinux
endif
# The actual objects are generated when descending,
# make sure no implicit rule kicks in
@ -1336,6 +1271,32 @@ headerdep:
$(Q)find $(srctree)/include/ -name '*.h' | xargs --max-args 1 \
$(srctree)/scripts/headerdep.pl -I$(srctree)/include
# ---------------------------------------------------------------------------
# Kernel headers
#Default location for installed headers
export INSTALL_HDR_PATH = $(objtree)/usr
quiet_cmd_headers_install = INSTALL $(INSTALL_HDR_PATH)/include
cmd_headers_install = \
mkdir -p $(INSTALL_HDR_PATH); \
rsync -mrl --include='*/' --include='*\.h' --exclude='*' \
usr/include $(INSTALL_HDR_PATH)
PHONY += headers_install
headers_install: headers
$(call cmd,headers_install)
PHONY += archheaders archscripts
hdr-inst := -f $(srctree)/scripts/Makefile.headersinst obj
PHONY += headers
headers: $(version_h) scripts_unifdef uapi-asm-generic archheaders archscripts
$(if $(filter um, $(SRCARCH)), $(error Headers not exportable for UML))
$(Q)$(MAKE) $(hdr-inst)=include/uapi
$(Q)$(MAKE) $(hdr-inst)=arch/$(SRCARCH)/include/uapi
ifdef CONFIG_HEADERS_INSTALL
prepare: headers
endif
@ -1421,9 +1382,7 @@ kselftest-merge:
# Devicetree files
ifneq ($(wildcard $(srctree)/arch/$(SRCARCH)/boot/dts/),)
# ANDROID: allow this to be overridden by the build environment. This allows
# one to compile a device tree that is located out-of-tree.
dtstree ?= arch/$(SRCARCH)/boot/dts
dtstree := arch/$(SRCARCH)/boot/dts
endif
ifneq ($(dtstree),)
@ -1501,7 +1460,7 @@ endif
# is an exception.
ifdef CONFIG_DEBUG_INFO_BTF_MODULES
KBUILD_BUILTIN := 1
modules: $(mixed-build-prefix)vmlinux
modules: vmlinux
endif
modules: modules_prepare
@ -1845,8 +1804,6 @@ help:
@echo ''
@echo ' modules - default target, build the module(s)'
@echo ' modules_install - install the module'
@echo ' headers_install - Install sanitised kernel headers to INSTALL_HDR_PATH'
@echo ' (default: $(abspath $(INSTALL_HDR_PATH)))'
@echo ' clean - remove generated files in module directory only'
@echo ' rust-analyzer - generate rust-project.json rust-analyzer support file'
@echo ''
@ -1911,7 +1868,7 @@ KBUILD_MODULES :=
endif # CONFIG_MODULES
PHONY += modpost
modpost: $(if $(single-build),, $(if $(KBUILD_MIXED_TREE),,$(if $(KBUILD_BUILTIN), vmlinux.o))) \
modpost: $(if $(single-build),, $(if $(KBUILD_BUILTIN), vmlinux.o)) \
$(if $(KBUILD_MODULES), modules_check)
$(Q)$(MAKE) -f $(srctree)/scripts/Makefile.modpost
@ -1961,7 +1918,7 @@ endif
# Error messages still appears in the original language
PHONY += $(build-dir)
$(build-dir): prepare
$(Q)$(MAKE) $(build)=$@ $(if $(KBUILD_MIXED_TREE),,need-builtin=1) need-modorder=1 $(single-goals)
$(Q)$(MAKE) $(build)=$@ need-builtin=1 need-modorder=1 $(single-goals)
clean-dirs := $(addprefix _clean_, $(clean-dirs))
PHONY += $(clean-dirs) clean
@ -1970,9 +1927,7 @@ $(clean-dirs):
clean: $(clean-dirs)
$(call cmd,rmfiles)
@find $(or $(KBUILD_EXTMOD), .) \
$(if $(filter-out arch/$(SRCARCH)/boot/dts, $(dtstree)), $(dtstree)) \
$(RCS_FIND_IGNORE) \
@find $(or $(KBUILD_EXTMOD), .) $(RCS_FIND_IGNORE) \
\( -name '*.[aios]' -o -name '*.rsi' -o -name '*.ko' -o -name '.*.cmd' \
-o -name '*.ko.*' \
-o -name '*.dtb' -o -name '*.dtbo' \
@ -2019,7 +1974,7 @@ quiet_cmd_gen_compile_commands = GEN $@
cmd_gen_compile_commands = $(PYTHON3) $< -a $(AR) -o $@ $(filter-out $<, $(real-prereqs))
$(extmod_prefix)compile_commands.json: scripts/clang-tools/gen_compile_commands.py \
$(if $(KBUILD_EXTMOD)$(KBUILD_MIXED_TREE),, vmlinux.a $(KBUILD_VMLINUX_LIBS)) \
$(if $(KBUILD_EXTMOD),, vmlinux.a $(KBUILD_VMLINUX_LIBS)) \
$(if $(CONFIG_MODULES), $(MODORDER)) FORCE
$(call if_changed,gen_compile_commands)

12
OWNERS
View File

@ -1,12 +0,0 @@
set noparent
# GKI Dr. No Enforcement is active on this branch. Approval of one of the Dr.
# No reviewers is required following a regular CodeReview+2 vote of a code
# reviewer.
#
# See the GKI release documentation (go/gki-dr-no) for further details.
#
# The expanded list of reviewers can be found at:
# https://android.googlesource.com/kernel/common/+/android-mainline/OWNERS_DrNo
include kernel/common:android-mainline:/OWNERS_DrNo

View File

@ -1,7 +0,0 @@
[Builtin Hooks]
checkpatch = true
commit_msg_bug_field = true
commit_msg_changeid_field = true
[Builtin Hooks Options]
checkpatch = --ignore=FILE_PATH_CHANGES,GERRIT_CHANGE_ID

150
README.md
View File

@ -1,150 +0,0 @@
# How do I submit patches to Android Common Kernels
1. BEST: Make all of your changes to upstream Linux. If appropriate, backport to the stable releases.
These patches will be merged automatically in the corresponding common kernels. If the patch is already
in upstream Linux, post a backport of the patch that conforms to the patch requirements below.
- Do not send patches upstream that contain only symbol exports. To be considered for upstream Linux,
additions of `EXPORT_SYMBOL_GPL()` require an in-tree modular driver that uses the symbol -- so include
the new driver or changes to an existing driver in the same patchset as the export.
- When sending patches upstream, the commit message must contain a clear case for why the patch
is needed and beneficial to the community. Enabling out-of-tree drivers or functionality is not
a persuasive case.
2. LESS GOOD: Develop your patches out-of-tree (from an upstream Linux point-of-view). Unless these are
fixing an Android-specific bug, these are very unlikely to be accepted unless they have been
coordinated with kernel-team@android.com. If you want to proceed, post a patch that conforms to the
patch requirements below.
# Common Kernel patch requirements
- All patches must conform to the Linux kernel coding standards and pass `scripts/checkpatch.pl`
- Patches shall not break gki_defconfig or allmodconfig builds for arm, arm64, x86, x86_64 architectures
(see https://source.android.com/setup/build/building-kernels)
- If the patch is not merged from an upstream branch, the subject must be tagged with the type of patch:
`UPSTREAM:`, `BACKPORT:`, `FROMGIT:`, `FROMLIST:`, or `ANDROID:`.
- All patches must have a `Change-Id:` tag (see https://gerrit-review.googlesource.com/Documentation/user-changeid.html)
- If an Android bug has been assigned, there must be a `Bug:` tag.
- All patches must have a `Signed-off-by:` tag by the author and the submitter
Additional requirements are listed below based on patch type
## Requirements for backports from mainline Linux: `UPSTREAM:`, `BACKPORT:`
- If the patch is a cherry-pick from Linux mainline with no changes at all
- tag the patch subject with `UPSTREAM:`.
- add upstream commit information with a `(cherry picked from commit ...)` line
- Example:
- if the upstream commit message is
```
important patch from upstream
This is the detailed description of the important patch
Signed-off-by: Fred Jones <fred.jones@foo.org>
```
>- then Joe Smith would upload the patch for the common kernel as
```
UPSTREAM: important patch from upstream
This is the detailed description of the important patch
Signed-off-by: Fred Jones <fred.jones@foo.org>
Bug: 135791357
Change-Id: I4caaaa566ea080fa148c5e768bb1a0b6f7201c01
(cherry picked from commit c31e73121f4c1ec41143423ac6ce3ce6dafdcec1)
Signed-off-by: Joe Smith <joe.smith@foo.org>
```
- If the patch requires any changes from the upstream version, tag the patch with `BACKPORT:`
instead of `UPSTREAM:`.
- use the same tags as `UPSTREAM:`
- add comments about the changes under the `(cherry picked from commit ...)` line
- Example:
```
BACKPORT: important patch from upstream
This is the detailed description of the important patch
Signed-off-by: Fred Jones <fred.jones@foo.org>
Bug: 135791357
Change-Id: I4caaaa566ea080fa148c5e768bb1a0b6f7201c01
(cherry picked from commit c31e73121f4c1ec41143423ac6ce3ce6dafdcec1)
[joe: Resolved minor conflict in drivers/foo/bar.c ]
Signed-off-by: Joe Smith <joe.smith@foo.org>
```
## Requirements for other backports: `FROMGIT:`, `FROMLIST:`,
- If the patch has been merged into an upstream maintainer tree, but has not yet
been merged into Linux mainline
- tag the patch subject with `FROMGIT:`
- add info on where the patch came from as `(cherry picked from commit <sha1> <repo> <branch>)`. This
must be a stable maintainer branch (not rebased, so don't use `linux-next` for example).
- if changes were required, use `BACKPORT: FROMGIT:`
- Example:
- if the commit message in the maintainer tree is
```
important patch from upstream
This is the detailed description of the important patch
Signed-off-by: Fred Jones <fred.jones@foo.org>
```
>- then Joe Smith would upload the patch for the common kernel as
```
FROMGIT: important patch from upstream
This is the detailed description of the important patch
Signed-off-by: Fred Jones <fred.jones@foo.org>
Bug: 135791357
(cherry picked from commit 878a2fd9de10b03d11d2f622250285c7e63deace
https://git.kernel.org/pub/scm/linux/kernel/git/foo/bar.git test-branch)
Change-Id: I4caaaa566ea080fa148c5e768bb1a0b6f7201c01
Signed-off-by: Joe Smith <joe.smith@foo.org>
```
- If the patch has been submitted to LKML, but not accepted into any maintainer tree
- tag the patch subject with `FROMLIST:`
- add a `Link:` tag with a link to the submittal on lore.kernel.org
- add a `Bug:` tag with the Android bug (required for patches not accepted into
a maintainer tree)
- if changes were required, use `BACKPORT: FROMLIST:`
- Example:
```
FROMLIST: important patch from upstream
This is the detailed description of the important patch
Signed-off-by: Fred Jones <fred.jones@foo.org>
Bug: 135791357
Link: https://lore.kernel.org/lkml/20190619171517.GA17557@someone.com/
Change-Id: I4caaaa566ea080fa148c5e768bb1a0b6f7201c01
Signed-off-by: Joe Smith <joe.smith@foo.org>
```
## Requirements for Android-specific patches: `ANDROID:`
- If the patch is fixing a bug to Android-specific code
- tag the patch subject with `ANDROID:`
- add a `Fixes:` tag that cites the patch with the bug
- Example:
```
ANDROID: fix android-specific bug in foobar.c
This is the detailed description of the important fix
Fixes: 1234abcd2468 ("foobar: add cool feature")
Change-Id: I4caaaa566ea080fa148c5e768bb1a0b6f7201c01
Signed-off-by: Joe Smith <joe.smith@foo.org>
```
- If the patch is a new feature
- tag the patch subject with `ANDROID:`
- add a `Bug:` tag with the Android bug (required for android-specific features)

136
abi.bzl
View File

@ -1,136 +0,0 @@
# SPDX-License-Identifier: GPL-2.0 OR Apache-2.0
# Copyright (C) 2023 The Android Open Source Project
"""
ABI aware build rules.
"""
load("@bazel_skylib//lib:paths.bzl", "paths")
load("@bazel_skylib//rules:copy_file.bzl", "copy_file")
load("@bazel_skylib//rules:native_binary.bzl", "native_binary")
visibility("private")
_ALL_ABIS = ["arm", "arm64", "x86", "x86_64"]
def _copy_with_abi(
name,
visibility = None,
path_prefix = None,
abis = None,
out = None):
if not path_prefix:
path_prefix = ""
if not abis:
abis = _ALL_ABIS
if not out:
out = name
for abi in abis:
copy_file(
name = "{name}_{abi}".format(name = name, abi = abi),
src = ":{name}".format(name = name),
out = paths.join(path_prefix, abi, out),
allow_symlink = True,
visibility = visibility,
)
def cc_binary_with_abi(
name,
path_prefix = None,
abis = None,
visibility = None,
out = None,
**kwargs):
"""A cc_binary replacement that generates output in each subdirectory named by abi.
For example:
```
cc_binary_with_abi(
name = "a_binary",
abis = ["x86_64", "arm64"],
path_prefix = "my/path",
)
```
generates 2 rules:
* Rule a_binary_x86_64: Builds the cc_binary and put output in my/path/x86_64/a_binary.
* Rule a_binary_arm64: Builds the cc_binary and put output in my/path/arm64/a_binary.
Args:
name: the name of the build rule.
path_prefix: [Nonconfigurable](https://bazel.build/reference/be/common-definitions#configurable-attributes).
The path prefix to attach to output.
abis: [Nonconfigurable](https://bazel.build/reference/be/common-definitions#configurable-attributes).
The intended abis to generate. Default is arm64 & x86_64.
visibility: [Nonconfigurable](https://bazel.build/reference/be/common-definitions#configurable-attributes).
The visibility attribute on a target controls whether the target can be used in other packages.
out: [Nonconfigurable](https://bazel.build/reference/be/common-definitions#configurable-attributes).
The output filename. Default is `name`.
**kwargs: the rest args that cc_binary uses.
"""
native.cc_binary(
name = name,
visibility = visibility,
**kwargs
)
_copy_with_abi(
name = name,
path_prefix = path_prefix,
abis = abis,
visibility = visibility,
out = out,
)
def sh_binary_with_abi(
name,
path_prefix = None,
abis = None,
visibility = None,
out = None,
**kwargs):
"""A sh_binary replacement that generates output in each subdirectory named by abi.
For example:
```
sh_binary_with_abi(
name = "a_binary",
abis = ["x86_64", "arm64"],
path_prefix = "my/path",
)
```
generates 2 rules:
* Rule a_binary_x86_64: Copies a_binary and put output in my/path/x86_64/a_binary.
* Rule a_binary_arm64: Copies a_binary and put output in my/path/arm64/a_binary.
Args:
name: the name of the build rule.
path_prefix: [Nonconfigurable](https://bazel.build/reference/be/common-definitions#configurable-attributes).
The path prefix to attach to output.
abis: [Nonconfigurable](https://bazel.build/reference/be/common-definitions#configurable-attributes).
The intended abis to generate. Default is arm64 & x86_64.
visibility: [Nonconfigurable](https://bazel.build/reference/be/common-definitions#configurable-attributes).
The visibility attribute on a target controls whether the target can be used in other packages.
out: [Nonconfigurable](https://bazel.build/reference/be/common-definitions#configurable-attributes).
The output filename. Default is `name`.
**kwargs: the rest args that native_binary uses.
"""
if not out:
out = name
# Uses native_binary instead of sh_binary because sh_binary is not
# compatible with copy_file (sh_binary generates more than 1 outs).
native_binary(
name = name,
visibility = visibility,
out = out,
**kwargs
)
_copy_with_abi(
name = name,
path_prefix = path_prefix,
abis = abis,
visibility = visibility,
out = out,
)

View File

@ -1,4 +0,0 @@
[abi_symbol_list]
# commonly used symbols
module_layout
__put_task_struct

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,66 +0,0 @@
[abi_symbol_list]
# required by asr5803.ko
sdhci_enable_sdio_irq
# required by asr_serial.ko
uart_get_divisor
uart_handle_cts_change
uart_handle_dcd_change
uart_insert_char
# required by ehci-asr-ci.ko
ehci_init_driver
ehci_setup
# required by phy-asr-ci-usb2.ko
usb_add_phy_dev
usb_remove_phy
# required by pvrsrvkm.ko
call_rcu
devm_devfreq_remove_device
dev_pm_opp_remove
dma_fence_array_ops
dma_fence_enable_sw_signaling
idr_replace
kthread_freezable_should_stop
rcu_barrier
# required by sdhci_asr.ko
sdhci_resume_host
sdhci_send_tuning
sdhci_set_clock
sdhci_set_uhs_signaling
sdhci_suspend_host
# required by vh_sched.ko
__traceiter_android_vh_map_util_freq
__tracepoint_android_vh_map_util_freq
# required by asr_drm.ko
clk_set_rate_exclusive
clk_rate_exclusive_put
# required by mercury.ko
media_device_register_entity
media_device_unregister_entity
v4l2_ctrl_get_menu
v4l2_ctrl_type_op_equal
v4l2_ctrl_type_op_init
v4l2_ctrl_type_op_log
v4l2_m2m_buf_done_and_job_finish
v4l2_m2m_last_buf
# required by jpu_heap.ko
kmem_cache_size
memset16
# required by dwc3.ko
extcon_find_edev_by_node
phy_pm_runtime_put_sync
usb_get_maximum_ssp_rate
# required by xhci-asr.ko
extcon_find_edev_by_node

View File

@ -1,11 +0,0 @@
[abi_symbol_list]
# aura sync
hid_unregister_driver
hid_hw_raw_request
hid_open_report
hid_hw_start
hid_hw_stop
__hid_register_driver
hid_hw_output_report
hid_hw_open
hid_hw_close

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,146 +0,0 @@
[abi_symbol_list]
# commonly used symbols
module_layout
__put_task_struct
# required by fips140.ko
aead_register_instance
ahash_register_instance
arch_timer_read_counter
bcmp
complete_all
completion_done
cpu_have_feature
crypto_aead_decrypt
crypto_aead_encrypt
crypto_aead_setauthsize
crypto_aead_setkey
crypto_ahash_finup
crypto_ahash_setkey
crypto_alg_list
crypto_alg_sem
crypto_alloc_aead
crypto_alloc_rng
crypto_alloc_shash
crypto_alloc_skcipher
crypto_attr_alg_name
crypto_check_attr_type
crypto_cipher_encrypt_one
crypto_cipher_setkey
crypto_clone_cipher
crypto_clone_shash
crypto_destroy_tfm
crypto_drop_spawn
crypto_get_default_null_skcipher
crypto_grab_aead
crypto_grab_ahash
crypto_grab_shash
crypto_grab_skcipher
crypto_grab_spawn
crypto_inst_setname
crypto_put_default_null_skcipher
crypto_register_aead
crypto_register_aeads
crypto_register_ahash
crypto_register_ahashes
crypto_register_alg
crypto_register_algs
crypto_register_rng
crypto_register_rngs
crypto_register_shash
crypto_register_shashes
crypto_register_skcipher
crypto_register_skciphers
crypto_register_template
crypto_register_templates
crypto_remove_spawns
crypto_req_done
crypto_rng_reset
crypto_shash_digest
crypto_shash_final
crypto_shash_finup
crypto_shash_setkey
crypto_shash_tfm_digest
crypto_shash_update
crypto_skcipher_decrypt
crypto_skcipher_encrypt
crypto_skcipher_setkey
crypto_spawn_tfm
crypto_spawn_tfm2
crypto_unregister_aeads
crypto_unregister_alg
crypto_unregister_rng
crypto_unregister_rngs
crypto_unregister_shash
crypto_unregister_shashes
crypto_unregister_skciphers
crypto_unregister_template
crypto_unregister_templates
down_read
down_write
fortify_panic
fpsimd_context_busy
get_random_bytes
__init_swait_queue_head
irq_stat
jiffies
kasan_flag_enabled
kernel_neon_begin
kernel_neon_end
kfree
kfree_sensitive
__kmalloc
kmalloc_caches
kmalloc_trace
kmemdup
ktime_get
__list_add_valid_or_report
__list_del_entry_valid_or_report
memcpy
memset
__mutex_init
mutex_lock
mutex_unlock
panic
preempt_schedule_notrace
_printk
___ratelimit
_raw_spin_lock
_raw_spin_unlock
refcount_warn_saturate
rng_is_initialized
scatterwalk_ffwd
scatterwalk_map_and_copy
sg_init_one
sg_init_table
sg_next
shash_free_singlespawn_instance
shash_no_setkey
shash_register_instance
skcipher_alloc_instance_simple
skcipher_register_instance
skcipher_walk_aead_decrypt
skcipher_walk_aead_encrypt
skcipher_walk_done
skcipher_walk_virt
snprintf
__stack_chk_fail
strcmp
strlen
strncmp
strnlen
strscpy
__traceiter_android_vh_aes_decrypt
__traceiter_android_vh_aes_encrypt
__traceiter_android_vh_aes_expandkey
__traceiter_android_vh_sha256
__tracepoint_android_vh_aes_decrypt
__tracepoint_android_vh_aes_encrypt
__tracepoint_android_vh_aes_expandkey
__tracepoint_android_vh_sha256
tracepoint_probe_register
up_read
up_write
wait_for_completion
xa_load
xa_store

View File

@ -1,240 +0,0 @@
[abi_symbol_list]
blkcg_activate_policy
blkcg_deactivate_policy
blkcg_root
blkdev_get_by_path
blkdev_issue_flush
blk_mq_sched_mark_restart_hctx
blk_mq_sched_try_insert_merge
blk_mq_sched_try_merge
blk_queue_rq_timeout
blk_req_needs_zone_write_lock
__blk_req_zone_write_lock
__blk_req_zone_write_unlock
caches_clean_inval_pou
cleancache_register_ops
compact_node_async
copy_page
_dev_alert
device_pm_wait_for_dev
__devm_alloc_percpu
dma_heap_try_get_pool_size_kb
elv_bio_merge_ok
elv_rb_add
elv_rb_del
elv_rb_find
elv_rb_former_request
elv_rb_latter_request
elv_rqhash_add
elv_rqhash_del
free_hpage
file_ra_state_init
file_write_and_wait_range
generic_perform_write
getboottime64
get_options
__get_task_ioprio
gpiochip_find
gs_alloc_req
gserial_free_line
gserial_resume
gserial_suspend
gs_free_req
kick_all_cpus_sync
mas_walk
mas_prev
mas_next
mm_access
netlink_ack
param_get_uint
param_set_uint
pidfd_get_pid
prep_compound_page
prep_new_hpage
proc_set_size
pstore_register
pstore_unregister
rfkill_find_type
rfkill_get_led_trigger_name
rfkill_pause_polling
rfkill_set_led_trigger_name
rfkill_set_states
rfkill_soft_blocked
scsi_device_quiesce
scsi_device_resume
smpboot_unregister_percpu_thread
stack_trace_save_regs
swp_swapcount
__kfree_skb
__traceiter_android_rvh_arm64_serror_panic
__traceiter_android_rvh_die_kernel_fault
__traceiter_android_rvh_do_el1_bti
__traceiter_android_rvh_do_el1_fpac
__traceiter_android_rvh_do_el1_undef
__traceiter_android_rvh_do_sea
__traceiter_android_rvh_do_sp_pc_abort
__traceiter_android_rvh_ksys_umount
__traceiter_android_rvh_panic_unhandled
__traceiter_android_rvh_process_madvise_bypass
__traceiter_android_rvh_report_bug
__traceiter_android_rvh_try_alloc_pages
__traceiter_android_rvh_try_alloc_pages_gfp
__traceiter_android_vh_alloc_contig_range_not_isolated
__traceiter_android_vh_alloc_pages_slowpath_start
__traceiter_android_vh_alloc_pages_slowpath_end
__traceiter_android_vh_cache_show
__traceiter_android_vh_cma_alloc_set_max_retries
__traceiter_android_vh_cma_debug_show_areas
__traceiter_android_vh_direct_reclaim_begin
__traceiter_android_vh_direct_reclaim_end
__traceiter_android_vh_dma_heap_buffer_alloc_start
__traceiter_android_vh_dma_heap_buffer_alloc_end
__traceiter_android_vh_dmabuf_page_pool_free_bypass
__traceiter_android_vh_do_read_fault
__traceiter_android_vh_dpm_wait_finish
__traceiter_android_vh_dpm_wait_start
__traceiter_android_vh_exit_mm
__traceiter_android_vh_filemap_fault_start
__traceiter_android_vh_filemap_fault_end
__traceiter_android_vh_filemap_read
__traceiter_android_vh_filemap_map_pages
__traceiter_android_vh_flush_work_wait_finish
__traceiter_android_vh_flush_work_wait_start
__traceiter_android_vh_flush_wq_wait_finish
__traceiter_android_vh_flush_wq_wait_start
__traceiter_android_vh_free_pages_prepare_bypass
__traceiter_android_vh_free_pages_ok_bypass
__traceiter_android_vh_is_fpsimd_save
__traceiter_android_vh_logbuf
__traceiter_android_vh_logbuf_pr_cont
__traceiter_android_vh_madvise_pageout_bypass
__traceiter_android_vh_madvise_pageout_return_error
__traceiter_android_vh_madvise_pageout_swap_entry
__traceiter_android_vh_madvise_swapin_walk_pmd_entry
__traceiter_android_vh_meminfo_proc_show
__traceiter_android_vh_mmc_update_mmc_queue
__traceiter_android_vh_si_meminfo_adjust_shmem
__traceiter_android_vh_shmem_mod_shmem
__traceiter_android_vh_shmem_mod_swapped
__traceiter_android_vh_page_cache_readahead_start
__traceiter_android_vh_page_cache_readahead_end
__traceiter_android_vh_print_slabinfo_header
__traceiter_android_vh_process_madvise
__traceiter_android_vh_process_madvise_return_error
__traceiter_android_vh_psi_update_triggers
__traceiter_android_vh_ptype_head
__traceiter_android_vh_rebalance_anon_lru_bypass
__traceiter_android_vh_rtmutex_wait_finish
__traceiter_android_vh_show_mem
__traceiter_android_vh_show_smap
__traceiter_android_vh_smaps_pte_entry
__traceiter_android_vh_smaps_swap_shared
__traceiter_android_vh_show_smap_swap_shared
__traceiter_android_vh_suitable_migration_target_bypass
__traceiter_android_vh_split_large_folio_bypass
__traceiter_android_vh_sync_irq_wait_finish
__traceiter_android_vh_sync_irq_wait_start
__traceiter_android_vh_try_to_freeze_todo
__traceiter_android_vh_try_to_freeze_todo_unfrozen
__traceiter_android_vh_tune_scan_control
__traceiter_android_vh_use_vm_swappiness
__traceiter_android_vh_warn_alloc_tune_ratelimit
__traceiter_android_vh_warn_alloc_show_mem_bypass
__traceiter_android_vh_watchdog_timer_softlockup
__traceiter_android_vh_wq_lockup_pool
__traceiter_android_vh_zs_shrinker_adjust
__traceiter_android_vh_zs_shrinker_bypass
__traceiter_console
__traceiter_consume_skb
__traceiter_error_report_end
__traceiter_vm_unmapped_area
__traceiter_workqueue_execute_start
__traceiter_kfree_skb
__tracepoint_android_rvh_arm64_serror_panic
__tracepoint_android_rvh_die_kernel_fault
__tracepoint_android_rvh_do_el1_bti
__tracepoint_android_rvh_do_el1_fpac
__tracepoint_android_rvh_do_el1_undef
__tracepoint_android_rvh_do_sea
__tracepoint_android_rvh_do_sp_pc_abort
__tracepoint_android_rvh_ksys_umount
__tracepoint_android_rvh_panic_unhandled
__tracepoint_android_rvh_process_madvise_bypass
__tracepoint_android_rvh_report_bug
__tracepoint_android_rvh_try_alloc_pages
__tracepoint_android_rvh_try_alloc_pages_gfp
__tracepoint_android_vh_alloc_contig_range_not_isolated
__tracepoint_android_vh_alloc_pages_slowpath_start
__tracepoint_android_vh_alloc_pages_slowpath_end
__tracepoint_android_vh_cache_show
__tracepoint_android_vh_cma_alloc_set_max_retries
__tracepoint_android_vh_cma_debug_show_areas
__tracepoint_android_vh_direct_reclaim_begin
__tracepoint_android_vh_direct_reclaim_end
__tracepoint_android_vh_dma_heap_buffer_alloc_start
__tracepoint_android_vh_dma_heap_buffer_alloc_end
__tracepoint_android_vh_dmabuf_page_pool_free_bypass
__tracepoint_android_vh_do_read_fault
__tracepoint_android_vh_dpm_wait_finish
__tracepoint_android_vh_dpm_wait_start
__tracepoint_android_vh_exit_mm
__tracepoint_android_vh_filemap_fault_start
__tracepoint_android_vh_filemap_fault_end
__tracepoint_android_vh_filemap_read
__tracepoint_android_vh_filemap_map_pages
__tracepoint_android_vh_flush_work_wait_finish
__tracepoint_android_vh_flush_work_wait_start
__tracepoint_android_vh_flush_wq_wait_finish
__tracepoint_android_vh_flush_wq_wait_start
__tracepoint_android_vh_free_pages_prepare_bypass
__tracepoint_android_vh_free_pages_ok_bypass
__tracepoint_android_vh_is_fpsimd_save
__tracepoint_android_vh_logbuf
__tracepoint_android_vh_logbuf_pr_cont
__tracepoint_android_vh_madvise_pageout_bypass
__tracepoint_android_vh_madvise_pageout_return_error
__tracepoint_android_vh_madvise_pageout_swap_entry
__tracepoint_android_vh_madvise_swapin_walk_pmd_entry
__tracepoint_android_vh_meminfo_proc_show
__tracepoint_android_vh_mmc_update_mmc_queue
__tracepoint_android_vh_si_meminfo_adjust_shmem
__tracepoint_android_vh_shmem_mod_shmem
__tracepoint_android_vh_shmem_mod_swapped
__tracepoint_android_vh_page_cache_readahead_start
__tracepoint_android_vh_page_cache_readahead_end
__tracepoint_android_vh_print_slabinfo_header
__tracepoint_android_vh_process_madvise
__tracepoint_android_vh_process_madvise_return_error
__tracepoint_android_vh_psi_update_triggers
__tracepoint_android_vh_ptype_head
__tracepoint_android_vh_rebalance_anon_lru_bypass
__tracepoint_android_vh_rtmutex_wait_finish
__tracepoint_android_vh_show_mem
__tracepoint_android_vh_show_smap
__tracepoint_android_vh_smaps_pte_entry
__tracepoint_android_vh_smaps_swap_shared
__tracepoint_android_vh_show_smap_swap_shared
__tracepoint_android_vh_split_large_folio_bypass
__tracepoint_android_vh_suitable_migration_target_bypass
__tracepoint_android_vh_sync_irq_wait_finish
__tracepoint_android_vh_sync_irq_wait_start
__tracepoint_android_vh_try_to_freeze_todo
__tracepoint_android_vh_try_to_freeze_todo_unfrozen
__tracepoint_android_vh_tune_scan_control
__tracepoint_android_vh_use_vm_swappiness
__tracepoint_android_vh_warn_alloc_tune_ratelimit
__tracepoint_android_vh_warn_alloc_show_mem_bypass
__tracepoint_android_vh_watchdog_timer_softlockup
__tracepoint_android_vh_wq_lockup_pool
__tracepoint_android_vh_zs_shrinker_adjust
__tracepoint_android_vh_zs_shrinker_bypass
__tracepoint_console
__tracepoint_consume_skb
__tracepoint_error_report_end
__tracepoint_vm_unmapped_area
__tracepoint_workqueue_execute_start
__tracepoint_kfree_skb
usb_set_device_state
yield
regulator_get_current_limit
android_create_function_device

View File

@ -1,238 +0,0 @@
[abi_symbol_list]
is_vmalloc_or_module_addr
kfree
__kmalloc
arch_vma_name
anon_vma_name
walk_page_range
vm_normal_page
pmd_clear_bad
__pmd_trans_huge_lock
__pte_offset_map_lock
mod_node_page_state
page_cache_sync_ra
proc_create
profile_event_register
si_swapinfo
single_open
sock_from_file
task_cputime_adjusted
tcp_sync_mss
netdev_get_name
tcp_send_active_reset
fwnode_usb_role_switch_get
usb_for_each_dev
dev_valid_name
sock_from_file
tcp_done
udp4_lib_lookup
udp6_lib_lookup
rtc_time64_to_tm
proc_create_net_single
proc_create_net_single_write
snmp_fold_field
call_usermodehelper
pm_wakeup_irq
nla_append
skb_append
sysctl_max_skb_frags
__show_mem
find_vm_area
profile_event_unregister
binder_alloc_copy_from_buffer
ufshcd_query_descriptor_retry
ufshcd_query_attr
nvmem_device_find
device_match_of_node
drop_super
filp_open_block
mm_trace_rss_stat
get_slabinfo
xas_find
contpte_ptep_test_and_clear_young
tty_dev_name_to_number
tty_kopen_exclusive
tty_unlock
tty_set_ldisc
tty_kclose
__kfifo_len_r
__traceiter_android_vh_killed_process
__tracepoint_android_vh_killed_process
__traceiter_android_vh_rwsem_write_wait_finish
__tracepoint_android_vh_rwsem_write_wait_finish
__tracepoint_android_rvh_cpuinfo_c_show
__traceiter_android_rvh_cpuinfo_c_show
__tracepoint_android_vh_dc_send_copy
__traceiter_android_vh_dc_send_copy
__tracepoint_android_vh_dc_receive
__traceiter_android_vh_dc_receive
__traceiter_android_vh_inet_create
__tracepoint_android_vh_inet_create
__traceiter_android_vh_uplink_send_msg
__tracepoint_android_vh_uplink_send_msg
__traceiter_android_vh_sock_create
__tracepoint_android_vh_sock_create
__traceiter_android_vh_modify_scan_control
__traceiter_android_vh_should_continue_reclaim
__tracepoint_android_vh_process_madvise_begin
__traceiter_android_vh_process_madvise_begin
__tracepoint_android_vh_process_madvise_iter
__traceiter_android_vh_process_madvise_iter
__traceiter_android_vh_file_is_tiny_bypass
__tracepoint_android_vh_modify_scan_control
__tracepoint_android_vh_should_continue_reclaim
__tracepoint_android_vh_file_is_tiny_bypass
__tracepoint_android_vh_shrink_slab_bypass
__traceiter_android_vh_shrink_slab_bypass
__tracepoint_android_vh_do_shrink_slab
__traceiter_android_vh_do_shrink_slab
__tracepoint_android_vh_shrink_slab_bypass
__traceiter_android_vh_shrink_slab_bypass
__tracepoint_android_vh_slab_alloc_node
__traceiter_android_vh_slab_alloc_node
__tracepoint_android_vh_slab_free
__traceiter_android_vh_slab_free
__traceiter_android_vh_should_fault_around
__tracepoint_android_vh_should_fault_around
__traceiter_android_vh_mglru_should_abort_scan
__tracepoint_android_vh_mglru_should_abort_scan
__traceiter_android_vh_mglru_should_abort_scan_order
__tracepoint_android_vh_mglru_should_abort_scan_order
__traceiter_android_vh_tcp_connect
__tracepoint_android_vh_tcp_connect
__traceiter_android_vh_tcp_write_timeout_estab_retrans
__tracepoint_android_vh_tcp_write_timeout_estab_retrans
__traceiter_android_vh_inet_csk_clone_lock
__tracepoint_android_vh_inet_csk_clone_lock
__traceiter_android_vh_tcp_clean_rtx_queue
__tracepoint_android_vh_tcp_clean_rtx_queue
__traceiter_android_vh_tcp_rcv_synack
__tracepoint_android_vh_tcp_rcv_synack
__traceiter_android_vh_udp_unicast_rcv_skb
__tracepoint_android_vh_udp_unicast_rcv_skb
__traceiter_android_vh_udp6_unicast_rcv_skb
__tracepoint_android_vh_udp6_unicast_rcv_skb
__tracepoint_android_vh_si_mem_available_adjust
__traceiter_android_vh_si_mem_available_adjust
__tracepoint_android_vh_si_meminfo_adjust
__traceiter_android_vh_si_meminfo_adjust
__traceiter_android_vh_rwsem_write_finished
__tracepoint_android_vh_rwsem_write_finished
__traceiter_android_vh_tcp_v4_connect
__tracepoint_android_vh_tcp_v4_connect
__traceiter_android_vh_tcp_v6_connect
__tracepoint_android_vh_tcp_v6_connect
__traceiter_android_vh_udp_v4_connect
__tracepoint_android_vh_udp_v4_connect
__traceiter_android_vh_udp_v6_connect
__tracepoint_android_vh_udp_v6_connect
__traceiter_android_rvh_dma_buf_stats_teardown
__tracepoint_android_rvh_dma_buf_stats_teardown
__traceiter_android_rvh_hw_protection_shutdown
__tracepoint_android_rvh_hw_protection_shutdown
__traceiter_android_rvh_bpf_int_jit_compile_ro
__tracepoint_android_rvh_bpf_int_jit_compile_ro
__traceiter_android_vh_tcp_sock_error
__tracepoint_android_vh_tcp_sock_error
__traceiter_android_vh_tcp_select_window
__tracepoint_android_vh_tcp_select_window
__traceiter_android_vh_tcp_fastsyn
__tracepoint_android_vh_tcp_fastsyn
__traceiter_android_vh_tcp_state_change
__tracepoint_android_vh_tcp_state_change
__traceiter_android_vh_tcp_update_rtt
__tracepoint_android_vh_tcp_update_rtt
__traceiter_android_vh_sk_alloc
__tracepoint_android_vh_sk_alloc
__traceiter_android_vh_sk_free
__tracepoint_android_vh_sk_free
__traceiter_android_vh_sk_clone_lock
__tracepoint_android_vh_sk_clone_lock
__traceiter_android_rvh_f2fs_down_read
__tracepoint_android_rvh_f2fs_down_read
__traceiter_android_vh_f2fs_improve_priority
__tracepoint_android_vh_f2fs_improve_priority
__traceiter_android_vh_f2fs_restore_priority
__tracepoint_android_vh_f2fs_restore_priority
__traceiter_android_vh_cma_alloc_retry
__tracepoint_android_vh_cma_alloc_retry
__tracepoint_android_vh_should_memcg_bypass
__traceiter_android_vh_should_memcg_bypass
__traceiter_android_rvh_ogki_vfree_bypass
__traceiter_android_rvh_ogki_vmalloc_node_bypass
__traceiter_android_vh_ogki_async_psi_bypass
__traceiter_android_vh_ogki_f2fs_dsm
__traceiter_android_vh_ogki_f2fs_dsm_get
__tracepoint_android_vh_ogki_f2fs_create
__traceiter_android_vh_ogki_f2fs_create
__tracepoint_android_vh_ogki_f2fs_submit_write_page
__traceiter_android_vh_ogki_f2fs_submit_write_page
__traceiter_android_vh_ogki_check_vip_status
__traceiter_android_vh_ogki_cma_alloc_retry
__traceiter_android_vh_ogki_ufs_dsm
__tracepoint_android_rvh_ogki_vfree_bypass
__tracepoint_android_rvh_ogki_vmalloc_node_bypass
__tracepoint_android_vh_ogki_async_psi_bypass
__tracepoint_android_vh_ogki_f2fs_dsm
__tracepoint_android_vh_ogki_f2fs_dsm_get
__tracepoint_android_vh_ogki_check_vip_status
__tracepoint_android_vh_ogki_cma_alloc_retry
__tracepoint_android_vh_ogki_ufs_dsm
__tracepoint_scsi_dispatch_cmd_start
__traceiter_scsi_dispatch_cmd_start
__traceiter_android_vh_ogki_tcp_srtt_estimator
__tracepoint_android_vh_ogki_tcp_srtt_estimator
__traceiter_android_vh_ogki_tcp_rcv_estab_fastpath
__tracepoint_android_vh_ogki_tcp_rcv_estab_fastpath
__traceiter_android_vh_ogki_tcp_rcv_estab_slowpath
__tracepoint_android_vh_ogki_tcp_rcv_estab_slowpath
__traceiter_android_vh_ogki_tcp_rcv_rtt_update
__tracepoint_android_vh_ogki_tcp_rcv_rtt_update
__traceiter_android_vh_ogki_tcp_retransmit_timer
__tracepoint_android_vh_ogki_tcp_retransmit_timer
__traceiter_android_vh_ogki_udp_unicast_rcv_skb
__tracepoint_android_vh_ogki_udp_unicast_rcv_skb
__traceiter_android_vh_ogki_udp6_unicast_rcv_skb
__tracepoint_android_vh_ogki_udp6_unicast_rcv_skb
__tracepoint_android_rvh_ogki_task_util
__traceiter_android_rvh_ogki_task_util
__tracepoint_android_rvh_ogki_uclamp_task_util
__traceiter_android_rvh_ogki_uclamp_task_util
__tracepoint_android_rvh_ogki_get_task_tags
__traceiter_android_rvh_ogki_get_task_tags
__tracepoint_android_rvh_ogki_get_task_rsum
__traceiter_android_rvh_ogki_get_task_rsum
__tracepoint_android_rvh_ogki_check_task_tags
__traceiter_android_rvh_ogki_check_task_tags
__tracepoint_android_vh_ogki_audit_log_cfi
__tracepoint_android_rvh_ogki_audit_log_usercopy
__tracepoint_android_rvh_ogki_audit_log_module_sign
__tracepoint_android_vh_ogki_audit_log_setid
__traceiter_android_vh_ogki_audit_log_cfi
__traceiter_android_rvh_ogki_audit_log_usercopy
__traceiter_android_rvh_ogki_audit_log_module_sign
__traceiter_android_vh_ogki_audit_log_setid
__traceiter_android_vh_ogki_get_log_usertype
__tracepoint_android_vh_ogki_get_log_usertype
__traceiter_android_rvh_ogki_hievent_create
__tracepoint_android_rvh_ogki_hievent_create
__traceiter_android_rvh_ogki_hievent_put_string
__tracepoint_android_rvh_ogki_hievent_put_string
__traceiter_android_rvh_ogki_hievent_put_integral
__tracepoint_android_rvh_ogki_hievent_put_integral
__traceiter_android_rvh_ogki_hievent_report
__tracepoint_android_rvh_ogki_hievent_report
__traceiter_android_rvh_ogki_hievent_destroy
__tracepoint_android_rvh_ogki_hievent_destroy
__traceiter_android_vh_ogki_hievent_to_jank
__tracepoint_android_vh_ogki_hievent_to_jank
__tracepoint_android_vh_ogki_set_wifi_state_connect
__traceiter_android_vh_ogki_set_wifi_state_connect
__tracepoint_android_vh_ogki_set_wifi_state_disconnect
__traceiter_android_vh_ogki_set_wifi_state_disconnect
__traceiter_android_vh_ogki_kmem_cache_create_usercopy
__tracepoint_android_vh_ogki_kmem_cache_create_usercopy
__traceiter_android_vh_wq_queue_work
__traceiter_android_vh_wq_wake_idle_worker
__tracepoint_android_vh_wq_queue_work
__tracepoint_android_vh_wq_wake_idle_worker

File diff suppressed because it is too large Load Diff

View File

@ -1,38 +0,0 @@
[abi_symbol_list]
# required by drivers
kunit_hooks
kunit_running
# required by tests
__kunit_abort
__kunit_activate_static_stub
kunit_add_action
kunit_add_action_or_reset
__kunit_add_resource
kunit_assert_prologue
kunit_binary_assert_format
kunit_binary_ptr_assert_format
kunit_binary_str_assert_format
kunit_cleanup
kunit_deactivate_static_stub
kunit_destroy_resource
__kunit_do_failed_assertion
kunit_fail_assert_format
kunit_init_test
kunit_kfree
kunit_kmalloc_array
kunit_log_append
kunit_mem_assert_format
kunit_ptr_not_err_assert_format
kunit_release_action
kunit_remove_action
kunit_remove_resource
kunit_run_tests
kunit_suite_has_succeeded
kunit_suite_num_test_cases
kunit_test_case_num
__kunit_test_suites_exit
__kunit_test_suites_init
kunit_try_catch_run
kunit_try_catch_throw
kunit_unary_assert_format

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,181 +0,0 @@
[abi_symbol_list]
# commonly used symbols
module_layout
__put_task_struct
# required by ntfs3.ko
balance_dirty_pages_ratelimited
__bh_read
bh_uptodate_or_lock
bio_add_page
bio_alloc_bioset
bio_chain
bio_put
blkdev_issue_discard
blkdev_issue_zeroout
blk_finish_plug
blk_start_plug
__blockdev_direct_IO
block_dirty_folio
block_invalidate_folio
block_truncate_page
block_write_begin
block_write_end
__bread_gfp
__brelse
buffer_migrate_folio
clean_bdev_aliases
clear_inode
clear_nlink
copy_page_from_iter_atomic
create_empty_buffers
current_time
current_umask
dentry_path_raw
d_find_alias
d_instantiate
discard_new_inode
d_make_root
d_obtain_alias
down_write_trylock
dput
drop_nlink
d_splice_alias
errseq_set
fault_in_iov_iter_readable
fiemap_fill_next_extent
fiemap_prep
filemap_fdatawait_range
filemap_fdatawrite
filemap_fdatawrite_range
__filemap_set_wb_err
filemap_splice_read
filemap_write_and_wait_range
file_modified
file_remove_privs
file_update_time
finish_no_open
finish_open
flush_dcache_page
__folio_lock
__folio_put
folio_set_bh
folio_unlock
fs_bio_set
fscrypt_file_open
fs_param_is_string
fs_param_is_u32
__fs_parse
fs_umode_to_dtype
generic_block_bmap
generic_fh_to_dentry
generic_fh_to_parent
generic_file_fsync
generic_file_llseek
generic_file_mmap
generic_file_open
generic_file_read_iter
__generic_file_write_iter
generic_fillattr
generic_read_dir
generic_write_checks
generic_write_end
__getblk_gfp
get_fs_type
get_inode_acl
get_tree_bdev
grab_cache_page_write_begin
hex_asc
iget5_locked
iget_failed
ihold
ilookup
inc_nlink
__init_rwsem
init_special_inode
init_user_ns
inode_dio_wait
inode_get_bytes
inode_init_once
inode_init_owner
inode_newsize_ok
inode_nohighmem
inode_set_bytes
inode_set_ctime_current
insert_inode_locked
invalidate_bdev
invalidate_inode_buffers
iov_iter_zero
iput
is_bad_inode
iterate_supers_type
iter_file_splice_write
kfree_link
kill_block_super
kmem_cache_alloc_lru
load_nls
load_nls_default
__lock_buffer
lockref_get
logfc
make_bad_inode
mark_buffer_dirty
__mark_inode_dirty
mpage_readahead
mpage_read_folio
mpage_writepages
names_cachep
new_inode
overflowgid
overflowuid
pagecache_get_page
page_pinner_inited
__page_pinner_put_page
posix_acl_chmod
posix_acl_create
posix_acl_from_xattr
posix_acl_to_xattr
posix_acl_update_mode
proc_create_data
proc_mkdir
rb_first
rb_last
rb_prev
read_cache_page
register_filesystem
remove_proc_entry
sb_set_blocksize
setattr_copy
setattr_prepare
set_cached_acl
set_nlink
set_page_dirty
simple_rename_timestamp
submit_bio
submit_bio_wait
sync_blockdev
sync_blockdev_nowait
sync_dirty_buffer
sync_filesystem
sync_inode_metadata
sync_mapping_buffers
truncate_inode_pages_final
truncate_pagecache
truncate_setsize
unload_nls
unlock_buffer
unlock_new_inode
unlock_page
unregister_filesystem
utf16s_to_utf8s
utf8_to_utf32
vfs_fsync_range
vm_zone_stat
__wait_on_buffer
write_cache_pages
write_inode_now
# required by thermal_core_skip_irq.ko
__traceiter_android_vh_thermal_pm_notify_suspend
__tracepoint_android_vh_thermal_pm_notify_suspend
tracepoint_probe_register

View File

@ -1,534 +0,0 @@
[abi_symbol_list]
address_space_init_once
bio_add_page
bio_associate_blkg
bio_put
__blkdev_issue_discard
blk_finish_plug
blk_rq_map_user
blk_rq_map_user_iov
blk_start_plug
blk_fill_rwbs
__break_lease
cgroup_add_legacy_cftypes
config_item_init_type_name
console_printk
copy_fs_struct
cpu_cgrp_subsys
cpufreq_frequency_table_get_index
cpufreq_policy_transition_delay_us
cpufreq_update_util_data
contpte_ptep_test_and_clear_young
d_drop
dentry_open
dev_get_by_index_rcu
device_create_bin_file
device_remove_bin_file
devres_destroy
dget_parent
d_invalidate
dma_buf_get_each
do_traversal_all_lruvec
down_read_trylock
down_write_killable
d_rehash
drm_crtc_vblank_waitqueue
d_set_d_op
filp_close
folio_add_lru
folio_mapping
folio_referenced
for_each_kernel_tracepoint
free_fs_struct
freq_qos_add_notifier
freq_qos_remove_notifier
fsnotify_add_mark
fsnotify_alloc_group
fsnotify_destroy_mark
fsnotify_init_mark
fsnotify_put_group
fsnotify_put_mark
fsstack_copy_inode_size
generic_delete_inode
__generic_file_fsync
get_wchan
gnet_stats_add_queue
gnet_stats_copy_basic
gnet_stats_copy_queue
gov_attr_set_get
gpiod_to_chip
have_governor_per_policy
i2c_smbus_read_word_data
i2c_smbus_write_word_data
igrab
iio_channel_get
iio_channel_release
iio_get_channel_type
__inet6_lookup_established
__inet_lookup_established
iov_iter_advance
iov_iter_advance
ip6_local_out
ip6_route_me_harder
ip_local_deliver
ip_local_out
ip_route_me_harder
ipv6_find_hdr
is_ashmem_file
is_dma_buf_file
iterate_dir
jiffies_64_to_clock_t
kick_process
ktime_get_coarse_real_ts64
ktime_get_raw_ts64
ktime_get_real_ts64
lock_rename
lookup_one_len_unlocked
mem_cgroup_from_id
mem_cgroup_update_lru_size
memcg_page_state
memory_cgrp_subsys
memory_cgrp_subsys_enabled_key
mipi_dsi_generic_write
mmc_wait_for_cmd
mntget
__mod_lruvec_state
__mod_zone_page_state
mount_nodev
memcg_kmem_online_key
neigh_xmit
netif_receive_skb_core
__netif_schedule
nf_ct_attach
nf_ct_delete
nf_register_net_hook
nf_register_net_hooks
nf_unregister_net_hook
nf_unregister_net_hooks
nla_find
nla_memcpy
__nla_parse
nla_put
nla_put_64bit
nla_reserve
nla_reserve_64bit
noop_qdisc
nop_mnt_idmap
notify_change
nr_running
of_css
osq_lock
osq_unlock
override_creds
__page_file_index
path_get
pfifo_qdisc_ops
platform_device_add
platform_device_alloc
platform_device_put
platform_driver_unregister
pm_get_active_wakeup_sources
prepare_creds
prepare_to_wait_exclusive
__printk_ratelimit
proc_symlink
psched_ratecfg_precompute
public_key_verify_signature
put_pages_list
__qdisc_calculate_pkt_len
qdisc_create_dflt
qdisc_hash_add
qdisc_put
qdisc_reset
qdisc_tree_reduce_backlog
qdisc_watchdog_cancel
qdisc_watchdog_init
qdisc_watchdog_schedule_range_ns
radix_tree_lookup_slot
radix_tree_replace_slot
_raw_write_trylock
reciprocal_value
register_tcf_proto_ops
regulator_map_voltage_linear_range
remove_proc_subtree
revert_creds
root_mem_cgroup
rtc_read_alarm
rtc_set_alarm
__rtnl_link_register
__rtnl_link_unregister
sdio_memcpy_fromio
sdio_memcpy_toio
sdio_set_block_size
sdio_writeb_readb
security_file_ioctl
send_sig
send_sig_info
set_blocksize
__skb_checksum_complete
skb_dump
snd_pcm_hw_constraint_mask64
snd_soc_find_dai
spi_bus_type
stack_trace_save_tsk
static_key_disable
static_key_enable
stpcpy
strncmp
stack_depot_print
task_rq_lock
tcf_action_exec
tcf_block_get
tcf_block_put
tcf_classify
tcf_exts_destroy
tcf_exts_dump
tcf_exts_dump_stats
tcf_exts_init_ex
tcf_exts_validate
tcf_queue_work
tcp_hashinfo
touch_atime
__traceiter_android_rvh_post_init_entity_util_avg
__traceiter_android_rvh_rtmutex_force_update
__traceiter_android_rvh_set_cpus_allowed_comm
__traceiter_android_vh_set_tsk_need_resched_lazy
__traceiter_android_rvh_set_balance_anon_file_reclaim
__traceiter_android_vh_account_process_tick_gran
__traceiter_android_vh_add_page_to_lrulist
__traceiter_android_vh_adjust_alloc_flags
__traceiter_android_vh_alloc_oem_binder_struct
__traceiter_android_vh_alloc_pages_failure_bypass
__traceiter_android_vh_alloc_pages_reclaim_bypass
__traceiter_android_rvh_alloc_workqueue
__traceiter_android_vh_alter_mutex_list_add
__traceiter_android_vh_binder_alloc_new_buf_locked
__traceiter_android_vh_binder_buffer_release
__traceiter_android_vh_binder_del_ref
__traceiter_android_vh_binder_free_proc
__traceiter_android_vh_binder_has_proc_work_ilocked
__traceiter_android_vh_binder_has_special_work_ilocked
__traceiter_android_vh_binder_ioctl_end
__traceiter_android_vh_binder_list_add_work
__traceiter_android_vh_binder_looper_exited
__traceiter_android_vh_binder_new_ref
__traceiter_android_vh_binder_preset
__traceiter_android_vh_binder_proc_transaction
__traceiter_android_vh_binder_proc_transaction_finish
__traceiter_android_vh_binder_release_special_work
__traceiter_android_vh_binder_reply
__traceiter_android_vh_binder_select_special_worklist
__traceiter_android_vh_binder_spawn_new_thread
__traceiter_android_vh_binder_special_task
__traceiter_android_vh_binder_trans
__traceiter_android_vh_binder_transaction_received
__traceiter_android_vh_binder_wait_for_work
__traceiter_android_vh_build_sched_domains
__traceiter_android_vh_cgroup_set_task
__traceiter_android_vh_check_folio_look_around_ref
__traceiter_android_vh_cleanup_old_buffers_bypass
__traceiter_android_vh_copy_process
__traceiter_android_vh_cpu_cgroup_css_alloc
__traceiter_android_vh_cpu_cgroup_css_alloc_early
__traceiter_android_vh_cpu_cgroup_css_free
__traceiter_android_vh_cpufreq_acct_update_power
__traceiter_android_vh_customize_alloc_gfp
__traceiter_android_vh_del_page_from_lrulist
__traceiter_android_vh_dm_bufio_shrink_scan_bypass
__traceiter_android_vh_do_futex
__traceiter_android_vh_do_send_sig_info
__traceiter_android_vh_do_shrink_slab
__traceiter_android_vh_do_traversal_lruvec
__traceiter_android_vh_drain_all_pages_bypass
__traceiter_android_vh_dup_task_struct
__traceiter_android_rvh_dequeue_entity
__traceiter_android_rvh_enqueue_entity
__traceiter_android_vh_exit_check
__traceiter_android_vh_exit_signal
__traceiter_android_vh_exit_signal_whether_wake
__traceiter_android_vh_free_oem_binder_struct
__traceiter_android_vh_free_unref_page_bypass
__traceiter_android_vh_freeze_whether_wake
__traceiter_android_vh_freq_qos_add_request
__traceiter_android_vh_freq_qos_remove_request
__traceiter_android_vh_freq_qos_update_request
__traceiter_android_vh_futex_sleep_start
__traceiter_android_vh_futex_wait_end
__traceiter_android_vh_futex_wait_start
__traceiter_android_vh_futex_wake_this
__traceiter_android_vh_futex_wake_traverse_plist
__traceiter_android_vh_futex_wake_up_q_finish
__traceiter_android_vh_fsnotify_open
__traceiter_android_vh_get_page_wmark
__traceiter_android_vh_irqtime_account_process_tick
__traceiter_android_vh_kmalloc_slab
__traceiter_android_vh_kvmalloc_node_use_vmalloc
__traceiter_android_vh_look_around
__traceiter_android_vh_look_around_migrate_folio
__traceiter_android_vh_map_util_freq
__traceiter_android_vh_mark_page_accessed
__traceiter_android_vh_mem_cgroup_alloc
__traceiter_android_vh_mem_cgroup_css_offline
__traceiter_android_vh_mem_cgroup_css_online
__traceiter_android_vh_mem_cgroup_free
__traceiter_android_vh_mem_cgroup_id_remove
__traceiter_android_vh_meminfo_cache_adjust
__traceiter_android_vh_mutex_can_spin_on_owner
__traceiter_android_vh_mutex_opt_spin_finish
__traceiter_android_vh_mutex_opt_spin_start
__traceiter_android_vh_mutex_unlock_slowpath
__traceiter_android_vh_page_add_new_anon_rmap
__traceiter_android_vh_page_referenced_check_bypass
__traceiter_android_vh_page_should_be_protected
__traceiter_android_vh_percpu_rwsem_wq_add
__traceiter_android_vh_ra_tuning_max_page
__traceiter_android_vh_record_mutex_lock_starttime
__traceiter_android_vh_record_pcpu_rwsem_starttime
__traceiter_android_vh_record_rtmutex_lock_starttime
__traceiter_android_vh_record_rwsem_lock_starttime
__traceiter_android_vh_reweight_entity
__traceiter_android_vh_read_lazy_flag
__traceiter_android_vh_rmqueue_bulk_bypass
__traceiter_android_vh_rt_mutex_steal
__traceiter_android_vh_rtmutex_waiter_prio
__traceiter_android_vh_rtmutex_wait_start
__traceiter_android_vh_rwsem_can_spin_on_owner
__traceiter_android_vh_rwsem_direct_rsteal
__traceiter_android_vh_rwsem_downgrade_wake_finish
__traceiter_android_vh_rwsem_optimistic_rspin
__traceiter_android_vh_rwsem_opt_spin_finish
__traceiter_android_vh_rwsem_opt_spin_start
__traceiter_android_vh_save_track_hash
__traceiter_android_vh_save_vmalloc_stack
__traceiter_android_vh_sched_move_task
__traceiter_android_rvh_sched_setaffinity
__traceiter_android_vh_sched_setaffinity_early
__traceiter_android_vh_sched_stat_runtime_rt
__traceiter_android_vh_should_alloc_pages_retry
__traceiter_android_vh_show_mapcount_pages
__traceiter_android_vh_show_stack_hash
__traceiter_android_vh_shrink_slab_bypass
__traceiter_android_vh_si_mem_available_adjust
__traceiter_android_vh_si_meminfo_adjust
__traceiter_android_vh_sync_txn_recvd
__traceiter_android_vh_task_blocks_on_rtmutex
__traceiter_android_vh_test_clear_look_around_ref
__traceiter_android_vh_tick_nohz_idle_stop_tick
__traceiter_android_vh_tune_mmap_readaround
__traceiter_android_vh_tune_scan_type
__traceiter_android_vh_tune_swappiness
__traceiter_android_vh_unreserve_highatomic_bypass
__traceiter_android_vh_update_page_mapcount
__traceiter_block_bio_queue
__traceiter_block_getrq
__traceiter_block_rq_complete
__traceiter_block_rq_issue
__traceiter_block_rq_merge
__traceiter_block_rq_requeue
__traceiter_mm_vmscan_kswapd_wake
__traceiter_net_dev_queue
__traceiter_net_dev_xmit
__traceiter_netif_receive_skb
__traceiter_netif_rx
__traceiter_sched_stat_blocked
__traceiter_sched_stat_iowait
__traceiter_sched_stat_runtime
__traceiter_sched_stat_sleep
__traceiter_sched_stat_wait
__traceiter_sched_waking
__traceiter_task_rename
__tracepoint_android_rvh_post_init_entity_util_avg
__tracepoint_android_rvh_rtmutex_force_update
__tracepoint_android_rvh_set_cpus_allowed_comm
__tracepoint_android_rvh_set_balance_anon_file_reclaim
__tracepoint_android_vh_account_process_tick_gran
__tracepoint_android_vh_add_page_to_lrulist
__tracepoint_android_vh_adjust_alloc_flags
__tracepoint_android_vh_alloc_oem_binder_struct
__tracepoint_android_vh_alloc_pages_failure_bypass
__tracepoint_android_vh_alloc_pages_reclaim_bypass
__tracepoint_android_rvh_alloc_workqueue
__tracepoint_android_vh_alter_mutex_list_add
__tracepoint_android_vh_binder_alloc_new_buf_locked
__tracepoint_android_vh_binder_buffer_release
__tracepoint_android_vh_binder_del_ref
__tracepoint_android_vh_binder_free_proc
__tracepoint_android_vh_binder_has_proc_work_ilocked
__tracepoint_android_vh_binder_has_special_work_ilocked
__tracepoint_android_vh_binder_ioctl_end
__tracepoint_android_vh_binder_list_add_work
__tracepoint_android_vh_binder_looper_exited
__tracepoint_android_vh_binder_new_ref
__tracepoint_android_vh_binder_preset
__tracepoint_android_vh_binder_proc_transaction
__tracepoint_android_vh_binder_proc_transaction_finish
__tracepoint_android_vh_binder_release_special_work
__tracepoint_android_vh_binder_reply
__tracepoint_android_vh_binder_select_special_worklist
__tracepoint_android_vh_binder_spawn_new_thread
__tracepoint_android_vh_binder_special_task
__tracepoint_android_vh_binder_trans
__tracepoint_android_vh_binder_transaction_received
__tracepoint_android_vh_binder_wait_for_work
__tracepoint_android_vh_build_sched_domains
__tracepoint_android_vh_cgroup_set_task
__tracepoint_android_vh_check_folio_look_around_ref
__tracepoint_android_vh_cleanup_old_buffers_bypass
__tracepoint_android_vh_copy_process
__tracepoint_android_vh_cpu_cgroup_css_alloc
__tracepoint_android_vh_cpu_cgroup_css_alloc_early
__tracepoint_android_vh_cpu_cgroup_css_free
__tracepoint_android_vh_cpufreq_acct_update_power
__tracepoint_android_vh_customize_alloc_gfp
__tracepoint_android_vh_del_page_from_lrulist
__tracepoint_android_vh_dm_bufio_shrink_scan_bypass
__tracepoint_android_vh_do_futex
__tracepoint_android_vh_do_send_sig_info
__tracepoint_android_vh_do_shrink_slab
__tracepoint_android_vh_do_traversal_lruvec
__tracepoint_android_vh_drain_all_pages_bypass
__tracepoint_android_vh_dup_task_struct
__tracepoint_android_rvh_dequeue_entity
__tracepoint_android_rvh_enqueue_entity
__tracepoint_android_vh_exit_check
__tracepoint_android_vh_exit_signal
__tracepoint_android_vh_exit_signal_whether_wake
__tracepoint_android_vh_free_oem_binder_struct
__tracepoint_android_vh_free_unref_page_bypass
__tracepoint_android_vh_freeze_whether_wake
__tracepoint_android_vh_freq_qos_add_request
__tracepoint_android_vh_freq_qos_remove_request
__tracepoint_android_vh_freq_qos_update_request
__tracepoint_android_vh_futex_sleep_start
__tracepoint_android_vh_futex_wait_end
__tracepoint_android_vh_futex_wait_start
__tracepoint_android_vh_futex_wake_this
__tracepoint_android_vh_futex_wake_traverse_plist
__tracepoint_android_vh_futex_wake_up_q_finish
__tracepoint_android_vh_fsnotify_open
__tracepoint_android_vh_get_page_wmark
__tracepoint_android_vh_irqtime_account_process_tick
__tracepoint_android_vh_kmalloc_slab
__tracepoint_android_vh_kvmalloc_node_use_vmalloc
__tracepoint_android_vh_look_around
__tracepoint_android_vh_look_around_migrate_folio
__tracepoint_android_vh_map_util_freq
__tracepoint_android_vh_mark_page_accessed
__tracepoint_android_vh_mem_cgroup_alloc
__tracepoint_android_vh_mem_cgroup_css_offline
__tracepoint_android_vh_mem_cgroup_css_online
__tracepoint_android_vh_mem_cgroup_free
__tracepoint_android_vh_mem_cgroup_id_remove
__tracepoint_android_vh_meminfo_cache_adjust
__tracepoint_android_vh_mutex_can_spin_on_owner
__tracepoint_android_vh_mutex_opt_spin_finish
__tracepoint_android_vh_mutex_opt_spin_start
__tracepoint_android_vh_mutex_unlock_slowpath
__tracepoint_android_vh_page_add_new_anon_rmap
__tracepoint_android_vh_page_referenced_check_bypass
__tracepoint_android_vh_page_should_be_protected
__tracepoint_android_vh_percpu_rwsem_wq_add
__tracepoint_android_vh_ra_tuning_max_page
__tracepoint_android_vh_record_mutex_lock_starttime
__tracepoint_android_vh_record_pcpu_rwsem_starttime
__tracepoint_android_vh_record_rtmutex_lock_starttime
__tracepoint_android_vh_record_rwsem_lock_starttime
__tracepoint_android_vh_reweight_entity
__tracepoint_android_vh_rmqueue_bulk_bypass
__tracepoint_android_vh_rt_mutex_steal
__tracepoint_android_vh_rtmutex_waiter_prio
__tracepoint_android_vh_rtmutex_wait_start
__tracepoint_android_vh_rwsem_can_spin_on_owner
__tracepoint_android_vh_rwsem_direct_rsteal
__tracepoint_android_vh_rwsem_downgrade_wake_finish
__tracepoint_android_vh_rwsem_optimistic_rspin
__tracepoint_android_vh_rwsem_opt_spin_finish
__tracepoint_android_vh_rwsem_opt_spin_start
__tracepoint_android_vh_read_lazy_flag
__tracepoint_android_vh_save_track_hash
__tracepoint_android_vh_save_vmalloc_stack
__tracepoint_android_vh_sched_move_task
__tracepoint_android_rvh_sched_setaffinity
__tracepoint_android_vh_set_tsk_need_resched_lazy
__tracepoint_android_vh_sched_setaffinity_early
__tracepoint_android_vh_sched_stat_runtime_rt
__tracepoint_android_vh_should_alloc_pages_retry
__tracepoint_android_vh_show_mapcount_pages
__tracepoint_android_vh_show_stack_hash
__tracepoint_android_vh_shrink_slab_bypass
__tracepoint_android_vh_si_mem_available_adjust
__tracepoint_android_vh_si_meminfo_adjust
__tracepoint_android_vh_sync_txn_recvd
__tracepoint_android_vh_task_blocks_on_rtmutex
__tracepoint_android_vh_test_clear_look_around_ref
__tracepoint_android_vh_tick_nohz_idle_stop_tick
__tracepoint_android_vh_tune_mmap_readaround
__tracepoint_android_vh_tune_scan_type
__tracepoint_android_vh_tune_swappiness
__tracepoint_android_vh_unreserve_highatomic_bypass
__tracepoint_android_vh_update_page_mapcount
__tracepoint_block_bio_queue
__tracepoint_block_getrq
__tracepoint_block_rq_complete
__tracepoint_block_rq_issue
__tracepoint_block_rq_merge
__tracepoint_block_rq_requeue
__tracepoint_mm_vmscan_kswapd_wake
__tracepoint_net_dev_queue
__tracepoint_net_dev_xmit
__tracepoint_netif_receive_skb
__tracepoint_netif_rx
__tracepoint_sched_stat_blocked
__tracepoint_sched_stat_iowait
__tracepoint_sched_stat_runtime
__tracepoint_sched_stat_sleep
__tracepoint_sched_stat_wait
__tracepoint_sched_waking
__tracepoint_task_rename
folio_total_mapcount
page_mapping
__trace_puts
truncate_inode_pages
try_to_del_timer_sync
try_to_free_mem_cgroup_pages
typec_mux_get_drvdata
__udp4_lib_lookup
__udp6_lib_lookup
udp_table
unlock_rename
unregister_memory_notifier
unregister_net_sysctl_table
unregister_sysctl_table
unregister_tcf_proto_ops
v4l2_i2c_subdev_init
vfs_create
vfs_getattr
vfs_getattr_nosec
vfs_iter_read
vfs_iter_write
vfs_llseek
vfs_mkdir
vfs_path_lookup
vfs_rename
vfs_rmdir
vfs_statfs
vfs_unlink
__vmalloc_array
wait_for_completion_io_timeout
wait_for_completion_killable_timeout
wakeup_source_remove
wake_up_state
wq_worker_comm
xt_register_match
xt_unregister_match
zero_pfn
crypto_register_scomp
crypto_unregister_scomp
zstd_get_params
zstd_compress_cctx
zstd_is_error
zstd_decompress_dctx
zstd_cctx_workspace_bound
zstd_init_cctx
zstd_dctx_workspace_bound
zstd_init_dctx

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,88 +0,0 @@
[abi_symbol_list]
arp_create
crc_ccitt_table
crypto_ahash_final
__dev_direct_xmit
dev_mc_add
dev_mc_del
dma_get_any_slave_channel
drm_client_buffer_vmap
drm_client_buffer_vunmap
drm_client_framebuffer_create
drm_client_framebuffer_delete
drm_client_release
drm_gem_dmabuf_export
drm_gem_fb_create_with_funcs
drm_helper_disable_unused_functions
drm_mode_create_tv_properties_legacy
drm_mode_legacy_fb_format
drm_property_create_object
drm_vblank_work_init
drm_vblank_work_schedule
drm_vblank_work_cancel_sync
drm_vblank_work_flush
hid_hw_request
iio_map_array_register
iio_map_array_unregister
init_on_alloc
ioport_resource
irq_setup_alt_chip
ir_raw_event_store
ir_raw_event_handle
kstrtos16
ktime_add_safe
lookup_user_key
of_clk_hw_register
of_get_display_timings
of_io_request_and_map
pci_request_regions
phy_loopback
phy_queue_state_machine
phy_speed_to_str
pm_clk_add_clk
__scm_destroy
scm_detach_fds
snd_dmaengine_pcm_close_release_chan
snd_dmaengine_pcm_get_chan
snd_dmaengine_pcm_open
snd_dmaengine_pcm_pointer
snd_dmaengine_pcm_trigger
snd_hwparams_to_dma_slave_config
snd_soc_dai_set_clkdiv
sock_kfree_s
sock_kmalloc
sock_kzfree_s
sock_wake_async
start_tty
stop_tty
clk_hw_register_clkdev
reset_control_status
rc_map_register
rc_map_unregister
rc_keydown
gpiochip_line_is_irq
drm_warn_on_modeset_not_all_locked
__media_entity_setup_link
media_entity_setup_link
spi_unregister_device
v4l2_ctrl_cluster
v4l2_g_ctrl
v4l2_i2c_new_subdev
vb2_dma_contig_set_max_seg_size
usb_serial_port_softint
usb_role_switch_get_role
ppp_channel_index
ppp_input
ppp_input_error
ppp_output_wakeup
ppp_register_channel
ppp_unit_number
ppp_unregister_channel
clk_unregister_fixed_factor
clk_unregister_fixed_rate
clk_unregister_gate
__traceiter_dwc3_readl
__traceiter_dwc3_writel
__tracepoint_dwc3_readl
__tracepoint_dwc3_writel
pinctrl_gpio_set_config

View File

@ -1,11 +0,0 @@
[abi_symbol_list]
__traceiter_android_vh_binder_looper_state_registered
__traceiter_android_vh_binder_thread_read
__traceiter_android_vh_binder_free_proc
__traceiter_android_vh_binder_thread_release
__traceiter_android_vh_binder_read_done
__tracepoint_android_vh_binder_looper_state_registered
__tracepoint_android_vh_binder_thread_read
__tracepoint_android_vh_binder_free_proc
__tracepoint_android_vh_binder_thread_release
__tracepoint_android_vh_binder_read_done

View File

@ -1,53 +0,0 @@
__bforget
__bh_read_batch
bit_waitqueue
block_is_partially_uptodate
__breadahead
capable_wrt_inode_uidgid
clear_page_dirty_for_io
d_add
d_add_ci
end_page_writeback
fault_in_safe_writeable
file_check_and_advance_wb_err
filemap_add_folio
filemap_check_errors
filemap_dirty_folio
filemap_fault
filemap_get_folios_tag
__folio_cancel_dirty
folio_zero_new_buffers
generic_error_remove_page
generic_file_direct_write
ilookup5
in_group_p
inode_maybe_inc_iversion
inode_query_iversion
inode_set_flags
__insert_inode_hash
invalidate_inode_pages2_range
io_schedule
iov_iter_alignment
iov_iter_single_seg_count
iunique
make_vfsgid
make_vfsuid
mark_buffer_async_write
mark_buffer_write_io_error
mnt_drop_write_file
mnt_want_write_file
mount_bdev
page_cache_next_miss
page_cache_prev_miss
redirty_page_for_writepage
__remove_inode_hash
sb_min_blocksize
security_inode_init_security
__set_page_dirty_nobuffers
set_page_writeback
__sync_dirty_buffer
tag_pages_for_writeback
timestamp_truncate
try_to_writeback_inodes_sb
wake_bit_function
wrap_directory_iterator

View File

@ -1,7 +0,0 @@
[abi_symbol_list]
# for type visibility
ANDROID_GKI_struct_dwc3
ANDROID_GKI_struct_kernel_all_info
ANDROID_GKI_node_stat_item
ANDROID_GKI_memcg_stat_item

View File

@ -1,801 +0,0 @@
[abi_symbol_list]
# commonly used symbols
alloc_chrdev_region
alt_cb_patch_nops
__arch_copy_from_user
__arch_copy_to_user
blk_crypto_reprogram_all_keys
capable
__check_object_size
class_create
class_destroy
cpu_busy_with_softirqs
_dev_err
device_create
device_destroy
device_initialize
devm_extcon_register_notifier_all
devm_hwspin_lock_request_specific
_dev_info
dev_pm_opp_calc_power
dev_pm_opp_of_register_em
dev_set_name
__dynamic_netdev_dbg
em_dev_update_chip_binning
em_dev_update_perf_domain
em_pd_get
em_update_performance_limits
finish_wait
fortify_panic
idr_alloc
idr_get_next
idr_remove
init_timer_key
init_wait_entry
__init_waitqueue_head
irq_to_desc
kernel_cpustat
kfree
__kmalloc
kmalloc_caches
kmalloc_trace
kstat
kstat_irqs_cpu
kstat_irqs_usr
ktime_get_boot_fast_ns
__list_add_valid_or_report
__list_del_entry_valid_or_report
match_int
match_token
match_strdup
memcpy
memset
module_layout
__mutex_init
mutex_lock
mutex_unlock
nr_cpu_ids
nr_ipi_get
nr_irqs
__per_cpu_offset
perf_aux_output_skip
prepare_to_wait_event
_printk
put_device
__put_task_struct
queue_work_on
_raw_spin_lock
_raw_spin_lock_irqsave
_raw_spin_unlock
_raw_spin_unlock_irqrestore
__rcu_read_lock
__rcu_read_unlock
schedule
si_swapinfo
snd_ctl_find_id
snd_info_get_line
snprintf
__stack_chk_fail
strcmp
synchronize_rcu
sysfs_emit
system_cpucaps
system_wq
__traceiter_android_rvh_account_irq
__traceiter_android_rvh_build_perf_domains
__traceiter_android_rvh_after_dequeue_task
__traceiter_android_rvh_after_enqueue_task
__traceiter_android_rvh_can_migrate_task
__traceiter_android_rvh_check_preempt_wakeup
__traceiter_android_rvh_cpu_cgroup_attach
__traceiter_android_rvh_cpu_cgroup_online
__traceiter_android_rvh_cpu_overutilized
__traceiter_android_rvh_dequeue_task
__traceiter_android_rvh_do_sched_yield
__traceiter_android_rvh_enqueue_task
__traceiter_android_rvh_find_busiest_group
__traceiter_android_rvh_find_busiest_queue
__traceiter_android_rvh_find_lowest_rq
__traceiter_android_rvh_find_new_ilb
__traceiter_android_rvh_get_nohz_timer_target
__traceiter_android_rvh_is_cpu_allowed
__traceiter_android_rvh_new_task_stats
__traceiter_android_rvh_replace_next_task_fair
__traceiter_android_rvh_rto_next_cpu
__traceiter_android_rvh_sched_cpu_dying
__traceiter_android_rvh_sched_cpu_starting
__traceiter_android_rvh_sched_fork
__traceiter_android_rvh_sched_fork_init
__traceiter_android_rvh_sched_newidle_balance
__traceiter_android_rvh_sched_nohz_balancer_kick
__traceiter_android_rvh_sched_rebalance_domains
__traceiter_android_rvh_schedule
__traceiter_android_rvh_select_fallback_rq
__traceiter_android_rvh_select_task_rq_fair
__traceiter_android_rvh_select_task_rq_rt
__traceiter_android_rvh_set_cpus_allowed_by_task
__traceiter_android_rvh_set_task_cpu
__traceiter_android_rvh_tick_entry
__traceiter_android_rvh_try_to_wake_up
__traceiter_android_rvh_update_deadline
__traceiter_android_rvh_update_misfit_status
__traceiter_android_rvh_wake_up_new_task
__traceiter_android_vh_alloc_pages_slowpath
__traceiter_android_vh_alter_mutex_list_add
__traceiter_android_vh_alter_rwsem_list_add
__traceiter_android_vh_binder_proc_transaction_finish
__traceiter_android_vh_binder_restore_priority
__traceiter_android_vh_check_uninterruptible_tasks
__traceiter_android_vh_check_uninterruptible_tasks_dn
__traceiter_android_vh_cpu_idle_enter
__traceiter_android_vh_cpu_idle_exit
__traceiter_android_vh_cpufreq_target
__traceiter_android_vh_dup_task_struct
__traceiter_android_vh_ftrace_dump_buffer
__traceiter_android_vh_ftrace_format_check
__traceiter_android_vh_ftrace_oops_enter
__traceiter_android_vh_ftrace_oops_exit
__traceiter_android_vh_ftrace_size_check
__traceiter_android_vh_ipi_stop
__traceiter_android_vh_mutex_unlock_slowpath
__traceiter_android_vh_mutex_wait_start
__traceiter_android_vh_rwsem_downgrade_wake_finish
__traceiter_android_vh_rwsem_read_wait_start
__traceiter_android_vh_rwsem_read_wait_finish
__traceiter_android_vh_rwsem_wake
__traceiter_android_vh_rwsem_wake_finish
__traceiter_android_vh_rwsem_write_wait_start
__traceiter_android_vh_rwsem_write_wait_finish
__traceiter_android_vh_sched_show_task
__traceiter_android_vh_scheduler_tick
__traceiter_android_vh_setscheduler_uclamp
__traceiter_android_vh_sync_txn_recvd
__traceiter_android_vh_update_topology_flags_workfn
__traceiter_clock_set_rate
__traceiter_cpu_frequency_limits
__traceiter_sched_switch
__tracepoint_android_rvh_account_irq
__tracepoint_android_rvh_build_perf_domains
__tracepoint_android_rvh_after_dequeue_task
__tracepoint_android_rvh_after_enqueue_task
__tracepoint_android_rvh_can_migrate_task
__tracepoint_android_rvh_check_preempt_wakeup
__tracepoint_android_rvh_cpu_cgroup_attach
__tracepoint_android_rvh_cpu_cgroup_online
__tracepoint_android_rvh_cpu_overutilized
__tracepoint_android_rvh_dequeue_task
__tracepoint_android_rvh_do_sched_yield
__tracepoint_android_rvh_enqueue_task
__tracepoint_android_rvh_find_busiest_group
__tracepoint_android_rvh_find_busiest_queue
__tracepoint_android_rvh_find_lowest_rq
__tracepoint_android_rvh_find_new_ilb
__tracepoint_android_rvh_get_nohz_timer_target
__tracepoint_android_rvh_is_cpu_allowed
__tracepoint_android_rvh_new_task_stats
__tracepoint_android_rvh_replace_next_task_fair
__tracepoint_android_rvh_rto_next_cpu
__tracepoint_android_rvh_sched_cpu_dying
__tracepoint_android_rvh_sched_cpu_starting
__tracepoint_android_rvh_sched_fork
__tracepoint_android_rvh_sched_fork_init
__tracepoint_android_rvh_sched_newidle_balance
__tracepoint_android_rvh_sched_nohz_balancer_kick
__tracepoint_android_rvh_sched_rebalance_domains
__tracepoint_android_rvh_schedule
__tracepoint_android_rvh_select_fallback_rq
__tracepoint_android_rvh_select_task_rq_fair
__tracepoint_android_rvh_select_task_rq_rt
__tracepoint_android_rvh_set_cpus_allowed_by_task
__tracepoint_android_rvh_set_task_cpu
__tracepoint_android_rvh_tick_entry
__tracepoint_android_rvh_try_to_wake_up
__tracepoint_android_rvh_update_deadline
__tracepoint_android_rvh_update_misfit_status
__tracepoint_android_rvh_wake_up_new_task
__tracepoint_android_vh_alloc_pages_slowpath
__tracepoint_android_vh_alter_mutex_list_add
__tracepoint_android_vh_alter_rwsem_list_add
__tracepoint_android_vh_binder_proc_transaction_finish
__tracepoint_android_vh_binder_restore_priority
__tracepoint_android_vh_check_uninterruptible_tasks
__tracepoint_android_vh_check_uninterruptible_tasks_dn
__tracepoint_android_vh_cpu_idle_enter
__tracepoint_android_vh_cpu_idle_exit
__tracepoint_android_vh_cpufreq_target
__tracepoint_android_vh_dup_task_struct
__tracepoint_android_vh_ftrace_dump_buffer
__tracepoint_android_vh_ftrace_format_check
__tracepoint_android_vh_ftrace_oops_enter
__tracepoint_android_vh_ftrace_oops_exit
__tracepoint_android_vh_ftrace_size_check
__tracepoint_android_vh_ipi_stop
__tracepoint_android_vh_mutex_unlock_slowpath
__tracepoint_android_vh_mutex_wait_start
__tracepoint_android_vh_rwsem_downgrade_wake_finish
__tracepoint_android_vh_rwsem_read_wait_start
__tracepoint_android_vh_rwsem_read_wait_finish
__tracepoint_android_vh_rwsem_wake
__tracepoint_android_vh_rwsem_wake_finish
__tracepoint_android_vh_rwsem_write_wait_start
__tracepoint_android_vh_rwsem_write_wait_finish
__tracepoint_android_vh_sched_show_task
__tracepoint_android_vh_scheduler_tick
__tracepoint_android_vh_setscheduler_uclamp
__tracepoint_android_vh_sync_txn_recvd
__tracepoint_android_vh_update_topology_flags_workfn
__tracepoint_clock_set_rate
__tracepoint_cpu_frequency_limits
tracepoint_probe_register
tracepoint_probe_unregister
__tracepoint_sched_switch
unregister_chrdev_region
usb_phy_get_charger_current
vmalloc_nr_pages
vsscanf
__wake_up
__warn_printk
# required by 9pnet.ko
recalc_sigpending
sock_alloc_file
# required by apsys-dvfs.ko
devfreq_update_status
# required by audio-card.ko
devm_snd_soc_register_card
snd_info_free_entry
snd_info_register
snd_interval_refine
snd_soc_daifmt_parse_clock_provider_raw
snd_soc_daifmt_parse_format
snd_soc_dapm_disable_pin
snd_soc_dapm_enable_pin
snd_soc_dapm_sync
snd_soc_of_get_dai_name
snd_soc_of_parse_audio_routing
snd_soc_of_parse_audio_simple_widgets
snd_soc_of_parse_card_name
snd_soc_of_parse_tdm_slot
snd_soc_pm_ops
# required by audio-codec.ko
dapm_regulator_event
desc_to_gpio
iio_channel_get
iio_read_channel_raw
regulator_get_mode
regulator_register
regulator_set_mode
regulator_unregister
snd_jack_set_key
snd_soc_card_jack_new
snd_soc_component_read
snd_soc_component_update_bits
snd_soc_dapm_get_enum_double
snd_soc_dapm_get_volsw
snd_soc_dapm_put_enum_double
snd_soc_dapm_put_volsw
snd_soc_jack_report
# required by audio-dai.ko
snd_soc_dapm_add_routes
snd_soc_new_compress
# required by audio-platform.ko
snd_pcm_hw_constraint_integer
snd_pcm_hw_constraint_step
snd_pcm_period_elapsed
snd_pcm_rate_bit_to_rate
snd_soc_dapm_mixer_update_power
snd_soc_rtdcom_lookup
snd_soc_set_runtime_hwparams
# required by audio-misc.ko
__kfifo_from_user_r
__kfifo_init
__kfifo_to_user_r
pm_runtime_barrier
pm_runtime_irq_safe
snd_ctl_add
snd_ctl_new1
snd_hwdep_new
snd_pcm_format_name
snd_soc_add_card_controls
snd_soc_bytes_info_ext
snd_usb_autoresume
snd_usb_autosuspend
snd_usb_endpoint_prepare
snd_usb_hw_free
snd_usb_hw_params
snd_usb_lock_shutdown
snd_usb_register_platform_ops
snd_usb_unlock_shutdown
snd_usb_unregister_platform_ops
# required by gzvm.ko
__traceiter_android_vh_gzvm_vcpu_exit_reason
__tracepoint_android_vh_gzvm_vcpu_exit_reason
# required by hci_uart.ko
_trace_android_vh_record_pcpu_rwsem_starttime
# required by ims_bridge.ko
icmp6_send
inet_select_addr
ip6_find_1stfragopt
ip6_route_output_flags
ipv6_dev_get_saddr
ipv6_select_ident
nf_ct_get_tuplepr
nf_ct_invert_tuple
xfrm_state_afinfo_get_rcu
# required by iolimit.ko
blkcg_policy_register
__traceiter_android_rvh_ctl_dirty_rate
__tracepoint_android_rvh_ctl_dirty_rate
# required by kprobe_dmverity_debug.ko
dm_bio_from_per_bio_data
dm_bufio_read
dm_disk
dm_table_get_md
# required by ledtrig-pattern.ko
led_get_default_pattern
led_set_brightness
# required by mmc_swcq.ko
__blk_mq_end_request
blk_mq_run_hw_queues
blk_queue_flag_clear
blk_update_request
mmc_cqe_post_req
# required by mmdvfs.ko
devfreq_event_get_event
# required by pinctrl-sprd.ko
pinctrl_register
pinctrl_unregister
pinctrl_utils_add_map_mux
# required by ppp_generic.ko
add_wait_queue
alloc_netdev_mqs
__alloc_percpu
__alloc_skb
consume_skb
__cpu_possible_mask
default_wake_function
down_read
down_write
fget
fput
free_netdev
free_percpu
idr_destroy
idr_find
__init_rwsem
iov_iter_init
jiffies
kfree_skb_reason
__local_bh_enable_ip
module_put
mutex_trylock
__netdev_alloc_skb
netdev_err
netdev_name_in_use
netdev_printk
netif_rx
netif_tx_wake_queue
net_ratelimit
noop_llseek
ns_capable
pskb_expand_head
__pskb_pull_tail
__put_net
_raw_read_lock_bh
_raw_read_unlock_bh
_raw_spin_lock_bh
_raw_spin_unlock_bh
_raw_write_lock_bh
_raw_write_unlock_bh
refcount_warn_saturate
__register_chrdev
register_netdevice
register_pernet_device
remove_wait_queue
__request_module
rtnl_link_register
rtnl_link_unregister
rtnl_lock
rtnl_unlock
skb_copy_bits
skb_copy_datagram_iter
skb_dequeue
skb_pull
skb_pull_rcsum
skb_push
skb_put
skb_queue_head
skb_queue_purge_reason
skb_queue_tail
skb_scrub_packet
skb_trim
try_module_get
__unregister_chrdev
unregister_netdevice_many
unregister_netdevice_queue
unregister_pernet_device
up_read
up_write
# required by pps_core.ko
cdev_add
cdev_del
cdev_init
fasync_helper
kill_fasync
kobject_get
kobject_put
_raw_spin_lock_irq
_raw_spin_unlock_irq
schedule_timeout
sprintf
# required by ptp.ko
device_for_each_child
device_for_each_child_reverse
ida_alloc_range
ida_destroy
ida_free
kstrtouint
kthread_cancel_delayed_work_sync
kthread_create_worker
kthread_delayed_work_timer_fn
kthread_destroy_worker
kthread_mod_delayed_work
kthread_queue_delayed_work
ktime_get_real_ts64
ktime_get_snapshot
memdup_user
mutex_lock_interruptible
ns_to_timespec64
posix_clock_register
posix_clock_unregister
sscanf
timecounter_cyc2time
timecounter_init
timecounter_read
# required by regmap-hook.ko
__traceiter_android_vh_regmap_update
__tracepoint_android_vh_regmap_update
# required by rfkill.ko
add_uevent_var
cancel_delayed_work_sync
cancel_work_sync
class_register
class_unregister
compat_ptr_ioctl
delayed_work_timer_fn
device_add
device_del
kobject_uevent
kstrtoull
led_trigger_event
led_trigger_register
led_trigger_unregister
misc_deregister
misc_register
param_ops_uint
queue_delayed_work_on
round_jiffies_relative
stream_open
strlen
system_power_efficient_wq
# required by sc2731_charger.ko
power_supply_get_battery_info
power_supply_put_battery_info
# required by sc8546-charger.ko
__regmap_init_i2c
# required by sdhci-sprd.ko
mmc_regulator_disable_vqmmc
mmc_regulator_enable_vqmmc
mmc_send_status
sdhci_enable_v4_mode
__sdhci_read_caps
sdhci_request
sdhci_request_atomic
# required by sensorhub.ko
iio_pollfunc_store_time
# required by sfp_core.ko
inet_proto_csum_replace4
nf_conntrack_find_get
nf_ct_destroy
pskb_trim_rcsum_slow
rt6_lookup
# required by sipa-core.ko
alarm_forward
# required by slhc.ko
bcmp
memmove
# required by sprdbt_tty.ko
tty_port_link_device
# required by sprd_camera.ko
of_irq_to_resource
# required by sprd-charger-manager.ko
alarm_expires_remaining
# required by sprd-dma.ko
of_dma_simple_xlate
# required by sprd-drm.ko
drm_ioctl_kernel
drm_send_event_timestamp_locked
mipi_dsi_set_maximum_return_packet_size
of_get_drm_display_mode
regmap_get_reg_stride
# required by sprd_noc_trace.ko
sysfs_unmerge_group
# required by sprd_pmic_adc.ko
nvmem_cell_read_u16
# required by sprd_soc_thm.ko
thermal_zone_bind_cooling_device
thermal_zone_unbind_cooling_device
# required by sprd_tcpm.ko
typec_altmode_attention
typec_altmode_notify
typec_altmode_update_active
typec_altmode_vdm
typec_find_port_data_role
typec_find_port_power_role
typec_find_power_role
typec_match_altmode
typec_partner_register_altmode
typec_port_register_altmode
typec_set_mode
typec_unregister_altmode
usb_role_switch_put
# required by sprd_time_sync_cp.ko
pvclock_gtod_register_notifier
pvclock_gtod_unregister_notifier
# required by sprd_usb_f_rndis.ko
gether_cleanup
gether_connect
gether_disconnect
gether_get_dev_addr
gether_get_host_addr
gether_get_host_addr_u8
gether_get_ifname
gether_get_qmult
gether_register_netdev
gether_set_dev_addr
gether_set_gadget
gether_set_host_addr
gether_set_ifname
gether_set_qmult
gether_setup_name_default
# required by sprd-vibra.ko
input_ff_create_memless
# required by sysdump.ko
node_states
# required by torture.ko
cpu_is_hotpluggable
ftrace_dump
rcu_cpu_stall_suppress
rcu_inkernel_boot_has_ended
# required by ufs_sprd.ko
__scsi_add_device
scsi_test_unit_ready
ufshcd_query_attr
# required by unisoc_last_kmsg.ko
blockdev_superblock
pcpu_nr_pages
vm_memory_committed
# required by unisoc_mm_emem.ko
get_slabinfo
__traceiter_android_vh_kmalloc_large_alloced
__traceiter_android_vh_slab_folio_alloced
__tracepoint_android_vh_kmalloc_large_alloced
__tracepoint_android_vh_slab_folio_alloced
# required by unisoc_multi_control.ko
refresh_frequency_limits
# required by unisoc_pnp.ko
__traceiter_cpu_idle
__tracepoint_cpu_idle
# required by unisoc-sched.ko
tick_nohz_get_idle_calls_cpu
__traceiter_android_rvh_effective_cpu_util
__tracepoint_android_rvh_effective_cpu_util
# required by zram.ko
bio_add_page
bio_alloc_bioset
bio_chain
bio_init
bio_put
blkdev_get_by_dev
blkdev_put
file_path
filp_close
filp_open_block
fs_bio_set
kvfree
kvmalloc_node
rb_prev
submit_bio
submit_bio_wait
# required by zsmalloc.ko
__alloc_pages
__ClearPageMovable
__cpuhp_remove_state
__cpuhp_setup_state
dec_zone_page_state
flush_work
__folio_put
folio_wait_bit
__free_pages
inc_zone_page_state
kasan_flag_enabled
kmem_cache_alloc
kmem_cache_create
kmem_cache_destroy
kmem_cache_free
kstrdup
memstart_addr
preempt_schedule
_raw_read_lock
_raw_read_unlock
_raw_write_lock
_raw_write_unlock
register_shrinker
__SetPageMovable
unlock_page
unregister_shrinker
# preserved by --additions-only
__traceiter_android_rvh_psci_cpu_suspend
__traceiter_android_rvh_psci_tos_resident_on
__tracepoint_android_rvh_psci_cpu_suspend
__tracepoint_android_rvh_psci_tos_resident_on
# required by iowait.ko
__traceiter_sched_stat_iowait
__tracepoint_sched_stat_iowait
# required inode_info.ko
__traceiter_mm_filemap_delete_from_page_cache
__traceiter_mm_filemap_add_to_page_cache
__tracepoint_mm_filemap_delete_from_page_cache
__tracepoint_mm_filemap_add_to_page_cache
# required printk_cpuid.ko
__traceiter_android_vh_printk_ext_header
__tracepoint_android_vh_printk_ext_header
# required by mali_gondul.ko
anon_inode_getfd
__arch_clear_user
cache_line_size
clear_page
__clk_is_enabled
clk_put
devfreq_recommended_opp
devfreq_register_opp_notifier
devfreq_resume_device
devfreq_suspend_device
devfreq_unregister_opp_notifier
dev_pm_opp_clear_config
dev_pm_opp_disable
dev_pm_opp_find_freq_exact
dev_pm_opp_find_freq_floor
dev_pm_opp_of_add_table
dev_pm_opp_set_config
dma_buf_attach
dma_buf_detach
dma_buf_get
dma_buf_map_attachment
dma_buf_mmap
dma_buf_put
dma_buf_unmap_attachment
dma_fence_add_callback
dma_fence_context_alloc
dma_fence_default_wait
dma_fence_get_status
dma_fence_init
dma_fence_release
dma_fence_remove_callback
dma_fence_signal
downgrade_write
down_trylock
fd_install
find_vma_intersection
__folio_lock
get_unused_fd_flags
get_user_pages
iomem_resource
kstrtouint_from_user
ktime_get_raw
ktime_get_raw_ts64
mas_empty_area_rev
__mmdrop
msleep_interruptible
of_clk_get
of_clk_get_parent_count
of_devfreq_cooling_register_power
of_dma_is_coherent
of_property_read_variable_u64_array
of_property_read_variable_u8_array
param_array_ops
param_get_int
param_ops_byte
percpu_counter_add_batch
percpu_counter_batch
pin_user_pages
pin_user_pages_remote
_raw_spin_trylock
rb_prev
rb_replace_node
regulator_get_optional
regulator_put
__release_region
remap_vmalloc_range
__request_region
seq_open
seq_release
seq_write
set_page_dirty_lock
static_key_slow_dec
static_key_slow_inc
strcspn
__sw_hweight64
sync_file_create
sync_file_get_fence
synchronize_irq
sysfs_remove_file_ns
timer_delete
timer_delete_sync
__traceiter_gpu_mem_total
__tracepoint_gpu_mem_total
trace_print_flags_seq
unmap_mapping_range
unpin_user_page
vmalloc_user
vmf_insert_pfn_prot
# required by mali_kbase.ko
devfreq_cooling_em_register
dev_pm_qos_read_value
regcache_cache_only
vm_unmapped_area

File diff suppressed because it is too large Load Diff

View File

@ -1,342 +0,0 @@
[abi_symbol_list]
alloc_workqueue_attrs
apply_workqueue_attrs
blk_bio_list_merge
blkcg_policy_register
blkcg_policy_unregister
blkdev_get_by_dev
blkdev_put
blk_mq_debugfs_rq_show
blk_mq_run_hw_queue
blk_queue_flag_clear
blk_stat_disable_accounting
blk_stat_enable_accounting
__brelse
class_find_device
cpufreq_unregister_notifier
crypto_register_alg
crypto_unregister_alg
debugfs_print_regs32
elevator_alloc
elv_register
elv_unregister
end_buffer_read_sync
end_buffer_write_sync
filp_close
free_workqueue_attrs
__getblk_gfp
get_dup_sched_clock
gnet_stats_add_queue
gnet_stats_copy_basic
gnet_stats_copy_queue
__irq_regs
kblockd_mod_delayed_work_on
kernfs_path_from_node
__kmalloc_node
__lock_buffer
mipi_dsi_dcs_write
__neigh_create
netdev_is_rx_handler_busy
noop_qdisc
of_css
pfifo_qdisc_ops
pfn_to_online_page
proc_mkdir_mode
profile_event_register
profile_event_unregister
put_device
__qdisc_calculate_pkt_len
qdisc_create_dflt
qdisc_hash_add
qdisc_offload_dump_helper
qdisc_offload_graft_helper
qdisc_put
qdisc_reset
qdisc_tree_reduce_backlog
regulator_get_drvdata
sbitmap_add_wait_queue
sbitmap_any_bit_set
sbitmap_del_wait_queue
sbitmap_init_node
sbitmap_queue_clear
__sbitmap_queue_get
sbitmap_queue_init_node
sbitmap_queue_min_shallow_depth
sbitmap_queue_resize
sbitmap_queue_show
sched_setattr_nocheck
schedule_timeout_killable
seq_file_path
seq_list_next
seq_list_start
seq_put_decimal_ll
seq_put_decimal_ull
seq_read_iter
set_blocksize
set_task_ioprio
__set_task_comm
set_task_ioprio
skb_orphan_partial
static_key_enable
submit_bh
tcf_block_get
tcf_block_put
tcf_classify
timer_reduce
__traceiter_android_rvh_alloc_and_link_pwqs
__traceiter_android_rvh_bpf_skb_load_bytes
__traceiter_android_rvh_check_preempt_wakeup
__traceiter_android_rvh_cpufreq_transition
__traceiter_android_rvh_create_worker
__traceiter_android_rvh_dequeue_task_fair
__traceiter_android_rvh_enqueue_task_fair
__traceiter_android_rvh_inet_sock_create
__traceiter_android_rvh_inet_sock_release
__traceiter_android_rvh_percpu_rwsem_wait_complete
__traceiter_android_rvh_pr_set_vma_name_bypass
__traceiter_android_rvh_replace_next_task_fair
__traceiter_android_rvh_set_user_nice
__traceiter_android_rvh_tcp_rcv_spurious_retrans
__traceiter_android_rvh_tcp_recvmsg
__traceiter_android_rvh_tcp_select_window
__traceiter_android_rvh_tcp_sendmsg
__traceiter_android_rvh_try_to_wake_up
__traceiter_android_rvh_udp_recvmsg
__traceiter_android_rvh_udp_sendmsg
__traceiter_android_rvh_udpv6_recvmsg
__traceiter_android_rvh_udpv6_sendmsg
__traceiter_android_vh_account_process_tick_gran
__traceiter_android_vh_adjust_kvmalloc_flags
__traceiter_android_vh_alloc_pages_adjust_wmark
__traceiter_android_vh_alloc_pages_failure_bypass
__traceiter_android_vh_alloc_pages_reclaim_bypass
__traceiter_android_vh_alloc_pages_reset_wmark
__traceiter_android_vh_alter_mutex_list_add
__traceiter_android_vh_alter_rwsem_list_add
__traceiter_android_vh_bd_link_disk_holder
__traceiter_android_vh_binder_preset
__traceiter_android_vh_binder_restore_priority
__traceiter_android_vh_binder_special_task
__traceiter_android_vh_binder_wait_for_work
__traceiter_android_vh_blk_fill_rwbs
__traceiter_android_vh_blk_mq_delay_run_hw_queue
__traceiter_android_vh_blk_mq_kick_requeue_list
__traceiter_android_vh_build_skb_around
__traceiter_android_vh_cgroup_attach
__traceiter_android_vh_check_folio_look_around_ref
__traceiter_android_vh_check_nanosleep_syscall
__traceiter_android_vh_clear_rwsem_reader_owned
__traceiter_android_vh_clear_rwsem_writer_owned
__traceiter_android_vh_configfs_uevent_work
__traceiter_android_vh_count_workingset_refault
__traceiter_android_vh_do_anonymous_page
__traceiter_android_vh_do_group_exit
__traceiter_android_vh_do_new_mount_fc
__traceiter_android_vh_do_swap_page
__traceiter_android_vh_do_wp_page
__traceiter_android_vh_dup_task_struct
__traceiter_android_vh_f2fs_file_open
__traceiter_android_vh_f2fs_ra_op_flags
__traceiter_android_vh_filemap_update_page
__traceiter_android_vh_free_task
__traceiter_android_vh_free_unref_page_bypass
__traceiter_android_vh_fuse_request_end
__traceiter_android_vh_init_adjust_zone_wmark
__traceiter_android_vh_inode_lru_isolate
__traceiter_android_vh_invalidate_mapping_pagevec
__traceiter_android_vh_irqtime_account_process_tick
__traceiter_android_vh_kvmalloc_node_use_vmalloc
__traceiter_android_vh_lock_folio_drop_mmap_end
__traceiter_android_vh_lock_folio_drop_mmap_start
__traceiter_android_vh_look_around
__traceiter_android_vh_look_around_migrate_folio
__traceiter_android_vh_mmap_region
__traceiter_android_vh_mutex_init
__traceiter_android_vh_mutex_unlock_slowpath
__traceiter_android_vh_mutex_unlock_slowpath_before_wakeq
__traceiter_android_vh_mutex_wait_finish
__traceiter_android_vh_mutex_wait_start
__traceiter_android_vh_oom_swapmem_gather_finish
__traceiter_android_vh_oom_swapmem_gather_init
__traceiter_android_vh_percpu_rwsem_down_read
__traceiter_android_vh_percpu_rwsem_up_write
__traceiter_android_vh_percpu_rwsem_wq_add
__traceiter_android_vh_queue_request_and_unlock
__traceiter_android_vh_ra_tuning_max_page
__traceiter_android_vh_record_rwsem_reader_owned
__traceiter_android_vh_record_rwsem_writer_owned
__traceiter_android_vh_rmqueue_bulk_bypass
__traceiter_android_vh_rwsem_init
__traceiter_android_vh_rwsem_read_trylock_failed
__traceiter_android_vh_rwsem_read_wait_finish
__traceiter_android_vh_rwsem_read_wait_start
__traceiter_android_vh_rwsem_wake
__traceiter_android_vh_rwsem_wake_finish
__traceiter_android_vh_rwsem_write_wait_finish
__traceiter_android_vh_rwsem_write_wait_start
__traceiter_android_vh_scheduler_tick
__traceiter_android_vh_sd_init_unmap_multi_segment
__traceiter_android_vh_sd_setup_unmap_multi_segment
__traceiter_android_vh_shmem_swapin_folio
__traceiter_android_vh_should_alloc_pages_retry
__traceiter_android_vh_shrink_folio_list
__traceiter_android_vh_shrink_node_memcgs
__traceiter_android_vh_sk_alloc
__traceiter_android_vh_sk_free
__traceiter_android_vh_swapmem_gather_add_bypass
__traceiter_android_vh_swapmem_gather_finish
__traceiter_android_vh_swapmem_gather_init
__traceiter_android_vh_swap_writepage
__traceiter_android_vh_sync_txn_recvd
__traceiter_android_vh_tcp_rtt_estimator
__traceiter_android_vh_test_clear_look_around_ref
__traceiter_android_vh_throttle_direct_reclaim_bypass
__traceiter_android_vh_try_to_unmap_one
__traceiter_android_vh_tune_mmap_readaround
__traceiter_android_vh_udp_enqueue_schedule_skb
__traceiter_android_vh_unreserve_highatomic_bypass
__traceiter_android_vh_uprobes_replace_page
__traceiter_block_rq_complete
__traceiter_block_rq_insert
__traceiter_block_rq_issue
__traceiter_block_rq_requeue
__traceiter_cpu_frequency_limits
__traceiter_sched_stat_runtime
__traceiter_sched_switch
__traceiter_sched_waking
__traceiter_sys_exit
__traceiter_task_rename
__traceiter_tcp_retransmit_skb
__traceiter_workqueue_execute_end
__traceiter_workqueue_execute_start
__tracepoint_android_rvh_alloc_and_link_pwqs
__tracepoint_android_rvh_bpf_skb_load_bytes
__tracepoint_android_rvh_check_preempt_wakeup
__tracepoint_android_rvh_cpufreq_transition
__tracepoint_android_rvh_create_worker
__tracepoint_android_rvh_dequeue_task_fair
__tracepoint_android_rvh_enqueue_task_fair
__tracepoint_android_rvh_inet_sock_create
__tracepoint_android_rvh_inet_sock_release
__tracepoint_android_rvh_percpu_rwsem_wait_complete
__tracepoint_android_rvh_pr_set_vma_name_bypass
__tracepoint_android_rvh_replace_next_task_fair
__tracepoint_android_rvh_set_user_nice
__tracepoint_android_rvh_tcp_rcv_spurious_retrans
__tracepoint_android_rvh_tcp_recvmsg
__tracepoint_android_rvh_tcp_select_window
__tracepoint_android_rvh_tcp_sendmsg
__tracepoint_android_rvh_try_to_wake_up
__tracepoint_android_rvh_udp_recvmsg
__tracepoint_android_rvh_udp_sendmsg
__tracepoint_android_rvh_udpv6_recvmsg
__tracepoint_android_rvh_udpv6_sendmsg
__tracepoint_android_vh_account_process_tick_gran
__tracepoint_android_vh_adjust_kvmalloc_flags
__tracepoint_android_vh_alloc_pages_adjust_wmark
__tracepoint_android_vh_alloc_pages_failure_bypass
__tracepoint_android_vh_alloc_pages_reclaim_bypass
__tracepoint_android_vh_alloc_pages_reset_wmark
__tracepoint_android_vh_alter_mutex_list_add
__tracepoint_android_vh_alter_rwsem_list_add
__tracepoint_android_vh_bd_link_disk_holder
__tracepoint_android_vh_binder_preset
__tracepoint_android_vh_binder_restore_priority
__tracepoint_android_vh_binder_special_task
__tracepoint_android_vh_binder_wait_for_work
__tracepoint_android_vh_blk_fill_rwbs
__tracepoint_android_vh_blk_mq_delay_run_hw_queue
__tracepoint_android_vh_blk_mq_kick_requeue_list
__tracepoint_android_vh_build_skb_around
__tracepoint_android_vh_cgroup_attach
__tracepoint_android_vh_check_folio_look_around_ref
__tracepoint_android_vh_check_nanosleep_syscall
__tracepoint_android_vh_clear_rwsem_reader_owned
__tracepoint_android_vh_clear_rwsem_writer_owned
__tracepoint_android_vh_configfs_uevent_work
__tracepoint_android_vh_count_workingset_refault
__tracepoint_android_vh_do_anonymous_page
__tracepoint_android_vh_do_group_exit
__tracepoint_android_vh_do_new_mount_fc
__tracepoint_android_vh_do_swap_page
__tracepoint_android_vh_do_wp_page
__tracepoint_android_vh_dup_task_struct
__tracepoint_android_vh_f2fs_file_open
__tracepoint_android_vh_f2fs_ra_op_flags
__tracepoint_android_vh_filemap_update_page
__tracepoint_android_vh_free_task
__tracepoint_android_vh_free_unref_page_bypass
__tracepoint_android_vh_fuse_request_end
__tracepoint_android_vh_init_adjust_zone_wmark
__tracepoint_android_vh_inode_lru_isolate
__tracepoint_android_vh_invalidate_mapping_pagevec
__tracepoint_android_vh_irqtime_account_process_tick
__tracepoint_android_vh_kvmalloc_node_use_vmalloc
__tracepoint_android_vh_lock_folio_drop_mmap_end
__tracepoint_android_vh_lock_folio_drop_mmap_start
__tracepoint_android_vh_look_around
__tracepoint_android_vh_look_around_migrate_folio
__tracepoint_android_vh_mmap_region
__tracepoint_android_vh_mutex_init
__tracepoint_android_vh_mutex_unlock_slowpath
__tracepoint_android_vh_mutex_unlock_slowpath_before_wakeq
__tracepoint_android_vh_mutex_wait_finish
__tracepoint_android_vh_mutex_wait_start
__tracepoint_android_vh_oom_swapmem_gather_finish
__tracepoint_android_vh_oom_swapmem_gather_init
__tracepoint_android_vh_percpu_rwsem_down_read
__tracepoint_android_vh_percpu_rwsem_up_write
__tracepoint_android_vh_percpu_rwsem_wq_add
__tracepoint_android_vh_queue_request_and_unlock
__tracepoint_android_vh_ra_tuning_max_page
__tracepoint_android_vh_record_rwsem_reader_owned
__tracepoint_android_vh_record_rwsem_writer_owned
__tracepoint_android_vh_rmqueue_bulk_bypass
__tracepoint_android_vh_rwsem_init
__tracepoint_android_vh_rwsem_read_trylock_failed
__tracepoint_android_vh_rwsem_read_wait_finish
__tracepoint_android_vh_rwsem_read_wait_start
__tracepoint_android_vh_rwsem_wake
__tracepoint_android_vh_rwsem_wake_finish
__tracepoint_android_vh_rwsem_write_wait_finish
__tracepoint_android_vh_rwsem_write_wait_start
__tracepoint_android_vh_scheduler_tick
__tracepoint_android_vh_sd_init_unmap_multi_segment
__tracepoint_android_vh_sd_setup_unmap_multi_segment
__tracepoint_android_vh_shmem_swapin_folio
__tracepoint_android_vh_should_alloc_pages_retry
__tracepoint_android_vh_shrink_folio_list
__tracepoint_android_vh_shrink_node_memcgs
__tracepoint_android_vh_sk_alloc
__tracepoint_android_vh_sk_free
__tracepoint_android_vh_swapmem_gather_add_bypass
__tracepoint_android_vh_swapmem_gather_finish
__tracepoint_android_vh_swapmem_gather_init
__tracepoint_android_vh_swap_writepage
__tracepoint_android_vh_sync_txn_recvd
__tracepoint_android_vh_tcp_rtt_estimator
__tracepoint_android_vh_test_clear_look_around_ref
__tracepoint_android_vh_throttle_direct_reclaim_bypass
__tracepoint_android_vh_try_to_unmap_one
__tracepoint_android_vh_tune_mmap_readaround
__tracepoint_android_vh_udp_enqueue_schedule_skb
__tracepoint_android_vh_unreserve_highatomic_bypass
__tracepoint_android_vh_uprobes_replace_page
__tracepoint_block_rq_complete
__tracepoint_block_rq_insert
__tracepoint_block_rq_issue
__tracepoint_block_rq_requeue
__tracepoint_cpu_frequency_limits
__tracepoint_sched_stat_runtime
__tracepoint_sched_switch
__tracepoint_sched_waking
__tracepoint_sys_exit
__tracepoint_task_rename
__tracepoint_tcp_retransmit_skb
__tracepoint_workqueue_execute_end
__tracepoint_workqueue_execute_start
ucsi_send_command
ufshcd_query_descriptor_retry
unlock_buffer
__wait_on_buffer
zs_lookup_class_index

Some files were not shown because too many files have changed in this diff Show More