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

View File

@ -69,14 +69,17 @@ properties:
- const: tx
- const: tx_reply
- const: rx
- const: rx_reply
minItems: 2
mboxes:
description:
List of phandle and mailbox channel specifiers. It should contain
exactly one, two or three mailboxes; the first one or two for transmitting
messages ("tx") and another optional ("rx") for receiving notifications
and delayed responses, if supported by the platform.
exactly one, two, three or four mailboxes; the first one or two for
transmitting messages ("tx") and another optional ("rx") for receiving
notifications and delayed responses, if supported by the platform.
The optional ("rx_reply") is for notifications completion interrupt,
if supported by the platform.
The number of mailboxes needed for transmitting messages depends on the
type of channels exposed by the specific underlying mailbox controller;
one single channel descriptor is enough if such channel is bidirectional,
@ -89,9 +92,10 @@ properties:
2 mbox / 2 shmem => SCMI TX and RX over 2 mailbox bidirectional channels
2 mbox / 1 shmem => SCMI TX over 2 mailbox unidirectional channels
3 mbox / 2 shmem => SCMI TX and RX over 3 mailbox unidirectional channels
4 mbox / 2 shmem => SCMI TX and RX over 4 mailbox unidirectional channels
Any other combination of mboxes and shmem is invalid.
minItems: 1
maxItems: 3
maxItems: 4
shmem:
description:
@ -237,6 +241,37 @@ properties:
reg:
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
$defs:
@ -390,6 +425,25 @@ examples:
scmi_powercap: protocol@18 {
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
building C files and assembler files.
KCPPFLAGS_COMPAT
----------------
Additional options to pass to $(CC_COMPAT) when preprocessing C and assembler
files.
KAFLAGS
-------
Additional options to the assembler (for built-in and modules).

View File

@ -85,6 +85,17 @@ is already free).
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);

View File

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

File diff suppressed because it is too large Load Diff

View File

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

View File

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

View File

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

View File

@ -1,19 +1,43 @@
[abi_symbol_list]
blkcg_activate_policy
blkcg_deactivate_policy
blkcg_root
blkdev_get_by_path
blkdev_issue_flush
blk_mq_sched_mark_restart_hctx
blk_mq_sched_try_insert_merge
blk_mq_sched_try_merge
blk_queue_rq_timeout
blk_req_needs_zone_write_lock
__blk_req_zone_write_lock
__blk_req_zone_write_unlock
caches_clean_inval_pou
cleancache_register_ops
copy_page
_dev_alert
__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_write_and_wait_range
generic_perform_write
getboottime64
get_options
__get_task_ioprio
gpiochip_find
gs_alloc_req
gserial_free_line
gserial_resume
gserial_suspend
gs_free_req
kick_all_cpus_sync
netlink_ack
param_get_uint
param_set_uint
proc_set_size
@ -36,21 +60,22 @@
__traceiter_android_rvh_do_sp_pc_abort
__traceiter_android_rvh_panic_unhandled
__traceiter_android_rvh_report_bug
__traceiter_android_vh_cache_show
__traceiter_android_vh_exit_mm
__traceiter_android_vh_is_fpsimd_save
__traceiter_android_vh_logbuf
__traceiter_android_vh_logbuf_pr_cont
__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_ptype_head
__traceiter_android_vh_show_mem
__traceiter_android_vh_show_smap
__traceiter_android_vh_smaps_pte_entry
__traceiter_android_vh_try_to_freeze_todo
__traceiter_android_vh_try_to_freeze_todo_unfrozen
__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_workqueue_execute_start
__tracepoint_android_rvh_arm64_serror_panic
@ -62,21 +87,22 @@
__tracepoint_android_rvh_do_sp_pc_abort
__tracepoint_android_rvh_panic_unhandled
__tracepoint_android_rvh_report_bug
__tracepoint_android_vh_cache_show
__tracepoint_android_vh_exit_mm
__tracepoint_android_vh_is_fpsimd_save
__tracepoint_android_vh_logbuf
__tracepoint_android_vh_logbuf_pr_cont
__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_ptype_head
__tracepoint_android_vh_show_mem
__tracepoint_android_vh_show_smap
__tracepoint_android_vh_smaps_pte_entry
__tracepoint_android_vh_try_to_freeze_todo
__tracepoint_android_vh_try_to_freeze_todo_unfrozen
__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_workqueue_execute_start
usb_set_device_state

View File

@ -32,6 +32,7 @@
proc_create_net_single_write
snmp_fold_field
call_usermodehelper
pm_wakeup_irq
nla_append
skb_append
sysctl_max_skb_frags
@ -45,6 +46,10 @@
drop_super
mm_trace_rss_stat
__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
__traceiter_android_vh_shrink_slab_bypass
__tracepoint_android_vh_do_shrink_slab

View File

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

View File

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

View File

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

File diff suppressed because it is too large Load Diff

View File

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

View File

@ -262,6 +262,12 @@
__traceiter_android_rvh_ctl_dirty_rate
__tracepoint_android_rvh_ctl_dirty_rate
# required by kprobe_dmverity_debug.ko
dm_bio_from_per_bio_data
dm_bufio_read
dm_disk
dm_table_get_md
# required by ledtrig-pattern.ko
led_get_default_pattern
led_set_brightness
@ -664,7 +670,6 @@
of_clk_get_parent_count
of_devfreq_cooling_register_power
of_dma_is_coherent
of_machine_is_compatible
of_property_read_variable_u64_array
of_property_read_variable_u8_array
param_array_ops

