diff --git a/BUILD.bazel b/BUILD.bazel index 5a905ccb0966..5595fe3ce5ad 100644 --- a/BUILD.bazel +++ b/BUILD.bazel @@ -14,7 +14,7 @@ load( "kernel_modules_install", "merged_kernel_uapi_headers", ) -load(":modules.bzl", "COMMON_GKI_MODULES_LIST") +load(":modules.bzl", "get_gki_modules_list") package( default_visibility = [ @@ -46,10 +46,49 @@ checkpatch( checkpatch_pl = "scripts/checkpatch.pl", ) -write_file( +# Deprecated - Use arch specific files from below. +alias( name = "gki_system_dlkm_modules", - out = "android/gki_system_dlkm_modules", - content = COMMON_GKI_MODULES_LIST + [ + actual = "gki_system_dlkm_modules_arm64", + deprecation = """ + Common list for all architectures is deprecated. + Instead use the file corresponding to the architecture used: + i.e. `gki_system_dlkm_modules_{arch}` + """, +) + +alias( + name = "android/gki_system_dlkm_modules", + actual = "android/gki_system_dlkm_modules_arm64", + deprecation = """ + Common list for all architectures is deprecated. + Instead use the file corresponding to the architecture used: + i.e. `gki_system_dlkm_modules_{arch}` + """, +) + +write_file( + name = "gki_system_dlkm_modules_arm64", + out = "android/gki_system_dlkm_modules_arm64", + content = get_gki_modules_list("arm64") + [ + # Ensure new line at the end. + "", + ], +) + +write_file( + name = "gki_system_dlkm_modules_x86_64", + out = "android/gki_system_dlkm_modules_x86_64", + content = get_gki_modules_list("x86_64") + [ + # Ensure new line at the end. + "", + ], +) + +write_file( + name = "gki_system_dlkm_modules_risc64", + out = "android/gki_system_dlkm_modules_riscv64", + content = get_gki_modules_list("riscv64") + [ # Ensure new line at the end. "", ], @@ -65,10 +104,12 @@ filegroup( "android/abi_gki_aarch64_galaxy", "android/abi_gki_aarch64_honor", "android/abi_gki_aarch64_imx", + "android/abi_gki_aarch64_meizu", "android/abi_gki_aarch64_mtk", "android/abi_gki_aarch64_oplus", "android/abi_gki_aarch64_pixel", "android/abi_gki_aarch64_qcom", + "android/abi_gki_aarch64_tuxera", "android/abi_gki_aarch64_unisoc", "android/abi_gki_aarch64_virtual_device", "android/abi_gki_aarch64_vivo", @@ -80,7 +121,7 @@ filegroup( define_common_kernels(target_configs = { "kernel_aarch64": { "kmi_symbol_list_strict_mode": True, - "module_implicit_outs": COMMON_GKI_MODULES_LIST, + "module_implicit_outs": get_gki_modules_list("arm64"), "kmi_symbol_list": "android/abi_gki_aarch64", "kmi_symbol_list_add_only": True, "additional_kmi_symbol_lists": [":aarch64_additional_kmi_symbol_lists"], @@ -90,12 +131,12 @@ define_common_kernels(target_configs = { }, "kernel_aarch64_16k": { "kmi_symbol_list_strict_mode": False, - "module_implicit_outs": COMMON_GKI_MODULES_LIST, + "module_implicit_outs": get_gki_modules_list("arm64"), "make_goals": _GKI_AARCH64_MAKE_GOALS, }, "kernel_aarch64_debug": { "kmi_symbol_list_strict_mode": False, - "module_implicit_outs": COMMON_GKI_MODULES_LIST, + "module_implicit_outs": get_gki_modules_list("arm64"), "kmi_symbol_list": "android/abi_gki_aarch64", "kmi_symbol_list_add_only": True, "additional_kmi_symbol_lists": [":aarch64_additional_kmi_symbol_lists"], @@ -105,19 +146,19 @@ define_common_kernels(target_configs = { }, "kernel_riscv64": { "kmi_symbol_list_strict_mode": False, - "module_implicit_outs": COMMON_GKI_MODULES_LIST, + "module_implicit_outs": get_gki_modules_list("riscv64"), "make_goals": _GKI_RISCV64_MAKE_GOALS, }, "kernel_x86_64": { "kmi_symbol_list_strict_mode": False, - "module_implicit_outs": COMMON_GKI_MODULES_LIST, + "module_implicit_outs": get_gki_modules_list("x86_64"), "protected_exports_list": "android/abi_gki_protected_exports_x86_64", "protected_modules_list": "android/gki_x86_64_protected_modules", "make_goals": _GKI_X86_64_MAKE_GOALS, }, "kernel_x86_64_debug": { "kmi_symbol_list_strict_mode": False, - "module_implicit_outs": COMMON_GKI_MODULES_LIST, + "module_implicit_outs": get_gki_modules_list("x86_64"), "protected_exports_list": "android/abi_gki_protected_exports_x86_64", "protected_modules_list": "android/gki_x86_64_protected_modules", "make_goals": _GKI_X86_64_MAKE_GOALS, @@ -483,7 +524,7 @@ kernel_build( "modules", "rk3399-rock-pi-4b.dtb", ], - module_outs = COMMON_GKI_MODULES_LIST + _ROCKPI4_MODULE_OUTS + _ROCKPI4_WATCHDOG_MODULE_OUTS, + module_outs = get_gki_modules_list("arm64") + _ROCKPI4_MODULE_OUTS + _ROCKPI4_WATCHDOG_MODULE_OUTS, visibility = ["//visibility:private"], ) @@ -506,7 +547,7 @@ kernel_build( "modules", "rk3399-rock-pi-4b.dtb", ], - module_outs = COMMON_GKI_MODULES_LIST + _ROCKPI4_MODULE_OUTS, + module_outs = get_gki_modules_list("arm64") + _ROCKPI4_MODULE_OUTS, visibility = ["//visibility:private"], ) diff --git a/Documentation/devicetree/bindings/hypervisor/mediatek,geniezone-hyp.yaml b/Documentation/devicetree/bindings/hypervisor/mediatek,geniezone-hyp.yaml new file mode 100644 index 000000000000..ab89a4c310cb --- /dev/null +++ b/Documentation/devicetree/bindings/hypervisor/mediatek,geniezone-hyp.yaml @@ -0,0 +1,31 @@ +# 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 + +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"; + }; diff --git a/Documentation/virt/geniezone/introduction.rst b/Documentation/virt/geniezone/introduction.rst new file mode 100644 index 000000000000..fb9fa41bcfb8 --- /dev/null +++ b/Documentation/virt/geniezone/introduction.rst @@ -0,0 +1,86 @@ +.. SPDX-License-Identifier: GPL-2.0 + +====================== +GenieZone Introduction +====================== + +Overview +======== +GenieZone hypervisor(gzvm) is a type-1 hypervisor that supports various virtual +machine types and provides security features such as TEE-like scenarios and +secure boot. It can create guest VMs for security use cases and has +virtualization capabilities for both platform and interrupt. Although the +hypervisor can be booted independently, it requires the assistance of GenieZone +hypervisor kernel driver(gzvm-ko) to leverage the ability of Linux kernel for +vCPU scheduling, memory management, inter-VM communication and virtio backend +support. + +Supported Architecture +====================== +GenieZone now only supports MediaTek ARM64 SoC. + +Features +======== + +- vCPU Management + +VM manager aims to provide vCPUs on the basis of time sharing on physical CPUs. +It requires Linux kernel in host VM for vCPU scheduling and VM power management. + +- Memory Management + +Direct use of physical memory from VMs is forbidden and designed to be dictated +to the privilege models managed by GenieZone hypervisor for security reason. +With the help of gzvm-ko, the hypervisor would be able to manipulate memory as +objects. + +- Virtual Platform + +We manage to emulate a virtual mobile platform for guest OS running on guest +VM. The platform supports various architecture-defined devices, such as +virtual arch timer, GIC, MMIO, PSCI, and exception watching...etc. + +- Inter-VM Communication + +Communication among guest VMs was provided mainly on RPC. More communication +mechanisms were to be provided in the future based on VirtIO-vsock. + +- Device Virtualization + +The solution is provided using the well-known VirtIO. The gzvm-ko would +redirect MMIO traps back to VMM where the virtual devices are mostly emulated. +Ioeventfd is implemented using eventfd for signaling host VM that some IO +events in guest VMs need to be processed. + +- Interrupt virtualization + +All Interrupts during some guest VMs running would be handled by GenieZone +hypervisor with the help of gzvm-ko, both virtual and physical ones. In case +there's no guest VM running out there, physical interrupts would be handled by +host VM directly for performance reason. Irqfd is also implemented using +eventfd for accepting vIRQ requests in gzvm-ko. + +Platform architecture component +=============================== + +- vm + +The vm component is responsible for setting up the capability and memory +management for the protected VMs. The capability is mainly about the lifecycle +control and boot context initialization. And the memory management is highly +integrated with ARM 2-stage translation tables to convert VA to IPA to PA under +proper security measures required by protected VMs. + +- vcpu + +The vcpu component is the core of virtualizing aarch64 physical CPU runnable, +and it controls the vCPU lifecycle including creating, running and destroying. +With self-defined exit handler, the vm component would be able to act +accordingly before terminated. + +- vgic + +The vgic component exposes control interfaces to Linux kernel via irqchip, and +we intend to support all SPI, PPI, and SGI. When it comes to virtual +interrupts, the GenieZone hypervisor would write to list registers and trigger +vIRQ injection in guest VMs via GIC. diff --git a/Documentation/virt/index.rst b/Documentation/virt/index.rst index 418d540f5484..9e73018d6a8c 100644 --- a/Documentation/virt/index.rst +++ b/Documentation/virt/index.rst @@ -16,6 +16,7 @@ Linux Virtualization Support coco/sev-guest hyperv/index gunyah/index + geniezone/introduction .. only:: html and subproject diff --git a/MAINTAINERS b/MAINTAINERS index 2e0a79e6f4ce..f0e039fe78bb 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -8665,6 +8665,19 @@ F: include/vdso/ F: kernel/time/vsyscall.c F: lib/vdso/ +GENIEZONE HYPERVISOR DRIVER +M: Yingshiuan Pan +M: Ze-Yu Wang +M: Yi-De Wu +F: Documentation/devicetree/bindings/hypervisor/mediatek,geniezone-hyp.yaml +F: Documentation/virt/geniezone/ +F: arch/arm64/geniezone/ +F: arch/arm64/include/uapi/asm/gzvm_arch.h +F: drivers/virt/geniezone/ +F: include/linux/gzvm_drv.h +F include/uapi/asm-generic/gzvm_arch.h +F: include/uapi/linux/gzvm.h + GENWQE (IBM Generic Workqueue Card) M: Frank Haverkamp S: Supported diff --git a/android/abi_gki_aarch64.stg b/android/abi_gki_aarch64.stg index 68721f6a18fd..23b4bcc56ef3 100644 --- a/android/abi_gki_aarch64.stg +++ b/android/abi_gki_aarch64.stg @@ -158,6 +158,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0x285ee61e } +pointer_reference { + id: 0x0087f4f8 + kind: POINTER + pointee_type_id: 0x285f357e +} pointer_reference { id: 0x0092c032 kind: POINTER @@ -223,6 +228,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0x292a6e73 } +pointer_reference { + id: 0x00daeb4b + kind: POINTER + pointee_type_id: 0x292b4bb0 +} pointer_reference { id: 0x00dd92af kind: POINTER @@ -573,6 +583,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0x225b7cde } +pointer_reference { + id: 0x0206e829 + kind: POINTER + pointee_type_id: 0x225b463b +} pointer_reference { id: 0x020c1a12 kind: POINTER @@ -1828,6 +1843,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0x30293561 } +pointer_reference { + id: 0x06a428cc + kind: POINTER + pointee_type_id: 0x30d045ac +} pointer_reference { id: 0x06afdad0 kind: POINTER @@ -2573,6 +2593,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0x0cfb4b7c } +pointer_reference { + id: 0x09b53a9f + kind: POINTER + pointee_type_id: 0x0c940ce3 +} pointer_reference { id: 0x09bb9b7e kind: POINTER @@ -2608,6 +2633,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0x0dd91f48 } +pointer_reference { + id: 0x09eee7e5 + kind: POINTER + pointee_type_id: 0x0dfb7909 +} pointer_reference { id: 0x09f1b886 kind: POINTER @@ -3348,6 +3378,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0x1a8d07bb } +pointer_reference { + id: 0x0c33de94 + kind: POINTER + pointee_type_id: 0x1a8f9ccc +} pointer_reference { id: 0x0c3509f9 kind: POINTER @@ -3448,6 +3483,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0x1b5d6044 } +pointer_reference { + id: 0x0c483694 + kind: POINTER + pointee_type_id: 0x1b603ccd +} pointer_reference { id: 0x0c485c36 kind: POINTER @@ -3648,6 +3688,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0x1b841a62 } +pointer_reference { + id: 0x0c715d8d + kind: POINTER + pointee_type_id: 0x1b8590a8 +} pointer_reference { id: 0x0c74ddbe kind: POINTER @@ -3983,6 +4028,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0x197157bd } +pointer_reference { + id: 0x0ccdc0f9 + kind: POINTER + pointee_type_id: 0x1977e57b +} pointer_reference { id: 0x0cce6a6a kind: POINTER @@ -4598,6 +4648,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0x1f060fb8 } +pointer_reference { + id: 0x0d52f144 + kind: POINTER + pointee_type_id: 0x1f0b238f +} pointer_reference { id: 0x0d53cd40 kind: POINTER @@ -4633,6 +4688,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0x1f202bf3 } +pointer_reference { + id: 0x0d599e4a + kind: POINTER + pointee_type_id: 0x1f269fb6 +} pointer_reference { id: 0x0d5a6860 kind: POINTER @@ -4688,6 +4748,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0x1fde992a } +pointer_reference { + id: 0x0d6927be + kind: POINTER + pointee_type_id: 0x1fe47867 +} pointer_reference { id: 0x0d6b4ee3 kind: POINTER @@ -5158,6 +5223,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0x1cbe3d95 } +pointer_reference { + id: 0x0dc11255 + kind: POINTER + pointee_type_id: 0x1d44afc8 +} pointer_reference { id: 0x0dc35132 kind: POINTER @@ -6708,6 +6778,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0x167c181d } +pointer_reference { + id: 0x0f12d1e7 + kind: POINTER + pointee_type_id: 0x160ba102 +} pointer_reference { id: 0x0f161b41 kind: POINTER @@ -7058,6 +7133,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0x17d51999 } +pointer_reference { + id: 0x0f65ebe2 + kind: POINTER + pointee_type_id: 0x17d74917 +} pointer_reference { id: 0x0f67218c kind: POINTER @@ -7483,6 +7563,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0x154ed535 } +pointer_reference { + id: 0x0fc3c654 + kind: POINTER + pointee_type_id: 0x154fffcf +} pointer_reference { id: 0x0fc46487 kind: POINTER @@ -8528,6 +8613,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0x7bdc8a60 } +pointer_reference { + id: 0x146a39bf + kind: POINTER + pointee_type_id: 0x7be80061 +} pointer_reference { id: 0x14731fc7 kind: POINTER @@ -10348,6 +10438,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0x5f502f26 } +pointer_reference { + id: 0x1d44afc8 + kind: POINTER + pointee_type_id: 0x5f5259bd +} pointer_reference { id: 0x1d44eec5 kind: POINTER @@ -11198,6 +11293,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0xa8a462e4 } +pointer_reference { + id: 0x20bba379 + kind: POINTER + pointee_type_id: 0xa8ae6b7a +} pointer_reference { id: 0x20d23755 kind: POINTER @@ -11998,6 +12098,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0xb837e52e } +pointer_reference { + id: 0x24a22acc + kind: POINTER + pointee_type_id: 0xb8c84daf +} pointer_reference { id: 0x24bbc433 kind: POINTER @@ -12678,6 +12783,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0x8b3c441e } +pointer_reference { + id: 0x285f357e + kind: POINTER + pointee_type_id: 0x8b3c3364 +} pointer_reference { id: 0x2862f859 kind: POINTER @@ -13373,6 +13483,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0x84ef9574 } +pointer_reference { + id: 0x2bae2afe + kind: POINTER + pointee_type_id: 0x84f84d67 +} pointer_reference { id: 0x2bb01e4c kind: POINTER @@ -14158,6 +14273,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0x9b022eae } +pointer_reference { + id: 0x2c50e503 + kind: POINTER + pointee_type_id: 0x9b037291 +} pointer_reference { id: 0x2c510476 kind: POINTER @@ -14953,6 +15073,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0x9bbdba09 } +pointer_reference { + id: 0x2c7fb451 + kind: POINTER + pointee_type_id: 0x9bbe37da +} pointer_reference { id: 0x2c7ffaf6 kind: POINTER @@ -15333,6 +15458,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0x98f1d602 } +pointer_reference { + id: 0x2cacacc0 + kind: POINTER + pointee_type_id: 0x98f2559e +} pointer_reference { id: 0x2caea882 kind: POINTER @@ -15363,6 +15493,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0x98881e2d } +pointer_reference { + id: 0x2cb2c9fe + kind: POINTER + pointee_type_id: 0x988bc164 +} pointer_reference { id: 0x2cb3cf30 kind: POINTER @@ -16043,6 +16178,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0x9e4766bb } +pointer_reference { + id: 0x2d01fcba + kind: POINTER + pointee_type_id: 0x9e471477 +} pointer_reference { id: 0x2d0240fc kind: POINTER @@ -16573,6 +16713,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0x9e8fd7cb } +pointer_reference { + id: 0x2d34349d + kind: POINTER + pointee_type_id: 0x9e9034ea +} pointer_reference { id: 0x2d3466af kind: POINTER @@ -17093,6 +17238,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0x9f9d90bf } +pointer_reference { + id: 0x2d77f22a + kind: POINTER + pointee_type_id: 0x9f9f2e37 +} pointer_reference { id: 0x2d7870f7 kind: POINTER @@ -18618,11 +18768,21 @@ pointer_reference { kind: POINTER pointee_type_id: 0x92075c0f } +pointer_reference { + id: 0x2e133d23 + kind: POINTER + pointee_type_id: 0x920c1213 +} pointer_reference { id: 0x2e136b7a kind: POINTER pointee_type_id: 0x920d4b76 } +pointer_reference { + id: 0x2e137a28 + kind: POINTER + pointee_type_id: 0x920d0e3f +} pointer_reference { id: 0x2e1466a0 kind: POINTER @@ -18638,6 +18798,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0x9215c28e } +pointer_reference { + id: 0x2e157919 + kind: POINTER + pointee_type_id: 0x921502fa +} pointer_reference { id: 0x2e160375 kind: POINTER @@ -18743,6 +18908,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0x92d3b873 } +pointer_reference { + id: 0x2e2690ae + kind: POINTER + pointee_type_id: 0x92daa424 +} pointer_reference { id: 0x2e27223f kind: POINTER @@ -18798,6 +18968,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0x92fce902 } +pointer_reference { + id: 0x2e2f0b11 + kind: POINTER + pointee_type_id: 0x92fccadb +} pointer_reference { id: 0x2e2ff28a kind: POINTER @@ -18823,6 +18998,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0x92878d53 } +pointer_reference { + id: 0x2e323a43 + kind: POINTER + pointee_type_id: 0x92880f91 +} pointer_reference { id: 0x2e334b9e kind: POINTER @@ -18838,6 +19018,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0x929702b9 } +pointer_reference { + id: 0x2e360c76 + kind: POINTER + pointee_type_id: 0x9298d745 +} pointer_reference { id: 0x2e36aac4 kind: POINTER @@ -18858,6 +19043,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0x92a82deb } +pointer_reference { + id: 0x2e3aa811 + kind: POINTER + pointee_type_id: 0x92aa46db +} pointer_reference { id: 0x2e3afbd5 kind: POINTER @@ -18873,11 +19063,21 @@ pointer_reference { kind: POINTER pointee_type_id: 0x92ae55cd } +pointer_reference { + id: 0x2e3beeb2 + kind: POINTER + pointee_type_id: 0x92af5c55 +} pointer_reference { id: 0x2e3de161 kind: POINTER pointee_type_id: 0x92b76318 } +pointer_reference { + id: 0x2e3f95bc + kind: POINTER + pointee_type_id: 0x92beb06d +} pointer_reference { id: 0x2e3fe61b kind: POINTER @@ -19158,6 +19358,16 @@ pointer_reference { kind: POINTER pointee_type_id: 0x93e8e7b0 } +pointer_reference { + id: 0x2e6a357b + kind: POINTER + pointee_type_id: 0x93e83373 +} +pointer_reference { + id: 0x2e6a35a0 + kind: POINTER + pointee_type_id: 0x93e8301d +} pointer_reference { id: 0x2e6c8788 kind: POINTER @@ -19528,6 +19738,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0x9090fcd9 } +pointer_reference { + id: 0x2eb464c1 + kind: POINTER + pointee_type_id: 0x90917599 +} pointer_reference { id: 0x2eb4795d kind: POINTER @@ -20563,6 +20778,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0x96d126d3 } +pointer_reference { + id: 0x2f24a589 + kind: POINTER + pointee_type_id: 0x96d270ba +} pointer_reference { id: 0x2f25d7c2 kind: POINTER @@ -21028,6 +21248,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0x97b2b8d0 } +pointer_reference { + id: 0x2f802886 + kind: POINTER + pointee_type_id: 0x94404485 +} pointer_reference { id: 0x2f805571 kind: POINTER @@ -22998,6 +23223,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0xe1c969cb } +pointer_reference { + id: 0x32e4574b + kind: POINTER + pointee_type_id: 0xe1d1bbb1 +} pointer_reference { id: 0x32e49390 kind: POINTER @@ -24588,6 +24818,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0xf2c78cfb } +pointer_reference { + id: 0x3622fa2a + kind: POINTER + pointee_type_id: 0xf2cb0e35 +} pointer_reference { id: 0x3626871f kind: POINTER @@ -24653,6 +24888,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0xf3dea95c } +pointer_reference { + id: 0x3667e19e + kind: POINTER + pointee_type_id: 0xf3df60e5 +} pointer_reference { id: 0x3668642a kind: POINTER @@ -27023,6 +27263,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0xc50a1b96 } +pointer_reference { + id: 0x3bd6fa3a + kind: POINTER + pointee_type_id: 0xc51b0e75 +} pointer_reference { id: 0x3bd9eb0b kind: POINTER @@ -27048,6 +27293,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0xc5d356cb } +pointer_reference { + id: 0x3be6380c + kind: POINTER + pointee_type_id: 0xc5d806af +} pointer_reference { id: 0x3be64ffd kind: POINTER @@ -27488,6 +27738,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0xde680909 } +pointer_reference { + id: 0x3d1364e9 + kind: POINTER + pointee_type_id: 0xde0d753a +} pointer_reference { id: 0x3d1ec847 kind: POINTER @@ -27878,6 +28133,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0xddfa054d } +pointer_reference { + id: 0x3df0a7d3 + kind: POINTER + pointee_type_id: 0xdd8279d0 +} pointer_reference { id: 0x3df7e337 kind: POINTER @@ -27888,6 +28148,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0xdda60846 } +pointer_reference { + id: 0x3dfac2ad + kind: POINTER + pointee_type_id: 0xddabec2b +} pointer_reference { id: 0x3e001c39 kind: POINTER @@ -27988,6 +28253,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0xd2e61f73 } +pointer_reference { + id: 0x3e2a5e3d + kind: POINTER + pointee_type_id: 0xd2e99e69 +} pointer_reference { id: 0x3e2de599 kind: POINTER @@ -29038,6 +29308,11 @@ typedef { name: "blk_qc_t" referred_type_id: 0x4585663f } +typedef { + id: 0xa47a28f3 + name: "blk_short_t" + referred_type_id: 0x914dbfdc +} typedef { id: 0x7be80061 name: "blk_status_t" @@ -29253,6 +29528,126 @@ typedef { name: "dev_t" referred_type_id: 0xe83041c0 } +typedef { + id: 0xb8c84daf + name: "dio_iodone_t" + referred_type_id: 0x9f043139 +} +typedef { + id: 0x30d045ac + name: "dio_submit_t" + referred_type_id: 0x15976e28 +} +typedef { + id: 0x7722f5fe + name: "dm_busy_fn" + referred_type_id: 0x2e2f0b11 +} +typedef { + id: 0x81034bb7 + name: "dm_clone_and_map_request_fn" + referred_type_id: 0x2e323a43 +} +typedef { + id: 0xec2f5289 + name: "dm_ctr_fn" + referred_type_id: 0x2e6a357b +} +typedef { + id: 0x5833b757 + name: "dm_dax_direct_access_fn" + referred_type_id: 0x20bba379 +} +typedef { + id: 0xdbb955db + name: "dm_dax_recovery_write_fn" + referred_type_id: 0x2cb2c9fe +} +typedef { + id: 0xc272516a + name: "dm_dax_zero_page_range_fn" + referred_type_id: 0x2e133d23 +} +typedef { + id: 0xdee852ab + name: "dm_dtr_fn" + referred_type_id: 0x0d6927be +} +typedef { + id: 0x72f27b5e + name: "dm_endio_fn" + referred_type_id: 0x2e3beeb2 +} +typedef { + id: 0x5d27fec1 + name: "dm_io_hints_fn" + referred_type_id: 0x0d52f144 +} +typedef { + id: 0x4944b34e + name: "dm_iterate_devices_fn" + referred_type_id: 0x2eb464c1 +} +typedef { + id: 0x7abd5475 + name: "dm_map_fn" + referred_type_id: 0x2e3aa811 +} +typedef { + id: 0x4a37c87b + name: "dm_message_fn" + referred_type_id: 0x2e6a35a0 +} +typedef { + id: 0x540fc033 + name: "dm_postsuspend_fn" + referred_type_id: 0x0d6927be +} +typedef { + id: 0xb5818a23 + name: "dm_prepare_ioctl_fn" + referred_type_id: 0x2e2690ae +} +typedef { + id: 0xcd86b17c + name: "dm_preresume_fn" + referred_type_id: 0x2e2f0b11 +} +typedef { + id: 0xeab0ac41 + name: "dm_presuspend_fn" + referred_type_id: 0x0d6927be +} +typedef { + id: 0xa3284d98 + name: "dm_presuspend_undo_fn" + referred_type_id: 0x0d6927be +} +typedef { + id: 0x1ce28cf1 + name: "dm_release_clone_request_fn" + referred_type_id: 0x0f65ebe2 +} +typedef { + id: 0xb0c08c5a + name: "dm_report_zones_fn" + referred_type_id: 0x2e157919 +} +typedef { + id: 0xabcaeaec + name: "dm_request_endio_fn" + referred_type_id: 0x2e360c76 +} +typedef { + id: 0x77a6dd29 + name: "dm_resume_fn" + referred_type_id: 0x0d6927be +} +typedef { + id: 0xba528163 + name: "dm_status_fn" + referred_type_id: 0x0d599e4a +} typedef { id: 0xe02e14d6 name: "dma_addr_t" @@ -29393,6 +29788,11 @@ typedef { name: "genpool_algo_t" referred_type_id: 0x06afdad0 } +typedef { + id: 0x98f2559e + name: "get_block_t" + referred_type_id: 0x982488f7 +} typedef { id: 0x244afa25 name: "gfn_t" @@ -29438,6 +29838,11 @@ typedef { name: "hfn_t" referred_type_id: 0x92233392 } +typedef { + id: 0xd57eb7ba + name: "initxattrs" + referred_type_id: 0x2c7fb451 +} typedef { id: 0xee72cbfc name: "ino_t" @@ -29513,6 +29918,11 @@ typedef { name: "isolate_mode_t" referred_type_id: 0x4585663f } +typedef { + id: 0x9ae406d4 + name: "iterate_devices_callout_fn" + referred_type_id: 0x2e3f95bc +} typedef { id: 0xc6154084 name: "iw_handler" @@ -30363,6 +30773,11 @@ typedef { name: "ssize_t" referred_type_id: 0x2da051ab } +typedef { + id: 0x34e17987 + name: "status_type_t" + referred_type_id: 0x42178190 +} typedef { id: 0x6c15168b name: "substring_t" @@ -32313,6 +32728,11 @@ qualified { qualifier: CONST qualified_type_id: 0x07afa3be } +qualified { + id: 0xde0d753a + qualifier: CONST + qualified_type_id: 0x08726260 +} qualified { id: 0xde3bc780 qualifier: CONST @@ -33403,6 +33823,11 @@ qualified { qualifier: CONST qualified_type_id: 0xbe067d4b } +qualified { + id: 0xf3df60e5 + qualifier: CONST + qualified_type_id: 0xbf3a351e +} qualified { id: 0xf3e17637 qualifier: CONST @@ -34882,6 +35307,11 @@ array { number_of_elements: 2 element_type_id: 0xbcedc070 } +array { + id: 0x439cf6d8 + number_of_elements: 16 + element_type_id: 0x3ebcd127 +} array { id: 0x43acdd98 number_of_elements: 32 @@ -35312,6 +35742,11 @@ array { number_of_elements: 32 element_type_id: 0x21069feb } +array { + id: 0x5d529b1e + number_of_elements: 16 + element_type_id: 0x4585663f +} array { id: 0x5e18785f number_of_elements: 16 @@ -38129,6 +38564,11 @@ member { type_id: 0x4f10779f offset: 192 } +member { + id: 0x3024ec51 + type_id: 0x4fbdc803 + offset: 28800 +} member { id: 0x302f914f type_id: 0x4f903dda @@ -41620,6 +42060,12 @@ member { type_id: 0x5d8155a5 offset: 19520 } +member { + id: 0xc0138ce8 + name: "accessed" + type_id: 0x4585663f + offset: 608 +} member { id: 0x6311fd99 name: "accessory" @@ -41656,6 +42102,13 @@ member { type_id: 0x92233392 offset: 2432 } +member { + id: 0x1a19769d + name: "accounts_remapped_io" + type_id: 0x6d7f5ff6 + offset: 580 + bitsize: 1 +} member { id: 0x542cf718 name: "acct" @@ -43825,6 +44278,12 @@ member { name: "algorithm_id" type_id: 0x295c7202 } +member { + id: 0x25050ebe + name: "alias" + type_id: 0x3e10b518 + offset: 64 +} member { id: 0x33075cab name: "align" @@ -44074,6 +44533,12 @@ member { type_id: 0x1fe7f40f offset: 64 } +member { + id: 0xa0650951 + name: "alloc_callback" + type_id: 0x0c33de94 + offset: 960 +} member { id: 0x3f6534a2 name: "alloc_container_ctx" @@ -45162,12 +45627,6 @@ member { type_id: 0x92233392 offset: 704 } -member { - id: 0x2d081767 - name: "android_kabi_reserved1" - type_id: 0x92233392 - offset: 28800 -} member { id: 0x2d0817b6 name: "android_kabi_reserved1" @@ -46169,6 +46628,12 @@ member { type_id: 0x92233392 offset: 3008 } +member { + id: 0x63760fd1 + name: "android_kabi_reserved2" + type_id: 0x92233392 + offset: 1792 +} member { id: 0x63760fdb name: "android_kabi_reserved2" @@ -47847,6 +48312,11 @@ member { type_id: 0x6720d32f offset: 704 } +member { + id: 0x2075b8f0 + name: "argc" + type_id: 0x4585663f +} member { id: 0x6fcff76c name: "argmin" @@ -47928,6 +48398,12 @@ member { name: "argv" type_id: 0x13e50c8a } +member { + id: 0xe8735870 + name: "argv" + type_id: 0x0bb0c019 + offset: 64 +} member { id: 0xe8f87d89 name: "argv" @@ -48417,6 +48893,12 @@ member { type_id: 0x9e8abf4f offset: 192 } +member { + id: 0x5ee21ccd + name: "async_write_error" + type_id: 0x6720d32f + offset: 1792 +} member { id: 0xd1b258a6 name: "at" @@ -51620,6 +52102,12 @@ member { name: "bdev" type_id: 0x0c2e195c } +member { + id: 0x51f02b11 + name: "bdev" + type_id: 0x0c2e195c + offset: 832 +} member { id: 0x51f02ed6 name: "bdev" @@ -51763,6 +52251,12 @@ member { type_id: 0x2eda6351 offset: 1664 } +member { + id: 0x38c2e7fb + name: "begin" + type_id: 0xd0b3a203 + offset: 128 +} member { id: 0x21bcbcbc name: "begin_cpu_access" @@ -52346,6 +52840,12 @@ member { type_id: 0x200a0749 offset: 768 } +member { + id: 0xccd15e20 + name: "bios" + type_id: 0x200a0749 + offset: 576 +} member { id: 0x24640f13 name: "bios_limit" @@ -52922,6 +53422,12 @@ member { type_id: 0x24159bc9 offset: 192 } +member { + id: 0x4280b12f + name: "block" + type_id: 0xd0b3a203 + offset: 448 +} member { id: 0x42990dd1 name: "block" @@ -53000,6 +53506,12 @@ member { type_id: 0x4585663f offset: 160 } +member { + id: 0x3c120643 + name: "block_size" + type_id: 0x4585663f + offset: 896 +} member { id: 0xb034a057 name: "block_start" @@ -53994,6 +54506,11 @@ member { type_id: 0xe62ebf07 offset: 288 } +member { + id: 0x9929500d + name: "bs" + type_id: 0x200a0749 +} member { id: 0xff1a115d name: "bsg_dev" @@ -54824,6 +55341,12 @@ member { type_id: 0x0baa70a7 offset: 736 } +member { + id: 0x215141b0 + name: "buffer_tree" + type_id: 0xeb923a9b + offset: 1472 +} member { id: 0xe613256f name: "buffered" @@ -55474,6 +55997,12 @@ member { type_id: 0x74d29cf1 offset: 992 } +member { + id: 0x60a635ef + name: "busy" + type_id: 0x7722f5fe + offset: 1344 +} member { id: 0x60bc6a32 name: "busy" @@ -56054,6 +56583,12 @@ member { type_id: 0x295c7202 offset: 16 } +member { + id: 0x0f75b561 + name: "c" + type_id: 0x2d01fcba + offset: 960 +} member { id: 0x0fa4ebff name: "c" @@ -58966,6 +59501,12 @@ member { type_id: 0x32941b2b offset: 128 } +member { + id: 0x26d4a9a4 + name: "char2uni" + type_id: 0x2e137a28 + offset: 192 +} member { id: 0xfdbbc663 name: "char_dev" @@ -59072,6 +59613,23 @@ member { type_id: 0x3bc90e1f offset: 704 } +member { + id: 0x551378c2 + name: "charset" + type_id: 0x3e10b518 +} +member { + id: 0x6322a32f + name: "charset2lower" + type_id: 0x384c5795 + offset: 256 +} +member { + id: 0x06048b6e + name: "charset2upper" + type_id: 0x384c5795 + offset: 320 +} member { id: 0x9e156774 name: "check" @@ -60421,6 +60979,12 @@ member { type_id: 0x18bd6530 offset: 3456 } +member { + id: 0xf4c5928f + name: "client_list" + type_id: 0xd3c80119 + offset: 1856 +} member { id: 0xa9f3f07b name: "client_ops" @@ -60954,12 +61518,24 @@ member { name: "clockid" type_id: 0x4478ba6b } +member { + id: 0xf6b3df73 + name: "clone" + type_id: 0x7ccce612 + offset: 320 +} member { id: 0xf6c2da43 name: "clone" type_id: 0x0dc966bc offset: 448 } +member { + id: 0xe7b15fc6 + name: "clone_and_map_rq" + type_id: 0x81034bb7 + offset: 512 +} member { id: 0xcf60e1c3 name: "cloned" @@ -62522,6 +63098,12 @@ member { type_id: 0x6720d32f offset: 11712 } +member { + id: 0x9ad71760 + name: "compaction_in_progress" + type_id: 0x74d29cf1 + offset: 17568 +} member { id: 0x583d51cc name: "companion_ports" @@ -65180,6 +65762,12 @@ member { type_id: 0x07d29d85 offset: 320 } +member { + id: 0xb91305cd + name: "counts" + type_id: 0x5d529b1e + offset: 128 +} member { id: 0x70db1c35 name: "coupled_rdevs" @@ -66546,6 +67134,12 @@ member { type_id: 0x0815495d offset: 37248 } +member { + id: 0x5497e4e5 + name: "crypto_profile" + type_id: 0x08956bf0 + offset: 2304 +} member { id: 0x5497e671 name: "crypto_profile" @@ -66998,6 +67592,12 @@ member { type_id: 0x0f3dfb90 offset: 576 } +member { + id: 0x64f1a684 + name: "ctr" + type_id: 0xec2f5289 + offset: 320 +} member { id: 0x6900647d name: "ctrl" @@ -69335,6 +69935,12 @@ member { type_id: 0x18bd6530 offset: 128 } +member { + id: 0x109b80af + name: "data_mode" + type_id: 0x5d8155a5 + offset: 576 +} member { id: 0x970da8c8 name: "data_offset" @@ -69651,6 +70257,18 @@ member { type_id: 0x18bd6530 offset: 64 } +member { + id: 0x57d05926 + name: "dax_dev" + type_id: 0x35abdbf6 + offset: 1920 +} +member { + id: 0x57d05c19 + name: "dax_dev" + type_id: 0x35abdbf6 + offset: 64 +} member { id: 0x57d05f3f name: "dax_dev" @@ -69663,6 +70281,12 @@ member { type_id: 0xe1a31370 offset: 7680 } +member { + id: 0x830b1efa + name: "dax_recovery_write" + type_id: 0xdbb955db + offset: 1664 +} member { id: 0x08509b5c name: "dax_seed" @@ -69675,6 +70299,12 @@ member { type_id: 0x36691375 offset: 64 } +member { + id: 0xc7158a13 + name: "dax_zero_page_range" + type_id: 0xc272516a + offset: 1600 +} member { id: 0xf540eeb1 name: "db_off" @@ -70920,6 +71550,12 @@ member { type_id: 0xd3c80119 offset: 1408 } +member { + id: 0xf0efa471 + name: "deferred" + type_id: 0x59cf4672 + offset: 2880 +} member { id: 0x17c292e0 name: "deferred_cmd" @@ -70944,6 +71580,12 @@ member { type_id: 0x5e8dc7f4 offset: 576 } +member { + id: 0xa9cf9302 + name: "deferred_lock" + type_id: 0xf313e71a + offset: 2816 +} member { id: 0x94bc1785 name: "deferred_probe" @@ -71572,6 +72214,12 @@ member { type_id: 0x4585663f offset: 2368 } +member { + id: 0x1b2184e9 + name: "depth" + type_id: 0x4585663f + offset: 96 +} member { id: 0x1b218a1d name: "depth" @@ -74157,6 +74805,12 @@ member { type_id: 0xd3c80119 offset: 3328 } +member { + id: 0x33ed565c + name: "devices" + type_id: 0xd3c80119 + offset: 1984 +} member { id: 0x33ed5762 name: "devices" @@ -74836,6 +75490,12 @@ member { type_id: 0x0f08e52a offset: 704 } +member { + id: 0x6b820536 + name: "direct_access" + type_id: 0x5833b757 + offset: 1536 +} member { id: 0x6bfa0272 name: "direct_access" @@ -74985,6 +75645,12 @@ member { type_id: 0x064d6086 offset: 1536 } +member { + id: 0x077f45a8 + name: "dirty_end" + type_id: 0x4585663f + offset: 864 +} member { id: 0xcaa4df71 name: "dirty_exceeded" @@ -75033,6 +75699,12 @@ member { type_id: 0x33756485 offset: 5312 } +member { + id: 0x522ab1e5 + name: "dirty_start" + type_id: 0x4585663f + offset: 832 +} member { id: 0xd7a3d362 name: "dis_hw_timestamp" @@ -75372,6 +76044,13 @@ member { type_id: 0x1f3c8679 offset: 1792 } +member { + id: 0x7a833cf4 + name: "discards_supported" + type_id: 0x6d7f5ff6 + offset: 577 + bitsize: 1 +} member { id: 0x513a35c9 name: "disconn_cfm" @@ -75552,6 +76231,12 @@ member { type_id: 0x2131312a offset: 128 } +member { + id: 0x6071aa84 + name: "disk" + type_id: 0x2131312a + offset: 1856 +} member { id: 0xe00832b6 name: "disk_events_disable_depth" @@ -75874,6 +76559,12 @@ member { type_id: 0x99caa0ae offset: 384 } +member { + id: 0x56ecab6c + name: "dm_io" + type_id: 0x09b53a9f + offset: 1216 +} member { id: 0x811af440 name: "dma" @@ -78453,6 +79144,12 @@ member { name: "dtr" type_id: 0x6d7f5ff6 } +member { + id: 0xb0de17e8 + name: "dtr" + type_id: 0xdee852ab + offset: 384 +} member { id: 0xc9708f00 name: "dtr_rts" @@ -78806,6 +79503,12 @@ member { name: "duration" type_id: 0xc9082b19 } +member { + id: 0x5e3459b5 + name: "duration_ns" + type_id: 0xd5df6730 + offset: 64 +} member { id: 0xd5562c37 name: "duty" @@ -79934,6 +80637,13 @@ member { type_id: 0x6720d32f offset: 8512 } +member { + id: 0x4ccb6a85 + name: "emulate_zone_append" + type_id: 0x6d7f5ff6 + offset: 579 + bitsize: 1 +} member { id: 0x030a11d9 name: "emulated" @@ -80786,6 +81496,18 @@ member { type_id: 0x3b5cc110 offset: 2368 } +member { + id: 0xec2a10b4 + name: "end_io" + type_id: 0x0c483694 + offset: 1152 +} +member { + id: 0xec54a25c + name: "end_io" + type_id: 0x72f27b5e + offset: 640 +} member { id: 0xb9877618 name: "end_io_data" @@ -81779,6 +82501,18 @@ member { type_id: 0x39470e64 offset: 1152 } +member { + id: 0x7f0253e8 + name: "error" + type_id: 0x0483e6f8 + offset: 64 +} +member { + id: 0x7f025c11 + name: "error" + type_id: 0x0483e6f8 + offset: 512 +} member { id: 0x7f4352ad name: "error" @@ -82352,6 +83086,12 @@ member { name: "event_cmd" type_id: 0x8b7a3a75 } +member { + id: 0x5138cba7 + name: "event_context" + type_id: 0x18bd6530 + offset: 2176 +} member { id: 0x93a48b9c name: "event_count" @@ -82387,6 +83127,12 @@ member { type_id: 0xc93e017b offset: 368 } +member { + id: 0xd4abd33d + name: "event_fn" + type_id: 0x0f3dfb90 + offset: 2112 +} member { id: 0x50510202 name: "event_handler" @@ -82512,6 +83258,12 @@ member { type_id: 0x0e4e664a offset: 1344 } +member { + id: 0x56ec2c77 + name: "event_nr" + type_id: 0x74d29cf1 + offset: 3712 +} member { id: 0x5d544312 name: "event_read_lock" @@ -82602,6 +83354,12 @@ member { offset: 64 bitsize: 1 } +member { + id: 0x9f773f87 + name: "eventq" + type_id: 0x03913382 + offset: 3520 +} member { id: 0x110fb720 name: "events" @@ -85589,6 +86347,11 @@ member { type_id: 0x4585663f offset: 1664 } +member { + id: 0xc504f94b + name: "features" + type_id: 0x1c898f28 +} member { id: 0xc531247f name: "features" @@ -88868,6 +89631,12 @@ member { type_id: 0xd41e888f offset: 128 } +member { + id: 0x2dccf0c8 + name: "flags" + type_id: 0xa47a28f3 + offset: 16 +} member { id: 0x2dd0356f name: "flags" @@ -89518,6 +90287,13 @@ member { offset: 1 bitsize: 1 } +member { + id: 0xa1b9c8d2 + name: "flush_supported" + type_id: 0x6d7f5ff6 + offset: 576 + bitsize: 1 +} member { id: 0x702e33bb name: "flush_to" @@ -90887,6 +91663,12 @@ member { type_id: 0x0f3dfb90 offset: 1600 } +member { + id: 0x6458e4c6 + name: "free_buffer_wait" + type_id: 0x03913382 + offset: 1536 +} member { id: 0xc583ca0b name: "free_buffers" @@ -93115,6 +93897,12 @@ member { type_id: 0x0a0607fc offset: 2368 } +member { + id: 0x3a26f97c + name: "geometry" + type_id: 0x4db3b057 + offset: 2240 +} member { id: 0x3a570a9f name: "geometry" @@ -94960,6 +95748,12 @@ member { type_id: 0xd3c80119 offset: 7360 } +member { + id: 0xc81f8729 + name: "global_list" + type_id: 0xd3c80119 + offset: 320 +} member { id: 0x523f440f name: "global_node" @@ -98266,6 +99060,12 @@ member { type_id: 0xc5d9d969 offset: 864 } +member { + id: 0x6da33f40 + name: "highs" + type_id: 0x3ebcd127 + offset: 1728 +} member { id: 0x06f8b424 name: "highspeed" @@ -98461,6 +99261,12 @@ member { type_id: 0x3a47ea7a offset: 1152 } +member { + id: 0xffe3e6f3 + name: "hold_count" + type_id: 0x4585663f + offset: 640 +} member { id: 0x72254387 name: "hold_queue" @@ -98496,6 +99302,12 @@ member { type_id: 0x35dc1d5d offset: 6976 } +member { + id: 0x1f2404cf + name: "holders" + type_id: 0x74d29cf1 + offset: 1536 +} member { id: 0xf82bbc03 name: "holders_dir" @@ -103183,6 +103995,24 @@ member { offset: 1312 bitsize: 1 } +member { + id: 0x63660872 + name: "immutable_target" + type_id: 0x3df0a7d3 + offset: 1600 +} +member { + id: 0xfa2d1749 + name: "immutable_target_type" + type_id: 0x3622fa2a + offset: 1856 +} +member { + id: 0xfa2d1f78 + name: "immutable_target_type" + type_id: 0x3622fa2a + offset: 1664 +} member { id: 0x0239d915 name: "imod_interval" @@ -103718,6 +104548,12 @@ member { name: "index" type_id: 0x5fb59157 } +member { + id: 0xad7a9230 + name: "index" + type_id: 0x439cf6d8 + offset: 640 +} member { id: 0xad7c80e2 name: "index" @@ -104877,6 +105713,13 @@ member { type_id: 0x2c197132 offset: 512 } +member { + id: 0xf51d09e4 + name: "init_tio_pdu" + type_id: 0x6d7f5ff6 + offset: 3936 + bitsize: 1 +} member { id: 0x29079611 name: "init_valid_mask" @@ -105672,12 +106515,26 @@ member { type_id: 0xd41e888f offset: 480 } +member { + id: 0xe590115b + name: "integrity_added" + type_id: 0x4585663f + offset: 1922 + bitsize: 1 +} member { id: 0xb37c96b5 name: "integrity_failed" type_id: 0xe62ebf07 offset: 64 } +member { + id: 0x6f52824f + name: "integrity_supported" + type_id: 0x6d7f5ff6 + offset: 1920 + bitsize: 1 +} member { id: 0x31cd18d3 name: "intensity" @@ -105748,6 +106605,12 @@ member { type_id: 0x914dbfdc offset: 1856 } +member { + id: 0x3cd46820 + name: "interface_ptr" + type_id: 0x18bd6530 + offset: 3456 +} member { id: 0x54b2e4db name: "interfaces" @@ -105855,6 +106718,12 @@ member { type_id: 0x6720d32f offset: 576 } +member { + id: 0x1eb686c0 + name: "internal_suspend_count" + type_id: 0x4585663f + offset: 4672 +} member { id: 0x52285a55 name: "internal_tag" @@ -106431,6 +107300,18 @@ member { type_id: 0x6d7f5ff6 offset: 72 } +member { + id: 0x9d69c21e + name: "io" + type_id: 0x0206e829 + offset: 64 +} +member { + id: 0x5fad2d83 + name: "io_barrier" + type_id: 0xa46efa19 + offset: 6400 +} member { id: 0x7aee4108 name: "io_base" @@ -106449,6 +107330,12 @@ member { type_id: 0x80c20070 offset: 1792 } +member { + id: 0x627115f2 + name: "io_bs" + type_id: 0x200a0749 + offset: 2112 +} member { id: 0x65b934f9 name: "io_buffers_cache" @@ -106491,6 +107378,12 @@ member { type_id: 0x38f320f1 offset: 19456 } +member { + id: 0x43d5e607 + name: "io_count" + type_id: 0x74d29cf1 + offset: 416 +} member { id: 0xa3dbd5d1 name: "io_dev" @@ -106503,6 +107396,12 @@ member { type_id: 0x3c5401fe offset: 192 } +member { + id: 0x4b3c38dc + name: "io_hints" + type_id: 0x5d27fec1 + offset: 1472 +} member { id: 0xfe460429 name: "io_is_busy" @@ -109574,6 +110473,12 @@ member { type_id: 0x2c4043e6 offset: 448 } +member { + id: 0x5a8eeaf5 + name: "iterate_devices" + type_id: 0x4944b34e + offset: 1408 +} member { id: 0x7b221f4e name: "iterate_shared" @@ -110908,6 +111813,12 @@ member { type_id: 0x141ef775 offset: 6144 } +member { + id: 0xd68a69a4 + name: "kobj_holder" + type_id: 0xa1319a08 + offset: 5376 +} member { id: 0x84231c09 name: "kobj_type" @@ -111519,6 +112430,12 @@ member { type_id: 0x33756485 offset: 256 } +member { + id: 0x2660c5df + name: "last" + type_id: 0x0fc3c654 + offset: 512 +} member { id: 0x2667209c name: "last" @@ -111561,6 +112478,12 @@ member { type_id: 0x92233392 offset: 384 } +member { + id: 0x8c1c72c6 + name: "last_accessed" + type_id: 0x33756485 + offset: 768 +} member { id: 0x46917fc8 name: "last_ack" @@ -112092,6 +113015,12 @@ member { type_id: 0x054f691a offset: 1088 } +member { + id: 0xaac934df + name: "last_rw" + type_id: 0x4585663f + offset: 64 +} member { id: 0xa444a488 name: "last_sample_time" @@ -112104,6 +113033,11 @@ member { type_id: 0x92233392 offset: 10560 } +member { + id: 0x0d364652 + name: "last_sector" + type_id: 0xd0b3a203 +} member { id: 0x02f7d82f name: "last_sector_bug" @@ -113357,6 +114291,12 @@ member { name: "len" type_id: 0xc93e017b } +member { + id: 0xb8d56e3d + name: "len" + type_id: 0xd0b3a203 + offset: 192 +} member { id: 0xb8e3f22b name: "len" @@ -113446,6 +114386,12 @@ member { type_id: 0x33756485 offset: 64 } +member { + id: 0x399dce5b + name: "len_ptr" + type_id: 0x1bf16028 + offset: 192 +} member { id: 0xf7528eb9 name: "len_so_far" @@ -113917,6 +114863,13 @@ member { type_id: 0x4585663f offset: 1664 } +member { + id: 0x8bbdb526 + name: "limit_swap_bios" + type_id: 0x6d7f5ff6 + offset: 578 + bitsize: 1 +} member { id: 0x6270d42c name: "limit_valid" @@ -114653,6 +115606,12 @@ member { type_id: 0xd3c80119 offset: 512 } +member { + id: 0x7c00e44f + name: "list" + type_id: 0xd3c80119 + offset: 1856 +} member { id: 0x7c00e5d1 name: "list" @@ -114973,6 +115932,12 @@ member { type_id: 0xd3c80119 offset: 256 } +member { + id: 0x76367e75 + name: "list_mode" + type_id: 0x5d8155a5 + offset: 584 +} member { id: 0xd773d1c8 name: "list_node" @@ -117173,6 +118138,12 @@ member { type_id: 0x360c66c5 offset: 2752 } +member { + id: 0x545a8863 + name: "lru" + type_id: 0x585b40a5 + offset: 448 +} member { id: 0x5484b289 name: "lru" @@ -117208,6 +118179,12 @@ member { type_id: 0x74d29cf1 offset: 49152 } +member { + id: 0x94eba612 + name: "lru_list" + type_id: 0xd3c80119 + offset: 192 +} member { id: 0x50d1f6aa name: "lru_lock" @@ -117756,6 +118733,11 @@ member { name: "magic" type_id: 0xe8034002 } +member { + id: 0xd6baf777 + name: "magic" + type_id: 0xc93e017b +} member { id: 0xd6e31323 name: "magic" @@ -118105,6 +119087,12 @@ member { type_id: 0xb9c7723b offset: 1216 } +member { + id: 0x8d8ccb94 + name: "map" + type_id: 0x7abd5475 + offset: 448 +} member { id: 0x8dbdb056 name: "map" @@ -118162,6 +119150,12 @@ member { type_id: 0x1bf16028 offset: 1664 } +member { + id: 0x8deec674 + name: "map" + type_id: 0x18bd6530 + offset: 896 +} member { id: 0x8df0341e name: "map" @@ -120490,6 +121484,12 @@ member { type_id: 0x33756485 offset: 256 } +member { + id: 0x09343eea + name: "max_io_len" + type_id: 0x1c3dbe5a + offset: 256 +} member { id: 0xf058f4c8 name: "max_keysize" @@ -122355,6 +123355,17 @@ member { type_id: 0x4585663f offset: 640 } +member { + id: 0xff5d592e + name: "md" + type_id: 0x2d77f22a +} +member { + id: 0xff5d5e59 + name: "md" + type_id: 0x2d77f22a + offset: 448 +} member { id: 0x966b766d name: "md_dst" @@ -123088,6 +124099,18 @@ member { type_id: 0x064d6086 offset: 2240 } +member { + id: 0x1f686bd1 + name: "mempools" + type_id: 0x32e4574b + offset: 5312 +} +member { + id: 0x1f686eb8 + name: "mempools" + type_id: 0x32e4574b + offset: 2240 +} member { id: 0xebf8e0ed name: "memregion" @@ -123152,6 +124175,11 @@ member { type_id: 0x0f78a6c8 offset: 128 } +member { + id: 0x037856c6 + name: "merged" + type_id: 0x6d7f5ff6 +} member { id: 0x5052f78e name: "merges" @@ -123187,6 +124215,12 @@ member { type_id: 0xb3e7bac9 offset: 5448 } +member { + id: 0x9de5400c + name: "message" + type_id: 0x4a37c87b + offset: 1152 +} member { id: 0x8cf2c6b7 name: "message_id" @@ -124170,6 +125204,12 @@ member { type_id: 0x0faae5b1 offset: 320 } +member { + id: 0xf910802f + name: "minimum_buffers" + type_id: 0x4585663f + offset: 1440 +} member { id: 0x0eef50fa name: "miniq_egress" @@ -125296,6 +126336,18 @@ member { type_id: 0x5adf57ae offset: 7680 } +member { + id: 0x87085ac9 + name: "mode" + type_id: 0x9547a3da + offset: 1952 +} +member { + id: 0x87085bff + name: "mode" + type_id: 0x9547a3da + offset: 128 +} member { id: 0x8709c295 name: "mode" @@ -127507,6 +128559,12 @@ member { type_id: 0x33756485 offset: 2240 } +member { + id: 0x04227360 + name: "n_buffers" + type_id: 0x607419c2 + offset: 704 +} member { id: 0x650782f7 name: "n_channels" @@ -128008,6 +129066,12 @@ member { name: "name" type_id: 0x4d65b854 } +member { + id: 0x0d9941a0 + name: "name" + type_id: 0x42201dce + offset: 160 +} member { id: 0x0d9944ca name: "name" @@ -128038,6 +129102,12 @@ member { type_id: 0x42201dce offset: 672 } +member { + id: 0x0d994b65 + name: "name" + type_id: 0x42201dce + offset: 1728 +} member { id: 0x0d994c40 name: "name" @@ -129627,6 +130697,12 @@ member { type_id: 0xc9082b19 offset: 32 } +member { + id: 0x9460fdf7 + name: "need_reserved_buffers" + type_id: 0x4585663f + offset: 1408 +} member { id: 0xa5ad7a15 name: "need_retune" @@ -129651,6 +130727,12 @@ member { type_id: 0x6d7f5ff6 offset: 8 } +member { + id: 0x247d2bc2 + name: "need_shrink" + type_id: 0xb02b353a + offset: 2880 +} member { id: 0x394e18c1 name: "need_sync" @@ -129714,6 +130796,13 @@ member { offset: 325 bitsize: 1 } +member { + id: 0xf55a45f8 + name: "needs_bio_set_dev" + type_id: 0x6d7f5ff6 + offset: 581 + bitsize: 1 +} member { id: 0x87f2640c name: "needs_force_resume" @@ -130551,6 +131640,12 @@ member { type_id: 0x0379fcff offset: 128 } +member { + id: 0x11f10efe + name: "next" + type_id: 0x0206e829 + offset: 192 +} member { id: 0x11f1c380 name: "next" @@ -130574,6 +131669,12 @@ member { type_id: 0x015f6fbc offset: 896 } +member { + id: 0x11f3dd43 + name: "next" + type_id: 0x00daeb4b + offset: 448 +} member { id: 0x11f3fee9 name: "next" @@ -130861,6 +131962,12 @@ member { type_id: 0x2e8d5f05 offset: 1856 } +member { + id: 0x7cd3c1cb + name: "next_sector" + type_id: 0xd0b3a203 + offset: 64 +} member { id: 0x430d2e4c name: "next_seq" @@ -131794,6 +132901,12 @@ member { offset: 275 bitsize: 1 } +member { + id: 0xec4c530d + name: "no_sleep" + type_id: 0x6d7f5ff6 + offset: 416 +} member { id: 0x1ccebffc name: "no_start_on_add" @@ -134073,6 +135186,12 @@ member { type_id: 0x6720d32f offset: 51840 } +member { + id: 0x42b6c2d1 + name: "nr_zones" + type_id: 0x4585663f + offset: 10240 +} member { id: 0x42b6ca98 name: "nr_zones" @@ -134486,6 +135605,12 @@ member { type_id: 0x295c7202 offset: 40 } +member { + id: 0x197cb73f + name: "num_allocated" + type_id: 0x4585663f + offset: 1696 +} member { id: 0xf074f928 name: "num_alt_modes" @@ -134866,6 +135991,12 @@ member { type_id: 0xc9082b19 offset: 64 } +member { + id: 0xe8ffd602 + name: "num_discard_bios" + type_id: 0x4585663f + offset: 320 +} member { id: 0x9494166e name: "num_domains" @@ -134985,6 +136116,12 @@ member { type_id: 0x6720d32f offset: 7552 } +member { + id: 0xf997f643 + name: "num_flush_bios" + type_id: 0x4585663f + offset: 288 +} member { id: 0x7bcccefc name: "num_formats" @@ -135718,6 +136855,12 @@ member { type_id: 0x27a7c613 offset: 128 } +member { + id: 0x772e5751 + name: "num_secure_erase_bios" + type_id: 0x4585663f + offset: 352 +} member { id: 0xab5509da name: "num_segs" @@ -135874,6 +137017,12 @@ member { type_id: 0x4585663f offset: 64 } +member { + id: 0x0e2a551a + name: "num_targets" + type_id: 0x4585663f + offset: 1664 +} member { id: 0x72a5b6f7 name: "num_tbps" @@ -136042,6 +137191,12 @@ member { type_id: 0x4585663f offset: 7616 } +member { + id: 0x4fa0a319 + name: "num_write_zeroes_bios" + type_id: 0x4585663f + offset: 384 +} member { id: 0xd474418d name: "numa_node" @@ -136078,6 +137233,12 @@ member { type_id: 0x6720d32f offset: 8480 } +member { + id: 0x0f379684 + name: "numa_node_id" + type_id: 0x6720d32f + offset: 1440 +} member { id: 0x35834d78 name: "numa_pwq_tbl" @@ -137375,6 +138536,12 @@ member { type_id: 0xe62ebf07 offset: 96 } +member { + id: 0x1293b17d + name: "old_sector" + type_id: 0xd0b3a203 + offset: 256 +} member { id: 0xa9aee94d name: "old_sk_destruct" @@ -138003,6 +139170,12 @@ member { type_id: 0x6720d32f offset: 64 } +member { + id: 0x3961e57f + name: "open_count" + type_id: 0x74d29cf1 + offset: 1568 +} member { id: 0x3961e85c name: "open_count" @@ -139190,6 +140363,24 @@ member { name: "orig_addr" type_id: 0xbdd18903 } +member { + id: 0xd07b78d9 + name: "orig_bio" + type_id: 0x15a30023 + offset: 512 +} +member { + id: 0x17637816 + name: "orig_cb" + type_id: 0xfc2c3062 + offset: 192 +} +member { + id: 0x9772cb65 + name: "orig_data" + type_id: 0x18bd6530 + offset: 128 +} member { id: 0x25ffe762 name: "orig_description" @@ -143583,6 +144774,12 @@ member { type_id: 0x74d29cf1 offset: 256 } +member { + id: 0x4c3543b9 + name: "pending_io" + type_id: 0x064d6086 + offset: 2176 +} member { id: 0x9f9c13ba name: "pending_irq" @@ -143759,6 +144956,12 @@ member { type_id: 0x2f5f8053 offset: 768 } +member { + id: 0x319b41b8 + name: "per_io_data_size" + type_id: 0x4585663f + offset: 416 +} member { id: 0xd61b14f9 name: "per_parent_data" @@ -147157,6 +148360,11 @@ member { type_id: 0xb914bfab offset: 10048 } +member { + id: 0xde69b270 + name: "pool" + type_id: 0xe97fe194 +} member { id: 0xde82c205 name: "pool" @@ -147989,6 +149197,12 @@ member { type_id: 0x2c78b884 offset: 64 } +member { + id: 0xc58884a8 + name: "postsuspend" + type_id: 0x540fc033 + offset: 896 +} member { id: 0x5016a0d8 name: "potential_contaminant" @@ -148771,6 +149985,12 @@ member { type_id: 0x2c831d6e offset: 704 } +member { + id: 0x552de7df + name: "precise_timestamps" + type_id: 0x6d7f5ff6 + offset: 576 +} member { id: 0x5f1f9d63 name: "precision" @@ -149100,6 +150320,12 @@ member { type_id: 0x2ea6d809 offset: 832 } +member { + id: 0xd1d88fb4 + name: "prepare_ioctl" + type_id: 0xb5818a23 + offset: 1216 +} member { id: 0x25513c26 name: "prepare_late" @@ -149213,6 +150439,12 @@ member { type_id: 0x287dadb4 offset: 3648 } +member { + id: 0xc22f1b4d + name: "preresume" + type_id: 0xcd86b17c + offset: 960 +} member { id: 0x34aa29cb name: "present" @@ -149255,6 +150487,18 @@ member { type_id: 0x6d7f5ff6 offset: 6312 } +member { + id: 0x542288b2 + name: "presuspend" + type_id: 0xeab0ac41 + offset: 768 +} +member { + id: 0x8a92bcd2 + name: "presuspend_undo" + type_id: 0xa3284d98 + offset: 832 +} member { id: 0xedbb0da6 name: "pretimeout" @@ -153607,6 +154851,12 @@ member { name: "queue" type_id: 0x09427c40 } +member { + id: 0xaddb4c9f + name: "queue" + type_id: 0x09427c40 + offset: 1472 +} member { id: 0xaddb4cea name: "queue" @@ -156376,6 +157626,12 @@ member { type_id: 0x2e103219 offset: 256 } +member { + id: 0xffa6c51e + name: "read_error" + type_id: 0x7be80061 + offset: 592 +} member { id: 0x26d2a405 name: "read_event_config" @@ -159212,6 +160468,12 @@ member { type_id: 0x2f8ebbca offset: 64 } +member { + id: 0x2e40d714 + name: "release_clone_rq" + type_id: 0x1ce28cf1 + offset: 576 +} member { id: 0x06fc76ed name: "release_completion" @@ -160188,6 +161450,12 @@ member { name: "report_type" type_id: 0xe62ebf07 } +member { + id: 0x0d0ed2a2 + name: "report_zones" + type_id: 0xb0c08c5a + offset: 1280 +} member { id: 0x0d9120ed name: "report_zones" @@ -160766,6 +162034,12 @@ member { type_id: 0x0f79fcf8 offset: 256 } +member { + id: 0xee14c6d9 + name: "requeue_list" + type_id: 0x0206e829 + offset: 3392 +} member { id: 0xeec50ace name: "requeue_list" @@ -160790,6 +162064,12 @@ member { type_id: 0x1f3c8679 offset: 18752 } +member { + id: 0x37483f88 + name: "requeue_work" + type_id: 0x1f3c8679 + offset: 3008 +} member { id: 0x37a61301 name: "requeue_work" @@ -161697,6 +162977,12 @@ member { type_id: 0x295c7202 offset: 8 } +member { + id: 0x9a257ac5 + name: "reserved_buffers" + type_id: 0xd3c80119 + offset: 1280 +} member { id: 0xaa963da5 name: "reserved_char" @@ -162663,6 +163949,12 @@ member { type_id: 0x2c18712b offset: 2624 } +member { + id: 0xcae841ae + name: "resume" + type_id: 0x77a6dd29 + offset: 1024 +} member { id: 0xa4d8edf6 name: "resume_done" @@ -164134,6 +165426,12 @@ member { type_id: 0xd5df6730 offset: 28544 } +member { + id: 0x37cf0b9e + name: "rq_end_io" + type_id: 0xabcaeaec + offset: 704 +} member { id: 0x97cc8149 name: "rq_flags" @@ -167608,6 +168906,11 @@ member { type_id: 0x92233392 offset: 64 } +member { + id: 0x653b6170 + name: "saved_state" + type_id: 0x4585663f +} member { id: 0x72f4c281 name: "saved_syn" @@ -169173,6 +170476,12 @@ member { type_id: 0xd0b3a203 offset: 384 } +member { + id: 0xf705dc19 + name: "sector_offset" + type_id: 0x4585663f + offset: 576 +} member { id: 0x173ce3ee name: "sector_size" @@ -169185,6 +170494,12 @@ member { type_id: 0x4585663f offset: 320 } +member { + id: 0x3721dfe0 + name: "sectors" + type_id: 0x4585663f + offset: 608 +} member { id: 0x3739d0c7 name: "sectors" @@ -169197,6 +170512,12 @@ member { type_id: 0x80904a3b offset: 256 } +member { + id: 0x0b50257c + name: "sectors_per_block_bits" + type_id: 0x29b77961 + offset: 928 +} member { id: 0xb0199c94 name: "secure_elements" @@ -173283,6 +174604,18 @@ member { offset: 22113 bitsize: 1 } +member { + id: 0x133be164 + name: "shrink_work" + type_id: 0x1f3c8679 + offset: 2496 +} +member { + id: 0x868ca1f0 + name: "shrinker" + type_id: 0xb4975242 + offset: 1984 +} member { id: 0x868caa9e name: "shrinker" @@ -173878,6 +175211,13 @@ member { name: "single_show" type_id: 0x2d8ee262 } +member { + id: 0xdf12b226 + name: "singleton" + type_id: 0x6d7f5ff6 + offset: 1921 + bitsize: 1 +} member { id: 0x5c8384f3 name: "sink" @@ -175481,6 +176821,18 @@ member { type_id: 0x2efd5036 offset: 64 } +member { + id: 0xd9ef0498 + name: "slab_buffer" + type_id: 0x2efd5036 + offset: 1088 +} +member { + id: 0x031120c5 + name: "slab_cache" + type_id: 0x2efd5036 + offset: 1152 +} member { id: 0x031126d0 name: "slab_cache" @@ -177066,6 +178418,12 @@ member { name: "spinlock" type_id: 0xf313e71a } +member { + id: 0x9a7d31f4 + name: "spinlock" + type_id: 0xf313e71a + offset: 384 +} member { id: 0x9a7d37a1 name: "spinlock" @@ -178616,6 +179974,18 @@ member { type_id: 0xbdd18903 offset: 128 } +member { + id: 0x46cb8735 + name: "start" + type_id: 0xd0b3a203 + offset: 320 +} +member { + id: 0x46cb87d7 + name: "start" + type_id: 0xd0b3a203 + offset: 1728 +} member { id: 0x46d23b7b name: "start" @@ -178866,6 +180236,12 @@ member { type_id: 0x33756485 offset: 2112 } +member { + id: 0xa3682aac + name: "start_time" + type_id: 0x33756485 + offset: 64 +} member { id: 0xa3c97b9b name: "start_time" @@ -179329,6 +180705,12 @@ member { type_id: 0x33756485 offset: 1664 } +member { + id: 0x72c08b58 + name: "state" + type_id: 0x33756485 + offset: 704 +} member { id: 0x72c08d84 name: "state" @@ -180000,6 +181382,12 @@ member { type_id: 0x29b1eb4b offset: 256 } +member { + id: 0xb95d079c + name: "stats" + type_id: 0x286f60a3 + offset: 4032 +} member { id: 0xb96dd5c1 name: "stats" @@ -180047,6 +181435,12 @@ member { type_id: 0x815cddc3 offset: 1664 } +member { + id: 0x96627cf8 + name: "stats_aux" + type_id: 0xb4683157 + offset: 256 +} member { id: 0x4fb8f148 name: "stats_block_coalesce_usecs" @@ -180124,6 +181518,12 @@ member { type_id: 0x6720d32f offset: 96 } +member { + id: 0x201cce16 + name: "status" + type_id: 0x7be80061 + offset: 384 +} member { id: 0x2022a603 name: "status" @@ -180295,6 +181695,12 @@ member { type_id: 0xc9082b19 offset: 64 } +member { + id: 0x20dd7873 + name: "status" + type_id: 0xba528163 + offset: 1088 +} member { id: 0x20fcc1ce name: "status" @@ -182378,6 +183784,11 @@ member { type_id: 0x2dd58efa offset: 512 } +member { + id: 0x13692fb1 + name: "suspend_lock" + type_id: 0xa7c362b0 +} member { id: 0x86f0bc08 name: "suspend_noirq" @@ -182682,6 +184093,24 @@ member { type_id: 0x2fd46ff4 offset: 1088 } +member { + id: 0x69e5d3c9 + name: "swap_bios" + type_id: 0x6720d32f + offset: 4704 +} +member { + id: 0xcec5b332 + name: "swap_bios_lock" + type_id: 0xa7c362b0 + offset: 4928 +} +member { + id: 0xec6548f1 + name: "swap_bios_semaphore" + type_id: 0x6e3b7d7f + offset: 4736 +} member { id: 0xc43ef2ec name: "swap_complete" @@ -184454,6 +185883,11 @@ member { name: "table" type_id: 0x28d027d4 } +member { + id: 0xb6c41435 + name: "table" + type_id: 0x2f24a589 +} member { id: 0xb6cd92ad name: "table" @@ -184480,6 +185914,18 @@ member { type_id: 0x6720d32f offset: 672 } +member { + id: 0x0d77c97c + name: "table_devices" + type_id: 0xd3c80119 + offset: 768 +} +member { + id: 0x72b151f9 + name: "table_devices_lock" + type_id: 0xa7c362b0 + offset: 384 +} member { id: 0x4df2d47b name: "table_fulls" @@ -184588,6 +186034,12 @@ member { type_id: 0x99433372 offset: 128 } +member { + id: 0x0de002cb + name: "tag_set" + type_id: 0x2cc0f57b + offset: 3968 +} member { id: 0x0de00aa5 name: "tag_set" @@ -184925,6 +186377,12 @@ member { type_id: 0x66f6fc33 offset: 256 } +member { + id: 0x6669afd1 + name: "target_bio_nr" + type_id: 0x4585663f + offset: 32 +} member { id: 0xa2d76a12 name: "target_blocked" @@ -185112,6 +186570,12 @@ member { type_id: 0x0d107c2b offset: 64 } +member { + id: 0x1623d50f + name: "targets" + type_id: 0x3df0a7d3 + offset: 1792 +} member { id: 0x167e5754 name: "targets" @@ -186365,6 +187829,11 @@ member { type_id: 0x49b889e7 offset: 12704 } +member { + id: 0x7cd9a358 + name: "tgt" + type_id: 0x3df0a7d3 +} member { id: 0x07611cab name: "tgt_index" @@ -186766,6 +188235,12 @@ member { type_id: 0x09427c40 offset: 23232 } +member { + id: 0x1e282dde + name: "ti" + type_id: 0x3df0a7d3 + offset: 128 +} member { id: 0xe879699b name: "tick" @@ -187684,6 +189159,12 @@ member { name: "timings" type_id: 0x9699a1e3 } +member { + id: 0x2c593fc1 + name: "tio" + type_id: 0xd16b19a7 + offset: 640 +} member { id: 0x73627a10 name: "tiocmget" @@ -192025,6 +193506,12 @@ member { name: "type" type_id: 0x368ec5cb } +member { + id: 0x5c60f365 + name: "type" + type_id: 0x3622fa2a + offset: 64 +} member { id: 0x5c61158d name: "type" @@ -192314,6 +193801,18 @@ member { type_id: 0xfdb649ac offset: 32 } +member { + id: 0x5cab8146 + name: "type" + type_id: 0xfd56cb64 + offset: 1408 +} +member { + id: 0x5cab8754 + name: "type" + type_id: 0xfd56cb64 + offset: 64 +} member { id: 0x5cac8829 name: "type" @@ -192724,6 +194223,12 @@ member { type_id: 0xf313e71a offset: 352 } +member { + id: 0xc5f5f87e + name: "type_lock" + type_id: 0xa7c362b0 + offset: 1024 +} member { id: 0xe2794a8c name: "type_names" @@ -193605,12 +195110,30 @@ member { type_id: 0x2de090d3 offset: 448 } +member { + id: 0x1704d15b + name: "uevent_list" + type_id: 0xd3c80119 + offset: 3776 +} +member { + id: 0xdc003eed + name: "uevent_lock" + type_id: 0xf313e71a + offset: 3904 +} member { id: 0x7a23f532 name: "uevent_ops" type_id: 0x3fdb8af3 offset: 960 } +member { + id: 0x271c2c01 + name: "uevent_seq" + type_id: 0x74d29cf1 + offset: 3744 +} member { id: 0x069b6afd name: "uevent_sock" @@ -194131,6 +195654,12 @@ member { type_id: 0x0f626ee5 offset: 1408 } +member { + id: 0xe6eaad3f + name: "uni2char" + type_id: 0x2d34349d + offset: 128 +} member { id: 0xb7a98fcb name: "uniq" @@ -197352,6 +198881,12 @@ member { type_id: 0x0483e6f8 offset: 64 } +member { + id: 0xa010e540 + name: "value" + type_id: 0x18bd6530 + offset: 64 +} member { id: 0xa010e863 name: "value" @@ -197483,6 +199018,12 @@ member { name: "value64" type_id: 0xdd6eef0a } +member { + id: 0x9bef952d + name: "value_len" + type_id: 0xf435685e + offset: 128 +} member { id: 0x0e144f7f name: "value_offset" @@ -198283,6 +199824,12 @@ member { type_id: 0x3e10b518 offset: 128 } +member { + id: 0xa662981f + name: "version" + type_id: 0x03a4acbb + offset: 192 +} member { id: 0xa66a9aeb name: "version" @@ -200397,6 +201944,12 @@ member { type_id: 0x03913382 offset: 7488 } +member { + id: 0x202d9516 + name: "wait" + type_id: 0x03913382 + offset: 1984 +} member { id: 0x202d9556 name: "wait" @@ -201919,6 +203472,12 @@ member { type_id: 0x1f3c8679 offset: 2176 } +member { + id: 0xd6e6623f + name: "work" + type_id: 0x1f3c8679 + offset: 2432 +} member { id: 0xd6e66356 name: "work" @@ -202373,6 +203932,12 @@ member { type_id: 0x13f8b706 offset: 1152 } +member { + id: 0x22fae506 + name: "wq" + type_id: 0x13f8b706 + offset: 2368 +} member { id: 0x22fae76b name: "wq" @@ -202726,6 +204291,12 @@ member { type_id: 0xedf277ba offset: 2048 } +member { + id: 0x6cd173ed + name: "write_callback" + type_id: 0x0c33de94 + offset: 1024 +} member { id: 0xf2bc2b47 name: "write_char" @@ -202773,6 +204344,18 @@ member { type_id: 0x2c691ecf offset: 384 } +member { + id: 0xdc734cb7 + name: "write_end" + type_id: 0x4585663f + offset: 928 +} +member { + id: 0x6d2dbcdf + name: "write_error" + type_id: 0x7be80061 + offset: 600 +} member { id: 0x2d1f9b2d name: "write_event_config" @@ -202869,6 +204452,12 @@ member { type_id: 0x0dee87ef offset: 192 } +member { + id: 0x32aed56a + name: "write_list" + type_id: 0xd3c80119 + offset: 1024 +} member { id: 0x3b7c6234 name: "write_lock" @@ -202991,6 +204580,12 @@ member { type_id: 0x7ca48629 offset: 1856 } +member { + id: 0xb4ed2fb3 + name: "write_start" + type_id: 0x4585663f + offset: 896 +} member { id: 0x8b22f978 name: "write_started" @@ -204325,6 +205920,12 @@ member { type_id: 0x18bd6530 offset: 64 } +member { + id: 0x7e8b2a1f + name: "zone_idx" + type_id: 0x4585663f + offset: 256 +} member { id: 0x7ea98be0 name: "zone_idx" @@ -204380,6 +205981,12 @@ member { type_id: 0x2efd5036 offset: 16448 } +member { + id: 0x2137fd7f + name: "zwp_offset" + type_id: 0x1bf16028 + offset: 10304 +} member { id: 0x6006a5e2 name: "zx_wakeup_clear_needed" @@ -208770,6 +210377,16 @@ struct_union { member_id: 0xca60e328 } } +struct_union { + id: 0x4fbdc803 + kind: UNION + definition { + bytesize: 8 + member_id: 0x653b6170 + member_id: 0x27000c61 + member_id: 0x36752b74 + } +} struct_union { id: 0x4fd8e877 kind: UNION @@ -219638,6 +221255,268 @@ struct_union { member_id: 0xb20c2eb5 } } +struct_union { + id: 0x08726260 + kind: STRUCT + name: "dm_arg" + definition { + bytesize: 16 + member_id: 0xf9d5048c + member_id: 0x97b38f9c + member_id: 0x7f0253e8 + } +} +struct_union { + id: 0x84f84d67 + kind: STRUCT + name: "dm_arg_set" + definition { + bytesize: 16 + member_id: 0x2075b8f0 + member_id: 0xe8735870 + } +} +struct_union { + id: 0x8b3c3364 + kind: STRUCT + name: "dm_buffer" + definition { + bytesize: 152 + member_id: 0x0f470b14 + member_id: 0x94eba612 + member_id: 0xc81f8729 + member_id: 0x4280b12f + member_id: 0xff8a9211 + member_id: 0x109b80af + member_id: 0x76367e75 + member_id: 0xffa6c51e + member_id: 0x6d2dbcdf + member_id: 0xc0138ce8 + member_id: 0xffe3e6f3 + member_id: 0x72c08b58 + member_id: 0x8c1c72c6 + member_id: 0x522ab1e5 + member_id: 0x077f45a8 + member_id: 0xb4ed2fb3 + member_id: 0xdc734cb7 + member_id: 0x0f75b561 + member_id: 0x32aed56a + member_id: 0xec2a10b4 + } +} +struct_union { + id: 0x9e471477 + kind: STRUCT + name: "dm_bufio_client" + definition { + bytesize: 368 + member_id: 0x2d4b3c00 + member_id: 0x9a7d31f4 + member_id: 0xec4c530d + member_id: 0x545a8863 + member_id: 0x04227360 + member_id: 0x51f02b11 + member_id: 0x3c120643 + member_id: 0x0b50257c + member_id: 0xa0650951 + member_id: 0x6cd173ed + member_id: 0xd9ef0498 + member_id: 0x031120c5 + member_id: 0x56ecab6c + member_id: 0x9a257ac5 + member_id: 0x9460fdf7 + member_id: 0xf910802f + member_id: 0x215141b0 + member_id: 0x6458e4c6 + member_id: 0x46cb87d7 + member_id: 0x5ee21ccd + member_id: 0xf4c5928f + member_id: 0x868ca1f0 + member_id: 0x133be164 + member_id: 0x247d2bc2 + } +} +struct_union { + id: 0x5f5259bd + kind: STRUCT + name: "dm_dev" + definition { + bytesize: 40 + member_id: 0x51f028ab + member_id: 0x57d05c19 + member_id: 0x87085bff + member_id: 0x0d9941a0 + } +} +struct_union { + id: 0x225b463b + kind: STRUCT + name: "dm_io" + definition { + bytesize: 280 + member_id: 0xd6baf777 + member_id: 0x2dccf0c8 + member_id: 0x2d1fe1be + member_id: 0xa3682aac + member_id: 0xff8a90cb + member_id: 0x11f10efe + member_id: 0x96627cf8 + member_id: 0x201cce16 + member_id: 0x43d5e607 + member_id: 0xff5d5e59 + member_id: 0xd07b78d9 + member_id: 0xf705dc19 + member_id: 0x3721dfe0 + member_id: 0x2c593fc1 + } +} +struct_union { + id: 0x0c940ce3 + kind: STRUCT + name: "dm_io_client" + definition { + bytesize: 336 + member_id: 0xde69b270 + member_id: 0xccd15e20 + } +} +struct_union { + id: 0xa1319a08 + kind: STRUCT + name: "dm_kobject_holder" + definition { + bytesize: 128 + member_id: 0x452b206c + member_id: 0xc494a473 + } +} +struct_union { + id: 0xe1d1bbb1 + kind: STRUCT + name: "dm_md_mempools" + definition { + bytesize: 528 + member_id: 0x9929500d + member_id: 0x627115f2 + } +} +struct_union { + id: 0xd2e99e69 + kind: STRUCT + name: "dm_report_zones_args" + definition { + bytesize: 48 + member_id: 0x7cd9a358 + member_id: 0x7cd3c1cb + member_id: 0x9772cb65 + member_id: 0x17637816 + member_id: 0x7e8b2a1f + member_id: 0x46cb8735 + } +} +struct_union { + id: 0x286f60a3 + kind: STRUCT + name: "dm_stats" + definition { + bytesize: 80 + member_id: 0xad898302 + member_id: 0x7c00eec0 + member_id: 0x2660c5df + member_id: 0x552de7df + } +} +struct_union { + id: 0xb4683157 + kind: STRUCT + name: "dm_stats_aux" + definition { + bytesize: 16 + member_id: 0x037856c6 + member_id: 0x5e3459b5 + } +} +struct_union { + id: 0x154fffcf + kind: STRUCT + name: "dm_stats_last_position" + definition { + bytesize: 16 + member_id: 0x0d364652 + member_id: 0xaac934df + } +} +struct_union { + id: 0x96d270ba + kind: STRUCT + name: "dm_table" + definition { + bytesize: 296 + member_id: 0xff5d592e + member_id: 0x5cab8754 + member_id: 0x1b2184e9 + member_id: 0xb91305cd + member_id: 0xad7a9230 + member_id: 0x0e2a551a + member_id: 0x197cb73f + member_id: 0x6da33f40 + member_id: 0x1623d50f + member_id: 0xfa2d1749 + member_id: 0x6f52824f + member_id: 0xdf12b226 + member_id: 0xe590115b + member_id: 0x87085ac9 + member_id: 0x33ed565c + member_id: 0xd4abd33d + member_id: 0x5138cba7 + member_id: 0x1f686eb8 + member_id: 0x5497e4e5 + } +} +struct_union { + id: 0xdd8279d0 + kind: STRUCT + name: "dm_target" + definition { + bytesize: 96 + member_id: 0xb6c41435 + member_id: 0x5c60f365 + member_id: 0x38c2e7fb + member_id: 0xb8d56e3d + member_id: 0x09343eea + member_id: 0xf997f643 + member_id: 0xe8ffd602 + member_id: 0x772e5751 + member_id: 0x4fa0a319 + member_id: 0x319b41b8 + member_id: 0x917961c4 + member_id: 0x7f025c11 + member_id: 0xa1b9c8d2 + member_id: 0x7a833cf4 + member_id: 0x8bbdb526 + member_id: 0x4ccb6a85 + member_id: 0x1a19769d + member_id: 0xf55a45f8 + member_id: 0x2d08134b + member_id: 0x63760b9f + } +} +struct_union { + id: 0xd16b19a7 + kind: STRUCT + name: "dm_target_io" + definition { + bytesize: 200 + member_id: 0xd6baf777 + member_id: 0x2dccf0c8 + member_id: 0x6669afd1 + member_id: 0x9d69c21e + member_id: 0x1e282dde + member_id: 0x399dce5b + member_id: 0x1293b17d + member_id: 0xf6b3df73 + } +} struct_union { id: 0x906b8630 kind: STRUCT @@ -235223,6 +237102,15 @@ struct_union { member_id: 0xd590f436 } } +struct_union { + id: 0xc5d806af + kind: UNION + name: "map_info" + definition { + bytesize: 8 + member_id: 0x46e877b0 + } +} struct_union { id: 0xbd562aba kind: STRUCT @@ -235251,6 +237139,57 @@ struct_union { member_id: 0x7cfb135c } } +struct_union { + id: 0x9f9f2e37 + kind: STRUCT + name: "mapped_device" + definition { + bytesize: 1296 + member_id: 0x13692fb1 + member_id: 0x72b151f9 + member_id: 0x0d77c97c + member_id: 0x8deec674 + member_id: 0x2d5bf9c9 + member_id: 0xc5f5f87e + member_id: 0x5cab8146 + member_id: 0x0f379684 + member_id: 0xaddb4c9f + member_id: 0x1f2404cf + member_id: 0x3961e57f + member_id: 0x63660872 + member_id: 0xfa2d1f78 + member_id: 0x0d994b65 + member_id: 0x6071aa84 + member_id: 0x57d05926 + member_id: 0x202d9516 + member_id: 0x4c3543b9 + member_id: 0x3a26f97c + member_id: 0x22fae506 + member_id: 0xd6e6623f + member_id: 0xa9cf9302 + member_id: 0xf0efa471 + member_id: 0x37483f88 + member_id: 0xee14c6d9 + member_id: 0x3cd46820 + member_id: 0x9f773f87 + member_id: 0x56ec2c77 + member_id: 0x271c2c01 + member_id: 0x1704d15b + member_id: 0xdc003eed + member_id: 0xf51d09e4 + member_id: 0x0de002cb + member_id: 0xb95d079c + member_id: 0x1eb686c0 + member_id: 0x69e5d3c9 + member_id: 0xec6548f1 + member_id: 0xcec5b332 + member_id: 0x1f686bd1 + member_id: 0xd68a69a4 + member_id: 0x5fad2d83 + member_id: 0x42b6c2d1 + member_id: 0x2137fd7f + } +} struct_union { id: 0x29d77c73 kind: STRUCT @@ -239456,6 +241395,22 @@ struct_union { member_id: 0x7bb01964 } } +struct_union { + id: 0x292b4bb0 + kind: STRUCT + name: "nls_table" + definition { + bytesize: 64 + member_id: 0x551378c2 + member_id: 0x25050ebe + member_id: 0xe6eaad3f + member_id: 0x26d4a9a4 + member_id: 0x6322a32f + member_id: 0x06048b6e + member_id: 0x4a9653c2 + member_id: 0x11f3dd43 + } +} struct_union { id: 0x594b6ab2 kind: STRUCT @@ -253033,6 +254988,43 @@ struct_union { member_id: 0xd1fdbf5e } } +struct_union { + id: 0xf2cb0e35 + kind: STRUCT + name: "target_type" + definition { + bytesize: 248 + member_id: 0xc504f94b + member_id: 0x0de57809 + member_id: 0x965f1ffc + member_id: 0xa662981f + member_id: 0x64f1a684 + member_id: 0xb0de17e8 + member_id: 0x8d8ccb94 + member_id: 0xe7b15fc6 + member_id: 0x2e40d714 + member_id: 0xec54a25c + member_id: 0x37cf0b9e + member_id: 0x542288b2 + member_id: 0x8a92bcd2 + member_id: 0xc58884a8 + member_id: 0xc22f1b4d + member_id: 0xcae841ae + member_id: 0x20dd7873 + member_id: 0x9de5400c + member_id: 0xd1d88fb4 + member_id: 0x0d0ed2a2 + member_id: 0x60a635ef + member_id: 0x5a8eeaf5 + member_id: 0x4b3c38dc + member_id: 0x6b820536 + member_id: 0xc7158a13 + member_id: 0x830b1efa + member_id: 0x2d081217 + member_id: 0x63760fd1 + member_id: 0x7c00e44f + } +} struct_union { id: 0x4e9556c5 kind: STRUCT @@ -253323,7 +255315,7 @@ struct_union { member_id: 0xedf50137 member_id: 0xd666cd53 member_id: 0x9a3ad7bf - member_id: 0x2d081767 + member_id: 0x3024ec51 member_id: 0x63760531 member_id: 0xac894e97 member_id: 0xe0f63fac @@ -263724,6 +265716,17 @@ struct_union { member_id: 0xfbed12c2 } } +struct_union { + id: 0xbf3a351e + kind: STRUCT + name: "xattr" + definition { + bytesize: 24 + member_id: 0x0de57ce8 + member_id: 0xa010e540 + member_id: 0x9bef952d + } +} struct_union { id: 0x1016eff1 kind: STRUCT @@ -265100,6 +267103,7 @@ struct_union { member_id: 0x868caa9e member_id: 0x8a67a9e5 member_id: 0x2d1fe43b + member_id: 0x9ad71760 } } struct_union { @@ -265120,6 +267124,23 @@ struct_union { member_id: 0x739d7255 } } +enumeration { + id: 0x42178190 + definition { + underlying_type_id: 0x4585663f + enumerator { + name: "STATUSTYPE_INFO" + } + enumerator { + name: "STATUSTYPE_TABLE" + value: 1 + } + enumerator { + name: "STATUSTYPE_IMA" + value: 2 + } + } +} enumeration { id: 0x4f34306c definition { @@ -270222,6 +272243,28 @@ enumeration { } } } +enumeration { + id: 0xfd56cb64 + name: "dm_queue_mode" + definition { + underlying_type_id: 0x4585663f + enumerator { + name: "DM_TYPE_NONE" + } + enumerator { + name: "DM_TYPE_BIO_BASED" + value: 1 + } + enumerator { + name: "DM_TYPE_REQUEST_BASED" + value: 2 + } + enumerator { + name: "DM_TYPE_DAX_BIO_BASED" + value: 3 + } + } +} enumeration { id: 0x3e09ba9c name: "dma_ctrl_flags" @@ -271210,6 +273253,24 @@ enumeration { } } } +enumeration { + id: 0x63bb62a2 + name: "error_detector" + definition { + underlying_type_id: 0x4585663f + enumerator { + name: "ERROR_DETECTOR_KFENCE" + } + enumerator { + name: "ERROR_DETECTOR_KASAN" + value: 1 + } + enumerator { + name: "ERROR_DETECTOR_WARN" + value: 2 + } + } +} enumeration { id: 0xcd568da6 name: "ethtool_link_ext_state" @@ -282009,6 +284070,14 @@ function { return_type_id: 0x48b5725f parameter_id: 0x6720d32f } +function { + id: 0x097c3ebf + return_type_id: 0x48b5725f + parameter_id: 0x6720d32f + parameter_id: 0x0ccdc0f9 + parameter_id: 0x7b64642a + parameter_id: 0x6d7f5ff6 +} function { id: 0x098158fd return_type_id: 0x48b5725f @@ -282580,6 +284649,13 @@ function { return_type_id: 0x48b5725f parameter_id: 0x02862e14 } +function { + id: 0x103ff2f5 + return_type_id: 0x48b5725f + parameter_id: 0x06835e9c + parameter_id: 0x4585663f + parameter_id: 0x4585663f +} function { id: 0x1043ff6b return_type_id: 0x48b5725f @@ -282696,6 +284772,12 @@ function { parameter_id: 0x00b7947f parameter_id: 0x384f7d7c } +function { + id: 0x105539bd + return_type_id: 0x48b5725f + parameter_id: 0x0483e6f8 + parameter_id: 0x7b64642a +} function { id: 0x10563618 return_type_id: 0x48b5725f @@ -282961,6 +285043,11 @@ function { parameter_id: 0x060cf413 parameter_id: 0x6d7f5ff6 } +function { + id: 0x10aeeb41 + return_type_id: 0x48b5725f + parameter_id: 0x00daeb4b +} function { id: 0x10aef91d return_type_id: 0x48b5725f @@ -283009,6 +285096,13 @@ function { parameter_id: 0x030b9acf parameter_id: 0x26a490c7 } +function { + id: 0x10c07815 + return_type_id: 0x48b5725f + parameter_id: 0x0c2e195c + parameter_id: 0xd0b3a203 + parameter_id: 0x4585663f +} function { id: 0x10c35fd7 return_type_id: 0x48b5725f @@ -283170,6 +285264,13 @@ function { parameter_id: 0xf435685e parameter_id: 0x4585663f } +function { + id: 0x10e535a4 + return_type_id: 0x48b5725f + parameter_id: 0x0c2e195c + parameter_id: 0xd0b3a203 + parameter_id: 0xd0b3a203 +} function { id: 0x10e93841 return_type_id: 0x48b5725f @@ -283484,6 +285585,11 @@ function { return_type_id: 0x48b5725f parameter_id: 0x074f1a14 } +function { + id: 0x11508453 + return_type_id: 0x9547a3da + parameter_id: 0x2f24a589 +} function { id: 0x1154b37f return_type_id: 0x0bfc9031 @@ -284031,6 +286137,13 @@ function { parameter_id: 0x0665e6b6 parameter_id: 0x3e10b518 } +function { + id: 0x11f98eff + return_type_id: 0x48b5725f + parameter_id: 0x06835e9c + parameter_id: 0x33756485 + parameter_id: 0x33756485 +} function { id: 0x11fe33ba return_type_id: 0x48b5725f @@ -284073,6 +286186,23 @@ function { parameter_id: 0xf435685e parameter_id: 0x0379c823 } +function { + id: 0x12101463 + return_type_id: 0x1b8590a8 + parameter_id: 0x26ee682a + parameter_id: 0x33756485 + parameter_id: 0x2c50e503 + parameter_id: 0x18bd6530 +} +function { + id: 0x1210c1fa + return_type_id: 0x1b8590a8 + parameter_id: 0x26ee682a + parameter_id: 0x33756485 + parameter_id: 0x2c50e503 + parameter_id: 0x2c50e503 + parameter_id: 0x18bd6530 +} function { id: 0x1210f89b return_type_id: 0x48b5725f @@ -284102,6 +286232,13 @@ function { return_type_id: 0x48b5725f parameter_id: 0x0a134144 } +function { + id: 0x12201786 + return_type_id: 0x48b5725f + parameter_id: 0x06835e9c + parameter_id: 0xc93e017b + parameter_id: 0xf1a6dfed +} function { id: 0x12217922 return_type_id: 0x48b5725f @@ -284735,6 +286872,21 @@ function { return_type_id: 0x48b5725f parameter_id: 0x0e2680c2 } +function { + id: 0x13129118 + return_type_id: 0x48b5725f + parameter_id: 0x0fabaf3b + parameter_id: 0x1b8590a8 + parameter_id: 0x39d1288c + parameter_id: 0x1253769c +} +function { + id: 0x13184981 + return_type_id: 0x48b5725f + parameter_id: 0x0fabaf3b + parameter_id: 0x1b8590a8 + parameter_id: 0x1396794c +} function { id: 0x1327a0fb return_type_id: 0x48b5725f @@ -285018,6 +287170,12 @@ function { parameter_id: 0x09427c40 parameter_id: 0x6d7f5ff6 } +function { + id: 0x137f5862 + return_type_id: 0x48b5725f + parameter_id: 0x0ca27481 + parameter_id: 0x33e53462 +} function { id: 0x1382dd85 return_type_id: 0x48b5725f @@ -285077,6 +287235,11 @@ function { parameter_id: 0x18bd6530 parameter_id: 0x6720d32f } +function { + id: 0x1393d7c4 + return_type_id: 0x48b5725f + parameter_id: 0x0c2e195c +} function { id: 0x139c8318 return_type_id: 0x48b5725f @@ -285607,6 +287770,12 @@ function { parameter_id: 0x0cbf60eb parameter_id: 0x6720d32f } +function { + id: 0x1464781e + return_type_id: 0x48b5725f + parameter_id: 0x1582ab06 + parameter_id: 0x6720d32f +} function { id: 0x14667c52 return_type_id: 0x48b5725f @@ -285673,6 +287842,12 @@ function { parameter_id: 0x1d25f132 parameter_id: 0xd41e888f } +function { + id: 0x14827bad + return_type_id: 0xee72cbfc + parameter_id: 0x26ee682a + parameter_id: 0xee72cbfc +} function { id: 0x14830594 return_type_id: 0x48b5725f @@ -286108,6 +288283,13 @@ function { parameter_id: 0x12e24ee1 parameter_id: 0x4585663f } +function { + id: 0x1539f399 + return_type_id: 0x48b5725f + parameter_id: 0x1582ab06 + parameter_id: 0x33756485 + parameter_id: 0x33756485 +} function { id: 0x153d1e98 return_type_id: 0x48b5725f @@ -286234,6 +288416,12 @@ function { parameter_id: 0x4585663f parameter_id: 0x13580d6c } +function { + id: 0x1566644a + return_type_id: 0x48b5725f + parameter_id: 0x1582ab06 + parameter_id: 0x27a7c613 +} function { id: 0x1566db85 return_type_id: 0x48b5725f @@ -286417,6 +288605,13 @@ function { parameter_id: 0x3b20fed2 parameter_id: 0x4585663f } +function { + id: 0x15976e28 + return_type_id: 0x48b5725f + parameter_id: 0x15a30023 + parameter_id: 0x1b8590a8 + parameter_id: 0x27a7c613 +} function { id: 0x159d827c return_type_id: 0x48b5725f @@ -286616,6 +288811,13 @@ function { parameter_id: 0x18bd6530 parameter_id: 0xf435685e } +function { + id: 0x160abbb8 + return_type_id: 0x48b5725f + parameter_id: 0x1b8590a8 + parameter_id: 0x1253769c + parameter_id: 0xeb0f6de6 +} function { id: 0x161199c0 return_type_id: 0x48b5725f @@ -287071,6 +289273,24 @@ function { return_type_id: 0x48b5725f parameter_id: 0x18a2fb63 } +function { + id: 0x16b316ef + return_type_id: 0xd5cc9c9a + parameter_id: 0x08bd7371 + parameter_id: 0x1b8590a8 + parameter_id: 0x0c2e195c + parameter_id: 0x2f73da3b + parameter_id: 0x2cacacc0 + parameter_id: 0x24a22acc + parameter_id: 0x06a428cc + parameter_id: 0x6720d32f +} +function { + id: 0x16b4e02b + return_type_id: 0x48b5725f + parameter_id: 0x1b8590a8 + parameter_id: 0x33756485 +} function { id: 0x16b50572 return_type_id: 0x48b5725f @@ -287275,6 +289495,12 @@ function { return_type_id: 0x48b5725f parameter_id: 0x19fa9e98 } +function { + id: 0x16e7aaa1 + return_type_id: 0x48b5725f + parameter_id: 0x1b8590a8 + parameter_id: 0x27a7c613 +} function { id: 0x16e9508e return_type_id: 0x48b5725f @@ -287598,6 +289824,12 @@ function { parameter_id: 0x2e18f543 parameter_id: 0x2e18f543 } +function { + id: 0x176f2021 + return_type_id: 0x48b5725f + parameter_id: 0x1b8590a8 + parameter_id: 0x4585663f +} function { id: 0x176fe039 return_type_id: 0x48b5725f @@ -287612,6 +289844,13 @@ function { parameter_id: 0x33756485 parameter_id: 0x33756485 } +function { + id: 0x177e4178 + return_type_id: 0x48b5725f + parameter_id: 0x1b8590a8 + parameter_id: 0x4585663f + parameter_id: 0x4585663f +} function { id: 0x177f3bf9 return_type_id: 0x48b5725f @@ -287833,6 +290072,12 @@ function { return_type_id: 0x48b5725f parameter_id: 0x1d25f132 } +function { + id: 0x17d74917 + return_type_id: 0x48b5725f + parameter_id: 0x1e820193 + parameter_id: 0x3be6380c +} function { id: 0x17d8b994 return_type_id: 0x48b5725f @@ -288833,6 +291078,12 @@ function { return_type_id: 0x48b5725f parameter_id: 0x25b73daa } +function { + id: 0x19fc4f29 + return_type_id: 0x48b5725f + parameter_id: 0x275ab027 + parameter_id: 0x2cacacc0 +} function { id: 0x19fe25be return_type_id: 0x48b5725f @@ -289074,6 +291325,11 @@ function { return_type_id: 0x48b5725f parameter_id: 0x2859d899 } +function { + id: 0x1a8f9ccc + return_type_id: 0x48b5725f + parameter_id: 0x285f357e +} function { id: 0x1a902728 return_type_id: 0x48b5725f @@ -289504,6 +291760,12 @@ function { parameter_id: 0xf435685e parameter_id: 0x27a7c613 } +function { + id: 0x1b603ccd + return_type_id: 0x48b5725f + parameter_id: 0x285f357e + parameter_id: 0x7be80061 +} function { id: 0x1b6452d7 return_type_id: 0x48b5725f @@ -289594,6 +291856,12 @@ function { parameter_id: 0x2a9beac2 parameter_id: 0x6d7f5ff6 } +function { + id: 0x1b90a8d8 + return_type_id: 0x48b5725f + parameter_id: 0x26ee682a + parameter_id: 0xacd8d043 +} function { id: 0x1b939067 return_type_id: 0x48b5725f @@ -289798,6 +292066,11 @@ function { parameter_id: 0x2131312a parameter_id: 0xc0a0d1f0 } +function { + id: 0x1bd82ebd + return_type_id: 0x48b5725f + parameter_id: 0x2d01fcba +} function { id: 0x1bdaff5e return_type_id: 0x48b5725f @@ -289883,6 +292156,12 @@ function { return_type_id: 0x48b5725f parameter_id: 0x326c4938 } +function { + id: 0x1c03dd76 + return_type_id: 0x48b5725f + parameter_id: 0x33756485 + parameter_id: 0x11b57133 +} function { id: 0x1c048955 return_type_id: 0x48b5725f @@ -290721,6 +293000,11 @@ function { parameter_id: 0x391f15ea parameter_id: 0xf435685e } +function { + id: 0x1d10ef19 + return_type_id: 0x48b5725f + parameter_id: 0x3622fa2a +} function { id: 0x1d1662fd return_type_id: 0x48b5725f @@ -291027,6 +293311,11 @@ function { parameter_id: 0x3e10b518 parameter_id: 0xa52a0930 } +function { + id: 0x1d8c491d + return_type_id: 0x1b8590a8 + parameter_id: 0x1b8590a8 +} function { id: 0x1d8d431c return_type_id: 0x48b5725f @@ -291570,6 +293859,11 @@ function { parameter_id: 0x3b04bead parameter_id: 0x18bd6530 } +function { + id: 0x1e3bdb22 + return_type_id: 0x48b5725f + parameter_id: 0x3a8e2ac6 +} function { id: 0x1e3db1e5 return_type_id: 0x48b5725f @@ -292226,6 +294520,12 @@ function { parameter_id: 0x3f222c68 parameter_id: 0x15b54c6f } +function { + id: 0x1f0b238f + return_type_id: 0x48b5725f + parameter_id: 0x3df0a7d3 + parameter_id: 0x3bd6fa3a +} function { id: 0x1f0d7714 return_type_id: 0x48b5725f @@ -292314,6 +294614,15 @@ function { return_type_id: 0x48b5725f parameter_id: 0x3ee88c45 } +function { + id: 0x1f269fb6 + return_type_id: 0x48b5725f + parameter_id: 0x3df0a7d3 + parameter_id: 0x34e17987 + parameter_id: 0x4585663f + parameter_id: 0x0483e6f8 + parameter_id: 0x4585663f +} function { id: 0x1f26df83 return_type_id: 0x48b5725f @@ -292402,6 +294711,15 @@ function { parameter_id: 0x3d92f9c7 parameter_id: 0x3054f2d7 } +function { + id: 0x1f3dc21f + return_type_id: 0xd5cc9c9a + parameter_id: 0x2f73da3b + parameter_id: 0x0b30ee00 + parameter_id: 0xf435685e + parameter_id: 0x4585663f + parameter_id: 0x379d63b0 +} function { id: 0x1f458cf4 return_type_id: 0x48b5725f @@ -292912,6 +295230,11 @@ function { parameter_id: 0x3176a085 parameter_id: 0xc9082b19 } +function { + id: 0x1fe47867 + return_type_id: 0x48b5725f + parameter_id: 0x3df0a7d3 +} function { id: 0x1feaaebf return_type_id: 0x48b5725f @@ -294311,6 +296634,11 @@ function { return_type_id: 0x33756485 parameter_id: 0x37b4f743 } +function { + id: 0x3c97e3d9 + return_type_id: 0x33756485 + parameter_id: 0x34ecba28 +} function { id: 0x3cc96bbe return_type_id: 0x0483e6f8 @@ -294837,6 +297165,11 @@ function { return_type_id: 0xc9082b19 parameter_id: 0x0c0dfa25 } +function { + id: 0x47570b9f + return_type_id: 0x2131312a + parameter_id: 0x2d77f22a +} function { id: 0x4759fa3a return_type_id: 0x04ca9246 @@ -294939,6 +297272,11 @@ function { parameter_id: 0x33756485 parameter_id: 0x33756485 } +function { + id: 0x4a02979c + return_type_id: 0xf1a6dfed + parameter_id: 0x1582ab06 +} function { id: 0x4a279a3e return_type_id: 0x3d4280e0 @@ -294984,6 +297322,17 @@ function { parameter_id: 0x4585663f parameter_id: 0x4585663f } +function { + id: 0x4b6ec637 + return_type_id: 0x2d01fcba + parameter_id: 0x0c2e195c + parameter_id: 0x4585663f + parameter_id: 0x4585663f + parameter_id: 0x4585663f + parameter_id: 0x0c33de94 + parameter_id: 0x0c33de94 + parameter_id: 0x4585663f +} function { id: 0x4bbafb54 return_type_id: 0x00c72527 @@ -295047,6 +297396,11 @@ function { return_type_id: 0xc9082b19 parameter_id: 0x2e8d5f05 } +function { + id: 0x4e6eaff2 + return_type_id: 0x00daeb4b + parameter_id: 0x0483e6f8 +} function { id: 0x4e848709 return_type_id: 0x18ea6ae3 @@ -295086,6 +297440,10 @@ function { parameter_id: 0x3b04bead parameter_id: 0x038de60c } +function { + id: 0x4f4e564c + return_type_id: 0x00daeb4b +} function { id: 0x4f645cab return_type_id: 0x00a43052 @@ -296348,6 +298706,13 @@ function { parameter_id: 0x2cac4c27 parameter_id: 0x18bd6530 } +function { + id: 0x5de26741 + return_type_id: 0x18bd6530 + parameter_id: 0x2efd5036 + parameter_id: 0x3dfac2ad + parameter_id: 0xf1a6dfed +} function { id: 0x5de7952d return_type_id: 0x18bd6530 @@ -296391,6 +298756,13 @@ function { parameter_id: 0xf435685e parameter_id: 0x11cfee5a } +function { + id: 0x5e9421aa + return_type_id: 0x18bd6530 + parameter_id: 0x2d01fcba + parameter_id: 0xd0b3a203 + parameter_id: 0x0087f4f8 +} function { id: 0x5ed273d9 return_type_id: 0x18bd6530 @@ -296512,6 +298884,14 @@ function { parameter_id: 0x35d510c3 parameter_id: 0x6720d32f } +function { + id: 0x61257a20 + return_type_id: 0x2170d06d + parameter_id: 0xf1a6dfed + parameter_id: 0x4585663f + parameter_id: 0x6720d32f + parameter_id: 0x2fb2b385 +} function { id: 0x619a645f return_type_id: 0x249959de @@ -297635,6 +300015,15 @@ function { parameter_id: 0x3e10b518 parameter_id: 0x18bd6530 } +function { + id: 0x81599f70 + return_type_id: 0x120540d1 + parameter_id: 0x32ec08f2 + parameter_id: 0x6720d32f + parameter_id: 0x3e10b518 + parameter_id: 0x18bd6530 + parameter_id: 0x2f802886 +} function { id: 0x81a9f9cd return_type_id: 0x09a83f1c @@ -298153,6 +300542,13 @@ function { return_type_id: 0x2e0f9112 parameter_id: 0x3912ab06 } +function { + id: 0x889f851e + return_type_id: 0x120540d1 + parameter_id: 0x120540d1 + parameter_id: 0x1b8590a8 + parameter_id: 0x04c1427f +} function { id: 0x88bccf1d return_type_id: 0x120540d1 @@ -298246,6 +300642,12 @@ function { parameter_id: 0x120540d1 parameter_id: 0x4585663f } +function { + id: 0x8ad88211 + return_type_id: 0x120540d1 + parameter_id: 0x1b8590a8 + parameter_id: 0x120540d1 +} function { id: 0x8ae0b646 return_type_id: 0x6720d32f @@ -298598,6 +301000,11 @@ function { return_type_id: 0x6720d32f parameter_id: 0x36194830 } +function { + id: 0x90085da5 + return_type_id: 0x6720d32f + parameter_id: 0x3622fa2a +} function { id: 0x9009411d return_type_id: 0x6720d32f @@ -299173,6 +301580,13 @@ function { parameter_id: 0x295c7202 parameter_id: 0x7584e7da } +function { + id: 0x90917599 + return_type_id: 0x6720d32f + parameter_id: 0x3df0a7d3 + parameter_id: 0x9ae406d4 + parameter_id: 0x18bd6530 +} function { id: 0x9093971b return_type_id: 0x6720d32f @@ -301371,6 +303785,20 @@ function { return_type_id: 0x6720d32f parameter_id: 0x3e292ad1 } +function { + id: 0x920c1213 + return_type_id: 0x6720d32f + parameter_id: 0x3df0a7d3 + parameter_id: 0x33756485 + parameter_id: 0xf435685e +} +function { + id: 0x920d0e3f + return_type_id: 0x6720d32f + parameter_id: 0x384c5795 + parameter_id: 0x6720d32f + parameter_id: 0x09eee7e5 +} function { id: 0x920d4b76 return_type_id: 0x6720d32f @@ -301405,6 +303833,13 @@ function { parameter_id: 0x0483e6f8 parameter_id: 0xf435685e } +function { + id: 0x921502fa + return_type_id: 0x6720d32f + parameter_id: 0x3df0a7d3 + parameter_id: 0x3e2a5e3d + parameter_id: 0x4585663f +} function { id: 0x92153e12 return_type_id: 0xf435685e @@ -301456,6 +303891,14 @@ function { return_type_id: 0x6720d32f parameter_id: 0x3e816a4b } +function { + id: 0x9221eee3 + return_type_id: 0x6720d32f + parameter_id: 0x3df0a7d3 + parameter_id: 0x3e10b518 + parameter_id: 0x9547a3da + parameter_id: 0x0dc11255 +} function { id: 0x92222c71 return_type_id: 0x6720d32f @@ -301857,6 +304300,14 @@ function { return_type_id: 0x6720d32f parameter_id: 0x3fac1d22 } +function { + id: 0x926c5025 + return_type_id: 0x6720d32f + parameter_id: 0x3d1364e9 + parameter_id: 0x2bae2afe + parameter_id: 0x1bf16028 + parameter_id: 0x0bb0c019 +} function { id: 0x926d0dd0 return_type_id: 0x6720d32f @@ -302018,6 +304469,14 @@ function { parameter_id: 0x3f37d9d5 parameter_id: 0x32a063f3 } +function { + id: 0x92880f91 + return_type_id: 0x6720d32f + parameter_id: 0x3df0a7d3 + parameter_id: 0x1e820193 + parameter_id: 0x3be6380c + parameter_id: 0x0d30b9c3 +} function { id: 0x928c1332 return_type_id: 0x6720d32f @@ -302075,6 +304534,14 @@ function { return_type_id: 0x6720d32f parameter_id: 0x3c5f865b } +function { + id: 0x9298d745 + return_type_id: 0x6720d32f + parameter_id: 0x3df0a7d3 + parameter_id: 0x1e820193 + parameter_id: 0x7be80061 + parameter_id: 0x3be6380c +} function { id: 0x929a4d8e return_type_id: 0x6720d32f @@ -302165,6 +304632,12 @@ function { return_type_id: 0x6720d32f parameter_id: 0x3ca2533c } +function { + id: 0x92aa46db + return_type_id: 0x6720d32f + parameter_id: 0x3df0a7d3 + parameter_id: 0x15a30023 +} function { id: 0x92ab09cb return_type_id: 0x6720d32f @@ -302172,6 +304645,15 @@ function { parameter_id: 0x18bd6530 parameter_id: 0x6720d32f } +function { + id: 0x92ab0d8f + return_type_id: 0x6720d32f + parameter_id: 0x351641b0 + parameter_id: 0x92233392 + parameter_id: 0x92233392 + parameter_id: 0x92233392 + parameter_id: 0xc9082b19 +} function { id: 0x92acc8e1 return_type_id: 0x6720d32f @@ -302184,6 +304666,13 @@ function { parameter_id: 0x3ea2e6c1 parameter_id: 0x2124c9f1 } +function { + id: 0x92af5c55 + return_type_id: 0x6720d32f + parameter_id: 0x3df0a7d3 + parameter_id: 0x15a30023 + parameter_id: 0x146a39bf +} function { id: 0x92b5578e return_type_id: 0x6720d32f @@ -302203,6 +304692,15 @@ function { parameter_id: 0x01c5a749 parameter_id: 0x3c2dd1ca } +function { + id: 0x92beb06d + return_type_id: 0x6720d32f + parameter_id: 0x3df0a7d3 + parameter_id: 0x1d44afc8 + parameter_id: 0xd0b3a203 + parameter_id: 0xd0b3a203 + parameter_id: 0x18bd6530 +} function { id: 0x92bf7ef1 return_type_id: 0x6720d32f @@ -302366,6 +304864,12 @@ function { parameter_id: 0xc9082b19 parameter_id: 0x0db138df } +function { + id: 0x92daa424 + return_type_id: 0x6720d32f + parameter_id: 0x3df0a7d3 + parameter_id: 0x099bbff0 +} function { id: 0x92dc6e62 return_type_id: 0x6720d32f @@ -302536,6 +305040,11 @@ function { parameter_id: 0x3e10b518 parameter_id: 0x3e10b518 } +function { + id: 0x92fccadb + return_type_id: 0x6720d32f + parameter_id: 0x3df0a7d3 +} function { id: 0x92fce902 return_type_id: 0x6720d32f @@ -302996,6 +305505,12 @@ function { return_type_id: 0x6720d32f parameter_id: 0x3ba261b0 } +function { + id: 0x936a3614 + return_type_id: 0x6720d32f + parameter_id: 0x39d1288c + parameter_id: 0x27a7c613 +} function { id: 0x936c5d25 return_type_id: 0x6720d32f @@ -303461,6 +305976,22 @@ function { parameter_id: 0x33756485 parameter_id: 0x33756485 } +function { + id: 0x93e8301d + return_type_id: 0x6720d32f + parameter_id: 0x3df0a7d3 + parameter_id: 0x4585663f + parameter_id: 0x0bb0c019 + parameter_id: 0x0483e6f8 + parameter_id: 0x4585663f +} +function { + id: 0x93e83373 + return_type_id: 0x6720d32f + parameter_id: 0x3df0a7d3 + parameter_id: 0x4585663f + parameter_id: 0x0bb0c019 +} function { id: 0x93e8e7b0 return_type_id: 0x6720d32f @@ -303762,6 +306293,13 @@ function { parameter_id: 0x25653b02 parameter_id: 0x396f8ae8 } +function { + id: 0x94404485 + return_type_id: 0x6720d32f + parameter_id: 0x26ee682a + parameter_id: 0x18bd6530 + parameter_id: 0x6720d32f +} function { id: 0x9441b35b return_type_id: 0x6720d32f @@ -304591,6 +307129,12 @@ function { parameter_id: 0x25782362 parameter_id: 0x6d7f5ff6 } +function { + id: 0x956e6587 + return_type_id: 0x6720d32f + parameter_id: 0x2170d06d + parameter_id: 0x2cacacc0 +} function { id: 0x957149c4 return_type_id: 0x6720d32f @@ -305532,6 +308076,11 @@ function { parameter_id: 0x0483e6f8 parameter_id: 0x914dbfdc } +function { + id: 0x96c09c01 + return_type_id: 0x6720d32f + parameter_id: 0x2d01fcba +} function { id: 0x96c3b4e1 return_type_id: 0x6720d32f @@ -306113,6 +308662,14 @@ function { parameter_id: 0x2b21a696 parameter_id: 0x35f82503 } +function { + id: 0x97a0d8a7 + return_type_id: 0x15a30023 + parameter_id: 0x15a30023 + parameter_id: 0x6720d32f + parameter_id: 0xf1a6dfed + parameter_id: 0x0292b875 +} function { id: 0x97a3c07a return_type_id: 0x6720d32f @@ -306141,6 +308698,14 @@ function { parameter_id: 0x25782362 parameter_id: 0xdb6afbca } +function { + id: 0x97b4bbf8 + return_type_id: 0xf435685e + parameter_id: 0x06835e9c + parameter_id: 0x4585663f + parameter_id: 0xf435685e + parameter_id: 0x2f73da3b +} function { id: 0x97b9c78c return_type_id: 0x6720d32f @@ -306485,6 +309050,13 @@ function { parameter_id: 0x2dab4556 parameter_id: 0x1d2416d3 } +function { + id: 0x98214125 + return_type_id: 0x6720d32f + parameter_id: 0x1582ab06 + parameter_id: 0x33756485 + parameter_id: 0x33756485 +} function { id: 0x982246a7 return_type_id: 0x6720d32f @@ -306497,6 +309069,14 @@ function { return_type_id: 0xfc0e1dbd parameter_id: 0xfc0e1dbd } +function { + id: 0x982488f7 + return_type_id: 0x6720d32f + parameter_id: 0x1b8590a8 + parameter_id: 0xd0b3a203 + parameter_id: 0x1977e57b + parameter_id: 0x6720d32f +} function { id: 0x98249b1d return_type_id: 0x6720d32f @@ -306804,6 +309384,14 @@ function { parameter_id: 0x6720d32f parameter_id: 0x3e10b518 } +function { + id: 0x986a916d + return_type_id: 0x6720d32f + parameter_id: 0x1582ab06 + parameter_id: 0x2170d06d + parameter_id: 0x33756485 + parameter_id: 0xf1a6dfed +} function { id: 0x986ccce1 return_type_id: 0x6720d32f @@ -306857,6 +309445,21 @@ function { parameter_id: 0x33756485 parameter_id: 0x0d7d7298 } +function { + id: 0x98773f07 + return_type_id: 0x6720d32f + parameter_id: 0x1582ab06 + parameter_id: 0x27a7c613 + parameter_id: 0x27a7c613 +} +function { + id: 0x98788d90 + return_type_id: 0x6720d32f + parameter_id: 0x18bd6530 + parameter_id: 0xf1a6dfed + parameter_id: 0x4585663f + parameter_id: 0x33756485 +} function { id: 0x98792c3d return_type_id: 0x3e10b518 @@ -307010,6 +309613,15 @@ function { parameter_id: 0x18bd6530 parameter_id: 0xc93e017b } +function { + id: 0x988bc164 + return_type_id: 0xf435685e + parameter_id: 0x3df0a7d3 + parameter_id: 0x33756485 + parameter_id: 0x18bd6530 + parameter_id: 0xf435685e + parameter_id: 0x2f73da3b +} function { id: 0x988f2c1b return_type_id: 0x6720d32f @@ -307178,6 +309790,11 @@ function { return_type_id: 0x6720d32f parameter_id: 0x14b9453b } +function { + id: 0x98af9d1c + return_type_id: 0x3e10b518 + parameter_id: 0x2bae2afe +} function { id: 0x98b3c900 return_type_id: 0x6720d32f @@ -308381,6 +310998,12 @@ function { parameter_id: 0x1c3dbe5a parameter_id: 0x0db25a6d } +function { + id: 0x99d43279 + return_type_id: 0xf435685e + parameter_id: 0x34ecba28 + parameter_id: 0xf435685e +} function { id: 0x99d6eb87 return_type_id: 0x6720d32f @@ -308599,6 +311222,11 @@ function { parameter_id: 0x1d44326e parameter_id: 0x348ad8b0 } +function { + id: 0x9a04e7d8 + return_type_id: 0xf435685e + parameter_id: 0x34ecba28 +} function { id: 0x9a077ed2 return_type_id: 0x6720d32f @@ -308777,6 +311405,13 @@ function { parameter_id: 0x6720d32f parameter_id: 0x1d19a9d5 } +function { + id: 0x9a2d8ab0 + return_type_id: 0x6720d32f + parameter_id: 0x18bd6530 + parameter_id: 0x63bb62a2 + parameter_id: 0x33756485 +} function { id: 0x9a2dc3fa return_type_id: 0x6720d32f @@ -308795,6 +311430,12 @@ function { parameter_id: 0x1dc3d428 parameter_id: 0x37f5d3d4 } +function { + id: 0x9a308be1 + return_type_id: 0x6720d32f + parameter_id: 0x1977e57b + parameter_id: 0x7b64642a +} function { id: 0x9a32aa77 return_type_id: 0x6720d32f @@ -309820,12 +312461,33 @@ function { return_type_id: 0x6720d32f parameter_id: 0x1df06cce } +function { + id: 0x9afd0449 + return_type_id: 0x6720d32f + parameter_id: 0x1b8590a8 + parameter_id: 0x6720d32f +} function { id: 0x9b022eae return_type_id: 0x6720d32f parameter_id: 0x1b8590a8 parameter_id: 0x18ea6ae3 } +function { + id: 0x9b034295 + return_type_id: 0x6720d32f + parameter_id: 0x1b8590a8 + parameter_id: 0x1b8590a8 + parameter_id: 0x3e001c39 + parameter_id: 0xd57eb7ba + parameter_id: 0x18bd6530 +} +function { + id: 0x9b037291 + return_type_id: 0x6720d32f + parameter_id: 0x1b8590a8 + parameter_id: 0x18bd6530 +} function { id: 0x9b03e163 return_type_id: 0x6720d32f @@ -311135,6 +313797,12 @@ function { parameter_id: 0x3e10b518 parameter_id: 0xf435685e } +function { + id: 0x9b6b31b5 + return_type_id: 0xf435685e + parameter_id: 0x3e10b518 + parameter_id: 0xf435685e +} function { id: 0x9b6b9392 return_type_id: 0x6720d32f @@ -311659,6 +314327,15 @@ function { parameter_id: 0x18bd6530 parameter_id: 0x30c17c17 } +function { + id: 0x9b91dcee + return_type_id: 0x6720d32f + parameter_id: 0x1b8590a8 + parameter_id: 0x351641b0 + parameter_id: 0x92233392 + parameter_id: 0x2e18f543 + parameter_id: 0xc9082b19 +} function { id: 0x9b922d94 return_type_id: 0x6720d32f @@ -311846,6 +314523,15 @@ function { parameter_id: 0x18bd6530 parameter_id: 0x030b9acf } +function { + id: 0x9ba3940a + return_type_id: 0x6720d32f + parameter_id: 0x18bd6530 + parameter_id: 0x054f691a + parameter_id: 0x6720d32f + parameter_id: 0x32a623d7 + parameter_id: 0x4585663f +} function { id: 0x9ba399e4 return_type_id: 0x6720d32f @@ -312254,6 +314940,12 @@ function { return_type_id: 0x6720d32f parameter_id: 0x18ea6ae3 } +function { + id: 0x9bba87c7 + return_type_id: 0x6720d32f + parameter_id: 0x18bd6530 + parameter_id: 0x054f691a +} function { id: 0x9bbb9163 return_type_id: 0x6720d32f @@ -312317,6 +315009,13 @@ function { parameter_id: 0x3f949c69 parameter_id: 0x13580d6c } +function { + id: 0x9bbe37da + return_type_id: 0x6720d32f + parameter_id: 0x1b8590a8 + parameter_id: 0x3667e19e + parameter_id: 0x18bd6530 +} function { id: 0x9bbe6322 return_type_id: 0x6720d32f @@ -312609,6 +315308,12 @@ function { parameter_id: 0x2e029f76 parameter_id: 0x11cfee5a } +function { + id: 0x9bd09cc2 + return_type_id: 0x6720d32f + parameter_id: 0x1d19a9d5 + parameter_id: 0x4585663f +} function { id: 0x9bd130b8 return_type_id: 0x6720d32f @@ -312982,6 +315687,12 @@ function { parameter_id: 0x18bd6530 parameter_id: 0x0b3476b2 } +function { + id: 0x9bdaaaaa + return_type_id: 0x6720d32f + parameter_id: 0x18bd6530 + parameter_id: 0x1d44326e +} function { id: 0x9bdad4db return_type_id: 0x6720d32f @@ -313081,6 +315792,14 @@ function { parameter_id: 0x1d19a9d5 parameter_id: 0x13580d6c } +function { + id: 0x9bdcdd91 + return_type_id: 0x6720d32f + parameter_id: 0x18bd6530 + parameter_id: 0x1d19a9d5 + parameter_id: 0x1d19a9d5 + parameter_id: 0x11cfee5a +} function { id: 0x9bdcf60d return_type_id: 0x6720d32f @@ -313092,6 +315811,11 @@ function { parameter_id: 0x4585663f parameter_id: 0x6d7f5ff6 } +function { + id: 0x9bdd1a71 + return_type_id: 0x6720d32f + parameter_id: 0x1977e57b +} function { id: 0x9bdd30f1 return_type_id: 0x6720d32f @@ -316826,6 +319550,14 @@ function { return_type_id: 0x6720d32f parameter_id: 0x01f1fcec } +function { + id: 0x9dfe4183 + return_type_id: 0x6720d32f + parameter_id: 0x0c2e195c + parameter_id: 0xd0b3a203 + parameter_id: 0xd0b3a203 + parameter_id: 0xf1a6dfed +} function { id: 0x9dfe427d return_type_id: 0x6720d32f @@ -317043,6 +319775,14 @@ function { parameter_id: 0x120540d1 parameter_id: 0x0b756bd6 } +function { + id: 0x9e20f17d + return_type_id: 0x6720d32f + parameter_id: 0x0fabaf3b + parameter_id: 0x120540d1 + parameter_id: 0x0b756bd6 + parameter_id: 0x0c715d8d +} function { id: 0x9e215925 return_type_id: 0x6720d32f @@ -317372,6 +320112,12 @@ function { parameter_id: 0x33b77109 parameter_id: 0x0277bf8a } +function { + id: 0x9e67eade + return_type_id: 0x6720d32f + parameter_id: 0x0ca27481 + parameter_id: 0x33e53462 +} function { id: 0x9e68eb19 return_type_id: 0x6720d32f @@ -317584,6 +320330,13 @@ function { parameter_id: 0x057af395 parameter_id: 0xc9082b19 } +function { + id: 0x9e9034ea + return_type_id: 0x6720d32f + parameter_id: 0x0dfb7909 + parameter_id: 0x1df06cce + parameter_id: 0x6720d32f +} function { id: 0x9e917c22 return_type_id: 0x6720d32f @@ -318089,6 +320842,14 @@ function { parameter_id: 0x054f691a parameter_id: 0xf435685e } +function { + id: 0x9f043139 + return_type_id: 0x6720d32f + parameter_id: 0x08bd7371 + parameter_id: 0x27a7c613 + parameter_id: 0xd5cc9c9a + parameter_id: 0x18bd6530 +} function { id: 0x9f04337e return_type_id: 0x6720d32f @@ -319726,6 +322487,11 @@ function { parameter_id: 0x32a623d7 parameter_id: 0x2584a3b9 } +function { + id: 0xa7436d37 + return_type_id: 0x2d77f22a + parameter_id: 0x2f24a589 +} function { id: 0xa780332f return_type_id: 0x6720d32f @@ -319819,6 +322585,16 @@ function { parameter_id: 0x01d3d77e parameter_id: 0x6720d32f } +function { + id: 0xa8ae6b7a + return_type_id: 0xfc0e1dbd + parameter_id: 0x3df0a7d3 + parameter_id: 0x33756485 + parameter_id: 0xfc0e1dbd + parameter_id: 0x2b23aa9d + parameter_id: 0x0cbf60eb + parameter_id: 0x28eb23d4 +} function { id: 0xa8d53dcc return_type_id: 0x1253769c @@ -320302,6 +323078,12 @@ function { parameter_id: 0x11e6864c parameter_id: 0xf017819f } +function { + id: 0xb55dce02 + return_type_id: 0x160ba102 + parameter_id: 0x0f12d1e7 + parameter_id: 0x6720d32f +} function { id: 0xb649ac13 return_type_id: 0x067c4b9a @@ -320327,6 +323109,14 @@ function { parameter_id: 0x33756485 parameter_id: 0xf1a6dfed } +function { + id: 0xb82f817c + return_type_id: 0x06835e9c + parameter_id: 0x1582ab06 + parameter_id: 0x33756485 + parameter_id: 0x6720d32f + parameter_id: 0xf1a6dfed +} function { id: 0xb8307855 return_type_id: 0x06835e9c @@ -320335,6 +323125,12 @@ function { parameter_id: 0x1650be92 parameter_id: 0x18ea6ae3 } +function { + id: 0xb8358fd3 + return_type_id: 0x06835e9c + parameter_id: 0x1582ab06 + parameter_id: 0x33756485 +} function { id: 0xb87b745c return_type_id: 0x06835e9c @@ -320409,6 +323205,12 @@ function { parameter_id: 0x1908b154 parameter_id: 0x6d7f5ff6 } +function { + id: 0xb98ee524 + return_type_id: 0x399c459b + parameter_id: 0x399c459b + parameter_id: 0x1b8590a8 +} function { id: 0xb996d78c return_type_id: 0xc4cf348e @@ -321447,6 +324249,15 @@ function { parameter_id: 0x019e2530 parameter_id: 0x4585663f } +function { + id: 0xcfac76b5 + return_type_id: 0x4585663f + parameter_id: 0x04810ecd + parameter_id: 0x1582ab06 + parameter_id: 0x064d6086 + parameter_id: 0x33756485 + parameter_id: 0x7f7172c7 +} function { id: 0xcfc2716e return_type_id: 0x6d7f5ff6 @@ -323165,6 +325976,12 @@ function { parameter_id: 0x235889e8 parameter_id: 0x3654c061 } +function { + id: 0xf6be4a6e + return_type_id: 0x6d7f5ff6 + parameter_id: 0x20007040 + parameter_id: 0x06835e9c +} function { id: 0xf6c0819f return_type_id: 0x6d7f5ff6 @@ -323354,6 +326171,12 @@ function { parameter_id: 0x1a61f607 parameter_id: 0x39a83127 } +function { + id: 0xf8e4b6f7 + return_type_id: 0x172847a8 + parameter_id: 0x18bd6530 + parameter_id: 0x6720d32f +} function { id: 0xf8fa1a38 return_type_id: 0x6d7f5ff6 @@ -323404,6 +326227,12 @@ function { return_type_id: 0x6d7f5ff6 parameter_id: 0x1d25f132 } +function { + id: 0xf9f0c251 + return_type_id: 0x6d7f5ff6 + parameter_id: 0x1b8590a8 + parameter_id: 0x6d7f5ff6 +} function { id: 0xf9f5579f return_type_id: 0x6d7f5ff6 @@ -323751,6 +326580,13 @@ function { parameter_id: 0x0258f96e parameter_id: 0xe5b69de1 } +function { + id: 0xfdb03c5c + return_type_id: 0x6d7f5ff6 + parameter_id: 0x0fabaf3b + parameter_id: 0x39d1288c + parameter_id: 0x6720d32f +} function { id: 0xfdb2dd0c return_type_id: 0x6d7f5ff6 @@ -324174,6 +327010,24 @@ elf_symbol { type_id: 0x1b18f64e full_name: "__balance_callbacks" } +elf_symbol { + id: 0xac51df48 + name: "__bforget" + is_defined: true + symbol_type: FUNCTION + crc: 0x364b830b + type_id: 0x16c5a8cd + full_name: "__bforget" +} +elf_symbol { + id: 0x2c42b675 + name: "__bh_read_batch" + is_defined: true + symbol_type: FUNCTION + crc: 0xa59bae72 + type_id: 0x097c3ebf + full_name: "__bh_read_batch" +} elf_symbol { id: 0x8920b575 name: "__bitmap_and" @@ -324372,6 +327226,42 @@ elf_symbol { type_id: 0x56fc975d full_name: "__blkg_prfill_u64" } +elf_symbol { + id: 0x2d1c1f2d + name: "__blockdev_direct_IO" + is_defined: true + symbol_type: FUNCTION + crc: 0x02673f92 + type_id: 0x16b316ef + full_name: "__blockdev_direct_IO" +} +elf_symbol { + id: 0x9bed4545 + name: "__bread_gfp" + is_defined: true + symbol_type: FUNCTION + crc: 0xe44aece3 + type_id: 0x65d68df5 + full_name: "__bread_gfp" +} +elf_symbol { + id: 0xefdcf4c1 + name: "__breadahead" + is_defined: true + symbol_type: FUNCTION + crc: 0x6b1f432a + type_id: 0x10c07815 + full_name: "__breadahead" +} +elf_symbol { + id: 0x2f449b9e + name: "__brelse" + is_defined: true + symbol_type: FUNCTION + crc: 0x40b1280f + type_id: 0x16c5a8cd + full_name: "__brelse" +} elf_symbol { id: 0x2057d4fc name: "__check_object_size" @@ -325245,6 +328135,15 @@ elf_symbol { type_id: 0x20cd94dc full_name: "__fdget" } +elf_symbol { + id: 0x6036d483 + name: "__filemap_set_wb_err" + is_defined: true + symbol_type: FUNCTION + crc: 0xf59ce848 + type_id: 0x1464781e + full_name: "__filemap_set_wb_err" +} elf_symbol { id: 0xaf8ee687 name: "__find_nth_bit" @@ -325263,6 +328162,24 @@ elf_symbol { type_id: 0x14667c52 full_name: "__flush_workqueue" } +elf_symbol { + id: 0x6a92cb2d + name: "__folio_alloc" + is_defined: true + symbol_type: FUNCTION + crc: 0xfcda658e + type_id: 0x61257a20 + full_name: "__folio_alloc" +} +elf_symbol { + id: 0x6fc34fdb + name: "__folio_cancel_dirty" + is_defined: true + symbol_type: FUNCTION + crc: 0x6b54d941 + type_id: 0x18c46588 + full_name: "__folio_cancel_dirty" +} elf_symbol { id: 0x47a334c4 name: "__folio_lock" @@ -325551,6 +328468,15 @@ elf_symbol { type_id: 0x15acd3b0 full_name: "__init_waitqueue_head" } +elf_symbol { + id: 0xd02fc75b + name: "__insert_inode_hash" + is_defined: true + symbol_type: FUNCTION + crc: 0x25021594 + type_id: 0x16b4e02b + full_name: "__insert_inode_hash" +} elf_symbol { id: 0xe97034af name: "__ioread32_copy" @@ -325858,6 +328784,15 @@ elf_symbol { type_id: 0x16c5a8cd full_name: "__lock_buffer" } +elf_symbol { + id: 0x0b9d6bbc + name: "__mark_inode_dirty" + is_defined: true + symbol_type: FUNCTION + crc: 0x2370c1c0 + type_id: 0x17e5b6f5 + full_name: "__mark_inode_dirty" +} elf_symbol { id: 0x040ec563 name: "__mdiobus_read" @@ -326578,6 +329513,15 @@ elf_symbol { type_id: 0x1c3ba516 full_name: "__release_region" } +elf_symbol { + id: 0x9d948fe1 + name: "__remove_inode_hash" + is_defined: true + symbol_type: FUNCTION + crc: 0x152cf8f0 + type_id: 0x167935b9 + full_name: "__remove_inode_hash" +} elf_symbol { id: 0xf7c2da07 name: "__request_module" @@ -326641,6 +329585,15 @@ elf_symbol { type_id: 0x1dbb54c5 full_name: "__rt_mutex_init" } +elf_symbol { + id: 0x31b4eed9 + name: "__rtnl_link_unregister" + is_defined: true + symbol_type: FUNCTION + crc: 0x139f3c01 + type_id: 0x1cd366b4 + full_name: "__rtnl_link_unregister" +} elf_symbol { id: 0x99aa632e name: "__sbitmap_queue_get" @@ -326740,6 +329693,24 @@ elf_symbol { type_id: 0x1009f18b full_name: "__serio_register_port" } +elf_symbol { + id: 0xa2cf1eee + name: "__set_page_dirty_nobuffers" + is_defined: true + symbol_type: FUNCTION + crc: 0x924fff08 + type_id: 0x9c203488 + full_name: "__set_page_dirty_nobuffers" +} +elf_symbol { + id: 0xeaddb422 + name: "__set_page_owner" + is_defined: true + symbol_type: FUNCTION + crc: 0xe501529f + type_id: 0x12201786 + full_name: "__set_page_owner" +} elf_symbol { id: 0x29a11d8a name: "__sg_page_iter_dma_next" @@ -326983,6 +329954,15 @@ elf_symbol { type_id: 0xdfba2774 full_name: "__sw_hweight8" } +elf_symbol { + id: 0xd8a7d75e + name: "__sync_dirty_buffer" + is_defined: true + symbol_type: FUNCTION + crc: 0xc6ed2a41 + type_id: 0x9a308be1 + full_name: "__sync_dirty_buffer" +} elf_symbol { id: 0x04e4f57e name: "__sysfs_match_string" @@ -327991,6 +330971,24 @@ elf_symbol { type_id: 0x9baf3eaf full_name: "__traceiter_android_rvh_show_max_freq" } +elf_symbol { + id: 0x955e6fc1 + name: "__traceiter_android_rvh_sk_alloc" + is_defined: true + symbol_type: FUNCTION + crc: 0x25e47a00 + type_id: 0x9bdaaaaa + full_name: "__traceiter_android_rvh_sk_alloc" +} +elf_symbol { + id: 0xfe20c6e3 + name: "__traceiter_android_rvh_sk_free" + is_defined: true + symbol_type: FUNCTION + crc: 0xd0de15c8 + type_id: 0x9bdaaaaa + full_name: "__traceiter_android_rvh_sk_free" +} elf_symbol { id: 0x7b07c7f1 name: "__traceiter_android_rvh_tick_entry" @@ -328126,6 +331124,15 @@ elf_symbol { type_id: 0x98716c4f full_name: "__traceiter_android_vh_alloc_pages_reclaim_bypass" } +elf_symbol { + id: 0xa6e329cd + name: "__traceiter_android_vh_alloc_pages_slowpath" + is_defined: true + symbol_type: FUNCTION + crc: 0xd7a24d94 + type_id: 0x98788d90 + full_name: "__traceiter_android_vh_alloc_pages_slowpath" +} elf_symbol { id: 0x9c240ef1 name: "__traceiter_android_vh_alloc_uid" @@ -328648,6 +331655,15 @@ elf_symbol { type_id: 0x9bcd4ff7 full_name: "__traceiter_android_vh_encrypt_page" } +elf_symbol { + id: 0x1921d10d + name: "__traceiter_android_vh_exit_check" + is_defined: true + symbol_type: FUNCTION + crc: 0x73fa852b + type_id: 0x9bdbdcc4 + full_name: "__traceiter_android_vh_exit_check" +} elf_symbol { id: 0x1f554c2a name: "__traceiter_android_vh_exit_signal" @@ -328657,6 +331673,15 @@ elf_symbol { type_id: 0x9bdbdcc4 full_name: "__traceiter_android_vh_exit_signal" } +elf_symbol { + id: 0x343adff1 + name: "__traceiter_android_vh_exit_signal_whether_wake" + is_defined: true + symbol_type: FUNCTION + crc: 0x003a6b81 + type_id: 0x9bdfaf3f + full_name: "__traceiter_android_vh_exit_signal_whether_wake" +} elf_symbol { id: 0x93a4717b name: "__traceiter_android_vh_file_is_tiny_bypass" @@ -328693,6 +331718,15 @@ elf_symbol { type_id: 0x9bcfc1f5 full_name: "__traceiter_android_vh_free_user" } +elf_symbol { + id: 0x4d354aab + name: "__traceiter_android_vh_freeze_whether_wake" + is_defined: true + symbol_type: FUNCTION + crc: 0xefd9d739 + type_id: 0x9bdfaf3f + full_name: "__traceiter_android_vh_freeze_whether_wake" +} elf_symbol { id: 0x3272ce60 name: "__traceiter_android_vh_freq_qos_add_request" @@ -328927,6 +331961,15 @@ elf_symbol { type_id: 0x9bcd4ff7 full_name: "__traceiter_android_vh_jiffies_update" } +elf_symbol { + id: 0xe261e8cc + name: "__traceiter_android_vh_killed_process" + is_defined: true + symbol_type: FUNCTION + crc: 0x593713f5 + type_id: 0x9bdcdd91 + full_name: "__traceiter_android_vh_killed_process" +} elf_symbol { id: 0x18fde973 name: "__traceiter_android_vh_kswapd_per_node" @@ -329746,6 +332789,15 @@ elf_symbol { type_id: 0x9b85c291 full_name: "__traceiter_android_vh_tune_scan_type" } +elf_symbol { + id: 0x3947ecb4 + name: "__traceiter_android_vh_tune_swappiness" + is_defined: true + symbol_type: FUNCTION + crc: 0xd2ac8d57 + type_id: 0x9be2da56 + full_name: "__traceiter_android_vh_tune_swappiness" +} elf_symbol { id: 0x8a773cc3 name: "__traceiter_android_vh_typec_store_partner_src_caps" @@ -330061,6 +333113,15 @@ elf_symbol { type_id: 0x9ba39408 full_name: "__traceiter_dma_fence_emit" } +elf_symbol { + id: 0x5e5d9a70 + name: "__traceiter_error_report_end" + is_defined: true + symbol_type: FUNCTION + crc: 0xd29c1f10 + type_id: 0x9a2d8ab0 + full_name: "__traceiter_error_report_end" +} elf_symbol { id: 0x104ffeec name: "__traceiter_gpu_mem_total" @@ -330169,6 +333230,42 @@ elf_symbol { type_id: 0x9bcd50ad full_name: "__traceiter_mmap_lock_start_locking" } +elf_symbol { + id: 0x16d7641f + name: "__traceiter_net_dev_queue" + is_defined: true + symbol_type: FUNCTION + crc: 0x51ca976f + type_id: 0x9bba87c7 + full_name: "__traceiter_net_dev_queue" +} +elf_symbol { + id: 0xc8ec671c + name: "__traceiter_net_dev_xmit" + is_defined: true + symbol_type: FUNCTION + crc: 0x7a8f0110 + type_id: 0x9ba3940a + full_name: "__traceiter_net_dev_xmit" +} +elf_symbol { + id: 0x60c24c4f + name: "__traceiter_netif_receive_skb" + is_defined: true + symbol_type: FUNCTION + crc: 0x6957530d + type_id: 0x9bba87c7 + full_name: "__traceiter_netif_receive_skb" +} +elf_symbol { + id: 0xa7548418 + name: "__traceiter_netif_rx" + is_defined: true + symbol_type: FUNCTION + crc: 0x76d09323 + type_id: 0x9bba87c7 + full_name: "__traceiter_netif_rx" +} elf_symbol { id: 0x3e69b303 name: "__traceiter_pelt_rt_tp" @@ -331276,6 +334373,24 @@ elf_symbol { type_id: 0x18ccbd2c full_name: "__tracepoint_android_rvh_show_max_freq" } +elf_symbol { + id: 0xad588d93 + name: "__tracepoint_android_rvh_sk_alloc" + is_defined: true + symbol_type: OBJECT + crc: 0xda71608c + type_id: 0x18ccbd2c + full_name: "__tracepoint_android_rvh_sk_alloc" +} +elf_symbol { + id: 0x05463d55 + name: "__tracepoint_android_rvh_sk_free" + is_defined: true + symbol_type: OBJECT + crc: 0x06bf13fe + type_id: 0x18ccbd2c + full_name: "__tracepoint_android_rvh_sk_free" +} elf_symbol { id: 0x8db62b4f name: "__tracepoint_android_rvh_tick_entry" @@ -331411,6 +334526,15 @@ elf_symbol { type_id: 0x18ccbd2c full_name: "__tracepoint_android_vh_alloc_pages_reclaim_bypass" } +elf_symbol { + id: 0x1ebb872f + name: "__tracepoint_android_vh_alloc_pages_slowpath" + is_defined: true + symbol_type: OBJECT + crc: 0x08e2839b + type_id: 0x18ccbd2c + full_name: "__tracepoint_android_vh_alloc_pages_slowpath" +} elf_symbol { id: 0xea695d5b name: "__tracepoint_android_vh_alloc_uid" @@ -331933,6 +335057,15 @@ elf_symbol { type_id: 0x18ccbd2c full_name: "__tracepoint_android_vh_encrypt_page" } +elf_symbol { + id: 0x684e5f4f + name: "__tracepoint_android_vh_exit_check" + is_defined: true + symbol_type: OBJECT + crc: 0x49c49792 + type_id: 0x18ccbd2c + full_name: "__tracepoint_android_vh_exit_check" +} elf_symbol { id: 0x0d418d38 name: "__tracepoint_android_vh_exit_signal" @@ -331942,6 +335075,15 @@ elf_symbol { type_id: 0x18ccbd2c full_name: "__tracepoint_android_vh_exit_signal" } +elf_symbol { + id: 0x2121385f + name: "__tracepoint_android_vh_exit_signal_whether_wake" + is_defined: true + symbol_type: OBJECT + crc: 0xfc31d092 + type_id: 0x18ccbd2c + full_name: "__tracepoint_android_vh_exit_signal_whether_wake" +} elf_symbol { id: 0x50a83025 name: "__tracepoint_android_vh_file_is_tiny_bypass" @@ -331978,6 +335120,15 @@ elf_symbol { type_id: 0x18ccbd2c full_name: "__tracepoint_android_vh_free_user" } +elf_symbol { + id: 0x888dea6d + name: "__tracepoint_android_vh_freeze_whether_wake" + is_defined: true + symbol_type: OBJECT + crc: 0x8e4434ef + type_id: 0x18ccbd2c + full_name: "__tracepoint_android_vh_freeze_whether_wake" +} elf_symbol { id: 0xace80c56 name: "__tracepoint_android_vh_freq_qos_add_request" @@ -332212,6 +335363,15 @@ elf_symbol { type_id: 0x18ccbd2c full_name: "__tracepoint_android_vh_jiffies_update" } +elf_symbol { + id: 0xa48390ca + name: "__tracepoint_android_vh_killed_process" + is_defined: true + symbol_type: OBJECT + crc: 0xe41a7380 + type_id: 0x18ccbd2c + full_name: "__tracepoint_android_vh_killed_process" +} elf_symbol { id: 0x586a06d1 name: "__tracepoint_android_vh_kswapd_per_node" @@ -333031,6 +336191,15 @@ elf_symbol { type_id: 0x18ccbd2c full_name: "__tracepoint_android_vh_tune_scan_type" } +elf_symbol { + id: 0xfe6b6962 + name: "__tracepoint_android_vh_tune_swappiness" + is_defined: true + symbol_type: OBJECT + crc: 0x88fcdb6c + type_id: 0x18ccbd2c + full_name: "__tracepoint_android_vh_tune_swappiness" +} elf_symbol { id: 0x18e67da1 name: "__tracepoint_android_vh_typec_store_partner_src_caps" @@ -333346,6 +336515,15 @@ elf_symbol { type_id: 0x18ccbd2c full_name: "__tracepoint_dma_fence_emit" } +elf_symbol { + id: 0x3b13741e + name: "__tracepoint_error_report_end" + is_defined: true + symbol_type: OBJECT + crc: 0x0a463293 + type_id: 0x18ccbd2c + full_name: "__tracepoint_error_report_end" +} elf_symbol { id: 0xd8f3ca82 name: "__tracepoint_gpu_mem_total" @@ -333454,6 +336632,42 @@ elf_symbol { type_id: 0x18ccbd2c full_name: "__tracepoint_mmap_lock_start_locking" } +elf_symbol { + id: 0xd21276a5 + name: "__tracepoint_net_dev_queue" + is_defined: true + symbol_type: OBJECT + crc: 0x0f304d20 + type_id: 0x18ccbd2c + full_name: "__tracepoint_net_dev_queue" +} +elf_symbol { + id: 0x4a43bdfe + name: "__tracepoint_net_dev_xmit" + is_defined: true + symbol_type: OBJECT + crc: 0xb1d40474 + type_id: 0x18ccbd2c + full_name: "__tracepoint_net_dev_xmit" +} +elf_symbol { + id: 0xd224caa5 + name: "__tracepoint_netif_receive_skb" + is_defined: true + symbol_type: OBJECT + crc: 0x8ee83e85 + type_id: 0x18ccbd2c + full_name: "__tracepoint_netif_receive_skb" +} +elf_symbol { + id: 0xcbc5fd52 + name: "__tracepoint_netif_rx" + is_defined: true + symbol_type: OBJECT + crc: 0x8aa12be4 + type_id: 0x18ccbd2c + full_name: "__tracepoint_netif_rx" +} elf_symbol { id: 0xf3cb5921 name: "__tracepoint_pelt_rt_tp" @@ -334390,6 +337604,15 @@ elf_symbol { type_id: 0x1713ee74 full_name: "_trace_android_vh_record_pcpu_rwsem_starttime" } +elf_symbol { + id: 0x874fa015 + name: "_trace_android_vh_record_pcpu_rwsem_time_early" + is_defined: true + symbol_type: FUNCTION + crc: 0x2ea4d65a + type_id: 0x1c03dd76 + full_name: "_trace_android_vh_record_pcpu_rwsem_time_early" +} elf_symbol { id: 0x86a88093 name: "_vb2_fop_release" @@ -335396,6 +338619,15 @@ elf_symbol { type_id: 0x15f0919b full_name: "bio_put" } +elf_symbol { + id: 0xa8878d9e + name: "bio_split" + is_defined: true + symbol_type: FUNCTION + crc: 0x8e0ebb54 + type_id: 0x97a0d8a7 + full_name: "bio_split" +} elf_symbol { id: 0x1cb0de6c name: "bio_start_io_acct" @@ -335423,6 +338655,15 @@ elf_symbol { type_id: 0x9ad0bd67 full_name: "bit_wait_timeout" } +elf_symbol { + id: 0x00f38540 + name: "bit_waitqueue" + is_defined: true + symbol_type: FUNCTION + crc: 0xad9901ae + type_id: 0xf8e4b6f7 + full_name: "bit_waitqueue" +} elf_symbol { id: 0x181f78de name: "bitmap_alloc" @@ -335594,6 +338835,15 @@ elf_symbol { type_id: 0x168d2c88 full_name: "blk_execute_rq_nowait" } +elf_symbol { + id: 0x9eda4f26 + name: "blk_fill_rwbs" + is_defined: true + symbol_type: FUNCTION + crc: 0x2bd8a8bb + type_id: 0x105539bd + full_name: "blk_fill_rwbs" +} elf_symbol { id: 0xc0d4821a name: "blk_finish_plug" @@ -336296,6 +339546,15 @@ elf_symbol { type_id: 0x26cc0900 full_name: "blkdev_get_by_path" } +elf_symbol { + id: 0x4d722bb5 + name: "blkdev_issue_discard" + is_defined: true + symbol_type: FUNCTION + crc: 0x992b458f + type_id: 0x9dfe4183 + full_name: "blkdev_issue_discard" +} elf_symbol { id: 0x2a322266 name: "blkdev_issue_flush" @@ -336368,6 +339627,33 @@ elf_symbol { type_id: 0x104d4296 full_name: "blkg_rwstat_recursive_sum" } +elf_symbol { + id: 0xd289c43d + name: "block_dirty_folio" + is_defined: true + symbol_type: FUNCTION + crc: 0x77ada257 + type_id: 0xfb413284 + full_name: "block_dirty_folio" +} +elf_symbol { + id: 0x6efa206d + name: "block_invalidate_folio" + is_defined: true + symbol_type: FUNCTION + crc: 0x3045fd1d + type_id: 0x1b29bd73 + full_name: "block_invalidate_folio" +} +elf_symbol { + id: 0x5cf37146 + name: "block_is_partially_uptodate" + is_defined: true + symbol_type: FUNCTION + crc: 0x5e5d36ff + type_id: 0xf515b7e4 + full_name: "block_is_partially_uptodate" +} elf_symbol { id: 0x427cedc9 name: "blockdev_superblock" @@ -336935,6 +340221,15 @@ elf_symbol { type_id: 0x9a22976b full_name: "btbcm_write_pcm_int_params" } +elf_symbol { + id: 0x6bb6d4ca + name: "buffer_migrate_folio" + is_defined: true + symbol_type: FUNCTION + crc: 0x697d2102 + type_id: 0x986ccce1 + full_name: "buffer_migrate_folio" +} elf_symbol { id: 0x8ea00f54 name: "build_skb" @@ -337392,6 +340687,15 @@ elf_symbol { type_id: 0xe76c6fcf full_name: "capable" } +elf_symbol { + id: 0x61aaf300 + name: "capable_wrt_inode_uidgid" + is_defined: true + symbol_type: FUNCTION + crc: 0xaa02669a + type_id: 0xfdb03c5c + full_name: "capable_wrt_inode_uidgid" +} elf_symbol { id: 0xb2bfcc0c name: "cdc_parse_cdc_header" @@ -337779,6 +341083,15 @@ elf_symbol { type_id: 0x1a0b4b72 full_name: "class_unregister" } +elf_symbol { + id: 0xb242a940 + name: "clean_bdev_aliases" + is_defined: true + symbol_type: FUNCTION + crc: 0xa36f5732 + type_id: 0x10e535a4 + full_name: "clean_bdev_aliases" +} elf_symbol { id: 0xd156aa2c name: "cleancache_register_ops" @@ -337797,6 +341110,15 @@ elf_symbol { type_id: 0x187ab05b full_name: "cleanup_srcu_struct" } +elf_symbol { + id: 0xfa95bdc1 + name: "clear_inode" + is_defined: true + symbol_type: FUNCTION + crc: 0x89b4e8c0 + type_id: 0x167935b9 + full_name: "clear_inode" +} elf_symbol { id: 0xb63845e5 name: "clear_page" @@ -337804,6 +341126,15 @@ elf_symbol { symbol_type: FUNCTION crc: 0x3d9ee9f0 } +elf_symbol { + id: 0x52eaa51b + name: "clear_page_dirty_for_io" + is_defined: true + symbol_type: FUNCTION + crc: 0x20bc8096 + type_id: 0xff048ca3 + full_name: "clear_page_dirty_for_io" +} elf_symbol { id: 0x5332f89b name: "clk_bulk_disable" @@ -338828,6 +342159,15 @@ elf_symbol { symbol_type: FUNCTION crc: 0x4d0d163d } +elf_symbol { + id: 0x9f1f7cee + name: "copy_page_from_iter_atomic" + is_defined: true + symbol_type: FUNCTION + crc: 0xc8b6f813 + type_id: 0x97b4bbf8 + full_name: "copy_page_from_iter_atomic" +} elf_symbol { id: 0xd89255c2 name: "cpu_all_bits" @@ -339544,6 +342884,15 @@ elf_symbol { type_id: 0x25b94d0a full_name: "crc_ccitt" } +elf_symbol { + id: 0xd5cc5ce2 + name: "create_empty_buffers" + is_defined: true + symbol_type: FUNCTION + crc: 0x9b40f91e + type_id: 0x11f98eff + full_name: "create_empty_buffers" +} elf_symbol { id: 0xc3e46036 name: "create_function_device" @@ -340084,6 +343433,15 @@ elf_symbol { type_id: 0xb166862a full_name: "current_time" } +elf_symbol { + id: 0x4c090f07 + name: "current_umask" + is_defined: true + symbol_type: FUNCTION + crc: 0x5e95b1cd + type_id: 0x9d80e32f + full_name: "current_umask" +} elf_symbol { id: 0x171eca8a name: "d_add" @@ -340093,6 +343451,15 @@ elf_symbol { type_id: 0x147717e5 full_name: "d_add" } +elf_symbol { + id: 0x82537a82 + name: "d_add_ci" + is_defined: true + symbol_type: FUNCTION + crc: 0x09ad89bb + type_id: 0x889f851e + full_name: "d_add_ci" +} elf_symbol { id: 0x79187969 name: "d_alloc_name" @@ -340102,6 +343469,15 @@ elf_symbol { type_id: 0x8808e1d8 full_name: "d_alloc_name" } +elf_symbol { + id: 0x04f5a6e5 + name: "d_instantiate" + is_defined: true + symbol_type: FUNCTION + crc: 0xff9152a3 + type_id: 0x147717e5 + full_name: "d_instantiate" +} elf_symbol { id: 0x52864a7e name: "d_make_root" @@ -340111,6 +343487,15 @@ elf_symbol { type_id: 0x8a909712 full_name: "d_make_root" } +elf_symbol { + id: 0x8d5ab7b4 + name: "d_obtain_alias" + is_defined: true + symbol_type: FUNCTION + crc: 0x3e22d08f + type_id: 0x8a909712 + full_name: "d_obtain_alias" +} elf_symbol { id: 0xccc25fc1 name: "d_path" @@ -340120,6 +343505,15 @@ elf_symbol { type_id: 0x30964cd5 full_name: "d_path" } +elf_symbol { + id: 0xb96af991 + name: "d_splice_alias" + is_defined: true + symbol_type: FUNCTION + crc: 0x2dc0ecfe + type_id: 0x8ad88211 + full_name: "d_splice_alias" +} elf_symbol { id: 0xb771d13e name: "dapm_clock_event" @@ -343702,6 +347096,150 @@ elf_symbol { type_id: 0xa5be4b9b full_name: "divider_round_rate_parent" } +elf_symbol { + id: 0xf4cef372 + name: "dm_bufio_client_create" + is_defined: true + symbol_type: FUNCTION + crc: 0xb08df2d2 + type_id: 0x4b6ec637 + full_name: "dm_bufio_client_create" +} +elf_symbol { + id: 0xa2bba96c + name: "dm_bufio_client_destroy" + is_defined: true + symbol_type: FUNCTION + crc: 0xeca7949e + type_id: 0x1bd82ebd + full_name: "dm_bufio_client_destroy" +} +elf_symbol { + id: 0x7848fa66 + name: "dm_bufio_mark_buffer_dirty" + is_defined: true + symbol_type: FUNCTION + crc: 0x0ad0dc4f + type_id: 0x1a8f9ccc + full_name: "dm_bufio_mark_buffer_dirty" +} +elf_symbol { + id: 0x0db19b7a + name: "dm_bufio_new" + is_defined: true + symbol_type: FUNCTION + crc: 0xc0d7df85 + type_id: 0x5e9421aa + full_name: "dm_bufio_new" +} +elf_symbol { + id: 0xed0adecd + name: "dm_bufio_read" + is_defined: true + symbol_type: FUNCTION + crc: 0xb04f56ab + type_id: 0x5e9421aa + full_name: "dm_bufio_read" +} +elf_symbol { + id: 0xd3ad47e6 + name: "dm_bufio_release" + is_defined: true + symbol_type: FUNCTION + crc: 0xe6024e59 + type_id: 0x1a8f9ccc + full_name: "dm_bufio_release" +} +elf_symbol { + id: 0x042d9e44 + name: "dm_bufio_write_dirty_buffers" + is_defined: true + symbol_type: FUNCTION + crc: 0xa82b2066 + type_id: 0x96c09c01 + full_name: "dm_bufio_write_dirty_buffers" +} +elf_symbol { + id: 0x0991ae07 + name: "dm_disk" + is_defined: true + symbol_type: FUNCTION + crc: 0x6c18061f + type_id: 0x47570b9f + full_name: "dm_disk" +} +elf_symbol { + id: 0x650e9b1f + name: "dm_get_device" + is_defined: true + symbol_type: FUNCTION + crc: 0x1e1791d7 + type_id: 0x9221eee3 + full_name: "dm_get_device" +} +elf_symbol { + id: 0xd360b11b + name: "dm_kobject_release" + is_defined: true + symbol_type: FUNCTION + crc: 0x41e9f737 + type_id: 0x1864769e + full_name: "dm_kobject_release" +} +elf_symbol { + id: 0x8c40514f + name: "dm_read_arg_group" + is_defined: true + symbol_type: FUNCTION + crc: 0x39c74235 + type_id: 0x926c5025 + full_name: "dm_read_arg_group" +} +elf_symbol { + id: 0xe7718d4e + name: "dm_register_target" + is_defined: true + symbol_type: FUNCTION + crc: 0x99f64a0c + type_id: 0x90085da5 + full_name: "dm_register_target" +} +elf_symbol { + id: 0xb61b1afb + name: "dm_shift_arg" + is_defined: true + symbol_type: FUNCTION + crc: 0x7d27e504 + type_id: 0x98af9d1c + full_name: "dm_shift_arg" +} +elf_symbol { + id: 0xe96fb6a0 + name: "dm_table_get_md" + is_defined: true + symbol_type: FUNCTION + crc: 0xeba2f002 + type_id: 0xa7436d37 + full_name: "dm_table_get_md" +} +elf_symbol { + id: 0xf99054ab + name: "dm_table_get_mode" + is_defined: true + symbol_type: FUNCTION + crc: 0x925f0075 + type_id: 0x11508453 + full_name: "dm_table_get_mode" +} +elf_symbol { + id: 0x76f0e551 + name: "dm_unregister_target" + is_defined: true + symbol_type: FUNCTION + crc: 0x28405c27 + type_id: 0x1d10ef19 + full_name: "dm_unregister_target" +} elf_symbol { id: 0x6cb15207 name: "dma_alloc_attrs" @@ -344872,6 +348410,15 @@ elf_symbol { type_id: 0x9daf738f full_name: "down_write_killable" } +elf_symbol { + id: 0x626b81c7 + name: "down_write_trylock" + is_defined: true + symbol_type: FUNCTION + crc: 0xd0e551cc + type_id: 0x9daf738f + full_name: "down_write_trylock" +} elf_symbol { id: 0x4a57b168 name: "downgrade_write" @@ -348688,6 +352235,15 @@ elf_symbol { type_id: 0x9341cc84 full_name: "drmm_mode_config_init" } +elf_symbol { + id: 0x4dae13e9 + name: "drop_nlink" + is_defined: true + symbol_type: FUNCTION + crc: 0x4c7bc8cb + type_id: 0x167935b9 + full_name: "drop_nlink" +} elf_symbol { id: 0xe2b96ffd name: "dst_cache_destroy" @@ -349147,6 +352703,24 @@ elf_symbol { type_id: 0x17592b81 full_name: "end_buffer_read_sync" } +elf_symbol { + id: 0x45c0e0ad + name: "end_buffer_write_sync" + is_defined: true + symbol_type: FUNCTION + crc: 0x7207a9fa + type_id: 0x17592b81 + full_name: "end_buffer_write_sync" +} +elf_symbol { + id: 0xf7fd2915 + name: "end_page_writeback" + is_defined: true + symbol_type: FUNCTION + crc: 0xd203f7c4 + type_id: 0x11388634 + full_name: "end_page_writeback" +} elf_symbol { id: 0x7b9ffce9 name: "errno_to_blk_status" @@ -349156,6 +352730,15 @@ elf_symbol { type_id: 0x53bd7367 full_name: "errno_to_blk_status" } +elf_symbol { + id: 0xe506b877 + name: "errseq_set" + is_defined: true + symbol_type: FUNCTION + crc: 0x2ec6bba0 + type_id: 0xb55dce02 + full_name: "errseq_set" +} elf_symbol { id: 0xda116c83 name: "eth_commit_mac_addr_change" @@ -349507,6 +353090,24 @@ elf_symbol { type_id: 0x8432b9df full_name: "fasync_helper" } +elf_symbol { + id: 0xc56006c7 + name: "fault_in_iov_iter_readable" + is_defined: true + symbol_type: FUNCTION + crc: 0xd085a60d + type_id: 0x99d43279 + full_name: "fault_in_iov_iter_readable" +} +elf_symbol { + id: 0x639b2403 + name: "fault_in_safe_writeable" + is_defined: true + symbol_type: FUNCTION + crc: 0xf394f7da + type_id: 0x9b6b31b5 + full_name: "fault_in_safe_writeable" +} elf_symbol { id: 0xbbfb394e name: "fb_get_options" @@ -349543,6 +353144,33 @@ elf_symbol { type_id: 0x50f3b181 full_name: "fget" } +elf_symbol { + id: 0xab45f2a8 + name: "fiemap_fill_next_extent" + is_defined: true + symbol_type: FUNCTION + crc: 0x970a3f8f + type_id: 0x92ab0d8f + full_name: "fiemap_fill_next_extent" +} +elf_symbol { + id: 0x41eed79f + name: "fiemap_prep" + is_defined: true + symbol_type: FUNCTION + crc: 0x12888fc3 + type_id: 0x9b91dcee + full_name: "fiemap_prep" +} +elf_symbol { + id: 0xcdc0fffd + name: "file_check_and_advance_wb_err" + is_defined: true + symbol_type: FUNCTION + crc: 0x247050da + type_id: 0x9bba7997 + full_name: "file_check_and_advance_wb_err" +} elf_symbol { id: 0xe7aacfe5 name: "file_path" @@ -349561,6 +353189,24 @@ elf_symbol { type_id: 0x14609640 full_name: "file_ra_state_init" } +elf_symbol { + id: 0x99b0f07b + name: "file_remove_privs" + is_defined: true + symbol_type: FUNCTION + crc: 0x7adb4755 + type_id: 0x9bba7997 + full_name: "file_remove_privs" +} +elf_symbol { + id: 0xffbe24f4 + name: "file_update_time" + is_defined: true + symbol_type: FUNCTION + crc: 0xf206510a + type_id: 0x9bba7997 + full_name: "file_update_time" +} elf_symbol { id: 0x46b6e531 name: "file_write_and_wait_range" @@ -349570,6 +353216,78 @@ elf_symbol { type_id: 0x9b2d0f7e full_name: "file_write_and_wait_range" } +elf_symbol { + id: 0xbe28ee32 + name: "filemap_add_folio" + is_defined: true + symbol_type: FUNCTION + crc: 0x42f25711 + type_id: 0x986a916d + full_name: "filemap_add_folio" +} +elf_symbol { + id: 0x4927c9f3 + name: "filemap_dirty_folio" + is_defined: true + symbol_type: FUNCTION + crc: 0xa4ca0b75 + type_id: 0xfb413284 + full_name: "filemap_dirty_folio" +} +elf_symbol { + id: 0x50a5072e + name: "filemap_fault" + is_defined: true + symbol_type: FUNCTION + crc: 0x6ea71511 + type_id: 0xcee4fe8d + full_name: "filemap_fault" +} +elf_symbol { + id: 0xef606c3f + name: "filemap_fdatawait_range" + is_defined: true + symbol_type: FUNCTION + crc: 0x021f318f + type_id: 0x98773f07 + full_name: "filemap_fdatawait_range" +} +elf_symbol { + id: 0x3289d59f + name: "filemap_fdatawrite" + is_defined: true + symbol_type: FUNCTION + crc: 0xd20a8cfb + type_id: 0x98e049ee + full_name: "filemap_fdatawrite" +} +elf_symbol { + id: 0x82b19820 + name: "filemap_fdatawrite_range" + is_defined: true + symbol_type: FUNCTION + crc: 0x99f56961 + type_id: 0x98773f07 + full_name: "filemap_fdatawrite_range" +} +elf_symbol { + id: 0x7c937fc2 + name: "filemap_flush" + is_defined: true + symbol_type: FUNCTION + crc: 0x12f67935 + type_id: 0x98e049ee + full_name: "filemap_flush" +} +elf_symbol { + id: 0xc7c68a05 + name: "filemap_write_and_wait_range" + is_defined: true + symbol_type: FUNCTION + crc: 0x44a9ebe6 + type_id: 0x98773f07 + full_name: "filemap_write_and_wait_range" +} elf_symbol { id: 0xb9dc79d0 name: "filp_close" @@ -349795,6 +353513,15 @@ elf_symbol { type_id: 0x1958e6c4 full_name: "folio_wait_bit" } +elf_symbol { + id: 0x07508208 + name: "folio_write_one" + is_defined: true + symbol_type: FUNCTION + crc: 0x198f6eb0 + type_id: 0x95dcd734 + full_name: "folio_write_one" +} elf_symbol { id: 0xcb14b5cc name: "follow_pfn" @@ -350542,6 +354269,24 @@ elf_symbol { type_id: 0x7e204efc full_name: "generic_device_group" } +elf_symbol { + id: 0xe21d8d05 + name: "generic_error_remove_page" + is_defined: true + symbol_type: FUNCTION + crc: 0xae4d8a76 + type_id: 0x98fa4494 + full_name: "generic_error_remove_page" +} +elf_symbol { + id: 0x338cfb0f + name: "generic_file_direct_write" + is_defined: true + symbol_type: FUNCTION + crc: 0x552bc0af + type_id: 0x16637235 + full_name: "generic_file_direct_write" +} elf_symbol { id: 0x94b60724 name: "generic_file_llseek" @@ -350551,6 +354296,24 @@ elf_symbol { type_id: 0x2d64ae3e full_name: "generic_file_llseek" } +elf_symbol { + id: 0x6ac5d61b + name: "generic_file_mmap" + is_defined: true + symbol_type: FUNCTION + crc: 0xe3415064 + type_id: 0x9b923492 + full_name: "generic_file_mmap" +} +elf_symbol { + id: 0x54756210 + name: "generic_file_open" + is_defined: true + symbol_type: FUNCTION + crc: 0x62233d3d + type_id: 0x9b022eae + full_name: "generic_file_open" +} elf_symbol { id: 0x5ec3daa8 name: "generic_file_read_iter" @@ -350560,6 +354323,24 @@ elf_symbol { type_id: 0x16637235 full_name: "generic_file_read_iter" } +elf_symbol { + id: 0x5530f759 + name: "generic_file_splice_read" + is_defined: true + symbol_type: FUNCTION + crc: 0xa2e84b5f + type_id: 0x12c79320 + full_name: "generic_file_splice_read" +} +elf_symbol { + id: 0x3812bb22 + name: "generic_fillattr" + is_defined: true + symbol_type: FUNCTION + crc: 0xb418cdc6 + type_id: 0x13184981 + full_name: "generic_fillattr" +} elf_symbol { id: 0x2f7205ee name: "generic_handle_domain_irq" @@ -350596,6 +354377,15 @@ elf_symbol { type_id: 0x16637235 full_name: "generic_perform_write" } +elf_symbol { + id: 0x4c4073c3 + name: "generic_read_dir" + is_defined: true + symbol_type: FUNCTION + crc: 0x91cfdae1 + type_id: 0x12e4741f + full_name: "generic_read_dir" +} elf_symbol { id: 0x798f83da name: "generic_shutdown_super" @@ -351877,6 +355667,15 @@ elf_symbol { type_id: 0x901afa25 full_name: "gpiod_to_irq" } +elf_symbol { + id: 0x085aa99f + name: "grab_cache_page_write_begin" + is_defined: true + symbol_type: FUNCTION + crc: 0xb2975faa + type_id: 0xb8358fd3 + full_name: "grab_cache_page_write_begin" +} elf_symbol { id: 0x4dcdd24d name: "gre_add_protocol" @@ -353713,6 +357512,15 @@ elf_symbol { type_id: 0x12c15d81 full_name: "ieee802154_xmit_hw_error" } +elf_symbol { + id: 0xb9f64e9d + name: "iget5_locked" + is_defined: true + symbol_type: FUNCTION + crc: 0xcccf338c + type_id: 0x1210c1fa + full_name: "iget5_locked" +} elf_symbol { id: 0x4a5f3d41 name: "ignore_console_lock_warning" @@ -353722,6 +357530,24 @@ elf_symbol { type_id: 0x74d29cf1 full_name: "ignore_console_lock_warning" } +elf_symbol { + id: 0x4292b79d + name: "igrab" + is_defined: true + symbol_type: FUNCTION + crc: 0x49b765c7 + type_id: 0x1d8c491d + full_name: "igrab" +} +elf_symbol { + id: 0xb779176d + name: "ihold" + is_defined: true + symbol_type: FUNCTION + crc: 0xaafc22eb + type_id: 0x167935b9 + full_name: "ihold" +} elf_symbol { id: 0x98a39db9 name: "iio_alloc_pollfunc" @@ -354037,6 +357863,15 @@ elf_symbol { type_id: 0x92755a6c full_name: "iio_write_channel_raw" } +elf_symbol { + id: 0xf87ecda4 + name: "ilookup5" + is_defined: true + symbol_type: FUNCTION + crc: 0x3c5a783a + type_id: 0x12101463 + full_name: "ilookup5" +} elf_symbol { id: 0x00b4d2da name: "import_iovec" @@ -354091,6 +357926,24 @@ elf_symbol { type_id: 0xb1b78fab full_name: "in_egroup_p" } +elf_symbol { + id: 0x63d665a4 + name: "in_group_p" + is_defined: true + symbol_type: FUNCTION + crc: 0x8b8059bd + type_id: 0xb1b78fab + full_name: "in_group_p" +} +elf_symbol { + id: 0x8efc83b2 + name: "inc_nlink" + is_defined: true + symbol_type: FUNCTION + crc: 0xd16fc9d0 + type_id: 0x167935b9 + full_name: "inc_nlink" +} elf_symbol { id: 0x53baed4c name: "inc_node_page_state" @@ -354289,6 +358142,15 @@ elf_symbol { type_id: 0x5d05d02e full_name: "init_pseudo" } +elf_symbol { + id: 0xa64f3c31 + name: "init_special_inode" + is_defined: true + symbol_type: FUNCTION + crc: 0x0b1432c5 + type_id: 0x160abbb8 + full_name: "init_special_inode" +} elf_symbol { id: 0x7dce8737 name: "init_srcu_struct" @@ -354352,6 +358214,60 @@ elf_symbol { type_id: 0x1378736d full_name: "init_wait_var_entry" } +elf_symbol { + id: 0x7a805e08 + name: "inode_dio_wait" + is_defined: true + symbol_type: FUNCTION + crc: 0xe5edf4d7 + type_id: 0x167935b9 + full_name: "inode_dio_wait" +} +elf_symbol { + id: 0x318d9226 + name: "inode_init_once" + is_defined: true + symbol_type: FUNCTION + crc: 0xfcba10c7 + type_id: 0x167935b9 + full_name: "inode_init_once" +} +elf_symbol { + id: 0x4e9dfa3b + name: "inode_init_owner" + is_defined: true + symbol_type: FUNCTION + crc: 0x2924f2e6 + type_id: 0x13129118 + full_name: "inode_init_owner" +} +elf_symbol { + id: 0x7c74ccbc + name: "inode_maybe_inc_iversion" + is_defined: true + symbol_type: FUNCTION + crc: 0xb431e564 + type_id: 0xf9f0c251 + full_name: "inode_maybe_inc_iversion" +} +elf_symbol { + id: 0xf4ae7c22 + name: "inode_newsize_ok" + is_defined: true + symbol_type: FUNCTION + crc: 0x3ee4bf76 + type_id: 0x936a3614 + full_name: "inode_newsize_ok" +} +elf_symbol { + id: 0x2b7e86c2 + name: "inode_set_flags" + is_defined: true + symbol_type: FUNCTION + crc: 0x6d364533 + type_id: 0x177e4178 + full_name: "inode_set_flags" +} elf_symbol { id: 0x18eeb52f name: "input_alloc_absinfo" @@ -354685,6 +358601,24 @@ elf_symbol { type_id: 0x1b4c69f5 full_name: "interval_tree_remove" } +elf_symbol { + id: 0x22167fe7 + name: "invalidate_bdev" + is_defined: true + symbol_type: FUNCTION + crc: 0xe6a5cbed + type_id: 0x1393d7c4 + full_name: "invalidate_bdev" +} +elf_symbol { + id: 0x38472bf4 + name: "invalidate_inode_pages2_range" + is_defined: true + symbol_type: FUNCTION + crc: 0x91936719 + type_id: 0x98214125 + full_name: "invalidate_inode_pages2_range" +} elf_symbol { id: 0xc3e2d4ae name: "invalidate_mapping_pages" @@ -355135,6 +359069,33 @@ elf_symbol { type_id: 0x1a5fed1b full_name: "iounmap" } +elf_symbol { + id: 0x382b3272 + name: "iov_iter_advance" + is_defined: true + symbol_type: FUNCTION + crc: 0x4a850157 + type_id: 0x189472bc + full_name: "iov_iter_advance" +} +elf_symbol { + id: 0x29ecb8e9 + name: "iov_iter_alignment" + is_defined: true + symbol_type: FUNCTION + crc: 0xd13c0fd5 + type_id: 0x3c97e3d9 + full_name: "iov_iter_alignment" +} +elf_symbol { + id: 0x3d6623cb + name: "iov_iter_get_pages2" + is_defined: true + symbol_type: FUNCTION + crc: 0x43784624 + type_id: 0x1f3dc21f + full_name: "iov_iter_get_pages2" +} elf_symbol { id: 0x71726a83 name: "iov_iter_init" @@ -355162,6 +359123,15 @@ elf_symbol { type_id: 0x189472bc full_name: "iov_iter_revert" } +elf_symbol { + id: 0x1c2c7614 + name: "iov_iter_single_seg_count" + is_defined: true + symbol_type: FUNCTION + crc: 0x1c396b24 + type_id: 0x9a04e7d8 + full_name: "iov_iter_single_seg_count" +} elf_symbol { id: 0x6c6beb07 name: "iova_domain_init_rcaches" @@ -355225,6 +359195,15 @@ elf_symbol { type_id: 0x1557244f full_name: "ip_compute_csum" } +elf_symbol { + id: 0x333700e4 + name: "ip_local_deliver" + is_defined: true + symbol_type: FUNCTION + crc: 0x20dcb3a1 + type_id: 0x9cd33969 + full_name: "ip_local_deliver" +} elf_symbol { id: 0x5234b1b5 name: "ip_local_out" @@ -355945,6 +359924,15 @@ elf_symbol { type_id: 0x9bba7997 full_name: "is_ashmem_file" } +elf_symbol { + id: 0x65d49acf + name: "is_bad_inode" + is_defined: true + symbol_type: FUNCTION + crc: 0x11395a73 + type_id: 0xf8453f2e + full_name: "is_bad_inode" +} elf_symbol { id: 0x064a6e13 name: "is_console_locked" @@ -356000,6 +359988,15 @@ elf_symbol { type_id: 0x9c203488 full_name: "isolate_anon_lru_page" } +elf_symbol { + id: 0xbb7edccb + name: "iter_file_splice_write" + is_defined: true + symbol_type: FUNCTION + crc: 0x4d5b9d7d + type_id: 0x165fda2d + full_name: "iter_file_splice_write" +} elf_symbol { id: 0xd4b34ea6 name: "iterate_dir" @@ -356018,6 +360015,15 @@ elf_symbol { type_id: 0x9659ea27 full_name: "iterate_fd" } +elf_symbol { + id: 0xca27ab6b + name: "iunique" + is_defined: true + symbol_type: FUNCTION + crc: 0x371ada39 + type_id: 0x14827bad + full_name: "iunique" +} elf_symbol { id: 0x124d42c2 name: "iw_handler_get_spy" @@ -356459,6 +360465,15 @@ elf_symbol { type_id: 0x10985193 full_name: "kick_all_cpus_sync" } +elf_symbol { + id: 0xe4128490 + name: "kick_process" + is_defined: true + symbol_type: FUNCTION + crc: 0xf7f30b89 + type_id: 0x17de3be6 + full_name: "kick_process" +} elf_symbol { id: 0xb1072fb1 name: "kill_anon_super" @@ -356468,6 +360483,15 @@ elf_symbol { type_id: 0x1923cb99 full_name: "kill_anon_super" } +elf_symbol { + id: 0xe657d525 + name: "kill_block_super" + is_defined: true + symbol_type: FUNCTION + crc: 0x0ae50695 + type_id: 0x1923cb99 + full_name: "kill_block_super" +} elf_symbol { id: 0x661955d6 name: "kill_fasync" @@ -356558,6 +360582,15 @@ elf_symbol { type_id: 0x5eef7e83 full_name: "kmem_cache_alloc" } +elf_symbol { + id: 0x3b959429 + name: "kmem_cache_alloc_lru" + is_defined: true + symbol_type: FUNCTION + crc: 0x390004c6 + type_id: 0x5de26741 + full_name: "kmem_cache_alloc_lru" +} elf_symbol { id: 0x86921e4b name: "kmem_cache_alloc_node" @@ -358043,6 +362076,24 @@ elf_symbol { type_id: 0xc8585588 full_name: "llist_reverse_order" } +elf_symbol { + id: 0x6b29ddfb + name: "load_nls" + is_defined: true + symbol_type: FUNCTION + crc: 0x14646232 + type_id: 0x4e6eaff2 + full_name: "load_nls" +} +elf_symbol { + id: 0xc05c2da4 + name: "load_nls_default" + is_defined: true + symbol_type: FUNCTION + crc: 0xbeb78729 + type_id: 0x4f4e564c + full_name: "load_nls_default" +} elf_symbol { id: 0xaaab26df name: "lock_sock_nested" @@ -358223,6 +362274,42 @@ elf_symbol { type_id: 0xf1236ad6 full_name: "mac_pton" } +elf_symbol { + id: 0xf4530070 + name: "make_bad_inode" + is_defined: true + symbol_type: FUNCTION + crc: 0xfc3a4c5b + type_id: 0x167935b9 + full_name: "make_bad_inode" +} +elf_symbol { + id: 0x7ee18475 + name: "mark_buffer_async_write" + is_defined: true + symbol_type: FUNCTION + crc: 0x747d8323 + type_id: 0x16c5a8cd + full_name: "mark_buffer_async_write" +} +elf_symbol { + id: 0x18bd1341 + name: "mark_buffer_dirty" + is_defined: true + symbol_type: FUNCTION + crc: 0xeebcd79e + type_id: 0x16c5a8cd + full_name: "mark_buffer_dirty" +} +elf_symbol { + id: 0xac8ea5a3 + name: "mark_buffer_write_io_error" + is_defined: true + symbol_type: FUNCTION + crc: 0x1161eeb7 + type_id: 0x16c5a8cd + full_name: "mark_buffer_write_io_error" +} elf_symbol { id: 0x5a1c51ee name: "mark_page_accessed" @@ -359875,6 +363962,24 @@ elf_symbol { type_id: 0x10985193 full_name: "mmu_notifier_synchronize" } +elf_symbol { + id: 0x8ba1a556 + name: "mnt_drop_write_file" + is_defined: true + symbol_type: FUNCTION + crc: 0x85bbfbfb + type_id: 0x16a2cb2b + full_name: "mnt_drop_write_file" +} +elf_symbol { + id: 0xa5e98cbe + name: "mnt_want_write_file" + is_defined: true + symbol_type: FUNCTION + crc: 0xd1d02e22 + type_id: 0x9bba7997 + full_name: "mnt_want_write_file" +} elf_symbol { id: 0xdf7b9a78 name: "mod_delayed_work_on" @@ -359929,6 +364034,33 @@ elf_symbol { type_id: 0x1251a683 full_name: "module_put" } +elf_symbol { + id: 0x18e8ea11 + name: "mount_bdev" + is_defined: true + symbol_type: FUNCTION + crc: 0x60df2cf1 + type_id: 0x81599f70 + full_name: "mount_bdev" +} +elf_symbol { + id: 0x1405e8c0 + name: "mpage_read_folio" + is_defined: true + symbol_type: FUNCTION + crc: 0xec56bcef + type_id: 0x956e6587 + full_name: "mpage_read_folio" +} +elf_symbol { + id: 0x84babda3 + name: "mpage_readahead" + is_defined: true + symbol_type: FUNCTION + crc: 0x6659babe + type_id: 0x19fc4f29 + full_name: "mpage_readahead" +} elf_symbol { id: 0xbedab58b name: "msi_first_desc" @@ -360757,6 +364889,15 @@ elf_symbol { type_id: 0xfebe0504 full_name: "nf_ct_invert_tuple" } +elf_symbol { + id: 0x8b1dfb41 + name: "nf_register_net_hook" + is_defined: true + symbol_type: FUNCTION + crc: 0x10b94e6c + type_id: 0x9e67eade + full_name: "nf_register_net_hook" +} elf_symbol { id: 0x43078d96 name: "nf_register_net_hooks" @@ -360766,6 +364907,15 @@ elf_symbol { type_id: 0x9e768b87 full_name: "nf_register_net_hooks" } +elf_symbol { + id: 0x840dad92 + name: "nf_unregister_net_hook" + is_defined: true + symbol_type: FUNCTION + crc: 0xd4486d5d + type_id: 0x137f5862 + full_name: "nf_unregister_net_hook" +} elf_symbol { id: 0x619db28f name: "nf_unregister_net_hooks" @@ -361090,6 +365240,15 @@ elf_symbol { type_id: 0x2d64ae3e full_name: "noop_llseek" } +elf_symbol { + id: 0x16059afd + name: "notify_change" + is_defined: true + symbol_type: FUNCTION + crc: 0x1869b2a0 + type_id: 0x9e20f17d + full_name: "notify_change" +} elf_symbol { id: 0x1560f116 name: "nr_cpu_ids" @@ -361117,6 +365276,15 @@ elf_symbol { type_id: 0x6720d32f full_name: "nr_irqs" } +elf_symbol { + id: 0xea37502b + name: "nr_running" + is_defined: true + symbol_type: FUNCTION + crc: 0x909a8abf + type_id: 0xcedb7efb + full_name: "nr_running" +} elf_symbol { id: 0x0bb7f730 name: "nr_swap_pages" @@ -362755,6 +366923,24 @@ elf_symbol { type_id: 0x6720d32f full_name: "overflowuid" } +elf_symbol { + id: 0xdea2b008 + name: "page_cache_next_miss" + is_defined: true + symbol_type: FUNCTION + crc: 0x8865f190 + type_id: 0x340d6f59 + full_name: "page_cache_next_miss" +} +elf_symbol { + id: 0xdf2c83f5 + name: "page_cache_prev_miss" + is_defined: true + symbol_type: FUNCTION + crc: 0x01049f80 + type_id: 0x340d6f59 + full_name: "page_cache_prev_miss" +} elf_symbol { id: 0x60d84cc3 name: "page_endio" @@ -362821,6 +367007,15 @@ elf_symbol { type_id: 0x6a8ce717 full_name: "page_mapping" } +elf_symbol { + id: 0x8cc91d1b + name: "page_owner_inited" + is_defined: true + symbol_type: OBJECT + crc: 0xda1512e5 + type_id: 0x8e47c273 + full_name: "page_owner_inited" +} elf_symbol { id: 0x44e50ff8 name: "page_pinner_inited" @@ -362911,6 +367106,33 @@ elf_symbol { type_id: 0x19658c89 full_name: "page_reporting_unregister" } +elf_symbol { + id: 0x4271852e + name: "page_zero_new_buffers" + is_defined: true + symbol_type: FUNCTION + crc: 0x670fcbd9 + type_id: 0x103ff2f5 + full_name: "page_zero_new_buffers" +} +elf_symbol { + id: 0x0fe80546 + name: "pagecache_get_page" + is_defined: true + symbol_type: FUNCTION + crc: 0xcba46f3c + type_id: 0xb82f817c + full_name: "pagecache_get_page" +} +elf_symbol { + id: 0x9b003f99 + name: "pagevec_lookup_range_tag" + is_defined: true + symbol_type: FUNCTION + crc: 0xb9dae17e + type_id: 0xcfac76b5 + full_name: "pagevec_lookup_range_tag" +} elf_symbol { id: 0x37d86bb7 name: "panic" @@ -364108,6 +368330,15 @@ elf_symbol { type_id: 0x12feb005 full_name: "percpu_counter_add_batch" } +elf_symbol { + id: 0x7efbd192 + name: "percpu_counter_batch" + is_defined: true + symbol_type: OBJECT + crc: 0x05240ee7 + type_id: 0x6720d32f + full_name: "percpu_counter_batch" +} elf_symbol { id: 0x22f7748e name: "percpu_down_write" @@ -367069,6 +371300,15 @@ elf_symbol { type_id: 0x1f00dfeb full_name: "putback_movable_pages" } +elf_symbol { + id: 0x8dafa617 + name: "pvclock_gtod_register_notifier" + is_defined: true + symbol_type: FUNCTION + crc: 0xb4b97c90 + type_id: 0x9b6d4a33 + full_name: "pvclock_gtod_register_notifier" +} elf_symbol { id: 0x53ee2234 name: "pwm_apply_state" @@ -367780,6 +372020,15 @@ elf_symbol { type_id: 0xb8307855 full_name: "read_cache_page" } +elf_symbol { + id: 0x2886690b + name: "readahead_gfp_mask" + is_defined: true + symbol_type: FUNCTION + crc: 0x74cada1a + type_id: 0x4a02979c + full_name: "readahead_gfp_mask" +} elf_symbol { id: 0x46082c90 name: "reboot_mode" @@ -367816,6 +372065,15 @@ elf_symbol { type_id: 0x98e049ee full_name: "reclaim_shmem_address_space" } +elf_symbol { + id: 0x8fe1956e + name: "redirty_page_for_writepage" + is_defined: true + symbol_type: FUNCTION + crc: 0x9d126bc3 + type_id: 0xf6be4a6e + full_name: "redirty_page_for_writepage" +} elf_symbol { id: 0x3b03aaea name: "refcount_dec_and_lock" @@ -370183,6 +374441,24 @@ elf_symbol { type_id: 0x1192ec84 full_name: "sb800_prefetch" } +elf_symbol { + id: 0x75781cce + name: "sb_min_blocksize" + is_defined: true + symbol_type: FUNCTION + crc: 0xe004c464 + type_id: 0x95a7fa69 + full_name: "sb_min_blocksize" +} +elf_symbol { + id: 0xd3eab591 + name: "sb_set_blocksize" + is_defined: true + symbol_type: FUNCTION + crc: 0x94ed96ed + type_id: 0x95a7fa69 + full_name: "sb_set_blocksize" +} elf_symbol { id: 0x806f167c name: "sbitmap_add_wait_queue" @@ -371227,6 +375503,15 @@ elf_symbol { type_id: 0x9aa0b156 full_name: "security_file_ioctl" } +elf_symbol { + id: 0xb7265b03 + name: "security_inode_init_security" + is_defined: true + symbol_type: FUNCTION + crc: 0x1e6fb814 + type_id: 0x9b034295 + full_name: "security_inode_init_security" +} elf_symbol { id: 0x24b9d7ed name: "security_sk_classify_flow" @@ -371749,6 +376034,15 @@ elf_symbol { type_id: 0x130ef56d full_name: "set_next_entity" } +elf_symbol { + id: 0x7e3fb039 + name: "set_nlink" + is_defined: true + symbol_type: FUNCTION + crc: 0x190daaac + type_id: 0x176f2021 + full_name: "set_nlink" +} elf_symbol { id: 0xaae00157 name: "set_normalized_timespec64" @@ -371776,6 +376070,15 @@ elf_symbol { type_id: 0x9c203488 full_name: "set_page_dirty_lock" } +elf_symbol { + id: 0x500f328c + name: "set_page_writeback" + is_defined: true + symbol_type: FUNCTION + crc: 0x7c2bfc58 + type_id: 0xff048ca3 + full_name: "set_page_writeback" +} elf_symbol { id: 0xe19d98a9 name: "set_task_cpu" @@ -371794,6 +376097,15 @@ elf_symbol { type_id: 0x142e0390 full_name: "set_user_nice" } +elf_symbol { + id: 0x7d05df74 + name: "setattr_prepare" + is_defined: true + symbol_type: FUNCTION + crc: 0xd880e38e + type_id: 0x9e20c0b8 + full_name: "setattr_prepare" +} elf_symbol { id: 0x5d6d169f name: "setup_udp_tunnel_sock" @@ -375983,6 +380295,15 @@ elf_symbol { type_id: 0x9e8b6578 full_name: "sync_blockdev" } +elf_symbol { + id: 0x75fe69c4 + name: "sync_dirty_buffer" + is_defined: true + symbol_type: FUNCTION + crc: 0xcedf4474 + type_id: 0x9bdd1a71 + full_name: "sync_dirty_buffer" +} elf_symbol { id: 0x2a267913 name: "sync_file_create" @@ -376001,6 +380322,24 @@ elf_symbol { type_id: 0xc68f67ec full_name: "sync_file_get_fence" } +elf_symbol { + id: 0xfb2634da + name: "sync_filesystem" + is_defined: true + symbol_type: FUNCTION + crc: 0x9b53df8a + type_id: 0x943b7925 + full_name: "sync_filesystem" +} +elf_symbol { + id: 0xe7caa0b7 + name: "sync_inode_metadata" + is_defined: true + symbol_type: FUNCTION + crc: 0xf4644f98 + type_id: 0x9afd0449 + full_name: "sync_inode_metadata" +} elf_symbol { id: 0x3da4fd63 name: "synchronize_irq" @@ -376478,6 +380817,15 @@ elf_symbol { type_id: 0x13f8b706 full_name: "system_wq" } +elf_symbol { + id: 0x5a86c789 + name: "tag_pages_for_writeback" + is_defined: true + symbol_type: FUNCTION + crc: 0x31d107da + type_id: 0x1539f399 + full_name: "tag_pages_for_writeback" +} elf_symbol { id: 0x2eda3aae name: "task_active_pid_ns" @@ -377027,6 +381375,15 @@ elf_symbol { type_id: 0x3e2facf6 full_name: "timespec64_to_jiffies" } +elf_symbol { + id: 0xaed64d9d + name: "timestamp_truncate" + is_defined: true + symbol_type: FUNCTION + crc: 0xe6d28852 + type_id: 0xb98ee524 + full_name: "timestamp_truncate" +} elf_symbol { id: 0xa603e7df name: "tipc_dump_done" @@ -377090,6 +381447,15 @@ elf_symbol { type_id: 0x1c163406 full_name: "topology_update_thermal_pressure" } +elf_symbol { + id: 0x3217f3a4 + name: "touch_atime" + is_defined: true + symbol_type: FUNCTION + crc: 0x838565c7 + type_id: 0x1e3bdb22 + full_name: "touch_atime" +} elf_symbol { id: 0xf7dfdad1 name: "touch_softlockup_watchdog" @@ -377342,6 +381708,42 @@ elf_symbol { type_id: 0x10985193 full_name: "tracing_off" } +elf_symbol { + id: 0x3f07269b + name: "truncate_inode_pages" + is_defined: true + symbol_type: FUNCTION + crc: 0x30d50607 + type_id: 0x1566644a + full_name: "truncate_inode_pages" +} +elf_symbol { + id: 0x3c7c6ce9 + name: "truncate_inode_pages_final" + is_defined: true + symbol_type: FUNCTION + crc: 0xc3c0465a + type_id: 0x15f8fb52 + full_name: "truncate_inode_pages_final" +} +elf_symbol { + id: 0x7a43283c + name: "truncate_pagecache" + is_defined: true + symbol_type: FUNCTION + crc: 0x288af9d7 + type_id: 0x16e7aaa1 + full_name: "truncate_pagecache" +} +elf_symbol { + id: 0x44cd0751 + name: "truncate_setsize" + is_defined: true + symbol_type: FUNCTION + crc: 0x3a8f6a77 + type_id: 0x16e7aaa1 + full_name: "truncate_setsize" +} elf_symbol { id: 0x3d986fb5 name: "try_module_get" @@ -377369,6 +381771,15 @@ elf_symbol { type_id: 0x360a8ce9 full_name: "try_to_free_mem_cgroup_pages" } +elf_symbol { + id: 0x8fa1e478 + name: "try_to_writeback_inodes_sb" + is_defined: true + symbol_type: FUNCTION + crc: 0xaa6bae3f + type_id: 0x1b90a8d8 + full_name: "try_to_writeback_inodes_sb" +} elf_symbol { id: 0xe54aec5b name: "try_wait_for_completion" @@ -379430,6 +383841,15 @@ elf_symbol { type_id: 0x13f52df1 full_name: "uio_unregister_device" } +elf_symbol { + id: 0xa13a99d8 + name: "unload_nls" + is_defined: true + symbol_type: FUNCTION + crc: 0xf632a6eb + type_id: 0x10aeeb41 + full_name: "unload_nls" +} elf_symbol { id: 0x9f5197f0 name: "unlock_buffer" @@ -379439,6 +383859,15 @@ elf_symbol { type_id: 0x16c5a8cd full_name: "unlock_buffer" } +elf_symbol { + id: 0x5ad67dea + name: "unlock_new_inode" + is_defined: true + symbol_type: FUNCTION + crc: 0x8e87ba89 + type_id: 0x167935b9 + full_name: "unlock_new_inode" +} elf_symbol { id: 0x11fd8c82 name: "unlock_page" @@ -383030,6 +387459,15 @@ elf_symbol { type_id: 0x1eca8a34 full_name: "vhost_dev_cleanup" } +elf_symbol { + id: 0x14bde45c + name: "vhost_dev_flush" + is_defined: true + symbol_type: FUNCTION + crc: 0xdb5a9875 + type_id: 0x1eca8a34 + full_name: "vhost_dev_flush" +} elf_symbol { id: 0x429eeda3 name: "vhost_dev_init" @@ -384263,6 +388701,15 @@ elf_symbol { type_id: 0xa7f744cd full_name: "wait_woken" } +elf_symbol { + id: 0x738279bf + name: "wake_bit_function" + is_defined: true + symbol_type: FUNCTION + crc: 0xca431c05 + type_id: 0x9d71353d + full_name: "wake_bit_function" +} elf_symbol { id: 0x7540b5a8 name: "wake_up_bit" @@ -384290,6 +388737,15 @@ elf_symbol { type_id: 0x9ac6895a full_name: "wake_up_process" } +elf_symbol { + id: 0x63928faf + name: "wake_up_state" + is_defined: true + symbol_type: FUNCTION + crc: 0xecf43f83 + type_id: 0x9bd09cc2 + full_name: "wake_up_state" +} elf_symbol { id: 0xecc7b6fc name: "wake_up_var" @@ -384533,6 +388989,15 @@ elf_symbol { type_id: 0x126f3be6 full_name: "wq_worker_comm" } +elf_symbol { + id: 0xa643ac3f + name: "write_inode_now" + is_defined: true + symbol_type: FUNCTION + crc: 0x627c55da + type_id: 0x9afd0449 + full_name: "write_inode_now" +} elf_symbol { id: 0x61731bd0 name: "ww_mutex_lock" @@ -385381,6 +389846,8 @@ interface { symbol_id: 0xeaf0b860 symbol_id: 0x1bc9d7cd symbol_id: 0xd97b055a + symbol_id: 0xac51df48 + symbol_id: 0x2c42b675 symbol_id: 0x8920b575 symbol_id: 0x149a28b5 symbol_id: 0x1709df48 @@ -385403,6 +389870,10 @@ interface { symbol_id: 0xc8eb813d symbol_id: 0x7bf707d4 symbol_id: 0xbf1d0365 + symbol_id: 0x2d1c1f2d + symbol_id: 0x9bed4545 + symbol_id: 0xefdcf4c1 + symbol_id: 0x2f449b9e symbol_id: 0x2057d4fc symbol_id: 0x4598418e symbol_id: 0x587f0c74 @@ -385500,8 +389971,11 @@ interface { symbol_id: 0x80f1cf36 symbol_id: 0x3e32c80e symbol_id: 0x5298aa39 + symbol_id: 0x6036d483 symbol_id: 0xaf8ee687 symbol_id: 0x746a66fc + symbol_id: 0x6a92cb2d + symbol_id: 0x6fc34fdb symbol_id: 0x47a334c4 symbol_id: 0xebf4b11f symbol_id: 0x5b1ea047 @@ -385534,6 +390008,7 @@ interface { symbol_id: 0x88943e29 symbol_id: 0x1060f5aa symbol_id: 0x66da9aca + symbol_id: 0xd02fc75b symbol_id: 0xe97034af symbol_id: 0xdb78f816 symbol_id: 0x6db91312 @@ -385568,6 +390043,7 @@ interface { symbol_id: 0xb3ed4cf9 symbol_id: 0x9f86f628 symbol_id: 0x22bd6642 + symbol_id: 0x0b9d6bbc symbol_id: 0x040ec563 symbol_id: 0xa5f70021 symbol_id: 0xc8acd38c @@ -385648,6 +390124,7 @@ interface { symbol_id: 0x3f068dc8 symbol_id: 0x2a48bf7d symbol_id: 0xe3a7489a + symbol_id: 0x9d948fe1 symbol_id: 0xf7c2da07 symbol_id: 0x1141e9bb symbol_id: 0xf263b97f @@ -385655,6 +390132,7 @@ interface { symbol_id: 0x2b453adc symbol_id: 0xd5276fa4 symbol_id: 0x98379aaf + symbol_id: 0x31b4eed9 symbol_id: 0x99aa632e symbol_id: 0xe68925b8 symbol_id: 0x6e3bb1cf @@ -385666,6 +390144,8 @@ interface { symbol_id: 0x55017671 symbol_id: 0x257c4bb9 symbol_id: 0x8aca43ec + symbol_id: 0xa2cf1eee + symbol_id: 0xeaddb422 symbol_id: 0x29a11d8a symbol_id: 0x208b66fa symbol_id: 0x4a440f54 @@ -385693,6 +390173,7 @@ interface { symbol_id: 0x7d0d7b3f symbol_id: 0xef62271a symbol_id: 0x243936f1 + symbol_id: 0xd8a7d75e symbol_id: 0x04e4f57e symbol_id: 0xb04d8b58 symbol_id: 0xd7d29ff4 @@ -385805,6 +390286,8 @@ interface { symbol_id: 0xa01b20ce symbol_id: 0x73c83ef4 symbol_id: 0x46515de8 + symbol_id: 0x955e6fc1 + symbol_id: 0xfe20c6e3 symbol_id: 0x7b07c7f1 symbol_id: 0x968833a5 symbol_id: 0x09f2fded @@ -385820,6 +390303,7 @@ interface { symbol_id: 0x86527a4e symbol_id: 0x33f9278c symbol_id: 0x2e343246 + symbol_id: 0xa6e329cd symbol_id: 0x9c240ef1 symbol_id: 0x505f4289 symbol_id: 0xd5431a65 @@ -385878,11 +390362,14 @@ interface { symbol_id: 0xdcaa59a3 symbol_id: 0x7ebac47a symbol_id: 0xf586d5b6 + symbol_id: 0x1921d10d symbol_id: 0x1f554c2a + symbol_id: 0x343adff1 symbol_id: 0x93a4717b symbol_id: 0xc189c2a7 symbol_id: 0x5ecff02f symbol_id: 0xe3ce1f52 + symbol_id: 0x4d354aab symbol_id: 0x3272ce60 symbol_id: 0x4d900d32 symbol_id: 0xe6eff83f @@ -385909,6 +390396,7 @@ interface { symbol_id: 0x0bf41403 symbol_id: 0x4dca46cc symbol_id: 0xf83fbd26 + symbol_id: 0xe261e8cc symbol_id: 0x18fde973 symbol_id: 0xe19d2bf8 symbol_id: 0x993f42ff @@ -386000,6 +390488,7 @@ interface { symbol_id: 0x0119fc41 symbol_id: 0xd9f43028 symbol_id: 0x39155e73 + symbol_id: 0x3947ecb4 symbol_id: 0x8a773cc3 symbol_id: 0x9545623c symbol_id: 0x558490b1 @@ -386035,6 +390524,7 @@ interface { symbol_id: 0x7e705ab7 symbol_id: 0x7b03aae7 symbol_id: 0x92373f85 + symbol_id: 0x5e5d9a70 symbol_id: 0x104ffeec symbol_id: 0x6d4f31c4 symbol_id: 0xcf61fd25 @@ -386047,6 +390537,10 @@ interface { symbol_id: 0x5c33446d symbol_id: 0x423dad0f symbol_id: 0xc630c439 + symbol_id: 0x16d7641f + symbol_id: 0xc8ec671c + symbol_id: 0x60c24c4f + symbol_id: 0xa7548418 symbol_id: 0x3e69b303 symbol_id: 0x7f1a363f symbol_id: 0x2c11fea4 @@ -386170,6 +390664,8 @@ interface { symbol_id: 0xe48123a4 symbol_id: 0x00b7ed82 symbol_id: 0xe8cacf26 + symbol_id: 0xad588d93 + symbol_id: 0x05463d55 symbol_id: 0x8db62b4f symbol_id: 0xe9c87fab symbol_id: 0xdf07959f @@ -386185,6 +390681,7 @@ interface { symbol_id: 0xe1489e0c symbol_id: 0x37776872 symbol_id: 0xfc735654 + symbol_id: 0x1ebb872f symbol_id: 0xea695d5b symbol_id: 0xd82141b7 symbol_id: 0xe520cb67 @@ -386243,11 +390740,14 @@ interface { symbol_id: 0x54b2cd01 symbol_id: 0x188eab44 symbol_id: 0xe7584e1c + symbol_id: 0x684e5f4f symbol_id: 0x0d418d38 + symbol_id: 0x2121385f symbol_id: 0x50a83025 symbol_id: 0x04a824b5 symbol_id: 0xe6918e09 symbol_id: 0x4d4fd1cc + symbol_id: 0x888dea6d symbol_id: 0xace80c56 symbol_id: 0xa0ce156c symbol_id: 0x46787271 @@ -386274,6 +390774,7 @@ interface { symbol_id: 0x31457bed symbol_id: 0x62c13726 symbol_id: 0xafbca760 + symbol_id: 0xa48390ca symbol_id: 0x586a06d1 symbol_id: 0xda2d53f2 symbol_id: 0x50a5a949 @@ -386365,6 +390866,7 @@ interface { symbol_id: 0x09ba106b symbol_id: 0xf9580976 symbol_id: 0x49b955bd + symbol_id: 0xfe6b6962 symbol_id: 0x18e67da1 symbol_id: 0x75a2f39e symbol_id: 0x7b5c377f @@ -386400,6 +390902,7 @@ interface { symbol_id: 0xbf086359 symbol_id: 0xef6e6795 symbol_id: 0xb2d6f207 + symbol_id: 0x3b13741e symbol_id: 0xd8f3ca82 symbol_id: 0xff315556 symbol_id: 0x6d72699f @@ -386412,6 +390915,10 @@ interface { symbol_id: 0x88a08d67 symbol_id: 0xe2682879 symbol_id: 0xdffbb8bf + symbol_id: 0xd21276a5 + symbol_id: 0x4a43bdfe + symbol_id: 0xd224caa5 + symbol_id: 0xcbc5fd52 symbol_id: 0xf3cb5921 symbol_id: 0xcb194ec9 symbol_id: 0x009c40ce @@ -386516,6 +391023,7 @@ interface { symbol_id: 0xa5eaf571 symbol_id: 0x7c570dc6 symbol_id: 0x993e379e + symbol_id: 0x874fa015 symbol_id: 0x86a88093 symbol_id: 0xfbb6649f symbol_id: 0xa3514d5f @@ -386628,9 +391136,11 @@ interface { symbol_id: 0x61a552c6 symbol_id: 0x5a9da856 symbol_id: 0x1d853176 + symbol_id: 0xa8878d9e symbol_id: 0x1cb0de6c symbol_id: 0xe0e9f920 symbol_id: 0xfba0da8c + symbol_id: 0x00f38540 symbol_id: 0x181f78de symbol_id: 0xbe6da55e symbol_id: 0x95792096 @@ -386650,6 +391160,7 @@ interface { symbol_id: 0x528ef002 symbol_id: 0x90bf9007 symbol_id: 0xd76a9123 + symbol_id: 0x9eda4f26 symbol_id: 0xc0d4821a symbol_id: 0xaea1564a symbol_id: 0x0d1fc920 @@ -386728,6 +391239,7 @@ interface { symbol_id: 0x4cb4702d symbol_id: 0x0b067d4b symbol_id: 0xc0201123 + symbol_id: 0x4d722bb5 symbol_id: 0x2a322266 symbol_id: 0x57e1cd01 symbol_id: 0xf0581d11 @@ -386736,6 +391248,9 @@ interface { symbol_id: 0xabd39b51 symbol_id: 0x6dfac71b symbol_id: 0xb0184730 + symbol_id: 0xd289c43d + symbol_id: 0x6efa206d + symbol_id: 0x5cf37146 symbol_id: 0x427cedc9 symbol_id: 0x11fbb9ce symbol_id: 0xd4a0f991 @@ -386799,6 +391314,7 @@ interface { symbol_id: 0xb47c5ffe symbol_id: 0xdded4dcd symbol_id: 0x9dea2dda + symbol_id: 0x6bb6d4ca symbol_id: 0x8ea00f54 symbol_id: 0x521ad765 symbol_id: 0x0f9d7b5e @@ -386850,6 +391366,7 @@ interface { symbol_id: 0x9c1662dc symbol_id: 0x9e7fc289 symbol_id: 0x0e419b40 + symbol_id: 0x61aaf300 symbol_id: 0xb2bfcc0c symbol_id: 0x06192615 symbol_id: 0x9e3deb49 @@ -386893,9 +391410,12 @@ interface { symbol_id: 0xb29100f2 symbol_id: 0xef9eb644 symbol_id: 0xf91cb171 + symbol_id: 0xb242a940 symbol_id: 0xd156aa2c symbol_id: 0x00d9abe7 + symbol_id: 0xfa95bdc1 symbol_id: 0xb63845e5 + symbol_id: 0x52eaa51b symbol_id: 0x5332f89b symbol_id: 0xdfc28761 symbol_id: 0x75df86d2 @@ -387010,6 +391530,7 @@ interface { symbol_id: 0x610edc84 symbol_id: 0xd71898b4 symbol_id: 0xc1167624 + symbol_id: 0x9f1f7cee symbol_id: 0xd89255c2 symbol_id: 0x962b6a68 symbol_id: 0x33bbeca6 @@ -387090,6 +391611,7 @@ interface { symbol_id: 0xec1b66f9 symbol_id: 0xac913841 symbol_id: 0x42676517 + symbol_id: 0xd5cc5ce2 symbol_id: 0xc3e46036 symbol_id: 0xcd2564d1 symbol_id: 0x2968f72a @@ -387150,10 +391672,15 @@ interface { symbol_id: 0x50e383fc symbol_id: 0x823aeba5 symbol_id: 0xde96cb2f + symbol_id: 0x4c090f07 symbol_id: 0x171eca8a + symbol_id: 0x82537a82 symbol_id: 0x79187969 + symbol_id: 0x04f5a6e5 symbol_id: 0x52864a7e + symbol_id: 0x8d5ab7b4 symbol_id: 0xccc25fc1 + symbol_id: 0xb96af991 symbol_id: 0xb771d13e symbol_id: 0x53d11a8d symbol_id: 0x5489a975 @@ -387552,6 +392079,22 @@ interface { symbol_id: 0xedd83590 symbol_id: 0x840989b2 symbol_id: 0x57325158 + symbol_id: 0xf4cef372 + symbol_id: 0xa2bba96c + symbol_id: 0x7848fa66 + symbol_id: 0x0db19b7a + symbol_id: 0xed0adecd + symbol_id: 0xd3ad47e6 + symbol_id: 0x042d9e44 + symbol_id: 0x0991ae07 + symbol_id: 0x650e9b1f + symbol_id: 0xd360b11b + symbol_id: 0x8c40514f + symbol_id: 0xe7718d4e + symbol_id: 0xb61b1afb + symbol_id: 0xe96fb6a0 + symbol_id: 0xf99054ab + symbol_id: 0x76f0e551 symbol_id: 0x6cb15207 symbol_id: 0x12eaf956 symbol_id: 0xac4ecea5 @@ -387680,6 +392223,7 @@ interface { symbol_id: 0x3d2d0ba2 symbol_id: 0x0d57c53d symbol_id: 0xab93a1ea + symbol_id: 0x626b81c7 symbol_id: 0x4a57b168 symbol_id: 0x8a417941 symbol_id: 0xb04874d2 @@ -388104,6 +392648,7 @@ interface { symbol_id: 0xdaf34c14 symbol_id: 0x1f1ab070 symbol_id: 0x66dcfd31 + symbol_id: 0x4dae13e9 symbol_id: 0xe2b96ffd symbol_id: 0x126bb89f symbol_id: 0x2e0e7810 @@ -388155,7 +392700,10 @@ interface { symbol_id: 0x8f99729e symbol_id: 0xb6a9c6f8 symbol_id: 0x309cb0fd + symbol_id: 0x45c0e0ad + symbol_id: 0xf7fd2915 symbol_id: 0x7b9ffce9 + symbol_id: 0xe506b877 symbol_id: 0xda116c83 symbol_id: 0xa279fd1d symbol_id: 0x134d07e5 @@ -388195,13 +392743,28 @@ interface { symbol_id: 0x0a446897 symbol_id: 0xb107d2cd symbol_id: 0x8628f24d + symbol_id: 0xc56006c7 + symbol_id: 0x639b2403 symbol_id: 0xbbfb394e symbol_id: 0x79edfc56 symbol_id: 0xc3077f07 symbol_id: 0xedcfa797 + symbol_id: 0xab45f2a8 + symbol_id: 0x41eed79f + symbol_id: 0xcdc0fffd symbol_id: 0xe7aacfe5 symbol_id: 0x9e942fbe + symbol_id: 0x99b0f07b + symbol_id: 0xffbe24f4 symbol_id: 0x46b6e531 + symbol_id: 0xbe28ee32 + symbol_id: 0x4927c9f3 + symbol_id: 0x50a5072e + symbol_id: 0xef606c3f + symbol_id: 0x3289d59f + symbol_id: 0x82b19820 + symbol_id: 0x7c937fc2 + symbol_id: 0xc7c68a05 symbol_id: 0xb9dc79d0 symbol_id: 0x8bbdb127 symbol_id: 0xeaf15c9b @@ -388227,6 +392790,7 @@ interface { symbol_id: 0x09d08108 symbol_id: 0x3c7c2553 symbol_id: 0x3dca9a13 + symbol_id: 0x07508208 symbol_id: 0xcb14b5cc symbol_id: 0x1721c938 symbol_id: 0x1bf542c4 @@ -388310,12 +392874,19 @@ interface { symbol_id: 0xc5fee33e symbol_id: 0x7419d447 symbol_id: 0x30828743 + symbol_id: 0xe21d8d05 + symbol_id: 0x338cfb0f symbol_id: 0x94b60724 + symbol_id: 0x6ac5d61b + symbol_id: 0x54756210 symbol_id: 0x5ec3daa8 + symbol_id: 0x5530f759 + symbol_id: 0x3812bb22 symbol_id: 0x2f7205ee symbol_id: 0x7d577f86 symbol_id: 0x95a840b8 symbol_id: 0x7f639ef1 + symbol_id: 0x4c4073c3 symbol_id: 0x798f83da symbol_id: 0x542785af symbol_id: 0x86da67c0 @@ -388458,6 +393029,7 @@ interface { symbol_id: 0x2bcde32a symbol_id: 0x65cf864e symbol_id: 0xc5a4a821 + symbol_id: 0x085aa99f symbol_id: 0x4dcdd24d symbol_id: 0x8df87722 symbol_id: 0x0ac30c0d @@ -388662,7 +393234,10 @@ interface { symbol_id: 0x82d54cd2 symbol_id: 0xec107a09 symbol_id: 0x841218b7 + symbol_id: 0xb9f64e9d symbol_id: 0x4a5f3d41 + symbol_id: 0x4292b79d + symbol_id: 0xb779176d symbol_id: 0x98a39db9 symbol_id: 0xf9fd308c symbol_id: 0x5956f21f @@ -388698,12 +393273,15 @@ interface { symbol_id: 0x08fd4b84 symbol_id: 0xc6d8f246 symbol_id: 0x6f2f4bd1 + symbol_id: 0xf87ecda4 symbol_id: 0x00b4d2da symbol_id: 0xdf968210 symbol_id: 0xc93c3b7d symbol_id: 0xcae49fd9 symbol_id: 0x83940072 symbol_id: 0x511cdd52 + symbol_id: 0x63d665a4 + symbol_id: 0x8efc83b2 symbol_id: 0x53baed4c symbol_id: 0xaf4fc4b9 symbol_id: 0x2d6e1a71 @@ -388726,6 +393304,7 @@ interface { symbol_id: 0x86c8a137 symbol_id: 0x64e448f4 symbol_id: 0x4e874464 + symbol_id: 0xa64f3c31 symbol_id: 0x7dce8737 symbol_id: 0x3d6f5577 symbol_id: 0x2b35dbba @@ -388733,6 +393312,12 @@ interface { symbol_id: 0x5eecacc4 symbol_id: 0x215b5641 symbol_id: 0xbf6470f2 + symbol_id: 0x7a805e08 + symbol_id: 0x318d9226 + symbol_id: 0x4e9dfa3b + symbol_id: 0x7c74ccbc + symbol_id: 0xf4ae7c22 + symbol_id: 0x2b7e86c2 symbol_id: 0x18eeb52f symbol_id: 0xbc652525 symbol_id: 0x2336c16f @@ -388770,6 +393355,8 @@ interface { symbol_id: 0x0d19106d symbol_id: 0xfe94820e symbol_id: 0xe7fc8dce + symbol_id: 0x22167fe7 + symbol_id: 0x38472bf4 symbol_id: 0xc3e2d4ae symbol_id: 0x6b8c216a symbol_id: 0x6f047c6e @@ -388820,9 +393407,13 @@ interface { symbol_id: 0x42137268 symbol_id: 0xa0390871 symbol_id: 0xfb789e26 + symbol_id: 0x382b3272 + symbol_id: 0x29ecb8e9 + symbol_id: 0x3d6623cb symbol_id: 0x71726a83 symbol_id: 0xffb394c4 symbol_id: 0x48a6183b + symbol_id: 0x1c2c7614 symbol_id: 0x6c6beb07 symbol_id: 0x1be0f35f symbol_id: 0xd9fe9b1d @@ -388830,6 +393421,7 @@ interface { symbol_id: 0x7837fb7f symbol_id: 0x807f9d22 symbol_id: 0x6cd920cf + symbol_id: 0x333700e4 symbol_id: 0x5234b1b5 symbol_id: 0xaed020d7 symbol_id: 0xc1d5ac06 @@ -388910,14 +393502,17 @@ interface { symbol_id: 0xdbb90310 symbol_id: 0x3d2a104d symbol_id: 0x9ba08730 + symbol_id: 0x65d49acf symbol_id: 0x064a6e13 symbol_id: 0x73ffe9a9 symbol_id: 0x03de6dc5 symbol_id: 0xe4e974b3 symbol_id: 0x2066c48d symbol_id: 0x1cd74592 + symbol_id: 0xbb7edccb symbol_id: 0xd4b34ea6 symbol_id: 0x3c6496cb + symbol_id: 0xca27ab6b symbol_id: 0x124d42c2 symbol_id: 0xd106aba0 symbol_id: 0x5cce6b17 @@ -388967,7 +393562,9 @@ interface { symbol_id: 0x6dc922be symbol_id: 0x5cdb4ea4 symbol_id: 0x6d575dad + symbol_id: 0xe4128490 symbol_id: 0xb1072fb1 + symbol_id: 0xe657d525 symbol_id: 0x661955d6 symbol_id: 0xd6a8ff16 symbol_id: 0x053e25cb @@ -388978,6 +393575,7 @@ interface { symbol_id: 0xa64fdec4 symbol_id: 0xcbec700e symbol_id: 0x394ce3dd + symbol_id: 0x3b959429 symbol_id: 0x86921e4b symbol_id: 0x56f23732 symbol_id: 0xa5a4fafa @@ -389143,6 +393741,8 @@ interface { symbol_id: 0xf33d71ea symbol_id: 0xc50733a4 symbol_id: 0xc162c911 + symbol_id: 0x6b29ddfb + symbol_id: 0xc05c2da4 symbol_id: 0xaaab26df symbol_id: 0x42eaca18 symbol_id: 0x408fc274 @@ -389163,6 +393763,10 @@ interface { symbol_id: 0x01bea327 symbol_id: 0x4f31c756 symbol_id: 0x7bd17841 + symbol_id: 0xf4530070 + symbol_id: 0x7ee18475 + symbol_id: 0x18bd1341 + symbol_id: 0xac8ea5a3 symbol_id: 0x5a1c51ee symbol_id: 0xe4eac6bd symbol_id: 0x602510fe @@ -389347,12 +393951,17 @@ interface { symbol_id: 0x381bc1b0 symbol_id: 0x236a1277 symbol_id: 0xa062fd64 + symbol_id: 0x8ba1a556 + symbol_id: 0xa5e98cbe symbol_id: 0xdf7b9a78 symbol_id: 0xa259d75f symbol_id: 0x93f5b442 symbol_id: 0xe4008a83 symbol_id: 0x7eaf76f6 symbol_id: 0x65106d59 + symbol_id: 0x18e8ea11 + symbol_id: 0x1405e8c0 + symbol_id: 0x84babda3 symbol_id: 0xbedab58b symbol_id: 0x603dd7ca symbol_id: 0xc30a6d76 @@ -389445,7 +394054,9 @@ interface { symbol_id: 0xb4e99805 symbol_id: 0x471faa17 symbol_id: 0x82e37620 + symbol_id: 0x8b1dfb41 symbol_id: 0x43078d96 + symbol_id: 0x840dad92 symbol_id: 0x619db28f symbol_id: 0x36bc8d13 symbol_id: 0x38637341 @@ -389482,9 +394093,11 @@ interface { symbol_id: 0x39787440 symbol_id: 0x7f258c4e symbol_id: 0x64e6aa0b + symbol_id: 0x16059afd symbol_id: 0x1560f116 symbol_id: 0x1cfcf940 symbol_id: 0x3704ac3f + symbol_id: 0xea37502b symbol_id: 0x0bb7f730 symbol_id: 0xb65e3baf symbol_id: 0xf68f8b33 @@ -389667,6 +394280,8 @@ interface { symbol_id: 0x57ecab02 symbol_id: 0x27d0c7b6 symbol_id: 0x28b33064 + symbol_id: 0xdea2b008 + symbol_id: 0xdf2c83f5 symbol_id: 0x60d84cc3 symbol_id: 0xb613af5e symbol_id: 0xff029108 @@ -389674,6 +394289,7 @@ interface { symbol_id: 0x13dfcd3d symbol_id: 0xc2b69854 symbol_id: 0x4f3e5356 + symbol_id: 0x8cc91d1b symbol_id: 0x44e50ff8 symbol_id: 0xec5c680b symbol_id: 0xdc14ff55 @@ -389684,6 +394300,9 @@ interface { symbol_id: 0x3c537500 symbol_id: 0x1b814fa6 symbol_id: 0x9ca2e070 + symbol_id: 0x4271852e + symbol_id: 0x0fe80546 + symbol_id: 0x9b003f99 symbol_id: 0x37d86bb7 symbol_id: 0x32ecd828 symbol_id: 0xe769f645 @@ -389817,6 +394436,7 @@ interface { symbol_id: 0x123cd197 symbol_id: 0xe57e5e73 symbol_id: 0x8ba9d028 + symbol_id: 0x7efbd192 symbol_id: 0x22f7748e symbol_id: 0x12951e5c symbol_id: 0xe4bc7703 @@ -390146,6 +394766,7 @@ interface { symbol_id: 0x15848de9 symbol_id: 0xde695e5a symbol_id: 0x4e730977 + symbol_id: 0x8dafa617 symbol_id: 0x53ee2234 symbol_id: 0x227e051f symbol_id: 0x9a5fd229 @@ -390225,10 +394846,12 @@ interface { symbol_id: 0x85c7decb symbol_id: 0x87a9e1a0 symbol_id: 0x5b227eda + symbol_id: 0x2886690b symbol_id: 0x46082c90 symbol_id: 0x590d247f symbol_id: 0x91579542 symbol_id: 0x2a59e35c + symbol_id: 0x8fe1956e symbol_id: 0x3b03aaea symbol_id: 0xeeb1ddf9 symbol_id: 0x54bb98b3 @@ -390492,6 +395115,8 @@ interface { symbol_id: 0x8fb082a6 symbol_id: 0x570df167 symbol_id: 0x84f045c2 + symbol_id: 0x75781cce + symbol_id: 0xd3eab591 symbol_id: 0x806f167c symbol_id: 0xf13ba64e symbol_id: 0xe4f77cb7 @@ -390608,6 +395233,7 @@ interface { symbol_id: 0x4a4e8bee symbol_id: 0x5b060b7d symbol_id: 0xec171799 + symbol_id: 0xb7265b03 symbol_id: 0x24b9d7ed symbol_id: 0x25471057 symbol_id: 0xb77dc501 @@ -390666,11 +395292,14 @@ interface { symbol_id: 0x1f625c64 symbol_id: 0x180ceb0c symbol_id: 0x19ed5e1a + symbol_id: 0x7e3fb039 symbol_id: 0xaae00157 symbol_id: 0x455375fa symbol_id: 0xc1ea8aaa + symbol_id: 0x500f328c symbol_id: 0xe19d98a9 symbol_id: 0xdebcf3e9 + symbol_id: 0x7d05df74 symbol_id: 0x5d6d169f symbol_id: 0x023858a0 symbol_id: 0x7b2c2128 @@ -391137,8 +395766,11 @@ interface { symbol_id: 0xfb52ace2 symbol_id: 0x44e002a2 symbol_id: 0x1fe11014 + symbol_id: 0x75fe69c4 symbol_id: 0x2a267913 symbol_id: 0xf3c91dcd + symbol_id: 0xfb2634da + symbol_id: 0xe7caa0b7 symbol_id: 0x3da4fd63 symbol_id: 0xc49e9f39 symbol_id: 0x89663420 @@ -391192,6 +395824,7 @@ interface { symbol_id: 0xa64e4b1e symbol_id: 0xd143c302 symbol_id: 0xbf6d0a0f + symbol_id: 0x5a86c789 symbol_id: 0x2eda3aae symbol_id: 0x9891b743 symbol_id: 0x51f65372 @@ -391253,6 +395886,7 @@ interface { symbol_id: 0x5da495c5 symbol_id: 0xdc3e523b symbol_id: 0x3934d205 + symbol_id: 0xaed64d9d symbol_id: 0xa603e7df symbol_id: 0xfbbf21e2 symbol_id: 0xb08b0149 @@ -391260,6 +395894,7 @@ interface { symbol_id: 0x18c0f285 symbol_id: 0xd3e5c9bd symbol_id: 0x96be8568 + symbol_id: 0x3217f3a4 symbol_id: 0xf7dfdad1 symbol_id: 0x47d78ddb symbol_id: 0x961122f4 @@ -391288,9 +395923,14 @@ interface { symbol_id: 0x3df2f359 symbol_id: 0x33172d21 symbol_id: 0x54bbaa46 + symbol_id: 0x3f07269b + symbol_id: 0x3c7c6ce9 + symbol_id: 0x7a43283c + symbol_id: 0x44cd0751 symbol_id: 0x3d986fb5 symbol_id: 0x2f855953 symbol_id: 0x8814f5b8 + symbol_id: 0x8fa1e478 symbol_id: 0xe54aec5b symbol_id: 0xce4acc7b symbol_id: 0xe244df50 @@ -391520,7 +396160,9 @@ interface { symbol_id: 0xc9fa7338 symbol_id: 0xb163f167 symbol_id: 0x439eff60 + symbol_id: 0xa13a99d8 symbol_id: 0x9f5197f0 + symbol_id: 0x5ad67dea symbol_id: 0x11fd8c82 symbol_id: 0xe41b8f90 symbol_id: 0x60ffe144 @@ -391920,6 +396562,7 @@ interface { symbol_id: 0xf33dadbd symbol_id: 0x743ba358 symbol_id: 0x9f33c2c6 + symbol_id: 0x14bde45c symbol_id: 0x429eeda3 symbol_id: 0x67d81c4b symbol_id: 0x5b1b7953 @@ -392057,9 +396700,11 @@ interface { symbol_id: 0x60488ecf symbol_id: 0x9d727719 symbol_id: 0xa4027847 + symbol_id: 0x738279bf symbol_id: 0x7540b5a8 symbol_id: 0xb1036d49 symbol_id: 0x9a87f32b + symbol_id: 0x63928faf symbol_id: 0xecc7b6fc symbol_id: 0x5d14316b symbol_id: 0x0094f87c @@ -392087,6 +396732,7 @@ interface { symbol_id: 0x4e8c6206 symbol_id: 0x887e1dde symbol_id: 0x180eeaeb + symbol_id: 0xa643ac3f symbol_id: 0x61731bd0 symbol_id: 0x6f9f10f2 symbol_id: 0x99941051 diff --git a/android/abi_gki_aarch64_exynosauto b/android/abi_gki_aarch64_exynosauto index da26fd1faca5..a26228697242 100644 --- a/android/abi_gki_aarch64_exynosauto +++ b/android/abi_gki_aarch64_exynosauto @@ -1,94 +1,386 @@ [abi_symbol_list] # commonly used symbols + alloc_workqueue + alt_cb_patch_nops + __arch_copy_from_user + __arch_copy_to_user + arm64_use_ng_mappings + blocking_notifier_call_chain + blocking_notifier_chain_register + cancel_delayed_work_sync + __check_object_size + __class_create + class_destroy + clk_disable + clk_enable + __clk_get_hw + clk_get_rate + clk_hw_get_parent clk_prepare + clk_register + clk_register_clkdev + clk_register_fixed_factor + clk_register_fixed_rate + clk_set_rate clk_unprepare + complete + __const_udelay + cpu_hwcaps + cpu_number + debugfs_create_dir + debugfs_create_file + debugfs_create_u32 + debugfs_remove + default_llseek + delayed_work_timer_fn + dev_driver_string _dev_err + device_create + device_create_file + device_destroy + device_for_each_child + device_get_match_data + device_remove_file + device_set_wakeup_capable + device_wakeup_disable + device_wakeup_enable _dev_info + devm_clk_get + devm_free_irq + devm_i2c_new_dummy_device + devm_ioremap + devm_ioremap_resource + devm_kfree devm_kmalloc + devm_mfd_add_devices + devm_pinctrl_get + devm_regulator_register devm_request_threaded_irq _dev_warn + disable_irq + disable_irq_nosync + dma_alloc_attrs + dma_free_attrs + dma_map_page_attrs + dma_release_channel + dma_request_chan dma_set_coherent_mask dma_set_mask + dma_unmap_page_attrs + enable_irq + fortify_panic + free_irq + get_device + gic_nonsecure_priorities + gpiod_direction_input + gpiod_direction_output_raw + gpiod_get_raw_value + gpiod_set_raw_value + gpio_to_desc + handle_level_irq + i2c_add_numbered_adapter + i2c_del_driver + i2c_register_driver + i2c_unregister_device + __init_swait_queue_head + init_timer_key + ioremap_prot + iounmap + irq_get_irq_data + irq_modify_status + irq_of_parse_and_map + irq_set_chip_and_handler_name + irq_set_chip_data + irq_set_irq_wake + is_vmalloc_addr + jiffies kfree + __kmalloc kmalloc_caches kmalloc_trace + kstrtoint + ktime_get + ktime_get_mono_fast_ns __list_add_valid + __list_del_entry_valid log_post_read_mmio log_post_write_mmio log_read_mmio log_write_mmio + loops_per_jiffy + memcpy + memdup_user + memset module_layout + __msecs_to_jiffies + msleep + __mutex_init + mutex_lock + mutex_unlock + of_address_to_resource + of_alias_get_id + of_clk_add_provider + of_clk_src_onecell_get + of_device_is_available + of_find_compatible_node + of_find_device_by_node + of_find_matching_node_and_match + of_find_node_by_name of_find_property + of_get_child_by_name + of_get_named_gpio_flags + of_get_next_child + of_get_property + of_get_regulator_init_data + of_iomap + of_match_node + __of_parse_phandle_with_args + of_property_read_string + of_property_read_string_helper of_property_read_variable_u32_array + of_root + panic + param_ops_int + param_ops_uint + pinctrl_lookup_state + pinctrl_select_state __platform_driver_register + platform_driver_unregister + platform_get_irq + platform_get_irq_optional + platform_get_resource + platform_get_resource_byname + __pm_runtime_disable + pm_runtime_enable + __pm_runtime_idle + __pm_runtime_resume + pm_runtime_set_autosuspend_delay + __pm_runtime_suspend + __pm_runtime_use_autosuspend _printk + put_device __put_task_struct + queue_delayed_work_on + queue_work_on + _raw_spin_lock _raw_spin_lock_irqsave + _raw_spin_unlock _raw_spin_unlock_irqrestore + rdev_get_drvdata + rdev_get_id + register_pm_notifier + register_syscore_ops + regmap_read + regmap_update_bits_base + regmap_write + regulator_disable + regulator_enable + regulator_list_voltage_linear + regulator_map_voltage_linear + sched_clock + seq_lseek + seq_printf + seq_puts + seq_read + sg_init_table + simple_open + simple_read_from_buffer + simple_write_to_buffer + single_open + single_release snprintf + sprintf + sscanf __stack_chk_fail + strcasecmp + strcmp + strlcat + strlen + strncmp + strnlen + strscpy + strstr + syscon_regmap_lookup_by_phandle + sysfs_create_group + sysfs_emit + system_wq + __udelay + usleep_range_state + wait_for_completion_timeout + __warn_printk + +# required by cmupmucal.ko + debugfs_create_x32 + kernel_kobj + kobject_create_and_add + kstrtouint + of_find_node_by_type + +# required by dmatest.ko + __dma_request_channel + finish_wait + get_random_bytes + init_wait_entry + __init_waitqueue_head + kmem_cache_create + kmem_cache_destroy + kthread_create_on_node + kthread_should_stop + kthread_stop + mempool_alloc + mempool_alloc_slab + mempool_create + mempool_destroy + mempool_free + mempool_free_slab + param_get_bool + param_get_string + param_ops_bool + param_ops_string + param_set_bool + param_set_copystring + prepare_to_wait_event + refcount_warn_saturate + schedule + schedule_timeout + set_freezable + set_user_nice + strim + __wake_up + wake_up_process + +# required by dwc3-exynosauto-usb.ko + cancel_work_sync + device_create_managed_software_node + device_property_present + devm_phy_get + devm_regulator_get + of_match_device + of_platform_populate + phy_exit + phy_init + phy_power_off + phy_power_on + platform_device_add + platform_device_add_resources + platform_device_alloc + platform_device_del + platform_device_put + platform_device_unregister + platform_get_irq_byname_optional + __pm_relax + pm_runtime_allow + pm_runtime_forbid + __pm_runtime_set_status + __pm_stay_awake + sysfs_remove_group + typec_register_partner + typec_register_port + typec_set_data_role + typec_set_pwr_opmode + typec_set_pwr_role + typec_unregister_partner + typec_unregister_port + unregister_pm_notifier + usb_gadget_set_state + usb_otg_state_string + wakeup_source_register + wakeup_source_unregister + +# required by ect_parser.ko + memstart_addr + of_reserved_mem_lookup + strcpy + vmap + +# required by exynos-acme.ko + __bitmap_and + bitmap_parselist + __bitmap_weight + __cpu_active_mask + cpufreq_cpu_get + cpufreq_cpu_get_raw + cpufreq_cpu_put + __cpufreq_driver_target + cpufreq_freq_transition_begin + cpufreq_freq_transition_end + cpufreq_frequency_table_verify + cpufreq_generic_attr + cpufreq_register_driver + cpufreq_table_index_unsorted + cpuhp_tasks_frozen + __cpu_online_mask + dev_pm_opp_add + _find_first_bit + freq_qos_add_request + freq_qos_update_request + get_cpu_device + nr_cpu_ids + scnprintf + sysfs_create_file_ns + system_state + +# required by exynos-bts.ko + devm_kstrdup + _dev_notice # required by exynos-chipid_v2.ko kasprintf - of_device_is_available - of_find_matching_node_and_match of_find_node_opts_by_path - of_iomap - of_property_read_string soc_device_register subsys_system_register +# required by exynos-pd.ko + atomic_notifier_call_chain + kstrdup + of_genpd_add_provider_simple + pm_genpd_add_subdomain + pm_genpd_init + +# required by exynos-pd_el3.ko + __arm_smccc_smc + +# required by exynos-pm-time.ko + jiffies_to_msecs + +# required by exynos-pm.ko + of_property_count_elems_of_size + +# required by exynos_acpm.ko + generic_file_llseek + simple_attr_open + simple_attr_read + simple_attr_release + simple_attr_write + wait_for_completion_interruptible_timeout + +# required by exynos_pm_qos.ko + blocking_notifier_chain_unregister + kstrtoint_from_user + misc_register + noop_llseek + _raw_read_lock_irqsave + _raw_read_unlock_irqrestore + _raw_write_lock_irqsave + _raw_write_unlock_irqrestore + __usecs_to_jiffies + # required by exynos_tty.ko atomic_notifier_chain_register - clk_disable - clk_enable - clk_get_rate - clk_set_rate - __const_udelay - dev_driver_string - device_create_file - devm_clk_get - devm_ioremap - devm_kfree - devm_pinctrl_get - disable_irq_nosync dma_get_slave_caps - dma_map_page_attrs - dma_release_channel - dma_request_chan dma_sync_single_for_cpu dma_sync_single_for_device - dma_unmap_page_attrs do_SAK - enable_irq - free_irq - gic_nonsecure_priorities handle_sysrq iomem_resource - is_vmalloc_addr - jiffies kmalloc_large - of_alias_get_id - of_get_property - of_match_node oops_in_progress panic_notifier_list - pinctrl_lookup_state - pinctrl_select_state - platform_driver_unregister - platform_get_irq - platform_get_resource _raw_spin_trylock register_console - regmap_read - regmap_update_bits_base __release_region __request_region request_threaded_irq - sched_clock - sg_init_table - sscanf - syscon_regmap_lookup_by_phandle sysrq_mask tty_flip_buffer_push tty_insert_flip_string_fixed_flag @@ -107,50 +399,158 @@ uart_unregister_driver uart_update_timeout uart_write_wakeup - __warn_printk + +# required by exynosauto_v920_thermal.ko + devm_thermal_of_zone_register + devm_thermal_of_zone_unregister + of_device_is_compatible + of_thermal_get_ntrips + strncpy + thermal_zone_device_update + +# required by i2c-dev.ko + bus_register_notifier + bus_unregister_notifier + cdev_device_add + cdev_device_del + cdev_init + device_initialize + dev_set_name + i2c_adapter_type + i2c_bus_type + i2c_for_each_dev + i2c_get_adapter + i2c_put_adapter + i2c_smbus_xfer + i2c_transfer + i2c_transfer_buffer_flags + i2c_verify_client + register_chrdev_region + unregister_chrdev_region + +# required by i2c-exynosauto.ko + cpu_bit_bitmap + i2c_del_adapter + __irq_apply_affinity_hint + +# required by phy-exynosauto-usbdrd-super.ko + __clk_is_enabled + __devm_of_phy_provider_register + devm_phy_create + gpio_request + +# required by pinctrl-samsung-core.ko + device_get_next_child_node + devm_gpiochip_add_data_with_key + devm_kmemdup + devm_pinctrl_register + fwnode_handle_put + fwnode_property_present + generic_handle_domain_irq + gpiochip_generic_free + gpiochip_generic_request + gpiochip_get_data + gpiochip_lock_as_irq + gpiochip_unlock_as_irq + handle_edge_irq + irq_create_mapping_affinity + __irq_domain_add + irq_domain_remove + irq_domain_xlate_twocell + irq_set_chained_handler_and_data + kmemdup + krealloc + of_device_get_match_data + of_fwnode_ops + of_node_name_eq + of_prop_next_string + pinctrl_add_gpio_range + pinctrl_dev_get_drvdata + pinctrl_remove_gpio_range # required by pl330.ko - alt_cb_patch_nops amba_driver_register amba_driver_unregister - debugfs_create_file dev_err_probe - devm_free_irq - devm_ioremap_resource __devm_reset_control_get - dma_alloc_attrs dma_async_device_register dma_async_device_unregister dma_async_tx_descriptor_init dmaengine_unmap_put - dma_free_attrs dma_get_slave_channel dma_map_resource dma_unmap_resource - __kmalloc - ktime_get_mono_fast_ns - __list_del_entry_valid - loops_per_jiffy of_dma_controller_free of_dma_controller_register pm_runtime_force_resume pm_runtime_force_suspend pm_runtime_irq_safe - __pm_runtime_resume - pm_runtime_set_autosuspend_delay - __pm_runtime_suspend - __pm_runtime_use_autosuspend - _raw_spin_lock - _raw_spin_unlock reset_control_assert reset_control_deassert - seq_lseek - seq_printf - seq_puts - seq_read sg_next - single_open - single_release tasklet_kill __tasklet_schedule tasklet_setup + +# required by pwm-samsung.ko + devm_platform_ioremap_resource + of_prop_next_u32 + pwmchip_add + pwmchip_remove + pwm_get_chip_data + pwm_set_chip_data + +# required by rtc-s2vps02.ko + devm_rtc_device_register + pm_wakeup_ws_event + rtc_update_irq + rtc_valid_tm + +# required by s2vps02-master-mfd.ko + destroy_workqueue + __devm_irq_alloc_descs + handle_nested_irq + +# required by spi-exynosauto.ko + gpio_free + gpio_request_one + __spi_alloc_controller + spi_controller_resume + spi_controller_suspend + spi_delay_exec + spi_finalize_current_message + spi_register_controller + spi_unregister_controller + +# required by spidev.ko + device_property_match_string + driver_unregister + _raw_spin_lock_irq + _raw_spin_unlock_irq + __register_chrdev + __spi_register_driver + spi_setup + spi_sync + stream_open + __unregister_chrdev + +# required by ufs-exynosauto-core.ko + _find_next_bit + flush_work + kstrtoull + of_property_read_variable_u16_array + of_property_read_variable_u8_array + scsi_dma_unmap + scsi_done + ufshcd_auto_hibern8_update + ufshcd_config_pwr_mode + ufshcd_dme_get_attr + ufshcd_dme_set_attr + ufshcd_dump_regs + ufshcd_link_recovery + ufshcd_pltfrm_init + ufshcd_release + ufshcd_remove + ufshcd_shutdown + ufshcd_system_resume + ufshcd_system_suspend diff --git a/android/abi_gki_aarch64_galaxy b/android/abi_gki_aarch64_galaxy index d14cade9b61a..01f6927b0592 100644 --- a/android/abi_gki_aarch64_galaxy +++ b/android/abi_gki_aarch64_galaxy @@ -359,6 +359,7 @@ __traceiter_android_vh_wq_lockup_pool __traceiter_block_rq_insert __traceiter_console + __traceiter_error_report_end __traceiter_hrtimer_expire_entry __traceiter_hrtimer_expire_exit __traceiter_irq_handler_entry @@ -400,6 +401,7 @@ __tracepoint_android_vh_watchdog_timer_softlockup __tracepoint_android_vh_wq_lockup_pool __tracepoint_block_rq_insert + __tracepoint_error_report_end __tracepoint_console __tracepoint_hrtimer_expire_entry __tracepoint_hrtimer_expire_exit diff --git a/android/abi_gki_aarch64_meizu b/android/abi_gki_aarch64_meizu new file mode 100644 index 000000000000..32c666766bd9 --- /dev/null +++ b/android/abi_gki_aarch64_meizu @@ -0,0 +1,14 @@ +[abi_symbol_list] + __traceiter_android_vh_tune_scan_type + __traceiter_android_vh_tune_swappiness + __tracepoint_android_vh_tune_swappiness + __tracepoint_android_vh_tune_scan_type + __traceiter_android_rvh_sk_alloc + __traceiter_android_rvh_sk_free + __tracepoint_android_rvh_sk_alloc + __tracepoint_android_rvh_sk_free + __traceiter_android_vh_alloc_pages_slowpath + __tracepoint_android_vh_tune_swappiness + __tracepoint_android_vh_tune_scan_type + __tracepoint_android_vh_alloc_pages_slowpath + diff --git a/android/abi_gki_aarch64_oplus b/android/abi_gki_aarch64_oplus index ee42a50dcbdb..1e638ea28886 100644 --- a/android/abi_gki_aarch64_oplus +++ b/android/abi_gki_aarch64_oplus @@ -32,12 +32,15 @@ iio_channel_get iio_channel_release iio_get_channel_type + ip_local_deliver ip6_local_out ip6_route_me_harder ip_route_me_harder ipv6_find_hdr + iov_iter_advance is_ashmem_file jiffies_64_to_clock_t + kick_process ktime_get_coarse_real_ts64 memory_cgrp_subsys memory_cgrp_subsys_enabled_key @@ -46,8 +49,11 @@ mmc_wait_for_cmd nf_ct_attach nf_ct_delete + nf_register_net_hook nf_register_net_hooks + nf_unregister_net_hook nf_unregister_net_hooks + nr_running of_css __page_file_index __page_mapcount @@ -65,6 +71,7 @@ remove_proc_subtree rtc_read_alarm rtc_set_alarm + __rtnl_link_unregister sdio_memcpy_fromio sdio_memcpy_toio sdio_set_block_size @@ -90,6 +97,9 @@ __traceiter_android_vh_account_process_tick_gran __traceiter_android_vh_account_task_time __traceiter_android_vh_do_futex + __traceiter_android_vh_exit_check + __traceiter_android_vh_exit_signal_whether_wake + __traceiter_android_vh_freeze_whether_wake __traceiter_android_vh_futex_sleep_start __traceiter_android_vh_futex_wait_end __traceiter_android_vh_futex_wait_start @@ -120,6 +130,7 @@ __traceiter_android_vh_check_folio_look_around_ref __traceiter_android_vh_dup_task_struct __traceiter_android_vh_exit_signal + __traceiter_android_vh_killed_process __traceiter_android_vh_look_around __traceiter_android_vh_look_around_migrate_folio __traceiter_android_vh_mem_cgroup_id_remove @@ -150,6 +161,10 @@ __traceiter_block_rq_issue __traceiter_block_rq_merge __traceiter_block_rq_requeue + __traceiter_net_dev_queue + __traceiter_net_dev_xmit + __traceiter_netif_receive_skb + __traceiter_netif_rx __traceiter_sched_stat_blocked __traceiter_sched_stat_iowait __traceiter_sched_stat_runtime @@ -158,6 +173,7 @@ __traceiter_sched_waking __traceiter_task_rename __traceiter_android_vh_test_clear_look_around_ref + __traceiter_android_vh_tune_swappiness __tracepoint_android_rvh_post_init_entity_util_avg __tracepoint_android_rvh_rtmutex_force_update __tracepoint_android_vh_account_process_tick_gran @@ -182,12 +198,16 @@ __tracepoint_android_vh_check_folio_look_around_ref __tracepoint_android_vh_do_futex __tracepoint_android_vh_dup_task_struct + __tracepoint_android_vh_exit_check __tracepoint_android_vh_exit_signal + __tracepoint_android_vh_killed_process + __tracepoint_android_vh_exit_signal_whether_wake __tracepoint_android_vh_mem_cgroup_id_remove __tracepoint_android_vh_mem_cgroup_css_offline __tracepoint_android_vh_mem_cgroup_css_online __tracepoint_android_vh_mem_cgroup_free __tracepoint_android_vh_mem_cgroup_alloc + __tracepoint_android_vh_freeze_whether_wake __tracepoint_android_vh_futex_sleep_start __tracepoint_android_vh_futex_wait_end __tracepoint_android_vh_futex_wait_start @@ -218,12 +238,17 @@ __tracepoint_android_vh_sync_txn_recvd __tracepoint_android_vh_task_blocks_on_rtmutex __tracepoint_android_vh_test_clear_look_around_ref + __tracepoint_android_vh_tune_swappiness __tracepoint_block_bio_queue __tracepoint_block_getrq __tracepoint_block_rq_complete __tracepoint_block_rq_issue __tracepoint_block_rq_merge __tracepoint_block_rq_requeue + __tracepoint_net_dev_queue + __tracepoint_net_dev_xmit + __tracepoint_netif_receive_skb + __tracepoint_netif_rx __tracepoint_sched_stat_blocked __tracepoint_sched_stat_iowait __tracepoint_sched_stat_runtime @@ -240,5 +265,6 @@ wait_for_completion_io_timeout wait_for_completion_killable_timeout wakeup_source_remove + wake_up_state wq_worker_comm zero_pfn diff --git a/android/abi_gki_aarch64_qcom b/android/abi_gki_aarch64_qcom index 53196c8c63c0..73632e9e1b31 100644 --- a/android/abi_gki_aarch64_qcom +++ b/android/abi_gki_aarch64_qcom @@ -73,6 +73,7 @@ bin2hex bio_endio bio_end_io_acct_remapped + bio_split bio_start_io_acct bitmap_allocate_region __bitmap_and @@ -94,6 +95,8 @@ bit_wait_timeout __blk_alloc_disk blkdev_get_by_dev + blk_crypto_keyslot_index + blk_crypto_register blk_execute_rq blk_execute_rq_nowait __blk_mq_alloc_disk @@ -737,6 +740,22 @@ divider_recalc_rate divider_ro_round_rate_parent divider_round_rate_parent + dm_bufio_client_create + dm_bufio_client_destroy + dm_bufio_mark_buffer_dirty + dm_bufio_new + dm_bufio_read + dm_bufio_release + dm_bufio_write_dirty_buffers + dm_disk + dm_get_device + dm_kobject_release + dm_read_arg_group + dm_register_target + dm_shift_arg + dm_table_get_md + dm_table_get_mode + dm_unregister_target dma_alloc_attrs dma_alloc_noncontiguous dma_alloc_pages @@ -2213,6 +2232,7 @@ page_ext_put page_is_ram page_mapping + page_owner_inited page_pinner_inited __page_pinner_put_page page_pool_alloc_pages @@ -2888,6 +2908,7 @@ set_normalized_timespec64 set_page_dirty_lock __SetPageMovable + __set_page_owner set_task_cpu setup_udp_tunnel_sock set_user_nice @@ -3905,6 +3926,7 @@ vhost_dev_init vhost_dev_ioctl vhost_dev_stop + vhost_dev_flush vhost_disable_notify vhost_enable_notify vhost_get_vq_desc diff --git a/android/abi_gki_aarch64_tuxera b/android/abi_gki_aarch64_tuxera new file mode 100644 index 000000000000..cbffd3f1685f --- /dev/null +++ b/android/abi_gki_aarch64_tuxera @@ -0,0 +1,280 @@ +[abi_symbol_list] + alt_cb_patch_nops + __arch_copy_from_user + __arch_copy_to_user + autoremove_wake_function + balance_dirty_pages_ratelimited + bcmp + __bforget + __bh_read_batch + bio_add_page + bio_alloc_bioset + bio_put + __bitmap_weight + bit_waitqueue + blkdev_issue_discard + blkdev_issue_flush + blk_finish_plug + blk_start_plug + __blockdev_direct_IO + block_dirty_folio + block_invalidate_folio + block_is_partially_uptodate + __breadahead + __bread_gfp + __brelse + buffer_migrate_folio + call_rcu + capable + capable_wrt_inode_uidgid + __check_object_size + clean_bdev_aliases + clear_inode + clear_page + clear_page_dirty_for_io + copy_page_from_iter_atomic + cpu_hwcaps + create_empty_buffers + current_umask + d_add + d_add_ci + d_instantiate + d_make_root + d_obtain_alias + down_read + down_write + down_write_trylock + dput + drop_nlink + d_splice_alias + dump_stack + end_buffer_read_sync + end_buffer_write_sync + end_page_writeback + errseq_set + fault_in_iov_iter_readable + fault_in_safe_writeable + fget + fiemap_fill_next_extent + fiemap_prep + file_check_and_advance_wb_err + filemap_add_folio + filemap_dirty_folio + filemap_fault + filemap_fdatawait_range + filemap_fdatawrite + filemap_fdatawrite_range + filemap_flush + __filemap_set_wb_err + filemap_write_and_wait_range + file_remove_privs + file_update_time + file_write_and_wait_range + finish_wait + flush_dcache_page + __folio_alloc + __folio_cancel_dirty + __folio_lock + __folio_put + folio_wait_bit + folio_write_one + fortify_panic + fput + freezer_active + freezing_slow_path + fs_bio_set + generic_error_remove_page + generic_file_direct_write + generic_file_llseek + generic_file_mmap + generic_file_open + generic_file_read_iter + generic_file_splice_read + generic_fillattr + generic_perform_write + generic_read_dir + generic_write_checks + __getblk_gfp + gic_nonsecure_priorities + grab_cache_page_write_begin + iget5_locked + igrab + ihold + ilookup5 + inc_nlink + in_group_p + __init_rwsem + init_special_inode + init_wait_entry + __init_waitqueue_head + inode_dio_wait + inode_init_once + inode_init_owner + inode_maybe_inc_iversion + inode_newsize_ok + inode_set_flags + __insert_inode_hash + invalidate_bdev + invalidate_inode_pages2_range + invalidate_mapping_pages + io_schedule + iov_iter_advance + iov_iter_alignment + iov_iter_get_pages2 + iov_iter_single_seg_count + iput + is_bad_inode + iter_file_splice_write + iunique + jiffies + jiffies_to_msecs + kasan_flag_enabled + kfree + kill_block_super + __kmalloc + kmalloc_caches + kmalloc_trace + kmem_cache_alloc + kmem_cache_alloc_lru + kmem_cache_create + kmem_cache_create_usercopy + kmem_cache_destroy + kmem_cache_free + krealloc + kthread_complete_and_exit + kthread_create_on_node + kthread_should_stop + kthread_stop + ktime_get_coarse_real_ts64 + kvfree + __list_add_valid + __list_del_entry_valid + load_nls + load_nls_default + __lock_buffer + make_bad_inode + mark_buffer_async_write + mark_buffer_dirty + mark_buffer_write_io_error + __mark_inode_dirty + mark_page_accessed + memcmp + memcpy + memmove + memset + mktime64 + mnt_drop_write_file + mnt_want_write_file + mount_bdev + mpage_readahead + mpage_read_folio + __msecs_to_jiffies + __mutex_init + mutex_lock + mutex_trylock + mutex_unlock + new_inode + notify_change + pagecache_get_page + page_cache_next_miss + page_cache_prev_miss + page_pinner_inited + __page_pinner_put_page + pagevec_lookup_range_tag + __pagevec_release + page_zero_new_buffers + __percpu_down_read + preempt_schedule + preempt_schedule_notrace + prepare_to_wait + prepare_to_wait_event + _printk + __printk_ratelimit + ___ratelimit + _raw_read_lock + _raw_read_lock_irqsave + _raw_read_unlock + _raw_read_unlock_irqrestore + _raw_spin_lock + _raw_spin_lock_irqsave + _raw_spin_unlock + _raw_spin_unlock_irqrestore + _raw_write_lock + _raw_write_lock_irqsave + _raw_write_unlock + _raw_write_unlock_irqrestore + rcu_barrier + rcuwait_wake_up + readahead_gfp_mask + read_cache_page + redirty_page_for_writepage + __refrigerator + register_filesystem + __remove_inode_hash + sb_min_blocksize + sb_set_blocksize + schedule + schedule_timeout + schedule_timeout_interruptible + security_inode_init_security + seq_printf + setattr_prepare + set_freezable + set_nlink + set_page_dirty + __set_page_dirty_nobuffers + set_page_writeback + set_user_nice + simple_strtol + simple_strtoul + simple_strtoull + snprintf + sprintf + sscanf + __stack_chk_fail + strchr + strcmp + strlen + strncasecmp + strncmp + strsep + strstr + submit_bh + submit_bio + sync_blockdev + __sync_dirty_buffer + sync_dirty_buffer + sync_filesystem + sync_inode_metadata + sys_tz + tag_pages_for_writeback + time64_to_tm + timestamp_truncate + touch_atime + _trace_android_vh_record_pcpu_rwsem_starttime + _trace_android_vh_record_pcpu_rwsem_time_early + truncate_inode_pages + truncate_inode_pages_final + truncate_pagecache + truncate_setsize + try_to_writeback_inodes_sb + unload_nls + unlock_buffer + unlock_new_inode + unlock_page + unregister_filesystem + up_read + up_write + vfree + vfs_fsync_range + __vmalloc + vmalloc + vsnprintf + vzalloc + __wait_on_buffer + wake_bit_function + __wake_up + wake_up_process + __warn_printk + write_inode_now + xa_load diff --git a/android/abi_gki_aarch64_unisoc b/android/abi_gki_aarch64_unisoc index ac818f2e495f..af9b8e60d708 100644 --- a/android/abi_gki_aarch64_unisoc +++ b/android/abi_gki_aarch64_unisoc @@ -412,6 +412,7 @@ param_ops_int param_ops_uint pcpu_nr_pages + percpu_counter_batch __per_cpu_offset perf_trace_buf_alloc perf_trace_run_bpf_submit @@ -1912,6 +1913,8 @@ # required by trusty-log.ko vm_map_ram vm_unmap_ram +# required by sprd_time_sync_cp.ko + pvclock_gtod_register_notifier # required by trusty-pm.ko unregister_syscore_ops diff --git a/android/abi_gki_aarch64_vivo b/android/abi_gki_aarch64_vivo index b17c82fe8684..679c37e8b995 100644 --- a/android/abi_gki_aarch64_vivo +++ b/android/abi_gki_aarch64_vivo @@ -807,6 +807,7 @@ blk_bio_list_merge blk_execute_rq blk_execute_rq_nowait + blk_fill_rwbs blk_mq_alloc_request blk_mq_alloc_sq_tag_set blk_mq_alloc_tag_set diff --git a/android/gki_aarch64_protected_modules b/android/gki_aarch64_protected_modules index d6b0777dd474..3f1af7946695 100644 --- a/android/gki_aarch64_protected_modules +++ b/android/gki_aarch64_protected_modules @@ -1,3 +1,4 @@ +arch/arm64/geniezone/gzvm.ko drivers/bluetooth/btbcm.ko drivers/bluetooth/btqca.ko drivers/bluetooth/btsdio.ko diff --git a/arch/arm64/Kbuild b/arch/arm64/Kbuild index e4847ba0e3c9..ddcb496ce66c 100644 --- a/arch/arm64/Kbuild +++ b/arch/arm64/Kbuild @@ -5,6 +5,7 @@ obj-$(CONFIG_XEN) += xen/ obj-$(subst m,y,$(CONFIG_HYPERV)) += hyperv/ obj-$(CONFIG_GUNYAH) += gunyah/ obj-$(CONFIG_CRYPTO) += crypto/ +obj-$(CONFIG_MTK_GZVM) += geniezone/ # for cleaning subdir- += boot diff --git a/arch/arm64/configs/gki_defconfig b/arch/arm64/configs/gki_defconfig index a354cff562ed..ceaf2f1fdeab 100644 --- a/arch/arm64/configs/gki_defconfig +++ b/arch/arm64/configs/gki_defconfig @@ -551,6 +551,7 @@ CONFIG_GUNYAH=y CONFIG_GUNYAH_VCPU=y CONFIG_GUNYAH_IRQFD=y CONFIG_GUNYAH_IOEVENTFD=y +CONFIG_MTK_GZVM=m CONFIG_VHOST_VSOCK=y CONFIG_STAGING=y CONFIG_ASHMEM=y diff --git a/arch/arm64/geniezone/Makefile b/arch/arm64/geniezone/Makefile new file mode 100644 index 000000000000..0e4f1087f9de --- /dev/null +++ b/arch/arm64/geniezone/Makefile @@ -0,0 +1,9 @@ +# SPDX-License-Identifier: GPL-2.0-only +# +# Main Makefile for gzvm, this one includes drivers/virt/geniezone/Makefile +# +include $(srctree)/drivers/virt/geniezone/Makefile + +gzvm-y += vm.o vcpu.o vgic.o + +obj-$(CONFIG_MTK_GZVM) += gzvm.o diff --git a/arch/arm64/geniezone/gzvm_arch_common.h b/arch/arm64/geniezone/gzvm_arch_common.h new file mode 100644 index 000000000000..82d2c44e819b --- /dev/null +++ b/arch/arm64/geniezone/gzvm_arch_common.h @@ -0,0 +1,110 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* + * Copyright (c) 2023 MediaTek Inc. + */ + +#ifndef __GZVM_ARCH_COMMON_H__ +#define __GZVM_ARCH_COMMON_H__ + +#include + +enum { + GZVM_FUNC_CREATE_VM = 0, + GZVM_FUNC_DESTROY_VM = 1, + GZVM_FUNC_CREATE_VCPU = 2, + GZVM_FUNC_DESTROY_VCPU = 3, + GZVM_FUNC_SET_MEMREGION = 4, + GZVM_FUNC_RUN = 5, + GZVM_FUNC_GET_ONE_REG = 8, + GZVM_FUNC_SET_ONE_REG = 9, + GZVM_FUNC_IRQ_LINE = 10, + GZVM_FUNC_CREATE_DEVICE = 11, + GZVM_FUNC_PROBE = 12, + GZVM_FUNC_ENABLE_CAP = 13, + GZVM_FUNC_INFORM_EXIT = 14, + GZVM_FUNC_MEMREGION_PURPOSE = 15, + GZVM_FUNC_SET_DTB_CONFIG = 16, + NR_GZVM_FUNC, +}; + +#define SMC_ENTITY_MTK 59 +#define GZVM_FUNCID_START (0x1000) +#define GZVM_HCALL_ID(func) \ + ARM_SMCCC_CALL_VAL(ARM_SMCCC_FAST_CALL, ARM_SMCCC_SMC_32, \ + SMC_ENTITY_MTK, (GZVM_FUNCID_START + (func))) + +#define MT_HVC_GZVM_CREATE_VM GZVM_HCALL_ID(GZVM_FUNC_CREATE_VM) +#define MT_HVC_GZVM_DESTROY_VM GZVM_HCALL_ID(GZVM_FUNC_DESTROY_VM) +#define MT_HVC_GZVM_CREATE_VCPU GZVM_HCALL_ID(GZVM_FUNC_CREATE_VCPU) +#define MT_HVC_GZVM_DESTROY_VCPU GZVM_HCALL_ID(GZVM_FUNC_DESTROY_VCPU) +#define MT_HVC_GZVM_SET_MEMREGION GZVM_HCALL_ID(GZVM_FUNC_SET_MEMREGION) +#define MT_HVC_GZVM_RUN GZVM_HCALL_ID(GZVM_FUNC_RUN) +#define MT_HVC_GZVM_GET_ONE_REG GZVM_HCALL_ID(GZVM_FUNC_GET_ONE_REG) +#define MT_HVC_GZVM_SET_ONE_REG GZVM_HCALL_ID(GZVM_FUNC_SET_ONE_REG) +#define MT_HVC_GZVM_IRQ_LINE GZVM_HCALL_ID(GZVM_FUNC_IRQ_LINE) +#define MT_HVC_GZVM_CREATE_DEVICE GZVM_HCALL_ID(GZVM_FUNC_CREATE_DEVICE) +#define MT_HVC_GZVM_PROBE GZVM_HCALL_ID(GZVM_FUNC_PROBE) +#define MT_HVC_GZVM_ENABLE_CAP GZVM_HCALL_ID(GZVM_FUNC_ENABLE_CAP) +#define MT_HVC_GZVM_INFORM_EXIT GZVM_HCALL_ID(GZVM_FUNC_INFORM_EXIT) +#define MT_HVC_GZVM_MEMREGION_PURPOSE GZVM_HCALL_ID(GZVM_FUNC_MEMREGION_PURPOSE) +#define MT_HVC_GZVM_SET_DTB_CONFIG GZVM_HCALL_ID(GZVM_FUNC_SET_DTB_CONFIG) + +#define GIC_V3_NR_LRS 16 + +/** + * gzvm_hypcall_wrapper() - the wrapper for hvc calls + * @a0-a7: arguments passed in registers 0 to 7 + * @res: result values from registers 0 to 3 + * + * Return: The wrapper helps caller to convert geniezone errno to Linux errno. + */ +static inline int gzvm_hypcall_wrapper(unsigned long a0, unsigned long a1, + unsigned long a2, unsigned long a3, + unsigned long a4, unsigned long a5, + unsigned long a6, unsigned long a7, + struct arm_smccc_res *res) +{ + arm_smccc_hvc(a0, a1, a2, a3, a4, a5, a6, a7, res); + return gzvm_err_to_errno(res->a0); +} + +static inline u16 get_vmid_from_tuple(unsigned int tuple) +{ + return (u16)(tuple >> 16); +} + +static inline u16 get_vcpuid_from_tuple(unsigned int tuple) +{ + return (u16)(tuple & 0xffff); +} + +/** + * struct gzvm_vcpu_hwstate: Sync architecture state back to host for handling + * @nr_lrs: The available LRs(list registers) in Soc. + * @__pad: add an explicit '__u32 __pad;' in the middle to make it clear + * what the actual layout is. + * @lr: The array of LRs(list registers). + * + * - Keep the same layout of hypervisor data struct. + * - Sync list registers back for acking virtual device interrupt status. + */ +struct gzvm_vcpu_hwstate { + __le32 nr_lrs; + __le32 __pad; + __le64 lr[GIC_V3_NR_LRS]; +}; + +static inline unsigned int +assemble_vm_vcpu_tuple(u16 vmid, u16 vcpuid) +{ + return ((unsigned int)vmid << 16 | vcpuid); +} + +static inline void +disassemble_vm_vcpu_tuple(unsigned int tuple, u16 *vmid, u16 *vcpuid) +{ + *vmid = get_vmid_from_tuple(tuple); + *vcpuid = get_vcpuid_from_tuple(tuple); +} + +#endif /* __GZVM_ARCH_COMMON_H__ */ diff --git a/arch/arm64/geniezone/vcpu.c b/arch/arm64/geniezone/vcpu.c new file mode 100644 index 000000000000..95681fd66656 --- /dev/null +++ b/arch/arm64/geniezone/vcpu.c @@ -0,0 +1,88 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * Copyright (c) 2023 MediaTek Inc. + */ + +#include +#include +#include + +#include +#include +#include "gzvm_arch_common.h" + +int gzvm_arch_vcpu_update_one_reg(struct gzvm_vcpu *vcpu, __u64 reg_id, + bool is_write, __u64 *data) +{ + struct arm_smccc_res res; + unsigned long a1; + int ret; + + /* reg id follows KVM's encoding */ + switch (reg_id & GZVM_REG_ARM_COPROC_MASK) { + case GZVM_REG_ARM_CORE: + break; + default: + return -EOPNOTSUPP; + } + + a1 = assemble_vm_vcpu_tuple(vcpu->gzvm->vm_id, vcpu->vcpuid); + if (!is_write) { + ret = gzvm_hypcall_wrapper(MT_HVC_GZVM_GET_ONE_REG, + a1, reg_id, 0, 0, 0, 0, 0, &res); + if (ret == 0) + *data = res.a1; + } else { + ret = gzvm_hypcall_wrapper(MT_HVC_GZVM_SET_ONE_REG, + a1, reg_id, *data, 0, 0, 0, 0, &res); + } + + return ret; +} + +int gzvm_arch_vcpu_run(struct gzvm_vcpu *vcpu, __u64 *exit_reason) +{ + struct arm_smccc_res res; + unsigned long a1; + int ret; + + a1 = assemble_vm_vcpu_tuple(vcpu->gzvm->vm_id, vcpu->vcpuid); + ret = gzvm_hypcall_wrapper(MT_HVC_GZVM_RUN, a1, 0, 0, 0, 0, 0, + 0, &res); + *exit_reason = res.a1; + return ret; +} + +int gzvm_arch_destroy_vcpu(u16 vm_id, int vcpuid) +{ + struct arm_smccc_res res; + unsigned long a1; + + a1 = assemble_vm_vcpu_tuple(vm_id, vcpuid); + gzvm_hypcall_wrapper(MT_HVC_GZVM_DESTROY_VCPU, a1, 0, 0, 0, 0, 0, 0, + &res); + + return 0; +} + +/** + * gzvm_arch_create_vcpu() - Call smc to gz hypervisor to create vcpu + * @vm_id: vm id + * @vcpuid: vcpu id + * @run: Virtual address of vcpu->run + * + * Return: The wrapper helps caller to convert geniezone errno to Linux errno. + */ +int gzvm_arch_create_vcpu(u16 vm_id, int vcpuid, void *run) +{ + struct arm_smccc_res res; + unsigned long a1, a2; + int ret; + + a1 = assemble_vm_vcpu_tuple(vm_id, vcpuid); + a2 = (__u64)virt_to_phys(run); + ret = gzvm_hypcall_wrapper(MT_HVC_GZVM_CREATE_VCPU, a1, a2, 0, 0, 0, 0, + 0, &res); + + return ret; +} diff --git a/arch/arm64/geniezone/vgic.c b/arch/arm64/geniezone/vgic.c new file mode 100644 index 000000000000..3746e0c9e247 --- /dev/null +++ b/arch/arm64/geniezone/vgic.c @@ -0,0 +1,108 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * Copyright (c) 2023 MediaTek Inc. + */ + +#include +#include +#include +#include "gzvm_arch_common.h" + +/** + * is_irq_valid() - Check the irq number and irq_type are matched + * @irq: interrupt number + * @irq_type: interrupt type + * + * Return: + * true if irq is valid else false. + */ +static bool is_irq_valid(u32 irq, u32 irq_type) +{ + switch (irq_type) { + case GZVM_IRQ_TYPE_CPU: + /* 0 ~ 15: SGI */ + if (likely(irq <= GZVM_IRQ_CPU_FIQ)) + return true; + break; + case GZVM_IRQ_TYPE_PPI: + /* 16 ~ 31: PPI */ + if (likely(irq >= GZVM_VGIC_NR_SGIS && + irq < GZVM_VGIC_NR_PRIVATE_IRQS)) + return true; + break; + case GZVM_IRQ_TYPE_SPI: + /* 32 ~ : SPT */ + if (likely(irq >= GZVM_VGIC_NR_PRIVATE_IRQS)) + return true; + break; + default: + return false; + } + return false; +} + +/** + * gzvm_vgic_inject_irq() - Inject virtual interrupt to a VM + * @gzvm: Pointer to struct gzvm + * @vcpu_idx: vcpu index, only valid if PPI + * @irq_type: Interrupt type + * @irq: irq number + * @level: 1 if true else 0 + * + * Return: + * * 0 - Success. + * * Negative - Failure. + */ +static int gzvm_vgic_inject_irq(struct gzvm *gzvm, unsigned int vcpu_idx, + u32 irq_type, u32 irq, bool level) +{ + unsigned long a1 = assemble_vm_vcpu_tuple(gzvm->vm_id, vcpu_idx); + struct arm_smccc_res res; + + if (!unlikely(is_irq_valid(irq, irq_type))) + return -EINVAL; + + gzvm_hypcall_wrapper(MT_HVC_GZVM_IRQ_LINE, a1, irq, level, + 0, 0, 0, 0, &res); + if (res.a0) { + pr_err("Failed to set IRQ level (%d) to irq#%u on vcpu %d with ret=%d\n", + level, irq, vcpu_idx, (int)res.a0); + return -EFAULT; + } + + return 0; +} + +/** + * gzvm_vgic_inject_spi() - Inject virtual spi interrupt + * @gzvm: Pointer to struct gzvm + * @vcpu_idx: vcpu index + * @spi_irq: This is spi interrupt number (starts from 0 instead of 32) + * @level: 1 if true else 0 + * + * Return: + * * 0 if succeed else other negative values indicating each errors + */ +static int gzvm_vgic_inject_spi(struct gzvm *gzvm, unsigned int vcpu_idx, + u32 spi_irq, bool level) +{ + return gzvm_vgic_inject_irq(gzvm, 0, GZVM_IRQ_TYPE_SPI, + spi_irq + GZVM_VGIC_NR_PRIVATE_IRQS, + level); +} + +int gzvm_arch_create_device(u16 vm_id, struct gzvm_create_device *gzvm_dev) +{ + struct arm_smccc_res res; + + return gzvm_hypcall_wrapper(MT_HVC_GZVM_CREATE_DEVICE, vm_id, + virt_to_phys(gzvm_dev), 0, 0, 0, 0, 0, + &res); +} + +int gzvm_arch_inject_irq(struct gzvm *gzvm, unsigned int vcpu_idx, + u32 irq_type, u32 irq, bool level) +{ + /* default use spi */ + return gzvm_vgic_inject_spi(gzvm, vcpu_idx, irq, level); +} diff --git a/arch/arm64/geniezone/vm.c b/arch/arm64/geniezone/vm.c new file mode 100644 index 000000000000..a47e1d60dc1f --- /dev/null +++ b/arch/arm64/geniezone/vm.c @@ -0,0 +1,242 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * Copyright (c) 2023 MediaTek Inc. + */ + +#include +#include +#include +#include + +#include +#include +#include "gzvm_arch_common.h" + +#define PAR_PA47_MASK ((((1UL << 48) - 1) >> 12) << 12) + +int gzvm_arch_inform_exit(u16 vm_id) +{ + struct arm_smccc_res res; + + arm_smccc_hvc(MT_HVC_GZVM_INFORM_EXIT, vm_id, 0, 0, 0, 0, 0, 0, &res); + if (res.a0 == 0) + return 0; + + return -ENXIO; +} + +int gzvm_arch_probe(void) +{ + struct arm_smccc_res res; + + arm_smccc_hvc(MT_HVC_GZVM_PROBE, 0, 0, 0, 0, 0, 0, 0, &res); + if (res.a0 == 0) + return 0; + + return -ENXIO; +} + +int gzvm_arch_set_memregion(u16 vm_id, size_t buf_size, + phys_addr_t region) +{ + struct arm_smccc_res res; + + return gzvm_hypcall_wrapper(MT_HVC_GZVM_SET_MEMREGION, vm_id, + buf_size, region, 0, 0, 0, 0, &res); +} + +static int gzvm_cap_arm_vm_ipa_size(void __user *argp) +{ + __u64 value = CONFIG_ARM64_PA_BITS; + + if (copy_to_user(argp, &value, sizeof(__u64))) + return -EFAULT; + + return 0; +} + +int gzvm_arch_check_extension(struct gzvm *gzvm, __u64 cap, void __user *argp) +{ + int ret = -EOPNOTSUPP; + + switch (cap) { + case GZVM_CAP_ARM_PROTECTED_VM: { + __u64 success = 1; + + if (copy_to_user(argp, &success, sizeof(__u64))) + return -EFAULT; + ret = 0; + break; + } + case GZVM_CAP_ARM_VM_IPA_SIZE: { + ret = gzvm_cap_arm_vm_ipa_size(argp); + break; + } + default: + ret = -EOPNOTSUPP; + } + + return ret; +} + +/** + * gzvm_arch_create_vm() - create vm + * @vm_type: VM type. Only supports Linux VM now. + * + * Return: + * * positive value - VM ID + * * -ENOMEM - Memory not enough for storing VM data + */ +int gzvm_arch_create_vm(unsigned long vm_type) +{ + struct arm_smccc_res res; + int ret; + + ret = gzvm_hypcall_wrapper(MT_HVC_GZVM_CREATE_VM, vm_type, 0, 0, 0, 0, + 0, 0, &res); + + if (ret == 0) + return res.a1; + else + return ret; +} + +int gzvm_arch_destroy_vm(u16 vm_id) +{ + struct arm_smccc_res res; + + return gzvm_hypcall_wrapper(MT_HVC_GZVM_DESTROY_VM, vm_id, 0, 0, 0, 0, + 0, 0, &res); +} + +int gzvm_arch_memregion_purpose(struct gzvm *gzvm, + struct gzvm_userspace_memory_region *mem) +{ + struct arm_smccc_res res; + + return gzvm_hypcall_wrapper(MT_HVC_GZVM_MEMREGION_PURPOSE, gzvm->vm_id, + mem->guest_phys_addr, mem->memory_size, + mem->flags, 0, 0, 0, &res); +} + +int gzvm_arch_set_dtb_config(struct gzvm *gzvm, struct gzvm_dtb_config *cfg) +{ + struct arm_smccc_res res; + + return gzvm_hypcall_wrapper(MT_HVC_GZVM_SET_DTB_CONFIG, gzvm->vm_id, + cfg->dtb_addr, cfg->dtb_size, 0, 0, 0, 0, + &res); +} + +static int gzvm_vm_arch_enable_cap(struct gzvm *gzvm, + struct gzvm_enable_cap *cap, + struct arm_smccc_res *res) +{ + return gzvm_hypcall_wrapper(MT_HVC_GZVM_ENABLE_CAP, gzvm->vm_id, + cap->cap, cap->args[0], cap->args[1], + cap->args[2], cap->args[3], cap->args[4], + res); +} + +/** + * gzvm_vm_ioctl_get_pvmfw_size() - Get pvmfw size from hypervisor, return + * in x1, and return to userspace in args + * @gzvm: Pointer to struct gzvm. + * @cap: Pointer to struct gzvm_enable_cap. + * @argp: Pointer to struct gzvm_enable_cap in user space. + * + * Return: + * * 0 - Succeed + * * -EINVAL - Hypervisor return invalid results + * * -EFAULT - Fail to copy back to userspace buffer + */ +static int gzvm_vm_ioctl_get_pvmfw_size(struct gzvm *gzvm, + struct gzvm_enable_cap *cap, + void __user *argp) +{ + struct arm_smccc_res res = {0}; + + if (gzvm_vm_arch_enable_cap(gzvm, cap, &res) != 0) + return -EINVAL; + + cap->args[1] = res.a1; + if (copy_to_user(argp, cap, sizeof(*cap))) + return -EFAULT; + + return 0; +} + +/** + * gzvm_vm_ioctl_cap_pvm() - Proceed GZVM_CAP_ARM_PROTECTED_VM's subcommands + * @gzvm: Pointer to struct gzvm. + * @cap: Pointer to struct gzvm_enable_cap. + * @argp: Pointer to struct gzvm_enable_cap in user space. + * + * Return: + * * 0 - Succeed + * * -EINVAL - Invalid subcommand or arguments + */ +static int gzvm_vm_ioctl_cap_pvm(struct gzvm *gzvm, + struct gzvm_enable_cap *cap, + void __user *argp) +{ + int ret = -EINVAL; + struct arm_smccc_res res = {0}; + + switch (cap->args[0]) { + case GZVM_CAP_ARM_PVM_SET_PVMFW_IPA: + fallthrough; + case GZVM_CAP_ARM_PVM_SET_PROTECTED_VM: + ret = gzvm_vm_arch_enable_cap(gzvm, cap, &res); + break; + case GZVM_CAP_ARM_PVM_GET_PVMFW_SIZE: + ret = gzvm_vm_ioctl_get_pvmfw_size(gzvm, cap, argp); + break; + default: + ret = -EINVAL; + break; + } + + return ret; +} + +int gzvm_vm_ioctl_arch_enable_cap(struct gzvm *gzvm, + struct gzvm_enable_cap *cap, + void __user *argp) +{ + int ret = -EINVAL; + + switch (cap->cap) { + case GZVM_CAP_ARM_PROTECTED_VM: + ret = gzvm_vm_ioctl_cap_pvm(gzvm, cap, argp); + break; + default: + ret = -EINVAL; + break; + } + + return ret; +} + +/** + * gzvm_hva_to_pa_arch() - converts hva to pa with arch-specific way + * @hva: Host virtual address. + * + * Return: 0 if translation error + */ +u64 gzvm_hva_to_pa_arch(u64 hva) +{ + u64 par; + unsigned long flags; + + 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 0; + + return par & PAR_PA47_MASK; +} diff --git a/arch/arm64/include/uapi/asm/gzvm_arch.h b/arch/arm64/include/uapi/asm/gzvm_arch.h new file mode 100644 index 000000000000..acfe9be0f849 --- /dev/null +++ b/arch/arm64/include/uapi/asm/gzvm_arch.h @@ -0,0 +1,54 @@ +/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ +/* + * Copyright (c) 2023 MediaTek Inc. + */ + +#ifndef __GZVM_ARCH_H__ +#define __GZVM_ARCH_H__ + +#include + +#define GZVM_CAP_ARM_VM_IPA_SIZE 165 +#define GZVM_CAP_ARM_PROTECTED_VM 0xffbadab1 + +/* sub-commands put in args[0] for GZVM_CAP_ARM_PROTECTED_VM */ +#define GZVM_CAP_ARM_PVM_SET_PVMFW_IPA 0 +#define GZVM_CAP_ARM_PVM_GET_PVMFW_SIZE 1 +/* GZVM_CAP_ARM_PVM_SET_PROTECTED_VM only sets protected but not load pvmfw */ +#define GZVM_CAP_ARM_PVM_SET_PROTECTED_VM 2 + +/* + * Architecture specific registers are to be defined in arch headers and + * ORed with the arch identifier. + */ +#define GZVM_REG_ARM 0x4000000000000000ULL +#define GZVM_REG_ARM64 0x6000000000000000ULL + +#define GZVM_REG_SIZE_SHIFT 52 +#define GZVM_REG_SIZE_MASK 0x00f0000000000000ULL +#define GZVM_REG_SIZE_U8 0x0000000000000000ULL +#define GZVM_REG_SIZE_U16 0x0010000000000000ULL +#define GZVM_REG_SIZE_U32 0x0020000000000000ULL +#define GZVM_REG_SIZE_U64 0x0030000000000000ULL +#define GZVM_REG_SIZE_U128 0x0040000000000000ULL +#define GZVM_REG_SIZE_U256 0x0050000000000000ULL +#define GZVM_REG_SIZE_U512 0x0060000000000000ULL +#define GZVM_REG_SIZE_U1024 0x0070000000000000ULL +#define GZVM_REG_SIZE_U2048 0x0080000000000000ULL + +#define GZVM_REG_ARCH_MASK 0xff00000000000000ULL + +/* If you need to interpret the index values, here is the key: */ +#define GZVM_REG_ARM_COPROC_MASK 0x000000000FFF0000 +#define GZVM_REG_ARM_COPROC_SHIFT 16 + +/* Normal registers are mapped as coprocessor 16. */ +#define GZVM_REG_ARM_CORE (0x0010 << GZVM_REG_ARM_COPROC_SHIFT) +#define GZVM_REG_ARM_CORE_REG(name) \ + (offsetof(struct gzvm_regs, name) / sizeof(__u32)) + +#define GZVM_VGIC_NR_SGIS 16 +#define GZVM_VGIC_NR_PPIS 16 +#define GZVM_VGIC_NR_PRIVATE_IRQS (GZVM_VGIC_NR_SGIS + GZVM_VGIC_NR_PPIS) + +#endif /* __GZVM_ARCH_H__ */ diff --git a/arch/arm64/kernel/topology.c b/arch/arm64/kernel/topology.c index 817d788cd866..7c93307bd960 100644 --- a/arch/arm64/kernel/topology.c +++ b/arch/arm64/kernel/topology.c @@ -22,6 +22,8 @@ #include #include +#include + #ifdef CONFIG_ACPI static bool __init acpi_cpu_is_threaded(int cpu) { @@ -151,6 +153,11 @@ static void amu_scale_freq_tick(void) { u64 prev_core_cnt, prev_const_cnt; u64 core_cnt, const_cnt, scale; + bool use_amu_fie = true; + + trace_android_vh_use_amu_fie(&use_amu_fie); + if(!use_amu_fie) + return; prev_const_cnt = this_cpu_read(arch_const_cycles_prev); prev_core_cnt = this_cpu_read(arch_core_cycles_prev); diff --git a/arch/arm64/kvm/hyp/nvhe/mem_protect.c b/arch/arm64/kvm/hyp/nvhe/mem_protect.c index 2aeb5a8a7baa..34d737112e72 100644 --- a/arch/arm64/kvm/hyp/nvhe/mem_protect.c +++ b/arch/arm64/kvm/hyp/nvhe/mem_protect.c @@ -1048,9 +1048,20 @@ static int __host_check_page_state_range(u64 addr, u64 size, static int __host_set_page_state_range(u64 addr, u64 size, enum pkvm_page_state state) { + bool update_iommu = true; enum kvm_pgtable_prot prot = pkvm_mkstate(PKVM_HOST_MEM_PROT, state); - return host_stage2_idmap_locked(addr, size, prot, true); + /* + * Sharing and unsharing host pages shouldn't change the IOMMU page tables, + * so avoid extra page tables walks for the IOMMU. + * HOWEVER THIS WILL NOT WORK WHEN DEVICE ASSIGNMENT IS SUPPORTED AS THE GUEST + * MIGHT HAVE ACCESS TO DMA. + * but as Android-14 doesn't support device assignment this should be fine. + */ + if ((state == PKVM_PAGE_OWNED) || (state == PKVM_PAGE_SHARED_OWNED)) + update_iommu = false; + + return host_stage2_idmap_locked(addr, size, prot, update_iommu); } static int host_request_owned_transition(u64 *completer_addr, diff --git a/arch/x86/Makefile.um b/arch/x86/Makefile.um index d2e95d1d4db7..1aa64846e539 100644 --- a/arch/x86/Makefile.um +++ b/arch/x86/Makefile.um @@ -3,9 +3,14 @@ core-y += arch/x86/crypto/ # # Disable SSE and other FP/SIMD instructions to match normal x86 +# This is required to work around issues in older LLVM versions, but breaks +# GCC versions < 11. See: +# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99652 # +ifeq ($(CONFIG_CC_IS_CLANG),y) KBUILD_CFLAGS += -mno-sse -mno-mmx -mno-sse2 -mno-3dnow -mno-avx KBUILD_RUSTFLAGS += -Ctarget-feature=-sse,-sse2,-sse3,-ssse3,-sse4.1,-sse4.2,-avx,-avx2 +endif ifeq ($(CONFIG_X86_32),y) START := 0x8048000 diff --git a/block/blk-crypto-fallback.c b/block/blk-crypto-fallback.c index 243953d9705d..f96ce6318658 100644 --- a/block/blk-crypto-fallback.c +++ b/block/blk-crypto-fallback.c @@ -78,7 +78,7 @@ static struct blk_crypto_fallback_keyslot { struct crypto_skcipher *tfms[BLK_ENCRYPTION_MODE_MAX]; } *blk_crypto_keyslots; -static struct blk_crypto_profile blk_crypto_fallback_profile; +static struct blk_crypto_profile *blk_crypto_fallback_profile; static struct workqueue_struct *blk_crypto_wq; static mempool_t *blk_crypto_bounce_page_pool; static struct bio_set crypto_bio_split; @@ -294,7 +294,7 @@ static bool blk_crypto_fallback_encrypt_bio(struct bio **bio_ptr) * Get a blk-crypto-fallback keyslot that contains a crypto_skcipher for * this bio's algorithm and key. */ - blk_st = blk_crypto_get_keyslot(&blk_crypto_fallback_profile, + blk_st = blk_crypto_get_keyslot(blk_crypto_fallback_profile, bc->bc_key, &slot); if (blk_st != BLK_STS_OK) { src_bio->bi_status = blk_st; @@ -397,7 +397,7 @@ static void blk_crypto_fallback_decrypt_bio(struct work_struct *work) * Get a blk-crypto-fallback keyslot that contains a crypto_skcipher for * this bio's algorithm and key. */ - blk_st = blk_crypto_get_keyslot(&blk_crypto_fallback_profile, + blk_st = blk_crypto_get_keyslot(blk_crypto_fallback_profile, bc->bc_key, &slot); if (blk_st != BLK_STS_OK) { bio->bi_status = blk_st; @@ -501,7 +501,7 @@ bool blk_crypto_fallback_bio_prep(struct bio **bio_ptr) return false; } - if (!__blk_crypto_cfg_supported(&blk_crypto_fallback_profile, + if (!__blk_crypto_cfg_supported(blk_crypto_fallback_profile, &bc->bc_key->crypto_cfg)) { bio->bi_status = BLK_STS_NOTSUPP; return false; @@ -528,7 +528,7 @@ bool blk_crypto_fallback_bio_prep(struct bio **bio_ptr) int blk_crypto_fallback_evict_key(const struct blk_crypto_key *key) { - return __blk_crypto_evict_key(&blk_crypto_fallback_profile, key); + return __blk_crypto_evict_key(blk_crypto_fallback_profile, key); } static bool blk_crypto_fallback_inited; @@ -536,7 +536,6 @@ static int blk_crypto_fallback_init(void) { int i; int err; - struct blk_crypto_profile *profile = &blk_crypto_fallback_profile; if (blk_crypto_fallback_inited) return 0; @@ -547,19 +546,28 @@ static int blk_crypto_fallback_init(void) if (err) goto out; - err = blk_crypto_profile_init(profile, blk_crypto_num_keyslots); - if (err) + /* Dynamic allocation is needed because of lockdep_register_key(). */ + blk_crypto_fallback_profile = + kzalloc(sizeof(*blk_crypto_fallback_profile), GFP_KERNEL); + if (!blk_crypto_fallback_profile) { + err = -ENOMEM; goto fail_free_bioset; + } + + err = blk_crypto_profile_init(blk_crypto_fallback_profile, + blk_crypto_num_keyslots); + if (err) + goto fail_free_profile; err = -ENOMEM; - profile->ll_ops = blk_crypto_fallback_ll_ops; - profile->max_dun_bytes_supported = BLK_CRYPTO_MAX_IV_SIZE; - profile->key_types_supported = BLK_CRYPTO_KEY_TYPE_STANDARD; + blk_crypto_fallback_profile->ll_ops = blk_crypto_fallback_ll_ops; + blk_crypto_fallback_profile->max_dun_bytes_supported = BLK_CRYPTO_MAX_IV_SIZE; + blk_crypto_fallback_profile->key_types_supported = BLK_CRYPTO_KEY_TYPE_STANDARD; /* All blk-crypto modes have a crypto API fallback. */ for (i = 0; i < BLK_ENCRYPTION_MODE_MAX; i++) - profile->modes_supported[i] = 0xFFFFFFFF; - profile->modes_supported[BLK_ENCRYPTION_MODE_INVALID] = 0; + blk_crypto_fallback_profile->modes_supported[i] = 0xFFFFFFFF; + blk_crypto_fallback_profile->modes_supported[BLK_ENCRYPTION_MODE_INVALID] = 0; blk_crypto_wq = alloc_workqueue("blk_crypto_wq", WQ_UNBOUND | WQ_HIGHPRI | @@ -600,7 +608,9 @@ fail_free_keyslots: fail_free_wq: destroy_workqueue(blk_crypto_wq); fail_destroy_profile: - blk_crypto_profile_destroy(profile); + blk_crypto_profile_destroy(blk_crypto_fallback_profile); +fail_free_profile: + kfree(blk_crypto_fallback_profile); fail_free_bioset: bioset_exit(&crypto_bio_split); out: diff --git a/block/blk-ioc.c b/block/blk-ioc.c index 63fc02042408..25dd4db11121 100644 --- a/block/blk-ioc.c +++ b/block/blk-ioc.c @@ -77,6 +77,10 @@ static void ioc_destroy_icq(struct io_cq *icq) struct elevator_type *et = q->elevator->type; lockdep_assert_held(&ioc->lock); + lockdep_assert_held(&q->queue_lock); + + if (icq->flags & ICQ_DESTROYED) + return; radix_tree_delete(&ioc->icq_tree, icq->q->id); hlist_del_init(&icq->ioc_node); @@ -128,12 +132,7 @@ static void ioc_release_fn(struct work_struct *work) spin_lock(&q->queue_lock); spin_lock(&ioc->lock); - /* - * The icq may have been destroyed when the ioc lock - * was released. - */ - if (!(icq->flags & ICQ_DESTROYED)) - ioc_destroy_icq(icq); + ioc_destroy_icq(icq); spin_unlock(&q->queue_lock); rcu_read_unlock(); @@ -171,23 +170,20 @@ static bool ioc_delay_free(struct io_context *ioc) */ void ioc_clear_queue(struct request_queue *q) { - LIST_HEAD(icq_list); - spin_lock_irq(&q->queue_lock); - list_splice_init(&q->icq_list, &icq_list); - spin_unlock_irq(&q->queue_lock); - - rcu_read_lock(); - while (!list_empty(&icq_list)) { + while (!list_empty(&q->icq_list)) { struct io_cq *icq = - list_entry(icq_list.next, struct io_cq, q_node); + list_first_entry(&q->icq_list, struct io_cq, q_node); - spin_lock_irq(&icq->ioc->lock); - if (!(icq->flags & ICQ_DESTROYED)) - ioc_destroy_icq(icq); - spin_unlock_irq(&icq->ioc->lock); + /* + * Other context won't hold ioc lock to wait for queue_lock, see + * details in ioc_release_fn(). + */ + spin_lock(&icq->ioc->lock); + ioc_destroy_icq(icq); + spin_unlock(&icq->ioc->lock); } - rcu_read_unlock(); + spin_unlock_irq(&q->queue_lock); } #else /* CONFIG_BLK_ICQ */ static inline void ioc_exit_icqs(struct io_context *ioc) diff --git a/build.config.allmodconfig b/build.config.allmodconfig index 3d443b98714c..65d84dbb710d 100644 --- a/build.config.allmodconfig +++ b/build.config.allmodconfig @@ -4,7 +4,6 @@ POST_DEFCONFIG_CMDS="update_config" function update_config() { ${KERNEL_DIR}/scripts/config --file ${OUT_DIR}/.config \ -e UNWINDER_FRAME_POINTER \ - -d WERROR \ -d SAMPLES \ -d BPFILTER \ -e RANDSTRUCT_NONE \ diff --git a/build.config.gki.aarch64.16k b/build.config.gki.aarch64.16k deleted file mode 100644 index 20be95d54647..000000000000 --- a/build.config.gki.aarch64.16k +++ /dev/null @@ -1,5 +0,0 @@ -. ${ROOT_DIR}/${KERNEL_DIR}/build.config.gki.aarch64 - -DEFCONFIG=16k_gki_defconfig -PRE_DEFCONFIG_CMDS="mkdir -p \${OUT_DIR}/arch/arm64/configs/ && cat ${ROOT_DIR}/${KERNEL_DIR}/arch/arm64/configs/gki_defconfig ${ROOT_DIR}/${KERNEL_DIR}/arch/arm64/configs/16k_gki.fragment > \${OUT_DIR}/arch/arm64/configs/${DEFCONFIG};" -POST_DEFCONFIG_CMDS="" diff --git a/crypto/fips140-defs.h b/crypto/fips140-defs.h index 9005f9513308..d3f62e3c3f37 100644 --- a/crypto/fips140-defs.h +++ b/crypto/fips140-defs.h @@ -17,9 +17,9 @@ * related macros to be expanded as they would be for built-in code; e.g., * module_init() adds the function to the .initcalls section of the binary. * - * The .c file that contains the real module_init() for fips140.ko is then - * responsible for redefining MODULE, and the real module_init() is responsible - * for executing all the initcalls that were collected into .initcalls. + * The .c files that contain the real module_init, module license, and module + * parameters for fips140.ko are then responsible for redefining MODULE. The + * real module_init executes all initcalls that were collected into .initcalls. */ #undef MODULE diff --git a/crypto/fips140-eval-testing.c b/crypto/fips140-eval-testing.c index ea3cd653983a..fdc786884d11 100644 --- a/crypto/fips140-eval-testing.c +++ b/crypto/fips140-eval-testing.c @@ -20,6 +20,14 @@ __inline_maybe_unused notrace #undef BUILD_FIPS140_KO +/* + * Since this .c file contains real module parameters for fips140.ko, it needs + * to be compiled normally, so undo the hacks that were done in fips140-defs.h. + */ +#define MODULE +#undef KBUILD_MODFILE +#undef __DISABLE_EXPORTS + #include #include #include diff --git a/drivers/android/vendor_hooks.c b/drivers/android/vendor_hooks.c index 79667ed4ad1d..104e4eb48ff9 100644 --- a/drivers/android/vendor_hooks.c +++ b/drivers/android/vendor_hooks.c @@ -85,6 +85,7 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_binder_set_priority); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_binder_restore_priority); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_binder_wakeup_ilocked); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_do_send_sig_info); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_killed_process); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_mutex_wait_start); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_mutex_wait_finish); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_mutex_init); @@ -322,4 +323,9 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_look_around); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_look_around_migrate_folio); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_test_clear_look_around_ref); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_tune_scan_type); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_tune_swappiness); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_exit_signal_whether_wake); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_exit_check); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_freeze_whether_wake); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_use_amu_fie); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_scan_abort_check_wmarks); diff --git a/drivers/base/arch_topology.c b/drivers/base/arch_topology.c index 2cdade8aa933..148e24b91cf1 100644 --- a/drivers/base/arch_topology.c +++ b/drivers/base/arch_topology.c @@ -34,6 +34,12 @@ static DEFINE_PER_CPU(u32, freq_factor) = 1; static bool supports_scale_freq_counters(const struct cpumask *cpus) { + bool use_amu_fie = true; + + trace_android_vh_use_amu_fie(&use_amu_fie); + if (!use_amu_fie) + return false; + return cpumask_subset(cpus, &scale_freq_counters_mask); } diff --git a/drivers/cpuidle/governors/teo.c b/drivers/cpuidle/governors/teo.c index 987fc5f3997d..356ffc41d284 100644 --- a/drivers/cpuidle/governors/teo.c +++ b/drivers/cpuidle/governors/teo.c @@ -202,6 +202,19 @@ struct teo_cpu { static DEFINE_PER_CPU(struct teo_cpu, teo_cpus); +unsigned long teo_cpu_get_util_threshold(int cpu) +{ + struct teo_cpu *cpu_data = per_cpu_ptr(&teo_cpus, cpu); + return cpu_data->util_threshold; +} +EXPORT_SYMBOL_GPL(teo_cpu_get_util_threshold); +void teo_cpu_set_util_threshold(int cpu, unsigned long util) +{ + struct teo_cpu *cpu_data = per_cpu_ptr(&teo_cpus, cpu); + cpu_data->util_threshold = util; +} +EXPORT_SYMBOL_GPL(teo_cpu_set_util_threshold); + /** * teo_cpu_is_utilized - Check if the CPU's util is above the threshold * @cpu: Target CPU diff --git a/drivers/media/usb/siano/smsusb.c b/drivers/media/usb/siano/smsusb.c index 6f443c542c6d..640737d3b8ae 100644 --- a/drivers/media/usb/siano/smsusb.c +++ b/drivers/media/usb/siano/smsusb.c @@ -179,7 +179,8 @@ static void smsusb_stop_streaming(struct smsusb_device_t *dev) for (i = 0; i < MAX_URBS; i++) { usb_kill_urb(&dev->surbs[i].urb); - cancel_work_sync(&dev->surbs[i].wq); + if (dev->surbs[i].wq.func) + cancel_work_sync(&dev->surbs[i].wq); if (dev->surbs[i].cb) { smscore_putbuffer(dev->coredev, dev->surbs[i].cb); diff --git a/drivers/net/tap.c b/drivers/net/tap.c index 760d8d1b6cba..f34ebd1d1f39 100644 --- a/drivers/net/tap.c +++ b/drivers/net/tap.c @@ -533,7 +533,7 @@ static int tap_open(struct inode *inode, struct file *file) q->sock.state = SS_CONNECTED; q->sock.file = file; q->sock.ops = &tap_socket_ops; - sock_init_data_uid(&q->sock, &q->sk, inode->i_uid); + sock_init_data_uid(&q->sock, &q->sk, current_fsuid()); q->sk.sk_write_space = tap_sock_write_space; q->sk.sk_destruct = tap_sock_destruct; q->flags = IFF_VNET_HDR | IFF_NO_PI | IFF_TAP; diff --git a/drivers/net/tun.c b/drivers/net/tun.c index 91d198aff2f9..fa1d58fd741a 100644 --- a/drivers/net/tun.c +++ b/drivers/net/tun.c @@ -3449,7 +3449,7 @@ static int tun_chr_open(struct inode *inode, struct file * file) tfile->socket.file = file; tfile->socket.ops = &tun_socket_ops; - sock_init_data_uid(&tfile->socket, &tfile->sk, inode->i_uid); + sock_init_data_uid(&tfile->socket, &tfile->sk, current_fsuid()); tfile->sk.sk_write_space = tun_sock_write_space; tfile->sk.sk_sndbuf = INT_MAX; diff --git a/drivers/ufs/core/ufshcd.c b/drivers/ufs/core/ufshcd.c index 1df28ecf6226..430ae3d2fc8a 100644 --- a/drivers/ufs/core/ufshcd.c +++ b/drivers/ufs/core/ufshcd.c @@ -294,7 +294,6 @@ static inline void ufshcd_add_delay_before_dme_cmd(struct ufs_hba *hba); static int ufshcd_host_reset_and_restore(struct ufs_hba *hba); static void ufshcd_resume_clkscaling(struct ufs_hba *hba); static void ufshcd_suspend_clkscaling(struct ufs_hba *hba); -static void __ufshcd_suspend_clkscaling(struct ufs_hba *hba); static int ufshcd_scale_clks(struct ufs_hba *hba, bool scale_up); static irqreturn_t ufshcd_intr(int irq, void *__hba); static int ufshcd_change_power_mode(struct ufs_hba *hba, @@ -1417,9 +1416,10 @@ static void ufshcd_clk_scaling_suspend_work(struct work_struct *work) return; } hba->clk_scaling.is_suspended = true; + hba->clk_scaling.window_start_t = 0; spin_unlock_irqrestore(hba->host->host_lock, irq_flags); - __ufshcd_suspend_clkscaling(hba); + devfreq_suspend_device(hba->devfreq); } static void ufshcd_clk_scaling_resume_work(struct work_struct *work) @@ -1464,6 +1464,13 @@ static int ufshcd_devfreq_target(struct device *dev, return 0; } + /* Skip scaling clock when clock scaling is suspended */ + if (hba->clk_scaling.is_suspended) { + spin_unlock_irqrestore(hba->host->host_lock, irq_flags); + dev_warn(hba->dev, "clock scaling is suspended, skip"); + return 0; + } + if (!hba->clk_scaling.active_reqs) sched_clk_scaling_suspend_work = true; @@ -1495,7 +1502,7 @@ static int ufshcd_devfreq_target(struct device *dev, ktime_to_us(ktime_sub(ktime_get(), start)), ret); out: - if (sched_clk_scaling_suspend_work) + if (sched_clk_scaling_suspend_work && !scale_up) queue_work(hba->clk_scaling.workq, &hba->clk_scaling.suspend_work); @@ -1601,16 +1608,6 @@ static void ufshcd_devfreq_remove(struct ufs_hba *hba) dev_pm_opp_remove(hba->dev, clki->max_freq); } -static void __ufshcd_suspend_clkscaling(struct ufs_hba *hba) -{ - unsigned long flags; - - devfreq_suspend_device(hba->devfreq); - spin_lock_irqsave(hba->host->host_lock, flags); - hba->clk_scaling.window_start_t = 0; - spin_unlock_irqrestore(hba->host->host_lock, flags); -} - static void ufshcd_suspend_clkscaling(struct ufs_hba *hba) { unsigned long flags; @@ -1623,11 +1620,12 @@ static void ufshcd_suspend_clkscaling(struct ufs_hba *hba) if (!hba->clk_scaling.is_suspended) { suspend = true; hba->clk_scaling.is_suspended = true; + hba->clk_scaling.window_start_t = 0; } spin_unlock_irqrestore(hba->host->host_lock, flags); if (suspend) - __ufshcd_suspend_clkscaling(hba); + devfreq_suspend_device(hba->devfreq); } static void ufshcd_resume_clkscaling(struct ufs_hba *hba) diff --git a/drivers/usb/typec/tcpm/tcpm.c b/drivers/usb/typec/tcpm/tcpm.c index 6af7c21aeaac..b5e4433a01c5 100644 --- a/drivers/usb/typec/tcpm/tcpm.c +++ b/drivers/usb/typec/tcpm/tcpm.c @@ -2748,6 +2748,13 @@ static void tcpm_pd_ctrl_request(struct tcpm_port *port, port->sink_cap_done = true; tcpm_set_state(port, ready_state(port), 0); break; + /* + * Some port partners do not support GET_STATUS, avoid soft reset the link to + * prevent redundant power re-negotiation + */ + case GET_STATUS_SEND: + tcpm_set_state(port, ready_state(port), 0); + break; case SRC_READY: case SNK_READY: if (port->vdm_state > VDM_STATE_READY) { @@ -3248,23 +3255,12 @@ static int tcpm_pd_select_pdo(struct tcpm_port *port, int *sink_pdo, return ret; } -#define min_pps_apdo_current(x, y) \ - min(pdo_pps_apdo_max_current(x), pdo_pps_apdo_max_current(y)) - static unsigned int tcpm_pd_select_pps_apdo(struct tcpm_port *port) { - unsigned int i, j, max_mw = 0, max_mv = 0; - unsigned int min_src_mv, max_src_mv, src_ma, src_mw; - unsigned int min_snk_mv, max_snk_mv; - unsigned int max_op_mv; - u32 pdo, src, snk; - unsigned int src_pdo = 0, snk_pdo = 0; + unsigned int i, src_ma, max_temp_mw = 0, max_op_ma, op_mw; + unsigned int src_pdo = 0; + u32 pdo, src; - /* - * Select the source PPS APDO providing the most power while staying - * within the board's limits. We skip the first PDO as this is always - * 5V 3A. - */ for (i = 1; i < port->nr_source_caps; ++i) { pdo = port->source_caps[i]; @@ -3275,54 +3271,17 @@ static unsigned int tcpm_pd_select_pps_apdo(struct tcpm_port *port) continue; } - min_src_mv = pdo_pps_apdo_min_voltage(pdo); - max_src_mv = pdo_pps_apdo_max_voltage(pdo); + if (port->pps_data.req_out_volt > pdo_pps_apdo_max_voltage(pdo) || + port->pps_data.req_out_volt < pdo_pps_apdo_min_voltage(pdo)) + continue; + src_ma = pdo_pps_apdo_max_current(pdo); - src_mw = (src_ma * max_src_mv) / 1000; - - /* - * Now search through the sink PDOs to find a matching - * PPS APDO. Again skip the first sink PDO as this will - * always be 5V 3A. - */ - for (j = 1; j < port->nr_snk_pdo; j++) { - pdo = port->snk_pdo[j]; - - switch (pdo_type(pdo)) { - case PDO_TYPE_APDO: - if (pdo_apdo_type(pdo) != APDO_TYPE_PPS) { - tcpm_log(port, - "Not PPS APDO (sink), ignoring"); - continue; - } - - min_snk_mv = - pdo_pps_apdo_min_voltage(pdo); - max_snk_mv = - pdo_pps_apdo_max_voltage(pdo); - break; - default: - tcpm_log(port, - "Not APDO type (sink), ignoring"); - continue; - } - - if (min_src_mv <= max_snk_mv && - max_src_mv >= min_snk_mv) { - max_op_mv = min(max_src_mv, max_snk_mv); - src_mw = (max_op_mv * src_ma) / 1000; - /* Prefer higher voltages if available */ - if ((src_mw == max_mw && - max_op_mv > max_mv) || - src_mw > max_mw) { - src_pdo = i; - snk_pdo = j; - max_mw = src_mw; - max_mv = max_op_mv; - } - } + max_op_ma = min(src_ma, port->pps_data.req_op_curr); + op_mw = max_op_ma * port->pps_data.req_out_volt / 1000; + if (op_mw > max_temp_mw) { + src_pdo = i; + max_temp_mw = op_mw; } - break; default: tcpm_log(port, "Not APDO type (source), ignoring"); @@ -3332,16 +3291,10 @@ static unsigned int tcpm_pd_select_pps_apdo(struct tcpm_port *port) if (src_pdo) { src = port->source_caps[src_pdo]; - snk = port->snk_pdo[snk_pdo]; - port->pps_data.req_min_volt = max(pdo_pps_apdo_min_voltage(src), - pdo_pps_apdo_min_voltage(snk)); - port->pps_data.req_max_volt = min(pdo_pps_apdo_max_voltage(src), - pdo_pps_apdo_max_voltage(snk)); - port->pps_data.req_max_curr = min_pps_apdo_current(src, snk); - port->pps_data.req_out_volt = min(port->pps_data.req_max_volt, - max(port->pps_data.req_min_volt, - port->pps_data.req_out_volt)); + port->pps_data.req_min_volt = pdo_pps_apdo_min_voltage(src); + port->pps_data.req_max_volt = pdo_pps_apdo_max_voltage(src); + port->pps_data.req_max_curr = pdo_pps_apdo_max_current(src); port->pps_data.req_op_curr = min(port->pps_data.req_max_curr, port->pps_data.req_op_curr); } @@ -3459,32 +3412,16 @@ static int tcpm_pd_send_request(struct tcpm_port *port) static int tcpm_pd_build_pps_request(struct tcpm_port *port, u32 *rdo) { unsigned int out_mv, op_ma, op_mw, max_mv, max_ma, flags; - enum pd_pdo_type type; unsigned int src_pdo_index; - u32 pdo; src_pdo_index = tcpm_pd_select_pps_apdo(port); if (!src_pdo_index) return -EOPNOTSUPP; - pdo = port->source_caps[src_pdo_index]; - type = pdo_type(pdo); - - switch (type) { - case PDO_TYPE_APDO: - if (pdo_apdo_type(pdo) != APDO_TYPE_PPS) { - tcpm_log(port, "Invalid APDO selected!"); - return -EINVAL; - } - max_mv = port->pps_data.req_max_volt; - max_ma = port->pps_data.req_max_curr; - out_mv = port->pps_data.req_out_volt; - op_ma = port->pps_data.req_op_curr; - break; - default: - tcpm_log(port, "Invalid PDO selected!"); - return -EINVAL; - } + max_mv = port->pps_data.req_max_volt; + max_ma = port->pps_data.req_max_curr; + out_mv = port->pps_data.req_out_volt; + op_ma = port->pps_data.req_op_curr; flags = RDO_USB_COMM | RDO_NO_SUSPEND; @@ -3923,6 +3860,29 @@ static enum typec_cc_status tcpm_pwr_opmode_to_rp(enum typec_pwr_opmode opmode) } } +static void tcpm_set_initial_svdm_version(struct tcpm_port *port) +{ + switch (port->negotiated_rev) { + case PD_REV30: + break; + /* + * 6.4.4.2.3 Structured VDM Version + * 2.0 states "At this time, there is only one version (1.0) defined. + * This field Shall be set to zero to indicate Version 1.0." + * 3.0 states "This field Shall be set to 01b to indicate Version 2.0." + * To ensure that we follow the Power Delivery revision we are currently + * operating on, downgrade the SVDM version to the highest one supported + * by the Power Delivery revision. + */ + case PD_REV20: + typec_partner_set_svdm_version(port->partner, SVDM_VER_1_0); + break; + default: + typec_partner_set_svdm_version(port->partner, SVDM_VER_1_0); + break; + } +} + static void run_state_machine(struct tcpm_port *port) { int ret; @@ -4167,10 +4127,12 @@ static void run_state_machine(struct tcpm_port *port) * For now, this driver only supports SOP for DISCOVER_IDENTITY, thus using * port->explicit_contract to decide whether to send the command. */ - if (port->explicit_contract) + if (port->explicit_contract) { + tcpm_set_initial_svdm_version(port); mod_send_discover_delayed_work(port, 0); - else + } else { port->send_discover = false; + } /* * 6.3.5 @@ -4312,7 +4274,9 @@ static void run_state_machine(struct tcpm_port *port) if (port->slow_charger_loop && (current_lim > PD_P_SNK_STDBY_MW / 5)) current_lim = PD_P_SNK_STDBY_MW / 5; tcpm_set_current_limit(port, current_lim, 5000); - tcpm_set_charge(port, true); + /* Not sink vbus if operational current is 0mA */ + tcpm_set_charge(port, !!pdo_max_current(port->snk_pdo[0])); + if (!port->pd_supported) tcpm_set_state(port, SNK_READY, 0); else @@ -4471,10 +4435,12 @@ static void run_state_machine(struct tcpm_port *port) * For now, this driver only supports SOP for DISCOVER_IDENTITY, thus using * port->explicit_contract. */ - if (port->explicit_contract) + if (port->explicit_contract) { + tcpm_set_initial_svdm_version(port); mod_send_discover_delayed_work(port, 0); - else + } else { port->send_discover = false; + } power_supply_changed(port->psy); break; @@ -4601,7 +4567,8 @@ static void run_state_machine(struct tcpm_port *port) tcpm_set_current_limit(port, tcpm_get_current_limit(port), 5000); - tcpm_set_charge(port, true); + /* Not sink vbus if operational current is 0mA */ + tcpm_set_charge(port, !!pdo_max_current(port->snk_pdo[0])); } if (port->ams == HARD_RESET) tcpm_ams_finish(port); @@ -5378,6 +5345,10 @@ static void _tcpm_pd_vbus_off(struct tcpm_port *port) /* Do nothing, vbus drop expected */ break; + case SNK_HARD_RESET_WAIT_VBUS: + /* Do nothing, its OK to receive vbus off events */ + break; + default: if (port->pwr_role == TYPEC_SINK && port->attached) tcpm_set_state(port, SNK_UNATTACHED, tcpm_wait_for_discharge(port)); @@ -5429,6 +5400,9 @@ static void _tcpm_pd_vbus_vsafe0v(struct tcpm_port *port) case SNK_DEBOUNCED: /*Do nothing, still waiting for VSAFE5V for connect */ break; + case SNK_HARD_RESET_WAIT_VBUS: + /* Do nothing, its OK to receive vbus off events */ + break; default: if (port->pwr_role == TYPEC_SINK && port->auto_vbus_discharge_enabled) tcpm_set_state(port, SNK_UNATTACHED, 0); @@ -5945,12 +5919,6 @@ static int tcpm_pps_set_out_volt(struct tcpm_port *port, u16 req_out_volt) goto port_unlock; } - if (req_out_volt < port->pps_data.min_volt || - req_out_volt > port->pps_data.max_volt) { - ret = -EINVAL; - goto port_unlock; - } - target_mw = (port->current_limit * req_out_volt) / 1000; if (target_mw < port->operating_snk_mw) { ret = -EINVAL; @@ -6479,11 +6447,7 @@ static int tcpm_psy_set_prop(struct power_supply *psy, ret = tcpm_psy_set_online(port, val); break; case POWER_SUPPLY_PROP_VOLTAGE_NOW: - if (val->intval < port->pps_data.min_volt * 1000 || - val->intval > port->pps_data.max_volt * 1000) - ret = -EINVAL; - else - ret = tcpm_pps_set_out_volt(port, val->intval / 1000); + ret = tcpm_pps_set_out_volt(port, val->intval / 1000); break; case POWER_SUPPLY_PROP_CURRENT_NOW: if (val->intval > port->pps_data.max_curr * 1000) diff --git a/drivers/virt/Kconfig b/drivers/virt/Kconfig index c39409b69d01..41440e116e71 100644 --- a/drivers/virt/Kconfig +++ b/drivers/virt/Kconfig @@ -54,4 +54,6 @@ source "drivers/virt/coco/sev-guest/Kconfig" source "drivers/virt/gunyah/Kconfig" +source "drivers/virt/geniezone/Kconfig" + endif diff --git a/drivers/virt/geniezone/Kconfig b/drivers/virt/geniezone/Kconfig new file mode 100644 index 000000000000..2643fb8913cc --- /dev/null +++ b/drivers/virt/geniezone/Kconfig @@ -0,0 +1,16 @@ +# SPDX-License-Identifier: GPL-2.0-only + +config MTK_GZVM + tristate "GenieZone Hypervisor driver for guest VM operation" + depends on ARM64 + help + This driver, gzvm, enables to run guest VMs on MTK GenieZone + hypervisor. It exports kvm-like interfaces for VMM (e.g., crosvm) in + order to operate guest VMs on GenieZone hypervisor. + + GenieZone hypervisor now only supports MediaTek SoC and arm64 + architecture. + + Select M if you want it be built as a module (gzvm.ko). + + If unsure, say N. diff --git a/drivers/virt/geniezone/Makefile b/drivers/virt/geniezone/Makefile new file mode 100644 index 000000000000..bc5ae49f2407 --- /dev/null +++ b/drivers/virt/geniezone/Makefile @@ -0,0 +1,11 @@ +# SPDX-License-Identifier: GPL-2.0-only +# +# Makefile for GenieZone driver, this file should be include in arch's +# to avoid two ko being generated. +# + +GZVM_DIR ?= ../../../drivers/virt/geniezone + +gzvm-y := $(GZVM_DIR)/gzvm_main.o $(GZVM_DIR)/gzvm_vm.o \ + $(GZVM_DIR)/gzvm_vcpu.o $(GZVM_DIR)/gzvm_irqfd.o \ + $(GZVM_DIR)/gzvm_ioeventfd.o diff --git a/drivers/virt/geniezone/gzvm_common.h b/drivers/virt/geniezone/gzvm_common.h new file mode 100644 index 000000000000..d0e39ded79e6 --- /dev/null +++ b/drivers/virt/geniezone/gzvm_common.h @@ -0,0 +1,12 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* + * Copyright (c) 2023 MediaTek Inc. + */ + +#ifndef __GZ_COMMON_H__ +#define __GZ_COMMON_H__ + +int gzvm_irqchip_inject_irq(struct gzvm *gzvm, unsigned int vcpu_idx, + u32 irq_type, u32 irq, bool level); + +#endif /* __GZVM_COMMON_H__ */ diff --git a/drivers/virt/geniezone/gzvm_ioeventfd.c b/drivers/virt/geniezone/gzvm_ioeventfd.c new file mode 100644 index 000000000000..8d41db16ada2 --- /dev/null +++ b/drivers/virt/geniezone/gzvm_ioeventfd.c @@ -0,0 +1,273 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * Copyright (c) 2023 MediaTek Inc. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +struct gzvm_ioevent { + struct list_head list; + __u64 addr; + __u32 len; + struct eventfd_ctx *evt_ctx; + __u64 datamatch; + bool wildcard; +}; + +/** + * ioeventfd_check_collision() - Check collison assumes gzvm->slots_lock held. + * @gzvm: Pointer to gzvm. + * @p: Pointer to gzvm_ioevent. + * + * Return: + * * true - collison found + * * false - no collison + */ +static bool ioeventfd_check_collision(struct gzvm *gzvm, struct gzvm_ioevent *p) +{ + struct gzvm_ioevent *_p; + + list_for_each_entry(_p, &gzvm->ioevents, list) + if (_p->addr == p->addr && + (!_p->len || !p->len || + (_p->len == p->len && + (_p->wildcard || p->wildcard || + _p->datamatch == p->datamatch)))) + return true; + + return false; +} + +static void gzvm_ioevent_release(struct gzvm_ioevent *p) +{ + eventfd_ctx_put(p->evt_ctx); + list_del(&p->list); + kfree(p); +} + +static bool gzvm_ioevent_in_range(struct gzvm_ioevent *p, __u64 addr, int len, + const void *val) +{ + u64 _val; + + if (addr != p->addr) + /* address must be precise for a hit */ + return false; + + if (!p->len) + /* length = 0 means only look at the address, so always a hit */ + return true; + + if (len != p->len) + /* address-range must be precise for a hit */ + return false; + + if (p->wildcard) + /* all else equal, wildcard is always a hit */ + return true; + + /* otherwise, we have to actually compare the data */ + + WARN_ON_ONCE(!IS_ALIGNED((unsigned long)val, len)); + + switch (len) { + case 1: + _val = *(u8 *)val; + break; + case 2: + _val = *(u16 *)val; + break; + case 4: + _val = *(u32 *)val; + break; + case 8: + _val = *(u64 *)val; + break; + default: + return false; + } + + return _val == p->datamatch; +} + +static int gzvm_deassign_ioeventfd(struct gzvm *gzvm, + struct gzvm_ioeventfd *args) +{ + struct gzvm_ioevent *p, *tmp; + struct eventfd_ctx *evt_ctx; + int ret = -ENOENT; + bool wildcard; + + evt_ctx = eventfd_ctx_fdget(args->fd); + if (IS_ERR(evt_ctx)) + return PTR_ERR(evt_ctx); + + wildcard = !(args->flags & GZVM_IOEVENTFD_FLAG_DATAMATCH); + + mutex_lock(&gzvm->lock); + + list_for_each_entry_safe(p, tmp, &gzvm->ioevents, list) { + if (p->evt_ctx != evt_ctx || + p->addr != args->addr || + p->len != args->len || + p->wildcard != wildcard) + continue; + + if (!p->wildcard && p->datamatch != args->datamatch) + continue; + + gzvm_ioevent_release(p); + ret = 0; + break; + } + + mutex_unlock(&gzvm->lock); + + /* got in the front of this function */ + eventfd_ctx_put(evt_ctx); + + return ret; +} + +static int gzvm_assign_ioeventfd(struct gzvm *gzvm, struct gzvm_ioeventfd *args) +{ + struct eventfd_ctx *evt_ctx; + struct gzvm_ioevent *evt; + int ret; + + evt_ctx = eventfd_ctx_fdget(args->fd); + if (IS_ERR(evt_ctx)) + return PTR_ERR(evt_ctx); + + evt = kmalloc(sizeof(*evt), GFP_KERNEL); + if (!evt) + return -ENOMEM; + *evt = (struct gzvm_ioevent) { + .addr = args->addr, + .len = args->len, + .evt_ctx = evt_ctx, + }; + if (args->flags & GZVM_IOEVENTFD_FLAG_DATAMATCH) { + evt->datamatch = args->datamatch; + evt->wildcard = false; + } else { + evt->wildcard = true; + } + + if (ioeventfd_check_collision(gzvm, evt)) { + ret = -EEXIST; + goto err_free; + } + + mutex_lock(&gzvm->lock); + list_add_tail(&evt->list, &gzvm->ioevents); + mutex_unlock(&gzvm->lock); + + return 0; + +err_free: + kfree(evt); + eventfd_ctx_put(evt_ctx); + return ret; +} + +/** + * gzvm_ioeventfd_check_valid() - Check user arguments is valid. + * @args: Pointer to gzvm_ioeventfd. + * + * Return: + * * true if user arguments are valid. + * * false if user arguments are invalid. + */ +static bool gzvm_ioeventfd_check_valid(struct gzvm_ioeventfd *args) +{ + /* must be natural-word sized, or 0 to ignore length */ + switch (args->len) { + case 0: + case 1: + case 2: + case 4: + case 8: + break; + default: + return false; + } + + /* check for range overflow */ + if (args->addr + args->len < args->addr) + return false; + + /* check for extra flags that we don't understand */ + if (args->flags & ~GZVM_IOEVENTFD_VALID_FLAG_MASK) + return false; + + /* ioeventfd with no length can't be combined with DATAMATCH */ + if (!args->len && (args->flags & GZVM_IOEVENTFD_FLAG_DATAMATCH)) + return false; + + /* gzvm does not support pio bus ioeventfd */ + if (args->flags & GZVM_IOEVENTFD_FLAG_PIO) + return false; + + return true; +} + +/** + * gzvm_ioeventfd() - Register ioevent to ioevent list. + * @gzvm: Pointer to gzvm. + * @args: Pointer to gzvm_ioeventfd. + * + * Return: + * * 0 - Success. + * * Negative - Failure. + */ +int gzvm_ioeventfd(struct gzvm *gzvm, struct gzvm_ioeventfd *args) +{ + if (gzvm_ioeventfd_check_valid(args) == false) + return -EINVAL; + + if (args->flags & GZVM_IOEVENTFD_FLAG_DEASSIGN) + return gzvm_deassign_ioeventfd(gzvm, args); + return gzvm_assign_ioeventfd(gzvm, args); +} + +/** + * gzvm_ioevent_write() - Travers this vm's registered ioeventfd to see if + * need notifying it. + * @vcpu: Pointer to vcpu. + * @addr: mmio address. + * @len: mmio size. + * @val: Pointer to void. + * + * Return: + * * true if this io is already sent to ioeventfd's listener. + * * false if we cannot find any ioeventfd registering this mmio write. + */ +bool gzvm_ioevent_write(struct gzvm_vcpu *vcpu, __u64 addr, int len, + const void *val) +{ + struct gzvm_ioevent *e; + + list_for_each_entry(e, &vcpu->gzvm->ioevents, list) { + if (gzvm_ioevent_in_range(e, addr, len, val)) { + eventfd_signal(e->evt_ctx, 1); + return true; + } + } + return false; +} + +int gzvm_init_ioeventfd(struct gzvm *gzvm) +{ + INIT_LIST_HEAD(&gzvm->ioevents); + + return 0; +} diff --git a/drivers/virt/geniezone/gzvm_irqfd.c b/drivers/virt/geniezone/gzvm_irqfd.c new file mode 100644 index 000000000000..b10ac3a940ee --- /dev/null +++ b/drivers/virt/geniezone/gzvm_irqfd.c @@ -0,0 +1,566 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * Copyright (c) 2023 MediaTek Inc. + */ + +#include +#include +#include +#include "gzvm_common.h" + +struct gzvm_irq_ack_notifier { + struct hlist_node link; + unsigned int gsi; + void (*irq_acked)(struct gzvm_irq_ack_notifier *ian); +}; + +/** + * struct gzvm_kernel_irqfd_resampler - irqfd resampler descriptor. + * @gzvm: Poiner to gzvm. + * @list: List of resampling struct _irqfd objects sharing this gsi. + * RCU list modified under gzvm->irqfds.resampler_lock. + * @notifier: gzvm irq ack notifier. + * @link: Entry in list of gzvm->irqfd.resampler_list. + * Use for sharing esamplers among irqfds on the same gsi. + * Accessed and modified under gzvm->irqfds.resampler_lock. + * + * Resampling irqfds are a special variety of irqfds used to emulate + * level triggered interrupts. The interrupt is asserted on eventfd + * trigger. On acknowledgment through the irq ack notifier, the + * interrupt is de-asserted and userspace is notified through the + * resamplefd. All resamplers on the same gsi are de-asserted + * together, so we don't need to track the state of each individual + * user. We can also therefore share the same irq source ID. + */ +struct gzvm_kernel_irqfd_resampler { + struct gzvm *gzvm; + + struct list_head list; + struct gzvm_irq_ack_notifier notifier; + + struct list_head link; +}; + +/** + * struct gzvm_kernel_irqfd: gzvm kernel irqfd descriptor. + * @gzvm: Pointer to struct gzvm. + * @wait: Wait queue entry. + * @gsi: Used for level IRQ fast-path. + * @resampler: The resampler used by this irqfd (resampler-only). + * @resamplefd: Eventfd notified on resample (resampler-only). + * @resampler_link: Entry in list of irqfds for a resampler (resampler-only). + * @eventfd: Used for setup/shutdown. + * @list: struct list_head. + * @pt: struct poll_table_struct. + * @shutdown: struct work_struct. + */ +struct gzvm_kernel_irqfd { + struct gzvm *gzvm; + wait_queue_entry_t wait; + + int gsi; + + struct gzvm_kernel_irqfd_resampler *resampler; + + struct eventfd_ctx *resamplefd; + + struct list_head resampler_link; + + struct eventfd_ctx *eventfd; + struct list_head list; + poll_table pt; + struct work_struct shutdown; +}; + +static struct workqueue_struct *irqfd_cleanup_wq; + +/** + * irqfd_set_spi(): irqfd to inject virtual interrupt. + * @gzvm: Pointer to gzvm. + * @irq_source_id: irq source id. + * @irq: This is spi interrupt number (starts from 0 instead of 32). + * @level: irq triggered level. + * @line_status: irq status. + */ +static void irqfd_set_spi(struct gzvm *gzvm, int irq_source_id, u32 irq, + int level, bool line_status) +{ + if (level) + gzvm_irqchip_inject_irq(gzvm, irq_source_id, 0, irq, level); +} + +/** + * irqfd_resampler_ack() - Notify all of the resampler irqfds using this GSI + * when IRQ de-assert once. + * @ian: Pointer to gzvm_irq_ack_notifier. + * + * Since resampler irqfds share an IRQ source ID, we de-assert once + * then notify all of the resampler irqfds using this GSI. We can't + * do multiple de-asserts or we risk racing with incoming re-asserts. + */ +static void irqfd_resampler_ack(struct gzvm_irq_ack_notifier *ian) +{ + struct gzvm_kernel_irqfd_resampler *resampler; + struct gzvm *gzvm; + struct gzvm_kernel_irqfd *irqfd; + int idx; + + resampler = container_of(ian, + struct gzvm_kernel_irqfd_resampler, notifier); + gzvm = resampler->gzvm; + + irqfd_set_spi(gzvm, GZVM_IRQFD_RESAMPLE_IRQ_SOURCE_ID, + resampler->notifier.gsi, 0, false); + + idx = srcu_read_lock(&gzvm->irq_srcu); + + list_for_each_entry_srcu(irqfd, &resampler->list, resampler_link, + srcu_read_lock_held(&gzvm->irq_srcu)) { + eventfd_signal(irqfd->resamplefd, 1); + } + + srcu_read_unlock(&gzvm->irq_srcu, idx); +} + +static void gzvm_register_irq_ack_notifier(struct gzvm *gzvm, + struct gzvm_irq_ack_notifier *ian) +{ + mutex_lock(&gzvm->irq_lock); + hlist_add_head_rcu(&ian->link, &gzvm->irq_ack_notifier_list); + mutex_unlock(&gzvm->irq_lock); +} + +static void gzvm_unregister_irq_ack_notifier(struct gzvm *gzvm, + struct gzvm_irq_ack_notifier *ian) +{ + mutex_lock(&gzvm->irq_lock); + hlist_del_init_rcu(&ian->link); + mutex_unlock(&gzvm->irq_lock); + synchronize_srcu(&gzvm->irq_srcu); +} + +static void irqfd_resampler_shutdown(struct gzvm_kernel_irqfd *irqfd) +{ + struct gzvm_kernel_irqfd_resampler *resampler = irqfd->resampler; + struct gzvm *gzvm = resampler->gzvm; + + mutex_lock(&gzvm->irqfds.resampler_lock); + + list_del_rcu(&irqfd->resampler_link); + synchronize_srcu(&gzvm->irq_srcu); + + if (list_empty(&resampler->list)) { + list_del(&resampler->link); + gzvm_unregister_irq_ack_notifier(gzvm, &resampler->notifier); + irqfd_set_spi(gzvm, GZVM_IRQFD_RESAMPLE_IRQ_SOURCE_ID, + resampler->notifier.gsi, 0, false); + kfree(resampler); + } + + mutex_unlock(&gzvm->irqfds.resampler_lock); +} + +/** + * irqfd_shutdown() - Race-free decouple logic (ordering is critical). + * @work: Pointer to work_struct. + */ +static void irqfd_shutdown(struct work_struct *work) +{ + struct gzvm_kernel_irqfd *irqfd = + container_of(work, struct gzvm_kernel_irqfd, shutdown); + struct gzvm *gzvm = irqfd->gzvm; + u64 cnt; + + /* Make sure irqfd has been initialized in assign path. */ + synchronize_srcu(&gzvm->irq_srcu); + + /* + * Synchronize with the wait-queue and unhook ourselves to prevent + * further events. + */ + eventfd_ctx_remove_wait_queue(irqfd->eventfd, &irqfd->wait, &cnt); + + if (irqfd->resampler) { + irqfd_resampler_shutdown(irqfd); + eventfd_ctx_put(irqfd->resamplefd); + } + + /* + * It is now safe to release the object's resources + */ + eventfd_ctx_put(irqfd->eventfd); + kfree(irqfd); +} + +/** + * irqfd_is_active() - Assumes gzvm->irqfds.lock is held. + * @irqfd: Pointer to gzvm_kernel_irqfd. + * + * Return: + * * true - irqfd is active. + */ +static bool irqfd_is_active(struct gzvm_kernel_irqfd *irqfd) +{ + return list_empty(&irqfd->list) ? false : true; +} + +/** + * irqfd_deactivate() - Mark the irqfd as inactive and schedule it for removal. + * assumes gzvm->irqfds.lock is held. + * @irqfd: Pointer to gzvm_kernel_irqfd. + */ +static void irqfd_deactivate(struct gzvm_kernel_irqfd *irqfd) +{ + if (!irqfd_is_active(irqfd)) + return; + + list_del_init(&irqfd->list); + + queue_work(irqfd_cleanup_wq, &irqfd->shutdown); +} + +/** + * irqfd_wakeup() - Callback of irqfd wait queue, would be woken by writing to + * irqfd to do virtual interrupt injection. + * @wait: Pointer to wait_queue_entry_t. + * @mode: Unused. + * @sync: Unused. + * @key: Get flags about Epoll events. + * + * Return: + * * 0 - Success + */ +static int irqfd_wakeup(wait_queue_entry_t *wait, unsigned int mode, int sync, + void *key) +{ + struct gzvm_kernel_irqfd *irqfd = + container_of(wait, struct gzvm_kernel_irqfd, wait); + __poll_t flags = key_to_poll(key); + struct gzvm *gzvm = irqfd->gzvm; + + if (flags & EPOLLIN) { + u64 cnt; + + eventfd_ctx_do_read(irqfd->eventfd, &cnt); + /* gzvm's irq injection is not blocked, don't need workq */ + irqfd_set_spi(gzvm, GZVM_USERSPACE_IRQ_SOURCE_ID, irqfd->gsi, + 1, false); + } + + if (flags & EPOLLHUP) { + /* The eventfd is closing, detach from GZVM */ + unsigned long iflags; + + spin_lock_irqsave(&gzvm->irqfds.lock, iflags); + + /* + * Do more check if someone deactivated the irqfd before + * we could acquire the irqfds.lock. + */ + if (irqfd_is_active(irqfd)) + irqfd_deactivate(irqfd); + + spin_unlock_irqrestore(&gzvm->irqfds.lock, iflags); + } + + return 0; +} + +static void irqfd_ptable_queue_proc(struct file *file, wait_queue_head_t *wqh, + poll_table *pt) +{ + struct gzvm_kernel_irqfd *irqfd = + container_of(pt, struct gzvm_kernel_irqfd, pt); + add_wait_queue_priority(wqh, &irqfd->wait); +} + +static int gzvm_irqfd_assign(struct gzvm *gzvm, struct gzvm_irqfd *args) +{ + struct gzvm_kernel_irqfd *irqfd, *tmp; + struct fd f; + struct eventfd_ctx *eventfd = NULL, *resamplefd = NULL; + int ret; + __poll_t events; + int idx; + + irqfd = kzalloc(sizeof(*irqfd), GFP_KERNEL_ACCOUNT); + if (!irqfd) + return -ENOMEM; + + irqfd->gzvm = gzvm; + irqfd->gsi = args->gsi; + irqfd->resampler = NULL; + + INIT_LIST_HEAD(&irqfd->list); + INIT_WORK(&irqfd->shutdown, irqfd_shutdown); + + f = fdget(args->fd); + if (!f.file) { + ret = -EBADF; + goto out; + } + + eventfd = eventfd_ctx_fileget(f.file); + if (IS_ERR(eventfd)) { + ret = PTR_ERR(eventfd); + goto fail; + } + + irqfd->eventfd = eventfd; + + if (args->flags & GZVM_IRQFD_FLAG_RESAMPLE) { + struct gzvm_kernel_irqfd_resampler *resampler; + + resamplefd = eventfd_ctx_fdget(args->resamplefd); + if (IS_ERR(resamplefd)) { + ret = PTR_ERR(resamplefd); + goto fail; + } + + irqfd->resamplefd = resamplefd; + INIT_LIST_HEAD(&irqfd->resampler_link); + + mutex_lock(&gzvm->irqfds.resampler_lock); + + list_for_each_entry(resampler, + &gzvm->irqfds.resampler_list, link) { + if (resampler->notifier.gsi == irqfd->gsi) { + irqfd->resampler = resampler; + break; + } + } + + if (!irqfd->resampler) { + resampler = kzalloc(sizeof(*resampler), + GFP_KERNEL_ACCOUNT); + if (!resampler) { + ret = -ENOMEM; + mutex_unlock(&gzvm->irqfds.resampler_lock); + goto fail; + } + + resampler->gzvm = gzvm; + INIT_LIST_HEAD(&resampler->list); + resampler->notifier.gsi = irqfd->gsi; + resampler->notifier.irq_acked = irqfd_resampler_ack; + INIT_LIST_HEAD(&resampler->link); + + list_add(&resampler->link, &gzvm->irqfds.resampler_list); + gzvm_register_irq_ack_notifier(gzvm, + &resampler->notifier); + irqfd->resampler = resampler; + } + + list_add_rcu(&irqfd->resampler_link, &irqfd->resampler->list); + synchronize_srcu(&gzvm->irq_srcu); + + mutex_unlock(&gzvm->irqfds.resampler_lock); + } + + /* + * Install our own custom wake-up handling so we are notified via + * a callback whenever someone signals the underlying eventfd + */ + init_waitqueue_func_entry(&irqfd->wait, irqfd_wakeup); + init_poll_funcptr(&irqfd->pt, irqfd_ptable_queue_proc); + + spin_lock_irq(&gzvm->irqfds.lock); + + ret = 0; + list_for_each_entry(tmp, &gzvm->irqfds.items, list) { + if (irqfd->eventfd != tmp->eventfd) + continue; + /* This fd is used for another irq already. */ + pr_err("already used: gsi=%d fd=%d\n", args->gsi, args->fd); + ret = -EBUSY; + spin_unlock_irq(&gzvm->irqfds.lock); + goto fail; + } + + idx = srcu_read_lock(&gzvm->irq_srcu); + + list_add_tail(&irqfd->list, &gzvm->irqfds.items); + + spin_unlock_irq(&gzvm->irqfds.lock); + + /* + * Check if there was an event already pending on the eventfd + * before we registered, and trigger it as if we didn't miss it. + */ + events = vfs_poll(f.file, &irqfd->pt); + + /* In case there is already a pending event */ + if (events & EPOLLIN) + irqfd_set_spi(gzvm, GZVM_IRQFD_RESAMPLE_IRQ_SOURCE_ID, + irqfd->gsi, 1, false); + + srcu_read_unlock(&gzvm->irq_srcu, idx); + + /* + * do not drop the file until the irqfd is fully initialized, otherwise + * we might race against the EPOLLHUP + */ + fdput(f); + return 0; + +fail: + if (irqfd->resampler) + irqfd_resampler_shutdown(irqfd); + + if (resamplefd && !IS_ERR(resamplefd)) + eventfd_ctx_put(resamplefd); + + if (eventfd && !IS_ERR(eventfd)) + eventfd_ctx_put(eventfd); + + fdput(f); + +out: + kfree(irqfd); + return ret; +} + +static void gzvm_notify_acked_gsi(struct gzvm *gzvm, int gsi) +{ + struct gzvm_irq_ack_notifier *gian; + + hlist_for_each_entry_srcu(gian, &gzvm->irq_ack_notifier_list, + link, srcu_read_lock_held(&gzvm->irq_srcu)) + if (gian->gsi == gsi) + gian->irq_acked(gian); +} + +void gzvm_notify_acked_irq(struct gzvm *gzvm, unsigned int gsi) +{ + int idx; + + idx = srcu_read_lock(&gzvm->irq_srcu); + gzvm_notify_acked_gsi(gzvm, gsi); + srcu_read_unlock(&gzvm->irq_srcu, idx); +} + +/** + * gzvm_irqfd_deassign() - Shutdown any irqfd's that match fd+gsi. + * @gzvm: Pointer to gzvm. + * @args: Pointer to gzvm_irqfd. + * + * Return: + * * 0 - Success. + * * Negative value - Failure. + */ +static int gzvm_irqfd_deassign(struct gzvm *gzvm, struct gzvm_irqfd *args) +{ + struct gzvm_kernel_irqfd *irqfd, *tmp; + struct eventfd_ctx *eventfd; + + eventfd = eventfd_ctx_fdget(args->fd); + if (IS_ERR(eventfd)) + return PTR_ERR(eventfd); + + spin_lock_irq(&gzvm->irqfds.lock); + + list_for_each_entry_safe(irqfd, tmp, &gzvm->irqfds.items, list) { + if (irqfd->eventfd == eventfd && irqfd->gsi == args->gsi) + irqfd_deactivate(irqfd); + } + + spin_unlock_irq(&gzvm->irqfds.lock); + eventfd_ctx_put(eventfd); + + /* + * Block until we know all outstanding shutdown jobs have completed + * so that we guarantee there will not be any more interrupts on this + * gsi once this deassign function returns. + */ + flush_workqueue(irqfd_cleanup_wq); + + return 0; +} + +int gzvm_irqfd(struct gzvm *gzvm, struct gzvm_irqfd *args) +{ + for (int i = 0; i < ARRAY_SIZE(args->pad); i++) { + if (args->pad[i]) + return -EINVAL; + } + + if (args->flags & + ~(GZVM_IRQFD_FLAG_DEASSIGN | GZVM_IRQFD_FLAG_RESAMPLE)) + return -EINVAL; + + if (args->flags & GZVM_IRQFD_FLAG_DEASSIGN) + return gzvm_irqfd_deassign(gzvm, args); + + return gzvm_irqfd_assign(gzvm, args); +} + +/** + * gzvm_vm_irqfd_init() - Initialize irqfd data structure per VM + * + * @gzvm: Pointer to struct gzvm. + * + * Return: + * * 0 - Success. + * * Negative - Failure. + */ +int gzvm_vm_irqfd_init(struct gzvm *gzvm) +{ + mutex_init(&gzvm->irq_lock); + + spin_lock_init(&gzvm->irqfds.lock); + INIT_LIST_HEAD(&gzvm->irqfds.items); + INIT_LIST_HEAD(&gzvm->irqfds.resampler_list); + if (init_srcu_struct(&gzvm->irq_srcu)) + return -EINVAL; + INIT_HLIST_HEAD(&gzvm->irq_ack_notifier_list); + mutex_init(&gzvm->irqfds.resampler_lock); + + return 0; +} + +/** + * gzvm_vm_irqfd_release() - This function is called as the gzvm VM fd is being + * released. Shutdown all irqfds that still remain open. + * @gzvm: Pointer to gzvm. + */ +void gzvm_vm_irqfd_release(struct gzvm *gzvm) +{ + struct gzvm_kernel_irqfd *irqfd, *tmp; + + spin_lock_irq(&gzvm->irqfds.lock); + + list_for_each_entry_safe(irqfd, tmp, &gzvm->irqfds.items, list) + irqfd_deactivate(irqfd); + + spin_unlock_irq(&gzvm->irqfds.lock); + + /* + * Block until we know all outstanding shutdown jobs have completed. + */ + flush_workqueue(irqfd_cleanup_wq); +} + +/** + * gzvm_drv_irqfd_init() - Erase flushing work items when a VM exits. + * + * Return: + * * 0 - Success. + * * Negative - Failure. + * + * Create a host-wide workqueue for issuing deferred shutdown requests + * aggregated from all vm* instances. We need our own isolated + * queue to ease flushing work items when a VM exits. + */ +int gzvm_drv_irqfd_init(void) +{ + irqfd_cleanup_wq = alloc_workqueue("gzvm-irqfd-cleanup", 0, 0); + if (!irqfd_cleanup_wq) + return -ENOMEM; + + return 0; +} + +void gzvm_drv_irqfd_exit(void) +{ + destroy_workqueue(irqfd_cleanup_wq); +} diff --git a/drivers/virt/geniezone/gzvm_main.c b/drivers/virt/geniezone/gzvm_main.c new file mode 100644 index 000000000000..3d970ab1dd8a --- /dev/null +++ b/drivers/virt/geniezone/gzvm_main.c @@ -0,0 +1,143 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * Copyright (c) 2023 MediaTek Inc. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +/** + * gzvm_err_to_errno() - Convert geniezone return value to standard errno + * + * @err: Return value from geniezone function return + * + * Return: Standard errno + */ +int gzvm_err_to_errno(unsigned long err) +{ + int gz_err = (int)err; + + switch (gz_err) { + case 0: + return 0; + case ERR_NO_MEMORY: + return -ENOMEM; + case ERR_NOT_SUPPORTED: + return -EOPNOTSUPP; + case ERR_NOT_IMPLEMENTED: + return -EOPNOTSUPP; + case ERR_FAULT: + return -EFAULT; + default: + break; + } + + return -EINVAL; +} + +/** + * gzvm_dev_ioctl_check_extension() - Check if given capability is support + * or not + * + * @gzvm: Pointer to struct gzvm + * @args: Pointer in u64 from userspace + * + * Return: + * * 0 - Support, no error + * * -EOPNOTSUPP - Not support + * * -EFAULT - Failed to get data from userspace + */ +long gzvm_dev_ioctl_check_extension(struct gzvm *gzvm, unsigned long args) +{ + __u64 cap; + void __user *argp = (void __user *)args; + + if (copy_from_user(&cap, argp, sizeof(uint64_t))) + return -EFAULT; + return gzvm_arch_check_extension(gzvm, cap, argp); +} + +static long gzvm_dev_ioctl(struct file *filp, unsigned int cmd, + unsigned long user_args) +{ + long ret = -ENOTTY; + + switch (cmd) { + case GZVM_CREATE_VM: + ret = gzvm_dev_ioctl_create_vm(user_args); + break; + case GZVM_CHECK_EXTENSION: + if (!user_args) + return -EINVAL; + ret = gzvm_dev_ioctl_check_extension(NULL, user_args); + break; + default: + ret = -ENOTTY; + } + + return ret; +} + +static const struct file_operations gzvm_chardev_ops = { + .unlocked_ioctl = gzvm_dev_ioctl, + .llseek = noop_llseek, +}; + +static struct miscdevice gzvm_dev = { + .minor = MISC_DYNAMIC_MINOR, + .name = KBUILD_MODNAME, + .fops = &gzvm_chardev_ops, +}; + +static int gzvm_drv_probe(struct platform_device *pdev) +{ + int ret; + + if (gzvm_arch_probe() != 0) { + dev_err(&pdev->dev, "Not found available conduit\n"); + return -ENODEV; + } + + ret = misc_register(&gzvm_dev); + if (ret) + return ret; + + return gzvm_drv_irqfd_init(); +} + +static int gzvm_drv_remove(struct platform_device *pdev) +{ + gzvm_drv_irqfd_exit(); + gzvm_destroy_all_vms(); + misc_deregister(&gzvm_dev); + return 0; +} + +static const struct of_device_id gzvm_of_match[] = { + { .compatible = "mediatek,geniezone-hyp", }, + {/* sentinel */}, +}; + +static struct platform_driver gzvm_driver = { + .probe = gzvm_drv_probe, + .remove = gzvm_drv_remove, + .driver = { + .name = KBUILD_MODNAME, + .owner = THIS_MODULE, + .of_match_table = gzvm_of_match, + }, +}; + +module_platform_driver(gzvm_driver); + +MODULE_DEVICE_TABLE(of, gzvm_of_match); +MODULE_AUTHOR("MediaTek"); +MODULE_DESCRIPTION("GenieZone interface for VMM"); +MODULE_LICENSE("GPL"); diff --git a/drivers/virt/geniezone/gzvm_vcpu.c b/drivers/virt/geniezone/gzvm_vcpu.c new file mode 100644 index 000000000000..72bd122a8be7 --- /dev/null +++ b/drivers/virt/geniezone/gzvm_vcpu.c @@ -0,0 +1,276 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * Copyright (c) 2023 MediaTek Inc. + */ + +#include +#include +#include +#include +#include +#include +#include +#include + +/* maximum size needed for holding an integer */ +#define ITOA_MAX_LEN 12 + +static long gzvm_vcpu_update_one_reg(struct gzvm_vcpu *vcpu, + void * __user argp, + bool is_write) +{ + struct gzvm_one_reg reg; + void __user *reg_addr; + u64 data = 0; + u64 reg_size; + long ret; + + if (copy_from_user(®, argp, sizeof(reg))) + return -EFAULT; + + reg_addr = (void __user *)reg.addr; + reg_size = (reg.id & GZVM_REG_SIZE_MASK) >> GZVM_REG_SIZE_SHIFT; + reg_size = BIT(reg_size); + + if (is_write) { + if (copy_from_user(&data, reg_addr, reg_size)) + return -EFAULT; + } + + ret = gzvm_arch_vcpu_update_one_reg(vcpu, reg.id, is_write, &data); + + if (ret) + return ret; + + if (!is_write) { + if (copy_to_user(reg_addr, &data, reg_size)) + return -EFAULT; + } + + return 0; +} + +/** + * gzvm_vcpu_handle_mmio() - Handle mmio in kernel space. + * @vcpu: Pointer to vcpu. + * + * Return: + * * true - This mmio exit has been processed. + * * false - This mmio exit has not been processed, require userspace. + */ +static bool gzvm_vcpu_handle_mmio(struct gzvm_vcpu *vcpu) +{ + __u64 addr; + __u32 len; + const void *val_ptr; + + /* So far, we don't have in-kernel mmio read handler */ + if (!vcpu->run->mmio.is_write) + return false; + addr = vcpu->run->mmio.phys_addr; + len = vcpu->run->mmio.size; + val_ptr = &vcpu->run->mmio.data; + + return gzvm_ioevent_write(vcpu, addr, len, val_ptr); +} + +/** + * gzvm_vcpu_run() - Handle vcpu run ioctl, entry point to guest and exit + * point from guest + * @vcpu: Pointer to struct gzvm_vcpu + * @argp: Pointer to struct gzvm_vcpu_run in userspace + * + * Return: + * * 0 - Success. + * * Negative - Failure. + */ +static long gzvm_vcpu_run(struct gzvm_vcpu *vcpu, void * __user argp) +{ + bool need_userspace = false; + u64 exit_reason = 0; + + if (copy_from_user(vcpu->run, argp, sizeof(struct gzvm_vcpu_run))) + return -EFAULT; + + for (int i = 0; i < ARRAY_SIZE(vcpu->run->padding1); i++) { + if (vcpu->run->padding1[i]) + return -EINVAL; + } + + if (vcpu->run->immediate_exit == 1) + return -EINTR; + + while (!need_userspace && !signal_pending(current)) { + gzvm_arch_vcpu_run(vcpu, &exit_reason); + + switch (exit_reason) { + case GZVM_EXIT_MMIO: + if (!gzvm_vcpu_handle_mmio(vcpu)) + need_userspace = true; + break; + /** + * it's geniezone's responsibility to fill corresponding data + * structure + */ + case GZVM_EXIT_HYPERCALL: + fallthrough; + case GZVM_EXIT_EXCEPTION: + fallthrough; + case GZVM_EXIT_DEBUG: + fallthrough; + case GZVM_EXIT_FAIL_ENTRY: + fallthrough; + case GZVM_EXIT_INTERNAL_ERROR: + fallthrough; + case GZVM_EXIT_SYSTEM_EVENT: + fallthrough; + case GZVM_EXIT_SHUTDOWN: + need_userspace = true; + break; + case GZVM_EXIT_IRQ: + fallthrough; + case GZVM_EXIT_GZ: + break; + case GZVM_EXIT_UNKNOWN: + fallthrough; + default: + pr_err("vcpu unknown exit\n"); + need_userspace = true; + goto out; + } + } + +out: + if (copy_to_user(argp, vcpu->run, sizeof(struct gzvm_vcpu_run))) + return -EFAULT; + if (signal_pending(current)) { + // invoke hvc to inform gz to map memory + gzvm_arch_inform_exit(vcpu->gzvm->vm_id); + return -ERESTARTSYS; + } + return 0; +} + +static long gzvm_vcpu_ioctl(struct file *filp, unsigned int ioctl, + unsigned long arg) +{ + int ret = -ENOTTY; + void __user *argp = (void __user *)arg; + struct gzvm_vcpu *vcpu = filp->private_data; + + switch (ioctl) { + case GZVM_RUN: + ret = gzvm_vcpu_run(vcpu, argp); + break; + case GZVM_GET_ONE_REG: + /* is_write */ + ret = gzvm_vcpu_update_one_reg(vcpu, argp, false); + break; + case GZVM_SET_ONE_REG: + /* is_write */ + ret = gzvm_vcpu_update_one_reg(vcpu, argp, true); + break; + default: + break; + } + + return ret; +} + +static const struct file_operations gzvm_vcpu_fops = { + .unlocked_ioctl = gzvm_vcpu_ioctl, + .llseek = noop_llseek, +}; + +/* caller must hold the vm lock */ +static void gzvm_destroy_vcpu(struct gzvm_vcpu *vcpu) +{ + if (!vcpu) + return; + + gzvm_arch_destroy_vcpu(vcpu->gzvm->vm_id, vcpu->vcpuid); + /* clean guest's data */ + memset(vcpu->run, 0, GZVM_VCPU_RUN_MAP_SIZE); + free_pages_exact(vcpu->run, GZVM_VCPU_RUN_MAP_SIZE); + kfree(vcpu); +} + +/** + * gzvm_destroy_vcpus() - Destroy all vcpus, caller has to hold the vm lock + * + * @gzvm: vm struct that owns the vcpus + */ +void gzvm_destroy_vcpus(struct gzvm *gzvm) +{ + int i; + + for (i = 0; i < GZVM_MAX_VCPUS; i++) { + gzvm_destroy_vcpu(gzvm->vcpus[i]); + gzvm->vcpus[i] = NULL; + } +} + +/* create_vcpu_fd() - Allocates an inode for the vcpu. */ +static int create_vcpu_fd(struct gzvm_vcpu *vcpu) +{ + /* sizeof("gzvm-vcpu:") + max(strlen(itoa(vcpuid))) + null */ + char name[10 + ITOA_MAX_LEN + 1]; + + snprintf(name, sizeof(name), "gzvm-vcpu:%d", vcpu->vcpuid); + return anon_inode_getfd(name, &gzvm_vcpu_fops, vcpu, O_RDWR | O_CLOEXEC); +} + +/** + * gzvm_vm_ioctl_create_vcpu() - for GZVM_CREATE_VCPU + * @gzvm: Pointer to struct gzvm + * @cpuid: equals arg + * + * Return: Fd of vcpu, negative errno if error occurs + */ +int gzvm_vm_ioctl_create_vcpu(struct gzvm *gzvm, u32 cpuid) +{ + struct gzvm_vcpu *vcpu; + int ret; + + if (cpuid >= GZVM_MAX_VCPUS) + return -EINVAL; + + vcpu = kzalloc(sizeof(*vcpu), GFP_KERNEL); + if (!vcpu) + return -ENOMEM; + + /** + * Allocate 2 pages for data sharing between driver and gz hypervisor + * + * |- page 0 -|- page 1 -| + * |gzvm_vcpu_run|......|hwstate|.......| + * + */ + vcpu->run = alloc_pages_exact(GZVM_VCPU_RUN_MAP_SIZE, + GFP_KERNEL_ACCOUNT | __GFP_ZERO); + if (!vcpu->run) { + ret = -ENOMEM; + goto free_vcpu; + } + vcpu->hwstate = (void *)vcpu->run + PAGE_SIZE; + vcpu->vcpuid = cpuid; + vcpu->gzvm = gzvm; + mutex_init(&vcpu->lock); + + ret = gzvm_arch_create_vcpu(gzvm->vm_id, vcpu->vcpuid, vcpu->run); + if (ret < 0) + goto free_vcpu_run; + + ret = create_vcpu_fd(vcpu); + if (ret < 0) + goto free_vcpu_run; + gzvm->vcpus[cpuid] = vcpu; + + return ret; + +free_vcpu_run: + free_pages_exact(vcpu->run, GZVM_VCPU_RUN_MAP_SIZE); +free_vcpu: + kfree(vcpu); + return ret; +} diff --git a/drivers/virt/geniezone/gzvm_vm.c b/drivers/virt/geniezone/gzvm_vm.c new file mode 100644 index 000000000000..8e9967b754df --- /dev/null +++ b/drivers/virt/geniezone/gzvm_vm.c @@ -0,0 +1,539 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * Copyright (c) 2023 MediaTek Inc. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include "gzvm_common.h" + +static DEFINE_MUTEX(gzvm_list_lock); +static LIST_HEAD(gzvm_list); + +/** + * hva_to_pa_fast() - converts hva to pa in generic fast way + * @hva: Host virtual address. + * + * Return: 0 if translation error + */ +static u64 hva_to_pa_fast(u64 hva) +{ + struct page *page[1]; + + u64 pfn; + + if (get_user_page_fast_only(hva, 0, page)) { + pfn = page_to_phys(page[0]); + put_page((struct page *)page); + return pfn; + } else { + return 0; + } +} + +/** + * hva_to_pa_slow() - note that this function may sleep + * @hva: Host virtual address. + * + * Return: 0 if translation error + */ +static u64 hva_to_pa_slow(u64 hva) +{ + struct page *page; + int npages; + u64 pfn; + + npages = get_user_pages_unlocked(hva, 1, &page, 0); + if (npages != 1) + return 0; + + pfn = page_to_phys(page); + put_page(page); + + return pfn; +} + +static u64 gzvm_gfn_to_hva_memslot(struct gzvm_memslot *memslot, u64 gfn) +{ + u64 offset = gfn - memslot->base_gfn; + + return memslot->userspace_addr + offset * PAGE_SIZE; +} + +static u64 __gzvm_gfn_to_pfn_memslot(struct gzvm_memslot *memslot, u64 gfn) +{ + u64 hva, pa; + + hva = gzvm_gfn_to_hva_memslot(memslot, gfn); + + pa = gzvm_hva_to_pa_arch(hva); + if (pa != 0) + return PHYS_PFN(pa); + + pa = hva_to_pa_fast(hva); + if (pa) + return PHYS_PFN(pa); + + pa = hva_to_pa_slow(hva); + if (pa) + return PHYS_PFN(pa); + + return 0; +} + +/** + * gzvm_gfn_to_pfn_memslot() - Translate gfn (guest ipa) to pfn (host pa), + * result is in @pfn + * @memslot: Pointer to struct gzvm_memslot. + * @gfn: Guest frame number. + * @pfn: Host page frame number. + * + * Return: + * * 0 - Succeed + * * -EFAULT - Failed to convert + */ +static int gzvm_gfn_to_pfn_memslot(struct gzvm_memslot *memslot, u64 gfn, + u64 *pfn) +{ + u64 __pfn; + + if (!memslot) + return -EFAULT; + + __pfn = __gzvm_gfn_to_pfn_memslot(memslot, gfn); + if (__pfn == 0) { + *pfn = 0; + return -EFAULT; + } + + *pfn = __pfn; + + return 0; +} + +/** + * fill_constituents() - Populate pa to buffer until full + * @consti: Pointer to struct mem_region_addr_range. + * @consti_cnt: Constituent count. + * @max_nr_consti: Maximum number of constituent count. + * @gfn: Guest frame number. + * @total_pages: Total page numbers. + * @slot: Pointer to struct gzvm_memslot. + * + * Return: how many pages we've fill in, negative if error + */ +static int fill_constituents(struct mem_region_addr_range *consti, + int *consti_cnt, int max_nr_consti, u64 gfn, + u32 total_pages, struct gzvm_memslot *slot) +{ + u64 pfn, prev_pfn, gfn_end; + int nr_pages = 1; + int i = 0; + + if (unlikely(total_pages == 0)) + return -EINVAL; + gfn_end = gfn + total_pages; + + /* entry 0 */ + if (gzvm_gfn_to_pfn_memslot(slot, gfn, &pfn) != 0) + return -EFAULT; + consti[0].address = PFN_PHYS(pfn); + consti[0].pg_cnt = 1; + gfn++; + prev_pfn = pfn; + + while (i < max_nr_consti && gfn < gfn_end) { + if (gzvm_gfn_to_pfn_memslot(slot, gfn, &pfn) != 0) + return -EFAULT; + if (pfn == (prev_pfn + 1)) { + consti[i].pg_cnt++; + } else { + i++; + if (i >= max_nr_consti) + break; + consti[i].address = PFN_PHYS(pfn); + consti[i].pg_cnt = 1; + } + prev_pfn = pfn; + gfn++; + nr_pages++; + } + if (i != max_nr_consti) + i++; + *consti_cnt = i; + + return nr_pages; +} + +/* register_memslot_addr_range() - Register memory region to GZ */ +static int +register_memslot_addr_range(struct gzvm *gzvm, struct gzvm_memslot *memslot) +{ + struct gzvm_memory_region_ranges *region; + u32 buf_size; + int max_nr_consti, remain_pages; + u64 gfn, gfn_end; + + buf_size = PAGE_SIZE * 2; + region = alloc_pages_exact(buf_size, GFP_KERNEL); + if (!region) + return -ENOMEM; + max_nr_consti = (buf_size - sizeof(*region)) / + sizeof(struct mem_region_addr_range); + + region->slot = memslot->slot_id; + remain_pages = memslot->npages; + gfn = memslot->base_gfn; + gfn_end = gfn + remain_pages; + while (gfn < gfn_end) { + int nr_pages; + + nr_pages = fill_constituents(region->constituents, + ®ion->constituent_cnt, + max_nr_consti, gfn, + remain_pages, memslot); + if (nr_pages < 0) { + pr_err("Failed to fill constituents\n"); + free_pages_exact(region, buf_size); + return nr_pages; + } + region->gpa = PFN_PHYS(gfn); + region->total_pages = nr_pages; + + remain_pages -= nr_pages; + gfn += nr_pages; + + if (gzvm_arch_set_memregion(gzvm->vm_id, buf_size, + virt_to_phys(region))) { + pr_err("Failed to register memregion to hypervisor\n"); + free_pages_exact(region, buf_size); + return -EFAULT; + } + } + free_pages_exact(region, buf_size); + return 0; +} + +/** + * gzvm_vm_ioctl_set_memory_region() - Set memory region of guest + * @gzvm: Pointer to struct gzvm. + * @mem: Input memory region from user. + * + * Return: + * * -EXIO - memslot is out-of-range + * * -EFAULT - Cannot find corresponding vma + * * -EINVAL - region size and vma size does not match + */ +static int +gzvm_vm_ioctl_set_memory_region(struct gzvm *gzvm, + struct gzvm_userspace_memory_region *mem) +{ + int ret; + struct vm_area_struct *vma; + struct gzvm_memslot *memslot; + unsigned long size; + __u32 slot; + + slot = mem->slot; + if (slot >= GZVM_MAX_MEM_REGION) + return -ENXIO; + memslot = &gzvm->memslot[slot]; + + vma = vma_lookup(gzvm->mm, mem->userspace_addr); + if (!vma) + return -EFAULT; + + size = vma->vm_end - vma->vm_start; + if (size != mem->memory_size) + return -EINVAL; + + memslot->base_gfn = __phys_to_pfn(mem->guest_phys_addr); + memslot->npages = size >> PAGE_SHIFT; + memslot->userspace_addr = mem->userspace_addr; + memslot->vma = vma; + memslot->flags = mem->flags; + memslot->slot_id = mem->slot; + + ret = gzvm_arch_memregion_purpose(gzvm, mem); + if (ret) { + pr_err("Failed to config memory region for the specified purpose\n"); + return -EFAULT; + } + return register_memslot_addr_range(gzvm, memslot); +} + +int gzvm_irqchip_inject_irq(struct gzvm *gzvm, unsigned int vcpu_idx, + u32 irq_type, u32 irq, bool level) +{ + return gzvm_arch_inject_irq(gzvm, vcpu_idx, irq_type, irq, level); +} + +static int gzvm_vm_ioctl_irq_line(struct gzvm *gzvm, + struct gzvm_irq_level *irq_level) +{ + u32 irq = irq_level->irq; + u32 irq_type, vcpu_idx, vcpu2_idx, irq_num; + bool level = irq_level->level; + + irq_type = FIELD_GET(GZVM_IRQ_LINE_TYPE, irq); + vcpu_idx = FIELD_GET(GZVM_IRQ_LINE_VCPU, irq); + vcpu2_idx = FIELD_GET(GZVM_IRQ_LINE_VCPU2, irq) * (GZVM_IRQ_VCPU_MASK + 1); + irq_num = FIELD_GET(GZVM_IRQ_LINE_NUM, irq); + + return gzvm_irqchip_inject_irq(gzvm, vcpu_idx + vcpu2_idx, irq_type, irq_num, + level); +} + +static int gzvm_vm_ioctl_create_device(struct gzvm *gzvm, void __user *argp) +{ + struct gzvm_create_device *gzvm_dev; + void *dev_data = NULL; + int ret; + + gzvm_dev = (struct gzvm_create_device *)alloc_pages_exact(PAGE_SIZE, + GFP_KERNEL); + if (!gzvm_dev) + return -ENOMEM; + if (copy_from_user(gzvm_dev, argp, sizeof(*gzvm_dev))) { + ret = -EFAULT; + goto err_free_dev; + } + + if (gzvm_dev->attr_addr != 0 && gzvm_dev->attr_size != 0) { + size_t attr_size = gzvm_dev->attr_size; + void __user *attr_addr = (void __user *)gzvm_dev->attr_addr; + + /* Size of device specific data should not be over a page. */ + if (attr_size > PAGE_SIZE) + return -EINVAL; + + dev_data = alloc_pages_exact(attr_size, GFP_KERNEL); + if (!dev_data) { + ret = -ENOMEM; + goto err_free_dev; + } + + if (copy_from_user(dev_data, attr_addr, attr_size)) { + ret = -EFAULT; + goto err_free_dev_data; + } + gzvm_dev->attr_addr = virt_to_phys(dev_data); + } + + ret = gzvm_arch_create_device(gzvm->vm_id, gzvm_dev); +err_free_dev_data: + if (dev_data) + free_pages_exact(dev_data, 0); +err_free_dev: + free_pages_exact(gzvm_dev, 0); + return ret; +} + +static int gzvm_vm_ioctl_enable_cap(struct gzvm *gzvm, + struct gzvm_enable_cap *cap, + void __user *argp) +{ + return gzvm_vm_ioctl_arch_enable_cap(gzvm, cap, argp); +} + +/* gzvm_vm_ioctl() - Ioctl handler of VM FD */ +static long gzvm_vm_ioctl(struct file *filp, unsigned int ioctl, + unsigned long arg) +{ + long ret = -ENOTTY; + void __user *argp = (void __user *)arg; + struct gzvm *gzvm = filp->private_data; + + switch (ioctl) { + case GZVM_CHECK_EXTENSION: { + ret = gzvm_dev_ioctl_check_extension(gzvm, arg); + break; + } + case GZVM_CREATE_VCPU: { + ret = gzvm_vm_ioctl_create_vcpu(gzvm, arg); + break; + } + case GZVM_SET_USER_MEMORY_REGION: { + struct gzvm_userspace_memory_region userspace_mem; + + if (copy_from_user(&userspace_mem, argp, sizeof(userspace_mem))) { + ret = -EFAULT; + goto out; + } + ret = gzvm_vm_ioctl_set_memory_region(gzvm, &userspace_mem); + break; + } + case GZVM_IRQ_LINE: { + struct gzvm_irq_level irq_event; + + if (copy_from_user(&irq_event, argp, sizeof(irq_event))) { + ret = -EFAULT; + goto out; + } + ret = gzvm_vm_ioctl_irq_line(gzvm, &irq_event); + break; + } + case GZVM_CREATE_DEVICE: { + ret = gzvm_vm_ioctl_create_device(gzvm, argp); + break; + } + case GZVM_IRQFD: { + struct gzvm_irqfd data; + + if (copy_from_user(&data, argp, sizeof(data))) { + ret = -EFAULT; + goto out; + } + ret = gzvm_irqfd(gzvm, &data); + break; + } + case GZVM_IOEVENTFD: { + struct gzvm_ioeventfd data; + + if (copy_from_user(&data, argp, sizeof(data))) { + ret = -EFAULT; + goto out; + } + ret = gzvm_ioeventfd(gzvm, &data); + break; + } + case GZVM_ENABLE_CAP: { + struct gzvm_enable_cap cap; + + if (copy_from_user(&cap, argp, sizeof(cap))) { + ret = -EFAULT; + goto out; + } + ret = gzvm_vm_ioctl_enable_cap(gzvm, &cap, argp); + break; + } + case GZVM_SET_DTB_CONFIG: { + struct gzvm_dtb_config cfg; + + if (copy_from_user(&cfg, argp, sizeof(cfg))) { + ret = -EFAULT; + goto out; + } + ret = gzvm_arch_set_dtb_config(gzvm, &cfg); + break; + } + default: + ret = -ENOTTY; + } +out: + return ret; +} + +static void gzvm_destroy_vm(struct gzvm *gzvm) +{ + pr_debug("VM-%u is going to be destroyed\n", gzvm->vm_id); + + mutex_lock(&gzvm->lock); + + gzvm_vm_irqfd_release(gzvm); + gzvm_destroy_vcpus(gzvm); + gzvm_arch_destroy_vm(gzvm->vm_id); + + mutex_lock(&gzvm_list_lock); + list_del(&gzvm->vm_list); + mutex_unlock(&gzvm_list_lock); + + mutex_unlock(&gzvm->lock); + + kfree(gzvm); +} + +static int gzvm_vm_release(struct inode *inode, struct file *filp) +{ + struct gzvm *gzvm = filp->private_data; + + gzvm_destroy_vm(gzvm); + return 0; +} + +static const struct file_operations gzvm_vm_fops = { + .release = gzvm_vm_release, + .unlocked_ioctl = gzvm_vm_ioctl, + .llseek = noop_llseek, +}; + +static struct gzvm *gzvm_create_vm(unsigned long vm_type) +{ + int ret; + struct gzvm *gzvm; + + gzvm = kzalloc(sizeof(*gzvm), GFP_KERNEL); + if (!gzvm) + return ERR_PTR(-ENOMEM); + + ret = gzvm_arch_create_vm(vm_type); + if (ret < 0) { + kfree(gzvm); + return ERR_PTR(ret); + } + + gzvm->vm_id = ret; + gzvm->mm = current->mm; + mutex_init(&gzvm->lock); + + ret = gzvm_vm_irqfd_init(gzvm); + if (ret) { + pr_err("Failed to initialize irqfd\n"); + kfree(gzvm); + return ERR_PTR(ret); + } + + ret = gzvm_init_ioeventfd(gzvm); + if (ret) { + pr_err("Failed to initialize ioeventfd\n"); + kfree(gzvm); + return ERR_PTR(ret); + } + + mutex_lock(&gzvm_list_lock); + list_add(&gzvm->vm_list, &gzvm_list); + mutex_unlock(&gzvm_list_lock); + + pr_debug("VM-%u is created\n", gzvm->vm_id); + + return gzvm; +} + +/** + * gzvm_dev_ioctl_create_vm - Create vm fd + * @vm_type: VM type. Only supports Linux VM now. + * + * Return: fd of vm, negative if error + */ +int gzvm_dev_ioctl_create_vm(unsigned long vm_type) +{ + struct gzvm *gzvm; + + gzvm = gzvm_create_vm(vm_type); + if (IS_ERR(gzvm)) + return PTR_ERR(gzvm); + + return anon_inode_getfd("gzvm-vm", &gzvm_vm_fops, gzvm, + O_RDWR | O_CLOEXEC); +} + +void gzvm_destroy_all_vms(void) +{ + struct gzvm *gzvm, *tmp; + + mutex_lock(&gzvm_list_lock); + if (list_empty(&gzvm_list)) + goto out; + + list_for_each_entry_safe(gzvm, tmp, &gzvm_list, vm_list) + gzvm_destroy_vm(gzvm); + +out: + mutex_unlock(&gzvm_list_lock); +} diff --git a/drivers/virt/gunyah/rsc_mgr.c b/drivers/virt/gunyah/rsc_mgr.c index ab29e7687e3b..dd6fe39f652d 100644 --- a/drivers/virt/gunyah/rsc_mgr.c +++ b/drivers/virt/gunyah/rsc_mgr.c @@ -300,7 +300,7 @@ struct gh_resource *gh_rm_alloc_resource(struct gh_rm *rm, struct gh_rm_hyp_reso ghrsc->capid = le64_to_cpu(hyp_resource->cap_id); ghrsc->irq = IRQ_NOTCONNECTED; ghrsc->rm_label = le32_to_cpu(hyp_resource->resource_label); - if (hyp_resource->virq) { + if (hyp_resource->virq && hyp_resource->virq != GH_RM_RESOURCE_NO_VIRQ) { struct gh_irq_chip_data irq_data = { .gh_virq = le32_to_cpu(hyp_resource->virq), }; diff --git a/fs/exfat/dir.c b/fs/exfat/dir.c index 15c4f901be36..33100904c951 100644 --- a/fs/exfat/dir.c +++ b/fs/exfat/dir.c @@ -34,6 +34,7 @@ static void exfat_get_uniname_from_ext_entry(struct super_block *sb, { int i; struct exfat_entry_set_cache *es; + unsigned int uni_len = 0, len; es = exfat_get_dentry_set(sb, p_dir, entry, ES_ALL_ENTRIES); if (!es) @@ -52,7 +53,10 @@ static void exfat_get_uniname_from_ext_entry(struct super_block *sb, if (exfat_get_entry_type(ep) != TYPE_EXTEND) break; - exfat_extract_uni_name(ep, uniname); + len = exfat_extract_uni_name(ep, uniname); + uni_len += len; + if (len != EXFAT_FILE_NAME_LEN || uni_len >= MAX_NAME_LENGTH) + break; uniname += EXFAT_FILE_NAME_LEN; } @@ -1027,7 +1031,8 @@ rewind: if (entry_type == TYPE_EXTEND) { unsigned short entry_uniname[16], unichar; - if (step != DIRENT_STEP_NAME) { + if (step != DIRENT_STEP_NAME || + name_len >= MAX_NAME_LENGTH) { step = DIRENT_STEP_FILE; continue; } diff --git a/fs/locks.c b/fs/locks.c index 240b9309ed6d..1047ab2b15e9 100644 --- a/fs/locks.c +++ b/fs/locks.c @@ -1300,6 +1300,7 @@ retry: out: spin_unlock(&ctx->flc_lock); percpu_up_read(&file_rwsem); + trace_posix_lock_inode(inode, request, error); /* * Free any unused locks. */ @@ -1308,7 +1309,6 @@ retry: if (new_fl2) locks_free_lock(new_fl2); locks_dispose_list(&dispose); - trace_posix_lock_inode(inode, request, error); return error; } diff --git a/fs/pstore/ram_core.c b/fs/pstore/ram_core.c index 8bf09886e7e6..fea6e42b2dd2 100644 --- a/fs/pstore/ram_core.c +++ b/fs/pstore/ram_core.c @@ -518,7 +518,7 @@ static int persistent_ram_post_init(struct persistent_ram_zone *prz, u32 sig, sig ^= PERSISTENT_RAM_SIG; if (prz->buffer->sig == sig) { - if (buffer_size(prz) == 0) { + if (buffer_size(prz) == 0 && buffer_start(prz) == 0) { pr_debug("found existing empty buffer\n"); return 0; } diff --git a/include/linux/cpuidle.h b/include/linux/cpuidle.h index 1035cb423fc1..c223ca3eebaa 100644 --- a/include/linux/cpuidle.h +++ b/include/linux/cpuidle.h @@ -314,4 +314,12 @@ extern s64 cpuidle_governor_latency_req(unsigned int cpu); #define CPU_PM_CPU_IDLE_ENTER_RETENTION_PARAM(low_level_idle_enter, idx, state) \ __CPU_PM_CPU_IDLE_ENTER(low_level_idle_enter, idx, state, 1) +#ifdef CONFIG_CPU_IDLE_GOV_TEO +unsigned long teo_cpu_get_util_threshold(int cpu); +void teo_cpu_set_util_threshold(int cpu, unsigned long util); +#else +static inline unsigned long teo_cpu_get_util_threshold(int cpu) {return -1;} +static inline void teo_cpu_set_util_threshold(int cpu, unsigned long util) {} +#endif + #endif /* _LINUX_CPUIDLE_H */ diff --git a/include/linux/gunyah_rsc_mgr.h b/include/linux/gunyah_rsc_mgr.h index bc55be6d8d33..0d9ec6d5162d 100644 --- a/include/linux/gunyah_rsc_mgr.h +++ b/include/linux/gunyah_rsc_mgr.h @@ -139,6 +139,7 @@ struct gh_rm_hyp_resource { __le32 resource_label; __le64 cap_id; __le32 virq_handle; +#define GH_RM_RESOURCE_NO_VIRQ 0xFFFFFFFF __le32 virq; __le64 base; __le64 size; diff --git a/include/linux/gzvm_drv.h b/include/linux/gzvm_drv.h new file mode 100644 index 000000000000..d76c2adc3c22 --- /dev/null +++ b/include/linux/gzvm_drv.h @@ -0,0 +1,158 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* + * Copyright (c) 2023 MediaTek Inc. + */ + +#ifndef __GZVM_DRV_H__ +#define __GZVM_DRV_H__ + +#include +#include +#include +#include +#include +#include + +#define GZVM_VCPU_MMAP_SIZE PAGE_SIZE +#define INVALID_VM_ID 0xffff + +/* + * These are the efinitions of APIs between GenieZone hypervisor and driver, + * there's no need to be visible to uapi. Furthermore, We need GenieZone + * specific error code in order to map to Linux errno + */ +#define NO_ERROR (0) +#define ERR_NO_MEMORY (-5) +#define ERR_NOT_SUPPORTED (-24) +#define ERR_NOT_IMPLEMENTED (-27) +#define ERR_FAULT (-40) +#define GZVM_USERSPACE_IRQ_SOURCE_ID 0 +#define GZVM_IRQFD_RESAMPLE_IRQ_SOURCE_ID 1 + +/* + * The following data structures are for data transferring between driver and + * hypervisor, and they're aligned with hypervisor definitions + */ +#define GZVM_MAX_VCPUS 8 +#define GZVM_MAX_MEM_REGION 10 + +#define GZVM_VCPU_RUN_MAP_SIZE (PAGE_SIZE * 2) + +/* struct mem_region_addr_range - Identical to ffa memory constituent */ +struct mem_region_addr_range { + /* the base IPA of the constituent memory region, aligned to 4 kiB */ + __u64 address; + /* the number of 4 kiB pages in the constituent memory region. */ + __u32 pg_cnt; + __u32 reserved; +}; + +struct gzvm_memory_region_ranges { + __u32 slot; + __u32 constituent_cnt; + __u64 total_pages; + __u64 gpa; + struct mem_region_addr_range constituents[]; +}; + +/* struct gzvm_memslot - VM's memory slot descriptor */ +struct gzvm_memslot { + u64 base_gfn; /* begin of guest page frame */ + unsigned long npages; /* number of pages this slot covers */ + unsigned long userspace_addr; /* corresponding userspace va */ + struct vm_area_struct *vma; /* vma related to this userspace addr */ + u32 flags; + u32 slot_id; +}; + +struct gzvm_vcpu { + struct gzvm *gzvm; + int vcpuid; + /* lock of vcpu*/ + struct mutex lock; + struct gzvm_vcpu_run *run; + struct gzvm_vcpu_hwstate *hwstate; +}; + +struct gzvm { + struct gzvm_vcpu *vcpus[GZVM_MAX_VCPUS]; + /* userspace tied to this vm */ + struct mm_struct *mm; + struct gzvm_memslot memslot[GZVM_MAX_MEM_REGION]; + /* lock for list_add*/ + struct mutex lock; + + struct { + /* lock for irqfds list operation */ + spinlock_t lock; + struct list_head items; + struct list_head resampler_list; + /* lock for irqfds resampler */ + struct mutex resampler_lock; + } irqfds; + + struct list_head ioevents; + + struct list_head vm_list; + u16 vm_id; + + struct hlist_head irq_ack_notifier_list; + struct srcu_struct irq_srcu; + /* lock for irq injection */ + struct mutex irq_lock; +}; + +long gzvm_dev_ioctl_check_extension(struct gzvm *gzvm, unsigned long args); +int gzvm_dev_ioctl_create_vm(unsigned long vm_type); + +int gzvm_err_to_errno(unsigned long err); + +void gzvm_destroy_all_vms(void); + +void gzvm_destroy_vcpus(struct gzvm *gzvm); + +/* arch-dependant functions */ +int gzvm_arch_probe(void); +int gzvm_arch_set_memregion(u16 vm_id, size_t buf_size, + phys_addr_t region); +int gzvm_arch_check_extension(struct gzvm *gzvm, __u64 cap, void __user *argp); +int gzvm_arch_create_vm(unsigned long vm_type); +int gzvm_arch_destroy_vm(u16 vm_id); +int gzvm_vm_ioctl_arch_enable_cap(struct gzvm *gzvm, + struct gzvm_enable_cap *cap, + void __user *argp); + +u64 gzvm_hva_to_pa_arch(u64 hva); +int gzvm_vm_ioctl_create_vcpu(struct gzvm *gzvm, u32 cpuid); +int gzvm_arch_vcpu_update_one_reg(struct gzvm_vcpu *vcpu, __u64 reg_id, + bool is_write, __u64 *data); +int gzvm_arch_create_vcpu(u16 vm_id, int vcpuid, void *run); +int gzvm_arch_vcpu_run(struct gzvm_vcpu *vcpu, __u64 *exit_reason); +int gzvm_arch_destroy_vcpu(u16 vm_id, int vcpuid); +int gzvm_arch_inform_exit(u16 vm_id); + +int gzvm_arch_create_device(u16 vm_id, struct gzvm_create_device *gzvm_dev); +int gzvm_arch_inject_irq(struct gzvm *gzvm, unsigned int vcpu_idx, + u32 irq_type, u32 irq, bool level); + +void gzvm_notify_acked_irq(struct gzvm *gzvm, unsigned int gsi); +int gzvm_irqfd(struct gzvm *gzvm, struct gzvm_irqfd *args); +int gzvm_drv_irqfd_init(void); +void gzvm_drv_irqfd_exit(void); +int gzvm_vm_irqfd_init(struct gzvm *gzvm); +void gzvm_vm_irqfd_release(struct gzvm *gzvm); + +int gzvm_arch_memregion_purpose(struct gzvm *gzvm, + struct gzvm_userspace_memory_region *mem); +int gzvm_arch_set_dtb_config(struct gzvm *gzvm, struct gzvm_dtb_config *args); + +int gzvm_init_ioeventfd(struct gzvm *gzvm); +int gzvm_ioeventfd(struct gzvm *gzvm, struct gzvm_ioeventfd *args); +bool gzvm_ioevent_write(struct gzvm_vcpu *vcpu, __u64 addr, int len, + const void *val); +void eventfd_ctx_do_read(struct eventfd_ctx *ctx, __u64 *cnt); +struct vm_area_struct *vma_lookup(struct mm_struct *mm, unsigned long addr); +void add_wait_queue_priority(struct wait_queue_head *wq_head, + struct wait_queue_entry *wq_entry); + +#endif /* __GZVM_DRV_H__ */ diff --git a/include/linux/oom.h b/include/linux/oom.h index 7d0c9c48a0c5..f008e23d9b41 100644 --- a/include/linux/oom.h +++ b/include/linux/oom.h @@ -112,4 +112,6 @@ extern void oom_killer_enable(void); extern struct task_struct *find_lock_task_mm(struct task_struct *p); +/* call for adding killed process to reaper. */ +extern void add_to_oom_reaper(struct task_struct *p); #endif /* _INCLUDE_LINUX_OOM_H */ diff --git a/include/linux/sched.h b/include/linux/sched.h index 19a43aa5a021..cf3d130319cb 100644 --- a/include/linux/sched.h +++ b/include/linux/sched.h @@ -758,10 +758,8 @@ struct task_struct { #endif unsigned int __state; -#ifdef CONFIG_PREEMPT_RT /* saved state for "spinlock sleepers" */ - unsigned int saved_state; -#endif + /* moved to ANDROID_KABI_USE(1, unsigned int saved_state) */ /* * This begins the randomizable portion of task_struct. Only @@ -1548,7 +1546,7 @@ struct task_struct { */ union rv_task_monitor rv[RV_PER_TASK_MONITORS]; #endif - ANDROID_KABI_RESERVE(1); + ANDROID_KABI_USE(1, unsigned int saved_state); ANDROID_KABI_RESERVE(2); ANDROID_KABI_RESERVE(3); ANDROID_KABI_RESERVE(4); @@ -2029,15 +2027,12 @@ static __always_inline void scheduler_ipi(void) */ preempt_fold_need_resched(); } -extern unsigned long wait_task_inactive(struct task_struct *, unsigned int match_state); #else static inline void scheduler_ipi(void) { } -static inline unsigned long wait_task_inactive(struct task_struct *p, unsigned int match_state) -{ - return 1; -} #endif +extern unsigned long wait_task_inactive(struct task_struct *, unsigned int match_state); + /* * Set thread flags in other task's structures. * See asm/thread_info.h for TIF_xxxx flags available: diff --git a/include/trace/hooks/dtask.h b/include/trace/hooks/dtask.h index f5cdfe9b04f9..2d5b13dce01f 100644 --- a/include/trace/hooks/dtask.h +++ b/include/trace/hooks/dtask.h @@ -105,6 +105,19 @@ DECLARE_HOOK(android_vh_task_blocks_on_rtmutex, DECLARE_HOOK(android_vh_rtmutex_waiter_prio, TP_PROTO(struct task_struct *task, int *waiter_prio), TP_ARGS(task, waiter_prio)); + +DECLARE_HOOK(android_vh_exit_signal_whether_wake, + TP_PROTO(struct task_struct *p, bool *wake), + TP_ARGS(p, wake)); + +DECLARE_HOOK(android_vh_exit_check, + TP_PROTO(struct task_struct *p), + TP_ARGS(p)); + +DECLARE_HOOK(android_vh_freeze_whether_wake, + TP_PROTO(struct task_struct *t, bool *wake), + TP_ARGS(t, wake)); + #endif /* _TRACE_HOOK_DTASK_H */ /* This part must be outside protection */ diff --git a/include/trace/hooks/sched.h b/include/trace/hooks/sched.h index 4cc3f0cded7b..594d6bd6c38b 100644 --- a/include/trace/hooks/sched.h +++ b/include/trace/hooks/sched.h @@ -321,6 +321,11 @@ DECLARE_HOOK(android_vh_setscheduler_uclamp, TP_PROTO(struct task_struct *tsk, int clamp_id, unsigned int value), TP_ARGS(tsk, clamp_id, value)); +DECLARE_HOOK(android_vh_uclamp_validate, + TP_PROTO(struct task_struct *p, const struct sched_attr *attr, + bool user, int *ret, bool *done), + TP_ARGS(p, attr, user, ret, done)); + DECLARE_HOOK(android_vh_update_topology_flags_workfn, TP_PROTO(void *unused), TP_ARGS(unused)); @@ -389,7 +394,37 @@ DECLARE_HOOK(android_vh_mmput, TP_PROTO(struct mm_struct *mm), TP_ARGS(mm)); -/* macro versions of hooks are no longer required */ +struct sched_attr; +DECLARE_HOOK(android_vh_set_sugov_sched_attr, + TP_PROTO(struct sched_attr *attr), + TP_ARGS(attr)); +DECLARE_RESTRICTED_HOOK(android_rvh_set_iowait, + TP_PROTO(struct task_struct *p, struct rq *rq, int *should_iowait_boost), + TP_ARGS(p, rq, should_iowait_boost), 1); + +DECLARE_RESTRICTED_HOOK(android_rvh_attach_entity_load_avg, + TP_PROTO(struct cfs_rq *cfs_rq, struct sched_entity *se), + TP_ARGS(cfs_rq, se), 1); + +DECLARE_RESTRICTED_HOOK(android_rvh_detach_entity_load_avg, + TP_PROTO(struct cfs_rq *cfs_rq, struct sched_entity *se), + TP_ARGS(cfs_rq, se), 1); + +DECLARE_RESTRICTED_HOOK(android_rvh_update_load_avg, + TP_PROTO(u64 now, struct cfs_rq *cfs_rq, struct sched_entity *se), + TP_ARGS(now, cfs_rq, se), 1); + +DECLARE_RESTRICTED_HOOK(android_rvh_remove_entity_load_avg, + TP_PROTO(struct cfs_rq *cfs_rq, struct sched_entity *se), + TP_ARGS(cfs_rq, se), 1); + +DECLARE_RESTRICTED_HOOK(android_rvh_update_blocked_fair, + TP_PROTO(struct rq *rq), + TP_ARGS(rq), 1); + +DECLARE_RESTRICTED_HOOK(android_rvh_update_rt_rq_load_avg, + TP_PROTO(u64 now, struct rq *rq, struct task_struct *tsk, int running), + TP_ARGS(now, rq, tsk, running), 1); #endif /* _TRACE_HOOK_SCHED_H */ /* This part must be outside protection */ diff --git a/include/trace/hooks/signal.h b/include/trace/hooks/signal.h index 4e61006cb145..c845aec359d7 100644 --- a/include/trace/hooks/signal.h +++ b/include/trace/hooks/signal.h @@ -14,6 +14,9 @@ DECLARE_HOOK(android_vh_do_send_sig_info, DECLARE_HOOK(android_vh_exit_signal, TP_PROTO(struct task_struct *task), TP_ARGS(task)); +DECLARE_HOOK(android_vh_killed_process, + TP_PROTO(struct task_struct *killer, struct task_struct *dst, bool *reap), + TP_ARGS(killer, dst, reap)); #endif /* _TRACE_HOOK_SIGNAL_H */ /* This part must be outside protection */ #include diff --git a/include/trace/hooks/topology.h b/include/trace/hooks/topology.h index d2673d4379c1..56a9fd22f8c6 100644 --- a/include/trace/hooks/topology.h +++ b/include/trace/hooks/topology.h @@ -24,6 +24,10 @@ DECLARE_HOOK(android_vh_arch_set_freq_scale, #endif +DECLARE_HOOK(android_vh_use_amu_fie, + TP_PROTO(bool *use_amu_fie), + TP_ARGS(use_amu_fie)); + #endif /* _TRACE_HOOK_TOPOLOGY_H */ /* This part must be outside protection */ #include diff --git a/include/trace/hooks/vmscan.h b/include/trace/hooks/vmscan.h index 50a30eeae3dd..625d30d75757 100644 --- a/include/trace/hooks/vmscan.h +++ b/include/trace/hooks/vmscan.h @@ -43,6 +43,9 @@ enum scan_balance; DECLARE_HOOK(android_vh_tune_scan_type, TP_PROTO(enum scan_balance *scan_type), TP_ARGS(scan_type)); +DECLARE_HOOK(android_vh_tune_swappiness, + TP_PROTO(int *swappiness), + TP_ARGS(swappiness)); DECLARE_HOOK(android_vh_scan_abort_check_wmarks, TP_PROTO(bool *check_wmarks), TP_ARGS(check_wmarks)); diff --git a/include/uapi/asm-generic/Kbuild b/include/uapi/asm-generic/Kbuild index ebb180aac74e..5af115a3c1a8 100644 --- a/include/uapi/asm-generic/Kbuild +++ b/include/uapi/asm-generic/Kbuild @@ -34,3 +34,4 @@ mandatory-y += termbits.h mandatory-y += termios.h mandatory-y += types.h mandatory-y += unistd.h +mandatory-y += gzvm_arch.h diff --git a/include/uapi/asm-generic/gzvm_arch.h b/include/uapi/asm-generic/gzvm_arch.h new file mode 100644 index 000000000000..c4cc12716c91 --- /dev/null +++ b/include/uapi/asm-generic/gzvm_arch.h @@ -0,0 +1,10 @@ +/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ +/* + * Copyright (c) 2023 MediaTek Inc. + */ + +#ifndef __ASM_GENERIC_GZVM_ARCH_H +#define __ASM_GENERIC_GZVM_ARCH_H +/* geniezone only supports aarch64 platform for now */ + +#endif /* __ASM_GENERIC_GZVM_ARCH_H */ diff --git a/include/uapi/linux/android_fuse.h b/include/uapi/linux/android_fuse.h index 221e30ea7f01..58f3d171952d 100644 --- a/include/uapi/linux/android_fuse.h +++ b/include/uapi/linux/android_fuse.h @@ -56,15 +56,29 @@ struct fuse_in_postfilter_header { /** One input argument of a request */ struct fuse_bpf_in_arg { uint32_t size; - const void *value; - const void *end_offset; + uint32_t padding; + union { + const void *value; + uint64_t padding2; + }; + union { + const void *end_offset; + uint64_t padding3; + }; }; /** One output argument of a request */ struct fuse_bpf_arg { uint32_t size; - void *value; - void *end_offset; + uint32_t padding; + union { + void *value; + uint64_t padding2; + }; + union { + void *end_offset; + uint64_t padding3; + }; }; #define FUSE_MAX_IN_ARGS 5 @@ -80,6 +94,7 @@ struct fuse_bpf_args { uint32_t in_numargs; uint32_t out_numargs; uint32_t flags; + uint32_t padding; struct fuse_bpf_in_arg in_args[FUSE_MAX_IN_ARGS]; struct fuse_bpf_arg out_args[FUSE_MAX_OUT_ARGS]; }; diff --git a/include/uapi/linux/gzvm.h b/include/uapi/linux/gzvm.h new file mode 100644 index 000000000000..d37be00fbeea --- /dev/null +++ b/include/uapi/linux/gzvm.h @@ -0,0 +1,343 @@ +/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ +/* + * Copyright (c) 2023 MediaTek Inc. + */ + +/** + * DOC: UAPI of GenieZone Hypervisor + * + * This file declares common data structure shared among user space, + * kernel space, and GenieZone hypervisor. + */ +#ifndef __GZVM_H__ +#define __GZVM_H__ + +#include +#include +#include + +#include + +/* GZVM ioctls */ +#define GZVM_IOC_MAGIC 0x92 /* gz */ + +/* ioctls for /dev/gzvm fds */ +#define GZVM_CREATE_VM _IO(GZVM_IOC_MAGIC, 0x01) /* Returns a Geniezone VM fd */ + +/* + * Check if the given capability is supported or not. + * The argument is capability. Ex. GZVM_CAP_ARM_PROTECTED_VM or GZVM_CAP_ARM_VM_IPA_SIZE + * return is 0 (supported, no error) + * return is -EOPNOTSUPP (unsupported) + * return is -EFAULT (failed to get the argument from userspace) + */ +#define GZVM_CHECK_EXTENSION _IO(GZVM_IOC_MAGIC, 0x03) + +/* ioctls for VM fds */ +/* for GZVM_SET_MEMORY_REGION */ +struct gzvm_memory_region { + __u32 slot; + __u32 flags; + __u64 guest_phys_addr; + __u64 memory_size; /* bytes */ +}; + +#define GZVM_SET_MEMORY_REGION _IOW(GZVM_IOC_MAGIC, 0x40, \ + struct gzvm_memory_region) +/* + * GZVM_CREATE_VCPU receives as a parameter the vcpu slot, + * and returns a vcpu fd. + */ +#define GZVM_CREATE_VCPU _IO(GZVM_IOC_MAGIC, 0x41) + +/* for GZVM_SET_USER_MEMORY_REGION */ +struct gzvm_userspace_memory_region { + __u32 slot; + __u32 flags; + __u64 guest_phys_addr; + /* bytes */ + __u64 memory_size; + /* start of the userspace allocated memory */ + __u64 userspace_addr; +}; + +#define GZVM_SET_USER_MEMORY_REGION _IOW(GZVM_IOC_MAGIC, 0x46, \ + struct gzvm_userspace_memory_region) + +/* for GZVM_IRQ_LINE, irq field index values */ +#define GZVM_IRQ_VCPU_MASK 0xff +#define GZVM_IRQ_LINE_TYPE GENMASK(27, 24) +#define GZVM_IRQ_LINE_VCPU GENMASK(23, 16) +#define GZVM_IRQ_LINE_VCPU2 GENMASK(31, 28) +#define GZVM_IRQ_LINE_NUM GENMASK(15, 0) + +/* irq_type field */ +#define GZVM_IRQ_TYPE_CPU 0 +#define GZVM_IRQ_TYPE_SPI 1 +#define GZVM_IRQ_TYPE_PPI 2 + +/* out-of-kernel GIC cpu interrupt injection irq_number field */ +#define GZVM_IRQ_CPU_IRQ 0 +#define GZVM_IRQ_CPU_FIQ 1 + +struct gzvm_irq_level { + union { + __u32 irq; + __s32 status; + }; + __u32 level; +}; + +#define GZVM_IRQ_LINE _IOW(GZVM_IOC_MAGIC, 0x61, \ + struct gzvm_irq_level) + +enum gzvm_device_type { + GZVM_DEV_TYPE_ARM_VGIC_V3_DIST = 0, + GZVM_DEV_TYPE_ARM_VGIC_V3_REDIST = 1, + GZVM_DEV_TYPE_MAX, +}; + +/** + * struct gzvm_create_device: For GZVM_CREATE_DEVICE. + * @dev_type: Device type. + * @id: Device id. + * @flags: Bypass to hypervisor to handle them and these are flags of virtual + * devices. + * @dev_addr: Device ipa address in VM's view. + * @dev_reg_size: Device register range size. + * @attr_addr: If user -> kernel, this is user virtual address of device + * specific attributes (if needed). If kernel->hypervisor, + * this is ipa. + * @attr_size: This attr_size is the buffer size in bytes of each attribute + * needed from various devices. The attribute here refers to the + * additional data passed from VMM(e.g. Crosvm) to GenieZone + * hypervisor when virtual devices were to be created. Thus, + * we need attr_addr and attr_size in the gzvm_create_device + * structure to keep track of the attribute mentioned. + * + * Store information needed to create device. + */ +struct gzvm_create_device { + __u32 dev_type; + __u32 id; + __u64 flags; + __u64 dev_addr; + __u64 dev_reg_size; + __u64 attr_addr; + __u64 attr_size; +}; + +#define GZVM_CREATE_DEVICE _IOWR(GZVM_IOC_MAGIC, 0xe0, \ + struct gzvm_create_device) + +/* + * ioctls for vcpu fds + */ +#define GZVM_RUN _IO(GZVM_IOC_MAGIC, 0x80) + +/* VM exit reason */ +enum { + GZVM_EXIT_UNKNOWN = 0x92920000, + GZVM_EXIT_MMIO = 0x92920001, + GZVM_EXIT_HYPERCALL = 0x92920002, + GZVM_EXIT_IRQ = 0x92920003, + GZVM_EXIT_EXCEPTION = 0x92920004, + GZVM_EXIT_DEBUG = 0x92920005, + GZVM_EXIT_FAIL_ENTRY = 0x92920006, + GZVM_EXIT_INTERNAL_ERROR = 0x92920007, + GZVM_EXIT_SYSTEM_EVENT = 0x92920008, + GZVM_EXIT_SHUTDOWN = 0x92920009, + GZVM_EXIT_GZ = 0x9292000a, +}; + +/** + * struct gzvm_vcpu_run: Same purpose as kvm_run, this struct is + * shared between userspace, kernel and + * GenieZone hypervisor + * @exit_reason: The reason why gzvm_vcpu_run has stopped running the vCPU + * @immediate_exit: Polled when the vcpu is scheduled. + * If set, immediately returns -EINTR + * @padding1: Reserved for future-proof and must be zero filled + * @mmio: The nested struct in anonymous union. Handle mmio in host side + * @phys_addr: The address guest tries to access + * @data: The value to be written (is_write is 1) or + * be filled by user for reads (is_write is 0) + * @size: The size of written data. + * Only the first `size` bytes of `data` are handled + * @reg_nr: The register number where the data is stored + * @is_write: 1 for VM to perform a write or 0 for VM to perform a read + * @fail_entry: The nested struct in anonymous union. + * Handle invalid entry address at the first run + * @hardware_entry_failure_reason: The reason codes about hardware entry failure + * @cpu: The current processor number via smp_processor_id() + * @exception: The nested struct in anonymous union. + * Handle exception occurred in VM + * @exception: Which exception vector + * @error_code: Exception error codes + * @hypercall: The nested struct in anonymous union. + * Some hypercalls issued from VM must be handled + * @args: The hypercall's arguments + * @internal: The nested struct in anonymous union. The errors from hypervisor + * @suberror: The errors codes about GZVM_EXIT_INTERNAL_ERROR + * @ndata: The number of elements used in data[] + * @data: Keep the detailed information about GZVM_EXIT_INTERNAL_ERROR + * @system_event: The nested struct in anonymous union. + * VM's PSCI must be handled by host + * @type: System event type. + * Ex. GZVM_SYSTEM_EVENT_SHUTDOWN or GZVM_SYSTEM_EVENT_RESET...etc. + * @ndata: The number of elements used in data[] + * @data: Keep the detailed information about GZVM_EXIT_SYSTEM_EVENT + * @padding: Fix it to a reasonable size future-proof for keeping the same + * struct size when adding new variables in the union is needed + * + * Keep identical layout between the 3 modules + */ +struct gzvm_vcpu_run { + /* to userspace */ + __u32 exit_reason; + __u8 immediate_exit; + __u8 padding1[3]; + /* union structure of collection of guest exit reason */ + union { + /* GZVM_EXIT_MMIO */ + struct { + /* from FAR_EL2 */ + __u64 phys_addr; + __u8 data[8]; + /* from ESR_EL2 as */ + __u64 size; + /* from ESR_EL2 */ + __u32 reg_nr; + /* from ESR_EL2 */ + __u8 is_write; + } mmio; + /* GZVM_EXIT_FAIL_ENTRY */ + struct { + __u64 hardware_entry_failure_reason; + __u32 cpu; + } fail_entry; + /* GZVM_EXIT_EXCEPTION */ + struct { + __u32 exception; + __u32 error_code; + } exception; + /* GZVM_EXIT_HYPERCALL */ + struct { + __u64 args[8]; /* in-out */ + } hypercall; + /* GZVM_EXIT_INTERNAL_ERROR */ + struct { + __u32 suberror; + __u32 ndata; + __u64 data[16]; + } internal; + /* GZVM_EXIT_SYSTEM_EVENT */ + struct { +#define GZVM_SYSTEM_EVENT_SHUTDOWN 1 +#define GZVM_SYSTEM_EVENT_RESET 2 +#define GZVM_SYSTEM_EVENT_CRASH 3 +#define GZVM_SYSTEM_EVENT_WAKEUP 4 +#define GZVM_SYSTEM_EVENT_SUSPEND 5 +#define GZVM_SYSTEM_EVENT_SEV_TERM 6 +#define GZVM_SYSTEM_EVENT_S2IDLE 7 + __u32 type; + __u32 ndata; + __u64 data[16]; + } system_event; + char padding[256]; + }; +}; + +/* for GZVM_ENABLE_CAP */ +struct gzvm_enable_cap { + /* in */ + __u64 cap; + /** + * we have total 5 (8 - 3) registers can be used for + * additional args + */ + __u64 args[5]; +}; + +#define GZVM_ENABLE_CAP _IOW(GZVM_IOC_MAGIC, 0xa3, \ + struct gzvm_enable_cap) + +/* for GZVM_GET/SET_ONE_REG */ +struct gzvm_one_reg { + __u64 id; + __u64 addr; +}; + +#define GZVM_GET_ONE_REG _IOW(GZVM_IOC_MAGIC, 0xab, \ + struct gzvm_one_reg) +#define GZVM_SET_ONE_REG _IOW(GZVM_IOC_MAGIC, 0xac, \ + struct gzvm_one_reg) + +#define GZVM_REG_GENERIC 0x0000000000000000ULL + +#define GZVM_IRQFD_FLAG_DEASSIGN BIT(0) +/* + * GZVM_IRQFD_FLAG_RESAMPLE indicates resamplefd is valid and specifies + * the irqfd to operate in resampling mode for level triggered interrupt + * emulation. + */ +#define GZVM_IRQFD_FLAG_RESAMPLE BIT(1) + +/** + * struct gzvm_irqfd: gzvm irqfd descriptor + * @fd: File descriptor. + * @gsi: Used for level IRQ fast-path. + * @flags: FLAG_DEASSIGN or FLAG_RESAMPLE. + * @resamplefd: The file descriptor of the resampler. + * @pad: Reserved for future-proof. + */ +struct gzvm_irqfd { + __u32 fd; + __u32 gsi; + __u32 flags; + __u32 resamplefd; + __u8 pad[16]; +}; + +#define GZVM_IRQFD _IOW(GZVM_IOC_MAGIC, 0x76, struct gzvm_irqfd) + +enum { + gzvm_ioeventfd_flag_nr_datamatch = 0, + gzvm_ioeventfd_flag_nr_pio = 1, + gzvm_ioeventfd_flag_nr_deassign = 2, + gzvm_ioeventfd_flag_nr_max, +}; + +#define GZVM_IOEVENTFD_FLAG_DATAMATCH (1 << gzvm_ioeventfd_flag_nr_datamatch) +#define GZVM_IOEVENTFD_FLAG_PIO (1 << gzvm_ioeventfd_flag_nr_pio) +#define GZVM_IOEVENTFD_FLAG_DEASSIGN (1 << gzvm_ioeventfd_flag_nr_deassign) +#define GZVM_IOEVENTFD_VALID_FLAG_MASK ((1 << gzvm_ioeventfd_flag_nr_max) - 1) + +struct gzvm_ioeventfd { + __u64 datamatch; + /* private: legal pio/mmio address */ + __u64 addr; + /* private: 1, 2, 4, or 8 bytes; or 0 to ignore length */ + __u32 len; + __s32 fd; + __u32 flags; + __u8 pad[36]; +}; + +#define GZVM_IOEVENTFD _IOW(GZVM_IOC_MAGIC, 0x79, struct gzvm_ioeventfd) + +/** + * struct gzvm_dtb_config: store address and size of dtb passed from userspace + * + * @dtb_addr: dtb address set by VMM (guset memory) + * @dtb_size: dtb size + */ +struct gzvm_dtb_config { + __u64 dtb_addr; + __u64 dtb_size; +}; + +#define GZVM_SET_DTB_CONFIG _IOW(GZVM_IOC_MAGIC, 0xff, \ + struct gzvm_dtb_config) + +#endif /* __GZVM_H__ */ diff --git a/kernel/cgroup/freezer.c b/kernel/cgroup/freezer.c index 617861a54793..d0224d3c0a32 100644 --- a/kernel/cgroup/freezer.c +++ b/kernel/cgroup/freezer.c @@ -7,6 +7,7 @@ #include "cgroup-internal.h" #include +#include /* * Propagate the cgroup frozen state upwards by the cgroup tree. @@ -155,17 +156,21 @@ void cgroup_leave_frozen(bool always_leave) static void cgroup_freeze_task(struct task_struct *task, bool freeze) { unsigned long flags; + bool wake = true; /* If the task is about to die, don't bother with freezing it. */ if (!lock_task_sighand(task, &flags)) return; + trace_android_vh_freeze_whether_wake(task, &wake); if (freeze) { task->jobctl |= JOBCTL_TRAP_FREEZE; - signal_wake_up(task, false); + if (wake) + signal_wake_up(task, false); } else { task->jobctl &= ~JOBCTL_TRAP_FREEZE; - wake_up_process(task); + if (wake) + wake_up_process(task); } unlock_task_sighand(task, &flags); diff --git a/kernel/exit.c b/kernel/exit.c index 1e3b9675fbe5..15ae928cdd2f 100644 --- a/kernel/exit.c +++ b/kernel/exit.c @@ -73,6 +73,7 @@ #include #include #include +#include /* * The default value should be high enough to not crash a system that randomly @@ -827,6 +828,8 @@ void __noreturn do_exit(long code) io_uring_files_cancel(); exit_signals(tsk); /* sets PF_EXITING */ + trace_android_vh_exit_check(current); + /* sync mm's RSS info before statistics gathering */ if (tsk->mm) sync_mm_rss(tsk->mm); diff --git a/kernel/freezer.c b/kernel/freezer.c index b672c614b1e9..abd7f58cfe04 100644 --- a/kernel/freezer.c +++ b/kernel/freezer.c @@ -74,7 +74,11 @@ bool __refrigerator(bool check_kthr_stop) for (;;) { bool freeze; + raw_spin_lock_irq(¤t->pi_lock); set_current_state(TASK_FROZEN); + /* unstale saved_state so that __thaw_task() will wake us up */ + current->saved_state = TASK_RUNNING; + raw_spin_unlock_irq(¤t->pi_lock); spin_lock_irq(&freezer_lock); freeze = freezing(current) && !(check_kthr_stop && kthread_should_stop()); @@ -133,6 +137,7 @@ static int __set_task_frozen(struct task_struct *p, void *arg) WARN_ON_ONCE(debug_locks && p->lockdep_depth); #endif + p->saved_state = p->__state; WRITE_ONCE(p->__state, TASK_FROZEN); return TASK_FROZEN; } @@ -174,42 +179,34 @@ bool freeze_task(struct task_struct *p) } /* - * The special task states (TASK_STOPPED, TASK_TRACED) keep their canonical - * state in p->jobctl. If either of them got a wakeup that was missed because - * TASK_FROZEN, then their canonical state reflects that and the below will - * refuse to restore the special state and instead issue the wakeup. + * Restore the saved_state before the task entered freezer. For typical task + * in the __refrigerator(), saved_state == TASK_RUNNING so nothing happens + * here. For tasks which were TASK_NORMAL | TASK_FREEZABLE, their initial state + * is restored unless they got an expected wakeup (see ttwu_state_match()). + * Returns 1 if the task state was restored. */ -static int __set_task_special(struct task_struct *p, void *arg) +static int __restore_freezer_state(struct task_struct *p, void *arg) { - unsigned int state = 0; + unsigned int state = p->saved_state; - if (p->jobctl & JOBCTL_TRACED) - state = TASK_TRACED; - - else if (p->jobctl & JOBCTL_STOPPED) - state = TASK_STOPPED; - - if (state) + if (state != TASK_RUNNING) { WRITE_ONCE(p->__state, state); + return 1; + } - return state; + return 0; } void __thaw_task(struct task_struct *p) { - unsigned long flags, flags2; + unsigned long flags; spin_lock_irqsave(&freezer_lock, flags); if (WARN_ON_ONCE(freezing(p))) goto unlock; - if (lock_task_sighand(p, &flags2)) { - /* TASK_FROZEN -> TASK_{STOPPED,TRACED} */ - bool ret = task_call_func(p, __set_task_special, NULL); - unlock_task_sighand(p, &flags2); - if (ret) - goto unlock; - } + if (task_call_func(p, __restore_freezer_state, NULL)) + goto unlock; wake_up_state(p, TASK_FROZEN); unlock: diff --git a/kernel/printk/printk_ringbuffer.c b/kernel/printk/printk_ringbuffer.c index 2b7b6ddab4f7..0bbcd1344f21 100644 --- a/kernel/printk/printk_ringbuffer.c +++ b/kernel/printk/printk_ringbuffer.c @@ -1735,7 +1735,7 @@ static bool copy_data(struct prb_data_ring *data_ring, if (!buf || !buf_size) return true; - data_size = min_t(u16, buf_size, len); + data_size = min_t(unsigned int, buf_size, len); memcpy(&buf[0], data, data_size); /* LMM(copy_data:A) */ return true; diff --git a/kernel/sched/core.c b/kernel/sched/core.c index 95843540088b..16941a9cb5a9 100644 --- a/kernel/sched/core.c +++ b/kernel/sched/core.c @@ -1880,10 +1880,16 @@ done: #endif static int uclamp_validate(struct task_struct *p, - const struct sched_attr *attr) + const struct sched_attr *attr, bool user) { int util_min = p->uclamp_req[UCLAMP_MIN].value; int util_max = p->uclamp_req[UCLAMP_MAX].value; + bool done = false; + int ret = 0; + + trace_android_vh_uclamp_validate(p, attr, user, &ret, &done); + if (done) + return ret; if (attr->sched_flags & SCHED_FLAG_UTIL_CLAMP_MIN) { util_min = attr->sched_util_min; @@ -1905,11 +1911,19 @@ static int uclamp_validate(struct task_struct *p, /* * We have valid uclamp attributes; make sure uclamp is enabled. * - * We need to do that here, because enabling static branches is a - * blocking operation which obviously cannot be done while holding + * We need to do that here, because enabling static branches is + * a blocking operation which obviously cannot be done while holding * scheduler locks. + * + * We only enable the static key if this was initiated by user space + * request. There should be no in-kernel users of uclamp except to + * implement things like inheritance like in binder. These in-kernel + * callers can rightfully be called be sometimes in_atomic() context + * which is invalid context to enable the key in. The enabling path + * unconditionally holds the cpus_read_lock() which might_sleep(). */ - static_branch_enable(&sched_uclamp_used); + if (user) + static_branch_enable(&sched_uclamp_used); return 0; } @@ -2050,7 +2064,7 @@ static void __init init_uclamp(void) static inline void uclamp_rq_inc(struct rq *rq, struct task_struct *p) { } static inline void uclamp_rq_dec(struct rq *rq, struct task_struct *p) { } static inline int uclamp_validate(struct task_struct *p, - const struct sched_attr *attr) + const struct sched_attr *attr, bool user) { return -EOPNOTSUPP; } @@ -2235,6 +2249,149 @@ void check_preempt_curr(struct rq *rq, struct task_struct *p, int flags) } EXPORT_SYMBOL_GPL(check_preempt_curr); +static __always_inline +int __task_state_match(struct task_struct *p, unsigned int state) +{ + if (READ_ONCE(p->__state) & state) + return 1; + + if (READ_ONCE(p->saved_state) & state) + return -1; + + return 0; +} + +static __always_inline +int task_state_match(struct task_struct *p, unsigned int state) +{ + int match; + + /* + * Serialize against current_save_and_set_rtlock_wait_state(), + * current_restore_rtlock_saved_state(), and __refrigerator(). + */ + raw_spin_lock_irq(&p->pi_lock); + match = __task_state_match(p, state); + raw_spin_unlock_irq(&p->pi_lock); + + return match; +} + +/* + * wait_task_inactive - wait for a thread to unschedule. + * + * Wait for the thread to block in any of the states set in @match_state. + * If it changes, i.e. @p might have woken up, then return zero. When we + * succeed in waiting for @p to be off its CPU, we return a positive number + * (its total switch count). If a second call a short while later returns the + * same number, the caller can be sure that @p has remained unscheduled the + * whole time. + * + * The caller must ensure that the task *will* unschedule sometime soon, + * else this function might spin for a *long* time. This function can't + * be called with interrupts off, or it may introduce deadlock with + * smp_call_function() if an IPI is sent by the same process we are + * waiting to become inactive. + */ +unsigned long wait_task_inactive(struct task_struct *p, unsigned int match_state) +{ + int running, queued, match; + struct rq_flags rf; + unsigned long ncsw; + struct rq *rq; + + for (;;) { + /* + * We do the initial early heuristics without holding + * any task-queue locks at all. We'll only try to get + * the runqueue lock when things look like they will + * work out! + */ + rq = task_rq(p); + + /* + * If the task is actively running on another CPU + * still, just relax and busy-wait without holding + * any locks. + * + * NOTE! Since we don't hold any locks, it's not + * even sure that "rq" stays as the right runqueue! + * But we don't care, since "task_on_cpu()" will + * return false if the runqueue has changed and p + * is actually now running somewhere else! + */ + while (task_on_cpu(rq, p)) { + if (!task_state_match(p, match_state)) + return 0; + cpu_relax(); + } + + /* + * Ok, time to look more closely! We need the rq + * lock now, to be *sure*. If we're wrong, we'll + * just go back and repeat. + */ + rq = task_rq_lock(p, &rf); + trace_sched_wait_task(p); + running = task_on_cpu(rq, p); + queued = task_on_rq_queued(p); + ncsw = 0; + if ((match = __task_state_match(p, match_state))) { + /* + * When matching on p->saved_state, consider this task + * still queued so it will wait. + */ + if (match < 0) + queued = 1; + ncsw = p->nvcsw | LONG_MIN; /* sets MSB */ + } + task_rq_unlock(rq, p, &rf); + + /* + * If it changed from the expected state, bail out now. + */ + if (unlikely(!ncsw)) + break; + + /* + * Was it really running after all now that we + * checked with the proper locks actually held? + * + * Oops. Go back and try again.. + */ + if (unlikely(running)) { + cpu_relax(); + continue; + } + + /* + * It's not enough that it's not actively running, + * it must be off the runqueue _entirely_, and not + * preempted! + * + * So if it was still runnable (but just not actively + * running right now), it's preempted, and we should + * yield - it could be a while. + */ + if (unlikely(queued)) { + ktime_t to = NSEC_PER_SEC / HZ; + + set_current_state(TASK_UNINTERRUPTIBLE); + schedule_hrtimeout(&to, HRTIMER_MODE_REL_HARD); + continue; + } + + /* + * Ahh, all good. It wasn't running, and it wasn't + * runnable, which means that it will never become + * running in the future either. We're all done! + */ + break; + } + + return ncsw; +} + #ifdef CONFIG_SMP static void @@ -2588,6 +2745,7 @@ out_unlock: put_task_struct(p); return 0; } +EXPORT_SYMBOL_GPL(push_cpu_stop); /* * sched_class::set_cpus_allowed must do the below, but is not required to @@ -3348,114 +3506,6 @@ out: } EXPORT_SYMBOL_GPL(migrate_swap); -/* - * wait_task_inactive - wait for a thread to unschedule. - * - * Wait for the thread to block in any of the states set in @match_state. - * If it changes, i.e. @p might have woken up, then return zero. When we - * succeed in waiting for @p to be off its CPU, we return a positive number - * (its total switch count). If a second call a short while later returns the - * same number, the caller can be sure that @p has remained unscheduled the - * whole time. - * - * The caller must ensure that the task *will* unschedule sometime soon, - * else this function might spin for a *long* time. This function can't - * be called with interrupts off, or it may introduce deadlock with - * smp_call_function() if an IPI is sent by the same process we are - * waiting to become inactive. - */ -unsigned long wait_task_inactive(struct task_struct *p, unsigned int match_state) -{ - int running, queued; - struct rq_flags rf; - unsigned long ncsw; - struct rq *rq; - - for (;;) { - /* - * We do the initial early heuristics without holding - * any task-queue locks at all. We'll only try to get - * the runqueue lock when things look like they will - * work out! - */ - rq = task_rq(p); - - /* - * If the task is actively running on another CPU - * still, just relax and busy-wait without holding - * any locks. - * - * NOTE! Since we don't hold any locks, it's not - * even sure that "rq" stays as the right runqueue! - * But we don't care, since "task_on_cpu()" will - * return false if the runqueue has changed and p - * is actually now running somewhere else! - */ - while (task_on_cpu(rq, p)) { - if (!(READ_ONCE(p->__state) & match_state)) - return 0; - cpu_relax(); - } - - /* - * Ok, time to look more closely! We need the rq - * lock now, to be *sure*. If we're wrong, we'll - * just go back and repeat. - */ - rq = task_rq_lock(p, &rf); - trace_sched_wait_task(p); - running = task_on_cpu(rq, p); - queued = task_on_rq_queued(p); - ncsw = 0; - if (READ_ONCE(p->__state) & match_state) - ncsw = p->nvcsw | LONG_MIN; /* sets MSB */ - task_rq_unlock(rq, p, &rf); - - /* - * If it changed from the expected state, bail out now. - */ - if (unlikely(!ncsw)) - break; - - /* - * Was it really running after all now that we - * checked with the proper locks actually held? - * - * Oops. Go back and try again.. - */ - if (unlikely(running)) { - cpu_relax(); - continue; - } - - /* - * It's not enough that it's not actively running, - * it must be off the runqueue _entirely_, and not - * preempted! - * - * So if it was still runnable (but just not actively - * running right now), it's preempted, and we should - * yield - it could be a while. - */ - if (unlikely(queued)) { - ktime_t to = NSEC_PER_SEC / HZ; - - set_current_state(TASK_UNINTERRUPTIBLE); - schedule_hrtimeout(&to, HRTIMER_MODE_REL_HARD); - continue; - } - - /* - * Ahh, all good. It wasn't running, and it wasn't - * runnable, which means that it will never become - * running in the future either. We're all done! - */ - break; - } - - return ncsw; -} - /*** * kick_process - kick a running thread to enter/exit the kernel * @p: the to-be-kicked thread @@ -3993,34 +4043,37 @@ static void ttwu_queue(struct task_struct *p, int cpu, int wake_flags) * The caller holds p::pi_lock if p != current or has preemption * disabled when p == current. * - * The rules of PREEMPT_RT saved_state: + * The rules of saved_state: * * The related locking code always holds p::pi_lock when updating * p::saved_state, which means the code is fully serialized in both cases. * - * The lock wait and lock wakeups happen via TASK_RTLOCK_WAIT. No other - * bits set. This allows to distinguish all wakeup scenarios. + * For PREEMPT_RT, the lock wait and lock wakeups happen via TASK_RTLOCK_WAIT. + * No other bits set. This allows to distinguish all wakeup scenarios. + * + * For FREEZER, the wakeup happens via TASK_FROZEN. No other bits set. This + * allows us to prevent early wakeup of tasks before they can be run on + * asymmetric ISA architectures (eg ARMv9). */ static __always_inline bool ttwu_state_match(struct task_struct *p, unsigned int state, int *success) { + int match; + if (IS_ENABLED(CONFIG_DEBUG_PREEMPT)) { WARN_ON_ONCE((state & TASK_RTLOCK_WAIT) && state != TASK_RTLOCK_WAIT); } - if (READ_ONCE(p->__state) & state) { - *success = 1; - return true; - } + *success = !!(match = __task_state_match(p, state)); -#ifdef CONFIG_PREEMPT_RT /* * Saved state preserves the task state across blocking on - * an RT lock. If the state matches, set p::saved_state to - * TASK_RUNNING, but do not wake the task because it waits - * for a lock wakeup. Also indicate success because from - * the regular waker's point of view this has succeeded. + * an RT lock or TASK_FREEZABLE tasks. If the state matches, + * set p::saved_state to TASK_RUNNING, but do not wake the task + * because it waits for a lock wakeup or __thaw_task(). Also + * indicate success because from the regular waker's point of + * view this has succeeded. * * After acquiring the lock the task will restore p::__state * from p::saved_state which ensures that the regular @@ -4028,12 +4081,10 @@ bool ttwu_state_match(struct task_struct *p, unsigned int state, int *success) * p::saved_state to TASK_RUNNING so any further tests will * not result in false positives vs. @success */ - if (p->saved_state & state) { + if (match < 0) p->saved_state = TASK_RUNNING; - *success = 1; - } -#endif - return false; + + return match > 0; } /* @@ -4455,6 +4506,7 @@ int wake_up_state(struct task_struct *p, unsigned int state) { return try_to_wake_up(p, state, 0); } +EXPORT_SYMBOL(wake_up_state); /* * Perform scheduler related setup for a newly forked process p. @@ -5364,6 +5416,7 @@ unsigned int nr_running(void) return sum; } +EXPORT_SYMBOL(nr_running); /* * Check if only the current task is running on the CPU. @@ -7646,7 +7699,7 @@ recheck: /* Update task specific "requested" clamps */ if (attr->sched_flags & SCHED_FLAG_UTIL_CLAMP) { - retval = uclamp_validate(p, attr); + retval = uclamp_validate(p, attr, user); if (retval) return retval; } diff --git a/kernel/sched/cpufreq_schedutil.c b/kernel/sched/cpufreq_schedutil.c index 042e5ad60843..bf0426428915 100644 --- a/kernel/sched/cpufreq_schedutil.c +++ b/kernel/sched/cpufreq_schedutil.c @@ -603,6 +603,7 @@ static int sugov_kthread_create(struct sugov_policy *sg_policy) if (policy->fast_switch_enabled) return 0; + trace_android_vh_set_sugov_sched_attr(&attr); kthread_init_work(&sg_policy->work, sugov_work); kthread_init_worker(&sg_policy->worker); thread = kthread_create(kthread_worker_fn, &sg_policy->worker, diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c index 06e8f15819dd..fddd87c38cf3 100644 --- a/kernel/sched/fair.c +++ b/kernel/sched/fair.c @@ -3350,6 +3350,7 @@ void reweight_task(struct task_struct *p, int prio) reweight_entity(cfs_rq, se, weight); load->inv_weight = sched_prio_to_wmult[prio]; } +EXPORT_SYMBOL_GPL(reweight_task); static inline int throttled_hierarchy(struct cfs_rq *cfs_rq); @@ -4128,6 +4129,8 @@ static void attach_entity_load_avg(struct cfs_rq *cfs_rq, struct sched_entity *s else se->avg.load_sum = 1; + trace_android_rvh_attach_entity_load_avg(cfs_rq, se); + enqueue_load_avg(cfs_rq, se); cfs_rq->avg.util_avg += se->avg.util_avg; cfs_rq->avg.util_sum += se->avg.util_sum; @@ -4151,6 +4154,8 @@ static void attach_entity_load_avg(struct cfs_rq *cfs_rq, struct sched_entity *s */ static void detach_entity_load_avg(struct cfs_rq *cfs_rq, struct sched_entity *se) { + trace_android_rvh_detach_entity_load_avg(cfs_rq, se); + dequeue_load_avg(cfs_rq, se); sub_positive(&cfs_rq->avg.util_avg, se->avg.util_avg); sub_positive(&cfs_rq->avg.util_sum, se->avg.util_sum); @@ -4195,6 +4200,8 @@ static inline void update_load_avg(struct cfs_rq *cfs_rq, struct sched_entity *s decayed = update_cfs_rq_load_avg(now, cfs_rq); decayed |= propagate_entity_load_avg(se); + trace_android_rvh_update_load_avg(now, cfs_rq, se); + if (!se->avg.last_update_time && (flags & DO_ATTACH)) { /* @@ -4252,6 +4259,8 @@ static void remove_entity_load_avg(struct sched_entity *se) sync_entity_load_avg(se); + trace_android_rvh_remove_entity_load_avg(cfs_rq, se); + raw_spin_lock_irqsave(&cfs_rq->removed.lock, flags); ++cfs_rq->removed.nr; cfs_rq->removed.util_avg += se->avg.util_avg; @@ -6129,6 +6138,7 @@ enqueue_task_fair(struct rq *rq, struct task_struct *p, int flags) struct sched_entity *se = &p->se; int idle_h_nr_running = task_has_idle_policy(p); int task_new = !(flags & ENQUEUE_WAKEUP); + int should_iowait_boost; /* * The code below (indirectly) updates schedutil which looks at @@ -6143,7 +6153,9 @@ enqueue_task_fair(struct rq *rq, struct task_struct *p, int flags) * utilization updates, so do it here explicitly with the IOWAIT flag * passed. */ - if (p->in_iowait) + should_iowait_boost = p->in_iowait; + trace_android_rvh_set_iowait(p, rq, &should_iowait_boost); + if (should_iowait_boost) cpufreq_update_util(rq, SCHED_CPUFREQ_IOWAIT); for_each_sched_entity(se) { @@ -8752,6 +8764,8 @@ static bool __update_blocked_fair(struct rq *rq, bool *done) bool decayed = false; int cpu = cpu_of(rq); + trace_android_rvh_update_blocked_fair(rq); + /* * Iterates the task_group tree in a bottom up fashion, see * list_add_leaf_cfs_rq() for details. diff --git a/kernel/sched/pelt.c b/kernel/sched/pelt.c index a005458373be..c1c84f5a3c03 100644 --- a/kernel/sched/pelt.c +++ b/kernel/sched/pelt.c @@ -176,7 +176,7 @@ accumulate_sum(u64 delta, struct sched_avg *sa, * load_avg = u_0` + y*(u_0 + u_1*y + u_2*y^2 + ... ) * = u_0 + u_1*y + u_2*y^2 + ... [re-labeling u_i --> u_{i+1}] */ -static __always_inline int +int ___update_load_sum(u64 now, struct sched_avg *sa, unsigned long load, unsigned long runnable, int running) { @@ -228,6 +228,7 @@ ___update_load_sum(u64 now, struct sched_avg *sa, return 1; } +EXPORT_SYMBOL_GPL(___update_load_sum); /* * When syncing *_avg with *_sum, we must take into account the current @@ -253,7 +254,7 @@ ___update_load_sum(u64 now, struct sched_avg *sa, * the period_contrib of cfs_rq when updating the sched_avg of a sched_entity * if it's more convenient. */ -static __always_inline void +void ___update_load_avg(struct sched_avg *sa, unsigned long load) { u32 divider = get_pelt_divider(sa); @@ -265,6 +266,7 @@ ___update_load_avg(struct sched_avg *sa, unsigned long load) sa->runnable_avg = div_u64(sa->runnable_sum, divider); WRITE_ONCE(sa->util_avg, sa->util_sum / divider); } +EXPORT_SYMBOL_GPL(___update_load_avg); /* * sched_entity: diff --git a/kernel/sched/rt.c b/kernel/sched/rt.c index b55c5221fc4c..0de7c8fdb3f7 100644 --- a/kernel/sched/rt.c +++ b/kernel/sched/rt.c @@ -1848,6 +1848,7 @@ static inline void set_next_task_rt(struct rq *rq, struct task_struct *p, bool f */ if (rq->curr->sched_class != &rt_sched_class) update_rt_rq_load_avg(rq_clock_pelt(rq), rq, 0); + trace_android_rvh_update_rt_rq_load_avg(rq_clock_pelt(rq), rq, p, 0); rt_queue_push_tasks(rq); } @@ -1918,6 +1919,7 @@ static void put_prev_task_rt(struct rq *rq, struct task_struct *p) update_curr_rt(rq); update_rt_rq_load_avg(rq_clock_pelt(rq), rq, 1); + trace_android_rvh_update_rt_rq_load_avg(rq_clock_pelt(rq), rq, p, 1); /* * The previous task needs to be made eligible for pushing @@ -2737,6 +2739,7 @@ static void task_tick_rt(struct rq *rq, struct task_struct *p, int queued) update_curr_rt(rq); update_rt_rq_load_avg(rq_clock_pelt(rq), rq, 1); + trace_android_rvh_update_rt_rq_load_avg(rq_clock_pelt(rq), rq, p, 1); watchdog(rq, p); diff --git a/kernel/sched/vendor_hooks.c b/kernel/sched/vendor_hooks.c index f528b1f6cbb9..9a8f2c3b2758 100644 --- a/kernel/sched/vendor_hooks.c +++ b/kernel/sched/vendor_hooks.c @@ -99,3 +99,12 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_irqtime_account_process_tick); EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_post_init_entity_util_avg); EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_effective_cpu_util); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_mmput); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_uclamp_validate); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_set_sugov_sched_attr); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_set_iowait); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_attach_entity_load_avg); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_detach_entity_load_avg); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_update_load_avg); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_remove_entity_load_avg); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_update_blocked_fair); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_update_rt_rq_load_avg); diff --git a/kernel/signal.c b/kernel/signal.c index 95d48c43fd9e..2f90f315ec1b 100644 --- a/kernel/signal.c +++ b/kernel/signal.c @@ -45,6 +45,7 @@ #include #include #include +#include #define CREATE_TRACE_POINTS #include @@ -58,6 +59,7 @@ #undef CREATE_TRACE_POINTS #include +#include /* * SLAB caches for signal bits. */ @@ -1001,6 +1003,7 @@ static void complete_signal(int sig, struct task_struct *p, enum pid_type type) { struct signal_struct *signal = p->signal; struct task_struct *t; + bool wake; /* * Now find a thread we can wake up to take the signal off the queue. @@ -1060,7 +1063,10 @@ static void complete_signal(int sig, struct task_struct *p, enum pid_type type) trace_android_vh_exit_signal(t); task_clear_jobctl_pending(t, JOBCTL_PENDING_MASK); sigaddset(&t->pending.signal, SIGKILL); - signal_wake_up(t, 1); + wake = true; + trace_android_vh_exit_signal_whether_wake(t, &wake); + if (wake) + signal_wake_up(t, 1); } while_each_thread(p, t); return; } @@ -1443,8 +1449,16 @@ int group_send_sig_info(int sig, struct kernel_siginfo *info, ret = check_kill_permission(sig, info, p); rcu_read_unlock(); - if (!ret && sig) + if (!ret && sig) { ret = do_send_sig_info(sig, info, p, type); + if (!ret && sig == SIGKILL) { + bool reap = false; + + trace_android_vh_killed_process(current, p, &reap); + if (reap) + add_to_oom_reaper(p); + } + } return ret; } diff --git a/mm/oom_kill.c b/mm/oom_kill.c index 1276e49b31b0..2c5b854f767b 100644 --- a/mm/oom_kill.c +++ b/mm/oom_kill.c @@ -745,6 +745,19 @@ static inline void queue_oom_reaper(struct task_struct *tsk) } #endif /* CONFIG_MMU */ +/** + * tsk->mm has to be non NULL and caller has to guarantee it is stable (either + * under task_lock or operate on the current). + */ +static void __mark_oom_victim(struct task_struct *tsk) +{ + struct mm_struct *mm = tsk->mm; + + if (!cmpxchg(&tsk->signal->oom_mm, NULL, mm)) { + mmgrab(tsk->signal->oom_mm); + } +} + /** * mark_oom_victim - mark the given task as OOM victim * @tsk: task to mark @@ -757,16 +770,13 @@ static inline void queue_oom_reaper(struct task_struct *tsk) */ static void mark_oom_victim(struct task_struct *tsk) { - struct mm_struct *mm = tsk->mm; - WARN_ON(oom_killer_disabled); /* OOM killer might race with memcg OOM */ if (test_and_set_tsk_thread_flag(tsk, TIF_MEMDIE)) return; /* oom_mm is bound to the signal struct life time. */ - if (!cmpxchg(&tsk->signal->oom_mm, NULL, mm)) - mmgrab(tsk->signal->oom_mm); + __mark_oom_victim(tsk); /* * Make sure that the task is woken up from uninterruptible sleep @@ -1260,3 +1270,16 @@ put_task: return -ENOSYS; #endif /* CONFIG_MMU */ } + +void add_to_oom_reaper(struct task_struct *p) +{ + p = find_lock_task_mm(p); + if (!p) + return; + + if (task_will_free_mem(p)) { + __mark_oom_victim(p); + queue_oom_reaper(p); + } + task_unlock(p); +} diff --git a/mm/page_owner.c b/mm/page_owner.c index ab06f4391954..95c436aec4c0 100644 --- a/mm/page_owner.c +++ b/mm/page_owner.c @@ -36,6 +36,7 @@ struct page_owner { static bool page_owner_enabled __initdata; DEFINE_STATIC_KEY_FALSE(page_owner_inited); +EXPORT_SYMBOL_GPL(page_owner_inited); static depot_stack_handle_t dummy_handle; static depot_stack_handle_t failure_handle; @@ -214,6 +215,7 @@ noinline void __set_page_owner(struct page *page, unsigned short order, __set_page_owner_handle(page_ext, handle, order, gfp_mask); page_ext_put(page_ext); } +EXPORT_SYMBOL_GPL(__set_page_owner); void __set_page_owner_migrate_reason(struct page *page, int reason) { diff --git a/mm/vmscan.c b/mm/vmscan.c index 8c46b598af44..d1b9313ef88f 100644 --- a/mm/vmscan.c +++ b/mm/vmscan.c @@ -2966,6 +2966,8 @@ static void get_scan_count(struct lruvec *lruvec, struct scan_control *sc, goto out; } + + trace_android_vh_tune_swappiness(&swappiness); /* * Global reclaim will swap to prevent OOM even with no * swappiness, but memcg users want to use this knob to @@ -3219,6 +3221,7 @@ static struct lruvec *get_lruvec(struct mem_cgroup *memcg, int nid) static int get_swappiness(struct lruvec *lruvec, struct scan_control *sc) { + int swappiness; struct mem_cgroup *memcg = lruvec_memcg(lruvec); struct pglist_data *pgdat = lruvec_pgdat(lruvec); @@ -3229,7 +3232,10 @@ static int get_swappiness(struct lruvec *lruvec, struct scan_control *sc) mem_cgroup_get_nr_swap_pages(memcg) <= 0) return 0; - return mem_cgroup_swappiness(memcg); + swappiness = mem_cgroup_swappiness(memcg); + trace_android_vh_tune_swappiness(&swappiness); + + return swappiness; } static int get_nr_gens(struct lruvec *lruvec, int type) diff --git a/mm/zsmalloc.c b/mm/zsmalloc.c index 9fb906d56e0b..02e784182c20 100644 --- a/mm/zsmalloc.c +++ b/mm/zsmalloc.c @@ -246,6 +246,7 @@ struct zs_pool { struct work_struct free_work; #endif spinlock_t lock; + atomic_t compaction_in_progress; }; struct zspage { @@ -2100,6 +2101,15 @@ unsigned long zs_compact(struct zs_pool *pool) struct size_class *class; unsigned long pages_freed = 0; + /* + * Pool compaction is performed under pool->lock so it is basically + * single-threaded. Having more than one thread in __zs_compact() + * will increase pool->lock contention, which will impact other + * zsmalloc operations that need pool->lock. + */ + if (atomic_xchg(&pool->compaction_in_progress, 1)) + return 0; + for (i = ZS_SIZE_CLASSES - 1; i >= 0; i--) { class = pool->size_class[i]; if (class->index != i) @@ -2107,6 +2117,7 @@ unsigned long zs_compact(struct zs_pool *pool) pages_freed += __zs_compact(pool, class); } atomic_long_add(pages_freed, &pool->stats.pages_compacted); + atomic_set(&pool->compaction_in_progress, 0); return pages_freed; } @@ -2193,6 +2204,7 @@ struct zs_pool *zs_create_pool(const char *name) init_deferred_free(pool); spin_lock_init(&pool->lock); + atomic_set(&pool->compaction_in_progress, 0); pool->name = kstrdup(name, GFP_KERNEL); if (!pool->name) diff --git a/modules.bzl b/modules.bzl index 868ef5ed2bd3..52d92225aab4 100644 --- a/modules.bzl +++ b/modules.bzl @@ -6,7 +6,7 @@ This module contains a full list of kernel modules compiled by GKI. """ -COMMON_GKI_MODULES_LIST = [ +_COMMON_GKI_MODULES_LIST = [ # keep sorted "drivers/block/zram/zram.ko", "drivers/bluetooth/btbcm.ko", @@ -68,3 +68,56 @@ COMMON_GKI_MODULES_LIST = [ "net/tipc/diag.ko", "net/tipc/tipc.ko", ] + +# Deprecated - Use `get_gki_modules_list` function instead. +COMMON_GKI_MODULES_LIST = _COMMON_GKI_MODULES_LIST + +_ARM_GKI_MODULES_LIST = [ + # keep sorted +] + +_ARM64_GKI_MODULES_LIST = [ + # keep sorted + "arch/arm64/geniezone/gzvm.ko", +] + +_RISCV64_GKI_MODULES_LIST = [ + # keep sorted +] + +_X86_GKI_MODULES_LIST = [ + # keep sorted +] + +_X86_64_GKI_MODULES_LIST = [ + # keep sorted +] + +# buildifier: disable=unnamed-macro +def get_gki_modules_list(arch = None): + """ Provides the list of GKI modules. + + Args: + arch: One of [arm, arm64, i386, x86_64, riscv64]. + + Returns: + The list of GKI modules for the given |arch|. + """ + gki_modules_list = [] + _COMMON_GKI_MODULES_LIST + if arch == "arm": + gki_modules_list += _ARM_GKI_MODULES_LIST + elif arch == "arm64": + gki_modules_list += _ARM64_GKI_MODULES_LIST + elif arch == "i386": + gki_modules_list += _X86_GKI_MODULES_LIST + elif arch == "x86_64": + gki_modules_list += _X86_64_GKI_MODULES_LIST + elif arch == "riscv64": + gki_modules_list += _RISCV64_GKI_MODULES_LIST + else: + fail("{}: arch {} not supported. Use one of [arm, arm64, i386, x86_64, riscv64]".format( + str(native.package_relative_label(":x")).removesuffix(":x"), + arch, + )) + + return gki_modules_list diff --git a/net/bluetooth/l2cap_sock.c b/net/bluetooth/l2cap_sock.c index eebe256104bc..947ca580bb9a 100644 --- a/net/bluetooth/l2cap_sock.c +++ b/net/bluetooth/l2cap_sock.c @@ -46,6 +46,7 @@ static const struct proto_ops l2cap_sock_ops; static void l2cap_sock_init(struct sock *sk, struct sock *parent); static struct sock *l2cap_sock_alloc(struct net *net, struct socket *sock, int proto, gfp_t prio, int kern); +static void l2cap_sock_cleanup_listen(struct sock *parent); bool l2cap_is_socket(struct socket *sock) { @@ -1415,6 +1416,7 @@ static int l2cap_sock_release(struct socket *sock) if (!sk) return 0; + l2cap_sock_cleanup_listen(sk); bt_sock_unlink(&l2cap_sk_list, sk); err = l2cap_sock_shutdown(sock, SHUT_RDWR); diff --git a/net/core/net-traces.c b/net/core/net-traces.c index 82a8a5c05639..ed7d56d17665 100644 --- a/net/core/net-traces.c +++ b/net/core/net-traces.c @@ -60,3 +60,9 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(napi_poll); EXPORT_TRACEPOINT_SYMBOL_GPL(tcp_send_reset); EXPORT_TRACEPOINT_SYMBOL_GPL(tcp_bad_csum); + +EXPORT_TRACEPOINT_SYMBOL_GPL(net_dev_queue); +EXPORT_TRACEPOINT_SYMBOL_GPL(net_dev_xmit); +EXPORT_TRACEPOINT_SYMBOL_GPL(netif_receive_skb); +EXPORT_TRACEPOINT_SYMBOL_GPL(netif_rx); + diff --git a/net/netfilter/nf_tables_api.c b/net/netfilter/nf_tables_api.c index ea2216826e11..d7ac35073c01 100644 --- a/net/netfilter/nf_tables_api.c +++ b/net/netfilter/nf_tables_api.c @@ -3533,8 +3533,6 @@ static int nf_tables_newrule(struct sk_buff *skb, const struct nfnl_info *info, NL_SET_BAD_ATTR(extack, nla[NFTA_RULE_CHAIN]); return PTR_ERR(chain); } - if (nft_chain_is_bound(chain)) - return -EOPNOTSUPP; } else if (nla[NFTA_RULE_CHAIN_ID]) { chain = nft_chain_lookup_byid(net, table, nla[NFTA_RULE_CHAIN_ID]); @@ -3546,6 +3544,9 @@ static int nf_tables_newrule(struct sk_buff *skb, const struct nfnl_info *info, return -EINVAL; } + if (nft_chain_is_bound(chain)) + return -EOPNOTSUPP; + if (nla[NFTA_RULE_HANDLE]) { handle = be64_to_cpu(nla_get_be64(nla[NFTA_RULE_HANDLE])); rule = __nft_rule_lookup(chain, handle); @@ -6687,6 +6688,7 @@ static int nft_set_catchall_flush(const struct nft_ctx *ctx, ret = __nft_set_catchall_flush(ctx, set, &elem); if (ret < 0) break; + nft_set_elem_change_active(ctx->net, set, ext); } return ret; diff --git a/net/netfilter/nfnetlink_log.c b/net/netfilter/nfnetlink_log.c index d97eb280cb2e..485465d7624e 100644 --- a/net/netfilter/nfnetlink_log.c +++ b/net/netfilter/nfnetlink_log.c @@ -460,7 +460,6 @@ __build_packet_message(struct nfnl_log_net *log, sk_buff_data_t old_tail = inst->skb->tail; struct sock *sk; const unsigned char *hwhdrp; - ktime_t tstamp; nlh = nfnl_msg_put(inst->skb, 0, 0, nfnl_msg_type(NFNL_SUBSYS_ULOG, NFULNL_MSG_PACKET), @@ -589,10 +588,9 @@ __build_packet_message(struct nfnl_log_net *log, goto nla_put_failure; } - tstamp = skb_tstamp_cond(skb, false); - if (hooknum <= NF_INET_FORWARD && tstamp) { + if (hooknum <= NF_INET_FORWARD) { + struct timespec64 kts = ktime_to_timespec64(skb_tstamp_cond(skb, true)); struct nfulnl_msg_packet_timestamp ts; - struct timespec64 kts = ktime_to_timespec64(tstamp); ts.sec = cpu_to_be64(kts.tv_sec); ts.usec = cpu_to_be64(kts.tv_nsec / NSEC_PER_USEC); diff --git a/net/nfc/llcp.h b/net/nfc/llcp.h index c1d9be636933..d8345ed57c95 100644 --- a/net/nfc/llcp.h +++ b/net/nfc/llcp.h @@ -201,7 +201,6 @@ void nfc_llcp_sock_link(struct llcp_sock_list *l, struct sock *s); void nfc_llcp_sock_unlink(struct llcp_sock_list *l, struct sock *s); void nfc_llcp_socket_remote_param_init(struct nfc_llcp_sock *sock); struct nfc_llcp_local *nfc_llcp_find_local(struct nfc_dev *dev); -struct nfc_llcp_local *nfc_llcp_local_get(struct nfc_llcp_local *local); int nfc_llcp_local_put(struct nfc_llcp_local *local); u8 nfc_llcp_get_sdp_ssap(struct nfc_llcp_local *local, struct nfc_llcp_sock *sock); diff --git a/net/nfc/llcp_commands.c b/net/nfc/llcp_commands.c index 41e3a20c8935..5d2d4bc26ef9 100644 --- a/net/nfc/llcp_commands.c +++ b/net/nfc/llcp_commands.c @@ -359,6 +359,7 @@ int nfc_llcp_send_symm(struct nfc_dev *dev) struct sk_buff *skb; struct nfc_llcp_local *local; u16 size = 0; + int err; local = nfc_llcp_find_local(dev); if (local == NULL) @@ -368,8 +369,10 @@ int nfc_llcp_send_symm(struct nfc_dev *dev) size += dev->tx_headroom + dev->tx_tailroom + NFC_HEADER_SIZE; skb = alloc_skb(size, GFP_KERNEL); - if (skb == NULL) - return -ENOMEM; + if (skb == NULL) { + err = -ENOMEM; + goto out; + } skb_reserve(skb, dev->tx_headroom + NFC_HEADER_SIZE); @@ -379,8 +382,11 @@ int nfc_llcp_send_symm(struct nfc_dev *dev) nfc_llcp_send_to_raw_sock(local, skb, NFC_DIRECTION_TX); - return nfc_data_exchange(dev, local->target_idx, skb, + err = nfc_data_exchange(dev, local->target_idx, skb, nfc_llcp_recv, local); +out: + nfc_llcp_local_put(local); + return err; } int nfc_llcp_send_connect(struct nfc_llcp_sock *sock) diff --git a/net/nfc/llcp_core.c b/net/nfc/llcp_core.c index a27e1842b2a0..f60e424e0607 100644 --- a/net/nfc/llcp_core.c +++ b/net/nfc/llcp_core.c @@ -17,6 +17,8 @@ static u8 llcp_magic[3] = {0x46, 0x66, 0x6d}; static LIST_HEAD(llcp_devices); +/* Protects llcp_devices list */ +static DEFINE_SPINLOCK(llcp_devices_lock); static void nfc_llcp_rx_skb(struct nfc_llcp_local *local, struct sk_buff *skb); @@ -141,7 +143,7 @@ static void nfc_llcp_socket_release(struct nfc_llcp_local *local, bool device, write_unlock(&local->raw_sockets.lock); } -struct nfc_llcp_local *nfc_llcp_local_get(struct nfc_llcp_local *local) +static struct nfc_llcp_local *nfc_llcp_local_get(struct nfc_llcp_local *local) { kref_get(&local->ref); @@ -169,7 +171,6 @@ static void local_release(struct kref *ref) local = container_of(ref, struct nfc_llcp_local, ref); - list_del(&local->list); local_cleanup(local); kfree(local); } @@ -282,12 +283,33 @@ static void nfc_llcp_sdreq_timer(struct timer_list *t) struct nfc_llcp_local *nfc_llcp_find_local(struct nfc_dev *dev) { struct nfc_llcp_local *local; + struct nfc_llcp_local *res = NULL; + spin_lock(&llcp_devices_lock); list_for_each_entry(local, &llcp_devices, list) - if (local->dev == dev) - return local; + if (local->dev == dev) { + res = nfc_llcp_local_get(local); + break; + } + spin_unlock(&llcp_devices_lock); - pr_debug("No device found\n"); + return res; +} + +static struct nfc_llcp_local *nfc_llcp_remove_local(struct nfc_dev *dev) +{ + struct nfc_llcp_local *local, *tmp; + + spin_lock(&llcp_devices_lock); + list_for_each_entry_safe(local, tmp, &llcp_devices, list) + if (local->dev == dev) { + list_del(&local->list); + spin_unlock(&llcp_devices_lock); + return local; + } + spin_unlock(&llcp_devices_lock); + + pr_warn("Shutting down device not found\n"); return NULL; } @@ -608,12 +630,15 @@ u8 *nfc_llcp_general_bytes(struct nfc_dev *dev, size_t *general_bytes_len) *general_bytes_len = local->gb_len; + nfc_llcp_local_put(local); + return local->gb; } int nfc_llcp_set_remote_gb(struct nfc_dev *dev, const u8 *gb, u8 gb_len) { struct nfc_llcp_local *local; + int err; if (gb_len < 3 || gb_len > NFC_MAX_GT_LEN) return -EINVAL; @@ -630,12 +655,16 @@ int nfc_llcp_set_remote_gb(struct nfc_dev *dev, const u8 *gb, u8 gb_len) if (memcmp(local->remote_gb, llcp_magic, 3)) { pr_err("MAC does not support LLCP\n"); - return -EINVAL; + err = -EINVAL; + goto out; } - return nfc_llcp_parse_gb_tlv(local, + err = nfc_llcp_parse_gb_tlv(local, &local->remote_gb[3], local->remote_gb_len - 3); +out: + nfc_llcp_local_put(local); + return err; } static u8 nfc_llcp_dsap(const struct sk_buff *pdu) @@ -1517,6 +1546,8 @@ int nfc_llcp_data_received(struct nfc_dev *dev, struct sk_buff *skb) __nfc_llcp_recv(local, skb); + nfc_llcp_local_put(local); + return 0; } @@ -1533,6 +1564,8 @@ void nfc_llcp_mac_is_down(struct nfc_dev *dev) /* Close and purge all existing sockets */ nfc_llcp_socket_release(local, true, 0); + + nfc_llcp_local_put(local); } void nfc_llcp_mac_is_up(struct nfc_dev *dev, u32 target_idx, @@ -1558,6 +1591,8 @@ void nfc_llcp_mac_is_up(struct nfc_dev *dev, u32 target_idx, mod_timer(&local->link_timer, jiffies + msecs_to_jiffies(local->remote_lto)); } + + nfc_llcp_local_put(local); } int nfc_llcp_register_device(struct nfc_dev *ndev) @@ -1608,7 +1643,7 @@ int nfc_llcp_register_device(struct nfc_dev *ndev) void nfc_llcp_unregister_device(struct nfc_dev *dev) { - struct nfc_llcp_local *local = nfc_llcp_find_local(dev); + struct nfc_llcp_local *local = nfc_llcp_remove_local(dev); if (local == NULL) { pr_debug("No such device\n"); diff --git a/net/nfc/llcp_sock.c b/net/nfc/llcp_sock.c index 77642d18a3b4..645677f84dba 100644 --- a/net/nfc/llcp_sock.c +++ b/net/nfc/llcp_sock.c @@ -99,7 +99,7 @@ static int llcp_sock_bind(struct socket *sock, struct sockaddr *addr, int alen) } llcp_sock->dev = dev; - llcp_sock->local = nfc_llcp_local_get(local); + llcp_sock->local = local; llcp_sock->nfc_protocol = llcp_addr.nfc_protocol; llcp_sock->service_name_len = min_t(unsigned int, llcp_addr.service_name_len, @@ -186,7 +186,7 @@ static int llcp_raw_sock_bind(struct socket *sock, struct sockaddr *addr, } llcp_sock->dev = dev; - llcp_sock->local = nfc_llcp_local_get(local); + llcp_sock->local = local; llcp_sock->nfc_protocol = llcp_addr.nfc_protocol; nfc_llcp_sock_link(&local->raw_sockets, sk); @@ -696,22 +696,22 @@ static int llcp_sock_connect(struct socket *sock, struct sockaddr *_addr, if (dev->dep_link_up == false) { ret = -ENOLINK; device_unlock(&dev->dev); - goto put_dev; + goto sock_llcp_put_local; } device_unlock(&dev->dev); if (local->rf_mode == NFC_RF_INITIATOR && addr->target_idx != local->target_idx) { ret = -ENOLINK; - goto put_dev; + goto sock_llcp_put_local; } llcp_sock->dev = dev; - llcp_sock->local = nfc_llcp_local_get(local); + llcp_sock->local = local; llcp_sock->ssap = nfc_llcp_get_local_ssap(local); if (llcp_sock->ssap == LLCP_SAP_MAX) { ret = -ENOMEM; - goto sock_llcp_put_local; + goto sock_llcp_nullify; } llcp_sock->reserved_ssap = llcp_sock->ssap; @@ -757,11 +757,13 @@ sock_unlink: sock_llcp_release: nfc_llcp_put_ssap(local, llcp_sock->ssap); -sock_llcp_put_local: - nfc_llcp_local_put(llcp_sock->local); +sock_llcp_nullify: llcp_sock->local = NULL; llcp_sock->dev = NULL; +sock_llcp_put_local: + nfc_llcp_local_put(local); + put_dev: nfc_put_device(dev); diff --git a/net/nfc/netlink.c b/net/nfc/netlink.c index b9264e730fd9..e9ac6a6f934e 100644 --- a/net/nfc/netlink.c +++ b/net/nfc/netlink.c @@ -1039,11 +1039,14 @@ static int nfc_genl_llc_get_params(struct sk_buff *skb, struct genl_info *info) msg = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_KERNEL); if (!msg) { rc = -ENOMEM; - goto exit; + goto put_local; } rc = nfc_genl_send_params(msg, local, info->snd_portid, info->snd_seq); +put_local: + nfc_llcp_local_put(local); + exit: device_unlock(&dev->dev); @@ -1105,7 +1108,7 @@ static int nfc_genl_llc_set_params(struct sk_buff *skb, struct genl_info *info) if (info->attrs[NFC_ATTR_LLC_PARAM_LTO]) { if (dev->dep_link_up) { rc = -EINPROGRESS; - goto exit; + goto put_local; } local->lto = nla_get_u8(info->attrs[NFC_ATTR_LLC_PARAM_LTO]); @@ -1117,6 +1120,9 @@ static int nfc_genl_llc_set_params(struct sk_buff *skb, struct genl_info *info) if (info->attrs[NFC_ATTR_LLC_PARAM_MIUX]) local->miux = cpu_to_be16(miux); +put_local: + nfc_llcp_local_put(local); + exit: device_unlock(&dev->dev); @@ -1172,7 +1178,7 @@ static int nfc_genl_llc_sdreq(struct sk_buff *skb, struct genl_info *info) if (rc != 0) { rc = -EINVAL; - goto exit; + goto put_local; } if (!sdp_attrs[NFC_SDP_ATTR_URI]) @@ -1191,7 +1197,7 @@ static int nfc_genl_llc_sdreq(struct sk_buff *skb, struct genl_info *info) sdreq = nfc_llcp_build_sdreq_tlv(tid, uri, uri_len); if (sdreq == NULL) { rc = -ENOMEM; - goto exit; + goto put_local; } tlvs_len += sdreq->tlv_len; @@ -1201,10 +1207,14 @@ static int nfc_genl_llc_sdreq(struct sk_buff *skb, struct genl_info *info) if (hlist_empty(&sdreq_list)) { rc = -EINVAL; - goto exit; + goto put_local; } rc = nfc_llcp_send_snl_sdreq(local, &sdreq_list, tlvs_len); + +put_local: + nfc_llcp_local_put(local); + exit: device_unlock(&dev->dev); diff --git a/net/nfc/nfc.h b/net/nfc/nfc.h index de2ec66d7e83..0b1e6466f4fb 100644 --- a/net/nfc/nfc.h +++ b/net/nfc/nfc.h @@ -52,6 +52,7 @@ int nfc_llcp_set_remote_gb(struct nfc_dev *dev, const u8 *gb, u8 gb_len); u8 *nfc_llcp_general_bytes(struct nfc_dev *dev, size_t *general_bytes_len); int nfc_llcp_data_received(struct nfc_dev *dev, struct sk_buff *skb); struct nfc_llcp_local *nfc_llcp_find_local(struct nfc_dev *dev); +int nfc_llcp_local_put(struct nfc_llcp_local *local); int __init nfc_llcp_init(void); void nfc_llcp_exit(void); void nfc_llcp_free_sdp_tlv(struct nfc_llcp_sdp_tlv *sdp); diff --git a/net/sched/cls_fw.c b/net/sched/cls_fw.c index 1212b057b129..6160ef7d646a 100644 --- a/net/sched/cls_fw.c +++ b/net/sched/cls_fw.c @@ -265,7 +265,6 @@ static int fw_change(struct net *net, struct sk_buff *in_skb, return -ENOBUFS; fnew->id = f->id; - fnew->res = f->res; fnew->ifindex = f->ifindex; fnew->tp = f->tp; diff --git a/net/sched/cls_route.c b/net/sched/cls_route.c index 9e43b929d4ca..306188bf2d1f 100644 --- a/net/sched/cls_route.c +++ b/net/sched/cls_route.c @@ -511,7 +511,6 @@ static int route4_change(struct net *net, struct sk_buff *in_skb, if (fold) { f->id = fold->id; f->iif = fold->iif; - f->res = fold->res; f->handle = fold->handle; f->tp = fold->tp; diff --git a/net/sched/cls_u32.c b/net/sched/cls_u32.c index a3477537c102..b28b42de8be4 100644 --- a/net/sched/cls_u32.c +++ b/net/sched/cls_u32.c @@ -813,7 +813,6 @@ static struct tc_u_knode *u32_init_knode(struct net *net, struct tcf_proto *tp, new->ifindex = n->ifindex; new->fshift = n->fshift; - new->res = n->res; new->flags = n->flags; RCU_INIT_POINTER(new->ht_down, ht); diff --git a/net/unix/af_unix.c b/net/unix/af_unix.c index 8c05d9aaaefd..999182d3c1a2 100644 --- a/net/unix/af_unix.c +++ b/net/unix/af_unix.c @@ -2290,6 +2290,7 @@ static ssize_t unix_stream_sendpage(struct socket *socket, struct page *page, if (false) { alloc_skb: + spin_unlock(&other->sk_receive_queue.lock); unix_state_unlock(other); mutex_unlock(&unix_sk(other)->iolock); newskb = sock_alloc_send_pskb(sk, 0, 0, flags & MSG_DONTWAIT, @@ -2329,6 +2330,7 @@ alloc_skb: init_scm = false; } + spin_lock(&other->sk_receive_queue.lock); skb = skb_peek_tail(&other->sk_receive_queue); if (tail && tail == skb) { skb = newskb; @@ -2359,14 +2361,11 @@ alloc_skb: refcount_add(size, &sk->sk_wmem_alloc); if (newskb) { - err = unix_scm_to_skb(&scm, skb, false); - if (err) - goto err_state_unlock; - spin_lock(&other->sk_receive_queue.lock); + unix_scm_to_skb(&scm, skb, false); __skb_queue_tail(&other->sk_receive_queue, newskb); - spin_unlock(&other->sk_receive_queue.lock); } + spin_unlock(&other->sk_receive_queue.lock); unix_state_unlock(other); mutex_unlock(&unix_sk(other)->iolock);