Merge branch 'android15-6.6' into branch 'android15-6.6-lts'

This catches the -lts branch up with recent abi changes and other symbol
additions.  Included in here are the following commits:

* af0b7d880a ANDROID: ABI: Update pixel symbol list
* d3cf5eb7a4 UPSTREAM: freezer,sched: Clean saved_state when restoring it during thaw
* 1da401e430 UPSTREAM: freezer,sched: Do not restore saved_state of a thawed task
* bb064dd1e0 ANDROID: Improve module loader checks for GKI symbol protection
* 9acf2adaf5 ANDROID: GKI: update symbol list file for xiaomi
* 97a274d252 FROMGIT: arm64: mte: Make mte_check_tfsr_*() conditional on KASAN instead of MTE
* 52a033e898 ANDROID: KVM: arm64: Move init after setting the ops
* abd6c25f0d ANDROID: KVM: arm64: iommu: Add idmap trace point
* ce6eb6fa08 ANDROID: KVM: arm64: Fix prot for __pkvm_host_use_dma_page
* 9c451cdb92 ANDROID: KVM: arm64: iommu: Allow NULL domains in kvm_iommu_host_stage2_idmap
* 65217ef29f ANDROID: KVM: arm64: iommu: Allocate IDMAPPED domain from the driver
* 139e603e6f ANDROID: drivers/arm-smmu-v3-kvm: Remove smmu from kvm_arm_smmu_topup_memcache
* aa2f788d12 ANDROID: ABI: Update symbol for Exynos SoC
* 8ea15a5640 ANDROID: GKI: init vendor data in __init_rwsem
* fa174340be ANDROID: Define common set of cflags for kselftests
* 4a43fd065f ANDROID: Remove obsolete -DKTEST flag from timers selftests
* d564ca175a ANDROID: Build with -D_GNU_SOURCE= to avoid redefinition warnings
* cb58ac06ff ANDROID: Quash macro redefinition warnings for mm/thuge-gen
* 0e3f933670 ANDROID: Don't build with mlock2.h
* cff45068d9 ANDROID: 16K: Only check basename of linker context
* e5ee6d1db4 UPSTREAM: scsi: ufs: core: mcq: Fix ufshcd_mcq_sqe_search()
* 96498cee93 ANDROID: 16K: Ensure stack expansion size is __PAGE_SIZE multiple
* 2d8f89ca0e ANDROID: 16K: Only support page size emulation for x86_64
* fece38d63a ANDROID: abi_gki_aarch64_vivo: Update symbol list
* 3a8cfce099 ANDROID: vendor_hooks: add hooks to fix priority inversion
* f933d260cb ANDROID: 16K: Avoid and document padding madvise lock warning
* b59218bd7b ANDROID: KVM: arm64: activate FGT trapping for pvms
* b578ac0e1b ANDROID: KVM: arm64: Add fgt trap masks for pKVM but do not activate them yet
* e7abba54f7 ANDROID: KVM: arm64: Mark PAuth as a restricted feature for protected VMs
* 991bca2981 ANDROID: KVM: arm64: speacialize and move __activate_traps_hcrx out of __activate_traps_common
* 289f66c4ee ANDROID: KVM: arm64: move __deactivate_traps_hfgxtr out of __deactivate_traps_common
* bcbca2e57f ANDROID: KVM: arm64: move __activate_traps_hfgxtr out of __activate_traps_common
* 96aa0305c4 ANDROID: KVM: arm64: Allow FEAT_ATS1A for Protected VMs
* b04695532d ANDROID: KVM: arm64: Trap external trace for protected VMs
* 79358f32ef ANDROID: KVM: arm64: Fix which features are marked as allowed for protected VMs
* 10434a6235 ANDROID: GKI: Add symbols to allowed list for galaxy
* 58ebfa38d3 UPSTREAM: usb: dwc3: core: Add DWC31 version 2.00a controller
* 7511c3ab9c ANDROID: arm64: vdso32: support user-supplied flags
* 446570771e ANDROID: vendor_hooks: add hook in f2fs_file_open()
* 35cb2a4017 ANDROID: gki_defconfig: Set CONFIG_DTPM/CONFIG_DTPM_CPU/CONFIG_DTPM_DEVFREQ into y
* 82df237540 UPSTREAM: block/blk-mq: Don't complete locally if capacities are different
* 49691a67e2 BACKPORT: sched: Add a new function to compare if two cpus have the same capacity
* 67848ad205 ANDROID: vendor_hooks: add symbols for lazy preemption
* 73e65037e4 ANDROID: GKI: update symbol list for honor
* 86dd89554f ANDROID: GKI: net: add vendor hooks for link data path
* 3f6eaa6a3c ANDROID: vendor_hooks: add two hooks for lazy preemption
* 858a548331 FROMLIST: time/sched_clock: Export sched_clock_register()
* 08901ec9f1 ANDROID: Add specific kselftests in the selftests source code directory.
* 7fb8bc8a4a ANDROID: Update the ABI symbol list for Pixel
* c5d01a3f9b ANDROID: vendor_hooks: Export direct reclaim trace points
* d5e6efdca3 ANDROID: virt: gunyah: Update protype for platform hooks
* 741c7f2942 ANDROID: block: fix non po2 support of blk-zoned device
* 392fd3aaab UPSTREAM: regmap-i2c: Subtract reg size from max_write
* 2b549fbb94 ANDROID: GKI defconfig: append "-4k" to UTS
* fe188b34f7 ANDROID: iommu/arm-smmu-v3-kvm: Implement reserved regions callback
* 23b6831c7b ANDROID: Add all green kselftests in TEST_MAPPING in common/ directory
* 9fbe656e13 ANDROID: GKI: Update oplus symbol list
* d3585a6469 FROMLIST: lockdep: fix deadlock issue between lockdep and rcu
* 69f834b46c ANDROID: GKI: Update QCOM symbol list
* a0af19d49e Revert "ANDROID: GKI: Disable KUnit built-in testing"
* 4ca4a2f3e4 UPSTREAM: genirq/irqdesc: Prevent use-after-free in irq_find_at_or_after()
* c5ed0f8bce ANDROID: abi_gki_aarch64_qcom: update abi symbols
* bfb3d6d4c8 ANDROID: tracing: Add restricted vendor hooks for preemptirq events
* 4bdc97645f ANDROID: 2024/06/05 KMI update
* 96532f839a UPSTREAM: mm: optimize CONFIG_PER_VMA_LOCK member placement in vm_area_struct
* 7789c9e4ab ANDROID: fs: Add ANDROID OEM DATA ARRAY in struct bdi_writeback
* de090207f3 ANDROID: ABI: Update symbol for Exynos SoC
* 8fc5b8f03f ANDROID: GKI: Add symbol to symbol list for imx
* eb1aa949d5 UPSTREAM: of: Reimplement of_machine_is_compatible() using of_machine_compatible_match()
* dcc1709075 UPSTREAM: of: Change of_machine_is_compatible() to return bool
* f589c195b4 UPSTREAM: of: Add of_machine_compatible_match()
* f9fbf39372 FROMGIT: firmware: arm_scmi: Add basic support for SCMI v3.2 pincontrol protocol
* 14e0e2ab3b FROMGIT: dt-bindings: firmware: Support SCMI pinctrl protocol
* 5ea96c252e FROMGIT: firmware: arm_scmi: Introduce get_max_msg_size() helper/accessor
* ffb70eb8f5 FROMGIT: firmware: arm_scmi: Add protocol versioning checks
* 69acf8ab7b FROMGIT: firmware: arm_scmi: Increase the maximum opp count in the perf protocol
* 9ede54650f FROMLIST: firmware: arm_scmi: mailbox: support P2A channel completion
* 99c333ba42 FROMLIST: dt-bindings: firmware: arm,scmi: Support notification completion channel
* 0b38c5c29b FROMGIT: firmware: arm_scmi: Implement clock get permissions
* 839994cdc6 FROMGIT: firmware: arm_scmi: Rework clock domain info lookups
* 6cbd5597aa ANDROID: GKI: enable CONFIG_BLK_CGROUP_IOCOST
* 5b6dc3948a FROMGIT: hwspinlock: Introduce hwspin_lock_bust()
* 7fc172b741 ANDROID: abi_gki_aarch64_qcom: Add abi symbols
* 29460fac71 FROMLIST: mmc: sdhci-msm: Enable force hw reset during cqe recovery
* 773b49c99f ANDROID: vendor_hooks: Add hook in wakeup functionality
* b7bdc38ae6 FROMLIST: mmc: core: Introduce new flag to force hardware reset
* a8fe5ae562 ANDROID: mmc: core: Export core functions required for clk scaling
* 75892d27bc ANDROID: mmc: core: Export core functions for kernel modules usage
* 46fb90cb69 ANDROID: KVM: arm64: Don't always update IOMMUs from module_change_host_page_prot
* 11b801668f ANDROID: GKI: remove CONFIG_KEXEC_FILE
* b9888dee8f UPSTREAM: cgroup: Avoid false cacheline sharing of read mostly rstat_cpu
* 571591d53f UPSTREAM: cgroup/rstat: Optimize cgroup_rstat_updated_list()
* b4958d2b0e UPSTREAM: cgroup/rstat: Reduce cpu_lock hold time in cgroup_rstat_flush_locked()
* 9d925addfb UPSTREAM: mm: memcg: optimize parent iteration in memcg_rstat_updated()
* 38aad83810 BACKPORT: mm: memcg: restore subtree stats flushing
* 8bb30a7df5 UPSTREAM: mm: workingset: move the stats flush into workingset_test_recent()
* 5b61b798f3 UPSTREAM: mm: memcg: make stats flushing threshold per-memcg
* 84b2003d45 BACKPORT: mm: memcg: move vmstats structs definition above flushing code
* 01d12c8b2c UPSTREAM: mm: memcg: change flush_next_time to flush_last_time
* a38b207d4f ANDROID: GKI: set vfs-only exports into their own namespace
* ab20fe054e UPSTREAM: binder: fix max_thread type inconsistency
* cfeefa3136 ANDROID: GKI: add wait_for_completion_interruptible_timeout to db845c symbol list
* e2b7d39769 UPSTREAM: slimbus: qcom-ngd-ctrl: Add timeout for wait operation
* b37bc91be4 UPSTREAM: mtd: limit OTP NVMEM cell parse to non-NAND devices
* c7d1588e72 UPSTREAM: nvmem: add explicit config option to read old syntax fixed OF cells
* b8f693a7b6 ANDROID: ABI: Update pixel symbol list
* 77828e5a7d ANDROID: virt: geniezone: Align the gzvm driver with mainline v11
* f6cbf65f3f FROMLIST: dt-bindings: hypervisor: Add MediaTek GenieZone hypervisor
* 9b6ec31196 Revert "FROMLIST: dt-bindings: hypervisor: Add MediaTek GenieZone hypervisor"
* ee58017a6c ANDROID: KVM: arm64: Enforce type check for pkvm_register_el2_call()
* 12fcfb3d60 Revert "FROMLIST: selftests/vDSO: change elf_hash parameter to signed char"
* ccc2b557e6 ANDROID: ABI: Add usb_gadget_connect & usb_gadget_disconnect symbol
* 94c879bfea ANDROID: ABI: update Unisoc symbol list for dm-verity ko
* 9f2773a83f UPSTREAM: swiotlb: initialise restricted pool list_head when SWIOTLB_DYNAMIC=y
* 4c747cf7d3 ANDROID: abi_gki_aarch64_qcom: Add iio abi symbol
* 590c5bb0a3 FROMLIST: selftests/vDSO: change elf_hash parameter to signed char
* ff23df5253 ANDROID: abi_gki_aarch64_qcom: Add clk_restore_context and clk_save_context
* 3f807312a0 ANDROID: GKI: update xiaomi symbol list
* e52e165c6d ANDROID: psi: Add vendor hooks for PSI tracing
* 1113cfd803 ANDROID: vendor_hooks:vendor hook for madvise_cold_or_pageout_pte_range.
* dedfeb0f68 ANDROID: vendor_hooks:vendor hook for mmput
* a494753f45 ANDROID: GKI: Update Honor abi symbol list
* 413bd75728 ANDROID: Allow vendor modules perform more operationson.
* 4bde1dfde5 UPSTREAM: procfs: make freeing proc_fs_info rcu-delayed
* 72e9e1d60c UPSTREAM: procfs: move dropping pde and pid from ->evict_inode() to ->free_inode()
* eab28aad52 Revert "FROMLIST: sched: Consolidate cpufreq updates"
* ddc5d87954 ANDROID: GKI: Update QCOM symbol list
* 9a65b2f585 ANDROID: ABI: update symbol list for galaxy
* de8582f750 ANDROID: ABI fixup for abi break in struct dst_ops
* 3521eb1728 BACKPORT: net: fix __dst_negative_advice() race

Change-Id: I61ce1d58f076b3dd166f20b8fbe4c0448c272743
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
This commit is contained in:
Greg Kroah-Hartman 2024-06-13 15:35:18 +00:00
commit dc53968049
322 changed files with 21773 additions and 6471 deletions

View File

@ -972,6 +972,15 @@ ddk_headers(
_KSELFTEST_DIR = "testcases/selftests" _KSELFTEST_DIR = "testcases/selftests"
_KSELFTEST_COPTS = [
"-O3",
"-pthread",
"-std=gnu99",
] + select({
":arm": ["-mcpu=cortex-a8"],
"//conditions:default": [],
})
config_setting( config_setting(
name = "x86_64", name = "x86_64",
values = {"platforms": "//build/kernel/kleaf/impl:android_x86_64"}, values = {"platforms": "//build/kernel/kleaf/impl:android_x86_64"},
@ -999,12 +1008,17 @@ config_setting(
cc_library( cc_library(
name = "kselftest_headers_lib", name = "kselftest_headers_lib",
hdrs = glob(["tools/testing/selftests/*.h"]), hdrs = glob(["tools/testing/selftests/*.h"]),
copts = _KSELFTEST_COPTS,
defines = [
"_GNU_SOURCE=",
],
visibility = ["//visibility:private"], visibility = ["//visibility:private"],
) )
cc_binary_with_abi( cc_binary_with_abi(
name = "kselftest_binderfs_binderfs_test", name = "kselftest_binderfs_binderfs_test",
srcs = ["tools/testing/selftests/filesystems/binderfs/binderfs_test.c"], srcs = ["tools/testing/selftests/filesystems/binderfs/binderfs_test.c"],
copts = _KSELFTEST_COPTS,
path_prefix = _KSELFTEST_DIR, path_prefix = _KSELFTEST_DIR,
target_compatible_with = ["@platforms//os:android"], target_compatible_with = ["@platforms//os:android"],
visibility = ["//visibility:private"], visibility = ["//visibility:private"],
@ -1019,6 +1033,7 @@ cc_binary_with_abi(
":arm64": ["tools/testing/selftests/breakpoints/breakpoint_test_arm64.c"], ":arm64": ["tools/testing/selftests/breakpoints/breakpoint_test_arm64.c"],
"//conditions:default": [], "//conditions:default": [],
}), }),
copts = _KSELFTEST_COPTS,
path_prefix = _KSELFTEST_DIR, path_prefix = _KSELFTEST_DIR,
target_compatible_with = ["@platforms//os:android"], target_compatible_with = ["@platforms//os:android"],
visibility = ["//visibility:private"], visibility = ["//visibility:private"],
@ -1028,6 +1043,7 @@ cc_binary_with_abi(
cc_binary_with_abi( cc_binary_with_abi(
name = "kselftest_kcmp_kcmp_test", name = "kselftest_kcmp_kcmp_test",
srcs = ["tools/testing/selftests/kcmp/kcmp_test.c"], srcs = ["tools/testing/selftests/kcmp/kcmp_test.c"],
copts = _KSELFTEST_COPTS,
path_prefix = _KSELFTEST_DIR, path_prefix = _KSELFTEST_DIR,
target_compatible_with = ["@platforms//os:android"], target_compatible_with = ["@platforms//os:android"],
visibility = ["//visibility:private"], visibility = ["//visibility:private"],
@ -1037,6 +1053,7 @@ cc_binary_with_abi(
cc_binary_with_abi( cc_binary_with_abi(
name = "kselftest_ptrace_peeksiginfo", name = "kselftest_ptrace_peeksiginfo",
srcs = ["tools/testing/selftests/ptrace/peeksiginfo.c"], srcs = ["tools/testing/selftests/ptrace/peeksiginfo.c"],
copts = _KSELFTEST_COPTS,
path_prefix = _KSELFTEST_DIR, path_prefix = _KSELFTEST_DIR,
target_compatible_with = ["@platforms//os:android"], target_compatible_with = ["@platforms//os:android"],
visibility = ["//visibility:private"], visibility = ["//visibility:private"],
@ -1046,6 +1063,7 @@ cc_binary_with_abi(
cc_binary_with_abi( cc_binary_with_abi(
name = "kselftest_rtc_rtctest", name = "kselftest_rtc_rtctest",
srcs = ["tools/testing/selftests/rtc/rtctest.c"], srcs = ["tools/testing/selftests/rtc/rtctest.c"],
copts = _KSELFTEST_COPTS,
path_prefix = _KSELFTEST_DIR, path_prefix = _KSELFTEST_DIR,
target_compatible_with = ["@platforms//os:android"], target_compatible_with = ["@platforms//os:android"],
visibility = ["//visibility:private"], visibility = ["//visibility:private"],
@ -1059,12 +1077,14 @@ cc_library(
"tools/testing/selftests/vDSO/parse_vdso.h", "tools/testing/selftests/vDSO/parse_vdso.h",
"tools/testing/selftests/vDSO/vdso_config.h", "tools/testing/selftests/vDSO/vdso_config.h",
], ],
copts = _KSELFTEST_COPTS,
visibility = ["//visibility:private"], visibility = ["//visibility:private"],
) )
cc_binary_with_abi( cc_binary_with_abi(
name = "kselftest_vdso_vdso_test_abi", name = "kselftest_vdso_vdso_test_abi",
srcs = ["tools/testing/selftests/vDSO/vdso_test_abi.c"], srcs = ["tools/testing/selftests/vDSO/vdso_test_abi.c"],
copts = _KSELFTEST_COPTS,
path_prefix = _KSELFTEST_DIR, path_prefix = _KSELFTEST_DIR,
target_compatible_with = ["@platforms//os:android"], target_compatible_with = ["@platforms//os:android"],
visibility = ["//visibility:private"], visibility = ["//visibility:private"],
@ -1077,6 +1097,7 @@ cc_binary_with_abi(
cc_binary_with_abi( cc_binary_with_abi(
name = "kselftest_vdso_vdso_test_clock_getres", name = "kselftest_vdso_vdso_test_clock_getres",
srcs = ["tools/testing/selftests/vDSO/vdso_test_clock_getres.c"], srcs = ["tools/testing/selftests/vDSO/vdso_test_clock_getres.c"],
copts = _KSELFTEST_COPTS,
path_prefix = _KSELFTEST_DIR, path_prefix = _KSELFTEST_DIR,
target_compatible_with = ["@platforms//os:android"], target_compatible_with = ["@platforms//os:android"],
visibility = ["//visibility:private"], visibility = ["//visibility:private"],
@ -1089,6 +1110,7 @@ cc_binary_with_abi(
cc_binary_with_abi( cc_binary_with_abi(
name = "kselftest_vdso_vdso_test_getcpu", name = "kselftest_vdso_vdso_test_getcpu",
srcs = ["tools/testing/selftests/vDSO/vdso_test_getcpu.c"], srcs = ["tools/testing/selftests/vDSO/vdso_test_getcpu.c"],
copts = _KSELFTEST_COPTS,
path_prefix = _KSELFTEST_DIR, path_prefix = _KSELFTEST_DIR,
target_compatible_with = ["@platforms//os:android"], target_compatible_with = ["@platforms//os:android"],
visibility = ["//visibility:private"], visibility = ["//visibility:private"],
@ -1101,6 +1123,7 @@ cc_binary_with_abi(
cc_binary_with_abi( cc_binary_with_abi(
name = "kselftest_vdso_vdso_test_gettimeofday", name = "kselftest_vdso_vdso_test_gettimeofday",
srcs = ["tools/testing/selftests/vDSO/vdso_test_gettimeofday.c"], srcs = ["tools/testing/selftests/vDSO/vdso_test_gettimeofday.c"],
copts = _KSELFTEST_COPTS,
path_prefix = _KSELFTEST_DIR, path_prefix = _KSELFTEST_DIR,
target_compatible_with = ["@platforms//os:android"], target_compatible_with = ["@platforms//os:android"],
visibility = ["//visibility:private"], visibility = ["//visibility:private"],
@ -1113,6 +1136,7 @@ cc_binary_with_abi(
cc_library( cc_library(
name = "kselftest_futex_headers_lib", name = "kselftest_futex_headers_lib",
hdrs = glob(["tools/testing/selftests/futex/include/*.h"]), hdrs = glob(["tools/testing/selftests/futex/include/*.h"]),
copts = _KSELFTEST_COPTS,
visibility = ["//visibility:private"], visibility = ["//visibility:private"],
) )
@ -1120,10 +1144,7 @@ cc_binary_with_abi(
name = "kselftest_futex_futex_requeue_pi_mismatched_ops", name = "kselftest_futex_futex_requeue_pi_mismatched_ops",
srcs = ["tools/testing/selftests/futex/functional/futex_requeue_pi_mismatched_ops.c"], srcs = ["tools/testing/selftests/futex/functional/futex_requeue_pi_mismatched_ops.c"],
out = "futex_requeue_pi_mismatched_ops", out = "futex_requeue_pi_mismatched_ops",
copts = [ copts = _KSELFTEST_COPTS,
"-D_GNU_SOURCE",
"-pthread",
],
includes = [ includes = [
"tools/testing/selftests", "tools/testing/selftests",
"tools/testing/selftests/futex/include", "tools/testing/selftests/futex/include",
@ -1141,10 +1162,7 @@ cc_binary_with_abi(
name = "kselftest_futex_futex_requeue_pi_signal_restart", name = "kselftest_futex_futex_requeue_pi_signal_restart",
srcs = ["tools/testing/selftests/futex/functional/futex_requeue_pi_signal_restart.c"], srcs = ["tools/testing/selftests/futex/functional/futex_requeue_pi_signal_restart.c"],
out = "futex_requeue_pi_signal_restart", out = "futex_requeue_pi_signal_restart",
copts = [ copts = _KSELFTEST_COPTS,
"-D_GNU_SOURCE",
"-pthread",
],
includes = [ includes = [
"tools/testing/selftests", "tools/testing/selftests",
"tools/testing/selftests/futex/include", "tools/testing/selftests/futex/include",
@ -1162,10 +1180,7 @@ cc_binary_with_abi(
name = "kselftest_futex_futex_requeue_pi", name = "kselftest_futex_futex_requeue_pi",
srcs = ["tools/testing/selftests/futex/functional/futex_requeue_pi.c"], srcs = ["tools/testing/selftests/futex/functional/futex_requeue_pi.c"],
out = "futex_requeue_pi", out = "futex_requeue_pi",
copts = [ copts = _KSELFTEST_COPTS,
"-D_GNU_SOURCE",
"-pthread",
],
includes = [ includes = [
"tools/testing/selftests", "tools/testing/selftests",
"tools/testing/selftests/futex/include", "tools/testing/selftests/futex/include",
@ -1183,10 +1198,7 @@ cc_binary_with_abi(
name = "kselftest_futex_futex_requeue", name = "kselftest_futex_futex_requeue",
srcs = ["tools/testing/selftests/futex/functional/futex_requeue.c"], srcs = ["tools/testing/selftests/futex/functional/futex_requeue.c"],
out = "futex_requeue", out = "futex_requeue",
copts = [ copts = _KSELFTEST_COPTS,
"-D_GNU_SOURCE",
"-pthread",
],
includes = [ includes = [
"tools/testing/selftests", "tools/testing/selftests",
"tools/testing/selftests/futex/include", "tools/testing/selftests/futex/include",
@ -1204,10 +1216,7 @@ cc_binary_with_abi(
name = "kselftest_futex_futex_wait_private_mapped_file", name = "kselftest_futex_futex_wait_private_mapped_file",
srcs = ["tools/testing/selftests/futex/functional/futex_wait_private_mapped_file.c"], srcs = ["tools/testing/selftests/futex/functional/futex_wait_private_mapped_file.c"],
out = "futex_wait_private_mapped_file", out = "futex_wait_private_mapped_file",
copts = [ copts = _KSELFTEST_COPTS,
"-D_GNU_SOURCE",
"-pthread",
],
includes = [ includes = [
"tools/testing/selftests", "tools/testing/selftests",
"tools/testing/selftests/futex/include", "tools/testing/selftests/futex/include",
@ -1225,10 +1234,7 @@ cc_binary_with_abi(
name = "kselftest_futex_futex_wait_timeout", name = "kselftest_futex_futex_wait_timeout",
srcs = ["tools/testing/selftests/futex/functional/futex_wait_timeout.c"], srcs = ["tools/testing/selftests/futex/functional/futex_wait_timeout.c"],
out = "futex_wait_timeout", out = "futex_wait_timeout",
copts = [ copts = _KSELFTEST_COPTS,
"-D_GNU_SOURCE",
"-pthread",
],
includes = [ includes = [
"tools/testing/selftests", "tools/testing/selftests",
"tools/testing/selftests/futex/include", "tools/testing/selftests/futex/include",
@ -1246,10 +1252,7 @@ cc_binary_with_abi(
name = "kselftest_futex_futex_wait_uninitialized_heap", name = "kselftest_futex_futex_wait_uninitialized_heap",
srcs = ["tools/testing/selftests/futex/functional/futex_wait_uninitialized_heap.c"], srcs = ["tools/testing/selftests/futex/functional/futex_wait_uninitialized_heap.c"],
out = "futex_wait_uninitialized_heap", out = "futex_wait_uninitialized_heap",
copts = [ copts = _KSELFTEST_COPTS,
"-D_GNU_SOURCE",
"-pthread",
],
includes = [ includes = [
"tools/testing/selftests", "tools/testing/selftests",
"tools/testing/selftests/futex/include", "tools/testing/selftests/futex/include",
@ -1267,10 +1270,7 @@ cc_binary_with_abi(
name = "kselftest_futex_futex_wait_wouldblock", name = "kselftest_futex_futex_wait_wouldblock",
srcs = ["tools/testing/selftests/futex/functional/futex_wait_wouldblock.c"], srcs = ["tools/testing/selftests/futex/functional/futex_wait_wouldblock.c"],
out = "futex_wait_wouldblock", out = "futex_wait_wouldblock",
copts = [ copts = _KSELFTEST_COPTS,
"-D_GNU_SOURCE",
"-pthread",
],
includes = [ includes = [
"tools/testing/selftests", "tools/testing/selftests",
"tools/testing/selftests/futex/include", "tools/testing/selftests/futex/include",
@ -1288,10 +1288,7 @@ cc_binary_with_abi(
name = "kselftest_futex_futex_wait", name = "kselftest_futex_futex_wait",
srcs = ["tools/testing/selftests/futex/functional/futex_wait.c"], srcs = ["tools/testing/selftests/futex/functional/futex_wait.c"],
out = "futex_wait", out = "futex_wait",
copts = [ copts = _KSELFTEST_COPTS,
"-D_GNU_SOURCE",
"-pthread",
],
includes = [ includes = [
"tools/testing/selftests", "tools/testing/selftests",
"tools/testing/selftests/futex/include", "tools/testing/selftests/futex/include",
@ -1308,6 +1305,7 @@ cc_binary_with_abi(
cc_binary_with_abi( cc_binary_with_abi(
name = "kselftest_mm_compaction_test", name = "kselftest_mm_compaction_test",
srcs = ["tools/testing/selftests/mm/compaction_test.c"], srcs = ["tools/testing/selftests/mm/compaction_test.c"],
copts = _KSELFTEST_COPTS,
includes = ["tools/testing/selftests"], includes = ["tools/testing/selftests"],
path_prefix = _KSELFTEST_DIR, path_prefix = _KSELFTEST_DIR,
target_compatible_with = ["@platforms//os:android"], target_compatible_with = ["@platforms//os:android"],
@ -1321,6 +1319,7 @@ cc_binary_with_abi(
cc_binary_with_abi( cc_binary_with_abi(
name = "kselftest_mm_hugepage_mmap", name = "kselftest_mm_hugepage_mmap",
srcs = ["tools/testing/selftests/mm/hugepage-mmap.c"], srcs = ["tools/testing/selftests/mm/hugepage-mmap.c"],
copts = _KSELFTEST_COPTS,
includes = ["tools/testing/selftests"], includes = ["tools/testing/selftests"],
path_prefix = _KSELFTEST_DIR, path_prefix = _KSELFTEST_DIR,
target_compatible_with = ["@platforms//os:android"], target_compatible_with = ["@platforms//os:android"],
@ -1334,6 +1333,7 @@ cc_binary_with_abi(
cc_binary_with_abi( cc_binary_with_abi(
name = "kselftest_mm_hugepage_shm", name = "kselftest_mm_hugepage_shm",
srcs = ["tools/testing/selftests/mm/hugepage-shm.c"], srcs = ["tools/testing/selftests/mm/hugepage-shm.c"],
copts = _KSELFTEST_COPTS,
includes = ["tools/testing/selftests"], includes = ["tools/testing/selftests"],
path_prefix = _KSELFTEST_DIR, path_prefix = _KSELFTEST_DIR,
target_compatible_with = ["@platforms//os:android"], target_compatible_with = ["@platforms//os:android"],
@ -1347,6 +1347,7 @@ cc_binary_with_abi(
cc_binary_with_abi( cc_binary_with_abi(
name = "kselftest_mm_map_hugetlb", name = "kselftest_mm_map_hugetlb",
srcs = ["tools/testing/selftests/mm/map_hugetlb.c"], srcs = ["tools/testing/selftests/mm/map_hugetlb.c"],
copts = _KSELFTEST_COPTS,
includes = ["tools/testing/selftests"], includes = ["tools/testing/selftests"],
path_prefix = _KSELFTEST_DIR, path_prefix = _KSELFTEST_DIR,
target_compatible_with = ["@platforms//os:android"], target_compatible_with = ["@platforms//os:android"],
@ -1363,6 +1364,7 @@ cc_binary_with_abi(
"tools/testing/selftests/mm/mlock-random-test.c", "tools/testing/selftests/mm/mlock-random-test.c",
"tools/testing/selftests/mm/mlock2.h", "tools/testing/selftests/mm/mlock2.h",
], ],
copts = _KSELFTEST_COPTS,
includes = [ includes = [
"tools/testing/selftests", "tools/testing/selftests",
"tools/testing/selftests/mm", "tools/testing/selftests/mm",
@ -1382,6 +1384,7 @@ cc_binary_with_abi(
"tools/testing/selftests/mm/mlock2.h", "tools/testing/selftests/mm/mlock2.h",
"tools/testing/selftests/mm/mlock2-tests.c", "tools/testing/selftests/mm/mlock2-tests.c",
], ],
copts = _KSELFTEST_COPTS,
includes = [ includes = [
"tools/testing/selftests", "tools/testing/selftests",
"tools/testing/selftests/mm", "tools/testing/selftests/mm",
@ -1398,6 +1401,7 @@ cc_binary_with_abi(
cc_binary_with_abi( cc_binary_with_abi(
name = "kselftest_mm_on_fault_limit", name = "kselftest_mm_on_fault_limit",
srcs = ["tools/testing/selftests/mm/on-fault-limit.c"], srcs = ["tools/testing/selftests/mm/on-fault-limit.c"],
copts = _KSELFTEST_COPTS,
includes = ["tools/testing/selftests"], includes = ["tools/testing/selftests"],
path_prefix = _KSELFTEST_DIR, path_prefix = _KSELFTEST_DIR,
target_compatible_with = ["@platforms//os:android"], target_compatible_with = ["@platforms//os:android"],
@ -1411,6 +1415,7 @@ cc_binary_with_abi(
cc_binary_with_abi( cc_binary_with_abi(
name = "kselftest_mm_mremap_dontunmap", name = "kselftest_mm_mremap_dontunmap",
srcs = ["tools/testing/selftests/mm/mremap_dontunmap.c"], srcs = ["tools/testing/selftests/mm/mremap_dontunmap.c"],
copts = _KSELFTEST_COPTS,
includes = ["tools/testing/selftests"], includes = ["tools/testing/selftests"],
path_prefix = _KSELFTEST_DIR, path_prefix = _KSELFTEST_DIR,
target_compatible_with = ["@platforms//os:android"], target_compatible_with = ["@platforms//os:android"],
@ -1424,6 +1429,7 @@ cc_binary_with_abi(
cc_binary_with_abi( cc_binary_with_abi(
name = "kselftest_mm_mremap_test", name = "kselftest_mm_mremap_test",
srcs = ["tools/testing/selftests/mm/mremap_test.c"], srcs = ["tools/testing/selftests/mm/mremap_test.c"],
copts = _KSELFTEST_COPTS,
includes = ["tools/testing/selftests"], includes = ["tools/testing/selftests"],
path_prefix = _KSELFTEST_DIR, path_prefix = _KSELFTEST_DIR,
target_compatible_with = ["@platforms//os:android"], target_compatible_with = ["@platforms//os:android"],
@ -1438,9 +1444,7 @@ cc_library(
name = "kselftest_mm_vm_util", name = "kselftest_mm_vm_util",
srcs = ["tools/testing/selftests/mm/vm_util.c"], srcs = ["tools/testing/selftests/mm/vm_util.c"],
hdrs = ["tools/testing/selftests/mm/vm_util.h"], hdrs = ["tools/testing/selftests/mm/vm_util.h"],
copts = [ copts = _KSELFTEST_COPTS,
"-D_GNU_SOURCE",
],
visibility = ["//visibility:private"], visibility = ["//visibility:private"],
deps = [ deps = [
":kselftest_headers_lib", ":kselftest_headers_lib",
@ -1450,11 +1454,10 @@ cc_library(
cc_binary_with_abi( cc_binary_with_abi(
name = "kselftest_mm_thuge_gen", name = "kselftest_mm_thuge_gen",
srcs = [ srcs = [
"tools/testing/selftests/mm/mlock2.h",
"tools/testing/selftests/mm/thuge-gen.c", "tools/testing/selftests/mm/thuge-gen.c",
], ],
copts = [ copts = _KSELFTEST_COPTS + [
"-D_GNU_SOURCE", "-Wno-macro-redefined",
], ],
includes = ["tools/testing/selftests"], includes = ["tools/testing/selftests"],
path_prefix = _KSELFTEST_DIR, path_prefix = _KSELFTEST_DIR,
@ -1470,12 +1473,9 @@ cc_binary_with_abi(
cc_binary_with_abi( cc_binary_with_abi(
name = "kselftest_mm_transhuge_stress", name = "kselftest_mm_transhuge_stress",
srcs = [ srcs = [
"tools/testing/selftests/mm/mlock2.h",
"tools/testing/selftests/mm/transhuge-stress.c", "tools/testing/selftests/mm/transhuge-stress.c",
], ],
copts = [ copts = _KSELFTEST_COPTS,
"-D_GNU_SOURCE",
],
includes = [ includes = [
"tools/testing/selftests", "tools/testing/selftests",
"tools/testing/selftests/mm/", "tools/testing/selftests/mm/",
@ -1499,6 +1499,7 @@ cc_library(
"tools/testing/selftests/kselftest.h", "tools/testing/selftests/kselftest.h",
"tools/testing/selftests/mm/uffd-common.h", "tools/testing/selftests/mm/uffd-common.h",
], ],
copts = _KSELFTEST_COPTS,
includes = [ includes = [
"include/uapi/", "include/uapi/",
"tools/testing/selftests/mm/", "tools/testing/selftests/mm/",
@ -1515,6 +1516,7 @@ cc_binary_with_abi(
srcs = [ srcs = [
"tools/testing/selftests/mm/uffd-unit-tests.c", "tools/testing/selftests/mm/uffd-unit-tests.c",
], ],
copts = _KSELFTEST_COPTS,
includes = [ includes = [
"tools/testing/selftests", "tools/testing/selftests",
"tools/testing/selftests/mm/", "tools/testing/selftests/mm/",
@ -1533,7 +1535,7 @@ cc_binary_with_abi(
cc_binary_with_abi( cc_binary_with_abi(
name = "kselftest_size_test_get_size", name = "kselftest_size_test_get_size",
srcs = ["tools/testing/selftests/size/get_size.c"], srcs = ["tools/testing/selftests/size/get_size.c"],
copts = select({ copts = _KSELFTEST_COPTS + select({
":x86_64": ["-mstackrealign"], ":x86_64": ["-mstackrealign"],
"//conditions:default": [], "//conditions:default": [],
}), }),
@ -1550,10 +1552,7 @@ cc_binary_with_abi(
cc_binary_with_abi( cc_binary_with_abi(
name = "kselftest_timers_adjtick", name = "kselftest_timers_adjtick",
srcs = ["tools/testing/selftests/timers/adjtick.c"], srcs = ["tools/testing/selftests/timers/adjtick.c"],
copts = [ copts = _KSELFTEST_COPTS,
"-O3",
"-DKTEST",
],
path_prefix = _KSELFTEST_DIR, path_prefix = _KSELFTEST_DIR,
target_compatible_with = ["@platforms//os:android"], target_compatible_with = ["@platforms//os:android"],
visibility = ["//visibility:private"], visibility = ["//visibility:private"],
@ -1563,10 +1562,7 @@ cc_binary_with_abi(
cc_binary_with_abi( cc_binary_with_abi(
name = "kselftest_timers_alarmtimer_suspend", name = "kselftest_timers_alarmtimer_suspend",
srcs = ["tools/testing/selftests/timers/alarmtimer-suspend.c"], srcs = ["tools/testing/selftests/timers/alarmtimer-suspend.c"],
copts = [ copts = _KSELFTEST_COPTS,
"-O3",
"-DKTEST",
],
path_prefix = _KSELFTEST_DIR, path_prefix = _KSELFTEST_DIR,
target_compatible_with = ["@platforms//os:android"], target_compatible_with = ["@platforms//os:android"],
visibility = ["//visibility:private"], visibility = ["//visibility:private"],
@ -1576,10 +1572,7 @@ cc_binary_with_abi(
cc_binary_with_abi( cc_binary_with_abi(
name = "kselftest_timers_change_skew", name = "kselftest_timers_change_skew",
srcs = ["tools/testing/selftests/timers/change_skew.c"], srcs = ["tools/testing/selftests/timers/change_skew.c"],
copts = [ copts = _KSELFTEST_COPTS,
"-O3",
"-DKTEST",
],
path_prefix = _KSELFTEST_DIR, path_prefix = _KSELFTEST_DIR,
target_compatible_with = ["@platforms//os:android"], target_compatible_with = ["@platforms//os:android"],
visibility = ["//visibility:private"], visibility = ["//visibility:private"],
@ -1594,10 +1587,7 @@ cc_binary_with_abi(
cc_binary_with_abi( cc_binary_with_abi(
name = "kselftest_timers_clocksource_switch", name = "kselftest_timers_clocksource_switch",
srcs = ["tools/testing/selftests/timers/clocksource-switch.c"], srcs = ["tools/testing/selftests/timers/clocksource-switch.c"],
copts = [ copts = _KSELFTEST_COPTS,
"-O3",
"-DKTEST",
],
path_prefix = _KSELFTEST_DIR, path_prefix = _KSELFTEST_DIR,
target_compatible_with = ["@platforms//os:android"], target_compatible_with = ["@platforms//os:android"],
visibility = ["//visibility:private"], visibility = ["//visibility:private"],
@ -1611,10 +1601,7 @@ cc_binary_with_abi(
cc_binary_with_abi( cc_binary_with_abi(
name = "kselftest_timers_freq_step", name = "kselftest_timers_freq_step",
srcs = ["tools/testing/selftests/timers/freq-step.c"], srcs = ["tools/testing/selftests/timers/freq-step.c"],
copts = [ copts = _KSELFTEST_COPTS,
"-O3",
"-DKTEST",
],
path_prefix = _KSELFTEST_DIR, path_prefix = _KSELFTEST_DIR,
target_compatible_with = ["@platforms//os:android"], target_compatible_with = ["@platforms//os:android"],
visibility = ["//visibility:private"], visibility = ["//visibility:private"],
@ -1625,10 +1612,7 @@ cc_binary_with_abi(
name = "kselftest_timers_inconsistency_check", name = "kselftest_timers_inconsistency_check",
srcs = ["tools/testing/selftests/timers/inconsistency-check.c"], srcs = ["tools/testing/selftests/timers/inconsistency-check.c"],
out = "inconsistency-check", out = "inconsistency-check",
copts = [ copts = _KSELFTEST_COPTS,
"-O3",
"-DKTEST",
],
path_prefix = _KSELFTEST_DIR, path_prefix = _KSELFTEST_DIR,
target_compatible_with = ["@platforms//os:android"], target_compatible_with = ["@platforms//os:android"],
visibility = ["//visibility:private"], visibility = ["//visibility:private"],
@ -1638,10 +1622,7 @@ cc_binary_with_abi(
cc_binary_with_abi( cc_binary_with_abi(
name = "kselftest_timers_leap_a_day", name = "kselftest_timers_leap_a_day",
srcs = ["tools/testing/selftests/timers/leap-a-day.c"], srcs = ["tools/testing/selftests/timers/leap-a-day.c"],
copts = [ copts = _KSELFTEST_COPTS,
"-O3",
"-DKTEST",
],
path_prefix = _KSELFTEST_DIR, path_prefix = _KSELFTEST_DIR,
target_compatible_with = ["@platforms//os:android"], target_compatible_with = ["@platforms//os:android"],
visibility = ["//visibility:private"], visibility = ["//visibility:private"],
@ -1651,10 +1632,7 @@ cc_binary_with_abi(
cc_binary_with_abi( cc_binary_with_abi(
name = "kselftest_timers_leapcrash", name = "kselftest_timers_leapcrash",
srcs = ["tools/testing/selftests/timers/leapcrash.c"], srcs = ["tools/testing/selftests/timers/leapcrash.c"],
copts = [ copts = _KSELFTEST_COPTS,
"-O3",
"-DKTEST",
],
path_prefix = _KSELFTEST_DIR, path_prefix = _KSELFTEST_DIR,
target_compatible_with = ["@platforms//os:android"], target_compatible_with = ["@platforms//os:android"],
visibility = ["//visibility:private"], visibility = ["//visibility:private"],
@ -1665,10 +1643,7 @@ cc_binary_with_abi(
name = "kselftest_timers_nanosleep", name = "kselftest_timers_nanosleep",
srcs = ["tools/testing/selftests/timers/nanosleep.c"], srcs = ["tools/testing/selftests/timers/nanosleep.c"],
out = "nanosleep", out = "nanosleep",
copts = [ copts = _KSELFTEST_COPTS,
"-O3",
"-DKTEST",
],
path_prefix = _KSELFTEST_DIR, path_prefix = _KSELFTEST_DIR,
target_compatible_with = ["@platforms//os:android"], target_compatible_with = ["@platforms//os:android"],
visibility = ["//visibility:private"], visibility = ["//visibility:private"],
@ -1679,10 +1654,7 @@ cc_binary_with_abi(
name = "kselftest_timers_nsleep_lat", name = "kselftest_timers_nsleep_lat",
srcs = ["tools/testing/selftests/timers/nsleep-lat.c"], srcs = ["tools/testing/selftests/timers/nsleep-lat.c"],
out = "nsleep-lat", out = "nsleep-lat",
copts = [ copts = _KSELFTEST_COPTS,
"-O3",
"-DKTEST",
],
path_prefix = _KSELFTEST_DIR, path_prefix = _KSELFTEST_DIR,
target_compatible_with = ["@platforms//os:android"], target_compatible_with = ["@platforms//os:android"],
visibility = ["//visibility:private"], visibility = ["//visibility:private"],
@ -1692,10 +1664,7 @@ cc_binary_with_abi(
cc_binary_with_abi( cc_binary_with_abi(
name = "kselftest_timers_posix_timers", name = "kselftest_timers_posix_timers",
srcs = ["tools/testing/selftests/timers/posix_timers.c"], srcs = ["tools/testing/selftests/timers/posix_timers.c"],
copts = [ copts = _KSELFTEST_COPTS,
"-O3",
"-DKTEST",
],
path_prefix = _KSELFTEST_DIR, path_prefix = _KSELFTEST_DIR,
target_compatible_with = ["@platforms//os:android"], target_compatible_with = ["@platforms//os:android"],
visibility = ["//visibility:private"], visibility = ["//visibility:private"],
@ -1706,10 +1675,7 @@ cc_binary_with_abi(
name = "kselftest_timers_tests_raw_skew", name = "kselftest_timers_tests_raw_skew",
srcs = ["tools/testing/selftests/timers/raw_skew.c"], srcs = ["tools/testing/selftests/timers/raw_skew.c"],
out = "raw_skew", out = "raw_skew",
copts = [ copts = _KSELFTEST_COPTS,
"-O3",
"-DKTEST",
],
path_prefix = _KSELFTEST_DIR, path_prefix = _KSELFTEST_DIR,
target_compatible_with = ["@platforms//os:android"], target_compatible_with = ["@platforms//os:android"],
visibility = ["//visibility:private"], visibility = ["//visibility:private"],
@ -1719,10 +1685,7 @@ cc_binary_with_abi(
cc_binary_with_abi( cc_binary_with_abi(
name = "kselftest_timers_set_2038", name = "kselftest_timers_set_2038",
srcs = ["tools/testing/selftests/timers/set-2038.c"], srcs = ["tools/testing/selftests/timers/set-2038.c"],
copts = [ copts = _KSELFTEST_COPTS,
"-O3",
"-DKTEST",
],
path_prefix = _KSELFTEST_DIR, path_prefix = _KSELFTEST_DIR,
target_compatible_with = ["@platforms//os:android"], target_compatible_with = ["@platforms//os:android"],
visibility = ["//visibility:private"], visibility = ["//visibility:private"],
@ -1737,10 +1700,7 @@ cc_binary_with_abi(
cc_binary_with_abi( cc_binary_with_abi(
name = "kselftest_timers_set_tai", name = "kselftest_timers_set_tai",
srcs = ["tools/testing/selftests/timers/set-tai.c"], srcs = ["tools/testing/selftests/timers/set-tai.c"],
copts = [ copts = _KSELFTEST_COPTS,
"-O3",
"-DKTEST",
],
path_prefix = _KSELFTEST_DIR, path_prefix = _KSELFTEST_DIR,
target_compatible_with = ["@platforms//os:android"], target_compatible_with = ["@platforms//os:android"],
visibility = ["//visibility:private"], visibility = ["//visibility:private"],
@ -1750,10 +1710,7 @@ cc_binary_with_abi(
cc_binary_with_abi( cc_binary_with_abi(
name = "kselftest_timers_set_timer_lat", name = "kselftest_timers_set_timer_lat",
srcs = ["tools/testing/selftests/timers/set-timer-lat.c"], srcs = ["tools/testing/selftests/timers/set-timer-lat.c"],
copts = [ copts = _KSELFTEST_COPTS,
"-O3",
"-DKTEST",
],
path_prefix = _KSELFTEST_DIR, path_prefix = _KSELFTEST_DIR,
target_compatible_with = ["@platforms//os:android"], target_compatible_with = ["@platforms//os:android"],
visibility = ["//visibility:private"], visibility = ["//visibility:private"],
@ -1763,10 +1720,7 @@ cc_binary_with_abi(
cc_binary_with_abi( cc_binary_with_abi(
name = "kselftest_timers_set_tz", name = "kselftest_timers_set_tz",
srcs = ["tools/testing/selftests/timers/set-tz.c"], srcs = ["tools/testing/selftests/timers/set-tz.c"],
copts = [ copts = _KSELFTEST_COPTS,
"-O3",
"-DKTEST",
],
path_prefix = _KSELFTEST_DIR, path_prefix = _KSELFTEST_DIR,
target_compatible_with = ["@platforms//os:android"], target_compatible_with = ["@platforms//os:android"],
visibility = ["//visibility:private"], visibility = ["//visibility:private"],
@ -1776,10 +1730,7 @@ cc_binary_with_abi(
cc_binary_with_abi( cc_binary_with_abi(
name = "kselftest_timers_skew_consistency", name = "kselftest_timers_skew_consistency",
srcs = ["tools/testing/selftests/timers/skew_consistency.c"], srcs = ["tools/testing/selftests/timers/skew_consistency.c"],
copts = [ copts = _KSELFTEST_COPTS,
"-O3",
"-DKTEST",
],
path_prefix = _KSELFTEST_DIR, path_prefix = _KSELFTEST_DIR,
target_compatible_with = ["@platforms//os:android"], target_compatible_with = ["@platforms//os:android"],
visibility = ["//visibility:private"], visibility = ["//visibility:private"],
@ -1792,10 +1743,7 @@ cc_binary_with_abi(
cc_binary_with_abi( cc_binary_with_abi(
name = "kselftest_timers_threadtest", name = "kselftest_timers_threadtest",
srcs = ["tools/testing/selftests/timers/threadtest.c"], srcs = ["tools/testing/selftests/timers/threadtest.c"],
copts = [ copts = _KSELFTEST_COPTS,
"-O3",
"-DKTEST",
],
path_prefix = _KSELFTEST_DIR, path_prefix = _KSELFTEST_DIR,
target_compatible_with = ["@platforms//os:android"], target_compatible_with = ["@platforms//os:android"],
visibility = ["//visibility:private"], visibility = ["//visibility:private"],
@ -1805,10 +1753,7 @@ cc_binary_with_abi(
cc_binary_with_abi( cc_binary_with_abi(
name = "kselftest_timers_valid_adjtimex", name = "kselftest_timers_valid_adjtimex",
srcs = ["tools/testing/selftests/timers/valid-adjtimex.c"], srcs = ["tools/testing/selftests/timers/valid-adjtimex.c"],
copts = [ copts = _KSELFTEST_COPTS,
"-O3",
"-DKTEST",
],
path_prefix = _KSELFTEST_DIR, path_prefix = _KSELFTEST_DIR,
target_compatible_with = ["@platforms//os:android"], target_compatible_with = ["@platforms//os:android"],
visibility = ["//visibility:private"], visibility = ["//visibility:private"],
@ -1818,7 +1763,7 @@ cc_binary_with_abi(
cc_binary_with_abi( cc_binary_with_abi(
name = "kselftest_net_socket", name = "kselftest_net_socket",
srcs = ["tools/testing/selftests/net/socket.c"], srcs = ["tools/testing/selftests/net/socket.c"],
copts = ["-Wno-gnu-variable-sized-type-not-at-end"], copts = _KSELFTEST_COPTS + ["-Wno-gnu-variable-sized-type-not-at-end"],
includes = ["tools/testing/selftests"], includes = ["tools/testing/selftests"],
path_prefix = _KSELFTEST_DIR, path_prefix = _KSELFTEST_DIR,
target_compatible_with = ["@platforms//os:android"], target_compatible_with = ["@platforms//os:android"],
@ -1829,6 +1774,7 @@ cc_binary_with_abi(
cc_binary_with_abi( cc_binary_with_abi(
name = "kselftest_net_reuseaddr_conflict", name = "kselftest_net_reuseaddr_conflict",
srcs = ["tools/testing/selftests/net/reuseaddr_conflict.c"], srcs = ["tools/testing/selftests/net/reuseaddr_conflict.c"],
copts = _KSELFTEST_COPTS,
includes = ["tools/testing/selftests"], includes = ["tools/testing/selftests"],
path_prefix = _KSELFTEST_DIR, path_prefix = _KSELFTEST_DIR,
target_compatible_with = ["@platforms//os:android"], target_compatible_with = ["@platforms//os:android"],
@ -1842,7 +1788,7 @@ cc_binary_with_abi(
"tools/testing/selftests/net/psock_lib.h", "tools/testing/selftests/net/psock_lib.h",
"tools/testing/selftests/net/psock_tpacket.c", "tools/testing/selftests/net/psock_tpacket.c",
], ],
copts = ["-Wno-gnu-variable-sized-type-not-at-end"], copts = _KSELFTEST_COPTS + ["-Wno-gnu-variable-sized-type-not-at-end"],
includes = ["tools/testing/selftests"], includes = ["tools/testing/selftests"],
path_prefix = _KSELFTEST_DIR, path_prefix = _KSELFTEST_DIR,
target_compatible_with = ["@platforms//os:android"], target_compatible_with = ["@platforms//os:android"],
@ -1853,6 +1799,7 @@ cc_binary_with_abi(
cc_binary_with_abi( cc_binary_with_abi(
name = "kselftest_capabilities_test_execve", name = "kselftest_capabilities_test_execve",
srcs = ["tools/testing/selftests/capabilities/test_execve.c"], srcs = ["tools/testing/selftests/capabilities/test_execve.c"],
copts = _KSELFTEST_COPTS,
path_prefix = _KSELFTEST_DIR, path_prefix = _KSELFTEST_DIR,
target_compatible_with = ["@platforms//os:android"], target_compatible_with = ["@platforms//os:android"],
visibility = ["//visibility:private"], visibility = ["//visibility:private"],
@ -1867,6 +1814,7 @@ cc_binary_with_abi(
name = "kselftest_capabilities_validate_cap", name = "kselftest_capabilities_validate_cap",
srcs = ["tools/testing/selftests/capabilities/validate_cap.c"], srcs = ["tools/testing/selftests/capabilities/validate_cap.c"],
out = "validate_cap", out = "validate_cap",
copts = _KSELFTEST_COPTS,
path_prefix = _KSELFTEST_DIR, path_prefix = _KSELFTEST_DIR,
target_compatible_with = ["@platforms//os:android"], target_compatible_with = ["@platforms//os:android"],
visibility = ["//visibility:private"], visibility = ["//visibility:private"],
@ -1882,7 +1830,7 @@ cc_binary_with_abi(
"tools/testing/selftests/clone3/clone3_selftests.h", "tools/testing/selftests/clone3/clone3_selftests.h",
"tools/testing/selftests/seccomp/seccomp_bpf.c", "tools/testing/selftests/seccomp/seccomp_bpf.c",
], ],
copts = [ copts = _KSELFTEST_COPTS + [
"-Wno-unused-function", "-Wno-unused-function",
"-D__GLIBC_PREREQ(a,b)", "-D__GLIBC_PREREQ(a,b)",
], ],
@ -1906,11 +1854,7 @@ cc_binary_with_abi(
"x86_64", "x86_64",
"x86", "x86",
], ],
copts = [ copts = _KSELFTEST_COPTS,
"-std=gnu99",
"-O2",
"-pthread",
],
includes = ["tools/testing/selftests"], includes = ["tools/testing/selftests"],
linkopts = ["-static"], linkopts = ["-static"],
path_prefix = _KSELFTEST_DIR, path_prefix = _KSELFTEST_DIR,
@ -1931,11 +1875,7 @@ cc_binary_with_abi(
"x86_64", "x86_64",
"x86", "x86",
], ],
copts = [ copts = _KSELFTEST_COPTS,
"-std=gnu99",
"-O2",
"-pthread",
],
includes = ["tools/testing/selftests"], includes = ["tools/testing/selftests"],
linkopts = ["-static"], linkopts = ["-static"],
path_prefix = _KSELFTEST_DIR, path_prefix = _KSELFTEST_DIR,
@ -1956,11 +1896,7 @@ cc_binary_with_abi(
"x86_64", "x86_64",
"x86", "x86",
], ],
copts = [ copts = _KSELFTEST_COPTS,
"-std=gnu99",
"-O2",
"-pthread",
],
includes = ["tools/testing/selftests"], includes = ["tools/testing/selftests"],
linkopts = ["-static"], linkopts = ["-static"],
path_prefix = _KSELFTEST_DIR, path_prefix = _KSELFTEST_DIR,
@ -1981,11 +1917,7 @@ cc_binary_with_abi(
"x86_64", "x86_64",
"x86", "x86",
], ],
copts = [ copts = _KSELFTEST_COPTS,
"-std=gnu99",
"-O2",
"-pthread",
],
includes = ["tools/testing/selftests"], includes = ["tools/testing/selftests"],
linkopts = ["-static"], linkopts = ["-static"],
path_prefix = _KSELFTEST_DIR, path_prefix = _KSELFTEST_DIR,
@ -2006,11 +1938,7 @@ cc_binary_with_abi(
"x86_64", "x86_64",
"x86", "x86",
], ],
copts = [ copts = _KSELFTEST_COPTS,
"-std=gnu99",
"-O2",
"-pthread",
],
includes = ["tools/testing/selftests"], includes = ["tools/testing/selftests"],
linkopts = [ linkopts = [
"-static", "-static",
@ -2035,11 +1963,7 @@ cc_binary_with_abi(
"x86_64", "x86_64",
"x86", "x86",
], ],
copts = [ copts = _KSELFTEST_COPTS,
"-std=gnu99",
"-O2",
"-pthread",
],
includes = ["tools/testing/selftests"], includes = ["tools/testing/selftests"],
linkopts = ["-static"], linkopts = ["-static"],
path_prefix = _KSELFTEST_DIR, path_prefix = _KSELFTEST_DIR,

View File

@ -69,14 +69,17 @@ properties:
- const: tx - const: tx
- const: tx_reply - const: tx_reply
- const: rx - const: rx
- const: rx_reply
minItems: 2 minItems: 2
mboxes: mboxes:
description: description:
List of phandle and mailbox channel specifiers. It should contain List of phandle and mailbox channel specifiers. It should contain
exactly one, two or three mailboxes; the first one or two for transmitting exactly one, two, three or four mailboxes; the first one or two for
messages ("tx") and another optional ("rx") for receiving notifications transmitting messages ("tx") and another optional ("rx") for receiving
and delayed responses, if supported by the platform. notifications and delayed responses, if supported by the platform.
The optional ("rx_reply") is for notifications completion interrupt,
if supported by the platform.
The number of mailboxes needed for transmitting messages depends on the The number of mailboxes needed for transmitting messages depends on the
type of channels exposed by the specific underlying mailbox controller; type of channels exposed by the specific underlying mailbox controller;
one single channel descriptor is enough if such channel is bidirectional, one single channel descriptor is enough if such channel is bidirectional,
@ -89,9 +92,10 @@ properties:
2 mbox / 2 shmem => SCMI TX and RX over 2 mailbox bidirectional channels 2 mbox / 2 shmem => SCMI TX and RX over 2 mailbox bidirectional channels
2 mbox / 1 shmem => SCMI TX over 2 mailbox unidirectional 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 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. Any other combination of mboxes and shmem is invalid.
minItems: 1 minItems: 1
maxItems: 3 maxItems: 4
shmem: shmem:
description: description:
@ -237,6 +241,37 @@ properties:
reg: reg:
const: 0x18 const: 0x18
protocol@19:
type: object
allOf:
- $ref: '#/$defs/protocol-node'
- $ref: /schemas/pinctrl/pinctrl.yaml
unevaluatedProperties: false
properties:
reg:
const: 0x19
patternProperties:
'-pins$':
type: object
allOf:
- $ref: /schemas/pinctrl/pincfg-node.yaml#
- $ref: /schemas/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 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.
required:
- reg
additionalProperties: false additionalProperties: false
$defs: $defs:
@ -390,6 +425,25 @@ examples:
scmi_powercap: protocol@18 { scmi_powercap: protocol@18 {
reg = <0x18>; reg = <0x18>;
}; };
scmi_pinctrl: protocol@19 {
reg = <0x19>;
i2c2-pins {
groups = "g_i2c2_a", "g_i2c2_b";
function = "f_i2c2";
};
mdio-pins {
groups = "g_avb_mdio";
drive-strength = <24>;
};
keys_pins: keys-pins {
pins = "gpio_5_17", "gpio_5_20", "gpio_5_22", "gpio_2_1";
bias-pull-up;
};
};
}; };
}; };

View File

@ -0,0 +1,34 @@
# 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

@ -1,31 +0,0 @@
# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
%YAML 1.2
---
$id: http://devicetree.org/schemas/hypervisor/mediatek,geniezone-hyp.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#
title: MediaTek GenieZone hypervisor
maintainers:
- Yingshiuan Pan <yingshiuan.pan@mediatek.com>
description:
This interface is designed for integrating GenieZone hypervisor into Android
Virtualization Framework(AVF) along with Crosvm as a VMM.
It acts like a wrapper for every hypercall to GenieZone hypervisor in
order to control guest VM lifecycles and virtual interrupt injections.
properties:
compatible:
const: mediatek,geniezone-hyp
required:
- compatible
additionalProperties: false
examples:
- |
hypervisor {
compatible = "mediatek,geniezone-hyp";
};

View File

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

View File

@ -85,6 +85,17 @@ is already free).
Should be called from a process context (might sleep). Should be called from a process context (might sleep).
::
int hwspin_lock_bust(struct hwspinlock *hwlock, unsigned int id);
After verifying the owner of the hwspinlock, release a previously acquired
hwspinlock; returns 0 on success, or an appropriate error code on failure
(e.g. -EOPNOTSUPP if the bust operation is not defined for the specific
hwspinlock).
Should be called from a process context (might sleep).
:: ::
int hwspin_lock_timeout(struct hwspinlock *hwlock, unsigned int timeout); int hwspin_lock_timeout(struct hwspinlock *hwlock, unsigned int timeout);

View File

@ -8796,8 +8796,8 @@ F: lib/vdso/
GENIEZONE HYPERVISOR DRIVER GENIEZONE HYPERVISOR DRIVER
M: Yingshiuan Pan <yingshiuan.pan@mediatek.com> M: Yingshiuan Pan <yingshiuan.pan@mediatek.com>
M: Ze-Yu Wang <ze-yu.wang@mediatek.com> M: Ze-Yu Wang <ze-yu.wang@mediatek.com>
M: Yi-De Wu <yi-de.wu@mediatek.com> M: Liju Chen <liju-clr.chen@mediatek.com>
F: Documentation/devicetree/bindings/hypervisor/mediatek,geniezone-hyp.yaml F: Documentation/devicetree/bindings/firmware/mediatek,geniezone.yaml
F: Documentation/virt/geniezone/ F: Documentation/virt/geniezone/
F: arch/arm64/geniezone/ F: arch/arm64/geniezone/
F: drivers/virt/geniezone/ F: drivers/virt/geniezone/

File diff suppressed because it is too large Load Diff

View File

@ -1421,7 +1421,6 @@
of_irq_get of_irq_get
of_irq_get_byname of_irq_get_byname
of_irq_parse_one of_irq_parse_one
of_machine_is_compatible
of_match_device of_match_device
of_match_node of_match_node
__of_mdiobus_register __of_mdiobus_register

View File

@ -1562,7 +1562,7 @@
of_graph_get_next_endpoint of_graph_get_next_endpoint
of_graph_get_remote_port_parent of_graph_get_remote_port_parent
of_icc_get of_icc_get
of_machine_is_compatible of_machine_compatible_match
of_property_read_u64_index of_property_read_u64_index
param_ops_ullong param_ops_ullong
phy_calibrate phy_calibrate

View File

@ -16,6 +16,7 @@
argv_free argv_free
argv_split argv_split
arm64_use_ng_mappings arm64_use_ng_mappings
__arm_smccc_hvc
__arm_smccc_smc __arm_smccc_smc
atomic_notifier_call_chain atomic_notifier_call_chain
atomic_notifier_chain_register atomic_notifier_chain_register
@ -23,21 +24,25 @@
autoremove_wake_function autoremove_wake_function
bcmp bcmp
__bitmap_clear __bitmap_clear
bitmap_free
bitmap_parse bitmap_parse
bitmap_parselist bitmap_parselist
bitmap_print_to_pagebuf bitmap_print_to_pagebuf
__bitmap_set __bitmap_set
bitmap_to_arr32 bitmap_to_arr32
bitmap_zalloc
blocking_notifier_call_chain blocking_notifier_call_chain
blocking_notifier_chain_register blocking_notifier_chain_register
blocking_notifier_chain_unregister blocking_notifier_chain_unregister
bpf_trace_run1 bpf_trace_run1
bpf_trace_run11
bpf_trace_run2 bpf_trace_run2
bpf_trace_run3 bpf_trace_run3
bpf_trace_run4 bpf_trace_run4
bpf_trace_run5 bpf_trace_run5
bpf_trace_run6 bpf_trace_run6
bpf_trace_run7 bpf_trace_run7
bpf_trace_run8
bpf_trace_run9 bpf_trace_run9
bus_get_dev_root bus_get_dev_root
bus_register bus_register
@ -50,9 +55,12 @@
cdev_alloc cdev_alloc
cdev_del cdev_del
cdev_init cdev_init
cgroup_taskset_first
cgroup_taskset_next
__check_object_size __check_object_size
class_create class_create
class_destroy class_destroy
class_register
class_unregister class_unregister
clk_disable clk_disable
clk_enable clk_enable
@ -87,6 +95,7 @@
cpufreq_quick_get cpufreq_quick_get
cpufreq_register_notifier cpufreq_register_notifier
cpufreq_unregister_notifier cpufreq_unregister_notifier
__cpuhp_remove_state
__cpuhp_setup_state __cpuhp_setup_state
cpu_number cpu_number
__cpu_online_mask __cpu_online_mask
@ -123,7 +132,6 @@
device_destroy device_destroy
device_for_each_child device_for_each_child
device_initialize device_initialize
device_property_present
device_register device_register
device_remove_file device_remove_file
device_set_wakeup_capable device_set_wakeup_capable
@ -216,6 +224,7 @@
dmam_alloc_attrs dmam_alloc_attrs
dma_map_page_attrs dma_map_page_attrs
dma_map_sgtable dma_map_sgtable
dmam_free_coherent
dma_mmap_attrs dma_mmap_attrs
dma_release_channel dma_release_channel
dma_request_chan dma_request_chan
@ -231,6 +240,7 @@
dma_unmap_page_attrs dma_unmap_page_attrs
dma_unmap_sg_attrs dma_unmap_sg_attrs
do_wait_intr do_wait_intr
down_read
down_write down_write
d_path d_path
driver_unregister driver_unregister
@ -241,12 +251,14 @@
drm_atomic_private_obj_fini drm_atomic_private_obj_fini
drm_atomic_private_obj_init drm_atomic_private_obj_init
drm_compat_ioctl drm_compat_ioctl
drm_connector_attach_encoder
drm_connector_cleanup drm_connector_cleanup
drm_connector_list_iter_begin drm_connector_list_iter_begin
drm_connector_list_iter_end drm_connector_list_iter_end
drm_connector_list_iter_next drm_connector_list_iter_next
drm_connector_register drm_connector_register
drm_connector_unregister drm_connector_unregister
drm_connector_update_edid_property
drm_crtc_add_crc_entry drm_crtc_add_crc_entry
__drm_crtc_commit_free __drm_crtc_commit_free
drm_crtc_wait_one_vblank drm_crtc_wait_one_vblank
@ -266,6 +278,7 @@
drm_kms_helper_hotplug_event drm_kms_helper_hotplug_event
drmm_mode_config_init drmm_mode_config_init
drm_mode_duplicate drm_mode_duplicate
drm_mode_match
drm_mode_probed_add drm_mode_probed_add
drm_modeset_lock drm_modeset_lock
drm_modeset_unlock drm_modeset_unlock
@ -303,8 +316,10 @@
free_pages free_pages
free_percpu free_percpu
freq_qos_update_request freq_qos_update_request
gcd
generic_file_llseek generic_file_llseek
generic_handle_irq generic_handle_irq
genlmsg_multicast_allns
genlmsg_put genlmsg_put
genl_register_family genl_register_family
genl_unregister_family genl_unregister_family
@ -358,9 +373,13 @@
i2c_smbus_write_i2c_block_data i2c_smbus_write_i2c_block_data
i2c_transfer i2c_transfer
i2c_transfer_buffer_flags i2c_transfer_buffer_flags
i2c_unregister_device
ida_alloc_range ida_alloc_range
ida_free ida_free
idr_alloc idr_alloc
idr_destroy
idr_find
idr_for_each
idr_remove idr_remove
init_dummy_netdev init_dummy_netdev
init_net init_net
@ -402,6 +421,7 @@
kasan_flag_enabled kasan_flag_enabled
kasprintf kasprintf
kernel_kobj kernel_kobj
kernfs_path_from_node
__kfifo_alloc __kfifo_alloc
__kfifo_free __kfifo_free
__kfifo_in __kfifo_in
@ -420,8 +440,10 @@
kmem_cache_destroy kmem_cache_destroy
kmem_cache_free kmem_cache_free
kmemdup kmemdup
kobject_add
kobject_create_and_add kobject_create_and_add
kobject_get kobject_get
kobject_init
kobject_init_and_add kobject_init_and_add
kobject_put kobject_put
kobject_uevent_env kobject_uevent_env
@ -433,6 +455,7 @@
kstrtoint kstrtoint
kstrtoint_from_user kstrtoint_from_user
kstrtoll kstrtoll
kstrtou16
kstrtou8 kstrtou8
kstrtouint kstrtouint
kstrtouint_from_user kstrtouint_from_user
@ -467,7 +490,6 @@
log_read_mmio log_read_mmio
log_write_mmio log_write_mmio
loops_per_jiffy loops_per_jiffy
lzo1x_decompress_safe
memchr memchr
memcmp memcmp
memcpy memcpy
@ -509,7 +531,10 @@
netif_receive_skb netif_receive_skb
netif_rx netif_rx
netif_tx_wake_queue netif_tx_wake_queue
nla_memcpy
nla_put nla_put
nla_put_64bit
nla_reserve
noop_llseek noop_llseek
nr_cpu_ids nr_cpu_ids
nsecs_to_jiffies nsecs_to_jiffies
@ -531,7 +556,6 @@
of_find_node_by_type of_find_node_by_type
of_find_node_opts_by_path of_find_node_opts_by_path
of_find_property of_find_property
of_fwnode_ops
of_get_child_by_name of_get_child_by_name
of_get_named_gpio of_get_named_gpio
of_get_next_available_child of_get_next_available_child
@ -563,6 +587,7 @@
of_reserved_mem_device_release of_reserved_mem_device_release
of_reserved_mem_lookup of_reserved_mem_lookup
of_root of_root
on_each_cpu_cond_mask
panic panic
panic_notifier_list panic_notifier_list
param_array_ops param_array_ops
@ -591,9 +616,9 @@
perf_event_release_kernel perf_event_release_kernel
perf_trace_buf_alloc perf_trace_buf_alloc
perf_trace_run_bpf_submit perf_trace_run_bpf_submit
pfn_is_map_memory
phy_power_off phy_power_off
phy_power_on phy_power_on
phy_set_mode_ext
pinconf_generic_dt_node_to_map pinconf_generic_dt_node_to_map
pinctrl_dev_get_drvdata pinctrl_dev_get_drvdata
pinctrl_lookup_state pinctrl_lookup_state
@ -629,7 +654,7 @@
power_supply_changed power_supply_changed
power_supply_get_by_name power_supply_get_by_name
power_supply_get_drvdata power_supply_get_drvdata
power_supply_get_property power_supply_put
power_supply_register power_supply_register
power_supply_set_property power_supply_set_property
power_supply_unregister power_supply_unregister
@ -659,13 +684,17 @@
_raw_read_unlock _raw_read_unlock
_raw_read_unlock_irqrestore _raw_read_unlock_irqrestore
_raw_spin_lock _raw_spin_lock
_raw_spin_lock_bh
_raw_spin_lock_irq _raw_spin_lock_irq
_raw_spin_lock_irqsave _raw_spin_lock_irqsave
_raw_spin_trylock _raw_spin_trylock
_raw_spin_unlock _raw_spin_unlock
_raw_spin_unlock_bh
_raw_spin_unlock_irq _raw_spin_unlock_irq
_raw_spin_unlock_irqrestore _raw_spin_unlock_irqrestore
_raw_write_lock
_raw_write_lock_irqsave _raw_write_lock_irqsave
_raw_write_unlock
_raw_write_unlock_irqrestore _raw_write_unlock_irqrestore
rb_erase rb_erase
rb_insert_color rb_insert_color
@ -684,6 +713,7 @@
register_die_notifier register_die_notifier
register_kretprobe register_kretprobe
register_netdev register_netdev
register_netdevice
register_pm_notifier register_pm_notifier
register_reboot_notifier register_reboot_notifier
register_restart_handler register_restart_handler
@ -708,13 +738,16 @@
remove_proc_entry remove_proc_entry
request_firmware request_firmware
request_firmware_direct request_firmware_direct
request_firmware_nowait
__request_region __request_region
request_threaded_irq request_threaded_irq
return_address
rps_needed rps_needed
rtc_class_close rtc_class_close
rtc_class_open rtc_class_open
rtc_read_time rtc_read_time
rtc_time64_to_tm rtc_time64_to_tm
rtnl_is_locked
rtnl_lock rtnl_lock
rtnl_unlock rtnl_unlock
runqueues runqueues
@ -730,6 +763,7 @@
set_cpus_allowed_ptr set_cpus_allowed_ptr
set_normalized_timespec64 set_normalized_timespec64
sg_alloc_table sg_alloc_table
sg_alloc_table_from_pages_segment
sg_free_table sg_free_table
sg_init_table sg_init_table
sg_next sg_next
@ -745,6 +779,7 @@
single_open single_open
single_release single_release
skb_clone skb_clone
skb_copy_bits
skb_copy_expand skb_copy_expand
skb_dequeue skb_dequeue
skb_dequeue_tail skb_dequeue_tail
@ -821,7 +856,9 @@
subsys_system_register subsys_system_register
__sw_hweight32 __sw_hweight32
__sw_hweight64 __sw_hweight64
__sw_hweight8
sync_file_create sync_file_create
synchronize_net
synchronize_rcu synchronize_rcu
syscon_regmap_lookup_by_phandle syscon_regmap_lookup_by_phandle
sysfs_add_file_to_group sysfs_add_file_to_group
@ -834,9 +871,11 @@
sysfs_emit sysfs_emit
sysfs_remove_file_ns sysfs_remove_file_ns
sysfs_remove_group sysfs_remove_group
sysfs_remove_link
system_cpucaps system_cpucaps
system_highpri_wq system_highpri_wq
system_long_wq system_long_wq
system_power_efficient_wq
system_state system_state
system_unbound_wq system_unbound_wq
system_wq system_wq
@ -863,6 +902,7 @@
__traceiter_android_vh_cpu_idle_exit __traceiter_android_vh_cpu_idle_exit
__traceiter_android_vh_cpuidle_psci_enter __traceiter_android_vh_cpuidle_psci_enter
__traceiter_android_vh_cpuidle_psci_exit __traceiter_android_vh_cpuidle_psci_exit
__traceiter_android_vh_is_fpsimd_save
__traceiter_clock_set_rate __traceiter_clock_set_rate
__traceiter_device_pm_callback_end __traceiter_device_pm_callback_end
__traceiter_device_pm_callback_start __traceiter_device_pm_callback_start
@ -872,6 +912,7 @@
__tracepoint_android_vh_cpu_idle_exit __tracepoint_android_vh_cpu_idle_exit
__tracepoint_android_vh_cpuidle_psci_enter __tracepoint_android_vh_cpuidle_psci_enter
__tracepoint_android_vh_cpuidle_psci_exit __tracepoint_android_vh_cpuidle_psci_exit
__tracepoint_android_vh_is_fpsimd_save
__tracepoint_clock_set_rate __tracepoint_clock_set_rate
__tracepoint_device_pm_callback_end __tracepoint_device_pm_callback_end
__tracepoint_device_pm_callback_start __tracepoint_device_pm_callback_start
@ -888,6 +929,7 @@
unregister_chrdev_region unregister_chrdev_region
unregister_kretprobe unregister_kretprobe
unregister_netdev unregister_netdev
unregister_netdevice_queue
unregister_pm_notifier unregister_pm_notifier
unregister_reboot_notifier unregister_reboot_notifier
up up
@ -936,6 +978,7 @@
v4l2_m2m_reqbufs v4l2_m2m_reqbufs
v4l2_m2m_streamoff v4l2_m2m_streamoff
v4l2_m2m_streamon v4l2_m2m_streamon
v4l2_subdev_init
v4l_bound_align_image v4l_bound_align_image
vb2_buffer_done vb2_buffer_done
vb2_dma_sg_memops vb2_dma_sg_memops
@ -972,6 +1015,57 @@
wakeup_source_register wakeup_source_register
wakeup_source_unregister wakeup_source_unregister
__warn_printk __warn_printk
xhci_enable_interrupter
xhci_get_endpoint_index
# required by cfg80211.ko
csum_partial
debugfs_rename
__dev_change_net_namespace
dev_close
__dev_get_by_index
dev_get_by_index
device_add
device_del
device_rename
do_trace_netlink_extack
get_net_ns_by_fd
get_net_ns_by_pid
inet_csk_get_port
init_uts_ns
key_put
keyring_alloc
kfree_sensitive
ktime_get_coarse_with_offset
netdev_err
netlink_broadcast
netlink_register_notifier
netlink_unicast
netlink_unregister_notifier
net_ns_type_operations
nla_find
__nla_parse
__nla_validate
__pskb_pull_tail
__put_net
register_netdevice_notifier
register_pernet_device
rfkill_alloc
rfkill_blocked
rfkill_destroy
rfkill_register
rfkill_resume_polling
rfkill_set_hw_state_reason
rfkill_unregister
skb_add_rx_frag
__sock_create
sock_release
__sw_hweight16
unregister_netdevice_notifier
unregister_pernet_device
verify_pkcs7_signature
wireless_nlevent_flush
x509_load_certificate_list
# required by clk_exynos.ko # required by clk_exynos.ko
clk_hw_get_parent clk_hw_get_parent
@ -1015,9 +1109,9 @@
drm_modeset_lock_single_interruptible drm_modeset_lock_single_interruptible
drm_object_property_set_value drm_object_property_set_value
__drm_printfn_debug __drm_printfn_debug
hdmi_drm_infoframe_init
i2c_add_adapter i2c_add_adapter
memchr_inv memchr_inv
__sw_hweight8
# required by drm_ttm_helper.ko # required by drm_ttm_helper.ko
drm_print_bits drm_print_bits
@ -1037,7 +1131,6 @@
kstat kstat
nr_irqs nr_irqs
register_console register_console
return_address
stack_trace_save_tsk stack_trace_save_tsk
touch_softlockup_watchdog touch_softlockup_watchdog
__traceiter_android_rvh_arm64_serror_panic __traceiter_android_rvh_arm64_serror_panic
@ -1045,6 +1138,8 @@
__traceiter_android_rvh_do_el1_undef __traceiter_android_rvh_do_el1_undef
__traceiter_android_rvh_handle_bad_stack __traceiter_android_rvh_handle_bad_stack
__traceiter_android_vh_ipi_stop __traceiter_android_vh_ipi_stop
__traceiter_android_vh_logbuf
__traceiter_android_vh_logbuf_pr_cont
__traceiter_irq_handler_entry __traceiter_irq_handler_entry
__traceiter_irq_handler_exit __traceiter_irq_handler_exit
__traceiter_rwmmio_post_read __traceiter_rwmmio_post_read
@ -1056,6 +1151,8 @@
__tracepoint_android_rvh_do_el1_undef __tracepoint_android_rvh_do_el1_undef
__tracepoint_android_rvh_handle_bad_stack __tracepoint_android_rvh_handle_bad_stack
__tracepoint_android_vh_ipi_stop __tracepoint_android_vh_ipi_stop
__tracepoint_android_vh_logbuf
__tracepoint_android_vh_logbuf_pr_cont
__tracepoint_irq_handler_entry __tracepoint_irq_handler_entry
__tracepoint_irq_handler_exit __tracepoint_irq_handler_exit
__tracepoint_rwmmio_post_read __tracepoint_rwmmio_post_read
@ -1065,12 +1162,15 @@
# required by dwc3-exynos-usb.ko # required by dwc3-exynos-usb.ko
device_create_managed_software_node device_create_managed_software_node
device_property_present
platform_device_add platform_device_add
platform_device_add_resources platform_device_add_resources
platform_device_alloc platform_device_alloc
platform_device_del platform_device_del
platform_device_put platform_device_put
pm_runtime_allow pm_runtime_allow
__traceiter_dwc3_ep_queue
__tracepoint_dwc3_ep_queue
usb_gadget_set_state usb_gadget_set_state
usb_otg_state_string usb_otg_state_string
usb_role_switch_set_role usb_role_switch_set_role
@ -1083,10 +1183,6 @@
arch_freq_scale arch_freq_scale
available_idle_cpu available_idle_cpu
balance_push_callback balance_push_callback
bpf_trace_run11
bpf_trace_run8
cgroup_taskset_first
cgroup_taskset_next
check_preempt_curr check_preempt_curr
cpufreq_add_update_util_hook cpufreq_add_update_util_hook
cpufreq_disable_fast_switch cpufreq_disable_fast_switch
@ -1096,7 +1192,6 @@
cpufreq_register_governor cpufreq_register_governor
cpufreq_remove_update_util_hook cpufreq_remove_update_util_hook
cpufreq_this_cpu_can_update cpufreq_this_cpu_can_update
__cpuhp_remove_state
cpuidle_governor_latency_req cpuidle_governor_latency_req
cpuidle_register_governor cpuidle_register_governor
cpupri_find_fitness cpupri_find_fitness
@ -1113,7 +1208,6 @@
memory_read_from_buffer memory_read_from_buffer
migrate_swap migrate_swap
ns_capable ns_capable
pfn_is_map_memory
pick_highest_pushable_task pick_highest_pushable_task
__put_cred __put_cred
raw_spin_rq_lock_nested raw_spin_rq_lock_nested
@ -1155,7 +1249,6 @@
__traceiter_android_rvh_select_task_rq_rt __traceiter_android_rvh_select_task_rq_rt
__traceiter_android_rvh_try_to_wake_up __traceiter_android_rvh_try_to_wake_up
__traceiter_android_rvh_uclamp_eff_get __traceiter_android_rvh_uclamp_eff_get
__traceiter_android_rvh_update_cpu_capacity
__traceiter_android_rvh_update_misfit_status __traceiter_android_rvh_update_misfit_status
__traceiter_android_rvh_wake_up_new_task __traceiter_android_rvh_wake_up_new_task
__traceiter_android_vh_binder_restore_priority __traceiter_android_vh_binder_restore_priority
@ -1164,7 +1257,6 @@
__traceiter_android_vh_scheduler_tick __traceiter_android_vh_scheduler_tick
__traceiter_android_vh_syscall_prctl_finished __traceiter_android_vh_syscall_prctl_finished
__traceiter_binder_transaction_received __traceiter_binder_transaction_received
__traceiter_cpu_frequency_limits
__tracepoint_android_rvh_can_migrate_task __tracepoint_android_rvh_can_migrate_task
__tracepoint_android_rvh_check_preempt_wakeup __tracepoint_android_rvh_check_preempt_wakeup
__tracepoint_android_rvh_cpu_cgroup_attach __tracepoint_android_rvh_cpu_cgroup_attach
@ -1186,7 +1278,6 @@
__tracepoint_android_rvh_select_task_rq_rt __tracepoint_android_rvh_select_task_rq_rt
__tracepoint_android_rvh_try_to_wake_up __tracepoint_android_rvh_try_to_wake_up
__tracepoint_android_rvh_uclamp_eff_get __tracepoint_android_rvh_uclamp_eff_get
__tracepoint_android_rvh_update_cpu_capacity
__tracepoint_android_rvh_update_misfit_status __tracepoint_android_rvh_update_misfit_status
__tracepoint_android_rvh_wake_up_new_task __tracepoint_android_rvh_wake_up_new_task
__tracepoint_android_vh_binder_restore_priority __tracepoint_android_vh_binder_restore_priority
@ -1195,7 +1286,6 @@
__tracepoint_android_vh_scheduler_tick __tracepoint_android_vh_scheduler_tick
__tracepoint_android_vh_syscall_prctl_finished __tracepoint_android_vh_syscall_prctl_finished
__tracepoint_binder_transaction_received __tracepoint_binder_transaction_received
__tracepoint_cpu_frequency_limits
uclamp_eff_value uclamp_eff_value
update_rq_clock update_rq_clock
wake_up_if_idle wake_up_if_idle
@ -1214,7 +1304,6 @@
# required by exynos-coresight-etm.ko # required by exynos-coresight-etm.ko
__cpuhp_setup_state_cpuslocked __cpuhp_setup_state_cpuslocked
# required by exynos-cpufreq.ko # required by exynos-cpufreq.ko
cpufreq_freq_transition_begin cpufreq_freq_transition_begin
cpufreq_freq_transition_end cpufreq_freq_transition_end
@ -1238,6 +1327,7 @@
__tracepoint_ipi_raise __tracepoint_ipi_raise
# required by exynos-drm.ko # required by exynos-drm.ko
class_create_file_ns
component_add component_add
component_bind_all component_bind_all
component_del component_del
@ -1249,6 +1339,7 @@
devm_drm_panel_bridge_add_typed devm_drm_panel_bridge_add_typed
__do_once_done __do_once_done
__do_once_start __do_once_start
drm_add_edid_modes
drm_atomic_add_affected_connectors drm_atomic_add_affected_connectors
drm_atomic_add_affected_planes drm_atomic_add_affected_planes
drm_atomic_bridge_chain_disable drm_atomic_bridge_chain_disable
@ -1295,6 +1386,8 @@
drm_bridge_add drm_bridge_add
drm_bridge_attach drm_bridge_attach
drm_bridge_chain_mode_set drm_bridge_chain_mode_set
drm_connector_atomic_hdr_metadata_equal
drm_connector_attach_hdr_output_metadata_property
drm_connector_init drm_connector_init
drm_crtc_enable_color_mgmt drm_crtc_enable_color_mgmt
drm_crtc_handle_vblank drm_crtc_handle_vblank
@ -1305,6 +1398,7 @@
drm_crtc_vblank_on drm_crtc_vblank_on
drm_crtc_vblank_put drm_crtc_vblank_put
drm_display_mode_to_videomode drm_display_mode_to_videomode
drm_edid_to_sad
drm_format_info drm_format_info
drm_framebuffer_init drm_framebuffer_init
drm_gem_create_mmap_offset drm_gem_create_mmap_offset
@ -1320,17 +1414,22 @@
drm_kms_helper_poll_fini drm_kms_helper_poll_fini
drm_kms_helper_poll_init drm_kms_helper_poll_init
__drmm_add_action_or_reset __drmm_add_action_or_reset
drm_match_cea_mode
__drmm_crtc_alloc_with_planes __drmm_crtc_alloc_with_planes
__drmm_encoder_alloc __drmm_encoder_alloc
drmm_kmalloc drmm_kmalloc
drm_mode_config_helper_resume drm_mode_config_helper_resume
drm_mode_config_helper_suspend drm_mode_config_helper_suspend
drm_mode_config_reset drm_mode_config_reset
drm_mode_copy
drm_mode_destroy
drm_mode_is_420_only
drm_modeset_acquire_fini drm_modeset_acquire_fini
drm_modeset_acquire_init drm_modeset_acquire_init
drm_modeset_backoff drm_modeset_backoff
drm_modeset_drop_locks drm_modeset_drop_locks
drm_modeset_lock_all_ctx drm_modeset_lock_all_ctx
drm_mode_sort
__drmm_universal_plane_alloc __drmm_universal_plane_alloc
drm_plane_create_alpha_property drm_plane_create_alpha_property
drm_plane_create_blend_mode_property drm_plane_create_blend_mode_property
@ -1358,6 +1457,9 @@
drm_writeback_cleanup_job drm_writeback_cleanup_job
drm_writeback_connector_init drm_writeback_connector_init
drm_writeback_queue_job drm_writeback_queue_job
get_options
hdmi_drm_infoframe_pack_only
irq_set_irq_type
mipi_dsi_create_packet mipi_dsi_create_packet
mipi_dsi_dcs_set_column_address mipi_dsi_dcs_set_column_address
mipi_dsi_dcs_set_page_address mipi_dsi_dcs_set_page_address
@ -1370,6 +1472,8 @@
phy_init phy_init
platform_find_device_by_driver platform_find_device_by_driver
seq_release seq_release
strnchr
v4l2_match_dv_timings
# required by exynos-dsufreq.ko # required by exynos-dsufreq.ko
nsec_to_clock_t nsec_to_clock_t
@ -1381,30 +1485,33 @@
# required by exynos-itmon-v2.ko # required by exynos-itmon-v2.ko
int_pow int_pow
# required by exynos-mpam.ko
kobject_move
# required by exynos-msc-dsu.ko
bitmap_alloc
# required by exynos-pd.ko # required by exynos-pd.ko
of_genpd_add_provider_simple of_genpd_add_provider_simple
pm_genpd_add_subdomain pm_genpd_add_subdomain
pm_genpd_init pm_genpd_init
# required by exynos-pkvm-module.ko # required by exynos-pkvm-module.ko
__arm_smccc_hvc
kimage_vaddr kimage_vaddr
on_each_cpu_cond_mask
__pkvm_load_el2_module __pkvm_load_el2_module
__pkvm_register_el2_call __pkvm_register_el2_call
# required by exynos-pkvm-s2mpu.ko # required by exynos-pkvm-s2mpu.ko
kvm_iommu_register_driver kvm_iommu_register_driver
# required by exynos-reboot.ko # required by exynos-reboot.ko
pm_power_off pm_power_off
# required by exynos-seh.ko
dmam_free_coherent
# required by exynos-ssld.ko # required by exynos-ssld.ko
driver_register driver_register
# required by exynos-usb-audio-offloading.ko # required by exynos-usb-audio-offloading.ko
phy_set_mode_ext
snd_ctl_add snd_ctl_add
snd_ctl_new1 snd_ctl_new1
snd_usb_autoresume snd_usb_autoresume
@ -1413,8 +1520,6 @@
usb_altnum_to_altsetting usb_altnum_to_altsetting
usb_choose_configuration usb_choose_configuration
usb_ifnum_to_if usb_ifnum_to_if
xhci_enable_interrupter
xhci_get_endpoint_index
xhci_get_ep_ctx xhci_get_ep_ctx
# required by exynos9955_sound.ko # required by exynos9955_sound.ko
@ -1449,14 +1554,12 @@
bpf_trace_run10 bpf_trace_run10
devfreq_add_device devfreq_add_device
devfreq_add_governor devfreq_add_governor
devfreq_monitor_stop
devfreq_recommended_opp devfreq_recommended_opp
devfreq_register_opp_notifier devfreq_register_opp_notifier
devfreq_remove_device devfreq_remove_device
devfreq_unregister_opp_notifier devfreq_unregister_opp_notifier
dev_pm_opp_disable dev_pm_opp_disable
dev_pm_opp_get_freq_indexed dev_pm_opp_get_freq_indexed
perf_event_read_value
update_devfreq update_devfreq
# required by exynos_mct_v3.ko # required by exynos_mct_v3.ko
@ -1470,6 +1573,30 @@
hex_dump_to_buffer hex_dump_to_buffer
vb2_poll vb2_poll
# required by exynos_mpam_policy.ko
current_time
d_add
d_alloc_name
d_make_root
dput
fs_kobj
get_next_ino
get_tree_single
init_user_ns
kill_litter_super
new_inode
register_filesystem
simple_dir_inode_operations
simple_dir_operations
simple_statfs
sysfs_create_mount_point
sysfs_remove_mount_point
__traceiter_android_rvh_sched_fork
__traceiter_android_vh_cgroup_attach
__tracepoint_android_rvh_sched_fork
__tracepoint_android_vh_cgroup_attach
unregister_filesystem
# required by exynos_thermal_v2.ko # required by exynos_thermal_v2.ko
devm_thermal_of_zone_register devm_thermal_of_zone_register
kthread_flush_work kthread_flush_work
@ -1535,7 +1662,6 @@
v4l2_device_set_name v4l2_device_set_name
v4l2_device_unregister_subdev v4l2_device_unregister_subdev
v4l2_subdev_call_wrappers v4l2_subdev_call_wrappers
v4l2_subdev_init
vb2_mmap vb2_mmap
# required by freq-qos-tracer.ko # required by freq-qos-tracer.ko
@ -1568,13 +1694,14 @@
# required by hts.ko # required by hts.ko
devm_devfreq_register_notifier devm_devfreq_register_notifier
kernel_cpustat kernel_cpustat
kernfs_path_from_node
__traceiter_android_rvh_cpufreq_transition __traceiter_android_rvh_cpufreq_transition
__traceiter_android_vh_free_task __traceiter_android_vh_free_task
__traceiter_android_vh_is_fpsimd_save
__tracepoint_android_rvh_cpufreq_transition __tracepoint_android_rvh_cpufreq_transition
__tracepoint_android_vh_free_task __tracepoint_android_vh_free_task
__tracepoint_android_vh_is_fpsimd_save
# required by hwdecomp.ko
lzo1x_decompress_safe
# required by i2c-dev.ko # required by i2c-dev.ko
bus_register_notifier bus_register_notifier
bus_unregister_notifier bus_unregister_notifier
@ -1616,13 +1743,19 @@
i3c_driver_register_with_owner i3c_driver_register_with_owner
i3c_driver_unregister i3c_driver_unregister
# required by lealt-mon.ko
perf_event_read_value
# required by leds-s2mf301.ko # required by leds-s2mf301.ko
devm_led_classdev_register_ext devm_led_classdev_register_ext
# required by leds-s2mpb02.ko
led_classdev_register_ext
led_classdev_unregister
# required by mcDrvModule.ko # required by mcDrvModule.ko
crypto_shash_final crypto_shash_final
crypto_shash_update crypto_shash_update
down_read
freezer_active freezer_active
freezing_slow_path freezing_slow_path
get_zeroed_page get_zeroed_page
@ -1653,17 +1786,15 @@
rtc_set_time rtc_set_time
rtc_tm_to_time64 rtc_tm_to_time64
sched_setscheduler sched_setscheduler
sysfs_remove_link
__wake_up_locked_key __wake_up_locked_key
__wake_up_sync __wake_up_sync
# required by npu.ko # required by npu.ko
class_register cpuidle_pause_and_lock
cpuidle_resume_and_unlock
vsprintf vsprintf
# required by pablo-libs.ko # required by pablo-libs.ko
bitmap_free
bitmap_zalloc
bsearch bsearch
device_get_dma_attr device_get_dma_attr
__dynamic_pr_debug __dynamic_pr_debug
@ -1687,12 +1818,9 @@
devm_gpiod_get devm_gpiod_get
devm_regulator_get_optional devm_regulator_get_optional
drm_bridge_remove drm_bridge_remove
drm_connector_attach_encoder
drm_connector_update_edid_property
drm_mode_convert_to_umode drm_mode_convert_to_umode
drm_mode_debug_printmodeline drm_mode_debug_printmodeline
drm_mode_equal drm_mode_equal
drm_mode_match
drm_panel_add drm_panel_add
drm_panel_disable drm_panel_disable
drm_panel_enable drm_panel_enable
@ -1735,6 +1863,7 @@
gpiochip_unlock_as_irq gpiochip_unlock_as_irq
irq_domain_xlate_twocell irq_domain_xlate_twocell
irq_set_chained_handler_and_data irq_set_chained_handler_and_data
of_fwnode_ops
of_node_name_eq of_node_name_eq
pinctrl_add_gpio_range pinctrl_add_gpio_range
pinctrl_force_sleep pinctrl_force_sleep
@ -1771,7 +1900,6 @@
# required by s2mf301_mfd.ko # required by s2mf301_mfd.ko
i2c_new_dummy_device i2c_new_dummy_device
i2c_smbus_write_word_data i2c_smbus_write_word_data
i2c_unregister_device
__irq_alloc_descs __irq_alloc_descs
# required by s2p_rtc.ko # required by s2p_rtc.ko
@ -1819,10 +1947,20 @@
# required by samsung_dma_heap.ko # required by samsung_dma_heap.ko
anon_inode_getfile anon_inode_getfile
contig_page_data
deferred_free
dmabuf_page_pool_alloc
dmabuf_page_pool_create
dmabuf_page_pool_destroy
dmabuf_page_pool_free
dmabuf_page_pool_get_size
dma_heap_add dma_heap_add
dma_heap_get_dev dma_heap_get_dev
dma_heap_get_drvdata dma_heap_get_drvdata
dma_heap_get_name dma_heap_get_name
is_dma_buf_file
mod_node_page_state
register_shrinker
# required by samsung_iommu_v9.ko # required by samsung_iommu_v9.ko
device_link_add device_link_add
@ -1852,25 +1990,19 @@
# required by scsc_bt.ko # required by scsc_bt.ko
crc_ccitt crc_ccitt
hci_recv_frame
hci_uart_register_device_priv
hci_uart_tx_wakeup
hci_uart_unregister_device
param_ops_ullong param_ops_ullong
__serdev_device_driver_register
skb_split skb_split
tty_dev_name_to_number
tty_kclose
tty_kopen_exclusive
tty_lock
tty_mode_ioctl
tty_register_ldisc
tty_set_ldisc
tty_set_termios
tty_unlock
tty_unregister_ldisc
# required by scsc_logring.ko # required by scsc_logring.ko
dev_vprintk_emit dev_vprintk_emit
vprintk_emit vprintk_emit
# required by scsc_mx.ko # required by scsc_mx.ko
genlmsg_multicast_allns
__kfifo_from_user __kfifo_from_user
kobject_uevent kobject_uevent
@ -1879,6 +2011,7 @@
of_property_read_variable_u16_array of_property_read_variable_u16_array
pci_clear_master pci_clear_master
pci_enable_wake pci_enable_wake
pci_load_and_free_saved_state
pcim_enable_device pcim_enable_device
pcim_iomap_regions pcim_iomap_regions
pcim_iomap_table pcim_iomap_table
@ -1891,6 +2024,7 @@
# required by scsc_wlan.ko # required by scsc_wlan.ko
arp_tbl arp_tbl
dev_alloc_name dev_alloc_name
dev_change_flags
__dev_queue_xmit __dev_queue_xmit
dev_set_threaded dev_set_threaded
down_trylock down_trylock
@ -1912,29 +2046,29 @@
__netif_napi_del __netif_napi_del
netif_schedule_queue netif_schedule_queue
netif_tx_stop_all_queues netif_tx_stop_all_queues
netlink_broadcast
nla_memcpy
nla_put_64bit
nla_put_nohdr nla_put_nohdr
nla_reserve
_raw_read_lock_bh _raw_read_lock_bh
_raw_read_unlock_bh _raw_read_unlock_bh
_raw_spin_lock_bh
_raw_spin_unlock_bh
_raw_write_lock
_raw_write_lock_bh _raw_write_lock_bh
_raw_write_unlock
_raw_write_unlock_bh _raw_write_unlock_bh
register_inet6addr_notifier register_inet6addr_notifier
register_inetaddr_notifier register_inetaddr_notifier
register_netdevice
rtnl_is_locked
skb_copy skb_copy
skb_copy_bits
synchronize_net
unregister_inet6addr_notifier unregister_inet6addr_notifier
unregister_inetaddr_notifier unregister_inetaddr_notifier
unregister_netdevice_queue
# required by scsi_srpmb.ko
blk_execute_rq
blk_mq_alloc_request
blk_mq_free_request
blk_rq_map_kern
scsi_block_when_processing_errors
__scsi_device_lookup_by_target
scsi_execute_cmd
scsi_print_sense_hdr
sdev_prefix_printk
wakeup_source_add
wakeup_source_remove
# required by sec_ts.ko # required by sec_ts.ko
input_allocate_device input_allocate_device
@ -2007,14 +2141,10 @@
drm_syncobj_replace_fence drm_syncobj_replace_fence
__fdget __fdget
__folio_put __folio_put
gcd
get_random_u32 get_random_u32
__get_task_comm __get_task_comm
handle_simple_irq handle_simple_irq
ida_destroy ida_destroy
idr_destroy
idr_find
idr_for_each
idr_get_next idr_get_next
idr_replace idr_replace
jiffies64_to_msecs jiffies64_to_msecs
@ -2053,7 +2183,6 @@
seq_putc seq_putc
seq_write seq_write
set_page_dirty set_page_dirty
sg_alloc_table_from_pages_segment
shmem_file_setup shmem_file_setup
shmem_read_mapping_page_gfp shmem_read_mapping_page_gfp
si_meminfo si_meminfo
@ -2163,7 +2292,6 @@
pm_runtime_get_if_active pm_runtime_get_if_active
pm_wakeup_dev_event pm_wakeup_dev_event
proc_symlink proc_symlink
request_firmware_nowait
snd_device_free snd_device_free
snd_dma_alloc_dir_pages snd_dma_alloc_dir_pages
snd_dma_free_pages snd_dma_free_pages
@ -2233,10 +2361,10 @@
try_module_get try_module_get
# required by ufs-exynos-core.ko # required by ufs-exynos-core.ko
blk_crypto_reprogram_all_keys
blk_mq_unique_tag blk_mq_unique_tag
blk_queue_update_dma_alignment blk_queue_update_dma_alignment
kobject_add devm_blk_crypto_profile_init
kobject_init
of_cpu_node_to_id of_cpu_node_to_id
__traceiter_android_vh_ufs_check_int_errors __traceiter_android_vh_ufs_check_int_errors
__traceiter_android_vh_ufs_compl_command __traceiter_android_vh_ufs_compl_command
@ -2286,9 +2414,6 @@
usb_gstrings_attach usb_gstrings_attach
usb_os_desc_prepare_interf_dir usb_os_desc_prepare_interf_dir
# required by usb_notifier.ko
power_supply_put
# required by usb_notify_layer.ko # required by usb_notify_layer.ko
kthread_complete_and_exit kthread_complete_and_exit
usb_speed_string usb_speed_string
@ -2314,7 +2439,6 @@
del_gendisk del_gendisk
device_add_disk device_add_disk
flush_dcache_page flush_dcache_page
kstrtou16
memparse memparse
memset64 memset64
put_disk put_disk
@ -2335,31 +2459,15 @@
zs_pool_stats zs_pool_stats
zs_unmap_object zs_unmap_object
# required by xhci-exynos-audio.ko # required by xhci-sideband.ko
dma_pool_alloc dma_get_sgtable_attrs
dma_pool_free
__kmalloc_node
kmalloc_node_trace kmalloc_node_trace
xhci_add_endpoint xhci_create_secondary_interrupter
xhci_disable_interrupter
xhci_initialize_ring_info xhci_initialize_ring_info
xhci_remove_secondary_interrupter
# required by xhci-exynos.ko xhci_set_interrupter_moderation
device_property_read_u32_array xhci_stop_endpoint_sync
device_set_wakeup_enable
devm_clk_get_optional
devm_usb_get_phy_by_phandle
of_usb_host_tpl_support
pci_bus_type
usb_add_hcd
__usb_create_hcd
usb_disabled
usb_put_hcd
usb_remove_hcd
xhci_gen_setup
xhci_init_driver
xhci_resume
xhci_run
xhci_suspend
# required by xperf.ko # required by xperf.ko
cpufreq_quick_get_max cpufreq_quick_get_max

View File

@ -1,19 +1,43 @@
[abi_symbol_list] [abi_symbol_list]
blkcg_activate_policy
blkcg_deactivate_policy
blkcg_root
blkdev_get_by_path blkdev_get_by_path
blkdev_issue_flush 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_queue_rq_timeout
blk_req_needs_zone_write_lock
__blk_req_zone_write_lock
__blk_req_zone_write_unlock
caches_clean_inval_pou caches_clean_inval_pou
cleancache_register_ops cleancache_register_ops
copy_page copy_page
_dev_alert _dev_alert
__devm_alloc_percpu __devm_alloc_percpu
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
file_ra_state_init file_ra_state_init
file_write_and_wait_range file_write_and_wait_range
generic_perform_write generic_perform_write
getboottime64 getboottime64
get_options
__get_task_ioprio __get_task_ioprio
gpiochip_find gpiochip_find
gs_alloc_req
gserial_free_line
gserial_resume
gserial_suspend
gs_free_req
kick_all_cpus_sync kick_all_cpus_sync
netlink_ack
param_get_uint param_get_uint
param_set_uint param_set_uint
proc_set_size proc_set_size
@ -36,21 +60,22 @@
__traceiter_android_rvh_do_sp_pc_abort __traceiter_android_rvh_do_sp_pc_abort
__traceiter_android_rvh_panic_unhandled __traceiter_android_rvh_panic_unhandled
__traceiter_android_rvh_report_bug __traceiter_android_rvh_report_bug
__traceiter_android_vh_cache_show
__traceiter_android_vh_exit_mm
__traceiter_android_vh_is_fpsimd_save __traceiter_android_vh_is_fpsimd_save
__traceiter_android_vh_logbuf __traceiter_android_vh_logbuf
__traceiter_android_vh_logbuf_pr_cont __traceiter_android_vh_logbuf_pr_cont
__traceiter_android_vh_madvise_swapin_walk_pmd_entry __traceiter_android_vh_madvise_swapin_walk_pmd_entry
__traceiter_android_vh_meminfo_proc_show
__traceiter_android_vh_print_slabinfo_header
__traceiter_android_vh_process_madvise __traceiter_android_vh_process_madvise
__traceiter_android_vh_ptype_head
__traceiter_android_vh_show_mem
__traceiter_android_vh_show_smap __traceiter_android_vh_show_smap
__traceiter_android_vh_smaps_pte_entry __traceiter_android_vh_smaps_pte_entry
__traceiter_android_vh_try_to_freeze_todo __traceiter_android_vh_try_to_freeze_todo
__traceiter_android_vh_try_to_freeze_todo_unfrozen __traceiter_android_vh_try_to_freeze_todo_unfrozen
__traceiter_android_vh_watchdog_timer_softlockup __traceiter_android_vh_watchdog_timer_softlockup
__traceiter_android_vh_meminfo_proc_show
__traceiter_android_vh_exit_mm
__traceiter_android_vh_show_mem
__traceiter_android_vh_print_slabinfo_header
__traceiter_android_vh_cache_show
__traceiter_console __traceiter_console
__traceiter_workqueue_execute_start __traceiter_workqueue_execute_start
__tracepoint_android_rvh_arm64_serror_panic __tracepoint_android_rvh_arm64_serror_panic
@ -62,21 +87,22 @@
__tracepoint_android_rvh_do_sp_pc_abort __tracepoint_android_rvh_do_sp_pc_abort
__tracepoint_android_rvh_panic_unhandled __tracepoint_android_rvh_panic_unhandled
__tracepoint_android_rvh_report_bug __tracepoint_android_rvh_report_bug
__tracepoint_android_vh_cache_show
__tracepoint_android_vh_exit_mm
__tracepoint_android_vh_is_fpsimd_save __tracepoint_android_vh_is_fpsimd_save
__tracepoint_android_vh_logbuf __tracepoint_android_vh_logbuf
__tracepoint_android_vh_logbuf_pr_cont __tracepoint_android_vh_logbuf_pr_cont
__tracepoint_android_vh_madvise_swapin_walk_pmd_entry __tracepoint_android_vh_madvise_swapin_walk_pmd_entry
__tracepoint_android_vh_meminfo_proc_show
__tracepoint_android_vh_print_slabinfo_header
__tracepoint_android_vh_process_madvise __tracepoint_android_vh_process_madvise
__tracepoint_android_vh_ptype_head
__tracepoint_android_vh_show_mem
__tracepoint_android_vh_show_smap __tracepoint_android_vh_show_smap
__tracepoint_android_vh_smaps_pte_entry __tracepoint_android_vh_smaps_pte_entry
__tracepoint_android_vh_try_to_freeze_todo __tracepoint_android_vh_try_to_freeze_todo
__tracepoint_android_vh_try_to_freeze_todo_unfrozen __tracepoint_android_vh_try_to_freeze_todo_unfrozen
__tracepoint_android_vh_watchdog_timer_softlockup __tracepoint_android_vh_watchdog_timer_softlockup
__tracepoint_android_vh_meminfo_proc_show
__tracepoint_android_vh_exit_mm
__tracepoint_android_vh_show_mem
__tracepoint_android_vh_print_slabinfo_header
__tracepoint_android_vh_cache_show
__tracepoint_console __tracepoint_console
__tracepoint_workqueue_execute_start __tracepoint_workqueue_execute_start
usb_set_device_state usb_set_device_state

View File

@ -32,6 +32,7 @@
proc_create_net_single_write proc_create_net_single_write
snmp_fold_field snmp_fold_field
call_usermodehelper call_usermodehelper
pm_wakeup_irq
nla_append nla_append
skb_append skb_append
sysctl_max_skb_frags sysctl_max_skb_frags
@ -45,6 +46,10 @@
drop_super drop_super
mm_trace_rss_stat mm_trace_rss_stat
__kfifo_len_r __kfifo_len_r
__tracepoint_android_vh_dc_send_copy
__traceiter_android_vh_dc_send_copy
__tracepoint_android_vh_dc_receive
__traceiter_android_vh_dc_receive
__tracepoint_android_vh_shrink_slab_bypass __tracepoint_android_vh_shrink_slab_bypass
__traceiter_android_vh_shrink_slab_bypass __traceiter_android_vh_shrink_slab_bypass
__tracepoint_android_vh_do_shrink_slab __tracepoint_android_vh_do_shrink_slab

View File

@ -1528,7 +1528,7 @@
of_irq_find_parent of_irq_find_parent
of_irq_get of_irq_get
of_irq_get_byname of_irq_get_byname
of_machine_is_compatible of_machine_compatible_match
of_match_device of_match_device
of_match_node of_match_node
__of_mdiobus_register __of_mdiobus_register

View File

@ -1714,7 +1714,6 @@
of_irq_get_byname of_irq_get_byname
of_irq_parse_one of_irq_parse_one
of_irq_to_resource_table of_irq_to_resource_table
of_machine_is_compatible
of_match_device of_match_device
of_match_node of_match_node
of_n_addr_cells of_n_addr_cells

View File

@ -44,6 +44,9 @@
generic_delete_inode generic_delete_inode
__generic_file_fsync __generic_file_fsync
get_wchan get_wchan
gnet_stats_add_queue
gnet_stats_copy_basic
gnet_stats_copy_queue
gov_attr_set_get gov_attr_set_get
gpiod_to_chip gpiod_to_chip
have_governor_per_policy have_governor_per_policy
@ -86,6 +89,7 @@
memcg_kmem_online_key memcg_kmem_online_key
neigh_xmit neigh_xmit
netif_receive_skb_core netif_receive_skb_core
__netif_schedule
nf_ct_attach nf_ct_attach
nf_ct_delete nf_ct_delete
nf_register_net_hook nf_register_net_hook
@ -99,6 +103,7 @@
nla_put_64bit nla_put_64bit
nla_reserve nla_reserve
nla_reserve_64bit nla_reserve_64bit
noop_qdisc
nop_mnt_idmap nop_mnt_idmap
notify_change notify_change
nr_running nr_running
@ -108,6 +113,7 @@
override_creds override_creds
__page_file_index __page_file_index
path_get path_get
pfifo_qdisc_ops
platform_device_add platform_device_add
platform_device_alloc platform_device_alloc
platform_device_put platform_device_put
@ -117,8 +123,18 @@
prepare_to_wait_exclusive prepare_to_wait_exclusive
__printk_ratelimit __printk_ratelimit
proc_symlink proc_symlink
psched_ratecfg_precompute
public_key_verify_signature public_key_verify_signature
put_pages_list 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_lookup_slot
radix_tree_replace_slot radix_tree_replace_slot
_raw_write_trylock _raw_write_trylock
@ -153,6 +169,9 @@
stack_depot_print stack_depot_print
task_rq_lock task_rq_lock
tcf_action_exec tcf_action_exec
tcf_block_get
tcf_block_put
tcf_classify
tcf_exts_destroy tcf_exts_destroy
tcf_exts_dump tcf_exts_dump
tcf_exts_dump_stats tcf_exts_dump_stats
@ -164,6 +183,7 @@
__traceiter_android_rvh_post_init_entity_util_avg __traceiter_android_rvh_post_init_entity_util_avg
__traceiter_android_rvh_rtmutex_force_update __traceiter_android_rvh_rtmutex_force_update
__traceiter_android_rvh_set_cpus_allowed_comm __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_rvh_set_balance_anon_file_reclaim
__traceiter_android_vh_account_process_tick_gran __traceiter_android_vh_account_process_tick_gran
__traceiter_android_vh_add_page_to_lrulist __traceiter_android_vh_add_page_to_lrulist
@ -256,6 +276,7 @@
__traceiter_android_vh_record_rtmutex_lock_starttime __traceiter_android_vh_record_rtmutex_lock_starttime
__traceiter_android_vh_record_rwsem_lock_starttime __traceiter_android_vh_record_rwsem_lock_starttime
__traceiter_android_vh_reweight_entity __traceiter_android_vh_reweight_entity
__traceiter_android_vh_read_lazy_flag
__traceiter_android_vh_rmqueue_bulk_bypass __traceiter_android_vh_rmqueue_bulk_bypass
__traceiter_android_vh_rt_mutex_steal __traceiter_android_vh_rt_mutex_steal
__traceiter_android_vh_rtmutex_waiter_prio __traceiter_android_vh_rtmutex_waiter_prio
@ -408,10 +429,12 @@
__tracepoint_android_vh_rwsem_optimistic_rspin __tracepoint_android_vh_rwsem_optimistic_rspin
__tracepoint_android_vh_rwsem_opt_spin_finish __tracepoint_android_vh_rwsem_opt_spin_finish
__tracepoint_android_vh_rwsem_opt_spin_start __tracepoint_android_vh_rwsem_opt_spin_start
__tracepoint_android_vh_read_lazy_flag
__tracepoint_android_vh_save_track_hash __tracepoint_android_vh_save_track_hash
__tracepoint_android_vh_save_vmalloc_stack __tracepoint_android_vh_save_vmalloc_stack
__tracepoint_android_vh_sched_move_task __tracepoint_android_vh_sched_move_task
__tracepoint_android_rvh_sched_setaffinity __tracepoint_android_rvh_sched_setaffinity
__tracepoint_android_vh_set_tsk_need_resched_lazy
__tracepoint_android_vh_sched_setaffinity_early __tracepoint_android_vh_sched_setaffinity_early
__tracepoint_android_vh_sched_stat_runtime_rt __tracepoint_android_vh_sched_stat_runtime_rt
__tracepoint_android_vh_should_alloc_pages_retry __tracepoint_android_vh_should_alloc_pages_retry

File diff suppressed because it is too large Load Diff

View File

@ -140,12 +140,15 @@
clk_hw_is_prepared clk_hw_is_prepared
clk_hw_register clk_hw_register
clk_hw_round_rate clk_hw_round_rate
clk_hw_set_rate_range
clk_hw_unregister clk_hw_unregister
__clk_is_enabled __clk_is_enabled
__clk_mux_determine_rate_closest __clk_mux_determine_rate_closest
clk_prepare clk_prepare
clk_put clk_put
clk_restore_context
clk_round_rate clk_round_rate
clk_save_context
clk_set_parent clk_set_parent
clk_set_rate clk_set_rate
clk_sync_state clk_sync_state
@ -803,6 +806,7 @@
idr_preload idr_preload
idr_remove idr_remove
iio_read_channel_processed iio_read_channel_processed
iio_write_channel_raw
in4_pton in4_pton
inc_node_page_state inc_node_page_state
in_egroup_p in_egroup_p
@ -1086,11 +1090,26 @@
__mmap_lock_do_trace_released __mmap_lock_do_trace_released
__mmap_lock_do_trace_start_locking __mmap_lock_do_trace_start_locking
mmc_cqe_request_done mmc_cqe_request_done
mmc_execute_tuning
mmc_hs200_tuning
mmc_issue_type
mmc_of_parse mmc_of_parse
mmc_regulator_get_supply mmc_regulator_get_supply
mmc_regulator_set_ocr mmc_regulator_set_ocr
mmc_regulator_set_vqmmc mmc_regulator_set_vqmmc
mmc_retune_hold
mmc_select_bus_width
mmc_select_card
mmc_select_hs
mmc_select_hs400
mmc_select_hs_ddr
mmc_select_timing
mmc_send_tuning mmc_send_tuning
mmc_set_bus_mode
mmc_set_bus_width
mmc_set_clock
mmc_set_initial_state
mmc_set_timing
__mmdrop __mmdrop
mmput mmput
mod_delayed_work_on mod_delayed_work_on
@ -1163,6 +1182,7 @@
of_clk_add_provider of_clk_add_provider
of_clk_del_provider of_clk_del_provider
of_clk_get_from_provider of_clk_get_from_provider
of_clk_hw_onecell_get
of_clk_hw_simple_get of_clk_hw_simple_get
of_clk_src_simple_get of_clk_src_simple_get
of_count_phandle_with_args of_count_phandle_with_args
@ -1392,6 +1412,10 @@
power_supply_reg_notifier power_supply_reg_notifier
power_supply_set_property power_supply_set_property
power_supply_unreg_notifier power_supply_unreg_notifier
powercap_register_control_type
powercap_register_zone
powercap_unregister_control_type
powercap_unregister_zone
preempt_schedule preempt_schedule
preempt_schedule_notrace preempt_schedule_notrace
prepare_to_wait_event prepare_to_wait_event
@ -1909,8 +1933,12 @@
__traceiter_android_rvh_iommu_iovad_init_alloc_algo __traceiter_android_rvh_iommu_iovad_init_alloc_algo
__traceiter_android_rvh_iommu_limit_align_shift __traceiter_android_rvh_iommu_limit_align_shift
__traceiter_android_rvh_iommu_setup_dma_ops __traceiter_android_rvh_iommu_setup_dma_ops
__traceiter_android_rvh_irqs_disable
__traceiter_android_rvh_irqs_enable
__traceiter_android_rvh_is_cpu_allowed __traceiter_android_rvh_is_cpu_allowed
__traceiter_android_rvh_new_task_stats __traceiter_android_rvh_new_task_stats
__traceiter_android_rvh_preempt_disable
__traceiter_android_rvh_preempt_enable
__traceiter_android_rvh_replace_next_task_fair __traceiter_android_rvh_replace_next_task_fair
__traceiter_android_rvh_rto_next_cpu __traceiter_android_rvh_rto_next_cpu
__traceiter_android_rvh_sched_cpu_dying __traceiter_android_rvh_sched_cpu_dying
@ -1957,6 +1985,7 @@
__traceiter_android_vh_ipi_stop __traceiter_android_vh_ipi_stop
__traceiter_android_vh_jiffies_update __traceiter_android_vh_jiffies_update
__traceiter_android_vh_mmap_region __traceiter_android_vh_mmap_region
__traceiter_android_vh_mmc_sdio_pm_flag_set
__traceiter_android_vh_mpam_set __traceiter_android_vh_mpam_set
__traceiter_android_vh_printk_hotplug __traceiter_android_vh_printk_hotplug
__traceiter_android_vh_rproc_recovery __traceiter_android_vh_rproc_recovery
@ -2005,8 +2034,12 @@
__tracepoint_android_rvh_iommu_iovad_init_alloc_algo __tracepoint_android_rvh_iommu_iovad_init_alloc_algo
__tracepoint_android_rvh_iommu_limit_align_shift __tracepoint_android_rvh_iommu_limit_align_shift
__tracepoint_android_rvh_iommu_setup_dma_ops __tracepoint_android_rvh_iommu_setup_dma_ops
__tracepoint_android_rvh_irqs_disable
__tracepoint_android_rvh_irqs_enable
__tracepoint_android_rvh_is_cpu_allowed __tracepoint_android_rvh_is_cpu_allowed
__tracepoint_android_rvh_new_task_stats __tracepoint_android_rvh_new_task_stats
__tracepoint_android_rvh_preempt_disable
__tracepoint_android_rvh_preempt_enable
__tracepoint_android_rvh_replace_next_task_fair __tracepoint_android_rvh_replace_next_task_fair
__tracepoint_android_rvh_rto_next_cpu __tracepoint_android_rvh_rto_next_cpu
__tracepoint_android_rvh_sched_cpu_dying __tracepoint_android_rvh_sched_cpu_dying
@ -2053,6 +2086,7 @@
__tracepoint_android_vh_ipi_stop __tracepoint_android_vh_ipi_stop
__tracepoint_android_vh_jiffies_update __tracepoint_android_vh_jiffies_update
__tracepoint_android_vh_mmap_region __tracepoint_android_vh_mmap_region
__tracepoint_android_vh_mmc_sdio_pm_flag_set
__tracepoint_android_vh_mpam_set __tracepoint_android_vh_mpam_set
__tracepoint_android_vh_printk_hotplug __tracepoint_android_vh_printk_hotplug
__tracepoint_android_vh_rproc_recovery __tracepoint_android_vh_rproc_recovery
@ -2191,6 +2225,8 @@
usb_free_coherent usb_free_coherent
usb_function_register usb_function_register
usb_function_unregister usb_function_unregister
usb_gadget_connect
usb_gadget_disconnect
usb_gadget_wakeup usb_gadget_wakeup
usb_hcd_is_primary_hcd usb_hcd_is_primary_hcd
usb_ifnum_to_if usb_ifnum_to_if

View File

@ -262,6 +262,12 @@
__traceiter_android_rvh_ctl_dirty_rate __traceiter_android_rvh_ctl_dirty_rate
__tracepoint_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 # required by ledtrig-pattern.ko
led_get_default_pattern led_get_default_pattern
led_set_brightness led_set_brightness
@ -664,7 +670,6 @@
of_clk_get_parent_count of_clk_get_parent_count
of_devfreq_cooling_register_power of_devfreq_cooling_register_power
of_dma_is_coherent of_dma_is_coherent
of_machine_is_compatible
of_property_read_variable_u64_array of_property_read_variable_u64_array
of_property_read_variable_u8_array of_property_read_variable_u8_array
param_array_ops param_array_ops

View File

@ -54,11 +54,14 @@
__traceiter_android_vh_do_swap_page __traceiter_android_vh_do_swap_page
__traceiter_android_vh_do_wp_page __traceiter_android_vh_do_wp_page
__traceiter_android_vh_dup_task_struct __traceiter_android_vh_dup_task_struct
__traceiter_android_vh_filemap_update_page
__traceiter_android_vh_free_task __traceiter_android_vh_free_task
__traceiter_android_vh_fuse_request_end __traceiter_android_vh_fuse_request_end
__traceiter_android_vh_irqtime_account_process_tick __traceiter_android_vh_irqtime_account_process_tick
__traceiter_android_vh_look_around __traceiter_android_vh_look_around
__traceiter_android_vh_look_around_migrate_folio __traceiter_android_vh_look_around_migrate_folio
__traceiter_android_vh_lock_folio_drop_mmap_end
__traceiter_android_vh_lock_folio_drop_mmap_start
__traceiter_android_vh_mmap_region __traceiter_android_vh_mmap_region
__traceiter_android_vh_mutex_init __traceiter_android_vh_mutex_init
__traceiter_android_vh_mutex_unlock_slowpath __traceiter_android_vh_mutex_unlock_slowpath
@ -141,11 +144,14 @@
__tracepoint_android_vh_do_swap_page __tracepoint_android_vh_do_swap_page
__tracepoint_android_vh_do_wp_page __tracepoint_android_vh_do_wp_page
__tracepoint_android_vh_dup_task_struct __tracepoint_android_vh_dup_task_struct
__tracepoint_android_vh_filemap_update_page
__tracepoint_android_vh_free_task __tracepoint_android_vh_free_task
__tracepoint_android_vh_fuse_request_end __tracepoint_android_vh_fuse_request_end
__tracepoint_android_vh_irqtime_account_process_tick __tracepoint_android_vh_irqtime_account_process_tick
__tracepoint_android_vh_look_around __tracepoint_android_vh_look_around
__tracepoint_android_vh_look_around_migrate_folio __tracepoint_android_vh_look_around_migrate_folio
__tracepoint_android_vh_lock_folio_drop_mmap_end
__tracepoint_android_vh_lock_folio_drop_mmap_start
__tracepoint_android_vh_mmap_region __tracepoint_android_vh_mmap_region
__tracepoint_android_vh_mutex_init __tracepoint_android_vh_mutex_init
__tracepoint_android_vh_mutex_unlock_slowpath __tracepoint_android_vh_mutex_unlock_slowpath

View File

@ -129,85 +129,138 @@
#required by cifs.ko #required by cifs.ko
add_swap_extent add_swap_extent
asn1_ber_decoder asn1_ber_decoder
bit_wait
clear_nlink
copy_page_from_iter copy_page_from_iter
copy_page_to_iter copy_page_to_iter
clear_nlink copy_splice_read
d_add
d_alloc_parallel
d_drop
d_hash_and_lookup
d_invalidate
d_move
deactivate_super deactivate_super
dentry_path_raw dentry_path_raw
d_drop dup_iter
d_move end_page_writeback
d_hash_and_lookup
d_alloc_parallel
d_invalidate
errseq_check errseq_check
extract_iter_to_sg
fc_mount
file_modified file_modified
fs_param_is_bool file_write_and_wait_range
fs_param_is_u32 filemap_dirty_folio
fs_param_is_u64 filemap_fault
fs_param_is_string filemap_get_folios_tag
filemap_map_pages
filemap_migrate_folio
finish_no_open finish_no_open
finish_open finish_open
filemap_map_pages flush_dcache_folio
folio_wait_private_2
folio_clear_dirty_for_io folio_clear_dirty_for_io
folio_end_private_2
folio_end_writeback
folio_mapping
folio_wait_private_2
folio_wait_private_2_killable
folio_wait_writeback
fs_context_for_submount
fs_param_is_bool
fs_param_is_string
fs_param_is_u32
fs_param_is_u64
generate_random_uuid generate_random_uuid
generic_permission
generic_file_write_iter
generic_setlease
generic_copy_file_range generic_copy_file_range
generic_file_write_iter
generic_key_instantiate generic_key_instantiate
iov_iter_discard generic_permission
iov_iter_bvec generic_setlease
iov_iter_get_pages_alloc2
iget_failed iget_failed
in_group_p
invalidate_inode_pages2 invalidate_inode_pages2
iov_iter_advance
iov_iter_bvec
iov_iter_discard
iov_iter_get_pages_alloc2
iov_iter_npages iov_iter_npages
kfree_link iov_iter_xarray
key_type_logon iterate_supers_type
iunique
key_invalidate key_invalidate
key_revoke key_revoke
key_type_logon
key_validate key_validate
kfree_link
kill_anon_super
kvfree_sensitive
lock_two_nondirectories lock_two_nondirectories
lookup_positive_unlocked
locks_lock_inode_wait locks_lock_inode_wait
look_up_OID look_up_OID
overflowgid lookup_positive_unlocked
mark_mounts_for_expiry
match_token
mempool_resize
mnt_drop_write_file
mnt_set_expiry
mnt_want_write_file
mntget
nop_mnt_idmap
out_of_line_wait_on_bit
out_of_line_wait_on_bit_lock out_of_line_wait_on_bit_lock
overflowgid
override_creds override_creds
posix_lock_file posix_lock_file
posix_test_lock posix_test_lock
prepare_kernel_cred prepare_kernel_cred
put_fs_context
readahead_expand
redirty_page_for_writepage
register_key_type
request_key_tag request_key_tag
revert_creds revert_creds
register_key_type
sget
set_anon_super
super_setup_bdi
seq_escape_mem
setattr_copy
sock_sendmsg
security_sb_eat_lsm_opts security_sb_eat_lsm_opts
seq_escape_mem
set_anon_super
set_page_writeback
setattr_copy
sget
sigprocmask
simple_inode_init_ts
sock_sendmsg
sprint_oid sprint_oid
truncate_inode_pages_range super_setup_bdi
tcp_sock_set_nodelay swapcache_mapping
tcp_sock_set_cork tcp_sock_set_cork
tcp_sock_set_nodelay
timestamp_truncate
touch_atime
truncate_inode_pages_range
truncate_pagecache_range truncate_pagecache_range
unlock_two_nondirectories unlock_two_nondirectories
utf8s_to_utf16s
utf8_to_utf32
unregister_key_type unregister_key_type
user_describe user_describe
user_revoke
user_destroy user_destroy
user_read user_read
vfs_setpos user_revoke
utf8_to_utf32
utf8s_to_utf16s
vfs_parse_fs_string vfs_parse_fs_string
vfs_setpos
wait_on_page_writeback wait_on_page_writeback
__generic_file_write_iter xa_extract
__folio_lock_killable xa_set_mark
xas_find
xas_find_marked
xas_pause
__break_lease __break_lease
__d_lookup_unhash_wake __d_lookup_unhash_wake
__filemap_get_folio
__folio_lock_killable
__folio_start_writeback
__fs_parse __fs_parse
__generic_file_write_iter
__module_put_and_kthread_exit
__page_file_index
# required by tls.ko # required by tls.ko
tcp_rate_check_app_limited tcp_rate_check_app_limited
@ -281,3 +334,16 @@
set_capacity set_capacity
blk_queue_flag_clear blk_queue_flag_clear
blk_mq_unfreeze_queue blk_mq_unfreeze_queue
#required by mi_mempool.ko
__traceiter_android_vh_mmput
__tracepoint_android_vh_mmput
__traceiter_android_vh_madvise_cold_pageout_skip
__tracepoint_android_vh_madvise_cold_pageout_skip
#required by io_limit.ko
__traceiter_android_vh_psi_event
__traceiter_android_vh_psi_group
__tracepoint_android_vh_psi_event
__tracepoint_android_vh_psi_group

View File

@ -1,4 +1,5 @@
CONFIG_UAPI_HEADER_TEST=y CONFIG_UAPI_HEADER_TEST=y
CONFIG_LOCALVERSION="-4k"
CONFIG_AUDIT=y CONFIG_AUDIT=y
CONFIG_NO_HZ=y CONFIG_NO_HZ=y
CONFIG_HIGH_RES_TIMERS=y CONFIG_HIGH_RES_TIMERS=y
@ -47,7 +48,6 @@ CONFIG_EXPERT=y
CONFIG_KALLSYMS_ALL=y CONFIG_KALLSYMS_ALL=y
# CONFIG_RSEQ is not set # CONFIG_RSEQ is not set
CONFIG_PROFILING=y CONFIG_PROFILING=y
CONFIG_KEXEC_FILE=y
CONFIG_ARCH_SUNXI=y CONFIG_ARCH_SUNXI=y
CONFIG_ARCH_HISI=y CONFIG_ARCH_HISI=y
CONFIG_ARCH_QCOM=y CONFIG_ARCH_QCOM=y
@ -104,6 +104,7 @@ CONFIG_BLK_DEV_ZONED=y
CONFIG_BLK_DEV_THROTTLING=y CONFIG_BLK_DEV_THROTTLING=y
CONFIG_BLK_WBT=y CONFIG_BLK_WBT=y
# CONFIG_BLK_WBT_MQ is not set # CONFIG_BLK_WBT_MQ is not set
CONFIG_BLK_CGROUP_IOCOST=y
CONFIG_BLK_CGROUP_IOPRIO=y CONFIG_BLK_CGROUP_IOPRIO=y
CONFIG_BLK_INLINE_ENCRYPTION=y CONFIG_BLK_INLINE_ENCRYPTION=y
CONFIG_BLK_INLINE_ENCRYPTION_FALLBACK=y CONFIG_BLK_INLINE_ENCRYPTION_FALLBACK=y
@ -597,6 +598,9 @@ CONFIG_IIO_TRIGGER=y
CONFIG_PWM=y CONFIG_PWM=y
CONFIG_POWERCAP=y CONFIG_POWERCAP=y
CONFIG_IDLE_INJECT=y CONFIG_IDLE_INJECT=y
CONFIG_DTPM=y
CONFIG_DTPM_CPU=y
CONFIG_DTPM_DEVFREQ=y
CONFIG_ANDROID_BINDER_IPC=y CONFIG_ANDROID_BINDER_IPC=y
CONFIG_ANDROID_BINDERFS=y CONFIG_ANDROID_BINDERFS=y
CONFIG_ANDROID_DEBUG_SYMBOLS=y CONFIG_ANDROID_DEBUG_SYMBOLS=y

View File

@ -394,31 +394,6 @@ int gzvm_vm_ioctl_arch_enable_cap(struct gzvm *gzvm,
return -EINVAL; return -EINVAL;
} }
/**
* gzvm_hva_to_pa_arch() - converts hva to pa with arch-specific way
* @hva: Host virtual address.
*
* Return: GZVM_PA_ERR_BAD for translation error
*/
u64 gzvm_hva_to_pa_arch(u64 hva)
{
unsigned long flags;
u64 par;
local_irq_save(flags);
asm volatile("at s1e1r, %0" :: "r" (hva));
isb();
par = read_sysreg_par();
local_irq_restore(flags);
if (par & SYS_PAR_EL1_F)
return GZVM_PA_ERR_BAD;
par = par & PAR_PA47_MASK;
if (!par)
return GZVM_PA_ERR_BAD;
return par;
}
int gzvm_arch_map_guest(u16 vm_id, int memslot_id, u64 pfn, u64 gfn, int gzvm_arch_map_guest(u16 vm_id, int memslot_id, u64 pfn, u64 gfn,
u64 nr_pages) u64 nr_pages)
{ {

View File

@ -129,4 +129,19 @@ HYP_EVENT(psci_mem_protect,
), ),
HE_PRINTK("count=%llu was=%llu", __entry->count, __entry->was) HE_PRINTK("count=%llu was=%llu", __entry->count, __entry->was)
); );
HYP_EVENT(iommu_idmap,
HE_PROTO(u64 from, u64 to, int prot),
HE_STRUCT(
he_field(u64, from)
he_field(u64, to)
he_field(int, prot)
),
HE_ASSIGN(
__entry->from = from;
__entry->to = to;
__entry->prot = prot;
),
HE_PRINTK("from=0x%llx to=0x%llx prot=0x%x", __entry->from, __entry->to, __entry->prot)
);
#endif #endif

View File

@ -103,6 +103,8 @@ void pkvm_host_reclaim_page(struct kvm *host_kvm, phys_addr_t ipa);
ARM64_FEATURE_MASK(ID_AA64PFR1_EL1_SSBS) \ ARM64_FEATURE_MASK(ID_AA64PFR1_EL1_SSBS) \
) )
#define PVM_ID_AA64PFR2_ALLOW (0ULL)
/* /*
* Allow for protected VMs: * Allow for protected VMs:
* - Mixed-endian * - Mixed-endian
@ -135,6 +137,7 @@ void pkvm_host_reclaim_page(struct kvm *host_kvm, phys_addr_t ipa);
* - Privileged Access Never * - Privileged Access Never
* - SError interrupt exceptions from speculative reads * - SError interrupt exceptions from speculative reads
* - Enhanced Translation Synchronization * - Enhanced Translation Synchronization
* - Control for cache maintenance permission
*/ */
#define PVM_ID_AA64MMFR1_ALLOW (\ #define PVM_ID_AA64MMFR1_ALLOW (\
ARM64_FEATURE_MASK(ID_AA64MMFR1_EL1_HAFDBS) | \ ARM64_FEATURE_MASK(ID_AA64MMFR1_EL1_HAFDBS) | \
@ -142,7 +145,8 @@ void pkvm_host_reclaim_page(struct kvm *host_kvm, phys_addr_t ipa);
ARM64_FEATURE_MASK(ID_AA64MMFR1_EL1_HPDS) | \ ARM64_FEATURE_MASK(ID_AA64MMFR1_EL1_HPDS) | \
ARM64_FEATURE_MASK(ID_AA64MMFR1_EL1_PAN) | \ ARM64_FEATURE_MASK(ID_AA64MMFR1_EL1_PAN) | \
ARM64_FEATURE_MASK(ID_AA64MMFR1_EL1_SpecSEI) | \ ARM64_FEATURE_MASK(ID_AA64MMFR1_EL1_SpecSEI) | \
ARM64_FEATURE_MASK(ID_AA64MMFR1_EL1_ETS) \ ARM64_FEATURE_MASK(ID_AA64MMFR1_EL1_ETS) | \
ARM64_FEATURE_MASK(ID_AA64MMFR1_EL1_CMOW) \
) )
/* /*
@ -167,6 +171,8 @@ void pkvm_host_reclaim_page(struct kvm *host_kvm, phys_addr_t ipa);
ARM64_FEATURE_MASK(ID_AA64MMFR2_EL1_E0PD) \ ARM64_FEATURE_MASK(ID_AA64MMFR2_EL1_E0PD) \
) )
#define PVM_ID_AA64MMFR3_ALLOW (0ULL)
/* /*
* No restrictions for Scalable Vectors (SVE). * No restrictions for Scalable Vectors (SVE).
*/ */
@ -220,10 +226,18 @@ void pkvm_host_reclaim_page(struct kvm *host_kvm, phys_addr_t ipa);
ARM64_FEATURE_MASK(ID_AA64ISAR0_EL1_RNDR) \ ARM64_FEATURE_MASK(ID_AA64ISAR0_EL1_RNDR) \
) )
/* Restrict pointer authentication to the basic version. */
#define PVM_ID_AA64ISAR1_RESTRICT_UNSIGNED (\
FIELD_PREP(ARM64_FEATURE_MASK(ID_AA64ISAR1_EL1_APA), ID_AA64ISAR1_EL1_APA_PAuth) | \
FIELD_PREP(ARM64_FEATURE_MASK(ID_AA64ISAR1_EL1_API), ID_AA64ISAR1_EL1_API_PAuth) \
)
#define PVM_ID_AA64ISAR2_RESTRICT_UNSIGNED (\
FIELD_PREP(ARM64_FEATURE_MASK(ID_AA64ISAR2_EL1_APA3), ID_AA64ISAR2_EL1_APA3_PAuth) \
)
#define PVM_ID_AA64ISAR1_ALLOW (\ #define PVM_ID_AA64ISAR1_ALLOW (\
ARM64_FEATURE_MASK(ID_AA64ISAR1_EL1_DPB) | \ ARM64_FEATURE_MASK(ID_AA64ISAR1_EL1_DPB) | \
ARM64_FEATURE_MASK(ID_AA64ISAR1_EL1_APA) | \
ARM64_FEATURE_MASK(ID_AA64ISAR1_EL1_API) | \
ARM64_FEATURE_MASK(ID_AA64ISAR1_EL1_JSCVT) | \ ARM64_FEATURE_MASK(ID_AA64ISAR1_EL1_JSCVT) | \
ARM64_FEATURE_MASK(ID_AA64ISAR1_EL1_FCMA) | \ ARM64_FEATURE_MASK(ID_AA64ISAR1_EL1_FCMA) | \
ARM64_FEATURE_MASK(ID_AA64ISAR1_EL1_LRCPC) | \ ARM64_FEATURE_MASK(ID_AA64ISAR1_EL1_LRCPC) | \
@ -238,10 +252,226 @@ void pkvm_host_reclaim_page(struct kvm *host_kvm, phys_addr_t ipa);
) )
#define PVM_ID_AA64ISAR2_ALLOW (\ #define PVM_ID_AA64ISAR2_ALLOW (\
ARM64_FEATURE_MASK(ID_AA64ISAR2_EL1_ATS1A) | \
ARM64_FEATURE_MASK(ID_AA64ISAR2_EL1_GPA3) | \ ARM64_FEATURE_MASK(ID_AA64ISAR2_EL1_GPA3) | \
ARM64_FEATURE_MASK(ID_AA64ISAR2_EL1_APA3) \ ARM64_FEATURE_MASK(ID_AA64ISAR2_EL1_MOPS) \
) )
/* All HAFGRTR_EL2 bits are AMU */
#define HAFGRTR_AMU __HAFGRTR_EL2_MASK
#define PVM_HAFGRTR_EL2_SET \
(FIELD_GET(ARM64_FEATURE_MASK(ID_AA64PFR0_EL1_AMU), PVM_ID_AA64PFR0_ALLOW) ? 0ULL : HAFGRTR_AMU)
#define PVM_HAFGRTR_EL2_CLR (0ULL)
/* No support for debug, trace, of PMU for protected VMs */
#define PVM_HDFGRTR_EL2_SET __HDFGRTR_EL2_MASK
#define PVM_HDFGRTR_EL2_CLR __HDFGRTR_EL2_nMASK
#define PVM_HDFGWTR_EL2_SET __HDFGWTR_EL2_MASK
#define PVM_HDFGWTR_EL2_CLR __HDFGWTR_EL2_nMASK
#define HFGxTR_RAS_IMP (\
HFGxTR_EL2_ERXADDR_EL1 | \
HFGxTR_EL2_ERXPFGF_EL1 | \
HFGxTR_EL2_ERXMISCn_EL1 | \
HFGxTR_EL2_ERXSTATUS_EL1 | \
HFGxTR_EL2_ERXCTLR_EL1 | \
HFGxTR_EL2_ERXFR_EL1 | \
HFGxTR_EL2_ERRSELR_EL1 | \
HFGxTR_EL2_ERRIDR_EL1 \
)
#define HFGxTR_RAS_V1P1 (\
HFGxTR_EL2_ERXPFGCDN_EL1 | \
HFGxTR_EL2_ERXPFGCTL_EL1 \
)
#define HFGxTR_GIC HFGxTR_EL2_ICC_IGRPENn_EL1
#define HFGxTR_CSV2 (\
HFGxTR_EL2_SCXTNUM_EL0 | \
HFGxTR_EL2_SCXTNUM_EL1 \
)
#define HFGxTR_LOR (\
HFGxTR_EL2_LORSA_EL1 | \
HFGxTR_EL2_LORN_EL1 | \
HFGxTR_EL2_LORID_EL1 | \
HFGxTR_EL2_LOREA_EL1 | \
HFGxTR_EL2_LORC_EL1 \
)
#define HFGxTR_PAUTH (\
HFGxTR_EL2_APIBKey | \
HFGxTR_EL2_APIAKey | \
HFGxTR_EL2_APGAKey | \
HFGxTR_EL2_APDBKey | \
HFGxTR_EL2_APDAKey \
)
#define HFGxTR_nAIE (\
HFGxTR_EL2_nAMAIR2_EL1 | \
HFGxTR_EL2_nMAIR2_EL1 \
)
#define HFGxTR_nS2POE HFGxTR_EL2_nS2POR_EL1
#define HFGxTR_nS1POE (\
HFGxTR_EL2_nPOR_EL1 | \
HFGxTR_EL2_nPOR_EL0 \
)
#define HFGxTR_nS1PIE (\
HFGxTR_EL2_nPIR_EL1 | \
HFGxTR_EL2_nPIRE0_EL1 \
)
#define HFGxTR_nTHE HFGxTR_EL2_nRCWMASK_EL1
#define HFGxTR_nSME (\
HFGxTR_EL2_nTPIDR2_EL0 | \
HFGxTR_EL2_nSMPRI_EL1 \
)
#define HFGxTR_nGCS (\
HFGxTR_EL2_nGCS_EL1 | \
HFGxTR_EL2_nGCS_EL0 \
)
#define HFGxTR_nLS64 HFGxTR_EL2_nACCDATA_EL1
#define PVM_HFGXTR_EL2_SET \
(FIELD_GET(ARM64_FEATURE_MASK(ID_AA64PFR0_EL1_RAS), PVM_ID_AA64PFR0_RESTRICT_UNSIGNED) >= ID_AA64PFR0_EL1_RAS_IMP ? 0ULL : HFGxTR_RAS_IMP) | \
(FIELD_GET(ARM64_FEATURE_MASK(ID_AA64PFR0_EL1_RAS), PVM_ID_AA64PFR0_RESTRICT_UNSIGNED) >= ID_AA64PFR0_EL1_RAS_V1P1 ? 0ULL : HFGxTR_RAS_V1P1) | \
(FIELD_GET(ARM64_FEATURE_MASK(ID_AA64PFR0_EL1_GIC), PVM_ID_AA64PFR0_ALLOW) ? 0ULL : HFGxTR_GIC) | \
(FIELD_GET(ARM64_FEATURE_MASK(ID_AA64PFR0_EL1_CSV2), PVM_ID_AA64PFR0_ALLOW) ? 0ULL : HFGxTR_CSV2) | \
(FIELD_GET(ARM64_FEATURE_MASK(ID_AA64MMFR1_EL1_LO), PVM_ID_AA64MMFR1_ALLOW) ? 0ULL : HFGxTR_LOR) | \
(FIELD_GET(ARM64_FEATURE_MASK(ID_AA64ISAR1_EL1_APA), PVM_ID_AA64ISAR1_ALLOW) ? 0ULL : HFGxTR_PAUTH) | \
(FIELD_GET(ARM64_FEATURE_MASK(ID_AA64ISAR1_EL1_API), PVM_ID_AA64ISAR1_ALLOW) ? 0ULL : HFGxTR_PAUTH) | \
0
#define PVM_HFGXTR_EL2_CLR \
(FIELD_GET(ARM64_FEATURE_MASK(ID_AA64MMFR3_EL1_AIE), PVM_ID_AA64MMFR3_ALLOW) ? 0ULL : HFGxTR_nAIE) | \
(FIELD_GET(ARM64_FEATURE_MASK(ID_AA64MMFR3_EL1_S2POE), PVM_ID_AA64MMFR3_ALLOW) ? 0ULL : HFGxTR_nS2POE) | \
(FIELD_GET(ARM64_FEATURE_MASK(ID_AA64MMFR3_EL1_S1POE), PVM_ID_AA64MMFR3_ALLOW) ? 0ULL : HFGxTR_nS1POE) | \
(FIELD_GET(ARM64_FEATURE_MASK(ID_AA64MMFR3_EL1_S1PIE), PVM_ID_AA64MMFR3_ALLOW) ? 0ULL : HFGxTR_nS1PIE) | \
(FIELD_GET(ARM64_FEATURE_MASK(ID_AA64PFR1_EL1_THE), PVM_ID_AA64PFR1_ALLOW) ? 0ULL : HFGxTR_nTHE) | \
(FIELD_GET(ARM64_FEATURE_MASK(ID_AA64PFR1_EL1_SME), PVM_ID_AA64PFR1_ALLOW) ? 0ULL : HFGxTR_nSME) | \
(FIELD_GET(ARM64_FEATURE_MASK(ID_AA64PFR1_EL1_GCS), PVM_ID_AA64PFR1_ALLOW) ? 0ULL : HFGxTR_nGCS) | \
(FIELD_GET(ARM64_FEATURE_MASK(ID_AA64ISAR1_EL1_LS64), PVM_ID_AA64ISAR1_ALLOW) ? 0ULL : HFGxTR_nLS64) | \
0
#define PVM_HFGRTR_EL2_SET PVM_HFGXTR_EL2_SET
#define PVM_HFGWTR_EL2_SET PVM_HFGXTR_EL2_SET
#define PVM_HFGRTR_EL2_CLR PVM_HFGXTR_EL2_CLR
#define PVM_HFGWTR_EL2_CLR PVM_HFGXTR_EL2_CLR
#define HFGITR_SPECRES (\
HFGITR_EL2_CPPRCTX | \
HFGITR_EL2_DVPRCTX | \
HFGITR_EL2_CFPRCTX \
)
#define HFGITR_TLBIOS (\
HFGITR_EL2_TLBIVAALE1OS | \
HFGITR_EL2_TLBIVALE1OS | \
HFGITR_EL2_TLBIVAAE1OS | \
HFGITR_EL2_TLBIASIDE1OS | \
HFGITR_EL2_TLBIVAE1OS | \
HFGITR_EL2_TLBIVMALLE1OS \
)
#define HFGITR_TLBIRANGE \
(\
HFGITR_TLBIOS | \
HFGITR_EL2_TLBIRVAALE1 | \
HFGITR_EL2_TLBIRVALE1 | \
HFGITR_EL2_TLBIRVAAE1 | \
HFGITR_EL2_TLBIRVAE1 | \
HFGITR_EL2_TLBIRVAE1 | \
HFGITR_EL2_TLBIRVAALE1IS | \
HFGITR_EL2_TLBIRVALE1IS | \
HFGITR_EL2_TLBIRVAAE1IS | \
HFGITR_EL2_TLBIRVAE1IS | \
HFGITR_EL2_TLBIVAALE1IS | \
HFGITR_EL2_TLBIVALE1IS | \
HFGITR_EL2_TLBIVAAE1IS | \
HFGITR_EL2_TLBIASIDE1IS | \
HFGITR_EL2_TLBIVAE1IS | \
HFGITR_EL2_TLBIVMALLE1IS | \
HFGITR_EL2_TLBIRVAALE1OS | \
HFGITR_EL2_TLBIRVALE1OS | \
HFGITR_EL2_TLBIRVAAE1OS | \
HFGITR_EL2_TLBIRVAE1OS \
)
#define HFGITR_TLB HFGITR_TLBIRANGE
#define HFGITR_PAN2 (\
HFGITR_EL2_ATS1E1WP | \
HFGITR_EL2_ATS1E1RP | \
HFGITR_EL2_ATS1E0W | \
HFGITR_EL2_ATS1E0R | \
HFGITR_EL2_ATS1E1W | \
HFGITR_EL2_ATS1E1R \
)
#define HFGITR_PAN HFGITR_PAN2
#define HFGITR_DPB2 HFGITR_EL2_DCCVADP
#define HFGITR_DPB_IMP HFGITR_EL2_DCCVAP
#define HFGITR_DPB (HFGITR_DPB_IMP | HFGITR_DPB2)
#define HFGITR_nGCS (\
HFGITR_EL2_nGCSEPP | \
HFGITR_EL2_nGCSSTR_EL1 | \
HFGITR_EL2_nGCSPUSHM_EL1 \
)
#define HFGITR_nBRBE (\
HFGITR_EL2_nBRBIALL | \
HFGITR_EL2_nBRBINJ \
)
#define PVM_HFGITR_EL2_SET \
(FIELD_GET(ARM64_FEATURE_MASK(ID_AA64ISAR2_EL1_ATS1A), PVM_ID_AA64ISAR2_ALLOW) ? 0ULL : HFGITR_EL2_ATS1E1A) | \
(FIELD_GET(ARM64_FEATURE_MASK(ID_AA64ISAR1_EL1_SPECRES), PVM_ID_AA64ISAR1_ALLOW) ? 0ULL : HFGITR_SPECRES) | \
(FIELD_GET(ARM64_FEATURE_MASK(ID_AA64ISAR0_EL1_TLB), PVM_ID_AA64ISAR0_ALLOW) ? 0ULL : HFGITR_TLB) | \
(FIELD_GET(ARM64_FEATURE_MASK(ID_AA64MMFR1_EL1_PAN), PVM_ID_AA64MMFR1_ALLOW) ? 0ULL : HFGITR_PAN) | \
(FIELD_GET(ARM64_FEATURE_MASK(ID_AA64ISAR1_EL1_DPB), PVM_ID_AA64ISAR1_ALLOW) ? 0ULL : HFGITR_DPB) | \
0
#define PVM_HFGITR_EL2_CLR \
(FIELD_GET(ARM64_FEATURE_MASK(ID_AA64PFR1_EL1_GCS), PVM_ID_AA64PFR1_ALLOW) ? 0ULL : HFGITR_nGCS) | \
(FIELD_GET(ARM64_FEATURE_MASK(ID_AA64DFR0_EL1_BRBE), PVM_ID_AA64DFR0_ALLOW) ? 0ULL : HFGITR_nBRBE) | \
0
#define HCRX_NMI HCRX_EL2_TALLINT
#define HCRX_nPAuth_LR HCRX_EL2_PACMEn
#define HCRX_nFPMR HCRX_EL2_EnFPM
#define HCRX_nGCS HCRX_EL2_GCSEn
#define HCRX_nSYSREG128 HCRX_EL2_EnIDCP128
#define HCRX_nADERR HCRX_EL2_EnSDERR
#define HCRX_nDoubleFault2 HCRX_EL2_TMEA
#define HCRX_nANERR HCRX_EL2_EnSNERR
#define HCRX_nD128 HCRX_EL2_D128En
#define HCRX_nTHE HCRX_EL2_PTTWI
#define HCRX_nSCTLR2 HCRX_EL2_SCTLR2En
#define HCRX_nTCR2 HCRX_EL2_TCR2En
#define HCRX_nMOPS (HCRX_EL2_MSCEn | HCRX_EL2_MCE2)
#define HCRX_nCMOW HCRX_EL2_CMOW
#define HCRX_nNMI (HCRX_EL2_VFNMI | HCRX_EL2_VINMI)
#define HCRX_SME HCRX_EL2_SMPME
#define HCRX_nXS (HCRX_EL2_FGTnXS | HCRX_EL2_FnXS)
#define HCRX_nLS64 (HCRX_EL2_EnASR| HCRX_EL2_EnALS | HCRX_EL2_EnAS0)
#define PVM_HCRX_EL2_SET \
(FIELD_GET(ARM64_FEATURE_MASK(ID_AA64PFR1_EL1_NMI), PVM_ID_AA64PFR1_ALLOW) ? 0ULL : HCRX_NMI) | \
(FIELD_GET(ARM64_FEATURE_MASK(ID_AA64PFR1_EL1_SME), PVM_ID_AA64PFR1_ALLOW) ? 0ULL : HCRX_SME) | \
0
#define PVM_HCRX_EL2_CLR \
(FIELD_GET(ARM64_FEATURE_MASK(ID_AA64ISAR1_EL1_APA), PVM_ID_AA64ISAR1_RESTRICT_UNSIGNED) < ID_AA64ISAR1_EL1_APA_PAuth_LR ? 0ULL : HCRX_nPAuth_LR) | \
(FIELD_GET(ARM64_FEATURE_MASK(ID_AA64ISAR1_EL1_API), PVM_ID_AA64ISAR1_RESTRICT_UNSIGNED) < ID_AA64ISAR1_EL1_APA_PAuth_LR ? 0ULL : HCRX_nPAuth_LR) | \
(FIELD_GET(ARM64_FEATURE_MASK(ID_AA64PFR1_EL1_GCS), PVM_ID_AA64PFR1_ALLOW) ? 0ULL : HCRX_nGCS) | \
(FIELD_GET(ARM64_FEATURE_MASK(ID_AA64ISAR2_EL1_SYSREG_128), PVM_ID_AA64ISAR2_ALLOW) ? 0ULL : HCRX_nSYSREG128) | \
(FIELD_GET(ARM64_FEATURE_MASK(ID_AA64MMFR3_EL1_ADERR), PVM_ID_AA64MMFR3_ALLOW) ? 0ULL : HCRX_nADERR) | \
(FIELD_GET(ARM64_FEATURE_MASK(ID_AA64PFR1_EL1_DF2), PVM_ID_AA64PFR1_ALLOW) ? 0ULL : HCRX_nDoubleFault2) | \
(FIELD_GET(ARM64_FEATURE_MASK(ID_AA64MMFR3_EL1_ANERR), PVM_ID_AA64MMFR3_ALLOW) ? 0ULL : HCRX_nANERR) | \
(FIELD_GET(ARM64_FEATURE_MASK(ID_AA64MMFR0_EL1_PARANGE), PVM_ID_AA64MMFR0_ALLOW) ? 0ULL : HCRX_nD128) | \
(FIELD_GET(ARM64_FEATURE_MASK(ID_AA64PFR1_EL1_THE), PVM_ID_AA64PFR1_ALLOW) ? 0ULL : HCRX_nTHE) | \
(FIELD_GET(ARM64_FEATURE_MASK(ID_AA64MMFR3_EL1_SCTLRX), PVM_ID_AA64MMFR3_ALLOW) ? 0ULL : HCRX_nSCTLR2) | \
(FIELD_GET(ARM64_FEATURE_MASK(ID_AA64MMFR3_EL1_TCRX), PVM_ID_AA64MMFR3_ALLOW) ? 0ULL : HCRX_nTCR2) | \
(FIELD_GET(ARM64_FEATURE_MASK(ID_AA64ISAR2_EL1_MOPS), PVM_ID_AA64ISAR2_ALLOW) ? 0ULL : HCRX_nMOPS) | \
(FIELD_GET(ARM64_FEATURE_MASK(ID_AA64MMFR1_EL1_CMOW), PVM_ID_AA64MMFR1_ALLOW) ? 0ULL : HCRX_nCMOW) | \
(FIELD_GET(ARM64_FEATURE_MASK(ID_AA64PFR1_EL1_NMI), PVM_ID_AA64PFR1_ALLOW) ? 0ULL : HCRX_nNMI) | \
(FIELD_GET(ARM64_FEATURE_MASK(ID_AA64ISAR1_EL1_XS), PVM_ID_AA64ISAR1_ALLOW) ? 0ULL : HCRX_nXS) | \
(FIELD_GET(ARM64_FEATURE_MASK(ID_AA64ISAR1_EL1_LS64), PVM_ID_AA64ISAR1_ALLOW) ? 0ULL : HCRX_nLS64) | \
0
/* /*
* Returns the maximum number of breakpoints supported for protected VMs. * Returns the maximum number of breakpoints supported for protected VMs.
*/ */

View File

@ -169,7 +169,7 @@ struct pkvm_module_ops {
void (*update_hcr_el2)(unsigned long set_mask, unsigned long clear_mask); void (*update_hcr_el2)(unsigned long set_mask, unsigned long clear_mask);
void (*update_hfgwtr_el2)(unsigned long set_mask, unsigned long clear_mask); void (*update_hfgwtr_el2)(unsigned long set_mask, unsigned long clear_mask);
int (*register_host_perm_fault_handler)(int (*cb)(struct user_pt_regs *regs, u64 esr, u64 addr)); int (*register_host_perm_fault_handler)(int (*cb)(struct user_pt_regs *regs, u64 esr, u64 addr));
int (*host_stage2_mod_prot)(u64 pfn, enum kvm_pgtable_prot prot, u64 nr_pages); int (*host_stage2_mod_prot)(u64 pfn, enum kvm_pgtable_prot prot, u64 nr_pages, bool update_iommu);
int (*host_stage2_get_leaf)(phys_addr_t phys, kvm_pte_t *ptep, u32 *level); int (*host_stage2_get_leaf)(phys_addr_t phys, kvm_pte_t *ptep, u32 *level);
int (*register_host_smc_handler)(bool (*cb)(struct user_pt_regs *)); int (*register_host_smc_handler)(bool (*cb)(struct user_pt_regs *));
int (*register_default_trap_handler)(bool (*cb)(struct user_pt_regs *)); int (*register_default_trap_handler)(bool (*cb)(struct user_pt_regs *));
@ -292,10 +292,11 @@ int pkvm_load_early_modules(void);
__pkvm_load_el2_module(THIS_MODULE, token); \ __pkvm_load_el2_module(THIS_MODULE, token); \
}) })
#define pkvm_register_el2_mod_call(hfn, token) \ static inline int pkvm_register_el2_mod_call(dyn_hcall_t hfn,
({ \ unsigned long token)
__pkvm_register_el2_call(pkvm_el2_mod_va(hfn, token)); \ {
}) return __pkvm_register_el2_call(pkvm_el2_mod_va(hfn, token));
}
#define pkvm_el2_mod_call(id, ...) \ #define pkvm_el2_mod_call(id, ...) \
({ \ ({ \

View File

@ -182,7 +182,7 @@ void mte_check_tfsr_el1(void);
static inline void mte_check_tfsr_entry(void) static inline void mte_check_tfsr_entry(void)
{ {
if (!system_supports_mte()) if (!kasan_hw_tags_enabled())
return; return;
mte_check_tfsr_el1(); mte_check_tfsr_el1();
@ -190,7 +190,7 @@ static inline void mte_check_tfsr_entry(void)
static inline void mte_check_tfsr_exit(void) static inline void mte_check_tfsr_exit(void)
{ {
if (!system_supports_mte()) if (!kasan_hw_tags_enabled())
return; return;
/* /*

View File

@ -20,6 +20,8 @@
#include <linux/ratelimit.h> #include <linux/ratelimit.h>
#include <linux/syscalls.h> #include <linux/syscalls.h>
#include <trace/hooks/dtask.h>
#include <asm/daifflags.h> #include <asm/daifflags.h>
#include <asm/debug-monitors.h> #include <asm/debug-monitors.h>
#include <asm/elf.h> #include <asm/elf.h>
@ -1280,8 +1282,11 @@ static void do_signal(struct pt_regs *regs)
void do_notify_resume(struct pt_regs *regs, unsigned long thread_flags) void do_notify_resume(struct pt_regs *regs, unsigned long thread_flags)
{ {
int thread_lazy_flag = 0;
do { do {
if (thread_flags & _TIF_NEED_RESCHED) { trace_android_vh_read_lazy_flag(&thread_lazy_flag, &thread_flags);
if ((thread_flags & _TIF_NEED_RESCHED) || thread_lazy_flag) {
/* Unmask Debug and SError for the next task */ /* Unmask Debug and SError for the next task */
local_daif_restore(DAIF_PROCCTX_NOIRQ); local_daif_restore(DAIF_PROCCTX_NOIRQ);

View File

@ -101,6 +101,10 @@ VDSO_LDFLAGS += -z max-page-size=4096 -z common-page-size=4096
VDSO_LDFLAGS += -shared --hash-style=sysv --build-id=sha1 VDSO_LDFLAGS += -shared --hash-style=sysv --build-id=sha1
VDSO_LDFLAGS += --orphan-handling=$(CONFIG_LD_ORPHAN_WARN_LEVEL) VDSO_LDFLAGS += --orphan-handling=$(CONFIG_LD_ORPHAN_WARN_LEVEL)
# Add user-supplied KCPPFLAGS_COMPAT as the last assignments
VDSO_CFLAGS += $(KCPPFLAGS_COMPAT)
VDSO_AFLAGS += $(KCPPFLAGS_COMPAT)
# Borrow vdsomunge.c from the arm vDSO # Borrow vdsomunge.c from the arm vDSO
# We have to use a relative path because scripts/Makefile.host prefixes # We have to use a relative path because scripts/Makefile.host prefixes

View File

@ -221,22 +221,25 @@ static inline void __activate_traps_common(struct kvm_vcpu *vcpu)
vcpu->arch.mdcr_el2_host = read_sysreg(mdcr_el2); vcpu->arch.mdcr_el2_host = read_sysreg(mdcr_el2);
write_sysreg(vcpu->arch.mdcr_el2, mdcr_el2); write_sysreg(vcpu->arch.mdcr_el2, mdcr_el2);
}
if (cpus_have_final_cap(ARM64_HAS_HCX)) { static inline void __activate_traps_hcrx(struct kvm_vcpu *vcpu)
u64 hcrx = HCRX_GUEST_FLAGS; {
if (vcpu_has_nv(vcpu) && !is_hyp_ctxt(vcpu)) { u64 hcrx = HCRX_GUEST_FLAGS;
u64 clr = 0, set = 0;
compute_clr_set(vcpu, HCRX_EL2, clr, set); if (!cpus_have_final_cap(ARM64_HAS_HCX))
return;
hcrx |= set; if (vcpu_has_nv(vcpu) && !is_hyp_ctxt(vcpu)) {
hcrx &= ~clr; u64 clr = 0, set = 0;
}
write_sysreg_s(hcrx, SYS_HCRX_EL2); compute_clr_set(vcpu, HCRX_EL2, clr, set);
hcrx |= set;
hcrx &= ~clr;
} }
__activate_traps_hfgxtr(vcpu); write_sysreg_s(hcrx, SYS_HCRX_EL2);
} }
static inline void __deactivate_traps_common(struct kvm_vcpu *vcpu) static inline void __deactivate_traps_common(struct kvm_vcpu *vcpu)
@ -254,8 +257,6 @@ static inline void __deactivate_traps_common(struct kvm_vcpu *vcpu)
if (cpus_have_final_cap(ARM64_HAS_HCX)) if (cpus_have_final_cap(ARM64_HAS_HCX))
write_sysreg_s(HCRX_HOST_FLAGS, SYS_HCRX_EL2); write_sysreg_s(HCRX_HOST_FLAGS, SYS_HCRX_EL2);
__deactivate_traps_hfgxtr(vcpu);
} }
static inline void ___activate_traps(struct kvm_vcpu *vcpu) static inline void ___activate_traps(struct kvm_vcpu *vcpu)

View File

@ -87,7 +87,7 @@ int reclaim_hyp_pool(struct hyp_pool *pool, struct kvm_hyp_memcache *host_mc,
void destroy_hyp_vm_pgt(struct pkvm_hyp_vm *vm); void destroy_hyp_vm_pgt(struct pkvm_hyp_vm *vm);
void drain_hyp_pool(struct pkvm_hyp_vm *vm, struct kvm_hyp_memcache *mc); void drain_hyp_pool(struct pkvm_hyp_vm *vm, struct kvm_hyp_memcache *mc);
int module_change_host_page_prot(u64 pfn, enum kvm_pgtable_prot prot, u64 nr_pages); int module_change_host_page_prot(u64 pfn, enum kvm_pgtable_prot prot, u64 nr_pages, bool update_iommu);
void psci_mem_protect_inc(u64 n); void psci_mem_protect_inc(u64 n);
void psci_mem_protect_dec(u64 n); void psci_mem_protect_dec(u64 n);

View File

@ -6,6 +6,7 @@
*/ */
#include <asm/kvm_hyp.h> #include <asm/kvm_hyp.h>
#include <asm/kvm_hypevents.h>
#include <hyp/adjust_pc.h> #include <hyp/adjust_pc.h>
@ -146,7 +147,7 @@ struct hyp_mgt_allocator_ops kvm_iommu_allocator_ops = {
}; };
static struct kvm_hyp_iommu_domain * static struct kvm_hyp_iommu_domain *
handle_to_domain(pkvm_handle_t domain_id) __handle_to_domain(pkvm_handle_t domain_id, bool alloc)
{ {
int idx; int idx;
struct kvm_hyp_iommu_domain *domains; struct kvm_hyp_iommu_domain *domains;
@ -158,11 +159,9 @@ handle_to_domain(pkvm_handle_t domain_id)
idx = domain_id / KVM_IOMMU_DOMAINS_PER_PAGE; idx = domain_id / KVM_IOMMU_DOMAINS_PER_PAGE;
domains = (struct kvm_hyp_iommu_domain *)READ_ONCE(kvm_hyp_iommu_domains[idx]); domains = (struct kvm_hyp_iommu_domain *)READ_ONCE(kvm_hyp_iommu_domains[idx]);
if (!domains) { if (!domains) {
if (domain_id == KVM_IOMMU_DOMAIN_IDMAP_ID) if (!alloc)
domains = kvm_iommu_donate_pages_atomic(0); return NULL;
else domains = kvm_iommu_donate_page();
domains = kvm_iommu_donate_page();
if (!domains) if (!domains)
return NULL; return NULL;
/* /*
@ -174,16 +173,19 @@ handle_to_domain(pkvm_handle_t domain_id)
*/ */
if (WARN_ON(cmpxchg64_relaxed(&kvm_hyp_iommu_domains[idx], 0, if (WARN_ON(cmpxchg64_relaxed(&kvm_hyp_iommu_domains[idx], 0,
(void *)domains) != 0)) { (void *)domains) != 0)) {
if (domain_id == KVM_IOMMU_DOMAIN_IDMAP_ID) kvm_iommu_reclaim_page(domains);
kvm_iommu_reclaim_pages_atomic(domains, 0);
else
kvm_iommu_reclaim_page(domains);
return NULL; return NULL;
} }
} }
return &domains[domain_id % KVM_IOMMU_DOMAINS_PER_PAGE]; return &domains[domain_id % KVM_IOMMU_DOMAINS_PER_PAGE];
} }
static struct kvm_hyp_iommu_domain *
handle_to_domain(pkvm_handle_t domain_id)
{
return __handle_to_domain(domain_id, true);
}
static int domain_get(struct kvm_hyp_iommu_domain *domain) static int domain_get(struct kvm_hyp_iommu_domain *domain)
{ {
int old = atomic_fetch_inc_acquire(&domain->refs); int old = atomic_fetch_inc_acquire(&domain->refs);
@ -520,14 +522,7 @@ static int kvm_iommu_init_idmap(struct kvm_hyp_memcache *atomic_mc)
if (ret) if (ret)
return ret; return ret;
ret = refill_hyp_pool(&iommu_atomic_pool, atomic_mc); return refill_hyp_pool(&iommu_atomic_pool, atomic_mc);
if (ret)
return ret;
/* The host must guarantee that the allocator can be used from this context. */
return WARN_ON(kvm_iommu_alloc_domain(KVM_IOMMU_DOMAIN_IDMAP_ID,
KVM_IOMMU_DOMAIN_IDMAP_TYPE));
} }
int kvm_iommu_init(struct kvm_iommu_ops *ops, struct kvm_hyp_memcache *atomic_mc, int kvm_iommu_init(struct kvm_iommu_ops *ops, struct kvm_hyp_memcache *atomic_mc,
@ -542,10 +537,6 @@ int kvm_iommu_init(struct kvm_iommu_ops *ops, struct kvm_hyp_memcache *atomic_mc
!ops->detach_dev)) !ops->detach_dev))
return -ENODEV; return -ENODEV;
ret = ops->init ? ops->init(init_arg) : 0;
if (ret)
return ret;
ret = __pkvm_host_donate_hyp(__hyp_pa(kvm_hyp_iommu_domains) >> PAGE_SHIFT, ret = __pkvm_host_donate_hyp(__hyp_pa(kvm_hyp_iommu_domains) >> PAGE_SHIFT,
1 << get_order(KVM_IOMMU_DOMAINS_ROOT_SIZE)); 1 << get_order(KVM_IOMMU_DOMAINS_ROOT_SIZE));
if (ret) if (ret)
@ -559,7 +550,11 @@ int kvm_iommu_init(struct kvm_iommu_ops *ops, struct kvm_hyp_memcache *atomic_mc
smp_wmb(); smp_wmb();
kvm_iommu_ops = ops; kvm_iommu_ops = ops;
return kvm_iommu_init_idmap(atomic_mc); ret = kvm_iommu_init_idmap(atomic_mc);
if (ret)
return ret;
return ops->init ? ops->init(init_arg) : 0;
} }
static inline int pkvm_to_iommu_prot(int prot) static inline int pkvm_to_iommu_prot(int prot)
@ -586,9 +581,9 @@ void kvm_iommu_host_stage2_idmap(phys_addr_t start, phys_addr_t end,
if (!kvm_iommu_is_ready()) if (!kvm_iommu_is_ready())
return; return;
domain = handle_to_domain(KVM_IOMMU_DOMAIN_IDMAP_ID); trace_iommu_idmap(start, end, prot);
if (!domain)
return; domain = __handle_to_domain(KVM_IOMMU_DOMAIN_IDMAP_ID, false);
kvm_iommu_ops->host_stage2_idmap(domain, start, end, pkvm_to_iommu_prot(prot)); kvm_iommu_ops->host_stage2_idmap(domain, start, end, pkvm_to_iommu_prot(prot));
} }

View File

@ -674,7 +674,7 @@ static void __host_update_page_state(phys_addr_t addr, u64 size, enum pkvm_page_
} }
static int __host_stage2_set_owner_locked(phys_addr_t addr, u64 size, u8 owner_id, bool is_memory, static int __host_stage2_set_owner_locked(phys_addr_t addr, u64 size, u8 owner_id, bool is_memory,
enum pkvm_page_state nopage_state) enum pkvm_page_state nopage_state, bool update_iommu)
{ {
kvm_pte_t annotation; kvm_pte_t annotation;
enum kvm_pgtable_prot prot; enum kvm_pgtable_prot prot;
@ -692,24 +692,29 @@ static int __host_stage2_set_owner_locked(phys_addr_t addr, u64 size, u8 owner_i
&host_mmu.pgt, &host_mmu.pgt,
addr, size, &host_s2_pool, annotation); addr, size, &host_s2_pool, annotation);
} }
if (ret || !is_memory) if (ret)
return ret; return ret;
if (update_iommu) {
prot = owner_id == PKVM_ID_HOST ? PKVM_HOST_MEM_PROT : 0;
kvm_iommu_host_stage2_idmap(addr, addr + size, prot);
}
if (!is_memory)
return 0;
/* Don't forget to update the vmemmap tracking for the host */ /* Don't forget to update the vmemmap tracking for the host */
if (owner_id == PKVM_ID_HOST) if (owner_id == PKVM_ID_HOST)
__host_update_page_state(addr, size, PKVM_PAGE_OWNED); __host_update_page_state(addr, size, PKVM_PAGE_OWNED);
else else
__host_update_page_state(addr, size, PKVM_NOPAGE | nopage_state); __host_update_page_state(addr, size, PKVM_NOPAGE | nopage_state);
prot = owner_id == PKVM_ID_HOST ? PKVM_HOST_MEM_PROT : 0;
kvm_iommu_host_stage2_idmap(addr, addr + size, prot);
return 0; return 0;
} }
int host_stage2_set_owner_locked(phys_addr_t addr, u64 size, u8 owner_id) int host_stage2_set_owner_locked(phys_addr_t addr, u64 size, u8 owner_id)
{ {
return __host_stage2_set_owner_locked(addr, size, owner_id, addr_is_memory(addr), 0); return __host_stage2_set_owner_locked(addr, size, owner_id, addr_is_memory(addr), 0, true);
} }
static bool host_stage2_force_pte(u64 addr, u64 end, enum kvm_pgtable_prot prot) static bool host_stage2_force_pte(u64 addr, u64 end, enum kvm_pgtable_prot prot)
@ -2183,7 +2188,8 @@ int __pkvm_hyp_donate_host(u64 pfn, u64 nr_pages)
KVM_PGTABLE_PROT_PXN | \ KVM_PGTABLE_PROT_PXN | \
KVM_PGTABLE_PROT_UXN) KVM_PGTABLE_PROT_UXN)
int module_change_host_page_prot(u64 pfn, enum kvm_pgtable_prot prot, u64 nr_pages) int module_change_host_page_prot(u64 pfn, enum kvm_pgtable_prot prot, u64 nr_pages,
bool update_iommu)
{ {
u64 i, addr = hyp_pfn_to_phys(pfn); u64 i, addr = hyp_pfn_to_phys(pfn);
u64 end = addr + nr_pages * PAGE_SIZE; u64 end = addr + nr_pages * PAGE_SIZE;
@ -2237,10 +2243,10 @@ update:
if (!prot) { if (!prot) {
ret = __host_stage2_set_owner_locked(addr, nr_pages << PAGE_SHIFT, ret = __host_stage2_set_owner_locked(addr, nr_pages << PAGE_SHIFT,
PKVM_ID_PROTECTED, !!reg, PKVM_ID_PROTECTED, !!reg,
PKVM_MODULE_OWNED_PAGE); PKVM_MODULE_OWNED_PAGE, update_iommu);
} else { } else {
ret = host_stage2_idmap_locked( ret = host_stage2_idmap_locked(
addr, nr_pages << PAGE_SHIFT, prot, false); addr, nr_pages << PAGE_SHIFT, prot, update_iommu);
} }
if (WARN_ON(ret) || !page || !prot) if (WARN_ON(ret) || !page || !prot)
@ -2378,7 +2384,7 @@ static int __pkvm_host_use_dma_page(phys_addr_t phys_addr)
return 0; return 0;
if (state != PKVM_PAGE_OWNED) if (state != PKVM_PAGE_OWNED)
return -EPERM; return -EPERM;
prot = pkvm_mkstate(KVM_HOST_S2_DEFAULT_MMIO_PTE, PKVM_PAGE_MMIO_DMA); prot = pkvm_mkstate(PKVM_HOST_MMIO_PROT, PKVM_PAGE_MMIO_DMA);
return host_stage2_idmap_locked(phys_addr, PAGE_SIZE, prot, false); return host_stage2_idmap_locked(phys_addr, PAGE_SIZE, prot, false);
} }

View File

@ -201,6 +201,10 @@ static void pvm_init_traps_aa64dfr0(struct kvm_vcpu *vcpu)
cptr_set |= CPTR_EL2_TTA; cptr_set |= CPTR_EL2_TTA;
} }
/* Trap External Trace */
if (!FIELD_GET(ARM64_FEATURE_MASK(ID_AA64DFR0_EL1_ExtTrcBuff), feature_ids))
mdcr_clear |= MDCR_EL2_E2TB_MASK << MDCR_EL2_E2TB_SHIFT;
vcpu->arch.mdcr_el2 |= mdcr_set; vcpu->arch.mdcr_el2 |= mdcr_set;
vcpu->arch.mdcr_el2 &= ~mdcr_clear; vcpu->arch.mdcr_el2 &= ~mdcr_clear;
vcpu->arch.cptr_el2 |= cptr_set; vcpu->arch.cptr_el2 |= cptr_set;
@ -509,8 +513,8 @@ static void pkvm_vcpu_init_features_from_host(struct pkvm_hyp_vcpu *hyp_vcpu)
if (FIELD_GET(ARM64_FEATURE_MASK(ID_AA64PFR0_EL1_SVE), PVM_ID_AA64PFR0_RESTRICT_UNSIGNED)) if (FIELD_GET(ARM64_FEATURE_MASK(ID_AA64PFR0_EL1_SVE), PVM_ID_AA64PFR0_RESTRICT_UNSIGNED))
set_bit(KVM_ARM_VCPU_SVE, allowed_features); set_bit(KVM_ARM_VCPU_SVE, allowed_features);
if (FIELD_GET(ARM64_FEATURE_MASK(ID_AA64ISAR1_EL1_API), PVM_ID_AA64ISAR1_ALLOW) && if (FIELD_GET(ARM64_FEATURE_MASK(ID_AA64ISAR1_EL1_API), PVM_ID_AA64ISAR1_RESTRICT_UNSIGNED) &&
FIELD_GET(ARM64_FEATURE_MASK(ID_AA64ISAR1_EL1_APA), PVM_ID_AA64ISAR1_ALLOW)) FIELD_GET(ARM64_FEATURE_MASK(ID_AA64ISAR1_EL1_APA), PVM_ID_AA64ISAR1_RESTRICT_UNSIGNED))
set_bit(KVM_ARM_VCPU_PTRAUTH_ADDRESS, allowed_features); set_bit(KVM_ARM_VCPU_PTRAUTH_ADDRESS, allowed_features);
if (FIELD_GET(ARM64_FEATURE_MASK(ID_AA64ISAR1_EL1_GPI), PVM_ID_AA64ISAR1_ALLOW) && if (FIELD_GET(ARM64_FEATURE_MASK(ID_AA64ISAR1_EL1_GPI), PVM_ID_AA64ISAR1_ALLOW) &&

View File

@ -37,6 +37,52 @@ DEFINE_PER_CPU(unsigned long, kvm_hyp_vector);
extern void kvm_nvhe_prepare_backtrace(unsigned long fp, unsigned long pc); extern void kvm_nvhe_prepare_backtrace(unsigned long fp, unsigned long pc);
extern void __pkvm_unmask_serror(void); extern void __pkvm_unmask_serror(void);
#define update_pvm_fgt_traps(vcpu, reg) \
update_fgt_traps_cs(vcpu, reg, PVM_ ## reg ## _CLR, PVM_ ## reg ## _SET)
static void __activate_pvm_fine_grain_traps(struct kvm_vcpu *vcpu)
{
if (cpus_have_final_cap(ARM64_HAS_HCX))
update_pvm_fgt_traps(vcpu, HCRX_EL2);
if (!cpus_have_final_cap(ARM64_HAS_FGT))
return;
update_pvm_fgt_traps(vcpu, HFGRTR_EL2);
/* Trap guest writes to TCR_EL1 to prevent it from enabling HA or HD. */
if (cpus_have_final_cap(ARM64_WORKAROUND_AMPERE_AC03_CPU_38)) {
update_fgt_traps_cs(vcpu, HFGWTR_EL2, PVM_HFGWTR_EL2_CLR,
PVM_HFGWTR_EL2_SET | HFGxTR_EL2_TCR_EL1_MASK);
} else {
update_pvm_fgt_traps(vcpu, HFGWTR_EL2);
}
update_pvm_fgt_traps(vcpu, HFGITR_EL2);
update_pvm_fgt_traps(vcpu, HDFGRTR_EL2);
update_pvm_fgt_traps(vcpu, HDFGWTR_EL2);
if (cpu_has_amu())
update_pvm_fgt_traps(vcpu, HAFGRTR_EL2);
}
static void __deactivate_pvm_traps_hfgxtr(struct kvm_vcpu *vcpu)
{
struct kvm_cpu_context *hctxt = &this_cpu_ptr(&kvm_host_data)->host_ctxt;
if (!cpus_have_final_cap(ARM64_HAS_FGT))
return;
write_sysreg_s(ctxt_sys_reg(hctxt, HFGRTR_EL2), SYS_HFGRTR_EL2);
write_sysreg_s(ctxt_sys_reg(hctxt, HFGWTR_EL2), SYS_HFGWTR_EL2);
write_sysreg_s(ctxt_sys_reg(hctxt, HFGITR_EL2), SYS_HFGITR_EL2);
write_sysreg_s(ctxt_sys_reg(hctxt, HDFGRTR_EL2), SYS_HDFGRTR_EL2);
write_sysreg_s(ctxt_sys_reg(hctxt, HDFGWTR_EL2), SYS_HDFGWTR_EL2);
if (cpu_has_amu())
write_sysreg_s(ctxt_sys_reg(hctxt, HAFGRTR_EL2), SYS_HAFGRTR_EL2);
}
static void __activate_traps(struct kvm_vcpu *vcpu) static void __activate_traps(struct kvm_vcpu *vcpu)
{ {
u64 val; u64 val;
@ -44,6 +90,13 @@ static void __activate_traps(struct kvm_vcpu *vcpu)
___activate_traps(vcpu); ___activate_traps(vcpu);
__activate_traps_common(vcpu); __activate_traps_common(vcpu);
if (unlikely(vcpu_is_protected(vcpu))) {
__activate_pvm_fine_grain_traps(vcpu);
} else {
__activate_traps_hcrx(vcpu);
__activate_traps_hfgxtr(vcpu);
}
val = vcpu->arch.cptr_el2; val = vcpu->arch.cptr_el2;
val |= CPTR_EL2_TAM; /* Same bit irrespective of E2H */ val |= CPTR_EL2_TAM; /* Same bit irrespective of E2H */
val |= has_hvhe() ? CPACR_EL1_TTA : CPTR_EL2_TTA; val |= has_hvhe() ? CPACR_EL1_TTA : CPTR_EL2_TTA;
@ -107,6 +160,11 @@ static void __deactivate_traps(struct kvm_vcpu *vcpu)
__deactivate_traps_common(vcpu); __deactivate_traps_common(vcpu);
if (unlikely(vcpu_is_protected(vcpu)))
__deactivate_pvm_traps_hfgxtr(vcpu);
else
__deactivate_traps_hfgxtr(vcpu);
write_sysreg(this_cpu_ptr(&kvm_init_params)->hcr_el2, hcr_el2); write_sysreg(this_cpu_ptr(&kvm_init_params)->hcr_el2, hcr_el2);
kvm_reset_cptr_el2(vcpu); kvm_reset_cptr_el2(vcpu);

View File

@ -148,6 +148,8 @@ void activate_traps_vhe_load(struct kvm_vcpu *vcpu)
local_irq_save(flags); local_irq_save(flags);
__activate_traps_common(vcpu); __activate_traps_common(vcpu);
__activate_traps_hcrx(vcpu);
__activate_traps_hfgxtr(vcpu);
local_irq_restore(flags); local_irq_restore(flags);
} }
@ -157,6 +159,7 @@ void deactivate_traps_vhe_put(struct kvm_vcpu *vcpu)
local_irq_save(flags); local_irq_save(flags);
__deactivate_traps_common(vcpu); __deactivate_traps_common(vcpu);
__deactivate_traps_hfgxtr(vcpu);
local_irq_restore(flags); local_irq_restore(flags);
} }

View File

@ -52,7 +52,6 @@ CONFIG_EXPERT=y
CONFIG_KALLSYMS_ALL=y CONFIG_KALLSYMS_ALL=y
# CONFIG_RSEQ is not set # CONFIG_RSEQ is not set
CONFIG_PROFILING=y CONFIG_PROFILING=y
CONFIG_KEXEC_FILE=y
CONFIG_SMP=y CONFIG_SMP=y
CONFIG_X86_X2APIC=y CONFIG_X86_X2APIC=y
CONFIG_HYPERVISOR_GUEST=y CONFIG_HYPERVISOR_GUEST=y
@ -96,6 +95,7 @@ CONFIG_BLK_DEV_ZONED=y
CONFIG_BLK_DEV_THROTTLING=y CONFIG_BLK_DEV_THROTTLING=y
CONFIG_BLK_WBT=y CONFIG_BLK_WBT=y
# CONFIG_BLK_WBT_MQ is not set # CONFIG_BLK_WBT_MQ is not set
CONFIG_BLK_CGROUP_IOCOST=y
CONFIG_BLK_CGROUP_IOPRIO=y CONFIG_BLK_CGROUP_IOPRIO=y
CONFIG_BLK_INLINE_ENCRYPTION=y CONFIG_BLK_INLINE_ENCRYPTION=y
CONFIG_BLK_INLINE_ENCRYPTION_FALLBACK=y CONFIG_BLK_INLINE_ENCRYPTION_FALLBACK=y
@ -535,6 +535,7 @@ CONFIG_IIO_TRIGGER=y
CONFIG_GENERIC_PHY=y CONFIG_GENERIC_PHY=y
CONFIG_POWERCAP=y CONFIG_POWERCAP=y
CONFIG_IDLE_INJECT=y CONFIG_IDLE_INJECT=y
CONFIG_DTPM=y
CONFIG_ANDROID_BINDER_IPC=y CONFIG_ANDROID_BINDER_IPC=y
CONFIG_ANDROID_BINDERFS=y CONFIG_ANDROID_BINDERFS=y
CONFIG_ANDROID_DEBUG_SYMBOLS=y CONFIG_ANDROID_DEBUG_SYMBOLS=y

View File

@ -35,6 +35,191 @@
} }
] ]
}, },
{
"name": "selftests",
"options": [
{
"include-filter": "kselftest_binderfs_binderfs_test"
},
{
"include-filter": "kselftest_breakpoints_breakpoint_test"
},
{
"include-filter": "kselftest_capabilities_test_execve"
},
{
"include-filter": "kselftest_futex_requeue"
},
{
"include-filter": "kselftest_futex_requeue_pi"
},
{
"include-filter": "kselftest_futex_requeue_pi_500k"
},
{
"include-filter": "kselftest_futex_requeue_pi_5k"
},
{
"include-filter": "kselftest_futex_requeue_pi_b"
},
{
"include-filter": "kselftest_futex_requeue_pi_b_500k"
},
{
"include-filter": "kselftest_futex_requeue_pi_b_5k"
},
{
"include-filter": "kselftest_futex_requeue_pi_bl"
},
{
"include-filter": "kselftest_futex_requeue_pi_bl_2G"
},
{
"include-filter": "kselftest_futex_requeue_pi_bl_500k"
},
{
"include-filter": "kselftest_futex_requeue_pi_bl_5k"
},
{
"include-filter": "kselftest_futex_requeue_pi_bo"
},
{
"include-filter": "kselftest_futex_requeue_pi_bo_500k"
},
{
"include-filter": "kselftest_futex_requeue_pi_bo_5k"
},
{
"include-filter": "kselftest_futex_requeue_pi_l"
},
{
"include-filter": "kselftest_futex_requeue_pi_l_2G"
},
{
"include-filter": "kselftest_futex_requeue_pi_l_500k"
},
{
"include-filter": "kselftest_futex_requeue_pi_l_5k"
},
{
"include-filter": "kselftest_futex_requeue_pi_mismatched_ops"
},
{
"include-filter": "kselftest_futex_requeue_pi_o"
},
{
"include-filter": "kselftest_futex_requeue_pi_o_500k"
},
{
"include-filter": "kselftest_futex_requeue_pi_o_5k"
},
{
"include-filter": "kselftest_futex_requeue_pi_signal_restart"
},
{
"include-filter": "kselftest_futex_wait"
},
{
"include-filter": "kselftest_futex_wait_private_mapped_file"
},
{
"include-filter": "kselftest_futex_wait_timeout"
},
{
"include-filter": "kselftest_futex_wait_uninitialized_heap"
},
{
"include-filter": "kselftest_futex_wait_wouldblock"
},
{
"include-filter": "kselftest_kcmp_kcmp_test"
},
{
"include-filter": "kselftest_mm_mremap_dontunmap"
},
{
"include-filter": "kselftest_mm_mremap_test"
},
{
"include-filter": "kselftest_mm_uffd_unit_tests"
},
{
"include-filter": "kselftest_net_psock_tpacket"
},
{
"include-filter": "kselftest_net_reuseaddr_conflict"
},
{
"include-filter": "kselftest_net_socket"
},
{
"include-filter": "kselftest_ptrace_peeksiginfo"
},
{
"include-filter": "kselftest_rtc_rtctest"
},
{
"include-filter": "kselftest_seccomp_seccomp_bpf"
},
{
"include-filter": "kselftest_size_test_get_size"
},
{
"include-filter": "kselftest_timers_inconsistency_check"
},
{
"include-filter": "kselftest_timers_nanosleep"
},
{
"include-filter": "kselftest_timers_nsleep_lat"
},
{
"include-filter": "kselftest_timers_posix_timers"
},
{
"include-filter": "kselftest_timers_set_timer_lat"
},
{
"include-filter": "kselftest_timers_tests_raw_skew"
},
{
"include-filter": "kselftest_timers_threadtest"
},
{
"include-filter": "kselftest_timers_valid_adjtimex"
},
{
"include-filter": "kselftest_vdso_vdso_test_abi"
},
{
"include-filter": "kselftest_vdso_vdso_test_clock_getres"
},
{
"include-filter": "kselftest_vdso_vdso_test_getcpu"
},
{
"include-filter": "kselftest_vdso_vdso_test_gettimeofday"
},
{
"include-filter": "kselftest_x86_check_initial_reg_state"
},
{
"include-filter": "kselftest_x86_ldt_gdt"
},
{
"include-filter": "kselftest_x86_ptrace_syscall"
},
{
"include-filter": "kselftest_x86_single_step_syscall"
},
{
"include-filter": "kselftest_x86_syscall_nt"
},
{
"include-filter": "kselftest_x86_test_mremap_vdso"
}
]
},
{ {
"name": "vts_kernel_net_tests" "name": "vts_kernel_net_tests"
} }

View File

@ -35,6 +35,191 @@
} }
] ]
}, },
{
"name": "selftests",
"options": [
{
"include-filter": "kselftest_binderfs_binderfs_test"
},
{
"include-filter": "kselftest_breakpoints_breakpoint_test"
},
{
"include-filter": "kselftest_capabilities_test_execve"
},
{
"include-filter": "kselftest_futex_requeue"
},
{
"include-filter": "kselftest_futex_requeue_pi"
},
{
"include-filter": "kselftest_futex_requeue_pi_500k"
},
{
"include-filter": "kselftest_futex_requeue_pi_5k"
},
{
"include-filter": "kselftest_futex_requeue_pi_b"
},
{
"include-filter": "kselftest_futex_requeue_pi_b_500k"
},
{
"include-filter": "kselftest_futex_requeue_pi_b_5k"
},
{
"include-filter": "kselftest_futex_requeue_pi_bl"
},
{
"include-filter": "kselftest_futex_requeue_pi_bl_2G"
},
{
"include-filter": "kselftest_futex_requeue_pi_bl_500k"
},
{
"include-filter": "kselftest_futex_requeue_pi_bl_5k"
},
{
"include-filter": "kselftest_futex_requeue_pi_bo"
},
{
"include-filter": "kselftest_futex_requeue_pi_bo_500k"
},
{
"include-filter": "kselftest_futex_requeue_pi_bo_5k"
},
{
"include-filter": "kselftest_futex_requeue_pi_l"
},
{
"include-filter": "kselftest_futex_requeue_pi_l_2G"
},
{
"include-filter": "kselftest_futex_requeue_pi_l_500k"
},
{
"include-filter": "kselftest_futex_requeue_pi_l_5k"
},
{
"include-filter": "kselftest_futex_requeue_pi_mismatched_ops"
},
{
"include-filter": "kselftest_futex_requeue_pi_o"
},
{
"include-filter": "kselftest_futex_requeue_pi_o_500k"
},
{
"include-filter": "kselftest_futex_requeue_pi_o_5k"
},
{
"include-filter": "kselftest_futex_requeue_pi_signal_restart"
},
{
"include-filter": "kselftest_futex_wait"
},
{
"include-filter": "kselftest_futex_wait_private_mapped_file"
},
{
"include-filter": "kselftest_futex_wait_timeout"
},
{
"include-filter": "kselftest_futex_wait_uninitialized_heap"
},
{
"include-filter": "kselftest_futex_wait_wouldblock"
},
{
"include-filter": "kselftest_kcmp_kcmp_test"
},
{
"include-filter": "kselftest_mm_mremap_dontunmap"
},
{
"include-filter": "kselftest_mm_mremap_test"
},
{
"include-filter": "kselftest_mm_uffd_unit_tests"
},
{
"include-filter": "kselftest_net_psock_tpacket"
},
{
"include-filter": "kselftest_net_reuseaddr_conflict"
},
{
"include-filter": "kselftest_net_socket"
},
{
"include-filter": "kselftest_ptrace_peeksiginfo"
},
{
"include-filter": "kselftest_rtc_rtctest"
},
{
"include-filter": "kselftest_seccomp_seccomp_bpf"
},
{
"include-filter": "kselftest_size_test_get_size"
},
{
"include-filter": "kselftest_timers_inconsistency_check"
},
{
"include-filter": "kselftest_timers_nanosleep"
},
{
"include-filter": "kselftest_timers_nsleep_lat"
},
{
"include-filter": "kselftest_timers_posix_timers"
},
{
"include-filter": "kselftest_timers_set_timer_lat"
},
{
"include-filter": "kselftest_timers_tests_raw_skew"
},
{
"include-filter": "kselftest_timers_threadtest"
},
{
"include-filter": "kselftest_timers_valid_adjtimex"
},
{
"include-filter": "kselftest_vdso_vdso_test_abi"
},
{
"include-filter": "kselftest_vdso_vdso_test_clock_getres"
},
{
"include-filter": "kselftest_vdso_vdso_test_getcpu"
},
{
"include-filter": "kselftest_vdso_vdso_test_gettimeofday"
},
{
"include-filter": "kselftest_x86_check_initial_reg_state"
},
{
"include-filter": "kselftest_x86_ldt_gdt"
},
{
"include-filter": "kselftest_x86_ptrace_syscall"
},
{
"include-filter": "kselftest_x86_single_step_syscall"
},
{
"include-filter": "kselftest_x86_syscall_nt"
},
{
"include-filter": "kselftest_x86_test_mremap_vdso"
}
]
},
{ {
"name": "vts_kernel_net_tests" "name": "vts_kernel_net_tests"
} }

View File

@ -35,6 +35,191 @@
} }
] ]
}, },
{
"name": "selftests",
"options": [
{
"include-filter": "kselftest_binderfs_binderfs_test"
},
{
"include-filter": "kselftest_breakpoints_breakpoint_test"
},
{
"include-filter": "kselftest_capabilities_test_execve"
},
{
"include-filter": "kselftest_futex_requeue"
},
{
"include-filter": "kselftest_futex_requeue_pi"
},
{
"include-filter": "kselftest_futex_requeue_pi_500k"
},
{
"include-filter": "kselftest_futex_requeue_pi_5k"
},
{
"include-filter": "kselftest_futex_requeue_pi_b"
},
{
"include-filter": "kselftest_futex_requeue_pi_b_500k"
},
{
"include-filter": "kselftest_futex_requeue_pi_b_5k"
},
{
"include-filter": "kselftest_futex_requeue_pi_bl"
},
{
"include-filter": "kselftest_futex_requeue_pi_bl_2G"
},
{
"include-filter": "kselftest_futex_requeue_pi_bl_500k"
},
{
"include-filter": "kselftest_futex_requeue_pi_bl_5k"
},
{
"include-filter": "kselftest_futex_requeue_pi_bo"
},
{
"include-filter": "kselftest_futex_requeue_pi_bo_500k"
},
{
"include-filter": "kselftest_futex_requeue_pi_bo_5k"
},
{
"include-filter": "kselftest_futex_requeue_pi_l"
},
{
"include-filter": "kselftest_futex_requeue_pi_l_2G"
},
{
"include-filter": "kselftest_futex_requeue_pi_l_500k"
},
{
"include-filter": "kselftest_futex_requeue_pi_l_5k"
},
{
"include-filter": "kselftest_futex_requeue_pi_mismatched_ops"
},
{
"include-filter": "kselftest_futex_requeue_pi_o"
},
{
"include-filter": "kselftest_futex_requeue_pi_o_500k"
},
{
"include-filter": "kselftest_futex_requeue_pi_o_5k"
},
{
"include-filter": "kselftest_futex_requeue_pi_signal_restart"
},
{
"include-filter": "kselftest_futex_wait"
},
{
"include-filter": "kselftest_futex_wait_private_mapped_file"
},
{
"include-filter": "kselftest_futex_wait_timeout"
},
{
"include-filter": "kselftest_futex_wait_uninitialized_heap"
},
{
"include-filter": "kselftest_futex_wait_wouldblock"
},
{
"include-filter": "kselftest_kcmp_kcmp_test"
},
{
"include-filter": "kselftest_mm_mremap_dontunmap"
},
{
"include-filter": "kselftest_mm_mremap_test"
},
{
"include-filter": "kselftest_mm_uffd_unit_tests"
},
{
"include-filter": "kselftest_net_psock_tpacket"
},
{
"include-filter": "kselftest_net_reuseaddr_conflict"
},
{
"include-filter": "kselftest_net_socket"
},
{
"include-filter": "kselftest_ptrace_peeksiginfo"
},
{
"include-filter": "kselftest_rtc_rtctest"
},
{
"include-filter": "kselftest_seccomp_seccomp_bpf"
},
{
"include-filter": "kselftest_size_test_get_size"
},
{
"include-filter": "kselftest_timers_inconsistency_check"
},
{
"include-filter": "kselftest_timers_nanosleep"
},
{
"include-filter": "kselftest_timers_nsleep_lat"
},
{
"include-filter": "kselftest_timers_posix_timers"
},
{
"include-filter": "kselftest_timers_set_timer_lat"
},
{
"include-filter": "kselftest_timers_tests_raw_skew"
},
{
"include-filter": "kselftest_timers_threadtest"
},
{
"include-filter": "kselftest_timers_valid_adjtimex"
},
{
"include-filter": "kselftest_vdso_vdso_test_abi"
},
{
"include-filter": "kselftest_vdso_vdso_test_clock_getres"
},
{
"include-filter": "kselftest_vdso_vdso_test_getcpu"
},
{
"include-filter": "kselftest_vdso_vdso_test_gettimeofday"
},
{
"include-filter": "kselftest_x86_check_initial_reg_state"
},
{
"include-filter": "kselftest_x86_ldt_gdt"
},
{
"include-filter": "kselftest_x86_ptrace_syscall"
},
{
"include-filter": "kselftest_x86_single_step_syscall"
},
{
"include-filter": "kselftest_x86_syscall_nt"
},
{
"include-filter": "kselftest_x86_test_mremap_vdso"
}
]
},
{ {
"name": "vts_kernel_net_tests" "name": "vts_kernel_net_tests"
} }

View File

@ -35,6 +35,191 @@
} }
] ]
}, },
{
"name": "selftests",
"options": [
{
"include-filter": "kselftest_binderfs_binderfs_test"
},
{
"include-filter": "kselftest_breakpoints_breakpoint_test"
},
{
"include-filter": "kselftest_capabilities_test_execve"
},
{
"include-filter": "kselftest_futex_requeue"
},
{
"include-filter": "kselftest_futex_requeue_pi"
},
{
"include-filter": "kselftest_futex_requeue_pi_500k"
},
{
"include-filter": "kselftest_futex_requeue_pi_5k"
},
{
"include-filter": "kselftest_futex_requeue_pi_b"
},
{
"include-filter": "kselftest_futex_requeue_pi_b_500k"
},
{
"include-filter": "kselftest_futex_requeue_pi_b_5k"
},
{
"include-filter": "kselftest_futex_requeue_pi_bl"
},
{
"include-filter": "kselftest_futex_requeue_pi_bl_2G"
},
{
"include-filter": "kselftest_futex_requeue_pi_bl_500k"
},
{
"include-filter": "kselftest_futex_requeue_pi_bl_5k"
},
{
"include-filter": "kselftest_futex_requeue_pi_bo"
},
{
"include-filter": "kselftest_futex_requeue_pi_bo_500k"
},
{
"include-filter": "kselftest_futex_requeue_pi_bo_5k"
},
{
"include-filter": "kselftest_futex_requeue_pi_l"
},
{
"include-filter": "kselftest_futex_requeue_pi_l_2G"
},
{
"include-filter": "kselftest_futex_requeue_pi_l_500k"
},
{
"include-filter": "kselftest_futex_requeue_pi_l_5k"
},
{
"include-filter": "kselftest_futex_requeue_pi_mismatched_ops"
},
{
"include-filter": "kselftest_futex_requeue_pi_o"
},
{
"include-filter": "kselftest_futex_requeue_pi_o_500k"
},
{
"include-filter": "kselftest_futex_requeue_pi_o_5k"
},
{
"include-filter": "kselftest_futex_requeue_pi_signal_restart"
},
{
"include-filter": "kselftest_futex_wait"
},
{
"include-filter": "kselftest_futex_wait_private_mapped_file"
},
{
"include-filter": "kselftest_futex_wait_timeout"
},
{
"include-filter": "kselftest_futex_wait_uninitialized_heap"
},
{
"include-filter": "kselftest_futex_wait_wouldblock"
},
{
"include-filter": "kselftest_kcmp_kcmp_test"
},
{
"include-filter": "kselftest_mm_mremap_dontunmap"
},
{
"include-filter": "kselftest_mm_mremap_test"
},
{
"include-filter": "kselftest_mm_uffd_unit_tests"
},
{
"include-filter": "kselftest_net_psock_tpacket"
},
{
"include-filter": "kselftest_net_reuseaddr_conflict"
},
{
"include-filter": "kselftest_net_socket"
},
{
"include-filter": "kselftest_ptrace_peeksiginfo"
},
{
"include-filter": "kselftest_rtc_rtctest"
},
{
"include-filter": "kselftest_seccomp_seccomp_bpf"
},
{
"include-filter": "kselftest_size_test_get_size"
},
{
"include-filter": "kselftest_timers_inconsistency_check"
},
{
"include-filter": "kselftest_timers_nanosleep"
},
{
"include-filter": "kselftest_timers_nsleep_lat"
},
{
"include-filter": "kselftest_timers_posix_timers"
},
{
"include-filter": "kselftest_timers_set_timer_lat"
},
{
"include-filter": "kselftest_timers_tests_raw_skew"
},
{
"include-filter": "kselftest_timers_threadtest"
},
{
"include-filter": "kselftest_timers_valid_adjtimex"
},
{
"include-filter": "kselftest_vdso_vdso_test_abi"
},
{
"include-filter": "kselftest_vdso_vdso_test_clock_getres"
},
{
"include-filter": "kselftest_vdso_vdso_test_getcpu"
},
{
"include-filter": "kselftest_vdso_vdso_test_gettimeofday"
},
{
"include-filter": "kselftest_x86_check_initial_reg_state"
},
{
"include-filter": "kselftest_x86_ldt_gdt"
},
{
"include-filter": "kselftest_x86_ptrace_syscall"
},
{
"include-filter": "kselftest_x86_single_step_syscall"
},
{
"include-filter": "kselftest_x86_syscall_nt"
},
{
"include-filter": "kselftest_x86_test_mremap_vdso"
}
]
},
{ {
"name": "vts_kernel_net_tests" "name": "vts_kernel_net_tests"
} }

View File

@ -35,6 +35,191 @@
} }
] ]
}, },
{
"name": "selftests",
"options": [
{
"include-filter": "kselftest_binderfs_binderfs_test"
},
{
"include-filter": "kselftest_breakpoints_breakpoint_test"
},
{
"include-filter": "kselftest_capabilities_test_execve"
},
{
"include-filter": "kselftest_futex_requeue"
},
{
"include-filter": "kselftest_futex_requeue_pi"
},
{
"include-filter": "kselftest_futex_requeue_pi_500k"
},
{
"include-filter": "kselftest_futex_requeue_pi_5k"
},
{
"include-filter": "kselftest_futex_requeue_pi_b"
},
{
"include-filter": "kselftest_futex_requeue_pi_b_500k"
},
{
"include-filter": "kselftest_futex_requeue_pi_b_5k"
},
{
"include-filter": "kselftest_futex_requeue_pi_bl"
},
{
"include-filter": "kselftest_futex_requeue_pi_bl_2G"
},
{
"include-filter": "kselftest_futex_requeue_pi_bl_500k"
},
{
"include-filter": "kselftest_futex_requeue_pi_bl_5k"
},
{
"include-filter": "kselftest_futex_requeue_pi_bo"
},
{
"include-filter": "kselftest_futex_requeue_pi_bo_500k"
},
{
"include-filter": "kselftest_futex_requeue_pi_bo_5k"
},
{
"include-filter": "kselftest_futex_requeue_pi_l"
},
{
"include-filter": "kselftest_futex_requeue_pi_l_2G"
},
{
"include-filter": "kselftest_futex_requeue_pi_l_500k"
},
{
"include-filter": "kselftest_futex_requeue_pi_l_5k"
},
{
"include-filter": "kselftest_futex_requeue_pi_mismatched_ops"
},
{
"include-filter": "kselftest_futex_requeue_pi_o"
},
{
"include-filter": "kselftest_futex_requeue_pi_o_500k"
},
{
"include-filter": "kselftest_futex_requeue_pi_o_5k"
},
{
"include-filter": "kselftest_futex_requeue_pi_signal_restart"
},
{
"include-filter": "kselftest_futex_wait"
},
{
"include-filter": "kselftest_futex_wait_private_mapped_file"
},
{
"include-filter": "kselftest_futex_wait_timeout"
},
{
"include-filter": "kselftest_futex_wait_uninitialized_heap"
},
{
"include-filter": "kselftest_futex_wait_wouldblock"
},
{
"include-filter": "kselftest_kcmp_kcmp_test"
},
{
"include-filter": "kselftest_mm_mremap_dontunmap"
},
{
"include-filter": "kselftest_mm_mremap_test"
},
{
"include-filter": "kselftest_mm_uffd_unit_tests"
},
{
"include-filter": "kselftest_net_psock_tpacket"
},
{
"include-filter": "kselftest_net_reuseaddr_conflict"
},
{
"include-filter": "kselftest_net_socket"
},
{
"include-filter": "kselftest_ptrace_peeksiginfo"
},
{
"include-filter": "kselftest_rtc_rtctest"
},
{
"include-filter": "kselftest_seccomp_seccomp_bpf"
},
{
"include-filter": "kselftest_size_test_get_size"
},
{
"include-filter": "kselftest_timers_inconsistency_check"
},
{
"include-filter": "kselftest_timers_nanosleep"
},
{
"include-filter": "kselftest_timers_nsleep_lat"
},
{
"include-filter": "kselftest_timers_posix_timers"
},
{
"include-filter": "kselftest_timers_set_timer_lat"
},
{
"include-filter": "kselftest_timers_tests_raw_skew"
},
{
"include-filter": "kselftest_timers_threadtest"
},
{
"include-filter": "kselftest_timers_valid_adjtimex"
},
{
"include-filter": "kselftest_vdso_vdso_test_abi"
},
{
"include-filter": "kselftest_vdso_vdso_test_clock_getres"
},
{
"include-filter": "kselftest_vdso_vdso_test_getcpu"
},
{
"include-filter": "kselftest_vdso_vdso_test_gettimeofday"
},
{
"include-filter": "kselftest_x86_check_initial_reg_state"
},
{
"include-filter": "kselftest_x86_ldt_gdt"
},
{
"include-filter": "kselftest_x86_ptrace_syscall"
},
{
"include-filter": "kselftest_x86_single_step_syscall"
},
{
"include-filter": "kselftest_x86_syscall_nt"
},
{
"include-filter": "kselftest_x86_test_mremap_vdso"
}
]
},
{ {
"name": "vts_kernel_net_tests" "name": "vts_kernel_net_tests"
} }

View File

@ -48,6 +48,183 @@
"options": [ "options": [
{ {
"include-filter": "kselftest_binderfs_binderfs_test" "include-filter": "kselftest_binderfs_binderfs_test"
},
{
"include-filter": "kselftest_breakpoints_breakpoint_test"
},
{
"include-filter": "kselftest_capabilities_test_execve"
},
{
"include-filter": "kselftest_futex_requeue"
},
{
"include-filter": "kselftest_futex_requeue_pi"
},
{
"include-filter": "kselftest_futex_requeue_pi_500k"
},
{
"include-filter": "kselftest_futex_requeue_pi_5k"
},
{
"include-filter": "kselftest_futex_requeue_pi_b"
},
{
"include-filter": "kselftest_futex_requeue_pi_b_500k"
},
{
"include-filter": "kselftest_futex_requeue_pi_b_5k"
},
{
"include-filter": "kselftest_futex_requeue_pi_bl"
},
{
"include-filter": "kselftest_futex_requeue_pi_bl_2G"
},
{
"include-filter": "kselftest_futex_requeue_pi_bl_500k"
},
{
"include-filter": "kselftest_futex_requeue_pi_bl_5k"
},
{
"include-filter": "kselftest_futex_requeue_pi_bo"
},
{
"include-filter": "kselftest_futex_requeue_pi_bo_500k"
},
{
"include-filter": "kselftest_futex_requeue_pi_bo_5k"
},
{
"include-filter": "kselftest_futex_requeue_pi_l"
},
{
"include-filter": "kselftest_futex_requeue_pi_l_2G"
},
{
"include-filter": "kselftest_futex_requeue_pi_l_500k"
},
{
"include-filter": "kselftest_futex_requeue_pi_l_5k"
},
{
"include-filter": "kselftest_futex_requeue_pi_mismatched_ops"
},
{
"include-filter": "kselftest_futex_requeue_pi_o"
},
{
"include-filter": "kselftest_futex_requeue_pi_o_500k"
},
{
"include-filter": "kselftest_futex_requeue_pi_o_5k"
},
{
"include-filter": "kselftest_futex_requeue_pi_signal_restart"
},
{
"include-filter": "kselftest_futex_wait"
},
{
"include-filter": "kselftest_futex_wait_private_mapped_file"
},
{
"include-filter": "kselftest_futex_wait_timeout"
},
{
"include-filter": "kselftest_futex_wait_uninitialized_heap"
},
{
"include-filter": "kselftest_futex_wait_wouldblock"
},
{
"include-filter": "kselftest_kcmp_kcmp_test"
},
{
"include-filter": "kselftest_mm_mremap_dontunmap"
},
{
"include-filter": "kselftest_mm_mremap_test"
},
{
"include-filter": "kselftest_mm_uffd_unit_tests"
},
{
"include-filter": "kselftest_net_psock_tpacket"
},
{
"include-filter": "kselftest_net_reuseaddr_conflict"
},
{
"include-filter": "kselftest_net_socket"
},
{
"include-filter": "kselftest_ptrace_peeksiginfo"
},
{
"include-filter": "kselftest_rtc_rtctest"
},
{
"include-filter": "kselftest_seccomp_seccomp_bpf"
},
{
"include-filter": "kselftest_size_test_get_size"
},
{
"include-filter": "kselftest_timers_inconsistency_check"
},
{
"include-filter": "kselftest_timers_nanosleep"
},
{
"include-filter": "kselftest_timers_nsleep_lat"
},
{
"include-filter": "kselftest_timers_posix_timers"
},
{
"include-filter": "kselftest_timers_set_timer_lat"
},
{
"include-filter": "kselftest_timers_tests_raw_skew"
},
{
"include-filter": "kselftest_timers_threadtest"
},
{
"include-filter": "kselftest_timers_valid_adjtimex"
},
{
"include-filter": "kselftest_vdso_vdso_test_abi"
},
{
"include-filter": "kselftest_vdso_vdso_test_clock_getres"
},
{
"include-filter": "kselftest_vdso_vdso_test_getcpu"
},
{
"include-filter": "kselftest_vdso_vdso_test_gettimeofday"
},
{
"include-filter": "kselftest_x86_check_initial_reg_state"
},
{
"include-filter": "kselftest_x86_ldt_gdt"
},
{
"include-filter": "kselftest_x86_ptrace_syscall"
},
{
"include-filter": "kselftest_x86_single_step_syscall"
},
{
"include-filter": "kselftest_x86_syscall_nt"
},
{
"include-filter": "kselftest_x86_test_mremap_vdso"
} }
] ]
}, },

View File

@ -1162,10 +1162,11 @@ static inline bool blk_mq_complete_need_ipi(struct request *rq)
if (force_irqthreads()) if (force_irqthreads())
return false; return false;
/* same CPU or cache domain? Complete locally */ /* same CPU or cache domain and capacity? Complete locally */
if (cpu == rq->mq_ctx->cpu || if (cpu == rq->mq_ctx->cpu ||
(!test_bit(QUEUE_FLAG_SAME_FORCE, &rq->q->queue_flags) && (!test_bit(QUEUE_FLAG_SAME_FORCE, &rq->q->queue_flags) &&
cpus_share_cache(cpu, rq->mq_ctx->cpu))) cpus_share_cache(cpu, rq->mq_ctx->cpu) &&
cpus_equal_capacity(cpu, rq->mq_ctx->cpu)))
return false; return false;
/* don't try to IPI to an offline CPU */ /* don't try to IPI to an offline CPU */

View File

@ -581,9 +581,8 @@ int blk_revalidate_disk_zones(struct gendisk *disk,
* Checks that the device driver indicated a valid zone size and that * Checks that the device driver indicated a valid zone size and that
* the max zone append limit is set. * the max zone append limit is set.
*/ */
if (!zone_sectors || !is_power_of_2(zone_sectors)) { if (!zone_sectors) {
pr_warn("%s: Invalid non power of two zone size (%llu)\n", pr_warn("%s: Invalid zone size\n", disk->disk_name);
disk->disk_name, zone_sectors);
return -ENODEV; return -ENODEV;
} }

View File

@ -1,6 +1,6 @@
. ${ROOT_DIR}/${KERNEL_DIR}/build.config.constants . ${ROOT_DIR}/${KERNEL_DIR}/build.config.constants
KMI_GENERATION=6 KMI_GENERATION=7
BRANCH=android15-6.6 BRANCH=android15-6.6
LLVM=1 LLVM=1

View File

@ -40,6 +40,183 @@
"options": [ "options": [
{ {
"include-filter": "kselftest_binderfs_binderfs_test" "include-filter": "kselftest_binderfs_binderfs_test"
},
{
"include-filter": "kselftest_breakpoints_breakpoint_test"
},
{
"include-filter": "kselftest_capabilities_test_execve"
},
{
"include-filter": "kselftest_futex_requeue"
},
{
"include-filter": "kselftest_futex_requeue_pi"
},
{
"include-filter": "kselftest_futex_requeue_pi_500k"
},
{
"include-filter": "kselftest_futex_requeue_pi_5k"
},
{
"include-filter": "kselftest_futex_requeue_pi_b"
},
{
"include-filter": "kselftest_futex_requeue_pi_b_500k"
},
{
"include-filter": "kselftest_futex_requeue_pi_b_5k"
},
{
"include-filter": "kselftest_futex_requeue_pi_bl"
},
{
"include-filter": "kselftest_futex_requeue_pi_bl_2G"
},
{
"include-filter": "kselftest_futex_requeue_pi_bl_500k"
},
{
"include-filter": "kselftest_futex_requeue_pi_bl_5k"
},
{
"include-filter": "kselftest_futex_requeue_pi_bo"
},
{
"include-filter": "kselftest_futex_requeue_pi_bo_500k"
},
{
"include-filter": "kselftest_futex_requeue_pi_bo_5k"
},
{
"include-filter": "kselftest_futex_requeue_pi_l"
},
{
"include-filter": "kselftest_futex_requeue_pi_l_2G"
},
{
"include-filter": "kselftest_futex_requeue_pi_l_500k"
},
{
"include-filter": "kselftest_futex_requeue_pi_l_5k"
},
{
"include-filter": "kselftest_futex_requeue_pi_mismatched_ops"
},
{
"include-filter": "kselftest_futex_requeue_pi_o"
},
{
"include-filter": "kselftest_futex_requeue_pi_o_500k"
},
{
"include-filter": "kselftest_futex_requeue_pi_o_5k"
},
{
"include-filter": "kselftest_futex_requeue_pi_signal_restart"
},
{
"include-filter": "kselftest_futex_wait"
},
{
"include-filter": "kselftest_futex_wait_private_mapped_file"
},
{
"include-filter": "kselftest_futex_wait_timeout"
},
{
"include-filter": "kselftest_futex_wait_uninitialized_heap"
},
{
"include-filter": "kselftest_futex_wait_wouldblock"
},
{
"include-filter": "kselftest_kcmp_kcmp_test"
},
{
"include-filter": "kselftest_mm_mremap_dontunmap"
},
{
"include-filter": "kselftest_mm_mremap_test"
},
{
"include-filter": "kselftest_mm_uffd_unit_tests"
},
{
"include-filter": "kselftest_net_psock_tpacket"
},
{
"include-filter": "kselftest_net_reuseaddr_conflict"
},
{
"include-filter": "kselftest_net_socket"
},
{
"include-filter": "kselftest_ptrace_peeksiginfo"
},
{
"include-filter": "kselftest_rtc_rtctest"
},
{
"include-filter": "kselftest_seccomp_seccomp_bpf"
},
{
"include-filter": "kselftest_size_test_get_size"
},
{
"include-filter": "kselftest_timers_inconsistency_check"
},
{
"include-filter": "kselftest_timers_nanosleep"
},
{
"include-filter": "kselftest_timers_nsleep_lat"
},
{
"include-filter": "kselftest_timers_posix_timers"
},
{
"include-filter": "kselftest_timers_set_timer_lat"
},
{
"include-filter": "kselftest_timers_tests_raw_skew"
},
{
"include-filter": "kselftest_timers_threadtest"
},
{
"include-filter": "kselftest_timers_valid_adjtimex"
},
{
"include-filter": "kselftest_vdso_vdso_test_abi"
},
{
"include-filter": "kselftest_vdso_vdso_test_clock_getres"
},
{
"include-filter": "kselftest_vdso_vdso_test_getcpu"
},
{
"include-filter": "kselftest_vdso_vdso_test_gettimeofday"
},
{
"include-filter": "kselftest_x86_check_initial_reg_state"
},
{
"include-filter": "kselftest_x86_ldt_gdt"
},
{
"include-filter": "kselftest_x86_ptrace_syscall"
},
{
"include-filter": "kselftest_x86_single_step_syscall"
},
{
"include-filter": "kselftest_x86_syscall_nt"
},
{
"include-filter": "kselftest_x86_test_mremap_vdso"
} }
] ]
}, },

View File

@ -5621,7 +5621,7 @@ static long binder_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
goto err; goto err;
break; break;
case BINDER_SET_MAX_THREADS: { case BINDER_SET_MAX_THREADS: {
int max_threads; u32 max_threads;
if (copy_from_user(&max_threads, ubuf, if (copy_from_user(&max_threads, ubuf,
sizeof(max_threads))) { sizeof(max_threads))) {

View File

@ -451,7 +451,7 @@ struct binder_proc {
struct list_head todo; struct list_head todo;
struct binder_stats stats; struct binder_stats stats;
struct list_head delivered_death; struct list_head delivered_death;
int max_threads; u32 max_threads;
int requested_threads; int requested_threads;
int requested_threads_started; int requested_threads_started;
int tmp_ref; int tmp_ref;

View File

@ -45,7 +45,9 @@
#include <trace/hooks/psci.h> #include <trace/hooks/psci.h>
#include <trace/hooks/timer.h> #include <trace/hooks/timer.h>
#include <trace/hooks/fpsimd.h> #include <trace/hooks/fpsimd.h>
#include <trace/hooks/preemptirq.h>
#include <trace/hooks/mm.h> #include <trace/hooks/mm.h>
#include <trace/hooks/fs.h>
#include <trace/hooks/dtask.h> #include <trace/hooks/dtask.h>
#include <trace/hooks/ftrace_dump.h> #include <trace/hooks/ftrace_dump.h>
#include <trace/hooks/traps.h> #include <trace/hooks/traps.h>
@ -68,6 +70,7 @@
#include <trace/hooks/sd.h> #include <trace/hooks/sd.h>
#include <trace/hooks/user.h> #include <trace/hooks/user.h>
#include <trace/hooks/fuse.h> #include <trace/hooks/fuse.h>
#include <trace/hooks/psi.h>
/* /*
* Export tracepoints that act as a bare tracehook (ie: have no trace event * Export tracepoints that act as a bare tracehook (ie: have no trace event
@ -213,11 +216,17 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_gic_v3_suspend);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_gic_v3_set_affinity); EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_gic_v3_set_affinity);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_gic_set_affinity); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_gic_set_affinity);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_gic_v3_affinity_init); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_gic_v3_affinity_init);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_dc_send_copy);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_dc_receive);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_check_bpf_syscall); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_check_bpf_syscall);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_check_nanosleep_syscall); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_check_nanosleep_syscall);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_rproc_recovery); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_rproc_recovery);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_rproc_recovery_set); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_rproc_recovery_set);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_timer_calc_index); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_timer_calc_index);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_preempt_disable);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_preempt_enable);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_irqs_disable);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_irqs_enable);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_is_fpsimd_save); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_is_fpsimd_save);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_slab_folio_alloced); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_slab_folio_alloced);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_kmalloc_large_alloced); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_kmalloc_large_alloced);
@ -379,14 +388,24 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_swapmem_gather_add_bypass);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_swapmem_gather_finish); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_swapmem_gather_finish);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_oom_swapmem_gather_init); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_oom_swapmem_gather_init);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_oom_swapmem_gather_finish); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_oom_swapmem_gather_finish);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_f2fs_file_open);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_alloc_uid); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_alloc_uid);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_free_user); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_free_user);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_save_vmalloc_stack); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_save_vmalloc_stack);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_show_stack_hash); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_show_stack_hash);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_show_mapcount_pages); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_show_mapcount_pages);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_lock_folio_drop_mmap_start);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_lock_folio_drop_mmap_end);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_filemap_update_page);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_update_page_mapcount); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_update_page_mapcount);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_add_page_to_lrulist); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_add_page_to_lrulist);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_del_page_from_lrulist); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_del_page_from_lrulist);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_do_traversal_lruvec); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_do_traversal_lruvec);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_page_should_be_protected); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_page_should_be_protected);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_mark_page_accessed); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_mark_page_accessed);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_madvise_cold_pageout_skip);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_psi_event);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_psi_group);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_mmc_sdio_pm_flag_set);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_read_lazy_flag);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_set_tsk_need_resched_lazy);

View File

@ -35,6 +35,191 @@
} }
] ]
}, },
{
"name": "selftests",
"options": [
{
"include-filter": "kselftest_binderfs_binderfs_test"
},
{
"include-filter": "kselftest_breakpoints_breakpoint_test"
},
{
"include-filter": "kselftest_capabilities_test_execve"
},
{
"include-filter": "kselftest_futex_requeue"
},
{
"include-filter": "kselftest_futex_requeue_pi"
},
{
"include-filter": "kselftest_futex_requeue_pi_500k"
},
{
"include-filter": "kselftest_futex_requeue_pi_5k"
},
{
"include-filter": "kselftest_futex_requeue_pi_b"
},
{
"include-filter": "kselftest_futex_requeue_pi_b_500k"
},
{
"include-filter": "kselftest_futex_requeue_pi_b_5k"
},
{
"include-filter": "kselftest_futex_requeue_pi_bl"
},
{
"include-filter": "kselftest_futex_requeue_pi_bl_2G"
},
{
"include-filter": "kselftest_futex_requeue_pi_bl_500k"
},
{
"include-filter": "kselftest_futex_requeue_pi_bl_5k"
},
{
"include-filter": "kselftest_futex_requeue_pi_bo"
},
{
"include-filter": "kselftest_futex_requeue_pi_bo_500k"
},
{
"include-filter": "kselftest_futex_requeue_pi_bo_5k"
},
{
"include-filter": "kselftest_futex_requeue_pi_l"
},
{
"include-filter": "kselftest_futex_requeue_pi_l_2G"
},
{
"include-filter": "kselftest_futex_requeue_pi_l_500k"
},
{
"include-filter": "kselftest_futex_requeue_pi_l_5k"
},
{
"include-filter": "kselftest_futex_requeue_pi_mismatched_ops"
},
{
"include-filter": "kselftest_futex_requeue_pi_o"
},
{
"include-filter": "kselftest_futex_requeue_pi_o_500k"
},
{
"include-filter": "kselftest_futex_requeue_pi_o_5k"
},
{
"include-filter": "kselftest_futex_requeue_pi_signal_restart"
},
{
"include-filter": "kselftest_futex_wait"
},
{
"include-filter": "kselftest_futex_wait_private_mapped_file"
},
{
"include-filter": "kselftest_futex_wait_timeout"
},
{
"include-filter": "kselftest_futex_wait_uninitialized_heap"
},
{
"include-filter": "kselftest_futex_wait_wouldblock"
},
{
"include-filter": "kselftest_kcmp_kcmp_test"
},
{
"include-filter": "kselftest_mm_mremap_dontunmap"
},
{
"include-filter": "kselftest_mm_mremap_test"
},
{
"include-filter": "kselftest_mm_uffd_unit_tests"
},
{
"include-filter": "kselftest_net_psock_tpacket"
},
{
"include-filter": "kselftest_net_reuseaddr_conflict"
},
{
"include-filter": "kselftest_net_socket"
},
{
"include-filter": "kselftest_ptrace_peeksiginfo"
},
{
"include-filter": "kselftest_rtc_rtctest"
},
{
"include-filter": "kselftest_seccomp_seccomp_bpf"
},
{
"include-filter": "kselftest_size_test_get_size"
},
{
"include-filter": "kselftest_timers_inconsistency_check"
},
{
"include-filter": "kselftest_timers_nanosleep"
},
{
"include-filter": "kselftest_timers_nsleep_lat"
},
{
"include-filter": "kselftest_timers_posix_timers"
},
{
"include-filter": "kselftest_timers_set_timer_lat"
},
{
"include-filter": "kselftest_timers_tests_raw_skew"
},
{
"include-filter": "kselftest_timers_threadtest"
},
{
"include-filter": "kselftest_timers_valid_adjtimex"
},
{
"include-filter": "kselftest_vdso_vdso_test_abi"
},
{
"include-filter": "kselftest_vdso_vdso_test_clock_getres"
},
{
"include-filter": "kselftest_vdso_vdso_test_getcpu"
},
{
"include-filter": "kselftest_vdso_vdso_test_gettimeofday"
},
{
"include-filter": "kselftest_x86_check_initial_reg_state"
},
{
"include-filter": "kselftest_x86_ldt_gdt"
},
{
"include-filter": "kselftest_x86_ptrace_syscall"
},
{
"include-filter": "kselftest_x86_single_step_syscall"
},
{
"include-filter": "kselftest_x86_syscall_nt"
},
{
"include-filter": "kselftest_x86_test_mremap_vdso"
}
]
},
{ {
"name": "vts_kernel_net_tests" "name": "vts_kernel_net_tests"
} }

View File

@ -32,6 +32,191 @@
"exclude-annotation": "com.android.testutils.SkipPresubmit" "exclude-annotation": "com.android.testutils.SkipPresubmit"
} }
] ]
},
{
"name": "selftests",
"options": [
{
"include-filter": "kselftest_binderfs_binderfs_test"
},
{
"include-filter": "kselftest_breakpoints_breakpoint_test"
},
{
"include-filter": "kselftest_capabilities_test_execve"
},
{
"include-filter": "kselftest_futex_requeue"
},
{
"include-filter": "kselftest_futex_requeue_pi"
},
{
"include-filter": "kselftest_futex_requeue_pi_500k"
},
{
"include-filter": "kselftest_futex_requeue_pi_5k"
},
{
"include-filter": "kselftest_futex_requeue_pi_b"
},
{
"include-filter": "kselftest_futex_requeue_pi_b_500k"
},
{
"include-filter": "kselftest_futex_requeue_pi_b_5k"
},
{
"include-filter": "kselftest_futex_requeue_pi_bl"
},
{
"include-filter": "kselftest_futex_requeue_pi_bl_2G"
},
{
"include-filter": "kselftest_futex_requeue_pi_bl_500k"
},
{
"include-filter": "kselftest_futex_requeue_pi_bl_5k"
},
{
"include-filter": "kselftest_futex_requeue_pi_bo"
},
{
"include-filter": "kselftest_futex_requeue_pi_bo_500k"
},
{
"include-filter": "kselftest_futex_requeue_pi_bo_5k"
},
{
"include-filter": "kselftest_futex_requeue_pi_l"
},
{
"include-filter": "kselftest_futex_requeue_pi_l_2G"
},
{
"include-filter": "kselftest_futex_requeue_pi_l_500k"
},
{
"include-filter": "kselftest_futex_requeue_pi_l_5k"
},
{
"include-filter": "kselftest_futex_requeue_pi_mismatched_ops"
},
{
"include-filter": "kselftest_futex_requeue_pi_o"
},
{
"include-filter": "kselftest_futex_requeue_pi_o_500k"
},
{
"include-filter": "kselftest_futex_requeue_pi_o_5k"
},
{
"include-filter": "kselftest_futex_requeue_pi_signal_restart"
},
{
"include-filter": "kselftest_futex_wait"
},
{
"include-filter": "kselftest_futex_wait_private_mapped_file"
},
{
"include-filter": "kselftest_futex_wait_timeout"
},
{
"include-filter": "kselftest_futex_wait_uninitialized_heap"
},
{
"include-filter": "kselftest_futex_wait_wouldblock"
},
{
"include-filter": "kselftest_kcmp_kcmp_test"
},
{
"include-filter": "kselftest_mm_mremap_dontunmap"
},
{
"include-filter": "kselftest_mm_mremap_test"
},
{
"include-filter": "kselftest_mm_uffd_unit_tests"
},
{
"include-filter": "kselftest_net_psock_tpacket"
},
{
"include-filter": "kselftest_net_reuseaddr_conflict"
},
{
"include-filter": "kselftest_net_socket"
},
{
"include-filter": "kselftest_ptrace_peeksiginfo"
},
{
"include-filter": "kselftest_rtc_rtctest"
},
{
"include-filter": "kselftest_seccomp_seccomp_bpf"
},
{
"include-filter": "kselftest_size_test_get_size"
},
{
"include-filter": "kselftest_timers_inconsistency_check"
},
{
"include-filter": "kselftest_timers_nanosleep"
},
{
"include-filter": "kselftest_timers_nsleep_lat"
},
{
"include-filter": "kselftest_timers_posix_timers"
},
{
"include-filter": "kselftest_timers_set_timer_lat"
},
{
"include-filter": "kselftest_timers_tests_raw_skew"
},
{
"include-filter": "kselftest_timers_threadtest"
},
{
"include-filter": "kselftest_timers_valid_adjtimex"
},
{
"include-filter": "kselftest_vdso_vdso_test_abi"
},
{
"include-filter": "kselftest_vdso_vdso_test_clock_getres"
},
{
"include-filter": "kselftest_vdso_vdso_test_getcpu"
},
{
"include-filter": "kselftest_vdso_vdso_test_gettimeofday"
},
{
"include-filter": "kselftest_x86_check_initial_reg_state"
},
{
"include-filter": "kselftest_x86_ldt_gdt"
},
{
"include-filter": "kselftest_x86_ptrace_syscall"
},
{
"include-filter": "kselftest_x86_single_step_syscall"
},
{
"include-filter": "kselftest_x86_syscall_nt"
},
{
"include-filter": "kselftest_x86_test_mremap_vdso"
}
]
} }
], ],
"presubmit-large": [ "presubmit-large": [

View File

@ -1003,6 +1003,7 @@ unsigned int pm_wakeup_irq(void)
{ {
return wakeup_irq[0]; return wakeup_irq[0];
} }
EXPORT_SYMBOL_GPL(pm_wakeup_irq);
/** /**
* pm_get_wakeup_count - Read the number of registered wakeup events. * pm_get_wakeup_count - Read the number of registered wakeup events.

View File

@ -350,7 +350,8 @@ static const struct regmap_bus *regmap_get_i2c_bus(struct i2c_client *i2c,
if (quirks->max_write_len && if (quirks->max_write_len &&
(bus->max_raw_write == 0 || bus->max_raw_write > quirks->max_write_len)) (bus->max_raw_write == 0 || bus->max_raw_write > quirks->max_write_len))
max_write = quirks->max_write_len; max_write = quirks->max_write_len -
(config->reg_bits + config->pad_bits) / BITS_PER_BYTE;
if (max_read || max_write) { if (max_read || max_write) {
ret_bus = kmemdup(bus, sizeof(*bus), GFP_KERNEL); ret_bus = kmemdup(bus, sizeof(*bus), GFP_KERNEL);

View File

@ -7,6 +7,191 @@
"exclude-annotation": "com.android.testutils.SkipPresubmit" "exclude-annotation": "com.android.testutils.SkipPresubmit"
} }
] ]
},
{
"name": "selftests",
"options": [
{
"include-filter": "kselftest_binderfs_binderfs_test"
},
{
"include-filter": "kselftest_breakpoints_breakpoint_test"
},
{
"include-filter": "kselftest_capabilities_test_execve"
},
{
"include-filter": "kselftest_futex_requeue"
},
{
"include-filter": "kselftest_futex_requeue_pi"
},
{
"include-filter": "kselftest_futex_requeue_pi_500k"
},
{
"include-filter": "kselftest_futex_requeue_pi_5k"
},
{
"include-filter": "kselftest_futex_requeue_pi_b"
},
{
"include-filter": "kselftest_futex_requeue_pi_b_500k"
},
{
"include-filter": "kselftest_futex_requeue_pi_b_5k"
},
{
"include-filter": "kselftest_futex_requeue_pi_bl"
},
{
"include-filter": "kselftest_futex_requeue_pi_bl_2G"
},
{
"include-filter": "kselftest_futex_requeue_pi_bl_500k"
},
{
"include-filter": "kselftest_futex_requeue_pi_bl_5k"
},
{
"include-filter": "kselftest_futex_requeue_pi_bo"
},
{
"include-filter": "kselftest_futex_requeue_pi_bo_500k"
},
{
"include-filter": "kselftest_futex_requeue_pi_bo_5k"
},
{
"include-filter": "kselftest_futex_requeue_pi_l"
},
{
"include-filter": "kselftest_futex_requeue_pi_l_2G"
},
{
"include-filter": "kselftest_futex_requeue_pi_l_500k"
},
{
"include-filter": "kselftest_futex_requeue_pi_l_5k"
},
{
"include-filter": "kselftest_futex_requeue_pi_mismatched_ops"
},
{
"include-filter": "kselftest_futex_requeue_pi_o"
},
{
"include-filter": "kselftest_futex_requeue_pi_o_500k"
},
{
"include-filter": "kselftest_futex_requeue_pi_o_5k"
},
{
"include-filter": "kselftest_futex_requeue_pi_signal_restart"
},
{
"include-filter": "kselftest_futex_wait"
},
{
"include-filter": "kselftest_futex_wait_private_mapped_file"
},
{
"include-filter": "kselftest_futex_wait_timeout"
},
{
"include-filter": "kselftest_futex_wait_uninitialized_heap"
},
{
"include-filter": "kselftest_futex_wait_wouldblock"
},
{
"include-filter": "kselftest_kcmp_kcmp_test"
},
{
"include-filter": "kselftest_mm_mremap_dontunmap"
},
{
"include-filter": "kselftest_mm_mremap_test"
},
{
"include-filter": "kselftest_mm_uffd_unit_tests"
},
{
"include-filter": "kselftest_net_psock_tpacket"
},
{
"include-filter": "kselftest_net_reuseaddr_conflict"
},
{
"include-filter": "kselftest_net_socket"
},
{
"include-filter": "kselftest_ptrace_peeksiginfo"
},
{
"include-filter": "kselftest_rtc_rtctest"
},
{
"include-filter": "kselftest_seccomp_seccomp_bpf"
},
{
"include-filter": "kselftest_size_test_get_size"
},
{
"include-filter": "kselftest_timers_inconsistency_check"
},
{
"include-filter": "kselftest_timers_nanosleep"
},
{
"include-filter": "kselftest_timers_nsleep_lat"
},
{
"include-filter": "kselftest_timers_posix_timers"
},
{
"include-filter": "kselftest_timers_set_timer_lat"
},
{
"include-filter": "kselftest_timers_tests_raw_skew"
},
{
"include-filter": "kselftest_timers_threadtest"
},
{
"include-filter": "kselftest_timers_valid_adjtimex"
},
{
"include-filter": "kselftest_vdso_vdso_test_abi"
},
{
"include-filter": "kselftest_vdso_vdso_test_clock_getres"
},
{
"include-filter": "kselftest_vdso_vdso_test_getcpu"
},
{
"include-filter": "kselftest_vdso_vdso_test_gettimeofday"
},
{
"include-filter": "kselftest_x86_check_initial_reg_state"
},
{
"include-filter": "kselftest_x86_ldt_gdt"
},
{
"include-filter": "kselftest_x86_ptrace_syscall"
},
{
"include-filter": "kselftest_x86_single_step_syscall"
},
{
"include-filter": "kselftest_x86_syscall_nt"
},
{
"include-filter": "kselftest_x86_test_mremap_vdso"
}
]
} }
] ]
} }

View File

@ -35,6 +35,191 @@
} }
] ]
}, },
{
"name": "selftests",
"options": [
{
"include-filter": "kselftest_binderfs_binderfs_test"
},
{
"include-filter": "kselftest_breakpoints_breakpoint_test"
},
{
"include-filter": "kselftest_capabilities_test_execve"
},
{
"include-filter": "kselftest_futex_requeue"
},
{
"include-filter": "kselftest_futex_requeue_pi"
},
{
"include-filter": "kselftest_futex_requeue_pi_500k"
},
{
"include-filter": "kselftest_futex_requeue_pi_5k"
},
{
"include-filter": "kselftest_futex_requeue_pi_b"
},
{
"include-filter": "kselftest_futex_requeue_pi_b_500k"
},
{
"include-filter": "kselftest_futex_requeue_pi_b_5k"
},
{
"include-filter": "kselftest_futex_requeue_pi_bl"
},
{
"include-filter": "kselftest_futex_requeue_pi_bl_2G"
},
{
"include-filter": "kselftest_futex_requeue_pi_bl_500k"
},
{
"include-filter": "kselftest_futex_requeue_pi_bl_5k"
},
{
"include-filter": "kselftest_futex_requeue_pi_bo"
},
{
"include-filter": "kselftest_futex_requeue_pi_bo_500k"
},
{
"include-filter": "kselftest_futex_requeue_pi_bo_5k"
},
{
"include-filter": "kselftest_futex_requeue_pi_l"
},
{
"include-filter": "kselftest_futex_requeue_pi_l_2G"
},
{
"include-filter": "kselftest_futex_requeue_pi_l_500k"
},
{
"include-filter": "kselftest_futex_requeue_pi_l_5k"
},
{
"include-filter": "kselftest_futex_requeue_pi_mismatched_ops"
},
{
"include-filter": "kselftest_futex_requeue_pi_o"
},
{
"include-filter": "kselftest_futex_requeue_pi_o_500k"
},
{
"include-filter": "kselftest_futex_requeue_pi_o_5k"
},
{
"include-filter": "kselftest_futex_requeue_pi_signal_restart"
},
{
"include-filter": "kselftest_futex_wait"
},
{
"include-filter": "kselftest_futex_wait_private_mapped_file"
},
{
"include-filter": "kselftest_futex_wait_timeout"
},
{
"include-filter": "kselftest_futex_wait_uninitialized_heap"
},
{
"include-filter": "kselftest_futex_wait_wouldblock"
},
{
"include-filter": "kselftest_kcmp_kcmp_test"
},
{
"include-filter": "kselftest_mm_mremap_dontunmap"
},
{
"include-filter": "kselftest_mm_mremap_test"
},
{
"include-filter": "kselftest_mm_uffd_unit_tests"
},
{
"include-filter": "kselftest_net_psock_tpacket"
},
{
"include-filter": "kselftest_net_reuseaddr_conflict"
},
{
"include-filter": "kselftest_net_socket"
},
{
"include-filter": "kselftest_ptrace_peeksiginfo"
},
{
"include-filter": "kselftest_rtc_rtctest"
},
{
"include-filter": "kselftest_seccomp_seccomp_bpf"
},
{
"include-filter": "kselftest_size_test_get_size"
},
{
"include-filter": "kselftest_timers_inconsistency_check"
},
{
"include-filter": "kselftest_timers_nanosleep"
},
{
"include-filter": "kselftest_timers_nsleep_lat"
},
{
"include-filter": "kselftest_timers_posix_timers"
},
{
"include-filter": "kselftest_timers_set_timer_lat"
},
{
"include-filter": "kselftest_timers_tests_raw_skew"
},
{
"include-filter": "kselftest_timers_threadtest"
},
{
"include-filter": "kselftest_timers_valid_adjtimex"
},
{
"include-filter": "kselftest_vdso_vdso_test_abi"
},
{
"include-filter": "kselftest_vdso_vdso_test_clock_getres"
},
{
"include-filter": "kselftest_vdso_vdso_test_getcpu"
},
{
"include-filter": "kselftest_vdso_vdso_test_gettimeofday"
},
{
"include-filter": "kselftest_x86_check_initial_reg_state"
},
{
"include-filter": "kselftest_x86_ldt_gdt"
},
{
"include-filter": "kselftest_x86_ptrace_syscall"
},
{
"include-filter": "kselftest_x86_single_step_syscall"
},
{
"include-filter": "kselftest_x86_syscall_nt"
},
{
"include-filter": "kselftest_x86_test_mremap_vdso"
}
]
},
{ {
"name": "vts_kernel_net_tests" "name": "vts_kernel_net_tests"
} }

View File

@ -35,6 +35,191 @@
} }
] ]
}, },
{
"name": "selftests",
"options": [
{
"include-filter": "kselftest_binderfs_binderfs_test"
},
{
"include-filter": "kselftest_breakpoints_breakpoint_test"
},
{
"include-filter": "kselftest_capabilities_test_execve"
},
{
"include-filter": "kselftest_futex_requeue"
},
{
"include-filter": "kselftest_futex_requeue_pi"
},
{
"include-filter": "kselftest_futex_requeue_pi_500k"
},
{
"include-filter": "kselftest_futex_requeue_pi_5k"
},
{
"include-filter": "kselftest_futex_requeue_pi_b"
},
{
"include-filter": "kselftest_futex_requeue_pi_b_500k"
},
{
"include-filter": "kselftest_futex_requeue_pi_b_5k"
},
{
"include-filter": "kselftest_futex_requeue_pi_bl"
},
{
"include-filter": "kselftest_futex_requeue_pi_bl_2G"
},
{
"include-filter": "kselftest_futex_requeue_pi_bl_500k"
},
{
"include-filter": "kselftest_futex_requeue_pi_bl_5k"
},
{
"include-filter": "kselftest_futex_requeue_pi_bo"
},
{
"include-filter": "kselftest_futex_requeue_pi_bo_500k"
},
{
"include-filter": "kselftest_futex_requeue_pi_bo_5k"
},
{
"include-filter": "kselftest_futex_requeue_pi_l"
},
{
"include-filter": "kselftest_futex_requeue_pi_l_2G"
},
{
"include-filter": "kselftest_futex_requeue_pi_l_500k"
},
{
"include-filter": "kselftest_futex_requeue_pi_l_5k"
},
{
"include-filter": "kselftest_futex_requeue_pi_mismatched_ops"
},
{
"include-filter": "kselftest_futex_requeue_pi_o"
},
{
"include-filter": "kselftest_futex_requeue_pi_o_500k"
},
{
"include-filter": "kselftest_futex_requeue_pi_o_5k"
},
{
"include-filter": "kselftest_futex_requeue_pi_signal_restart"
},
{
"include-filter": "kselftest_futex_wait"
},
{
"include-filter": "kselftest_futex_wait_private_mapped_file"
},
{
"include-filter": "kselftest_futex_wait_timeout"
},
{
"include-filter": "kselftest_futex_wait_uninitialized_heap"
},
{
"include-filter": "kselftest_futex_wait_wouldblock"
},
{
"include-filter": "kselftest_kcmp_kcmp_test"
},
{
"include-filter": "kselftest_mm_mremap_dontunmap"
},
{
"include-filter": "kselftest_mm_mremap_test"
},
{
"include-filter": "kselftest_mm_uffd_unit_tests"
},
{
"include-filter": "kselftest_net_psock_tpacket"
},
{
"include-filter": "kselftest_net_reuseaddr_conflict"
},
{
"include-filter": "kselftest_net_socket"
},
{
"include-filter": "kselftest_ptrace_peeksiginfo"
},
{
"include-filter": "kselftest_rtc_rtctest"
},
{
"include-filter": "kselftest_seccomp_seccomp_bpf"
},
{
"include-filter": "kselftest_size_test_get_size"
},
{
"include-filter": "kselftest_timers_inconsistency_check"
},
{
"include-filter": "kselftest_timers_nanosleep"
},
{
"include-filter": "kselftest_timers_nsleep_lat"
},
{
"include-filter": "kselftest_timers_posix_timers"
},
{
"include-filter": "kselftest_timers_set_timer_lat"
},
{
"include-filter": "kselftest_timers_tests_raw_skew"
},
{
"include-filter": "kselftest_timers_threadtest"
},
{
"include-filter": "kselftest_timers_valid_adjtimex"
},
{
"include-filter": "kselftest_vdso_vdso_test_abi"
},
{
"include-filter": "kselftest_vdso_vdso_test_clock_getres"
},
{
"include-filter": "kselftest_vdso_vdso_test_getcpu"
},
{
"include-filter": "kselftest_vdso_vdso_test_gettimeofday"
},
{
"include-filter": "kselftest_x86_check_initial_reg_state"
},
{
"include-filter": "kselftest_x86_ldt_gdt"
},
{
"include-filter": "kselftest_x86_ptrace_syscall"
},
{
"include-filter": "kselftest_x86_single_step_syscall"
},
{
"include-filter": "kselftest_x86_syscall_nt"
},
{
"include-filter": "kselftest_x86_test_mremap_vdso"
}
]
},
{ {
"name": "vts_kernel_net_tests" "name": "vts_kernel_net_tests"
} }

View File

@ -32,6 +32,191 @@
"exclude-annotation": "com.android.testutils.SkipPresubmit" "exclude-annotation": "com.android.testutils.SkipPresubmit"
} }
] ]
},
{
"name": "selftests",
"options": [
{
"include-filter": "kselftest_binderfs_binderfs_test"
},
{
"include-filter": "kselftest_breakpoints_breakpoint_test"
},
{
"include-filter": "kselftest_capabilities_test_execve"
},
{
"include-filter": "kselftest_futex_requeue"
},
{
"include-filter": "kselftest_futex_requeue_pi"
},
{
"include-filter": "kselftest_futex_requeue_pi_500k"
},
{
"include-filter": "kselftest_futex_requeue_pi_5k"
},
{
"include-filter": "kselftest_futex_requeue_pi_b"
},
{
"include-filter": "kselftest_futex_requeue_pi_b_500k"
},
{
"include-filter": "kselftest_futex_requeue_pi_b_5k"
},
{
"include-filter": "kselftest_futex_requeue_pi_bl"
},
{
"include-filter": "kselftest_futex_requeue_pi_bl_2G"
},
{
"include-filter": "kselftest_futex_requeue_pi_bl_500k"
},
{
"include-filter": "kselftest_futex_requeue_pi_bl_5k"
},
{
"include-filter": "kselftest_futex_requeue_pi_bo"
},
{
"include-filter": "kselftest_futex_requeue_pi_bo_500k"
},
{
"include-filter": "kselftest_futex_requeue_pi_bo_5k"
},
{
"include-filter": "kselftest_futex_requeue_pi_l"
},
{
"include-filter": "kselftest_futex_requeue_pi_l_2G"
},
{
"include-filter": "kselftest_futex_requeue_pi_l_500k"
},
{
"include-filter": "kselftest_futex_requeue_pi_l_5k"
},
{
"include-filter": "kselftest_futex_requeue_pi_mismatched_ops"
},
{
"include-filter": "kselftest_futex_requeue_pi_o"
},
{
"include-filter": "kselftest_futex_requeue_pi_o_500k"
},
{
"include-filter": "kselftest_futex_requeue_pi_o_5k"
},
{
"include-filter": "kselftest_futex_requeue_pi_signal_restart"
},
{
"include-filter": "kselftest_futex_wait"
},
{
"include-filter": "kselftest_futex_wait_private_mapped_file"
},
{
"include-filter": "kselftest_futex_wait_timeout"
},
{
"include-filter": "kselftest_futex_wait_uninitialized_heap"
},
{
"include-filter": "kselftest_futex_wait_wouldblock"
},
{
"include-filter": "kselftest_kcmp_kcmp_test"
},
{
"include-filter": "kselftest_mm_mremap_dontunmap"
},
{
"include-filter": "kselftest_mm_mremap_test"
},
{
"include-filter": "kselftest_mm_uffd_unit_tests"
},
{
"include-filter": "kselftest_net_psock_tpacket"
},
{
"include-filter": "kselftest_net_reuseaddr_conflict"
},
{
"include-filter": "kselftest_net_socket"
},
{
"include-filter": "kselftest_ptrace_peeksiginfo"
},
{
"include-filter": "kselftest_rtc_rtctest"
},
{
"include-filter": "kselftest_seccomp_seccomp_bpf"
},
{
"include-filter": "kselftest_size_test_get_size"
},
{
"include-filter": "kselftest_timers_inconsistency_check"
},
{
"include-filter": "kselftest_timers_nanosleep"
},
{
"include-filter": "kselftest_timers_nsleep_lat"
},
{
"include-filter": "kselftest_timers_posix_timers"
},
{
"include-filter": "kselftest_timers_set_timer_lat"
},
{
"include-filter": "kselftest_timers_tests_raw_skew"
},
{
"include-filter": "kselftest_timers_threadtest"
},
{
"include-filter": "kselftest_timers_valid_adjtimex"
},
{
"include-filter": "kselftest_vdso_vdso_test_abi"
},
{
"include-filter": "kselftest_vdso_vdso_test_clock_getres"
},
{
"include-filter": "kselftest_vdso_vdso_test_getcpu"
},
{
"include-filter": "kselftest_vdso_vdso_test_gettimeofday"
},
{
"include-filter": "kselftest_x86_check_initial_reg_state"
},
{
"include-filter": "kselftest_x86_ldt_gdt"
},
{
"include-filter": "kselftest_x86_ptrace_syscall"
},
{
"include-filter": "kselftest_x86_single_step_syscall"
},
{
"include-filter": "kselftest_x86_syscall_nt"
},
{
"include-filter": "kselftest_x86_test_mremap_vdso"
}
]
} }
], ],
"presubmit-large": [ "presubmit-large": [

View File

@ -32,6 +32,191 @@
"exclude-annotation": "com.android.testutils.SkipPresubmit" "exclude-annotation": "com.android.testutils.SkipPresubmit"
} }
] ]
},
{
"name": "selftests",
"options": [
{
"include-filter": "kselftest_binderfs_binderfs_test"
},
{
"include-filter": "kselftest_breakpoints_breakpoint_test"
},
{
"include-filter": "kselftest_capabilities_test_execve"
},
{
"include-filter": "kselftest_futex_requeue"
},
{
"include-filter": "kselftest_futex_requeue_pi"
},
{
"include-filter": "kselftest_futex_requeue_pi_500k"
},
{
"include-filter": "kselftest_futex_requeue_pi_5k"
},
{
"include-filter": "kselftest_futex_requeue_pi_b"
},
{
"include-filter": "kselftest_futex_requeue_pi_b_500k"
},
{
"include-filter": "kselftest_futex_requeue_pi_b_5k"
},
{
"include-filter": "kselftest_futex_requeue_pi_bl"
},
{
"include-filter": "kselftest_futex_requeue_pi_bl_2G"
},
{
"include-filter": "kselftest_futex_requeue_pi_bl_500k"
},
{
"include-filter": "kselftest_futex_requeue_pi_bl_5k"
},
{
"include-filter": "kselftest_futex_requeue_pi_bo"
},
{
"include-filter": "kselftest_futex_requeue_pi_bo_500k"
},
{
"include-filter": "kselftest_futex_requeue_pi_bo_5k"
},
{
"include-filter": "kselftest_futex_requeue_pi_l"
},
{
"include-filter": "kselftest_futex_requeue_pi_l_2G"
},
{
"include-filter": "kselftest_futex_requeue_pi_l_500k"
},
{
"include-filter": "kselftest_futex_requeue_pi_l_5k"
},
{
"include-filter": "kselftest_futex_requeue_pi_mismatched_ops"
},
{
"include-filter": "kselftest_futex_requeue_pi_o"
},
{
"include-filter": "kselftest_futex_requeue_pi_o_500k"
},
{
"include-filter": "kselftest_futex_requeue_pi_o_5k"
},
{
"include-filter": "kselftest_futex_requeue_pi_signal_restart"
},
{
"include-filter": "kselftest_futex_wait"
},
{
"include-filter": "kselftest_futex_wait_private_mapped_file"
},
{
"include-filter": "kselftest_futex_wait_timeout"
},
{
"include-filter": "kselftest_futex_wait_uninitialized_heap"
},
{
"include-filter": "kselftest_futex_wait_wouldblock"
},
{
"include-filter": "kselftest_kcmp_kcmp_test"
},
{
"include-filter": "kselftest_mm_mremap_dontunmap"
},
{
"include-filter": "kselftest_mm_mremap_test"
},
{
"include-filter": "kselftest_mm_uffd_unit_tests"
},
{
"include-filter": "kselftest_net_psock_tpacket"
},
{
"include-filter": "kselftest_net_reuseaddr_conflict"
},
{
"include-filter": "kselftest_net_socket"
},
{
"include-filter": "kselftest_ptrace_peeksiginfo"
},
{
"include-filter": "kselftest_rtc_rtctest"
},
{
"include-filter": "kselftest_seccomp_seccomp_bpf"
},
{
"include-filter": "kselftest_size_test_get_size"
},
{
"include-filter": "kselftest_timers_inconsistency_check"
},
{
"include-filter": "kselftest_timers_nanosleep"
},
{
"include-filter": "kselftest_timers_nsleep_lat"
},
{
"include-filter": "kselftest_timers_posix_timers"
},
{
"include-filter": "kselftest_timers_set_timer_lat"
},
{
"include-filter": "kselftest_timers_tests_raw_skew"
},
{
"include-filter": "kselftest_timers_threadtest"
},
{
"include-filter": "kselftest_timers_valid_adjtimex"
},
{
"include-filter": "kselftest_vdso_vdso_test_abi"
},
{
"include-filter": "kselftest_vdso_vdso_test_clock_getres"
},
{
"include-filter": "kselftest_vdso_vdso_test_getcpu"
},
{
"include-filter": "kselftest_vdso_vdso_test_gettimeofday"
},
{
"include-filter": "kselftest_x86_check_initial_reg_state"
},
{
"include-filter": "kselftest_x86_ldt_gdt"
},
{
"include-filter": "kselftest_x86_ptrace_syscall"
},
{
"include-filter": "kselftest_x86_single_step_syscall"
},
{
"include-filter": "kselftest_x86_syscall_nt"
},
{
"include-filter": "kselftest_x86_test_mremap_vdso"
}
]
} }
], ],
"presubmit-large": [ "presubmit-large": [

View File

@ -25,6 +25,7 @@
MODULE_AUTHOR("Tom Lendacky <thomas.lendacky@amd.com>"); MODULE_AUTHOR("Tom Lendacky <thomas.lendacky@amd.com>");
MODULE_AUTHOR("Gary R Hook <gary.hook@amd.com>"); MODULE_AUTHOR("Gary R Hook <gary.hook@amd.com>");
MODULE_LICENSE("GPL"); MODULE_LICENSE("GPL");
MODULE_IMPORT_NS(VFS_internal_I_am_really_a_filesystem_and_am_NOT_a_driver);
MODULE_VERSION("1.1.0"); MODULE_VERSION("1.1.0");
MODULE_DESCRIPTION("AMD Secure Processor driver"); MODULE_DESCRIPTION("AMD Secure Processor driver");

View File

@ -35,6 +35,191 @@
} }
] ]
}, },
{
"name": "selftests",
"options": [
{
"include-filter": "kselftest_binderfs_binderfs_test"
},
{
"include-filter": "kselftest_breakpoints_breakpoint_test"
},
{
"include-filter": "kselftest_capabilities_test_execve"
},
{
"include-filter": "kselftest_futex_requeue"
},
{
"include-filter": "kselftest_futex_requeue_pi"
},
{
"include-filter": "kselftest_futex_requeue_pi_500k"
},
{
"include-filter": "kselftest_futex_requeue_pi_5k"
},
{
"include-filter": "kselftest_futex_requeue_pi_b"
},
{
"include-filter": "kselftest_futex_requeue_pi_b_500k"
},
{
"include-filter": "kselftest_futex_requeue_pi_b_5k"
},
{
"include-filter": "kselftest_futex_requeue_pi_bl"
},
{
"include-filter": "kselftest_futex_requeue_pi_bl_2G"
},
{
"include-filter": "kselftest_futex_requeue_pi_bl_500k"
},
{
"include-filter": "kselftest_futex_requeue_pi_bl_5k"
},
{
"include-filter": "kselftest_futex_requeue_pi_bo"
},
{
"include-filter": "kselftest_futex_requeue_pi_bo_500k"
},
{
"include-filter": "kselftest_futex_requeue_pi_bo_5k"
},
{
"include-filter": "kselftest_futex_requeue_pi_l"
},
{
"include-filter": "kselftest_futex_requeue_pi_l_2G"
},
{
"include-filter": "kselftest_futex_requeue_pi_l_500k"
},
{
"include-filter": "kselftest_futex_requeue_pi_l_5k"
},
{
"include-filter": "kselftest_futex_requeue_pi_mismatched_ops"
},
{
"include-filter": "kselftest_futex_requeue_pi_o"
},
{
"include-filter": "kselftest_futex_requeue_pi_o_500k"
},
{
"include-filter": "kselftest_futex_requeue_pi_o_5k"
},
{
"include-filter": "kselftest_futex_requeue_pi_signal_restart"
},
{
"include-filter": "kselftest_futex_wait"
},
{
"include-filter": "kselftest_futex_wait_private_mapped_file"
},
{
"include-filter": "kselftest_futex_wait_timeout"
},
{
"include-filter": "kselftest_futex_wait_uninitialized_heap"
},
{
"include-filter": "kselftest_futex_wait_wouldblock"
},
{
"include-filter": "kselftest_kcmp_kcmp_test"
},
{
"include-filter": "kselftest_mm_mremap_dontunmap"
},
{
"include-filter": "kselftest_mm_mremap_test"
},
{
"include-filter": "kselftest_mm_uffd_unit_tests"
},
{
"include-filter": "kselftest_net_psock_tpacket"
},
{
"include-filter": "kselftest_net_reuseaddr_conflict"
},
{
"include-filter": "kselftest_net_socket"
},
{
"include-filter": "kselftest_ptrace_peeksiginfo"
},
{
"include-filter": "kselftest_rtc_rtctest"
},
{
"include-filter": "kselftest_seccomp_seccomp_bpf"
},
{
"include-filter": "kselftest_size_test_get_size"
},
{
"include-filter": "kselftest_timers_inconsistency_check"
},
{
"include-filter": "kselftest_timers_nanosleep"
},
{
"include-filter": "kselftest_timers_nsleep_lat"
},
{
"include-filter": "kselftest_timers_posix_timers"
},
{
"include-filter": "kselftest_timers_set_timer_lat"
},
{
"include-filter": "kselftest_timers_tests_raw_skew"
},
{
"include-filter": "kselftest_timers_threadtest"
},
{
"include-filter": "kselftest_timers_valid_adjtimex"
},
{
"include-filter": "kselftest_vdso_vdso_test_abi"
},
{
"include-filter": "kselftest_vdso_vdso_test_clock_getres"
},
{
"include-filter": "kselftest_vdso_vdso_test_getcpu"
},
{
"include-filter": "kselftest_vdso_vdso_test_gettimeofday"
},
{
"include-filter": "kselftest_x86_check_initial_reg_state"
},
{
"include-filter": "kselftest_x86_ldt_gdt"
},
{
"include-filter": "kselftest_x86_ptrace_syscall"
},
{
"include-filter": "kselftest_x86_single_step_syscall"
},
{
"include-filter": "kselftest_x86_syscall_nt"
},
{
"include-filter": "kselftest_x86_test_mremap_vdso"
}
]
},
{ {
"name": "vts_kernel_net_tests" "name": "vts_kernel_net_tests"
} }

View File

@ -10,7 +10,8 @@ scmi-transport-$(CONFIG_ARM_SCMI_TRANSPORT_SMC) += smc.o
scmi-transport-$(CONFIG_ARM_SCMI_HAVE_MSG) += msg.o scmi-transport-$(CONFIG_ARM_SCMI_HAVE_MSG) += msg.o
scmi-transport-$(CONFIG_ARM_SCMI_TRANSPORT_VIRTIO) += virtio.o scmi-transport-$(CONFIG_ARM_SCMI_TRANSPORT_VIRTIO) += virtio.o
scmi-transport-$(CONFIG_ARM_SCMI_TRANSPORT_OPTEE) += optee.o scmi-transport-$(CONFIG_ARM_SCMI_TRANSPORT_OPTEE) += optee.o
scmi-protocols-y = base.o clock.o perf.o power.o reset.o sensors.o system.o voltage.o powercap.o scmi-protocols-y := base.o clock.o perf.o power.o reset.o sensors.o system.o voltage.o powercap.o
scmi-protocols-y += pinctrl.o
scmi-module-objs := $(scmi-driver-y) $(scmi-protocols-y) $(scmi-transport-y) scmi-module-objs := $(scmi-driver-y) $(scmi-protocols-y) $(scmi-transport-y)
obj-$(CONFIG_ARM_SCMI_PROTOCOL) += scmi-core.o obj-$(CONFIG_ARM_SCMI_PROTOCOL) += scmi-core.o

View File

@ -13,6 +13,9 @@
#include "common.h" #include "common.h"
#include "notify.h" #include "notify.h"
/* Updated only after ALL the mandatory features for that version are merged */
#define SCMI_PROTOCOL_SUPPORTED_VERSION 0x20000
#define SCMI_BASE_NUM_SOURCES 1 #define SCMI_BASE_NUM_SOURCES 1
#define SCMI_BASE_MAX_CMD_ERR_COUNT 1024 #define SCMI_BASE_MAX_CMD_ERR_COUNT 1024
@ -385,7 +388,7 @@ static int scmi_base_protocol_init(const struct scmi_protocol_handle *ph)
rev->major_ver = PROTOCOL_REV_MAJOR(version), rev->major_ver = PROTOCOL_REV_MAJOR(version),
rev->minor_ver = PROTOCOL_REV_MINOR(version); rev->minor_ver = PROTOCOL_REV_MINOR(version);
ph->set_priv(ph, rev); ph->set_priv(ph, rev, version);
ret = scmi_base_attributes_get(ph); ret = scmi_base_attributes_get(ph);
if (ret) if (ret)
@ -423,6 +426,7 @@ static const struct scmi_protocol scmi_base = {
.instance_init = &scmi_base_protocol_init, .instance_init = &scmi_base_protocol_init,
.ops = NULL, .ops = NULL,
.events = &base_protocol_events, .events = &base_protocol_events,
.supported_version = SCMI_PROTOCOL_SUPPORTED_VERSION,
}; };
DEFINE_SCMI_PROTOCOL_REGISTER_UNREGISTER(base, scmi_base) DEFINE_SCMI_PROTOCOL_REGISTER_UNREGISTER(base, scmi_base)

View File

@ -12,6 +12,9 @@
#include "protocols.h" #include "protocols.h"
#include "notify.h" #include "notify.h"
/* Updated only after ALL the mandatory features for that version are merged */
#define SCMI_PROTOCOL_SUPPORTED_VERSION 0x20001
enum scmi_clock_protocol_cmd { enum scmi_clock_protocol_cmd {
CLOCK_ATTRIBUTES = 0x3, CLOCK_ATTRIBUTES = 0x3,
CLOCK_DESCRIBE_RATES = 0x4, CLOCK_DESCRIBE_RATES = 0x4,
@ -25,8 +28,13 @@ enum scmi_clock_protocol_cmd {
CLOCK_POSSIBLE_PARENTS_GET = 0xC, CLOCK_POSSIBLE_PARENTS_GET = 0xC,
CLOCK_PARENT_SET = 0xD, CLOCK_PARENT_SET = 0xD,
CLOCK_PARENT_GET = 0xE, CLOCK_PARENT_GET = 0xE,
CLOCK_GET_PERMISSIONS = 0xF,
}; };
#define CLOCK_STATE_CONTROL_ALLOWED BIT(31)
#define CLOCK_PARENT_CONTROL_ALLOWED BIT(30)
#define CLOCK_RATE_CONTROL_ALLOWED BIT(29)
enum clk_state { enum clk_state {
CLK_STATE_DISABLE, CLK_STATE_DISABLE,
CLK_STATE_ENABLE, CLK_STATE_ENABLE,
@ -46,6 +54,7 @@ struct scmi_msg_resp_clock_attributes {
#define SUPPORTS_RATE_CHANGE_REQUESTED_NOTIF(x) ((x) & BIT(30)) #define SUPPORTS_RATE_CHANGE_REQUESTED_NOTIF(x) ((x) & BIT(30))
#define SUPPORTS_EXTENDED_NAMES(x) ((x) & BIT(29)) #define SUPPORTS_EXTENDED_NAMES(x) ((x) & BIT(29))
#define SUPPORTS_PARENT_CLOCK(x) ((x) & BIT(28)) #define SUPPORTS_PARENT_CLOCK(x) ((x) & BIT(28))
#define SUPPORTS_GET_PERMISSIONS(x) ((x) & BIT(1))
u8 name[SCMI_SHORT_NAME_MAX_SIZE]; u8 name[SCMI_SHORT_NAME_MAX_SIZE];
__le32 clock_enable_latency; __le32 clock_enable_latency;
}; };
@ -164,6 +173,15 @@ static enum scmi_clock_protocol_cmd evt_2_cmd[] = {
CLOCK_RATE_CHANGE_REQUESTED_NOTIFY, CLOCK_RATE_CHANGE_REQUESTED_NOTIFY,
}; };
static inline struct scmi_clock_info *
scmi_clock_domain_lookup(struct clock_info *ci, u32 clk_id)
{
if (clk_id >= ci->num_clocks)
return ERR_PTR(-EINVAL);
return ci->clk + clk_id;
}
static int static int
scmi_clock_protocol_attributes_get(const struct scmi_protocol_handle *ph, scmi_clock_protocol_attributes_get(const struct scmi_protocol_handle *ph,
struct clock_info *ci) struct clock_info *ci)
@ -281,6 +299,35 @@ static int scmi_clock_possible_parents(const struct scmi_protocol_handle *ph, u3
return ret; return ret;
} }
static int
scmi_clock_get_permissions(const struct scmi_protocol_handle *ph, u32 clk_id,
struct scmi_clock_info *clk)
{
struct scmi_xfer *t;
u32 perm;
int ret;
ret = ph->xops->xfer_get_init(ph, CLOCK_GET_PERMISSIONS,
sizeof(clk_id), sizeof(perm), &t);
if (ret)
return ret;
put_unaligned_le32(clk_id, t->tx.buf);
ret = ph->xops->do_xfer(ph, t);
if (!ret) {
perm = get_unaligned_le32(t->rx.buf);
clk->state_ctrl_forbidden = !(perm & CLOCK_STATE_CONTROL_ALLOWED);
clk->rate_ctrl_forbidden = !(perm & CLOCK_RATE_CONTROL_ALLOWED);
clk->parent_ctrl_forbidden = !(perm & CLOCK_PARENT_CONTROL_ALLOWED);
}
ph->xops->xfer_put(ph, t);
return ret;
}
static int scmi_clock_attributes_get(const struct scmi_protocol_handle *ph, static int scmi_clock_attributes_get(const struct scmi_protocol_handle *ph,
u32 clk_id, struct scmi_clock_info *clk, u32 clk_id, struct scmi_clock_info *clk,
u32 version) u32 version)
@ -327,6 +374,8 @@ static int scmi_clock_attributes_get(const struct scmi_protocol_handle *ph,
clk->rate_change_requested_notifications = true; clk->rate_change_requested_notifications = true;
if (SUPPORTS_PARENT_CLOCK(attributes)) if (SUPPORTS_PARENT_CLOCK(attributes))
scmi_clock_possible_parents(ph, clk_id, clk); scmi_clock_possible_parents(ph, clk_id, clk);
if (SUPPORTS_GET_PERMISSIONS(attributes))
scmi_clock_get_permissions(ph, clk_id, clk);
} }
return ret; return ret;
@ -499,6 +548,14 @@ static int scmi_clock_rate_set(const struct scmi_protocol_handle *ph,
struct scmi_xfer *t; struct scmi_xfer *t;
struct scmi_clock_set_rate *cfg; struct scmi_clock_set_rate *cfg;
struct clock_info *ci = ph->get_priv(ph); struct clock_info *ci = ph->get_priv(ph);
struct scmi_clock_info *clk;
clk = scmi_clock_domain_lookup(ci, clk_id);
if (IS_ERR(clk))
return PTR_ERR(clk);
if (clk->rate_ctrl_forbidden)
return -EACCES;
ret = ph->xops->xfer_get_init(ph, CLOCK_RATE_SET, sizeof(*cfg), 0, &t); ret = ph->xops->xfer_get_init(ph, CLOCK_RATE_SET, sizeof(*cfg), 0, &t);
if (ret) if (ret)
@ -577,14 +634,16 @@ scmi_clock_set_parent(const struct scmi_protocol_handle *ph, u32 clk_id,
struct clock_info *ci = ph->get_priv(ph); struct clock_info *ci = ph->get_priv(ph);
struct scmi_clock_info *clk; struct scmi_clock_info *clk;
if (clk_id >= ci->num_clocks) clk = scmi_clock_domain_lookup(ci, clk_id);
return -EINVAL; if (IS_ERR(clk))
return PTR_ERR(clk);
clk = ci->clk + clk_id;
if (parent_id >= clk->num_parents) if (parent_id >= clk->num_parents)
return -EINVAL; return -EINVAL;
if (clk->parent_ctrl_forbidden)
return -EACCES;
ret = ph->xops->xfer_get_init(ph, CLOCK_PARENT_SET, ret = ph->xops->xfer_get_init(ph, CLOCK_PARENT_SET,
sizeof(*cfg), 0, &t); sizeof(*cfg), 0, &t);
if (ret) if (ret)
@ -668,6 +727,14 @@ static int scmi_clock_enable(const struct scmi_protocol_handle *ph, u32 clk_id,
bool atomic) bool atomic)
{ {
struct clock_info *ci = ph->get_priv(ph); struct clock_info *ci = ph->get_priv(ph);
struct scmi_clock_info *clk;
clk = scmi_clock_domain_lookup(ci, clk_id);
if (IS_ERR(clk))
return PTR_ERR(clk);
if (clk->state_ctrl_forbidden)
return -EACCES;
return ci->clock_config_set(ph, clk_id, CLK_STATE_ENABLE, return ci->clock_config_set(ph, clk_id, CLK_STATE_ENABLE,
NULL_OEM_TYPE, 0, atomic); NULL_OEM_TYPE, 0, atomic);
@ -677,6 +744,14 @@ static int scmi_clock_disable(const struct scmi_protocol_handle *ph, u32 clk_id,
bool atomic) bool atomic)
{ {
struct clock_info *ci = ph->get_priv(ph); struct clock_info *ci = ph->get_priv(ph);
struct scmi_clock_info *clk;
clk = scmi_clock_domain_lookup(ci, clk_id);
if (IS_ERR(clk))
return PTR_ERR(clk);
if (clk->state_ctrl_forbidden)
return -EACCES;
return ci->clock_config_set(ph, clk_id, CLK_STATE_DISABLE, return ci->clock_config_set(ph, clk_id, CLK_STATE_DISABLE,
NULL_OEM_TYPE, 0, atomic); NULL_OEM_TYPE, 0, atomic);
@ -797,10 +872,10 @@ scmi_clock_info_get(const struct scmi_protocol_handle *ph, u32 clk_id)
struct scmi_clock_info *clk; struct scmi_clock_info *clk;
struct clock_info *ci = ph->get_priv(ph); struct clock_info *ci = ph->get_priv(ph);
if (clk_id >= ci->num_clocks) clk = scmi_clock_domain_lookup(ci, clk_id);
if (IS_ERR(clk))
return NULL; return NULL;
clk = ci->clk + clk_id;
if (!clk->name[0]) if (!clk->name[0])
return NULL; return NULL;
@ -961,7 +1036,7 @@ static int scmi_clock_protocol_init(const struct scmi_protocol_handle *ph)
} }
cinfo->version = version; cinfo->version = version;
return ph->set_priv(ph, cinfo); return ph->set_priv(ph, cinfo, version);
} }
static const struct scmi_protocol scmi_clock = { static const struct scmi_protocol scmi_clock = {
@ -970,6 +1045,7 @@ static const struct scmi_protocol scmi_clock = {
.instance_init = &scmi_clock_protocol_init, .instance_init = &scmi_clock_protocol_init,
.ops = &clk_proto_ops, .ops = &clk_proto_ops,
.events = &clk_protocol_events, .events = &clk_protocol_events,
.supported_version = SCMI_PROTOCOL_SUPPORTED_VERSION,
}; };
DEFINE_SCMI_PROTOCOL_REGISTER_UNREGISTER(clock, scmi_clock) DEFINE_SCMI_PROTOCOL_REGISTER_UNREGISTER(clock, scmi_clock)

View File

@ -315,6 +315,7 @@ void shmem_clear_channel(struct scmi_shared_mem __iomem *shmem);
bool shmem_poll_done(struct scmi_shared_mem __iomem *shmem, bool shmem_poll_done(struct scmi_shared_mem __iomem *shmem,
struct scmi_xfer *xfer); struct scmi_xfer *xfer);
bool shmem_channel_free(struct scmi_shared_mem __iomem *shmem); bool shmem_channel_free(struct scmi_shared_mem __iomem *shmem);
bool shmem_channel_intr_enabled(struct scmi_shared_mem __iomem *shmem);
/* declarations for message passing transports */ /* declarations for message passing transports */
struct scmi_msg_payld; struct scmi_msg_payld;

View File

@ -85,6 +85,7 @@ struct scmi_xfers_info {
* @gid: A reference for per-protocol devres management. * @gid: A reference for per-protocol devres management.
* @users: A refcount to track effective users of this protocol. * @users: A refcount to track effective users of this protocol.
* @priv: Reference for optional protocol private data. * @priv: Reference for optional protocol private data.
* @version: Protocol version supported by the platform as detected at runtime.
* @ph: An embedded protocol handle that will be passed down to protocol * @ph: An embedded protocol handle that will be passed down to protocol
* initialization code to identify this instance. * initialization code to identify this instance.
* *
@ -97,6 +98,7 @@ struct scmi_protocol_instance {
void *gid; void *gid;
refcount_t users; refcount_t users;
void *priv; void *priv;
unsigned int version;
struct scmi_protocol_handle ph; struct scmi_protocol_handle ph;
}; };
@ -1392,15 +1394,17 @@ static int version_get(const struct scmi_protocol_handle *ph, u32 *version)
* *
* @ph: A reference to the protocol handle. * @ph: A reference to the protocol handle.
* @priv: The private data to set. * @priv: The private data to set.
* @version: The detected protocol version for the core to register.
* *
* Return: 0 on Success * Return: 0 on Success
*/ */
static int scmi_set_protocol_priv(const struct scmi_protocol_handle *ph, static int scmi_set_protocol_priv(const struct scmi_protocol_handle *ph,
void *priv) void *priv, u32 version)
{ {
struct scmi_protocol_instance *pi = ph_to_pi(ph); struct scmi_protocol_instance *pi = ph_to_pi(ph);
pi->priv = priv; pi->priv = priv;
pi->version = version;
return 0; return 0;
} }
@ -1477,6 +1481,20 @@ out:
return ret; return ret;
} }
/**
* scmi_common_get_max_msg_size - Get maximum message size
* @ph: A protocol handle reference.
*
* Return: Maximum message size for the current protocol.
*/
static int scmi_common_get_max_msg_size(const struct scmi_protocol_handle *ph)
{
const struct scmi_protocol_instance *pi = ph_to_pi(ph);
struct scmi_info *info = handle_to_scmi_info(pi->handle);
return info->desc->max_msg_size;
}
/** /**
* struct scmi_iterator - Iterator descriptor * struct scmi_iterator - Iterator descriptor
* @msg: A reference to the message TX buffer; filled by @prepare_message with * @msg: A reference to the message TX buffer; filled by @prepare_message with
@ -1752,6 +1770,7 @@ static void scmi_common_fastchannel_db_ring(struct scmi_fc_db_info *db)
static const struct scmi_proto_helpers_ops helpers_ops = { static const struct scmi_proto_helpers_ops helpers_ops = {
.extended_name_get = scmi_common_extended_name_get, .extended_name_get = scmi_common_extended_name_get,
.get_max_msg_size = scmi_common_get_max_msg_size,
.iter_response_init = scmi_iterator_init, .iter_response_init = scmi_iterator_init,
.iter_response_run = scmi_iterator_run, .iter_response_run = scmi_iterator_run,
.fastchannel_init = scmi_common_fastchannel_init, .fastchannel_init = scmi_common_fastchannel_init,
@ -1849,6 +1868,12 @@ scmi_alloc_init_protocol_instance(struct scmi_info *info,
devres_close_group(handle->dev, pi->gid); devres_close_group(handle->dev, pi->gid);
dev_dbg(handle->dev, "Initialized protocol: 0x%X\n", pi->proto->id); dev_dbg(handle->dev, "Initialized protocol: 0x%X\n", pi->proto->id);
if (pi->version > proto->supported_version)
dev_warn(handle->dev,
"Detected UNSUPPORTED higher version 0x%X for protocol 0x%X."
"Backward compatibility is NOT assured.\n",
pi->version, pi->proto->id);
return pi; return pi;
clean: clean:
@ -3026,6 +3051,7 @@ static int __init scmi_driver_init(void)
scmi_voltage_register(); scmi_voltage_register();
scmi_system_register(); scmi_system_register();
scmi_powercap_register(); scmi_powercap_register();
scmi_pinctrl_register();
return platform_driver_register(&scmi_driver); return platform_driver_register(&scmi_driver);
} }
@ -3043,6 +3069,7 @@ static void __exit scmi_driver_exit(void)
scmi_voltage_unregister(); scmi_voltage_unregister();
scmi_system_unregister(); scmi_system_unregister();
scmi_powercap_unregister(); scmi_powercap_unregister();
scmi_pinctrl_unregister();
scmi_transports_exit(); scmi_transports_exit();

View File

@ -21,6 +21,7 @@
* @cl: Mailbox Client * @cl: Mailbox Client
* @chan: Transmit/Receive mailbox uni/bi-directional channel * @chan: Transmit/Receive mailbox uni/bi-directional channel
* @chan_receiver: Optional Receiver mailbox unidirectional channel * @chan_receiver: Optional Receiver mailbox unidirectional channel
* @chan_platform_receiver: Optional Platform Receiver mailbox unidirectional channel
* @cinfo: SCMI channel info * @cinfo: SCMI channel info
* @shmem: Transmit/Receive shared memory area * @shmem: Transmit/Receive shared memory area
*/ */
@ -28,6 +29,7 @@ struct scmi_mailbox {
struct mbox_client cl; struct mbox_client cl;
struct mbox_chan *chan; struct mbox_chan *chan;
struct mbox_chan *chan_receiver; struct mbox_chan *chan_receiver;
struct mbox_chan *chan_platform_receiver;
struct scmi_chan_info *cinfo; struct scmi_chan_info *cinfo;
struct scmi_shared_mem __iomem *shmem; struct scmi_shared_mem __iomem *shmem;
}; };
@ -88,6 +90,8 @@ static bool mailbox_chan_available(struct device_node *of_node, int idx)
* for replies on the a2p channel. Set as zero if not present. * for replies on the a2p channel. Set as zero if not present.
* @p2a_chan: A reference to the optional p2a channel. * @p2a_chan: A reference to the optional p2a channel.
* Set as zero if not present. * Set as zero if not present.
* @p2a_rx_chan: A reference to the optional p2a completion channel.
* Set as zero if not present.
* *
* At first, validate the transport configuration as described in terms of * At first, validate the transport configuration as described in terms of
* 'mboxes' and 'shmem', then determin which mailbox channel indexes are * 'mboxes' and 'shmem', then determin which mailbox channel indexes are
@ -95,8 +99,8 @@ static bool mailbox_chan_available(struct device_node *of_node, int idx)
* *
* Return: 0 on Success or error * Return: 0 on Success or error
*/ */
static int mailbox_chan_validate(struct device *cdev, static int mailbox_chan_validate(struct device *cdev, int *a2p_rx_chan,
int *a2p_rx_chan, int *p2a_chan) int *p2a_chan, int *p2a_rx_chan)
{ {
int num_mb, num_sh, ret = 0; int num_mb, num_sh, ret = 0;
struct device_node *np = cdev->of_node; struct device_node *np = cdev->of_node;
@ -106,8 +110,9 @@ static int mailbox_chan_validate(struct device *cdev,
dev_dbg(cdev, "Found %d mboxes and %d shmems !\n", num_mb, num_sh); dev_dbg(cdev, "Found %d mboxes and %d shmems !\n", num_mb, num_sh);
/* Bail out if mboxes and shmem descriptors are inconsistent */ /* Bail out if mboxes and shmem descriptors are inconsistent */
if (num_mb <= 0 || num_sh <= 0 || num_sh > 2 || num_mb > 3 || if (num_mb <= 0 || num_sh <= 0 || num_sh > 2 || num_mb > 4 ||
(num_mb == 1 && num_sh != 1) || (num_mb == 3 && num_sh != 2)) { (num_mb == 1 && num_sh != 1) || (num_mb == 3 && num_sh != 2) ||
(num_mb == 4 && num_sh != 2)) {
dev_warn(cdev, dev_warn(cdev,
"Invalid channel descriptor for '%s' - mbs:%d shm:%d\n", "Invalid channel descriptor for '%s' - mbs:%d shm:%d\n",
of_node_full_name(np), num_mb, num_sh); of_node_full_name(np), num_mb, num_sh);
@ -136,6 +141,7 @@ static int mailbox_chan_validate(struct device *cdev,
case 1: case 1:
*a2p_rx_chan = 0; *a2p_rx_chan = 0;
*p2a_chan = 0; *p2a_chan = 0;
*p2a_rx_chan = 0;
break; break;
case 2: case 2:
if (num_sh == 2) { if (num_sh == 2) {
@ -145,10 +151,17 @@ static int mailbox_chan_validate(struct device *cdev,
*a2p_rx_chan = 1; *a2p_rx_chan = 1;
*p2a_chan = 0; *p2a_chan = 0;
} }
*p2a_rx_chan = 0;
break; break;
case 3: case 3:
*a2p_rx_chan = 1; *a2p_rx_chan = 1;
*p2a_chan = 2; *p2a_chan = 2;
*p2a_rx_chan = 0;
break;
case 4:
*a2p_rx_chan = 1;
*p2a_chan = 2;
*p2a_rx_chan = 3;
break; break;
} }
} }
@ -163,12 +176,12 @@ static int mailbox_chan_setup(struct scmi_chan_info *cinfo, struct device *dev,
struct device *cdev = cinfo->dev; struct device *cdev = cinfo->dev;
struct scmi_mailbox *smbox; struct scmi_mailbox *smbox;
struct device_node *shmem; struct device_node *shmem;
int ret, a2p_rx_chan, p2a_chan, idx = tx ? 0 : 1; int ret, a2p_rx_chan, p2a_chan, p2a_rx_chan, idx = tx ? 0 : 1;
struct mbox_client *cl; struct mbox_client *cl;
resource_size_t size; resource_size_t size;
struct resource res; struct resource res;
ret = mailbox_chan_validate(cdev, &a2p_rx_chan, &p2a_chan); ret = mailbox_chan_validate(cdev, &a2p_rx_chan, &p2a_chan, &p2a_rx_chan);
if (ret) if (ret)
return ret; return ret;
@ -226,6 +239,17 @@ static int mailbox_chan_setup(struct scmi_chan_info *cinfo, struct device *dev,
} }
} }
if (!tx && p2a_rx_chan) {
smbox->chan_platform_receiver = mbox_request_channel(cl, p2a_rx_chan);
if (IS_ERR(smbox->chan_platform_receiver)) {
ret = PTR_ERR(smbox->chan_platform_receiver);
if (ret != -EPROBE_DEFER)
dev_err(cdev, "failed to request SCMI P2A Receiver mailbox\n");
return ret;
}
}
cinfo->transport_info = smbox; cinfo->transport_info = smbox;
smbox->cinfo = cinfo; smbox->cinfo = cinfo;
@ -240,9 +264,11 @@ static int mailbox_chan_free(int id, void *p, void *data)
if (smbox && !IS_ERR(smbox->chan)) { if (smbox && !IS_ERR(smbox->chan)) {
mbox_free_channel(smbox->chan); mbox_free_channel(smbox->chan);
mbox_free_channel(smbox->chan_receiver); mbox_free_channel(smbox->chan_receiver);
mbox_free_channel(smbox->chan_platform_receiver);
cinfo->transport_info = NULL; cinfo->transport_info = NULL;
smbox->chan = NULL; smbox->chan = NULL;
smbox->chan_receiver = NULL; smbox->chan_receiver = NULL;
smbox->chan_platform_receiver = NULL;
smbox->cinfo = NULL; smbox->cinfo = NULL;
} }
@ -297,8 +323,30 @@ static void mailbox_fetch_notification(struct scmi_chan_info *cinfo,
static void mailbox_clear_channel(struct scmi_chan_info *cinfo) static void mailbox_clear_channel(struct scmi_chan_info *cinfo)
{ {
struct scmi_mailbox *smbox = cinfo->transport_info; struct scmi_mailbox *smbox = cinfo->transport_info;
struct device *cdev = cinfo->dev;
struct mbox_chan *intr;
int ret;
shmem_clear_channel(smbox->shmem); shmem_clear_channel(smbox->shmem);
if (!shmem_channel_intr_enabled(smbox->shmem))
return;
if (smbox->chan_platform_receiver)
intr = smbox->chan_platform_receiver;
else if (smbox->chan)
intr = smbox->chan;
else {
dev_err(cdev, "Channel INTR wrongly set?\n");
return;
}
ret = mbox_send_message(intr, NULL);
/* mbox_send_message returns non-negative value on success, so reset */
if (ret > 0)
ret = 0;
mbox_client_txdone(intr, ret);
} }
static bool static bool

View File

@ -24,7 +24,10 @@
#include "protocols.h" #include "protocols.h"
#include "notify.h" #include "notify.h"
#define MAX_OPPS 16 /* Updated only after ALL the mandatory features for that version are merged */
#define SCMI_PROTOCOL_SUPPORTED_VERSION 0x40000
#define MAX_OPPS 32
enum scmi_performance_protocol_cmd { enum scmi_performance_protocol_cmd {
PERF_DOMAIN_ATTRIBUTES = 0x3, PERF_DOMAIN_ATTRIBUTES = 0x3,
@ -1111,7 +1114,7 @@ static int scmi_perf_protocol_init(const struct scmi_protocol_handle *ph)
if (ret) if (ret)
return ret; return ret;
return ph->set_priv(ph, pinfo); return ph->set_priv(ph, pinfo, version);
} }
static const struct scmi_protocol scmi_perf = { static const struct scmi_protocol scmi_perf = {
@ -1120,6 +1123,7 @@ static const struct scmi_protocol scmi_perf = {
.instance_init = &scmi_perf_protocol_init, .instance_init = &scmi_perf_protocol_init,
.ops = &perf_proto_ops, .ops = &perf_proto_ops,
.events = &perf_protocol_events, .events = &perf_protocol_events,
.supported_version = SCMI_PROTOCOL_SUPPORTED_VERSION,
}; };
DEFINE_SCMI_PROTOCOL_REGISTER_UNREGISTER(perf, scmi_perf) DEFINE_SCMI_PROTOCOL_REGISTER_UNREGISTER(perf, scmi_perf)

View File

@ -0,0 +1,916 @@
// SPDX-License-Identifier: GPL-2.0
/*
* System Control and Management Interface (SCMI) Pinctrl Protocol
*
* Copyright (C) 2024 EPAM
* Copyright 2024 NXP
*/
#include <asm/byteorder.h>
#include <linux/bits.h>
#include <linux/bitfield.h>
#include <linux/device.h>
#include <linux/module.h>
#include <linux/scmi_protocol.h>
#include <linux/slab.h>
#include <linux/string.h>
#include <linux/types.h>
#include "common.h"
#include "protocols.h"
/* Updated only after ALL the mandatory features for that version are merged */
#define SCMI_PROTOCOL_SUPPORTED_VERSION 0x10000
#define GET_GROUPS_NR(x) le32_get_bits((x), GENMASK(31, 16))
#define GET_PINS_NR(x) le32_get_bits((x), GENMASK(15, 0))
#define GET_FUNCTIONS_NR(x) le32_get_bits((x), GENMASK(15, 0))
#define EXT_NAME_FLAG(x) le32_get_bits((x), BIT(31))
#define NUM_ELEMS(x) le32_get_bits((x), GENMASK(15, 0))
#define REMAINING(x) le32_get_bits((x), GENMASK(31, 16))
#define RETURNED(x) le32_get_bits((x), GENMASK(11, 0))
#define CONFIG_FLAG_MASK GENMASK(19, 18)
#define SELECTOR_MASK GENMASK(17, 16)
#define SKIP_CONFIGS_MASK GENMASK(15, 8)
#define CONFIG_TYPE_MASK GENMASK(7, 0)
enum scmi_pinctrl_protocol_cmd {
PINCTRL_ATTRIBUTES = 0x3,
PINCTRL_LIST_ASSOCIATIONS = 0x4,
PINCTRL_SETTINGS_GET = 0x5,
PINCTRL_SETTINGS_CONFIGURE = 0x6,
PINCTRL_REQUEST = 0x7,
PINCTRL_RELEASE = 0x8,
PINCTRL_NAME_GET = 0x9,
PINCTRL_SET_PERMISSIONS = 0xa,
};
struct scmi_msg_settings_conf {
__le32 identifier;
__le32 function_id;
__le32 attributes;
__le32 configs[];
};
struct scmi_msg_settings_get {
__le32 identifier;
__le32 attributes;
};
struct scmi_resp_settings_get {
__le32 function_selected;
__le32 num_configs;
__le32 configs[];
};
struct scmi_msg_pinctrl_protocol_attributes {
__le32 attributes_low;
__le32 attributes_high;
};
struct scmi_msg_pinctrl_attributes {
__le32 identifier;
__le32 flags;
};
struct scmi_resp_pinctrl_attributes {
__le32 attributes;
u8 name[SCMI_SHORT_NAME_MAX_SIZE];
};
struct scmi_msg_pinctrl_list_assoc {
__le32 identifier;
__le32 flags;
__le32 index;
};
struct scmi_resp_pinctrl_list_assoc {
__le32 flags;
__le16 array[];
};
struct scmi_msg_request {
__le32 identifier;
__le32 flags;
};
struct scmi_group_info {
char name[SCMI_MAX_STR_SIZE];
bool present;
u32 *group_pins;
u32 nr_pins;
};
struct scmi_function_info {
char name[SCMI_MAX_STR_SIZE];
bool present;
u32 *groups;
u32 nr_groups;
};
struct scmi_pin_info {
char name[SCMI_MAX_STR_SIZE];
bool present;
};
struct scmi_pinctrl_info {
u32 version;
int nr_groups;
int nr_functions;
int nr_pins;
struct scmi_group_info *groups;
struct scmi_function_info *functions;
struct scmi_pin_info *pins;
};
static int scmi_pinctrl_attributes_get(const struct scmi_protocol_handle *ph,
struct scmi_pinctrl_info *pi)
{
int ret;
struct scmi_xfer *t;
struct scmi_msg_pinctrl_protocol_attributes *attr;
ret = ph->xops->xfer_get_init(ph, PROTOCOL_ATTRIBUTES, 0, sizeof(*attr), &t);
if (ret)
return ret;
attr = t->rx.buf;
ret = ph->xops->do_xfer(ph, t);
if (!ret) {
pi->nr_functions = GET_FUNCTIONS_NR(attr->attributes_high);
pi->nr_groups = GET_GROUPS_NR(attr->attributes_low);
pi->nr_pins = GET_PINS_NR(attr->attributes_low);
if (pi->nr_pins == 0) {
dev_warn(ph->dev, "returned zero pins\n");
ret = -EINVAL;
}
}
ph->xops->xfer_put(ph, t);
return ret;
}
static int scmi_pinctrl_count_get(const struct scmi_protocol_handle *ph,
enum scmi_pinctrl_selector_type type)
{
struct scmi_pinctrl_info *pi = ph->get_priv(ph);
switch (type) {
case PIN_TYPE:
return pi->nr_pins;
case GROUP_TYPE:
return pi->nr_groups;
case FUNCTION_TYPE:
return pi->nr_functions;
default:
return -EINVAL;
}
}
static int scmi_pinctrl_validate_id(const struct scmi_protocol_handle *ph,
u32 selector,
enum scmi_pinctrl_selector_type type)
{
int value;
value = scmi_pinctrl_count_get(ph, type);
if (value < 0)
return value;
if (selector >= value || value == 0)
return -EINVAL;
return 0;
}
static int scmi_pinctrl_attributes(const struct scmi_protocol_handle *ph,
enum scmi_pinctrl_selector_type type,
u32 selector, char *name,
u32 *n_elems)
{
int ret;
struct scmi_xfer *t;
struct scmi_msg_pinctrl_attributes *tx;
struct scmi_resp_pinctrl_attributes *rx;
bool ext_name_flag;
if (!name)
return -EINVAL;
ret = scmi_pinctrl_validate_id(ph, selector, type);
if (ret)
return ret;
ret = ph->xops->xfer_get_init(ph, PINCTRL_ATTRIBUTES, sizeof(*tx),
sizeof(*rx), &t);
if (ret)
return ret;
tx = t->tx.buf;
rx = t->rx.buf;
tx->identifier = cpu_to_le32(selector);
tx->flags = cpu_to_le32(type);
ret = ph->xops->do_xfer(ph, t);
if (!ret) {
if (n_elems)
*n_elems = NUM_ELEMS(rx->attributes);
strscpy(name, rx->name, SCMI_SHORT_NAME_MAX_SIZE);
ext_name_flag = !!EXT_NAME_FLAG(rx->attributes);
}
ph->xops->xfer_put(ph, t);
if (ret)
return ret;
/*
* If supported overwrite short name with the extended one;
* on error just carry on and use already provided short name.
*/
if (ext_name_flag)
ret = ph->hops->extended_name_get(ph, PINCTRL_NAME_GET,
selector, (u32 *)&type, name,
SCMI_MAX_STR_SIZE);
return ret;
}
struct scmi_pinctrl_ipriv {
u32 selector;
enum scmi_pinctrl_selector_type type;
u32 *array;
};
static void iter_pinctrl_assoc_prepare_message(void *message,
u32 desc_index,
const void *priv)
{
struct scmi_msg_pinctrl_list_assoc *msg = message;
const struct scmi_pinctrl_ipriv *p = priv;
msg->identifier = cpu_to_le32(p->selector);
msg->flags = cpu_to_le32(p->type);
msg->index = cpu_to_le32(desc_index);
}
static int iter_pinctrl_assoc_update_state(struct scmi_iterator_state *st,
const void *response, void *priv)
{
const struct scmi_resp_pinctrl_list_assoc *r = response;
st->num_returned = RETURNED(r->flags);
st->num_remaining = REMAINING(r->flags);
return 0;
}
static int
iter_pinctrl_assoc_process_response(const struct scmi_protocol_handle *ph,
const void *response,
struct scmi_iterator_state *st, void *priv)
{
const struct scmi_resp_pinctrl_list_assoc *r = response;
struct scmi_pinctrl_ipriv *p = priv;
p->array[st->desc_index + st->loop_idx] =
le16_to_cpu(r->array[st->loop_idx]);
return 0;
}
static int scmi_pinctrl_list_associations(const struct scmi_protocol_handle *ph,
u32 selector,
enum scmi_pinctrl_selector_type type,
u16 size, u32 *array)
{
int ret;
void *iter;
struct scmi_iterator_ops ops = {
.prepare_message = iter_pinctrl_assoc_prepare_message,
.update_state = iter_pinctrl_assoc_update_state,
.process_response = iter_pinctrl_assoc_process_response,
};
struct scmi_pinctrl_ipriv ipriv = {
.selector = selector,
.type = type,
.array = array,
};
if (!array || !size || type == PIN_TYPE)
return -EINVAL;
ret = scmi_pinctrl_validate_id(ph, selector, type);
if (ret)
return ret;
iter = ph->hops->iter_response_init(ph, &ops, size,
PINCTRL_LIST_ASSOCIATIONS,
sizeof(struct scmi_msg_pinctrl_list_assoc),
&ipriv);
if (IS_ERR(iter))
return PTR_ERR(iter);
return ph->hops->iter_response_run(iter);
}
struct scmi_settings_get_ipriv {
u32 selector;
enum scmi_pinctrl_selector_type type;
bool get_all;
unsigned int *nr_configs;
enum scmi_pinctrl_conf_type *config_types;
u32 *config_values;
};
static void
iter_pinctrl_settings_get_prepare_message(void *message, u32 desc_index,
const void *priv)
{
struct scmi_msg_settings_get *msg = message;
const struct scmi_settings_get_ipriv *p = priv;
u32 attributes;
attributes = FIELD_PREP(SELECTOR_MASK, p->type);
if (p->get_all) {
attributes |= FIELD_PREP(CONFIG_FLAG_MASK, 1) |
FIELD_PREP(SKIP_CONFIGS_MASK, desc_index);
} else {
attributes |= FIELD_PREP(CONFIG_TYPE_MASK, p->config_types[0]);
}
msg->attributes = cpu_to_le32(attributes);
msg->identifier = cpu_to_le32(p->selector);
}
static int
iter_pinctrl_settings_get_update_state(struct scmi_iterator_state *st,
const void *response, void *priv)
{
const struct scmi_resp_settings_get *r = response;
struct scmi_settings_get_ipriv *p = priv;
if (p->get_all) {
st->num_returned = le32_get_bits(r->num_configs, GENMASK(7, 0));
st->num_remaining = le32_get_bits(r->num_configs, GENMASK(31, 24));
} else {
st->num_returned = 1;
st->num_remaining = 0;
}
return 0;
}
static int
iter_pinctrl_settings_get_process_response(const struct scmi_protocol_handle *ph,
const void *response,
struct scmi_iterator_state *st,
void *priv)
{
const struct scmi_resp_settings_get *r = response;
struct scmi_settings_get_ipriv *p = priv;
u32 type = le32_get_bits(r->configs[st->loop_idx * 2], GENMASK(7, 0));
u32 val = le32_to_cpu(r->configs[st->loop_idx * 2 + 1]);
if (p->get_all) {
p->config_types[st->desc_index + st->loop_idx] = type;
} else {
if (p->config_types[0] != type)
return -EINVAL;
}
p->config_values[st->desc_index + st->loop_idx] = val;
++*p->nr_configs;
return 0;
}
static int
scmi_pinctrl_settings_get(const struct scmi_protocol_handle *ph, u32 selector,
enum scmi_pinctrl_selector_type type,
unsigned int *nr_configs,
enum scmi_pinctrl_conf_type *config_types,
u32 *config_values)
{
int ret;
void *iter;
unsigned int max_configs = *nr_configs;
struct scmi_iterator_ops ops = {
.prepare_message = iter_pinctrl_settings_get_prepare_message,
.update_state = iter_pinctrl_settings_get_update_state,
.process_response = iter_pinctrl_settings_get_process_response,
};
struct scmi_settings_get_ipriv ipriv = {
.selector = selector,
.type = type,
.get_all = (max_configs > 1),
.nr_configs = nr_configs,
.config_types = config_types,
.config_values = config_values,
};
if (!config_types || !config_values || type == FUNCTION_TYPE)
return -EINVAL;
ret = scmi_pinctrl_validate_id(ph, selector, type);
if (ret)
return ret;
/* Prepare to count returned configs */
*nr_configs = 0;
iter = ph->hops->iter_response_init(ph, &ops, max_configs,
PINCTRL_SETTINGS_GET,
sizeof(struct scmi_msg_settings_get),
&ipriv);
if (IS_ERR(iter))
return PTR_ERR(iter);
return ph->hops->iter_response_run(iter);
}
static int scmi_pinctrl_settings_get_one(const struct scmi_protocol_handle *ph,
u32 selector,
enum scmi_pinctrl_selector_type type,
enum scmi_pinctrl_conf_type config_type,
u32 *config_value)
{
unsigned int nr_configs = 1;
return scmi_pinctrl_settings_get(ph, selector, type, &nr_configs,
&config_type, config_value);
}
static int scmi_pinctrl_settings_get_all(const struct scmi_protocol_handle *ph,
u32 selector,
enum scmi_pinctrl_selector_type type,
unsigned int *nr_configs,
enum scmi_pinctrl_conf_type *config_types,
u32 *config_values)
{
if (!nr_configs || *nr_configs == 0)
return -EINVAL;
return scmi_pinctrl_settings_get(ph, selector, type, nr_configs,
config_types, config_values);
}
static int
scmi_pinctrl_settings_conf(const struct scmi_protocol_handle *ph,
u32 selector,
enum scmi_pinctrl_selector_type type,
u32 nr_configs,
enum scmi_pinctrl_conf_type *config_type,
u32 *config_value)
{
struct scmi_xfer *t;
struct scmi_msg_settings_conf *tx;
u32 attributes;
int ret, i;
u32 configs_in_chunk, conf_num = 0;
u32 chunk;
int max_msg_size = ph->hops->get_max_msg_size(ph);
if (!config_type || !config_value || type == FUNCTION_TYPE)
return -EINVAL;
ret = scmi_pinctrl_validate_id(ph, selector, type);
if (ret)
return ret;
configs_in_chunk = (max_msg_size - sizeof(*tx)) / (sizeof(__le32) * 2);
while (conf_num < nr_configs) {
chunk = (nr_configs - conf_num > configs_in_chunk) ?
configs_in_chunk : nr_configs - conf_num;
ret = ph->xops->xfer_get_init(ph, PINCTRL_SETTINGS_CONFIGURE,
sizeof(*tx) +
chunk * 2 * sizeof(__le32), 0, &t);
if (ret)
break;
tx = t->tx.buf;
tx->identifier = cpu_to_le32(selector);
tx->function_id = cpu_to_le32(0xFFFFFFFF);
attributes = FIELD_PREP(GENMASK(1, 0), type) |
FIELD_PREP(GENMASK(9, 2), chunk);
tx->attributes = cpu_to_le32(attributes);
for (i = 0; i < chunk; i++) {
tx->configs[i * 2] =
cpu_to_le32(config_type[conf_num + i]);
tx->configs[i * 2 + 1] =
cpu_to_le32(config_value[conf_num + i]);
}
ret = ph->xops->do_xfer(ph, t);
ph->xops->xfer_put(ph, t);
if (ret)
break;
conf_num += chunk;
}
return ret;
}
static int scmi_pinctrl_function_select(const struct scmi_protocol_handle *ph,
u32 group,
enum scmi_pinctrl_selector_type type,
u32 function_id)
{
int ret;
struct scmi_xfer *t;
struct scmi_msg_settings_conf *tx;
u32 attributes;
ret = scmi_pinctrl_validate_id(ph, group, type);
if (ret)
return ret;
ret = ph->xops->xfer_get_init(ph, PINCTRL_SETTINGS_CONFIGURE,
sizeof(*tx), 0, &t);
if (ret)
return ret;
tx = t->tx.buf;
tx->identifier = cpu_to_le32(group);
tx->function_id = cpu_to_le32(function_id);
attributes = FIELD_PREP(GENMASK(1, 0), type) | BIT(10);
tx->attributes = cpu_to_le32(attributes);
ret = ph->xops->do_xfer(ph, t);
ph->xops->xfer_put(ph, t);
return ret;
}
static int scmi_pinctrl_request_free(const struct scmi_protocol_handle *ph,
u32 identifier,
enum scmi_pinctrl_selector_type type,
enum scmi_pinctrl_protocol_cmd cmd)
{
int ret;
struct scmi_xfer *t;
struct scmi_msg_request *tx;
if (type == FUNCTION_TYPE)
return -EINVAL;
if (cmd != PINCTRL_REQUEST && cmd != PINCTRL_RELEASE)
return -EINVAL;
ret = scmi_pinctrl_validate_id(ph, identifier, type);
if (ret)
return ret;
ret = ph->xops->xfer_get_init(ph, cmd, sizeof(*tx), 0, &t);
if (ret)
return ret;
tx = t->tx.buf;
tx->identifier = cpu_to_le32(identifier);
tx->flags = cpu_to_le32(type);
ret = ph->xops->do_xfer(ph, t);
ph->xops->xfer_put(ph, t);
return ret;
}
static int scmi_pinctrl_pin_request(const struct scmi_protocol_handle *ph,
u32 pin)
{
return scmi_pinctrl_request_free(ph, pin, PIN_TYPE, PINCTRL_REQUEST);
}
static int scmi_pinctrl_pin_free(const struct scmi_protocol_handle *ph, u32 pin)
{
return scmi_pinctrl_request_free(ph, pin, PIN_TYPE, PINCTRL_RELEASE);
}
static int scmi_pinctrl_get_group_info(const struct scmi_protocol_handle *ph,
u32 selector,
struct scmi_group_info *group)
{
int ret;
ret = scmi_pinctrl_attributes(ph, GROUP_TYPE, selector, group->name,
&group->nr_pins);
if (ret)
return ret;
if (!group->nr_pins) {
dev_err(ph->dev, "Group %d has 0 elements", selector);
return -ENODATA;
}
group->group_pins = kmalloc_array(group->nr_pins,
sizeof(*group->group_pins),
GFP_KERNEL);
if (!group->group_pins)
return -ENOMEM;
ret = scmi_pinctrl_list_associations(ph, selector, GROUP_TYPE,
group->nr_pins, group->group_pins);
if (ret) {
kfree(group->group_pins);
return ret;
}
group->present = true;
return 0;
}
static int scmi_pinctrl_get_group_name(const struct scmi_protocol_handle *ph,
u32 selector, const char **name)
{
struct scmi_pinctrl_info *pi = ph->get_priv(ph);
if (!name)
return -EINVAL;
if (selector >= pi->nr_groups || pi->nr_groups == 0)
return -EINVAL;
if (!pi->groups[selector].present) {
int ret;
ret = scmi_pinctrl_get_group_info(ph, selector,
&pi->groups[selector]);
if (ret)
return ret;
}
*name = pi->groups[selector].name;
return 0;
}
static int scmi_pinctrl_group_pins_get(const struct scmi_protocol_handle *ph,
u32 selector, const u32 **pins,
u32 *nr_pins)
{
struct scmi_pinctrl_info *pi = ph->get_priv(ph);
if (!pins || !nr_pins)
return -EINVAL;
if (selector >= pi->nr_groups || pi->nr_groups == 0)
return -EINVAL;
if (!pi->groups[selector].present) {
int ret;
ret = scmi_pinctrl_get_group_info(ph, selector,
&pi->groups[selector]);
if (ret)
return ret;
}
*pins = pi->groups[selector].group_pins;
*nr_pins = pi->groups[selector].nr_pins;
return 0;
}
static int scmi_pinctrl_get_function_info(const struct scmi_protocol_handle *ph,
u32 selector,
struct scmi_function_info *func)
{
int ret;
ret = scmi_pinctrl_attributes(ph, FUNCTION_TYPE, selector, func->name,
&func->nr_groups);
if (ret)
return ret;
if (!func->nr_groups) {
dev_err(ph->dev, "Function %d has 0 elements", selector);
return -ENODATA;
}
func->groups = kmalloc_array(func->nr_groups, sizeof(*func->groups),
GFP_KERNEL);
if (!func->groups)
return -ENOMEM;
ret = scmi_pinctrl_list_associations(ph, selector, FUNCTION_TYPE,
func->nr_groups, func->groups);
if (ret) {
kfree(func->groups);
return ret;
}
func->present = true;
return 0;
}
static int scmi_pinctrl_get_function_name(const struct scmi_protocol_handle *ph,
u32 selector, const char **name)
{
struct scmi_pinctrl_info *pi = ph->get_priv(ph);
if (!name)
return -EINVAL;
if (selector >= pi->nr_functions || pi->nr_functions == 0)
return -EINVAL;
if (!pi->functions[selector].present) {
int ret;
ret = scmi_pinctrl_get_function_info(ph, selector,
&pi->functions[selector]);
if (ret)
return ret;
}
*name = pi->functions[selector].name;
return 0;
}
static int
scmi_pinctrl_function_groups_get(const struct scmi_protocol_handle *ph,
u32 selector, u32 *nr_groups,
const u32 **groups)
{
struct scmi_pinctrl_info *pi = ph->get_priv(ph);
if (!groups || !nr_groups)
return -EINVAL;
if (selector >= pi->nr_functions || pi->nr_functions == 0)
return -EINVAL;
if (!pi->functions[selector].present) {
int ret;
ret = scmi_pinctrl_get_function_info(ph, selector,
&pi->functions[selector]);
if (ret)
return ret;
}
*groups = pi->functions[selector].groups;
*nr_groups = pi->functions[selector].nr_groups;
return 0;
}
static int scmi_pinctrl_mux_set(const struct scmi_protocol_handle *ph,
u32 selector, u32 group)
{
return scmi_pinctrl_function_select(ph, group, GROUP_TYPE, selector);
}
static int scmi_pinctrl_get_pin_info(const struct scmi_protocol_handle *ph,
u32 selector, struct scmi_pin_info *pin)
{
int ret;
if (!pin)
return -EINVAL;
ret = scmi_pinctrl_attributes(ph, PIN_TYPE, selector, pin->name, NULL);
if (ret)
return ret;
pin->present = true;
return 0;
}
static int scmi_pinctrl_get_pin_name(const struct scmi_protocol_handle *ph,
u32 selector, const char **name)
{
struct scmi_pinctrl_info *pi = ph->get_priv(ph);
if (!name)
return -EINVAL;
if (selector >= pi->nr_pins)
return -EINVAL;
if (!pi->pins[selector].present) {
int ret;
ret = scmi_pinctrl_get_pin_info(ph, selector, &pi->pins[selector]);
if (ret)
return ret;
}
*name = pi->pins[selector].name;
return 0;
}
static int scmi_pinctrl_name_get(const struct scmi_protocol_handle *ph,
u32 selector,
enum scmi_pinctrl_selector_type type,
const char **name)
{
switch (type) {
case PIN_TYPE:
return scmi_pinctrl_get_pin_name(ph, selector, name);
case GROUP_TYPE:
return scmi_pinctrl_get_group_name(ph, selector, name);
case FUNCTION_TYPE:
return scmi_pinctrl_get_function_name(ph, selector, name);
default:
return -EINVAL;
}
}
static const struct scmi_pinctrl_proto_ops pinctrl_proto_ops = {
.count_get = scmi_pinctrl_count_get,
.name_get = scmi_pinctrl_name_get,
.group_pins_get = scmi_pinctrl_group_pins_get,
.function_groups_get = scmi_pinctrl_function_groups_get,
.mux_set = scmi_pinctrl_mux_set,
.settings_get_one = scmi_pinctrl_settings_get_one,
.settings_get_all = scmi_pinctrl_settings_get_all,
.settings_conf = scmi_pinctrl_settings_conf,
.pin_request = scmi_pinctrl_pin_request,
.pin_free = scmi_pinctrl_pin_free,
};
static int scmi_pinctrl_protocol_init(const struct scmi_protocol_handle *ph)
{
int ret;
u32 version;
struct scmi_pinctrl_info *pinfo;
ret = ph->xops->version_get(ph, &version);
if (ret)
return ret;
dev_dbg(ph->dev, "Pinctrl Version %d.%d\n",
PROTOCOL_REV_MAJOR(version), PROTOCOL_REV_MINOR(version));
pinfo = devm_kzalloc(ph->dev, sizeof(*pinfo), GFP_KERNEL);
if (!pinfo)
return -ENOMEM;
ret = scmi_pinctrl_attributes_get(ph, pinfo);
if (ret)
return ret;
pinfo->pins = devm_kcalloc(ph->dev, pinfo->nr_pins,
sizeof(*pinfo->pins), GFP_KERNEL);
if (!pinfo->pins)
return -ENOMEM;
pinfo->groups = devm_kcalloc(ph->dev, pinfo->nr_groups,
sizeof(*pinfo->groups), GFP_KERNEL);
if (!pinfo->groups)
return -ENOMEM;
pinfo->functions = devm_kcalloc(ph->dev, pinfo->nr_functions,
sizeof(*pinfo->functions), GFP_KERNEL);
if (!pinfo->functions)
return -ENOMEM;
pinfo->version = version;
return ph->set_priv(ph, pinfo, version);
}
static int scmi_pinctrl_protocol_deinit(const struct scmi_protocol_handle *ph)
{
int i;
struct scmi_pinctrl_info *pi = ph->get_priv(ph);
/* Free groups_pins allocated in scmi_pinctrl_get_group_info */
for (i = 0; i < pi->nr_groups; i++) {
if (pi->groups[i].present) {
kfree(pi->groups[i].group_pins);
pi->groups[i].present = false;
}
}
/* Free groups allocated in scmi_pinctrl_get_function_info */
for (i = 0; i < pi->nr_functions; i++) {
if (pi->functions[i].present) {
kfree(pi->functions[i].groups);
pi->functions[i].present = false;
}
}
return 0;
}
static const struct scmi_protocol scmi_pinctrl = {
.id = SCMI_PROTOCOL_PINCTRL,
.owner = THIS_MODULE,
.instance_init = &scmi_pinctrl_protocol_init,
.instance_deinit = &scmi_pinctrl_protocol_deinit,
.ops = &pinctrl_proto_ops,
.supported_version = SCMI_PROTOCOL_SUPPORTED_VERSION,
};
DEFINE_SCMI_PROTOCOL_REGISTER_UNREGISTER(pinctrl, scmi_pinctrl)

View File

@ -13,6 +13,9 @@
#include "protocols.h" #include "protocols.h"
#include "notify.h" #include "notify.h"
/* Updated only after ALL the mandatory features for that version are merged */
#define SCMI_PROTOCOL_SUPPORTED_VERSION 0x30000
enum scmi_power_protocol_cmd { enum scmi_power_protocol_cmd {
POWER_DOMAIN_ATTRIBUTES = 0x3, POWER_DOMAIN_ATTRIBUTES = 0x3,
POWER_STATE_SET = 0x4, POWER_STATE_SET = 0x4,
@ -328,7 +331,7 @@ static int scmi_power_protocol_init(const struct scmi_protocol_handle *ph)
pinfo->version = version; pinfo->version = version;
return ph->set_priv(ph, pinfo); return ph->set_priv(ph, pinfo, version);
} }
static const struct scmi_protocol scmi_power = { static const struct scmi_protocol scmi_power = {
@ -337,6 +340,7 @@ static const struct scmi_protocol scmi_power = {
.instance_init = &scmi_power_protocol_init, .instance_init = &scmi_power_protocol_init,
.ops = &power_proto_ops, .ops = &power_proto_ops,
.events = &power_protocol_events, .events = &power_protocol_events,
.supported_version = SCMI_PROTOCOL_SUPPORTED_VERSION,
}; };
DEFINE_SCMI_PROTOCOL_REGISTER_UNREGISTER(power, scmi_power) DEFINE_SCMI_PROTOCOL_REGISTER_UNREGISTER(power, scmi_power)

View File

@ -17,6 +17,9 @@
#include "protocols.h" #include "protocols.h"
#include "notify.h" #include "notify.h"
/* Updated only after ALL the mandatory features for that version are merged */
#define SCMI_PROTOCOL_SUPPORTED_VERSION 0x20000
enum scmi_powercap_protocol_cmd { enum scmi_powercap_protocol_cmd {
POWERCAP_DOMAIN_ATTRIBUTES = 0x3, POWERCAP_DOMAIN_ATTRIBUTES = 0x3,
POWERCAP_CAP_GET = 0x4, POWERCAP_CAP_GET = 0x4,
@ -975,7 +978,7 @@ scmi_powercap_protocol_init(const struct scmi_protocol_handle *ph)
} }
pinfo->version = version; pinfo->version = version;
return ph->set_priv(ph, pinfo); return ph->set_priv(ph, pinfo, version);
} }
static const struct scmi_protocol scmi_powercap = { static const struct scmi_protocol scmi_powercap = {
@ -984,6 +987,7 @@ static const struct scmi_protocol scmi_powercap = {
.instance_init = &scmi_powercap_protocol_init, .instance_init = &scmi_powercap_protocol_init,
.ops = &powercap_proto_ops, .ops = &powercap_proto_ops,
.events = &powercap_protocol_events, .events = &powercap_protocol_events,
.supported_version = SCMI_PROTOCOL_SUPPORTED_VERSION,
}; };
DEFINE_SCMI_PROTOCOL_REGISTER_UNREGISTER(powercap, scmi_powercap) DEFINE_SCMI_PROTOCOL_REGISTER_UNREGISTER(powercap, scmi_powercap)

View File

@ -174,7 +174,8 @@ struct scmi_protocol_handle {
struct device *dev; struct device *dev;
const struct scmi_xfer_ops *xops; const struct scmi_xfer_ops *xops;
const struct scmi_proto_helpers_ops *hops; const struct scmi_proto_helpers_ops *hops;
int (*set_priv)(const struct scmi_protocol_handle *ph, void *priv); int (*set_priv)(const struct scmi_protocol_handle *ph, void *priv,
u32 version);
void *(*get_priv)(const struct scmi_protocol_handle *ph); void *(*get_priv)(const struct scmi_protocol_handle *ph);
}; };
@ -253,6 +254,7 @@ struct scmi_fc_info {
* @fastchannel_init: A common helper used to initialize FC descriptors by * @fastchannel_init: A common helper used to initialize FC descriptors by
* gathering FC descriptions from the SCMI platform server. * gathering FC descriptions from the SCMI platform server.
* @fastchannel_db_ring: A common helper to ring a FC doorbell. * @fastchannel_db_ring: A common helper to ring a FC doorbell.
* @get_max_msg_size: A common helper to get the maximum message size.
*/ */
struct scmi_proto_helpers_ops { struct scmi_proto_helpers_ops {
int (*extended_name_get)(const struct scmi_protocol_handle *ph, int (*extended_name_get)(const struct scmi_protocol_handle *ph,
@ -269,6 +271,7 @@ struct scmi_proto_helpers_ops {
void __iomem **p_addr, void __iomem **p_addr,
struct scmi_fc_db_info **p_db); struct scmi_fc_db_info **p_db);
void (*fastchannel_db_ring)(struct scmi_fc_db_info *db); void (*fastchannel_db_ring)(struct scmi_fc_db_info *db);
int (*get_max_msg_size)(const struct scmi_protocol_handle *ph);
}; };
/** /**
@ -311,6 +314,10 @@ typedef int (*scmi_prot_init_ph_fn_t)(const struct scmi_protocol_handle *);
* @ops: Optional reference to the operations provided by the protocol and * @ops: Optional reference to the operations provided by the protocol and
* exposed in scmi_protocol.h. * exposed in scmi_protocol.h.
* @events: An optional reference to the events supported by this protocol. * @events: An optional reference to the events supported by this protocol.
* @supported_version: The highest version currently supported for this
* protocol by the agent. Each protocol implementation
* in the agent is supposed to downgrade to match the
* protocol version supported by the platform.
*/ */
struct scmi_protocol { struct scmi_protocol {
const u8 id; const u8 id;
@ -319,6 +326,7 @@ struct scmi_protocol {
const scmi_prot_init_ph_fn_t instance_deinit; const scmi_prot_init_ph_fn_t instance_deinit;
const void *ops; const void *ops;
const struct scmi_protocol_events *events; const struct scmi_protocol_events *events;
unsigned int supported_version;
}; };
#define DEFINE_SCMI_PROTOCOL_REGISTER_UNREGISTER(name, proto) \ #define DEFINE_SCMI_PROTOCOL_REGISTER_UNREGISTER(name, proto) \
@ -340,6 +348,7 @@ void __exit scmi_##name##_unregister(void) \
DECLARE_SCMI_REGISTER_UNREGISTER(base); DECLARE_SCMI_REGISTER_UNREGISTER(base);
DECLARE_SCMI_REGISTER_UNREGISTER(clock); DECLARE_SCMI_REGISTER_UNREGISTER(clock);
DECLARE_SCMI_REGISTER_UNREGISTER(perf); DECLARE_SCMI_REGISTER_UNREGISTER(perf);
DECLARE_SCMI_REGISTER_UNREGISTER(pinctrl);
DECLARE_SCMI_REGISTER_UNREGISTER(power); DECLARE_SCMI_REGISTER_UNREGISTER(power);
DECLARE_SCMI_REGISTER_UNREGISTER(reset); DECLARE_SCMI_REGISTER_UNREGISTER(reset);
DECLARE_SCMI_REGISTER_UNREGISTER(sensors); DECLARE_SCMI_REGISTER_UNREGISTER(sensors);

View File

@ -13,6 +13,9 @@
#include "protocols.h" #include "protocols.h"
#include "notify.h" #include "notify.h"
/* Updated only after ALL the mandatory features for that version are merged */
#define SCMI_PROTOCOL_SUPPORTED_VERSION 0x30000
enum scmi_reset_protocol_cmd { enum scmi_reset_protocol_cmd {
RESET_DOMAIN_ATTRIBUTES = 0x3, RESET_DOMAIN_ATTRIBUTES = 0x3,
RESET = 0x4, RESET = 0x4,
@ -343,7 +346,7 @@ static int scmi_reset_protocol_init(const struct scmi_protocol_handle *ph)
} }
pinfo->version = version; pinfo->version = version;
return ph->set_priv(ph, pinfo); return ph->set_priv(ph, pinfo, version);
} }
static const struct scmi_protocol scmi_reset = { static const struct scmi_protocol scmi_reset = {
@ -352,6 +355,7 @@ static const struct scmi_protocol scmi_reset = {
.instance_init = &scmi_reset_protocol_init, .instance_init = &scmi_reset_protocol_init,
.ops = &reset_proto_ops, .ops = &reset_proto_ops,
.events = &reset_protocol_events, .events = &reset_protocol_events,
.supported_version = SCMI_PROTOCOL_SUPPORTED_VERSION,
}; };
DEFINE_SCMI_PROTOCOL_REGISTER_UNREGISTER(reset, scmi_reset) DEFINE_SCMI_PROTOCOL_REGISTER_UNREGISTER(reset, scmi_reset)

View File

@ -14,6 +14,9 @@
#include "protocols.h" #include "protocols.h"
#include "notify.h" #include "notify.h"
/* Updated only after ALL the mandatory features for that version are merged */
#define SCMI_PROTOCOL_SUPPORTED_VERSION 0x30000
#define SCMI_MAX_NUM_SENSOR_AXIS 63 #define SCMI_MAX_NUM_SENSOR_AXIS 63
#define SCMIv2_SENSOR_PROTOCOL 0x10000 #define SCMIv2_SENSOR_PROTOCOL 0x10000
@ -1138,7 +1141,7 @@ static int scmi_sensors_protocol_init(const struct scmi_protocol_handle *ph)
if (ret) if (ret)
return ret; return ret;
return ph->set_priv(ph, sinfo); return ph->set_priv(ph, sinfo, version);
} }
static const struct scmi_protocol scmi_sensors = { static const struct scmi_protocol scmi_sensors = {
@ -1147,6 +1150,7 @@ static const struct scmi_protocol scmi_sensors = {
.instance_init = &scmi_sensors_protocol_init, .instance_init = &scmi_sensors_protocol_init,
.ops = &sensor_proto_ops, .ops = &sensor_proto_ops,
.events = &sensor_protocol_events, .events = &sensor_protocol_events,
.supported_version = SCMI_PROTOCOL_SUPPORTED_VERSION,
}; };
DEFINE_SCMI_PROTOCOL_REGISTER_UNREGISTER(sensors, scmi_sensors) DEFINE_SCMI_PROTOCOL_REGISTER_UNREGISTER(sensors, scmi_sensors)

View File

@ -128,3 +128,8 @@ bool shmem_channel_free(struct scmi_shared_mem __iomem *shmem)
return (ioread32(&shmem->channel_status) & return (ioread32(&shmem->channel_status) &
SCMI_SHMEM_CHAN_STAT_CHANNEL_FREE); SCMI_SHMEM_CHAN_STAT_CHANNEL_FREE);
} }
bool shmem_channel_intr_enabled(struct scmi_shared_mem __iomem *shmem)
{
return ioread32(&shmem->flags) & SCMI_SHMEM_FLAG_INTR_ENABLED;
}

View File

@ -13,6 +13,9 @@
#include "protocols.h" #include "protocols.h"
#include "notify.h" #include "notify.h"
/* Updated only after ALL the mandatory features for that version are merged */
#define SCMI_PROTOCOL_SUPPORTED_VERSION 0x20000
#define SCMI_SYSTEM_NUM_SOURCES 1 #define SCMI_SYSTEM_NUM_SOURCES 1
enum scmi_system_protocol_cmd { enum scmi_system_protocol_cmd {
@ -144,7 +147,7 @@ static int scmi_system_protocol_init(const struct scmi_protocol_handle *ph)
if (PROTOCOL_REV_MAJOR(pinfo->version) >= 0x2) if (PROTOCOL_REV_MAJOR(pinfo->version) >= 0x2)
pinfo->graceful_timeout_supported = true; pinfo->graceful_timeout_supported = true;
return ph->set_priv(ph, pinfo); return ph->set_priv(ph, pinfo, version);
} }
static const struct scmi_protocol scmi_system = { static const struct scmi_protocol scmi_system = {
@ -153,6 +156,7 @@ static const struct scmi_protocol scmi_system = {
.instance_init = &scmi_system_protocol_init, .instance_init = &scmi_system_protocol_init,
.ops = NULL, .ops = NULL,
.events = &system_protocol_events, .events = &system_protocol_events,
.supported_version = SCMI_PROTOCOL_SUPPORTED_VERSION,
}; };
DEFINE_SCMI_PROTOCOL_REGISTER_UNREGISTER(system, scmi_system) DEFINE_SCMI_PROTOCOL_REGISTER_UNREGISTER(system, scmi_system)

View File

@ -10,6 +10,9 @@
#include "protocols.h" #include "protocols.h"
/* Updated only after ALL the mandatory features for that version are merged */
#define SCMI_PROTOCOL_SUPPORTED_VERSION 0x20000
#define VOLTAGE_DOMS_NUM_MASK GENMASK(15, 0) #define VOLTAGE_DOMS_NUM_MASK GENMASK(15, 0)
#define REMAINING_LEVELS_MASK GENMASK(31, 16) #define REMAINING_LEVELS_MASK GENMASK(31, 16)
#define RETURNED_LEVELS_MASK GENMASK(11, 0) #define RETURNED_LEVELS_MASK GENMASK(11, 0)
@ -432,7 +435,7 @@ static int scmi_voltage_protocol_init(const struct scmi_protocol_handle *ph)
dev_warn(ph->dev, "No Voltage domains found.\n"); dev_warn(ph->dev, "No Voltage domains found.\n");
} }
return ph->set_priv(ph, vinfo); return ph->set_priv(ph, vinfo, version);
} }
static const struct scmi_protocol scmi_voltage = { static const struct scmi_protocol scmi_voltage = {
@ -440,6 +443,7 @@ static const struct scmi_protocol scmi_voltage = {
.owner = THIS_MODULE, .owner = THIS_MODULE,
.instance_init = &scmi_voltage_protocol_init, .instance_init = &scmi_voltage_protocol_init,
.ops = &voltage_proto_ops, .ops = &voltage_proto_ops,
.supported_version = SCMI_PROTOCOL_SUPPORTED_VERSION,
}; };
DEFINE_SCMI_PROTOCOL_REGISTER_UNREGISTER(voltage, scmi_voltage) DEFINE_SCMI_PROTOCOL_REGISTER_UNREGISTER(voltage, scmi_voltage)

View File

@ -302,6 +302,34 @@ void __hwspin_unlock(struct hwspinlock *hwlock, int mode, unsigned long *flags)
} }
EXPORT_SYMBOL_GPL(__hwspin_unlock); EXPORT_SYMBOL_GPL(__hwspin_unlock);
/**
* hwspin_lock_bust() - bust a specific hwspinlock
* @hwlock: a previously-acquired hwspinlock which we want to bust
* @id: identifier of the remote lock holder, if applicable
*
* This function will bust a hwspinlock that was previously acquired as
* long as the current owner of the lock matches the id given by the caller.
*
* Context: Process context.
*
* Returns: 0 on success, or -EINVAL if the hwspinlock does not exist, or
* the bust operation fails, and -EOPNOTSUPP if the bust operation is not
* defined for the hwspinlock.
*/
int hwspin_lock_bust(struct hwspinlock *hwlock, unsigned int id)
{
if (WARN_ON(!hwlock))
return -EINVAL;
if (!hwlock->bank->ops->bust) {
pr_err("bust operation not defined\n");
return -EOPNOTSUPP;
}
return hwlock->bank->ops->bust(hwlock, id);
}
EXPORT_SYMBOL_GPL(hwspin_lock_bust);
/** /**
* of_hwspin_lock_simple_xlate - translate hwlock_spec to return a lock id * of_hwspin_lock_simple_xlate - translate hwlock_spec to return a lock id
* @bank: the hwspinlock device bank * @bank: the hwspinlock device bank

View File

@ -21,6 +21,8 @@ struct hwspinlock_device;
* @trylock: make a single attempt to take the lock. returns 0 on * @trylock: make a single attempt to take the lock. returns 0 on
* failure and true on success. may _not_ sleep. * failure and true on success. may _not_ sleep.
* @unlock: release the lock. always succeed. may _not_ sleep. * @unlock: release the lock. always succeed. may _not_ sleep.
* @bust: optional, platform-specific bust handler, called by hwspinlock
* core to bust a specific lock.
* @relax: optional, platform-specific relax handler, called by hwspinlock * @relax: optional, platform-specific relax handler, called by hwspinlock
* core while spinning on a lock, between two successive * core while spinning on a lock, between two successive
* invocations of @trylock. may _not_ sleep. * invocations of @trylock. may _not_ sleep.
@ -28,6 +30,7 @@ struct hwspinlock_device;
struct hwspinlock_ops { struct hwspinlock_ops {
int (*trylock)(struct hwspinlock *lock); int (*trylock)(struct hwspinlock *lock);
void (*unlock)(struct hwspinlock *lock); void (*unlock)(struct hwspinlock *lock);
int (*bust)(struct hwspinlock *lock, unsigned int id);
void (*relax)(struct hwspinlock *lock); void (*relax)(struct hwspinlock *lock);
}; };

View File

@ -9,6 +9,7 @@
#include <linux/pci.h> #include <linux/pci.h>
#include "arm-smmu-v3.h" #include "arm-smmu-v3.h"
#include "../../dma-iommu.h"
struct arm_smmu_option_prop { struct arm_smmu_option_prop {
u32 opt; u32 opt;
@ -477,6 +478,21 @@ int arm_smmu_of_xlate(struct device *dev, struct of_phandle_args *args)
return iommu_fwspec_add_ids(dev, args->args, 1); return iommu_fwspec_add_ids(dev, args->args, 1);
} }
void arm_smmu_get_resv_regions(struct device *dev, struct list_head *head)
{
struct iommu_resv_region *region;
int prot = IOMMU_WRITE | IOMMU_NOEXEC | IOMMU_MMIO;
region = iommu_alloc_resv_region(MSI_IOVA_BASE, MSI_IOVA_LENGTH,
prot, IOMMU_RESV_SW_MSI, GFP_KERNEL);
if (!region)
return;
list_add_tail(&region->list, head);
iommu_dma_get_resv_regions(dev, head);
}
int arm_smmu_init_one_queue(struct arm_smmu_device *smmu, int arm_smmu_init_one_queue(struct arm_smmu_device *smmu,
struct arm_smmu_queue *q, struct arm_smmu_queue *q,
void __iomem *page, void __iomem *page,

View File

@ -72,8 +72,7 @@ extern struct kvm_iommu_ops kvm_nvhe_sym(smmu_ops);
static int atomic_pages; static int atomic_pages;
module_param(atomic_pages, int, 0); module_param(atomic_pages, int, 0);
static int kvm_arm_smmu_topup_memcache(struct arm_smmu_device *smmu, static int kvm_arm_smmu_topup_memcache(struct arm_smccc_res *res)
struct arm_smccc_res *res)
{ {
struct kvm_hyp_req req; struct kvm_hyp_req req;
@ -97,19 +96,19 @@ static int kvm_arm_smmu_topup_memcache(struct arm_smmu_device *smmu,
return __pkvm_topup_hyp_alloc(req.mem.nr_pages); return __pkvm_topup_hyp_alloc(req.mem.nr_pages);
} }
dev_err(smmu->dev, "Bogus mem request"); pr_err("Bogus mem request");
return -EBADE; return -EBADE;
} }
/* /*
* Issue hypercall, and retry after filling the memcache if necessary. * Issue hypercall, and retry after filling the memcache if necessary.
*/ */
#define kvm_call_hyp_nvhe_mc(smmu, ...) \ #define kvm_call_hyp_nvhe_mc(...) \
({ \ ({ \
struct arm_smccc_res __res; \ struct arm_smccc_res __res; \
do { \ do { \
__res = kvm_call_hyp_nvhe_smccc(__VA_ARGS__); \ __res = kvm_call_hyp_nvhe_smccc(__VA_ARGS__); \
} while (__res.a1 && !kvm_arm_smmu_topup_memcache(smmu, &__res));\ } while (__res.a1 && !kvm_arm_smmu_topup_memcache(&__res));\
__res.a1; \ __res.a1; \
}) })
@ -245,7 +244,7 @@ static int kvm_arm_smmu_domain_finalize(struct kvm_arm_smmu_domain *kvm_smmu_dom
} }
kvm_smmu_domain->domain.geometry.force_aperture = true; kvm_smmu_domain->domain.geometry.force_aperture = true;
ret = kvm_call_hyp_nvhe_mc(smmu, __pkvm_host_iommu_alloc_domain, ret = kvm_call_hyp_nvhe_mc(__pkvm_host_iommu_alloc_domain,
kvm_smmu_domain->id, kvm_smmu_domain->type); kvm_smmu_domain->id, kvm_smmu_domain->type);
return ret; return ret;
@ -336,7 +335,7 @@ static int kvm_arm_smmu_set_dev_pasid(struct iommu_domain *domain,
for (i = 0; i < fwspec->num_ids; i++) { for (i = 0; i < fwspec->num_ids; i++) {
int sid = fwspec->ids[i]; int sid = fwspec->ids[i];
ret = kvm_call_hyp_nvhe_mc(smmu, __pkvm_host_iommu_attach_dev, ret = kvm_call_hyp_nvhe_mc(__pkvm_host_iommu_attach_dev,
host_smmu->id, kvm_smmu_domain->id, host_smmu->id, kvm_smmu_domain->id,
sid, pasid, master->ssid_bits); sid, pasid, master->ssid_bits);
if (ret) { if (ret) {
@ -373,7 +372,6 @@ static int kvm_arm_smmu_map_pages(struct iommu_domain *domain,
size_t mapped; size_t mapped;
size_t size = pgsize * pgcount; size_t size = pgsize * pgcount;
struct kvm_arm_smmu_domain *kvm_smmu_domain = to_kvm_smmu_domain(domain); struct kvm_arm_smmu_domain *kvm_smmu_domain = to_kvm_smmu_domain(domain);
struct arm_smmu_device *smmu = kvm_smmu_domain->smmu;
struct arm_smccc_res res; struct arm_smccc_res res;
do { do {
@ -387,7 +385,7 @@ static int kvm_arm_smmu_map_pages(struct iommu_domain *domain,
WARN_ON(mapped > pgcount * pgsize); WARN_ON(mapped > pgcount * pgsize);
pgcount -= mapped / pgsize; pgcount -= mapped / pgsize;
*total_mapped += mapped; *total_mapped += mapped;
} while (*total_mapped < size && !kvm_arm_smmu_topup_memcache(smmu, &res)); } while (*total_mapped < size && !kvm_arm_smmu_topup_memcache(&res));
if (*total_mapped < size) if (*total_mapped < size)
return -EINVAL; return -EINVAL;
@ -403,7 +401,6 @@ static size_t kvm_arm_smmu_unmap_pages(struct iommu_domain *domain,
size_t total_unmapped = 0; size_t total_unmapped = 0;
size_t size = pgsize * pgcount; size_t size = pgsize * pgcount;
struct kvm_arm_smmu_domain *kvm_smmu_domain = to_kvm_smmu_domain(domain); struct kvm_arm_smmu_domain *kvm_smmu_domain = to_kvm_smmu_domain(domain);
struct arm_smmu_device *smmu = kvm_smmu_domain->smmu;
struct arm_smccc_res res; struct arm_smccc_res res;
do { do {
@ -423,7 +420,7 @@ static size_t kvm_arm_smmu_unmap_pages(struct iommu_domain *domain,
* block mapping. * block mapping.
*/ */
} while (total_unmapped < size && } while (total_unmapped < size &&
(unmapped || !kvm_arm_smmu_topup_memcache(smmu, &res))); (unmapped || !kvm_arm_smmu_topup_memcache(&res)));
return total_unmapped; return total_unmapped;
} }
@ -449,6 +446,7 @@ static struct iommu_ops kvm_arm_smmu_ops = {
.capable = arm_smmu_capable, .capable = arm_smmu_capable,
.device_group = arm_smmu_device_group, .device_group = arm_smmu_device_group,
.of_xlate = arm_smmu_of_xlate, .of_xlate = arm_smmu_of_xlate,
.get_resv_regions = arm_smmu_get_resv_regions,
.probe_device = kvm_arm_smmu_probe_device, .probe_device = kvm_arm_smmu_probe_device,
.release_device = kvm_arm_smmu_release_device, .release_device = kvm_arm_smmu_release_device,
.domain_alloc = kvm_arm_smmu_domain_alloc, .domain_alloc = kvm_arm_smmu_domain_alloc,
@ -1049,6 +1047,17 @@ static int kvm_arm_smmu_v3_init(void)
if (ret) if (ret)
goto err_free_mc; goto err_free_mc;
/* Preemptively allocate the identity domain. */
if (atomic_pages) {
ret = kvm_call_hyp_nvhe_mc(__pkvm_host_iommu_alloc_domain,
KVM_IOMMU_DOMAIN_IDMAP_ID,
KVM_IOMMU_DOMAIN_IDMAP_TYPE);
if (ret) {
pr_err("pKVM SMMUv3 identity domain failed allocation %d\n", ret);
return ret;
}
}
WARN_ON(driver_for_each_device(&kvm_arm_smmu_driver.driver, NULL, WARN_ON(driver_for_each_device(&kvm_arm_smmu_driver.driver, NULL,
NULL, smmu_put_device)); NULL, smmu_put_device));
return 0; return 0;

View File

@ -21,7 +21,6 @@
#include <linux/platform_device.h> #include <linux/platform_device.h>
#include "arm-smmu-v3.h" #include "arm-smmu-v3.h"
#include "../../dma-iommu.h"
#include "../../iommu-sva.h" #include "../../iommu-sva.h"
static bool disable_bypass = true; static bool disable_bypass = true;
@ -2509,22 +2508,6 @@ static int arm_smmu_enable_nesting(struct iommu_domain *domain)
return ret; return ret;
} }
static void arm_smmu_get_resv_regions(struct device *dev,
struct list_head *head)
{
struct iommu_resv_region *region;
int prot = IOMMU_WRITE | IOMMU_NOEXEC | IOMMU_MMIO;
region = iommu_alloc_resv_region(MSI_IOVA_BASE, MSI_IOVA_LENGTH,
prot, IOMMU_RESV_SW_MSI, GFP_KERNEL);
if (!region)
return;
list_add_tail(&region->list, head);
iommu_dma_get_resv_regions(dev, head);
}
static int arm_smmu_dev_enable_feature(struct device *dev, static int arm_smmu_dev_enable_feature(struct device *dev,
enum iommu_dev_features feat) enum iommu_dev_features feat)
{ {

View File

@ -278,6 +278,7 @@ int arm_smmu_device_disable(struct arm_smmu_device *smmu);
bool arm_smmu_capable(struct device *dev, enum iommu_cap cap); bool arm_smmu_capable(struct device *dev, enum iommu_cap cap);
struct iommu_group *arm_smmu_device_group(struct device *dev); struct iommu_group *arm_smmu_device_group(struct device *dev);
int arm_smmu_of_xlate(struct device *dev, struct of_phandle_args *args); int arm_smmu_of_xlate(struct device *dev, struct of_phandle_args *args);
void arm_smmu_get_resv_regions(struct device *dev, struct list_head *head);
struct platform_device; struct platform_device;
int arm_smmu_fw_probe(struct platform_device *pdev, int arm_smmu_fw_probe(struct platform_device *pdev,

View File

@ -35,6 +35,191 @@
} }
] ]
}, },
{
"name": "selftests",
"options": [
{
"include-filter": "kselftest_binderfs_binderfs_test"
},
{
"include-filter": "kselftest_breakpoints_breakpoint_test"
},
{
"include-filter": "kselftest_capabilities_test_execve"
},
{
"include-filter": "kselftest_futex_requeue"
},
{
"include-filter": "kselftest_futex_requeue_pi"
},
{
"include-filter": "kselftest_futex_requeue_pi_500k"
},
{
"include-filter": "kselftest_futex_requeue_pi_5k"
},
{
"include-filter": "kselftest_futex_requeue_pi_b"
},
{
"include-filter": "kselftest_futex_requeue_pi_b_500k"
},
{
"include-filter": "kselftest_futex_requeue_pi_b_5k"
},
{
"include-filter": "kselftest_futex_requeue_pi_bl"
},
{
"include-filter": "kselftest_futex_requeue_pi_bl_2G"
},
{
"include-filter": "kselftest_futex_requeue_pi_bl_500k"
},
{
"include-filter": "kselftest_futex_requeue_pi_bl_5k"
},
{
"include-filter": "kselftest_futex_requeue_pi_bo"
},
{
"include-filter": "kselftest_futex_requeue_pi_bo_500k"
},
{
"include-filter": "kselftest_futex_requeue_pi_bo_5k"
},
{
"include-filter": "kselftest_futex_requeue_pi_l"
},
{
"include-filter": "kselftest_futex_requeue_pi_l_2G"
},
{
"include-filter": "kselftest_futex_requeue_pi_l_500k"
},
{
"include-filter": "kselftest_futex_requeue_pi_l_5k"
},
{
"include-filter": "kselftest_futex_requeue_pi_mismatched_ops"
},
{
"include-filter": "kselftest_futex_requeue_pi_o"
},
{
"include-filter": "kselftest_futex_requeue_pi_o_500k"
},
{
"include-filter": "kselftest_futex_requeue_pi_o_5k"
},
{
"include-filter": "kselftest_futex_requeue_pi_signal_restart"
},
{
"include-filter": "kselftest_futex_wait"
},
{
"include-filter": "kselftest_futex_wait_private_mapped_file"
},
{
"include-filter": "kselftest_futex_wait_timeout"
},
{
"include-filter": "kselftest_futex_wait_uninitialized_heap"
},
{
"include-filter": "kselftest_futex_wait_wouldblock"
},
{
"include-filter": "kselftest_kcmp_kcmp_test"
},
{
"include-filter": "kselftest_mm_mremap_dontunmap"
},
{
"include-filter": "kselftest_mm_mremap_test"
},
{
"include-filter": "kselftest_mm_uffd_unit_tests"
},
{
"include-filter": "kselftest_net_psock_tpacket"
},
{
"include-filter": "kselftest_net_reuseaddr_conflict"
},
{
"include-filter": "kselftest_net_socket"
},
{
"include-filter": "kselftest_ptrace_peeksiginfo"
},
{
"include-filter": "kselftest_rtc_rtctest"
},
{
"include-filter": "kselftest_seccomp_seccomp_bpf"
},
{
"include-filter": "kselftest_size_test_get_size"
},
{
"include-filter": "kselftest_timers_inconsistency_check"
},
{
"include-filter": "kselftest_timers_nanosleep"
},
{
"include-filter": "kselftest_timers_nsleep_lat"
},
{
"include-filter": "kselftest_timers_posix_timers"
},
{
"include-filter": "kselftest_timers_set_timer_lat"
},
{
"include-filter": "kselftest_timers_tests_raw_skew"
},
{
"include-filter": "kselftest_timers_threadtest"
},
{
"include-filter": "kselftest_timers_valid_adjtimex"
},
{
"include-filter": "kselftest_vdso_vdso_test_abi"
},
{
"include-filter": "kselftest_vdso_vdso_test_clock_getres"
},
{
"include-filter": "kselftest_vdso_vdso_test_getcpu"
},
{
"include-filter": "kselftest_vdso_vdso_test_gettimeofday"
},
{
"include-filter": "kselftest_x86_check_initial_reg_state"
},
{
"include-filter": "kselftest_x86_ldt_gdt"
},
{
"include-filter": "kselftest_x86_ptrace_syscall"
},
{
"include-filter": "kselftest_x86_single_step_syscall"
},
{
"include-filter": "kselftest_x86_syscall_nt"
},
{
"include-filter": "kselftest_x86_test_mremap_vdso"
}
]
},
{ {
"name": "vts_kernel_net_tests" "name": "vts_kernel_net_tests"
} }

View File

@ -1559,7 +1559,7 @@ void mmc_blk_cqe_recovery(struct mmc_queue *mq)
pr_debug("%s: CQE recovery start\n", mmc_hostname(host)); pr_debug("%s: CQE recovery start\n", mmc_hostname(host));
err = mmc_cqe_recovery(host); err = mmc_cqe_recovery(host);
if (err) if (err || host->cqe_recovery_reset_always)
mmc_blk_reset(mq->blkdata, host, MMC_BLK_CQE_RECOVERY); mmc_blk_reset(mq->blkdata, host, MMC_BLK_CQE_RECOVERY);
mmc_blk_reset_success(mq->blkdata, MMC_BLK_CQE_RECOVERY); mmc_blk_reset_success(mq->blkdata, MMC_BLK_CQE_RECOVERY);

View File

@ -921,6 +921,7 @@ void mmc_set_clock(struct mmc_host *host, unsigned int hz)
host->ios.clock = hz; host->ios.clock = hz;
mmc_set_ios(host); mmc_set_ios(host);
} }
EXPORT_SYMBOL_GPL(mmc_set_clock);
int mmc_execute_tuning(struct mmc_card *card) int mmc_execute_tuning(struct mmc_card *card)
{ {
@ -955,6 +956,7 @@ int mmc_execute_tuning(struct mmc_card *card)
return err; return err;
} }
EXPORT_SYMBOL_GPL(mmc_execute_tuning);
/* /*
* Change the bus mode (open drain/push-pull) of a host. * Change the bus mode (open drain/push-pull) of a host.
@ -964,6 +966,7 @@ void mmc_set_bus_mode(struct mmc_host *host, unsigned int mode)
host->ios.bus_mode = mode; host->ios.bus_mode = mode;
mmc_set_ios(host); mmc_set_ios(host);
} }
EXPORT_SYMBOL_GPL(mmc_set_bus_mode);
/* /*
* Change data bus width of a host. * Change data bus width of a host.
@ -973,6 +976,7 @@ void mmc_set_bus_width(struct mmc_host *host, unsigned int width)
host->ios.bus_width = width; host->ios.bus_width = width;
mmc_set_ios(host); mmc_set_ios(host);
} }
EXPORT_SYMBOL_GPL(mmc_set_bus_width);
/* /*
* Set initial state after a power cycle or a hw_reset. * Set initial state after a power cycle or a hw_reset.
@ -1006,6 +1010,7 @@ void mmc_set_initial_state(struct mmc_host *host)
mmc_crypto_set_initial_state(host); mmc_crypto_set_initial_state(host);
} }
EXPORT_SYMBOL_GPL(mmc_set_initial_state);
/** /**
* mmc_vdd_to_ocrbitnum - Convert a voltage to the OCR bit number * mmc_vdd_to_ocrbitnum - Convert a voltage to the OCR bit number
@ -1275,6 +1280,7 @@ void mmc_set_timing(struct mmc_host *host, unsigned int timing)
host->ios.timing = timing; host->ios.timing = timing;
mmc_set_ios(host); mmc_set_ios(host);
} }
EXPORT_SYMBOL_GPL(mmc_set_timing);
/* /*
* Select appropriate driver type for host. * Select appropriate driver type for host.

View File

@ -42,7 +42,7 @@ struct device_node *mmc_of_find_child_device(struct mmc_host *host,
void mmc_init_erase(struct mmc_card *card); void mmc_init_erase(struct mmc_card *card);
void mmc_set_chip_select(struct mmc_host *host, int mode); void mmc_set_chip_select(struct mmc_host *host, int mode);
void mmc_set_clock(struct mmc_host *host, unsigned int hz); extern void mmc_set_clock(struct mmc_host *host, unsigned int hz);
void mmc_set_bus_mode(struct mmc_host *host, unsigned int mode); void mmc_set_bus_mode(struct mmc_host *host, unsigned int mode);
void mmc_set_bus_width(struct mmc_host *host, unsigned int width); void mmc_set_bus_width(struct mmc_host *host, unsigned int width);
u32 mmc_select_voltage(struct mmc_host *host, u32 ocr); u32 mmc_select_voltage(struct mmc_host *host, u32 ocr);

View File

@ -166,6 +166,7 @@ void mmc_retune_hold(struct mmc_host *host)
host->retune_now = 1; host->retune_now = 1;
host->hold_retune += 1; host->hold_retune += 1;
} }
EXPORT_SYMBOL(mmc_retune_hold);
void mmc_retune_release(struct mmc_host *host) void mmc_retune_release(struct mmc_host *host)
{ {

View File

@ -982,7 +982,7 @@ static int mmc_select_powerclass(struct mmc_card *card)
/* /*
* Set the bus speed for the selected speed mode. * Set the bus speed for the selected speed mode.
*/ */
static void mmc_set_bus_speed(struct mmc_card *card) void mmc_set_bus_speed(struct mmc_card *card)
{ {
unsigned int max_dtr = (unsigned int)-1; unsigned int max_dtr = (unsigned int)-1;
@ -1002,7 +1002,7 @@ static void mmc_set_bus_speed(struct mmc_card *card)
* If the bus width is changed successfully, return the selected width value. * If the bus width is changed successfully, return the selected width value.
* Zero is returned instead of error value if the wide width is not supported. * Zero is returned instead of error value if the wide width is not supported.
*/ */
static int mmc_select_bus_width(struct mmc_card *card) int mmc_select_bus_width(struct mmc_card *card)
{ {
static unsigned ext_csd_bits[] = { static unsigned ext_csd_bits[] = {
EXT_CSD_BUS_WIDTH_8, EXT_CSD_BUS_WIDTH_8,
@ -1069,11 +1069,12 @@ static int mmc_select_bus_width(struct mmc_card *card)
return err; return err;
} }
EXPORT_SYMBOL_GPL(mmc_select_bus_width);
/* /*
* Switch to the high-speed mode * Switch to the high-speed mode
*/ */
static int mmc_select_hs(struct mmc_card *card) int mmc_select_hs(struct mmc_card *card)
{ {
int err; int err;
@ -1087,11 +1088,12 @@ static int mmc_select_hs(struct mmc_card *card)
return err; return err;
} }
EXPORT_SYMBOL_GPL(mmc_select_hs);
/* /*
* Activate wide bus and DDR if supported. * Activate wide bus and DDR if supported.
*/ */
static int mmc_select_hs_ddr(struct mmc_card *card) int mmc_select_hs_ddr(struct mmc_card *card)
{ {
struct mmc_host *host = card->host; struct mmc_host *host = card->host;
u32 bus_width, ext_csd_bits; u32 bus_width, ext_csd_bits;
@ -1160,8 +1162,9 @@ static int mmc_select_hs_ddr(struct mmc_card *card)
return err; return err;
} }
EXPORT_SYMBOL_GPL(mmc_select_hs_ddr);
static int mmc_select_hs400(struct mmc_card *card) int mmc_select_hs400(struct mmc_card *card)
{ {
struct mmc_host *host = card->host; struct mmc_host *host = card->host;
unsigned int max_dtr; unsigned int max_dtr;
@ -1255,6 +1258,7 @@ out_err:
__func__, err); __func__, err);
return err; return err;
} }
EXPORT_SYMBOL_GPL(mmc_select_hs400);
int mmc_hs200_to_hs400(struct mmc_card *card) int mmc_hs200_to_hs400(struct mmc_card *card)
{ {
@ -1535,7 +1539,7 @@ err:
/* /*
* Activate High Speed, HS200 or HS400ES mode if supported. * Activate High Speed, HS200 or HS400ES mode if supported.
*/ */
static int mmc_select_timing(struct mmc_card *card) int mmc_select_timing(struct mmc_card *card)
{ {
int err = 0; int err = 0;
@ -1570,12 +1574,13 @@ bus_speed:
mmc_set_bus_speed(card); mmc_set_bus_speed(card);
return 0; return 0;
} }
EXPORT_SYMBOL_GPL(mmc_select_timing);
/* /*
* Execute tuning sequence to seek the proper bus operating * Execute tuning sequence to seek the proper bus operating
* conditions for HS200 and HS400, which sends CMD21 to the device. * conditions for HS200 and HS400, which sends CMD21 to the device.
*/ */
static int mmc_hs200_tuning(struct mmc_card *card) int mmc_hs200_tuning(struct mmc_card *card)
{ {
struct mmc_host *host = card->host; struct mmc_host *host = card->host;
@ -1590,6 +1595,7 @@ static int mmc_hs200_tuning(struct mmc_card *card)
return mmc_execute_tuning(card); return mmc_execute_tuning(card);
} }
EXPORT_SYMBOL_GPL(mmc_hs200_tuning);
/* /*
* Handle the detection and initialisation of a card. * Handle the detection and initialisation of a card.

View File

@ -118,6 +118,7 @@ int mmc_select_card(struct mmc_card *card)
return _mmc_select_card(card->host, card); return _mmc_select_card(card->host, card);
} }
EXPORT_SYMBOL_GPL(mmc_select_card);
int mmc_deselect_cards(struct mmc_host *host) int mmc_deselect_cards(struct mmc_host *host)
{ {

View File

@ -69,6 +69,7 @@ enum mmc_issue_type mmc_issue_type(struct mmc_queue *mq, struct request *req)
return MMC_ISSUE_SYNC; return MMC_ISSUE_SYNC;
} }
EXPORT_SYMBOL_GPL(mmc_issue_type);
static void __mmc_cqe_recovery_notifier(struct mmc_queue *mq) static void __mmc_cqe_recovery_notifier(struct mmc_queue *mq)
{ {

View File

@ -16,6 +16,8 @@
#include <linux/mmc/sdio_func.h> #include <linux/mmc/sdio_func.h>
#include <linux/mmc/sdio_ids.h> #include <linux/mmc/sdio_ids.h>
#include <trace/hooks/mmc.h>
#include "core.h" #include "core.h"
#include "card.h" #include "card.h"
#include "host.h" #include "host.h"
@ -1116,6 +1118,8 @@ out:
mmc_release_host(host); mmc_release_host(host);
host->pm_flags &= ~MMC_PM_KEEP_POWER; host->pm_flags &= ~MMC_PM_KEEP_POWER;
trace_android_vh_mmc_sdio_pm_flag_set(host);
return err; return err;
} }

View File

@ -2631,6 +2631,9 @@ static int sdhci_msm_probe(struct platform_device *pdev)
/* Set the timeout value to max possible */ /* Set the timeout value to max possible */
host->max_timeout_count = 0xF; host->max_timeout_count = 0xF;
/* Enable force hw reset during cqe recovery */
msm_host->mmc->cqe_recovery_reset_always = true;
pm_runtime_get_noresume(&pdev->dev); pm_runtime_get_noresume(&pdev->dev);
pm_runtime_set_active(&pdev->dev); pm_runtime_set_active(&pdev->dev);
pm_runtime_enable(&pdev->dev); pm_runtime_enable(&pdev->dev);

View File

@ -552,6 +552,7 @@ static int mtd_nvmem_add(struct mtd_info *mtd)
config.dev = &mtd->dev; config.dev = &mtd->dev;
config.name = dev_name(&mtd->dev); config.name = dev_name(&mtd->dev);
config.owner = THIS_MODULE; config.owner = THIS_MODULE;
config.add_legacy_fixed_of_cells = of_device_is_compatible(node, "nvmem-cells");
config.reg_read = mtd_nvmem_reg_read; config.reg_read = mtd_nvmem_reg_read;
config.size = mtd->size; config.size = mtd->size;
config.word_size = 1; config.word_size = 1;
@ -898,6 +899,7 @@ static struct nvmem_device *mtd_otp_nvmem_register(struct mtd_info *mtd,
config.name = compatible; config.name = compatible;
config.id = NVMEM_DEVID_AUTO; config.id = NVMEM_DEVID_AUTO;
config.owner = THIS_MODULE; config.owner = THIS_MODULE;
config.add_legacy_fixed_of_cells = !mtd_type_is_nand(mtd);
config.type = NVMEM_TYPE_OTP; config.type = NVMEM_TYPE_OTP;
config.root_only = true; config.root_only = true;
config.ignore_wp = true; config.ignore_wp = true;

View File

@ -2456,5 +2456,6 @@ static void __exit ns_cleanup_module(void)
module_exit(ns_cleanup_module); module_exit(ns_cleanup_module);
MODULE_LICENSE ("GPL"); MODULE_LICENSE ("GPL");
MODULE_IMPORT_NS(VFS_internal_I_am_really_a_filesystem_and_am_NOT_a_driver);
MODULE_AUTHOR ("Artem B. Bityuckiy"); MODULE_AUTHOR ("Artem B. Bityuckiy");
MODULE_DESCRIPTION ("The NAND flash simulator"); MODULE_DESCRIPTION ("The NAND flash simulator");

View File

@ -1512,3 +1512,4 @@ MODULE_VERSION(__stringify(UBI_VERSION));
MODULE_DESCRIPTION("UBI - Unsorted Block Images"); MODULE_DESCRIPTION("UBI - Unsorted Block Images");
MODULE_AUTHOR("Artem Bityutskiy"); MODULE_AUTHOR("Artem Bityutskiy");
MODULE_LICENSE("GPL"); MODULE_LICENSE("GPL");
MODULE_IMPORT_NS(VFS_internal_I_am_really_a_filesystem_and_am_NOT_a_driver);

View File

@ -35,6 +35,191 @@
} }
] ]
}, },
{
"name": "selftests",
"options": [
{
"include-filter": "kselftest_binderfs_binderfs_test"
},
{
"include-filter": "kselftest_breakpoints_breakpoint_test"
},
{
"include-filter": "kselftest_capabilities_test_execve"
},
{
"include-filter": "kselftest_futex_requeue"
},
{
"include-filter": "kselftest_futex_requeue_pi"
},
{
"include-filter": "kselftest_futex_requeue_pi_500k"
},
{
"include-filter": "kselftest_futex_requeue_pi_5k"
},
{
"include-filter": "kselftest_futex_requeue_pi_b"
},
{
"include-filter": "kselftest_futex_requeue_pi_b_500k"
},
{
"include-filter": "kselftest_futex_requeue_pi_b_5k"
},
{
"include-filter": "kselftest_futex_requeue_pi_bl"
},
{
"include-filter": "kselftest_futex_requeue_pi_bl_2G"
},
{
"include-filter": "kselftest_futex_requeue_pi_bl_500k"
},
{
"include-filter": "kselftest_futex_requeue_pi_bl_5k"
},
{
"include-filter": "kselftest_futex_requeue_pi_bo"
},
{
"include-filter": "kselftest_futex_requeue_pi_bo_500k"
},
{
"include-filter": "kselftest_futex_requeue_pi_bo_5k"
},
{
"include-filter": "kselftest_futex_requeue_pi_l"
},
{
"include-filter": "kselftest_futex_requeue_pi_l_2G"
},
{
"include-filter": "kselftest_futex_requeue_pi_l_500k"
},
{
"include-filter": "kselftest_futex_requeue_pi_l_5k"
},
{
"include-filter": "kselftest_futex_requeue_pi_mismatched_ops"
},
{
"include-filter": "kselftest_futex_requeue_pi_o"
},
{
"include-filter": "kselftest_futex_requeue_pi_o_500k"
},
{
"include-filter": "kselftest_futex_requeue_pi_o_5k"
},
{
"include-filter": "kselftest_futex_requeue_pi_signal_restart"
},
{
"include-filter": "kselftest_futex_wait"
},
{
"include-filter": "kselftest_futex_wait_private_mapped_file"
},
{
"include-filter": "kselftest_futex_wait_timeout"
},
{
"include-filter": "kselftest_futex_wait_uninitialized_heap"
},
{
"include-filter": "kselftest_futex_wait_wouldblock"
},
{
"include-filter": "kselftest_kcmp_kcmp_test"
},
{
"include-filter": "kselftest_mm_mremap_dontunmap"
},
{
"include-filter": "kselftest_mm_mremap_test"
},
{
"include-filter": "kselftest_mm_uffd_unit_tests"
},
{
"include-filter": "kselftest_net_psock_tpacket"
},
{
"include-filter": "kselftest_net_reuseaddr_conflict"
},
{
"include-filter": "kselftest_net_socket"
},
{
"include-filter": "kselftest_ptrace_peeksiginfo"
},
{
"include-filter": "kselftest_rtc_rtctest"
},
{
"include-filter": "kselftest_seccomp_seccomp_bpf"
},
{
"include-filter": "kselftest_size_test_get_size"
},
{
"include-filter": "kselftest_timers_inconsistency_check"
},
{
"include-filter": "kselftest_timers_nanosleep"
},
{
"include-filter": "kselftest_timers_nsleep_lat"
},
{
"include-filter": "kselftest_timers_posix_timers"
},
{
"include-filter": "kselftest_timers_set_timer_lat"
},
{
"include-filter": "kselftest_timers_tests_raw_skew"
},
{
"include-filter": "kselftest_timers_threadtest"
},
{
"include-filter": "kselftest_timers_valid_adjtimex"
},
{
"include-filter": "kselftest_vdso_vdso_test_abi"
},
{
"include-filter": "kselftest_vdso_vdso_test_clock_getres"
},
{
"include-filter": "kselftest_vdso_vdso_test_getcpu"
},
{
"include-filter": "kselftest_vdso_vdso_test_gettimeofday"
},
{
"include-filter": "kselftest_x86_check_initial_reg_state"
},
{
"include-filter": "kselftest_x86_ldt_gdt"
},
{
"include-filter": "kselftest_x86_ptrace_syscall"
},
{
"include-filter": "kselftest_x86_single_step_syscall"
},
{
"include-filter": "kselftest_x86_syscall_nt"
},
{
"include-filter": "kselftest_x86_test_mremap_vdso"
}
]
},
{ {
"name": "vts_kernel_net_tests" "name": "vts_kernel_net_tests"
} }

View File

@ -1709,3 +1709,4 @@ module_init(nvmet_init);
module_exit(nvmet_exit); module_exit(nvmet_exit);
MODULE_LICENSE("GPL v2"); MODULE_LICENSE("GPL v2");
MODULE_IMPORT_NS(VFS_internal_I_am_really_a_filesystem_and_am_NOT_a_driver);

View File

@ -36,6 +36,7 @@ static int apple_efuses_probe(struct platform_device *pdev)
struct resource *res; struct resource *res;
struct nvmem_config config = { struct nvmem_config config = {
.dev = &pdev->dev, .dev = &pdev->dev,
.add_legacy_fixed_of_cells = true,
.read_only = true, .read_only = true,
.reg_read = apple_efuses_read, .reg_read = apple_efuses_read,
.stride = sizeof(u32), .stride = sizeof(u32),

View File

@ -1003,9 +1003,11 @@ struct nvmem_device *nvmem_register(const struct nvmem_config *config)
if (rval) if (rval)
goto err_remove_cells; goto err_remove_cells;
rval = nvmem_add_cells_from_legacy_of(nvmem); if (config->add_legacy_fixed_of_cells) {
if (rval) rval = nvmem_add_cells_from_legacy_of(nvmem);
goto err_remove_cells; if (rval)
goto err_remove_cells;
}
rval = nvmem_add_cells_from_fixed_layout(nvmem); rval = nvmem_add_cells_from_fixed_layout(nvmem);
if (rval) if (rval)

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