View File

@ -54,11 +54,14 @@
__traceiter_android_vh_do_swap_page
__traceiter_android_vh_do_wp_page
__traceiter_android_vh_dup_task_struct
__traceiter_android_vh_filemap_update_page
__traceiter_android_vh_free_task
__traceiter_android_vh_fuse_request_end
__traceiter_android_vh_irqtime_account_process_tick
__traceiter_android_vh_look_around
__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_mutex_init
__traceiter_android_vh_mutex_unlock_slowpath
@ -141,11 +144,14 @@
__tracepoint_android_vh_do_swap_page
__tracepoint_android_vh_do_wp_page
__tracepoint_android_vh_dup_task_struct
__tracepoint_android_vh_filemap_update_page
__tracepoint_android_vh_free_task
__tracepoint_android_vh_fuse_request_end
__tracepoint_android_vh_irqtime_account_process_tick
__tracepoint_android_vh_look_around
__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_mutex_init
__tracepoint_android_vh_mutex_unlock_slowpath

View File

@ -129,85 +129,138 @@
#required by cifs.ko
add_swap_extent
asn1_ber_decoder
bit_wait
clear_nlink
copy_page_from_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
dentry_path_raw
d_drop
d_move
d_hash_and_lookup
d_alloc_parallel
d_invalidate
dup_iter
end_page_writeback
errseq_check
extract_iter_to_sg
fc_mount
file_modified
fs_param_is_bool
fs_param_is_u32
fs_param_is_u64
fs_param_is_string
file_write_and_wait_range
filemap_dirty_folio
filemap_fault
filemap_get_folios_tag
filemap_map_pages
filemap_migrate_folio
finish_no_open
finish_open
filemap_map_pages
folio_wait_private_2
flush_dcache_folio
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
generic_permission
generic_file_write_iter
generic_setlease
generic_copy_file_range
generic_file_write_iter
generic_key_instantiate
iov_iter_discard
iov_iter_bvec
iov_iter_get_pages_alloc2
generic_permission
generic_setlease
iget_failed
in_group_p
invalidate_inode_pages2
iov_iter_advance
iov_iter_bvec
iov_iter_discard
iov_iter_get_pages_alloc2
iov_iter_npages
kfree_link
key_type_logon
iov_iter_xarray
iterate_supers_type
iunique
key_invalidate
key_revoke
key_type_logon
key_validate
kfree_link
kill_anon_super
kvfree_sensitive
lock_two_nondirectories
lookup_positive_unlocked
locks_lock_inode_wait
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
overflowgid
override_creds
posix_lock_file
posix_test_lock
prepare_kernel_cred
put_fs_context
readahead_expand
redirty_page_for_writepage
register_key_type
request_key_tag
revert_creds
register_key_type
sget
set_anon_super
super_setup_bdi
seq_escape_mem
setattr_copy
sock_sendmsg
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
truncate_inode_pages_range
tcp_sock_set_nodelay
super_setup_bdi
swapcache_mapping
tcp_sock_set_cork
tcp_sock_set_nodelay
timestamp_truncate
touch_atime
truncate_inode_pages_range
truncate_pagecache_range
unlock_two_nondirectories
utf8s_to_utf16s
utf8_to_utf32
unregister_key_type
user_describe
user_revoke
user_destroy
user_read
vfs_setpos
user_revoke
utf8_to_utf32
utf8s_to_utf16s
vfs_parse_fs_string
vfs_setpos
wait_on_page_writeback
__generic_file_write_iter
__folio_lock_killable
xa_extract
xa_set_mark
xas_find
xas_find_marked
xas_pause
__break_lease
__d_lookup_unhash_wake
__filemap_get_folio
__folio_lock_killable
__folio_start_writeback
__fs_parse
__generic_file_write_iter
__module_put_and_kthread_exit
__page_file_index
# required by tls.ko
tcp_rate_check_app_limited
@ -281,3 +334,16 @@
set_capacity
blk_queue_flag_clear
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_LOCALVERSION="-4k"
CONFIG_AUDIT=y
CONFIG_NO_HZ=y
CONFIG_HIGH_RES_TIMERS=y
@ -47,7 +48,6 @@ CONFIG_EXPERT=y
CONFIG_KALLSYMS_ALL=y
# CONFIG_RSEQ is not set
CONFIG_PROFILING=y
CONFIG_KEXEC_FILE=y
CONFIG_ARCH_SUNXI=y
CONFIG_ARCH_HISI=y
CONFIG_ARCH_QCOM=y
@ -104,6 +104,7 @@ CONFIG_BLK_DEV_ZONED=y
CONFIG_BLK_DEV_THROTTLING=y
CONFIG_BLK_WBT=y
# CONFIG_BLK_WBT_MQ is not set
CONFIG_BLK_CGROUP_IOCOST=y
CONFIG_BLK_CGROUP_IOPRIO=y
CONFIG_BLK_INLINE_ENCRYPTION=y
CONFIG_BLK_INLINE_ENCRYPTION_FALLBACK=y
@ -597,6 +598,9 @@ CONFIG_IIO_TRIGGER=y
CONFIG_PWM=y
CONFIG_POWERCAP=y
CONFIG_IDLE_INJECT=y
CONFIG_DTPM=y
CONFIG_DTPM_CPU=y
CONFIG_DTPM_DEVFREQ=y
CONFIG_ANDROID_BINDER_IPC=y
CONFIG_ANDROID_BINDERFS=y
CONFIG_ANDROID_DEBUG_SYMBOLS=y

View File

@ -394,31 +394,6 @@ int gzvm_vm_ioctl_arch_enable_cap(struct gzvm *gzvm,
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,
u64 nr_pages)
{

View File

@ -129,4 +129,19 @@ HYP_EVENT(psci_mem_protect,
),
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

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) \
)
#define PVM_ID_AA64PFR2_ALLOW (0ULL)
/*
* Allow for protected VMs:
* - Mixed-endian
@ -135,6 +137,7 @@ void pkvm_host_reclaim_page(struct kvm *host_kvm, phys_addr_t ipa);
* - Privileged Access Never
* - SError interrupt exceptions from speculative reads
* - Enhanced Translation Synchronization
* - Control for cache maintenance permission
*/
#define PVM_ID_AA64MMFR1_ALLOW (\
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_PAN) | \
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) \
)
#define PVM_ID_AA64MMFR3_ALLOW (0ULL)
/*
* 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) \
)
/* 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 (\
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_FCMA) | \
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 (\
ARM64_FEATURE_MASK(ID_AA64ISAR2_EL1_ATS1A) | \
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.
*/

View File

@ -169,7 +169,7 @@ struct pkvm_module_ops {
void (*update_hcr_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 (*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 (*register_host_smc_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); \
})
#define pkvm_register_el2_mod_call(hfn, token) \
({ \
__pkvm_register_el2_call(pkvm_el2_mod_va(hfn, token)); \
})
static inline int pkvm_register_el2_mod_call(dyn_hcall_t hfn,
unsigned long token)
{
return __pkvm_register_el2_call(pkvm_el2_mod_va(hfn, token));
}
#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)
{
if (!system_supports_mte())
if (!kasan_hw_tags_enabled())
return;
mte_check_tfsr_el1();
@ -190,7 +190,7 @@ static inline void mte_check_tfsr_entry(void)
static inline void mte_check_tfsr_exit(void)
{
if (!system_supports_mte())
if (!kasan_hw_tags_enabled())
return;
/*

View File

@ -20,6 +20,8 @@
#include <linux/ratelimit.h>
#include <linux/syscalls.h>
#include <trace/hooks/dtask.h>
#include <asm/daifflags.h>
#include <asm/debug-monitors.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)
{
int thread_lazy_flag = 0;
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 */
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 += --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
# 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);
write_sysreg(vcpu->arch.mdcr_el2, mdcr_el2);
}
if (cpus_have_final_cap(ARM64_HAS_HCX)) {
u64 hcrx = HCRX_GUEST_FLAGS;
if (vcpu_has_nv(vcpu) && !is_hyp_ctxt(vcpu)) {
u64 clr = 0, set = 0;
static inline void __activate_traps_hcrx(struct kvm_vcpu *vcpu)
{
u64 hcrx = HCRX_GUEST_FLAGS;
compute_clr_set(vcpu, HCRX_EL2, clr, set);
if (!cpus_have_final_cap(ARM64_HAS_HCX))
return;
hcrx |= set;
hcrx &= ~clr;
}
if (vcpu_has_nv(vcpu) && !is_hyp_ctxt(vcpu)) {
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)
@ -254,8 +257,6 @@ static inline void __deactivate_traps_common(struct kvm_vcpu *vcpu)
if (cpus_have_final_cap(ARM64_HAS_HCX))
write_sysreg_s(HCRX_HOST_FLAGS, SYS_HCRX_EL2);
__deactivate_traps_hfgxtr(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 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_dec(u64 n);

View File

@ -6,6 +6,7 @@
*/
#include <asm/kvm_hyp.h>
#include <asm/kvm_hypevents.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 *
handle_to_domain(pkvm_handle_t domain_id)
__handle_to_domain(pkvm_handle_t domain_id, bool alloc)
{
int idx;
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;
domains = (struct kvm_hyp_iommu_domain *)READ_ONCE(kvm_hyp_iommu_domains[idx]);
if (!domains) {
if (domain_id == KVM_IOMMU_DOMAIN_IDMAP_ID)
domains = kvm_iommu_donate_pages_atomic(0);
else
domains = kvm_iommu_donate_page();
if (!alloc)
return NULL;
domains = kvm_iommu_donate_page();
if (!domains)
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,
(void *)domains) != 0)) {
if (domain_id == KVM_IOMMU_DOMAIN_IDMAP_ID)
kvm_iommu_reclaim_pages_atomic(domains, 0);
else
kvm_iommu_reclaim_page(domains);
kvm_iommu_reclaim_page(domains);
return NULL;
}
}
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)
{
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)
return ret;
ret = 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));
return refill_hyp_pool(&iommu_atomic_pool, 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))
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,
1 << get_order(KVM_IOMMU_DOMAINS_ROOT_SIZE));
if (ret)
@ -559,7 +550,11 @@ int kvm_iommu_init(struct kvm_iommu_ops *ops, struct kvm_hyp_memcache *atomic_mc
smp_wmb();
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)
@ -586,9 +581,9 @@ void kvm_iommu_host_stage2_idmap(phys_addr_t start, phys_addr_t end,
if (!kvm_iommu_is_ready())
return;
domain = handle_to_domain(KVM_IOMMU_DOMAIN_IDMAP_ID);
if (!domain)
return;
trace_iommu_idmap(start, end, prot);
domain = __handle_to_domain(KVM_IOMMU_DOMAIN_IDMAP_ID, false);
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,
enum pkvm_page_state nopage_state)
enum pkvm_page_state nopage_state, bool update_iommu)
{
kvm_pte_t annotation;
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,
addr, size, &host_s2_pool, annotation);
}
if (ret || !is_memory)
if (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 */
if (owner_id == PKVM_ID_HOST)
__host_update_page_state(addr, size, PKVM_PAGE_OWNED);
else
__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;
}
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)
@ -2183,7 +2188,8 @@ int __pkvm_hyp_donate_host(u64 pfn, u64 nr_pages)
KVM_PGTABLE_PROT_PXN | \
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 end = addr + nr_pages * PAGE_SIZE;
@ -2237,10 +2243,10 @@ update:
if (!prot) {
ret = __host_stage2_set_owner_locked(addr, nr_pages << PAGE_SHIFT,
PKVM_ID_PROTECTED, !!reg,
PKVM_MODULE_OWNED_PAGE);
PKVM_MODULE_OWNED_PAGE, update_iommu);
} else {
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)
@ -2378,7 +2384,7 @@ static int __pkvm_host_use_dma_page(phys_addr_t phys_addr)
return 0;
if (state != PKVM_PAGE_OWNED)
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);
}

View File

@ -201,6 +201,10 @@ static void pvm_init_traps_aa64dfr0(struct kvm_vcpu *vcpu)
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_clear;
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))
set_bit(KVM_ARM_VCPU_SVE, allowed_features);
if (FIELD_GET(ARM64_FEATURE_MASK(ID_AA64ISAR1_EL1_API), PVM_ID_AA64ISAR1_ALLOW) &&
FIELD_GET(ARM64_FEATURE_MASK(ID_AA64ISAR1_EL1_APA), 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_RESTRICT_UNSIGNED))
set_bit(KVM_ARM_VCPU_PTRAUTH_ADDRESS, allowed_features);
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 __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)
{
u64 val;
@ -44,6 +90,13 @@ static void __activate_traps(struct kvm_vcpu *vcpu)
___activate_traps(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 |= CPTR_EL2_TAM; /* Same bit irrespective of E2H */
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);
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);
kvm_reset_cptr_el2(vcpu);

View File

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

View File

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

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"
}

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"
}

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"
}

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"
}

View File

@ -48,6 +48,183 @@
"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

@ -1162,10 +1162,11 @@ static inline bool blk_mq_complete_need_ipi(struct request *rq)
if (force_irqthreads())
return false;
/* same CPU or cache domain? Complete locally */
/* same CPU or cache domain and capacity? Complete locally */
if (cpu == rq->mq_ctx->cpu ||
(!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;
/* 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
* the max zone append limit is set.
*/
if (!zone_sectors || !is_power_of_2(zone_sectors)) {
pr_warn("%s: Invalid non power of two zone size (%llu)\n",
disk->disk_name, zone_sectors);
if (!zone_sectors) {
pr_warn("%s: Invalid zone size\n", disk->disk_name);
return -ENODEV;
}

View File

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

View File

@ -40,6 +40,183 @@
"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

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

View File

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

View File

@ -45,7 +45,9 @@
#include <trace/hooks/psci.h>
#include <trace/hooks/timer.h>
#include <trace/hooks/fpsimd.h>
#include <trace/hooks/preemptirq.h>
#include <trace/hooks/mm.h>
#include <trace/hooks/fs.h>
#include <trace/hooks/dtask.h>
#include <trace/hooks/ftrace_dump.h>
#include <trace/hooks/traps.h>
@ -68,6 +70,7 @@
#include <trace/hooks/sd.h>
#include <trace/hooks/user.h>
#include <trace/hooks/fuse.h>
#include <trace/hooks/psi.h>
/*
* 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_vh_gic_set_affinity);
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_nanosleep_syscall);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_rproc_recovery);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_rproc_recovery_set);
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_slab_folio_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_oom_swapmem_gather_init);
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_free_user);
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_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_add_page_to_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_page_should_be_protected);
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"
}

View File

@ -32,6 +32,191 @@
"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": [

View File

@ -1003,6 +1003,7 @@ unsigned int pm_wakeup_irq(void)
{
return wakeup_irq[0];
}
EXPORT_SYMBOL_GPL(pm_wakeup_irq);
/**
* 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 &&
(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) {
ret_bus = kmemdup(bus, sizeof(*bus), GFP_KERNEL);

View File

@ -7,6 +7,191 @@
"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"
}

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"
}

View File

@ -32,6 +32,191 @@
"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": [

View File

@ -32,6 +32,191 @@
"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": [

View File

@ -25,6 +25,7 @@
MODULE_AUTHOR("Tom Lendacky <thomas.lendacky@amd.com>");
MODULE_AUTHOR("Gary R Hook <gary.hook@amd.com>");
MODULE_LICENSE("GPL");
MODULE_IMPORT_NS(VFS_internal_I_am_really_a_filesystem_and_am_NOT_a_driver);
MODULE_VERSION("1.1.0");
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"
}

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_TRANSPORT_VIRTIO) += virtio.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)
obj-$(CONFIG_ARM_SCMI_PROTOCOL) += scmi-core.o

View File

@ -13,6 +13,9 @@
#include "common.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_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->minor_ver = PROTOCOL_REV_MINOR(version);
ph->set_priv(ph, rev);
ph->set_priv(ph, rev, version);
ret = scmi_base_attributes_get(ph);
if (ret)
@ -423,6 +426,7 @@ static const struct scmi_protocol scmi_base = {
.instance_init = &scmi_base_protocol_init,
.ops = NULL,
.events = &base_protocol_events,
.supported_version = SCMI_PROTOCOL_SUPPORTED_VERSION,
};
DEFINE_SCMI_PROTOCOL_REGISTER_UNREGISTER(base, scmi_base)

View File

@ -12,6 +12,9 @@
#include "protocols.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 {
CLOCK_ATTRIBUTES = 0x3,
CLOCK_DESCRIBE_RATES = 0x4,
@ -25,8 +28,13 @@ enum scmi_clock_protocol_cmd {
CLOCK_POSSIBLE_PARENTS_GET = 0xC,
CLOCK_PARENT_SET = 0xD,
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 {
CLK_STATE_DISABLE,
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_EXTENDED_NAMES(x) ((x) & BIT(29))
#define SUPPORTS_PARENT_CLOCK(x) ((x) & BIT(28))
#define SUPPORTS_GET_PERMISSIONS(x) ((x) & BIT(1))
u8 name[SCMI_SHORT_NAME_MAX_SIZE];
__le32 clock_enable_latency;
};
@ -164,6 +173,15 @@ static enum scmi_clock_protocol_cmd evt_2_cmd[] = {
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
scmi_clock_protocol_attributes_get(const struct scmi_protocol_handle *ph,
struct clock_info *ci)
@ -281,6 +299,35 @@ static int scmi_clock_possible_parents(const struct scmi_protocol_handle *ph, u3
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,
u32 clk_id, struct scmi_clock_info *clk,
u32 version)
@ -327,6 +374,8 @@ static int scmi_clock_attributes_get(const struct scmi_protocol_handle *ph,
clk->rate_change_requested_notifications = true;
if (SUPPORTS_PARENT_CLOCK(attributes))
scmi_clock_possible_parents(ph, clk_id, clk);
if (SUPPORTS_GET_PERMISSIONS(attributes))
scmi_clock_get_permissions(ph, clk_id, clk);
}
return ret;
@ -499,6 +548,14 @@ static int scmi_clock_rate_set(const struct scmi_protocol_handle *ph,
struct scmi_xfer *t;
struct scmi_clock_set_rate *cfg;
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);
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 scmi_clock_info *clk;
if (clk_id >= ci->num_clocks)
return -EINVAL;
clk = ci->clk + clk_id;
clk = scmi_clock_domain_lookup(ci, clk_id);
if (IS_ERR(clk))
return PTR_ERR(clk);
if (parent_id >= clk->num_parents)
return -EINVAL;
if (clk->parent_ctrl_forbidden)
return -EACCES;
ret = ph->xops->xfer_get_init(ph, CLOCK_PARENT_SET,
sizeof(*cfg), 0, &t);
if (ret)
@ -668,6 +727,14 @@ static int scmi_clock_enable(const struct scmi_protocol_handle *ph, u32 clk_id,
bool atomic)
{
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,
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)
{
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,
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 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;
clk = ci->clk + clk_id;
if (!clk->name[0])
return NULL;
@ -961,7 +1036,7 @@ static int scmi_clock_protocol_init(const struct scmi_protocol_handle *ph)
}
cinfo->version = version;
return ph->set_priv(ph, cinfo);
return ph->set_priv(ph, cinfo, version);
}
static const struct scmi_protocol scmi_clock = {
@ -970,6 +1045,7 @@ static const struct scmi_protocol scmi_clock = {
.instance_init = &scmi_clock_protocol_init,
.ops = &clk_proto_ops,
.events = &clk_protocol_events,
.supported_version = SCMI_PROTOCOL_SUPPORTED_VERSION,
};
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,
struct scmi_xfer *xfer);
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 */
struct scmi_msg_payld;

View File

@ -85,6 +85,7 @@ struct scmi_xfers_info {
* @gid: A reference for per-protocol devres management.
* @users: A refcount to track effective users of this protocol.
* @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
* initialization code to identify this instance.
*
@ -97,6 +98,7 @@ struct scmi_protocol_instance {
void *gid;
refcount_t users;
void *priv;
unsigned int version;
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.
* @priv: The private data to set.
* @version: The detected protocol version for the core to register.
*
* Return: 0 on Success
*/
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);
pi->priv = priv;
pi->version = version;
return 0;
}
@ -1477,6 +1481,20 @@ out:
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
* @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 = {
.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_run = scmi_iterator_run,
.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);
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;
clean:
@ -3026,6 +3051,7 @@ static int __init scmi_driver_init(void)
scmi_voltage_register();
scmi_system_register();
scmi_powercap_register();
scmi_pinctrl_register();
return platform_driver_register(&scmi_driver);
}
@ -3043,6 +3069,7 @@ static void __exit scmi_driver_exit(void)
scmi_voltage_unregister();
scmi_system_unregister();
scmi_powercap_unregister();
scmi_pinctrl_unregister();
scmi_transports_exit();

View File

@ -21,6 +21,7 @@
* @cl: Mailbox Client
* @chan: Transmit/Receive mailbox uni/bi-directional channel
* @chan_receiver: Optional Receiver mailbox unidirectional channel
* @chan_platform_receiver: Optional Platform Receiver mailbox unidirectional channel
* @cinfo: SCMI channel info
* @shmem: Transmit/Receive shared memory area
*/
@ -28,6 +29,7 @@ struct scmi_mailbox {
struct mbox_client cl;
struct mbox_chan *chan;
struct mbox_chan *chan_receiver;
struct mbox_chan *chan_platform_receiver;
struct scmi_chan_info *cinfo;
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.
* @p2a_chan: A reference to the optional p2a channel.
* 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
* '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
*/
static int mailbox_chan_validate(struct device *cdev,
int *a2p_rx_chan, int *p2a_chan)
static int mailbox_chan_validate(struct device *cdev, int *a2p_rx_chan,
int *p2a_chan, int *p2a_rx_chan)
{
int num_mb, num_sh, ret = 0;
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);
/* Bail out if mboxes and shmem descriptors are inconsistent */
if (num_mb <= 0 || num_sh <= 0 || num_sh > 2 || num_mb > 3 ||
(num_mb == 1 && num_sh != 1) || (num_mb == 3 && num_sh != 2)) {
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 == 4 && num_sh != 2)) {
dev_warn(cdev,
"Invalid channel descriptor for '%s' - mbs:%d shm:%d\n",
of_node_full_name(np), num_mb, num_sh);
@ -136,6 +141,7 @@ static int mailbox_chan_validate(struct device *cdev,
case 1:
*a2p_rx_chan = 0;
*p2a_chan = 0;
*p2a_rx_chan = 0;
break;
case 2:
if (num_sh == 2) {
@ -145,10 +151,17 @@ static int mailbox_chan_validate(struct device *cdev,
*a2p_rx_chan = 1;
*p2a_chan = 0;
}
*p2a_rx_chan = 0;
break;
case 3:
*a2p_rx_chan = 1;
*p2a_chan = 2;
*p2a_rx_chan = 0;
break;
case 4:
*a2p_rx_chan = 1;
*p2a_chan = 2;
*p2a_rx_chan = 3;
break;
}
}
@ -163,12 +176,12 @@ static int mailbox_chan_setup(struct scmi_chan_info *cinfo, struct device *dev,
struct device *cdev = cinfo->dev;
struct scmi_mailbox *smbox;
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;
resource_size_t size;
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)
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;
smbox->cinfo = cinfo;
@ -240,9 +264,11 @@ static int mailbox_chan_free(int id, void *p, void *data)
if (smbox && !IS_ERR(smbox->chan)) {
mbox_free_channel(smbox->chan);
mbox_free_channel(smbox->chan_receiver);
mbox_free_channel(smbox->chan_platform_receiver);
cinfo->transport_info = NULL;
smbox->chan = NULL;
smbox->chan_receiver = NULL;
smbox->chan_platform_receiver = 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)
{
struct scmi_mailbox *smbox = cinfo->transport_info;
struct device *cdev = cinfo->dev;
struct mbox_chan *intr;
int ret;
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

View File

@ -24,7 +24,10 @@
#include "protocols.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 {
PERF_DOMAIN_ATTRIBUTES = 0x3,
@ -1111,7 +1114,7 @@ static int scmi_perf_protocol_init(const struct scmi_protocol_handle *ph)
if (ret)
return ret;
return ph->set_priv(ph, pinfo);
return ph->set_priv(ph, pinfo, version);
}
static const struct scmi_protocol scmi_perf = {
@ -1120,6 +1123,7 @@ static const struct scmi_protocol scmi_perf = {
.instance_init = &scmi_perf_protocol_init,
.ops = &perf_proto_ops,
.events = &perf_protocol_events,
.supported_version = SCMI_PROTOCOL_SUPPORTED_VERSION,
};
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 "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 {
POWER_DOMAIN_ATTRIBUTES = 0x3,
POWER_STATE_SET = 0x4,
@ -328,7 +331,7 @@ static int scmi_power_protocol_init(const struct scmi_protocol_handle *ph)
pinfo->version = version;
return ph->set_priv(ph, pinfo);
return ph->set_priv(ph, pinfo, version);
}
static const struct scmi_protocol scmi_power = {
@ -337,6 +340,7 @@ static const struct scmi_protocol scmi_power = {
.instance_init = &scmi_power_protocol_init,
.ops = &power_proto_ops,
.events = &power_protocol_events,
.supported_version = SCMI_PROTOCOL_SUPPORTED_VERSION,
};
DEFINE_SCMI_PROTOCOL_REGISTER_UNREGISTER(power, scmi_power)

View File

@ -17,6 +17,9 @@
#include "protocols.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 {
POWERCAP_DOMAIN_ATTRIBUTES = 0x3,
POWERCAP_CAP_GET = 0x4,
@ -975,7 +978,7 @@ scmi_powercap_protocol_init(const struct scmi_protocol_handle *ph)
}
pinfo->version = version;
return ph->set_priv(ph, pinfo);
return ph->set_priv(ph, pinfo, version);
}
static const struct scmi_protocol scmi_powercap = {
@ -984,6 +987,7 @@ static const struct scmi_protocol scmi_powercap = {
.instance_init = &scmi_powercap_protocol_init,
.ops = &powercap_proto_ops,
.events = &powercap_protocol_events,
.supported_version = SCMI_PROTOCOL_SUPPORTED_VERSION,
};
DEFINE_SCMI_PROTOCOL_REGISTER_UNREGISTER(powercap, scmi_powercap)

View File

@ -174,7 +174,8 @@ struct scmi_protocol_handle {
struct device *dev;
const struct scmi_xfer_ops *xops;
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);
};
@ -253,6 +254,7 @@ struct scmi_fc_info {
* @fastchannel_init: A common helper used to initialize FC descriptors by
* gathering FC descriptions from the SCMI platform server.
* @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 {
int (*extended_name_get)(const struct scmi_protocol_handle *ph,
@ -269,6 +271,7 @@ struct scmi_proto_helpers_ops {
void __iomem **p_addr,
struct scmi_fc_db_info **p_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
* exposed in scmi_protocol.h.
* @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 {
const u8 id;
@ -319,6 +326,7 @@ struct scmi_protocol {
const scmi_prot_init_ph_fn_t instance_deinit;
const void *ops;
const struct scmi_protocol_events *events;
unsigned int supported_version;
};
#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(clock);
DECLARE_SCMI_REGISTER_UNREGISTER(perf);
DECLARE_SCMI_REGISTER_UNREGISTER(pinctrl);
DECLARE_SCMI_REGISTER_UNREGISTER(power);
DECLARE_SCMI_REGISTER_UNREGISTER(reset);
DECLARE_SCMI_REGISTER_UNREGISTER(sensors);

View File

@ -13,6 +13,9 @@
#include "protocols.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 {
RESET_DOMAIN_ATTRIBUTES = 0x3,
RESET = 0x4,
@ -343,7 +346,7 @@ static int scmi_reset_protocol_init(const struct scmi_protocol_handle *ph)
}
pinfo->version = version;
return ph->set_priv(ph, pinfo);
return ph->set_priv(ph, pinfo, version);
}
static const struct scmi_protocol scmi_reset = {
@ -352,6 +355,7 @@ static const struct scmi_protocol scmi_reset = {
.instance_init = &scmi_reset_protocol_init,
.ops = &reset_proto_ops,
.events = &reset_protocol_events,
.supported_version = SCMI_PROTOCOL_SUPPORTED_VERSION,
};
DEFINE_SCMI_PROTOCOL_REGISTER_UNREGISTER(reset, scmi_reset)

View File

@ -14,6 +14,9 @@
#include "protocols.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 SCMIv2_SENSOR_PROTOCOL 0x10000
@ -1138,7 +1141,7 @@ static int scmi_sensors_protocol_init(const struct scmi_protocol_handle *ph)
if (ret)
return ret;
return ph->set_priv(ph, sinfo);
return ph->set_priv(ph, sinfo, version);
}
static const struct scmi_protocol scmi_sensors = {
@ -1147,6 +1150,7 @@ static const struct scmi_protocol scmi_sensors = {
.instance_init = &scmi_sensors_protocol_init,
.ops = &sensor_proto_ops,
.events = &sensor_protocol_events,
.supported_version = SCMI_PROTOCOL_SUPPORTED_VERSION,
};
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) &
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 "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
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)
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 = {
@ -153,6 +156,7 @@ static const struct scmi_protocol scmi_system = {
.instance_init = &scmi_system_protocol_init,
.ops = NULL,
.events = &system_protocol_events,
.supported_version = SCMI_PROTOCOL_SUPPORTED_VERSION,
};
DEFINE_SCMI_PROTOCOL_REGISTER_UNREGISTER(system, scmi_system)

View File

@ -10,6 +10,9 @@
#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 REMAINING_LEVELS_MASK GENMASK(31, 16)
#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");
}
return ph->set_priv(ph, vinfo);
return ph->set_priv(ph, vinfo, version);
}
static const struct scmi_protocol scmi_voltage = {
@ -440,6 +443,7 @@ static const struct scmi_protocol scmi_voltage = {
.owner = THIS_MODULE,
.instance_init = &scmi_voltage_protocol_init,
.ops = &voltage_proto_ops,
.supported_version = SCMI_PROTOCOL_SUPPORTED_VERSION,
};
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);
/**
* 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
* @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
* failure and true on success. 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
* core while spinning on a lock, between two successive
* invocations of @trylock. may _not_ sleep.
@ -28,6 +30,7 @@ struct hwspinlock_device;
struct hwspinlock_ops {
int (*trylock)(struct hwspinlock *lock);
void (*unlock)(struct hwspinlock *lock);
int (*bust)(struct hwspinlock *lock, unsigned int id);
void (*relax)(struct hwspinlock *lock);
};

View File

@ -9,6 +9,7 @@
#include <linux/pci.h>
#include "arm-smmu-v3.h"
#include "../../dma-iommu.h"
struct arm_smmu_option_prop {
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);
}
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,
struct arm_smmu_queue *q,
void __iomem *page,

View File

@ -72,8 +72,7 @@ extern struct kvm_iommu_ops kvm_nvhe_sym(smmu_ops);
static int atomic_pages;
module_param(atomic_pages, int, 0);
static int kvm_arm_smmu_topup_memcache(struct arm_smmu_device *smmu,
struct arm_smccc_res *res)
static int kvm_arm_smmu_topup_memcache(struct arm_smccc_res *res)
{
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);
}
dev_err(smmu->dev, "Bogus mem request");
pr_err("Bogus mem request");
return -EBADE;
}
/*
* 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; \
do { \
__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; \
})
@ -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;
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);
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++) {
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,
sid, pasid, master->ssid_bits);
if (ret) {
@ -373,7 +372,6 @@ static int kvm_arm_smmu_map_pages(struct iommu_domain *domain,
size_t mapped;
size_t size = pgsize * pgcount;
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;
do {
@ -387,7 +385,7 @@ static int kvm_arm_smmu_map_pages(struct iommu_domain *domain,
WARN_ON(mapped > pgcount * pgsize);
pgcount -= mapped / pgsize;
*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)
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 size = pgsize * pgcount;
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;
do {
@ -423,7 +420,7 @@ static size_t kvm_arm_smmu_unmap_pages(struct iommu_domain *domain,
* block mapping.
*/
} while (total_unmapped < size &&
(unmapped || !kvm_arm_smmu_topup_memcache(smmu, &res)));
(unmapped || !kvm_arm_smmu_topup_memcache(&res)));
return total_unmapped;
}
@ -449,6 +446,7 @@ static struct iommu_ops kvm_arm_smmu_ops = {
.capable = arm_smmu_capable,
.device_group = arm_smmu_device_group,
.of_xlate = arm_smmu_of_xlate,
.get_resv_regions = arm_smmu_get_resv_regions,
.probe_device = kvm_arm_smmu_probe_device,
.release_device = kvm_arm_smmu_release_device,
.domain_alloc = kvm_arm_smmu_domain_alloc,
@ -1049,6 +1047,17 @@ static int kvm_arm_smmu_v3_init(void)
if (ret)
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,
NULL, smmu_put_device));
return 0;

View File

@ -21,7 +21,6 @@
#include <linux/platform_device.h>
#include "arm-smmu-v3.h"
#include "../../dma-iommu.h"
#include "../../iommu-sva.h"
static bool disable_bypass = true;
@ -2509,22 +2508,6 @@ static int arm_smmu_enable_nesting(struct iommu_domain *domain)
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,
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);
struct iommu_group *arm_smmu_device_group(struct device *dev);
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;
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"
}

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));
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_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;
mmc_set_ios(host);
}
EXPORT_SYMBOL_GPL(mmc_set_clock);
int mmc_execute_tuning(struct mmc_card *card)
{
@ -955,6 +956,7 @@ int mmc_execute_tuning(struct mmc_card *card)
return err;
}
EXPORT_SYMBOL_GPL(mmc_execute_tuning);
/*
* 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;
mmc_set_ios(host);
}
EXPORT_SYMBOL_GPL(mmc_set_bus_mode);
/*
* 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;
mmc_set_ios(host);
}
EXPORT_SYMBOL_GPL(mmc_set_bus_width);
/*
* 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);
}
EXPORT_SYMBOL_GPL(mmc_set_initial_state);
/**
* 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;
mmc_set_ios(host);
}
EXPORT_SYMBOL_GPL(mmc_set_timing);
/*
* 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_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_width(struct mmc_host *host, unsigned int width);
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->hold_retune += 1;
}
EXPORT_SYMBOL(mmc_retune_hold);
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.
*/
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;
@ -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.
* 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[] = {
EXT_CSD_BUS_WIDTH_8,
@ -1069,11 +1069,12 @@ static int mmc_select_bus_width(struct mmc_card *card)
return err;
}
EXPORT_SYMBOL_GPL(mmc_select_bus_width);
/*
* 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;
@ -1087,11 +1088,12 @@ static int mmc_select_hs(struct mmc_card *card)
return err;
}
EXPORT_SYMBOL_GPL(mmc_select_hs);
/*
* 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;
u32 bus_width, ext_csd_bits;
@ -1160,8 +1162,9 @@ static int mmc_select_hs_ddr(struct mmc_card *card)
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;
unsigned int max_dtr;
@ -1255,6 +1258,7 @@ out_err:
__func__, err);
return err;
}
EXPORT_SYMBOL_GPL(mmc_select_hs400);
int mmc_hs200_to_hs400(struct mmc_card *card)
{
@ -1535,7 +1539,7 @@ err:
/*
* 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;
@ -1570,12 +1574,13 @@ bus_speed:
mmc_set_bus_speed(card);
return 0;
}
EXPORT_SYMBOL_GPL(mmc_select_timing);
/*
* Execute tuning sequence to seek the proper bus operating
* 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;
@ -1590,6 +1595,7 @@ static int mmc_hs200_tuning(struct mmc_card *card)
return mmc_execute_tuning(card);
}
EXPORT_SYMBOL_GPL(mmc_hs200_tuning);
/*
* 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);
}
EXPORT_SYMBOL_GPL(mmc_select_card);
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;
}
EXPORT_SYMBOL_GPL(mmc_issue_type);
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_ids.h>
#include <trace/hooks/mmc.h>
#include "core.h"
#include "card.h"
#include "host.h"
@ -1116,6 +1118,8 @@ out:
mmc_release_host(host);
host->pm_flags &= ~MMC_PM_KEEP_POWER;
trace_android_vh_mmc_sdio_pm_flag_set(host);
return err;
}

View File

@ -2631,6 +2631,9 @@ static int sdhci_msm_probe(struct platform_device *pdev)
/* Set the timeout value to max possible */
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_set_active(&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.name = dev_name(&mtd->dev);
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.size = mtd->size;
config.word_size = 1;
@ -898,6 +899,7 @@ static struct nvmem_device *mtd_otp_nvmem_register(struct mtd_info *mtd,
config.name = compatible;
config.id = NVMEM_DEVID_AUTO;
config.owner = THIS_MODULE;
config.add_legacy_fixed_of_cells = !mtd_type_is_nand(mtd);
config.type = NVMEM_TYPE_OTP;
config.root_only = true;
config.ignore_wp = true;

View File

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

View File

@ -1512,3 +1512,4 @@ MODULE_VERSION(__stringify(UBI_VERSION));
MODULE_DESCRIPTION("UBI - Unsorted Block Images");
MODULE_AUTHOR("Artem Bityutskiy");
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"
}

View File

@ -1709,3 +1709,4 @@ module_init(nvmet_init);
module_exit(nvmet_exit);
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 nvmem_config config = {
.dev = &pdev->dev,
.add_legacy_fixed_of_cells = true,
.read_only = true,
.reg_read = apple_efuses_read,
.stride = sizeof(u32),

View File

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

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