Merge tag 'android14-6.1-2023-06_r1' of https://android.googlesource.com/kernel/common

android14-6.1 June 2023 release 1

Artifacts:
  https://ci.android.com/builds/submitted/10351523/kernel_aarch64/latest

* tag 'android14-6.1-2023-06_r1': (596 commits)
  ANDROID: GKI: Include kheaders in gki_system_dlkm_modules
  ANDROID: 6/16/2023 KMI update
  ANDROID: sched: Add parameter to android_rvh_schedule.
  ANDROID: GKI: provide more padding for struct usb_phy
  ANDROID: GKI enable CONFIG_NETFILTER_XT_MATCH_CONNBYTES=y
  FROMGIT: arm64: set __exception_irq_entry with __irq_entry as a default
  ANDROID: GKI: update symbol list file for xiaomi
  ANDROID: Remove all but top-level OWNERS
  ANDROID: Enable GKI Dr. No Enforcement
  ANDROID: 6/16/2023 KMI update
  ANDROID: virt: gunyah: Sync with latest platform ops
  FROMGIT: usb: gadget: udc: core: Prevent soft_connect_store() race
  FROMGIT: usb: gadget: udc: core: Offload usb_udc_vbus_handler processing
  UPSTREAM: Bluetooth: fix debugfs registration
  UPSTREAM: Bluetooth: hci_sync: add lock to protect HCI_UNREGISTER
  UPSTREAM: net/ipv6: fix bool/int mismatch for skip_notify_on_dev_down
  UPSTREAM: neighbour: fix unaligned access to pneigh_entry
  UPSTREAM: tcp: deny tcp_disconnect() when threads are waiting
  ANDROID: sound: usb: Add vendor's hooking interface
  ANDROID: GKI: USB: XHCI: add Android ABI padding to struct xhci_driver_overrides
  ...

Conflicts:
	arch/arm/boot/dts/rk3288.dtsi
	drivers/dma-buf/dma-buf.c
	drivers/gpu/drm/rockchip/rockchip_drm_vop2.c
	drivers/mmc/core/mmc.c
	drivers/pwm/pwm-rockchip.c
	drivers/usb/gadget/udc/core.c
	fs/erofs/data.c
	include/linux/dma-buf.h
	kernel/sched/cpufreq_schedutil.c

According to commit 5dd0547a3e ("UPSTREAM: mm: replace vma->vm_flags direct modifications with modifier calls").
Fixes:
	drivers/gpu/arm/bifrost/mali_kbase_mem_linux.c
	drivers/gpu/arm/mali400/mali/linux/mali_memory.c
	drivers/gpu/arm/mali400/mali/linux/mali_memory_cow.c
	drivers/gpu/arm/midgard/mali_kbase_mem_linux.c
	drivers/misc/rockchip/pcie-rkep.c
	drivers/pci/controller/dwc/pcie-dw-ep-rockchip.c
	drivers/rknpu/rknpu_gem.c
	drivers/spi/spi-rockchip.c

Backport commit 44ee9eef21 ("ANDROID: usb: xhci-plat: Fix double-free in xhci_plat_remove").
Fixes:
	drivers/usb/host/xhci-plat.c

Signed-off-by: Tao Huang <huangtao@rock-chips.com>
Change-Id: I90f59fb8f35d2a0bd2102a2b1a4119115a614f9d
This commit is contained in:
Tao Huang
2023-07-20 20:32:09 +08:00
761 changed files with 60017 additions and 78770 deletions

View File

@@ -12,6 +12,25 @@ package(
],
)
_GKI_AARCH64_MAKE_GOALS = [
"Image",
"Image.lz4",
"Image.gz",
"modules",
]
_GKI_RISCV64_MAKE_GOALS = [
"Image",
"Image.lz4",
"Image.gz",
"modules",
]
_GKI_X86_64_MAKE_GOALS = [
"bzImage",
"modules",
]
filegroup(
name = "aarch64_additional_kmi_symbol_lists",
srcs = [
@@ -19,11 +38,13 @@ filegroup(
"android/abi_gki_aarch64_db845c",
"android/abi_gki_aarch64_exynos",
"android/abi_gki_aarch64_galaxy",
"android/abi_gki_aarch64_honor",
"android/abi_gki_aarch64_imx",
"android/abi_gki_aarch64_mtk",
"android/abi_gki_aarch64_oplus",
"android/abi_gki_aarch64_pixel",
"android/abi_gki_aarch64_qcom",
"android/abi_gki_aarch64_unisoc",
"android/abi_gki_aarch64_virtual_device",
"android/abi_gki_aarch64_vivo",
"android/abi_gki_aarch64_xiaomi",
@@ -39,10 +60,12 @@ define_common_kernels(target_configs = {
"additional_kmi_symbol_lists": [":aarch64_additional_kmi_symbol_lists"],
"protected_exports_list": "android/abi_gki_protected_exports_aarch64",
"protected_modules_list": "android/gki_aarch64_protected_modules",
"make_goals": _GKI_AARCH64_MAKE_GOALS,
},
"kernel_aarch64_16k": {
"kmi_symbol_list_strict_mode": False,
"module_implicit_outs": COMMON_GKI_MODULES_LIST,
"make_goals": _GKI_AARCH64_MAKE_GOALS,
},
"kernel_aarch64_debug": {
"kmi_symbol_list_strict_mode": False,
@@ -51,22 +74,26 @@ define_common_kernels(target_configs = {
"additional_kmi_symbol_lists": [":aarch64_additional_kmi_symbol_lists"],
"protected_exports_list": "android/abi_gki_protected_exports_aarch64",
"protected_modules_list": "android/gki_aarch64_protected_modules",
"make_goals": _GKI_AARCH64_MAKE_GOALS,
},
"kernel_riscv64": {
"kmi_symbol_list_strict_mode": False,
"module_implicit_outs": COMMON_GKI_MODULES_LIST,
"make_goals": _GKI_RISCV64_MAKE_GOALS,
},
"kernel_x86_64": {
"kmi_symbol_list_strict_mode": False,
"module_implicit_outs": COMMON_GKI_MODULES_LIST,
"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,
"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,
},
})
@@ -79,6 +106,12 @@ define_db845c(
],
define_abi_targets = True,
kmi_symbol_list = "//common:android/abi_gki_aarch64_db845c",
make_goals = [
"modules",
"qcom/sdm845-db845c.dtb",
"qcom/qrb5165-rb5.dtb",
"qcom/sm8450-qrd.dtb",
],
module_outs = [
# keep sorted
"crypto/michael_mic.ko",
@@ -229,10 +262,12 @@ define_db845c(
"drivers/usb/typec/qcom-pmic-typec.ko",
"drivers/watchdog/pm8916_wdt.ko",
"drivers/watchdog/qcom-wdt.ko",
"net/mac80211/mac80211.ko",
"net/qrtr/qrtr.ko",
"net/qrtr/qrtr-mhi.ko",
"net/qrtr/qrtr-smd.ko",
"net/qrtr/qrtr-tun.ko",
"net/wireless/cfg80211.ko",
"sound/soc/codecs/snd-soc-dmic.ko",
"sound/soc/codecs/snd-soc-hdmi-codec.ko",
"sound/soc/codecs/snd-soc-lpass-macro-common.ko",
@@ -280,6 +315,11 @@ kernel_build(
],
build_config = "build.config.rockpi4",
dtstree = "//common-modules/virtual-device:rockpi4_dts",
make_goals = [
"Image",
"modules",
"rk3399-rock-pi-4b.dtb",
],
module_outs = COMMON_GKI_MODULES_LIST + [
# keep sorted
"drivers/block/virtio_blk.ko",

View File

@@ -1 +0,0 @@
per-file sysfs-fs-f2fs=file:/fs/f2fs/OWNERS

View File

@@ -264,6 +264,16 @@ Description:
attached to the port will not be detected, initialized,
or enumerated.
What: /sys/bus/usb/devices/.../<hub_interface>/port<X>/state
Date: June 2023
Contact: Roy Luo <royluo@google.com>
Description:
Indicates current state of the USB device attached to the port.
Valid states are: 'not-attached', 'attached', 'powered',
'reconnecting', 'unauthenticated', 'default', 'addressed',
'configured', and 'suspended'. This file supports poll() to
monitor the state change from user space.
What: /sys/bus/usb/devices/.../power/usb2_lpm_l1_timeout
Date: May 2013
Contact: Mathias Nyman <mathias.nyman@linux.intel.com>

View File

@@ -1 +0,0 @@
per-file f2fs**=file:/fs/f2fs/OWNERS

View File

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

View File

@@ -273,7 +273,9 @@ of the luma plane.
.. _V4L2-PIX-FMT-NV12-16L16:
.. _V4L2-PIX-FMT-NV12-32L32:
.. _V4L2-PIX-FMT-NV12M-8L128:
.. _V4L2-PIX-FMT-NV12-8L128:
.. _V4L2-PIX-FMT-NV12M-10BE-8L128:
.. _V4L2-PIX-FMT-NV12-10BE-8L128:
.. _V4L2-PIX-FMT-MM21:
Tiled NV12
@@ -319,6 +321,9 @@ pixels in 2D 8x128 tiles, and stores tiles linearly in memory.
The image height must be aligned to a multiple of 128.
The layouts of the luma and chroma planes are identical.
``V4L2_PIX_FMT_NV12_8L128`` is similar to ``V4L2_PIX_FMT_NV12M_8L128`` but stores
two planes in one memory.
``V4L2_PIX_FMT_NV12M_10BE_8L128`` is similar to ``V4L2_PIX_FMT_NV12M`` but stores
10 bits pixels in 2D 8x128 tiles, and stores tiles linearly in memory.
the data is arranged in big endian order.
@@ -334,6 +339,9 @@ byte 2: Y1(bits 3-0) Y2(bits 9-6)
byte 3: Y2(bits 5-0) Y3(bits 9-8)
byte 4: Y3(bits 7-0)
``V4L2_PIX_FMT_NV12_10BE_8L128`` is similar to ``V4L2_PIX_FMT_NV12M_10BE_8L128`` but stores
two planes in one memory.
``V4L2_PIX_FMT_MM21`` store luma pixel in 16x32 tiles, and chroma pixels
in 16x16 tiles. The line stride must be aligned to a multiple of 16 and the
image height must be aligned to a multiple of 32. The number of luma and chroma

View File

@@ -7,14 +7,12 @@ Virtual Machine Manager
The Gunyah Virtual Machine Manager is a Linux driver to support launching
virtual machines using Gunyah.
Except for some basic information about the location of initial binaries,
most of the configuration about a Gunyah virtual machine is described in the
VM's devicetree. The devicetree is generated by userspace. Interacting with the
virtual machine is still done via the kernel and VM configuration requires some
of the corresponding functionality to be set up in the kernel. For instance,
sharing userspace memory with a VM is done via the GH_VM_SET_USER_MEM_REGION
ioctl. The VM itself is configured to use the memory region via the
devicetree.
Configuration of a Gunyah virtual machine is done via a devicetree. When the VM
is launched, memory is provided by the host VM which contains the devictree.
Gunyah reads the devicetree to configure the memory map and create resources
such as vCPUs for the VM. Memory can be shared with the VM with
`GH_VM_SET_USER_MEM_REGION`_. Userspace can interact with the resources in Linux
by adding "functions" to the VM.
Gunyah Functions
================
@@ -22,13 +20,13 @@ Gunyah Functions
Components of a Gunyah VM's configuration that need kernel configuration are
called "functions" and are built on top of a framework. Functions are identified
by a string and have some argument(s) to configure them. They are typically
created by the `GH_VM_ADD_FUNCTION` ioctl.
created by the `GH_VM_ADD_FUNCTION`_ ioctl.
Functions typically will always do at least one of these operations:
1. Create resource ticket(s). Resource tickets allow a function to register
itself as the client for a Gunyah resource (e.g. doorbell or vCPU) and
the function is given the pointer to the `struct gh_resource` when the
the function is given the pointer to the &struct gh_resource when the
VM is starting.
2. Register IO handler(s). IO handlers allow a function to handle stage-2 faults
@@ -46,7 +44,7 @@ IOCTLs and userspace VMM flows
The kernel exposes a char device interface at /dev/gunyah.
To create a VM, use the GH_CREATE_VM ioctl. A successful call will return a
To create a VM, use the `GH_CREATE_VM`_ ioctl. A successful call will return a
"Gunyah VM" file descriptor.
/dev/gunyah API Descriptions
@@ -56,6 +54,9 @@ GH_CREATE_VM
~~~~~~~~~~~~
Creates a Gunyah VM. The argument is reserved for future use and must be 0.
A successful call will return a Gunyah VM file descriptor. See
`Gunyah VM API Descriptions`_ for list of IOCTLs that can be made on this file
file descriptor.
Gunyah VM API Descriptions
--------------------------
@@ -70,33 +71,24 @@ unique per virtual machine.
While VMM is guest-agnostic and allows runtime addition of memory regions,
Linux guest virtual machines do not support accepting memory regions at runtime.
Thus, memory regions should be provided before starting the VM and the VM must
be configured to accept these at boot-up.
Thus, for Linux guests, memory regions should be provided before starting the VM
and the VM must be configured via the devicetree to accept these at boot-up.
The guest physical address is used by Linux kernel to check that the requested
user regions do not overlap and to help find the corresponding memory region
for calls like GH_VM_SET_DTB_CONFIG. It must be page aligned.
for calls like `GH_VM_SET_DTB_CONFIG`_. It must be page aligned.
memory_size and userspace_addr must be page-aligned.
The flags field of gh_userspace_memory_region accepts the following bits. All
other bits must be 0 and are reserved for future use. The ioctl will return
-EINVAL if an unsupported bit is detected.
- GH_MEM_ALLOW_READ/GH_MEM_ALLOW_WRITE/GH_MEM_ALLOW_EXEC sets read/write/exec
permissions for the guest, respectively.
To add a memory region, call GH_VM_SET_USER_MEM_REGION with fields set as
To add a memory region, call `GH_VM_SET_USER_MEM_REGION`_ with fields set as
described above.
.. kernel-doc:: include/uapi/linux/gunyah.h
:identifiers: gh_userspace_memory_region
:identifiers: gh_userspace_memory_region gh_mem_flags
GH_VM_SET_DTB_CONFIG
~~~~~~~~~~~~~~~~~~~~
This ioctl sets the location of the VM's devicetree blob and is used by Gunyah
Resource Manager to allocate resources. The guest physical memory should be part
Resource Manager to allocate resources. The guest physical memory must be part
of the primary memory parcel provided to the VM prior to GH_VM_START.
.. kernel-doc:: include/uapi/linux/gunyah.h
@@ -111,20 +103,20 @@ GH_VM_ADD_FUNCTION
~~~~~~~~~~~~~~~~~~
This ioctl registers a Gunyah VM function with the VM manager. The VM function
is described with a `type` string and some arguments for that type. Typically,
the function is added before the VM starts, but the function doesn't "operate"
until the VM starts with GH_VM_START: e.g. vCPU ioclts will all return an error
until the VM starts because the vCPUs don't exist until the VM is started. This
allows the VMM to set up all the kernel functionality needed for the VM *before*
the VM starts.
is described with a &struct gh_fn_desc.type and some arguments for that type.
Typically, the function is added before the VM starts, but the function doesn't
"operate" until the VM starts with `GH_VM_START`_. For example, vCPU ioctls will
all return an error until the VM starts because the vCPUs don't exist until the
VM is started. This allows the VMM to set up all the kernel functions needed for
the VM *before* the VM starts.
.. kernel-doc:: include/uapi/linux/gunyah.h
:identifiers: gh_fn_desc
:identifiers: gh_fn_desc gh_fn_type
The possible types are documented below:
The argument types are documented below:
.. kernel-doc:: include/uapi/linux/gunyah.h
:identifiers: GH_FN_VCPU gh_fn_vcpu_arg GH_FN_IRQFD gh_fn_irqfd_arg GH_FN_IOEVENTFD gh_fn_ioeventfd_arg
:identifiers: gh_fn_vcpu_arg gh_fn_irqfd_arg gh_irqfd_flags gh_fn_ioeventfd_arg gh_ioeventfd_flags
Gunyah VCPU API Descriptions
----------------------------
@@ -137,15 +129,15 @@ GH_VCPU_RUN
This ioctl is used to run a guest virtual cpu. While there are no
explicit parameters, there is an implicit parameter block that can be
obtained by mmap()ing the vcpu fd at offset 0, with the size given by
GH_VCPU_MMAP_SIZE. The parameter block is formatted as a 'struct
`GH_VCPU_MMAP_SIZE`_. The parameter block is formatted as a 'struct
gh_vcpu_run' (see below).
GH_VCPU_MMAP_SIZE
~~~~~~~~~~~~~~~~~
The GH_VCPU_RUN ioctl communicates with userspace via a shared
The `GH_VCPU_RUN`_ ioctl communicates with userspace via a shared
memory region. This ioctl returns the size of that region. See the
GH_VCPU_RUN documentation for details.
`GH_VCPU_RUN`_ documentation for details.
.. kernel-doc:: include/uapi/linux/gunyah.h
:identifiers: gh_vcpu_run gh_vm_exit_info
:identifiers: gh_vcpu_exit gh_vcpu_run gh_vm_status gh_vm_exit_info

View File

@@ -1001,8 +1001,10 @@ LDFLAGS_vmlinux += --gc-sections
endif
ifdef CONFIG_SHADOW_CALL_STACK
ifndef CONFIG_DYNAMIC_SCS
CC_FLAGS_SCS := -fsanitize=shadow-call-stack
KBUILD_CFLAGS += $(CC_FLAGS_SCS)
endif
export CC_FLAGS_SCS
endif

23
OWNERS
View File

@@ -1,13 +1,12 @@
# The full list of approvers is defined in
# https://android.googlesource.com/kernel/common/+/refs/meta/config/OWNERS
set noparent
# The following OWNERS are defined at the top level to improve the OWNERS
# suggestions through any user interface. Consider those people the ones that
# can help with finding the best person to review.
adelva@google.com
gregkh@google.com
maennich@google.com
saravanak@google.com
smuckle@google.com
surenb@google.com
tkjos@google.com
# GKI Dr. No Enforcement is active on this branch. Approval of one of the Dr.
# No reviewers is required following a regular CodeReview+2 vote of a code
# reviewer.
#
# See the GKI release documentation (go/gki-dr-no) for further details.
#
# The expanded list of reviewers can be found at:
# https://android.googlesource.com/kernel/common/+/android-mainline/OWNERS_DrNo
include kernel/common:android-mainline:/OWNERS_DrNo

View File

@@ -1,13 +0,0 @@
# If we ever add another OWNERS above this directory, it's likely to be
# more permissive, so don't inherit from it
set noparent
include kernel/common:android-mainline:/OWNERS_DrNo
# Downstream boards maintained directly in this manifest branch
per-file abi_gki_aarch64_cuttlefish = adelva@google.com, rammuthiah@google.com
per-file abi_gki_aarch64_goldfish = rkir@google.com
# per-file for review purposes
per-file gki_system_dlkm_modules = ramjiyani@google.com
per-file abi_gki_protected_exports = ramjiyani@google.com
per-file gki_protected_modules = ramjiyani@google.com

File diff suppressed because it is too large Load Diff

View File

@@ -2,6 +2,7 @@
# commonly used symbols
add_uevent_var
alloc_io_pgtable_ops
__alloc_skb
alloc_workqueue
alt_cb_patch_nops
__arch_copy_from_user
@@ -19,8 +20,11 @@
bpf_trace_run3
bpf_trace_run4
bpf_trace_run5
bpf_trace_run6
bpf_trace_run8
bus_register
bus_unregister
call_rcu
cancel_delayed_work
cancel_delayed_work_sync
cancel_work_sync
@@ -28,15 +32,9 @@
cdev_device_add
cdev_device_del
cdev_init
__cfg80211_alloc_event_skb
__cfg80211_alloc_reply_skb
cfg80211_find_elem_match
cfg80211_find_vendor_elem
cfg80211_get_bss
cfg80211_put_bss
__cfg80211_send_event_skb
cfg80211_vendor_cmd_reply
__check_object_size
__class_register
class_unregister
clk_bulk_disable
clk_bulk_enable
clk_bulk_prepare
@@ -66,6 +64,14 @@
cpu_hwcaps
cpu_number
__cpu_online_mask
__cpu_possible_mask
crc32_le
crypto_alloc_shash
crypto_destroy_tfm
crypto_shash_setkey
crypto_shash_update
csum_partial
_ctype
debugfs_create_dir
debugfs_create_file
debugfs_create_u32
@@ -73,14 +79,18 @@
debugfs_remove
default_llseek
delayed_work_timer_fn
del_timer
del_timer_sync
destroy_workqueue
dev_close
dev_coredumpv
dev_driver_string
_dev_err
dev_err_probe
dev_fwnode
dev_get_regmap
device_add
device_del
device_for_each_child
device_get_mac_address
device_get_match_data
@@ -174,6 +184,7 @@
dev_pm_opp_set_opp
dev_pm_opp_set_rate
dev_pm_set_wake_irq
_dev_printk
dev_set_name
dev_set_threaded
_dev_warn
@@ -244,13 +255,16 @@
drm_mode_vrefresh
drm_printf
enable_irq
eth_type_trans
_find_first_bit
_find_first_zero_bit
_find_next_bit
_find_next_zero_bit
finish_wait
firmware_request_nowarn
flush_delayed_work
flush_work
__flush_workqueue
fortify_panic
free_io_pgtable_ops
free_irq
@@ -258,6 +272,7 @@
fwnode_property_present
fwnode_property_read_string
fwnode_property_read_u32_array
gcd
generic_handle_domain_irq
generic_handle_irq
geni_icc_disable
@@ -324,44 +339,12 @@
idr_for_each
idr_get_next
idr_remove
ieee80211_alloc_hw_nm
ieee80211_beacon_cntdwn_is_complete
ieee80211_beacon_get_template
ieee80211_beacon_loss
ieee80211_beacon_update_cntdwn
ieee80211_bss_get_elem
ieee80211_channel_to_freq_khz
ieee80211_connection_loss
ieee80211_csa_finish
ieee80211_find_sta
ieee80211_find_sta_by_ifaddr
ieee80211_free_hw
ieee80211_free_txskb
ieee80211_get_channel_khz
ieee80211_hdrlen
ieee80211_iterate_active_interfaces_atomic
ieee80211_iterate_stations_atomic
ieee80211_iter_chan_contexts_atomic
ieee80211_queue_delayed_work
ieee80211_queue_work
ieee80211_radar_detected
ieee80211_ready_on_channel
ieee80211_register_hw
ieee80211_remain_on_channel_expired
ieee80211_report_low_ack
ieee80211_restart_hw
ieee80211_rx_napi
ieee80211_scan_completed
ieee80211_stop_queues
ieee80211_tx_status_ext
ieee80211_tx_status_irqsafe
ieee80211_unregister_hw
ieee80211_wake_queues
iio_read_channel_processed
init_dummy_netdev
init_net
__init_swait_queue_head
init_timer_key
init_uts_ns
init_wait_entry
__init_waitqueue_head
iomem_resource
@@ -413,6 +396,7 @@
kernel_sendmsg
kfree
kfree_const
kfree_sensitive
kfree_skb_reason
kimage_voffset
__kmalloc
@@ -433,6 +417,9 @@
ktime_get_mono_fast_ns
ktime_get_real_ts64
ktime_get_with_offset
kvfree
kvfree_call_rcu
kvmalloc_node
__list_add_valid
__list_del_entry_valid
__local_bh_enable_ip
@@ -470,8 +457,13 @@
__napi_schedule
napi_schedule_prep
__netdev_alloc_skb
netdev_err
netdev_info
netif_napi_add_weight
__netif_napi_del
netif_rx
netif_tx_wake_queue
net_ratelimit
__nla_parse
nla_put
nr_cpu_ids
@@ -522,8 +514,10 @@
of_property_read_u32_index
of_property_read_variable_u32_array
of_property_read_variable_u8_array
of_prop_next_u32
of_reserved_mem_lookup
param_ops_bool
param_ops_charp
param_ops_int
param_ops_uint
pci_clear_master
@@ -607,6 +601,7 @@
_raw_write_lock_irq
_raw_write_unlock_bh
_raw_write_unlock_irq
rcu_barrier
__rcu_read_lock
__rcu_read_unlock
rdev_get_drvdata
@@ -614,6 +609,7 @@
regcache_cache_only
regcache_mark_dirty
regcache_sync
register_netdevice_notifier
register_reboot_notifier
__register_rpmsg_driver
regmap_bulk_read
@@ -653,6 +649,11 @@
__reset_control_get
reset_control_put
reset_control_reset
rhashtable_insert_slow
__rht_bucket_nested
rht_bucket_nested
rht_bucket_nested_insert
round_jiffies_up
rpmsg_register_device
rpmsg_register_device_override
rpmsg_send
@@ -665,6 +666,9 @@
rproc_del
rproc_free
rproc_remove_subdev
rtnl_is_locked
rtnl_lock
rtnl_unlock
sched_set_fifo_low
schedule
schedule_timeout
@@ -681,10 +685,15 @@
simple_read_from_buffer
single_open
single_release
skb_clone
skb_copy
skb_copy_bits
skb_dequeue
__skb_get_hash
skb_pull
skb_push
skb_put
skb_queue_head
skb_queue_purge
skb_queue_tail
skb_trim
@@ -759,11 +768,13 @@
sysfs_create_link
sysfs_emit
sysfs_remove_link
system_power_efficient_wq
system_wq
tasklet_init
tasklet_kill
__tasklet_schedule
tasklet_setup
tasklet_unlock_wait
thermal_cooling_device_register
thermal_cooling_device_unregister
thermal_zone_device_update
@@ -777,9 +788,12 @@
__trace_trigger_soft_disabled
__udelay
unregister_chrdev_region
unregister_netdevice_notifier
unregister_netdevice_queue
unregister_reboot_notifier
unregister_rpmsg_driver
usb_disabled
__usecs_to_jiffies
usleep_range_state
v4l2_ctrl_handler_free
v4l2_ctrl_handler_init_class
@@ -833,7 +847,6 @@
wake_up_process
__warn_printk
watchdog_init_timeout
wiphy_to_ieee80211_hw
__xa_alloc
xa_erase
xa_find
@@ -863,44 +876,15 @@
platform_irq_count
report_iommu_fault
# required by ath.ko
freq_reg_info
reg_initiator_name
wiphy_apply_custom_regulatory
# required by ath10k_core.ko
cfg80211_calculate_bitrate
cpu_latency_qos_add_request
cpu_latency_qos_remove_request
crc32_le
guid_gen
ieee80211_beacon_get_tim
ieee80211_hw_restart_disconnect
ieee80211_manage_rx_ba_offl
ieee80211_next_txq
ieee80211_proberesp_get
__ieee80211_schedule_txq
ieee80211_sta_register_airtime
ieee80211_stop_queue
ieee80211_tdls_oper_request
ieee80211_tx_dequeue
ieee80211_txq_get_depth
ieee80211_txq_may_transmit
ieee80211_txq_schedule_start
ieee80211_tx_rate_update
ieee80211_wake_queue
init_uts_ns
__kfifo_alloc
__kfifo_free
param_ops_ulong
regulatory_hint
rfc1042_header
skb_copy
skb_dequeue_tail
skb_queue_head
skb_realloc_headroom
wiphy_read_of_freq_limits
wiphy_rfkill_set_hw_state_reason
# required by ath10k_pci.ko
pci_disable_msi
@@ -908,29 +892,11 @@
pci_write_config_dword
# required by ath11k.ko
crypto_alloc_shash
crypto_destroy_tfm
crypto_shash_final
crypto_shash_setkey
crypto_shash_update
ieee80211_color_change_finish
ieee80211_freq_khz_to_channel
ieee80211_get_fils_discovery_tmpl
ieee80211_get_hdrlen_from_skb
ieee80211_get_unsol_bcast_probe_resp_tmpl
ieee80211_gtk_rekey_notify
ieee80211_tx_status
ieeee80211_obss_color_collision_notify
__ipv6_addr_type
memcpy_and_pad
regulatory_set_wiphy_regd
rhashtable_destroy
rhashtable_init
rhashtable_insert_slow
__rht_bucket_nested
rht_bucket_nested
rht_bucket_nested_insert
__skb_get_hash
# required by ath11k_ahb.ko
dma_map_resource
@@ -956,6 +922,57 @@
pm_runtime_irq_safe
vchan_find_desc
# required by cfg80211.ko
bpf_trace_run10
bpf_trace_run7
debugfs_rename
__dev_change_net_namespace
__dev_get_by_index
dev_get_by_index
device_rename
do_trace_netlink_extack
genlmsg_multicast_allns
genlmsg_put
genl_register_family
genl_unregister_family
get_net_ns_by_fd
get_net_ns_by_pid
inet_csk_get_port
key_create_or_update
key_put
keyring_alloc
ktime_get_coarse_with_offset
memcmp
netlink_broadcast
netlink_register_notifier
netlink_unicast
netlink_unregister_notifier
net_ns_type_operations
nla_find
nla_memcpy
nla_put_64bit
nla_reserve
__nla_validate
__put_net
rb_erase
rb_insert_color
register_netdevice
register_pernet_device
request_firmware_nowait
rfkill_alloc
rfkill_blocked
rfkill_destroy
rfkill_register
rfkill_resume_polling
rfkill_set_hw_state_reason
rfkill_unregister
skb_add_rx_frag
__sock_create
trace_print_array_seq
unregister_pernet_device
verify_pkcs7_signature
wireless_nlevent_flush
# required by clk-qcom.ko
__clk_determine_rate
clk_fixed_factor_ops
@@ -969,7 +986,6 @@
__clk_mux_determine_rate_closest
divider_ro_round_rate_parent
of_find_node_opts_by_path
of_prop_next_u32
pm_genpd_remove_subdomain
# required by clk-rpmh.ko
@@ -1003,7 +1019,6 @@
# required by drm_display_helper.ko
devm_backlight_device_register
_dev_printk
drm_atomic_get_connector_state
drm_atomic_get_crtc_state
drm_atomic_get_new_private_obj_state
@@ -1031,7 +1046,6 @@
devm_extcon_dev_register
extcon_set_state_sync
gpiod_set_debounce
system_power_efficient_wq
# required by fastrpc.ko
dma_buf_attach
@@ -1043,6 +1057,7 @@
dma_buf_unmap_attachment
dma_get_sgtable_attrs
down_read
down_write
find_vma
__mmap_lock_do_trace_acquire_returned
__mmap_lock_do_trace_released
@@ -1054,6 +1069,7 @@
__tracepoint_mmap_lock_released
__tracepoint_mmap_lock_start_locking
up_read
up_write
# required by gpi.ko
krealloc
@@ -1066,7 +1082,6 @@
gpiod_get_optional
# required by gpu-sched.ko
call_rcu
dma_fence_add_callback
dma_fence_remove_callback
dma_resv_iter_first
@@ -1077,7 +1092,6 @@
kmem_cache_free
kthread_parkme
kthread_should_park
rcu_barrier
wait_for_completion
xa_destroy
xa_store
@@ -1123,9 +1137,6 @@
i2c_get_dma_safe_msg_buf
i2c_put_dma_safe_msg_buf
# required by i2c-qup.ko
__usecs_to_jiffies
# required by i2c-rk3x.ko
clk_notifier_register
clk_notifier_unregister
@@ -1163,6 +1174,71 @@
pm_clk_resume
pm_clk_suspend
# required by mac80211.ko
alloc_netdev_mqs
__alloc_percpu_gfp
arc4_crypt
arc4_setkey
bitmap_free
bitmap_zalloc
crc32_be
crypto_aead_decrypt
crypto_aead_encrypt
crypto_aead_setauthsize
crypto_aead_setkey
crypto_alloc_aead
crypto_alloc_skcipher
__crypto_memneq
crypto_shash_digest
crypto_shash_finup
crypto_skcipher_decrypt
crypto_skcipher_encrypt
crypto_skcipher_setkey
__crypto_xor
dev_addr_mod
dev_alloc_name
dev_fetch_sw_netstats
__dev_queue_xmit
ether_setup
eth_mac_addr
ethtool_op_get_link
free_netdev
free_percpu
get_random_u16
__hw_addr_init
__hw_addr_sync
__hw_addr_unsync
kernel_param_lock
kernel_param_unlock
kfree_skb_list_reason
ktime_get_seconds
napi_gro_receive
netdev_set_default_ethtool_ops
netif_carrier_off
netif_carrier_on
netif_receive_skb
netif_receive_skb_list
netif_tx_stop_all_queues
__per_cpu_offset
___pskb_trim
register_inet6addr_notifier
register_inetaddr_notifier
rhashtable_free_and_destroy
rhltable_init
round_jiffies
round_jiffies_relative
sg_init_one
skb_checksum_help
skb_clone_sk
skb_complete_wifi_ack
skb_copy_expand
skb_ensure_writable
__skb_gso_segment
system_freezable_wq
unregister_inet6addr_notifier
unregister_inetaddr_notifier
unregister_netdevice_many
# required by mcp251xfd.ko
alloc_candev_mqs
alloc_can_err_skb
@@ -1189,14 +1265,10 @@
dql_completed
dql_reset
free_candev
netdev_err
netdev_info
netdev_notice
netdev_printk
netdev_warn
netif_schedule_queue
netif_tx_wake_queue
net_ratelimit
open_candev
register_candev
regmap_get_val_bytes
@@ -1214,8 +1286,6 @@
__vmalloc
# required by mhi.ko
device_add
device_del
get_random_u32
pm_wakeup_dev_event
_raw_read_lock_irq
@@ -1230,8 +1300,6 @@
# required by msm.ko
__bitmap_andnot
bpf_trace_run6
bpf_trace_run8
clk_get_parent
component_add
component_bind_all
@@ -1240,14 +1308,12 @@
component_master_add_with_match
component_master_del
component_unbind_all
_ctype
debugfs_attr_read
debugfs_attr_write
debugfs_create_bool
debugfs_create_file_unsafe
debugfs_create_u64
debugfs_create_x64
del_timer
dev_coredumpm
devfreq_cooling_unregister
devfreq_recommended_opp
@@ -1430,7 +1496,6 @@
drm_writeback_queue_job
drm_writeback_signal_completion
fd_install
__flush_workqueue
get_pid_task
get_unused_fd_flags
gpiod_get_value
@@ -1448,8 +1513,6 @@
kthread_create_worker
kthread_destroy_worker
kthread_queue_work
kvfree
kvmalloc_node
memdup_user_nul
memparse
mipi_dsi_create_packet
@@ -1467,7 +1530,6 @@
of_graph_get_next_endpoint
of_graph_get_remote_port_parent
of_icc_get
param_ops_charp
param_ops_ullong
phy_calibrate
phy_configure
@@ -1479,7 +1541,6 @@
register_shrinker
register_vmap_purge_notifier
reservation_ww_class
round_jiffies_up
sched_set_fifo
schedule_timeout_interruptible
__sg_page_iter_dma_next
@@ -1632,7 +1693,6 @@
cpufreq_get_driver_data
cpufreq_register_driver
cpufreq_unregister_driver
__cpu_possible_mask
dev_pm_opp_adjust_voltage
dev_pm_opp_disable
dev_pm_opp_enable
@@ -1762,7 +1822,6 @@
_copy_to_iter
# required by qrtr.ko
__alloc_skb
autoremove_wake_function
datagram_poll
do_wait_intr_irq
@@ -1781,8 +1840,6 @@
refcount_dec_and_mutex_lock
release_sock
sk_alloc
skb_clone
skb_copy_bits
skb_copy_datagram_iter
skb_free_datagram
__skb_pad
@@ -1812,8 +1869,6 @@
# required by rmtfs_mem.ko
alloc_chrdev_region
__class_register
class_unregister
# required by rpmsg_ns.ko
rpmsg_create_channel
@@ -1896,9 +1951,6 @@
snd_soc_of_parse_card_name
snd_soc_of_parse_pin_switches
# required by snd-soc-rl6231.ko
gcd
# required by snd-soc-rt5663.ko
regcache_cache_bypass
snd_soc_dapm_disable_pin
@@ -1951,7 +2003,6 @@
spi_delay_exec
spi_finalize_current_message
spi_get_next_queued_message
tasklet_unlock_wait
# required by spi-qcom-qspi.ko
icc_disable
@@ -1994,7 +2045,7 @@
ufshcd_init_pwr_dev_param
ufshcd_mcq_config_esi
ufshcd_mcq_enable_esi
ufshcd_mcq_poll_cqe_nolock
ufshcd_mcq_poll_cqe_lock
ufshcd_mcq_write_cqis
ufshcd_pltfrm_init
ufshcd_pltfrm_shutdown
@@ -2052,3 +2103,4 @@
fwnode_get_name
icc_provider_add
icc_provider_del
ufshcd_mcq_poll_cqe_nolock

View File

@@ -48,6 +48,7 @@
bpf_trace_run5
bpf_trace_run6
bpf_trace_run7
bpf_trace_run8
bpf_trace_run9
bus_register
bus_unregister
@@ -86,6 +87,7 @@
config_group_init_type_name
console_suspend_enabled
__const_udelay
consume_skb
__copy_overflow
__cpu_active_mask
cpu_bit_bitmap
@@ -244,7 +246,6 @@
dma_unmap_resource
dma_unmap_sg_attrs
do_wait_intr
down_read
down_write
d_path
driver_unregister
@@ -268,6 +269,7 @@
drm_crtc_add_crc_entry
__drm_crtc_commit_free
drm_crtc_send_vblank_event
drm_crtc_vblank_count
drm_crtc_vblank_off
drm_crtc_vblank_on
drm_crtc_vblank_put
@@ -318,6 +320,7 @@
drm_vblank_init
dump_stack
enable_irq
eth_type_trans
fd_install
_find_first_bit
_find_last_bit
@@ -337,8 +340,13 @@
__free_pages
free_pages
freq_qos_update_request
gcd
generic_file_llseek
generic_handle_irq
genlmsg_multicast_allns
genlmsg_put
genl_register_family
genl_unregister_family
gen_pool_add_owner
gen_pool_alloc_algo_owner
gen_pool_avail
@@ -399,6 +407,7 @@
idr_alloc
idr_remove
init_dummy_netdev
init_net
__init_rwsem
__init_swait_queue_head
init_task
@@ -503,6 +512,7 @@
log_write_mmio
loops_per_jiffy
memchr
memcmp
memcpy
__memcpy_fromio
__memcpy_toio
@@ -516,7 +526,6 @@
mipi_dsi_dcs_set_display_brightness
misc_deregister
misc_register
mmput
mod_delayed_work_on
mod_timer
module_layout
@@ -529,6 +538,7 @@
mutex_lock_interruptible
mutex_trylock
mutex_unlock
names_cachep
napi_complete_done
napi_enable
napi_gro_receive
@@ -537,8 +547,11 @@
__netdev_alloc_skb
netif_napi_add_weight
netif_receive_skb
netif_rx
netif_tx_wake_queue
nla_memcpy
nla_put
nla_reserve
noop_llseek
nr_cpu_ids
nsecs_to_jiffies
@@ -604,6 +617,7 @@
param_set_ulong
pci_alloc_irq_vectors_affinity
pci_clear_master
pcie_get_mps
pci_free_irq_vectors
pci_irq_vector
pci_load_saved_state
@@ -681,10 +695,12 @@
_raw_read_lock
_raw_read_unlock
_raw_spin_lock
_raw_spin_lock_bh
_raw_spin_lock_irq
_raw_spin_lock_irqsave
_raw_spin_trylock
_raw_spin_unlock
_raw_spin_unlock_bh
_raw_spin_unlock_irq
_raw_spin_unlock_irqrestore
_raw_write_lock_irqsave
@@ -704,6 +720,7 @@
__register_chrdev
register_chrdev_region
register_die_notifier
register_netdevice
register_pm_notifier
register_reboot_notifier
register_restart_handler
@@ -731,6 +748,7 @@
remove_proc_entry
request_firmware
request_firmware_direct
request_firmware_nowait
__request_region
request_threaded_irq
rps_needed
@@ -738,6 +756,9 @@
rtc_class_open
rtc_read_time
rtc_time64_to_tm
rtnl_is_locked
rtnl_lock
rtnl_unlock
runqueues
sched_clock
sched_setscheduler_nocheck
@@ -766,6 +787,7 @@
simple_write_to_buffer
single_open
single_release
skb_copy_bits
skb_copy_expand
skb_dequeue
skb_dequeue_tail
@@ -839,7 +861,9 @@
subsys_system_register
__sw_hweight32
__sw_hweight64
__sw_hweight8
sync_file_create
synchronize_net
synchronize_rcu
syscon_regmap_lookup_by_phandle
sysfs_add_file_to_group
@@ -853,6 +877,7 @@
sysfs_notify
sysfs_remove_file_ns
sysfs_remove_group
sysfs_remove_link
system_highpri_wq
system_long_wq
system_state
@@ -879,6 +904,7 @@
__traceiter_android_vh_cpu_idle_exit
__traceiter_android_vh_cpuidle_psci_enter
__traceiter_android_vh_cpuidle_psci_exit
__traceiter_android_vh_show_mem
__traceiter_device_pm_callback_end
__traceiter_device_pm_callback_start
__traceiter_suspend_resume
@@ -886,6 +912,7 @@
__tracepoint_android_vh_cpu_idle_exit
__tracepoint_android_vh_cpuidle_psci_enter
__tracepoint_android_vh_cpuidle_psci_exit
__tracepoint_android_vh_show_mem
__tracepoint_device_pm_callback_end
__tracepoint_device_pm_callback_start
tracepoint_probe_register
@@ -894,10 +921,12 @@
trace_print_array_seq
trace_raw_output_prep
__trace_trigger_soft_disabled
ttm_bo_mmap_obj
__udelay
unpin_user_page
__unregister_chrdev
unregister_chrdev_region
unregister_netdevice_queue
unregister_pm_notifier
unregister_reboot_notifier
up
@@ -935,6 +964,7 @@
v4l2_m2m_get_vq
v4l2_m2m_init
v4l2_m2m_job_finish
v4l2_m2m_mmap
v4l2_m2m_next_buf
v4l2_m2m_poll
v4l2_m2m_qbuf
@@ -983,6 +1013,58 @@
ww_mutex_lock
ww_mutex_unlock
# required by cfg80211.ko
bpf_trace_run10
csum_partial
debugfs_rename
__dev_change_net_namespace
dev_close
__dev_get_by_index
dev_get_by_index
device_add
device_del
device_rename
do_trace_netlink_extack
get_net_ns_by_fd
get_net_ns_by_pid
inet_csk_get_port
init_uts_ns
key_create_or_update
key_put
keyring_alloc
kfree_sensitive
ktime_get_coarse_with_offset
netdev_err
netlink_broadcast
netlink_register_notifier
netlink_unicast
netlink_unregister_notifier
net_ns_type_operations
nla_find
__nla_parse
nla_put_64bit
__nla_validate
__pskb_pull_tail
__put_net
register_netdevice_notifier
register_pernet_device
rfkill_alloc
rfkill_blocked
rfkill_destroy
rfkill_register
rfkill_resume_polling
rfkill_set_hw_state_reason
rfkill_unregister
skb_add_rx_frag
__sock_create
sock_release
__sw_hweight16
system_power_efficient_wq
unregister_netdevice_notifier
unregister_pernet_device
verify_pkcs7_signature
wireless_nlevent_flush
# required by clk_exynos.ko
clk_hw_get_parent
clk_register
@@ -999,8 +1081,8 @@
csum_ipv6_magic
csum_tcpudp_nofold
dev_get_by_name
init_net
__napi_alloc_skb
napi_build_skb
register_netdev
unregister_netdev
@@ -1024,7 +1106,11 @@
__drm_printfn_debug
hdmi_drm_infoframe_init
memchr_inv
__sw_hweight8
# required by drm_ttm_helper.ko
drm_print_bits
ttm_bo_vmap
ttm_bo_vunmap
# required by dss.ko
copy_from_kernel_nofault
@@ -1082,7 +1168,6 @@
balance_push_callback
__bitmap_complement
bpf_trace_run11
bpf_trace_run8
check_preempt_curr
cpufreq_add_update_util_hook
cpufreq_disable_fast_switch
@@ -1200,6 +1285,10 @@
# required by exynos-coresight.ko
cpu_pm_register_notifier
# required by exynos-cpu-profiler.ko
__traceiter_android_rvh_cpufreq_transition
__tracepoint_android_rvh_cpufreq_transition
# required by exynos-cpufreq.ko
cpufreq_freq_transition_begin
cpufreq_freq_transition_end
@@ -1222,6 +1311,7 @@
__tracepoint_ipi_entry
__tracepoint_ipi_exit
__tracepoint_ipi_raise
# required by exynos-drm.ko
class_create_file_ns
component_add
@@ -1231,14 +1321,22 @@
component_master_del
component_match_add_release
component_unbind_all
console_trylock
console_unlock
devm_drm_panel_bridge_add_typed
__do_once_done
__do_once_start
drm_atomic_add_affected_connectors
drm_atomic_add_affected_planes
drm_atomic_bridge_chain_disable
drm_atomic_bridge_chain_enable
drm_atomic_bridge_chain_post_disable
drm_atomic_bridge_chain_pre_enable
drm_atomic_commit
drm_atomic_get_plane_state
__drm_atomic_helper_bridge_duplicate_state
__drm_atomic_helper_bridge_reset
drm_atomic_helper_calc_timestamping_constants
drm_atomic_helper_check_modeset
drm_atomic_helper_check_planes
drm_atomic_helper_check_plane_state
@@ -1279,15 +1377,20 @@
drm_crtc_enable_color_mgmt
drm_crtc_handle_vblank
drm_crtc_vblank_get
drm_dev_has_vblank
drm_display_mode_to_videomode
drm_edid_to_sad
drm_format_info
drm_gem_create_mmap_offset
drm_gem_fb_begin_cpu_access
drm_gem_prime_import_dev
drm_gem_vm_close
drm_gem_vm_open
drm_get_format_info
__drmm_add_action_or_reset
drm_match_cea_mode
__drmm_crtc_alloc_with_planes
__drmm_encoder_alloc
drmm_kmalloc
drm_mode_config_reset
drm_mode_copy
@@ -1319,9 +1422,11 @@
drm_self_refresh_helper_alter_state
drm_send_event_locked
drm_wait_one_vblank
drm_writeback_cleanup_job
drm_writeback_connector_init
drm_writeback_queue_job
get_options
hdmi_drm_infoframe_pack_only
mipi_dsi_create_packet
mipi_dsi_dcs_set_column_address
mipi_dsi_dcs_set_page_address
@@ -1335,6 +1440,7 @@
platform_find_device_by_driver
seq_release
strnchr
v4l2_match_dv_timings
# required by exynos-dsufreq.ko
nsec_to_clock_t
@@ -1360,6 +1466,9 @@
# required by exynos-reboot.ko
pm_power_off
# required by exynos-s2i.ko
smp_call_function_many
# required by exynos-ssld.ko
driver_register
@@ -1417,14 +1526,32 @@
hex_dump_to_buffer
# required by exynos_mpam_policy.ko
current_time
d_add
d_alloc_name
d_make_root
dput
find_task_by_vpid
fs_kobj
get_next_ino
get_tree_single
init_user_ns
kernfs_path_from_node
kill_litter_super
new_inode
register_filesystem
simple_dir_inode_operations
simple_dir_operations
simple_statfs
sysfs_create_mount_point
sysfs_remove_mount_point
__traceiter_android_rvh_sched_fork
__traceiter_android_vh_cgroup_attach
__traceiter_android_vh_is_fpsimd_save
__tracepoint_android_rvh_sched_fork
__tracepoint_android_vh_cgroup_attach
__tracepoint_android_vh_is_fpsimd_save
unregister_filesystem
# required by exynos_thermal_v2.ko
dev_pm_opp_find_freq_exact
@@ -1466,11 +1593,13 @@
# required by fimc-is.ko
clk_hw_get_rate
devm_phy_put
__devm_release_region
down_interruptible
i3c_device_do_priv_xfers
kthread_create_worker
kthread_destroy_worker
kthread_flush_worker
of_alias_get_highest_id
of_find_node_by_phandle
param_set_uint
phy_configure
@@ -1482,6 +1611,7 @@
regulator_get_voltage
regulator_set_voltage
v4l2_device_register_subdev
v4l2_device_set_name
v4l2_device_unregister_subdev
v4l2_subdev_call_wrappers
vb2_mmap
@@ -1591,11 +1721,13 @@
# required by mcDrvModule.ko
crypto_shash_final
crypto_shash_update
down_read
freezer_active
freezing_slow_path
get_zeroed_page
kstrtol_from_user
ktime_get_raw_ts64
mmput
pin_user_pages
__refrigerator
release_pages
@@ -1610,7 +1742,6 @@
# required by mpam_arch.ko
bitmap_alloc
__cpu_present_mask
kobj_sysfs_ops
kstrtou16
on_each_cpu_cond_mask
@@ -1619,12 +1750,15 @@
arch_timer_read_counter
class_find_device
clocks_calc_mult_shift
iio_device_alloc
iio_device_free
__iio_device_register
iio_device_unregister
nonseekable_open
rtc_set_time
rtc_tm_to_time64
sched_setscheduler
sysfs_remove_link
__wake_up_locked_key
__wake_up_sync
# required by npu.ko
@@ -1651,7 +1785,6 @@
# required by pablo-self-tests.ko
debugfs_create_blob
memcmp
# required by panel-samsung-command-ctrl.ko
mipi_dsi_compression_mode
@@ -1684,12 +1817,16 @@
# required by pcie-exynos-rc-core.ko
dw_handle_msi_irq
dw_pcie_host_init
dw_pcie_own_conf_map_bus
dw_pcie_read
dw_pcie_setup_rc
dw_pcie_write
pci_assign_resource
pcie_set_mps
pci_find_bus
pci_find_ext_capability
pci_generic_config_read
pci_generic_config_write
pci_get_device
pci_rescan_bus
platform_get_irq_byname_optional
@@ -1709,23 +1846,6 @@
pin_get_name
platform_get_irq_optional
# required by pl330.ko
amba_driver_register
amba_driver_unregister
cpu_all_bits
dev_err_probe
__devm_reset_control_get
dma_async_device_register
dma_async_device_unregister
dma_async_tx_descriptor_init
dmaengine_unmap_put
dma_get_slave_channel
of_dma_controller_free
of_dma_controller_register
pm_runtime_irq_safe
reset_control_assert
reset_control_deassert
# required by pwm-samsung.ko
of_pwm_xlate_with_flags
pwmchip_add
@@ -1781,6 +1901,23 @@
iommu_group_alloc
iommu_group_set_name
# required by samsung-pdma.ko
amba_driver_register
amba_driver_unregister
cpu_all_bits
dev_err_probe
__devm_reset_control_get
dma_async_device_register
dma_async_device_unregister
dma_async_tx_descriptor_init
dmaengine_unmap_put
dma_get_slave_channel
of_dma_controller_free
of_dma_controller_register
pm_runtime_irq_safe
reset_control_assert
reset_control_deassert
# required by samsung-secure-iova.ko
gen_pool_first_fit_align
@@ -1818,6 +1955,7 @@
# required by scaler.ko
dma_fence_default_wait
sg_nents_for_len
sync_file_get_fence
v4l2_ctrl_handler_setup
v4l2_m2m_try_schedule
@@ -1827,19 +1965,22 @@
crc_ccitt
param_ops_ullong
skb_split
tty_dev_name_to_number
tty_kclose
tty_kopen_exclusive
tty_lock
tty_mode_ioctl
tty_register_ldisc
tty_set_ldisc
tty_set_termios
tty_unlock
tty_unregister_ldisc
# required by scsc_logring.ko
dev_vprintk_emit
vprintk_emit
# required by scsc_mx.ko
genlmsg_multicast_allns
genlmsg_put
genl_register_family
genl_unregister_family
kobject_get
kobject_uevent
@@ -1859,70 +2000,34 @@
_raw_read_unlock_irqrestore
# required by scsc_wlan.ko
__cfg80211_alloc_event_skb
__cfg80211_alloc_reply_skb
cfg80211_chandef_create
cfg80211_chandef_valid
cfg80211_ch_switch_notify
cfg80211_connect_done
cfg80211_conn_failed
cfg80211_del_sta_sinfo
cfg80211_disconnected
cfg80211_external_auth_request
cfg80211_find_elem_match
cfg80211_find_vendor_elem
cfg80211_get_bss
cfg80211_inform_bss_frame_data
cfg80211_mgmt_tx_status_ext
cfg80211_michael_mic_failure
cfg80211_new_sta
cfg80211_put_bss
cfg80211_ready_on_channel
cfg80211_ref_bss
cfg80211_register_netdevice
cfg80211_remain_on_channel_expired
cfg80211_roamed
cfg80211_rx_mgmt_ext
cfg80211_scan_done
cfg80211_sched_scan_results
cfg80211_sched_scan_stopped
__cfg80211_send_event_skb
cfg80211_unregister_wdev
cfg80211_update_owe_info_event
cfg80211_vendor_cmd_reply
consume_skb
arp_tbl
dev_addr_mod
dev_alloc_name
__dev_queue_xmit
down_trylock
dql_completed
dql_reset
dst_release
ether_setup
eth_type_trans
for_each_kernel_tracepoint
ieee80211_channel_to_freq_khz
ieee80211_freq_khz_to_channel
ieee80211_get_channel_khz
in4_pton
in6_pton
ip_route_output_flow
ip_send_check
linkwatch_fire_event
__local_bh_enable_ip
napi_disable
napi_gro_flush
neigh_destroy
neigh_lookup
netif_carrier_off
netif_carrier_on
__netif_napi_del
netif_rx
netif_schedule_queue
netif_tx_stop_all_queues
nla_memcpy
nla_put_nohdr
nla_reserve
_raw_read_lock_bh
_raw_read_unlock_bh
_raw_spin_lock_bh
_raw_spin_unlock_bh
_raw_write_lock
_raw_write_lock_bh
_raw_write_unlock
@@ -1930,24 +2035,12 @@
register_inet6addr_notifier
register_inetaddr_notifier
register_kretprobe
register_netdevice
regulatory_set_wiphy_regd
rtnl_is_locked
rtnl_lock
rtnl_unlock
skb_clone
skb_copy
skb_copy_bits
skb_realloc_headroom
synchronize_net
unregister_inet6addr_notifier
unregister_inetaddr_notifier
unregister_kretprobe
unregister_netdevice_queue
wiphy_free
wiphy_new_nm
wiphy_register
wiphy_unregister
# required by scsi_srpmb.ko
pfn_is_map_memory
@@ -1982,10 +2075,19 @@
devfreq_update_interval
devm_devfreq_unregister_notifier
devm_platform_ioremap_resource_byname
dma_buf_dynamic_attach
dma_buf_move_notify
dma_buf_pin
dma_buf_unpin
dma_fence_array_create
dma_fence_chain_ops
dma_fence_chain_walk
dma_fence_get_status
dma_fence_get_stub
dma_fence_wait_any_timeout
dma_get_required_mask
dma_resv_add_fence
dma_resv_get_fences
dma_resv_get_singleton
dma_resv_iter_first_unlocked
dma_resv_iter_next_unlocked
@@ -1995,8 +2097,12 @@
down_read_killable
down_read_trylock
drain_workqueue
drm_connector_attach_dp_subconnector_property
drm_connector_init_with_ddc
drm_crtc_cleanup
drm_crtc_helper_set_config
drm_crtc_helper_set_mode
drm_crtc_init
drm_crtc_vblank_helper_get_vblank_timestamp
drm_cvt_mode
drm_debugfs_create_files
@@ -2004,6 +2110,7 @@
drm_dev_enter
drm_dev_exit
drm_dev_put
drm_edid_header_is_valid
drm_edid_is_valid
drm_encoder_cleanup
drm_encoder_init
@@ -2013,10 +2120,15 @@
drm_gem_dmabuf_release
drm_gem_dmabuf_vmap
drm_gem_dmabuf_vunmap
drm_gem_prime_export
drm_gem_prime_mmap
drm_handle_vblank
drm_helper_connector_dpms
drm_helper_disable_unused_functions
drm_helper_force_disable_all
drm_helper_hpd_irq_event
drm_is_current_master
drm_kms_helper_is_poll_worker
drm_kms_helper_poll_disable
drm_kms_helper_poll_enable
drm_mm_init
@@ -2025,22 +2137,27 @@
drm_mm_remove_node
drm_mm_takedown
drm_mode_config_cleanup
drm_mode_create_scaling_mode_property
drm_mode_crtc_set_gamma_size
drm_mode_set_crtcinfo
drm_mode_set_name
drm_prime_pages_to_sg
drm_prime_sg_to_dma_addr_array
drm_syncobj_add_point
drm_syncobj_create
drm_syncobj_find
drm_syncobj_find_fence
drm_syncobj_free
drm_syncobj_get_fd
drm_syncobj_get_handle
drm_syncobj_replace_fence
__fdget
_find_first_zero_bit
__folio_put
gcd
get_random_u32
__get_task_comm
handle_simple_irq
i2c_bit_add_bus
ida_destroy
idr_destroy
idr_find
@@ -2050,14 +2167,24 @@
jiffies64_to_msecs
memremap
memunmap
__mmap_lock_do_trace_acquire_returned
__mmap_lock_do_trace_released
__mmap_lock_do_trace_start_locking
mtree_load
mmu_notifier_synchronize
page_pinner_inited
__page_pinner_put_page
param_ops_hexint
pci_assign_unassigned_bus_resources
pci_bus_resource_n
pcie_bandwidth_available
pcie_get_speed_cap
pci_enable_atomic_ops_to_root
pci_enable_pcie_error_reporting
pci_get_domain_bus_and_slot
pci_iomap
pci_iounmap
pci_map_rom
pci_msix_vec_count
pci_release_resource
pci_resize_resource
pci_unmap_rom
pci_write_config_word
perf_pmu_unregister
pid_task
@@ -2076,13 +2203,48 @@
si_meminfo
sysfs_remove_files
__traceiter_gpu_mem_total
__traceiter_mmap_lock_acquire_returned
__traceiter_mmap_lock_released
__traceiter_mmap_lock_start_locking
__tracepoint_gpu_mem_total
__tracepoint_mmap_lock_acquire_returned
__tracepoint_mmap_lock_released
__tracepoint_mmap_lock_start_locking
ttm_bo_eviction_valuable
ttm_bo_init_reserved
ttm_bo_kmap
ttm_bo_kunmap
ttm_bo_lock_delayed_workqueue
ttm_bo_mem_space
ttm_bo_move_accel_cleanup
ttm_bo_move_memcpy
ttm_bo_move_to_lru_tail
ttm_bo_pin
ttm_bo_put
ttm_bo_set_bulk_move
ttm_bo_unlock_delayed_workqueue
ttm_bo_unpin
ttm_bo_validate
ttm_bo_vm_access
ttm_bo_vm_close
ttm_bo_vm_dummy_page
ttm_bo_vm_fault_reserved
ttm_bo_vm_open
ttm_bo_vm_reserve
ttm_device_fini
ttm_device_init
ttm_eu_backoff_reservation
ttm_eu_reserve_buffers
ttm_glob
ttm_lru_bulk_move_tail
ttm_pool_alloc
ttm_pool_debugfs
ttm_pool_free
ttm_range_man_fini_nocheck
ttm_range_man_init_nocheck
ttm_resource_fini
ttm_resource_free
ttm_resource_init
ttm_resource_manager_evict_all
ttm_resource_manager_init
ttm_resource_manager_usage
ttm_sg_tt_init
ttm_tt_fini
vm_get_page_prot
__wake_up_locked
ww_mutex_lock_interruptible
ww_mutex_trylock
@@ -2140,7 +2302,6 @@
pm_runtime_get_if_active
pm_wakeup_dev_event
proc_symlink
request_firmware_nowait
snd_device_free
snd_dma_alloc_dir_pages
snd_dma_free_pages
@@ -2219,8 +2380,12 @@
scsi_done
__traceiter_android_vh_ufs_check_int_errors
__traceiter_android_vh_ufs_compl_command
__traceiter_android_vh_ufs_mcq_abort
__traceiter_android_vh_ufs_use_mcq_hooks
__tracepoint_android_vh_ufs_check_int_errors
__tracepoint_android_vh_ufs_compl_command
__tracepoint_android_vh_ufs_mcq_abort
__tracepoint_android_vh_ufs_use_mcq_hooks
trace_print_symbols_seq
ufshcd_auto_hibern8_update
ufshcd_dme_configure_adapt

View File

@@ -11,10 +11,23 @@
atomic_notifier_chain_unregister
__bitmap_weight
bitmap_zalloc
blkcg_activate_policy
blkcg_deactivate_policy
blkcg_policy_register
blkcg_policy_unregister
blkcg_root
blkdev_get_by_dev
blkdev_get_by_path
blkdev_issue_flush
blkdev_put
blk_mq_sched_mark_restart_hctx
blk_mq_sched_try_insert_merge
blk_mq_sched_try_merge
blk_queue_rq_timeout
blk_req_needs_zone_write_lock
__blk_req_zone_write_lock
__blk_req_zone_write_unlock
blk_stat_enable_accounting
cache_line_size
cancel_delayed_work_sync
__check_object_size
@@ -34,11 +47,13 @@
crypto_comp_compress
crypto_comp_decompress
crypto_destroy_tfm
css_next_descendant_pre
_ctype
debugfs_create_file
debugfs_remove
delayed_work_timer_fn
del_timer
_dev_alert
_dev_err
device_create
device_destroy
@@ -62,6 +77,17 @@
dma_alloc_attrs
dma_free_attrs
down_write
elevator_alloc
elv_bio_merge_ok
elv_rb_add
elv_rb_del
elv_rb_find
elv_rb_former_request
elv_rb_latter_request
elv_register
elv_rqhash_add
elv_rqhash_del
elv_unregister
emergency_restart
file_ra_state_init
file_write_and_wait_range
@@ -120,6 +146,7 @@
kernel_cpustat
kernfs_find_and_get_ns
kfree
__kfree_skb
kimage_vaddr
kimage_voffset
__kmalloc
@@ -160,9 +187,11 @@
mutex_lock
mutex_unlock
name_to_dev_t
netlink_ack
nr_cpu_ids
nsec_to_clock_t
of_address_to_resource
of_css
of_find_compatible_node
of_find_node_opts_by_path
of_find_property
@@ -225,6 +254,7 @@
rtc_time64_to_tm
rtc_tm_to_time64
runqueues
sbitmap_queue_min_shallow_depth
sched_clock
sched_show_task
scnprintf
@@ -237,6 +267,8 @@
simple_strtol
single_open
single_release
skb_copy_ubufs
snd_soc_find_dai
snd_soc_info_volsw_sx
snd_soc_put_volsw_sx
snprintf
@@ -277,23 +309,34 @@
__traceiter_android_rvh_report_bug
__traceiter_android_vh_ipi_stop
__traceiter_android_vh_is_fpsimd_save
__traceiter_android_vh_madvise_pageout_swap_entry
__traceiter_android_vh_madvise_swapin_walk_pmd_entry
__traceiter_android_vh_mutex_wait_finish
__traceiter_android_vh_mutex_wait_start
__traceiter_android_vh_ptype_head
__traceiter_android_vh_rtmutex_wait_finish
__traceiter_android_vh_rtmutex_wait_start
__traceiter_android_vh_rwsem_read_wait_finish
__traceiter_android_vh_rwsem_read_wait_start
__traceiter_android_vh_rwsem_write_wait_finish
__traceiter_android_vh_rwsem_write_wait_start
__traceiter_android_vh_process_madvise_end
__traceiter_android_vh_sched_show_task
__traceiter_android_vh_show_smap
__traceiter_android_vh_smaps_pte_entry
__traceiter_android_vh_try_to_freeze_todo
__traceiter_android_vh_try_to_freeze_todo_unfrozen
__traceiter_android_vh_watchdog_timer_softlockup
__traceiter_android_vh_meminfo_cache_adjust
__traceiter_android_vh_si_mem_available_adjust
__traceiter_android_vh_si_meminfo_adjust
__traceiter_block_rq_insert
__traceiter_console
__traceiter_hrtimer_expire_entry
__traceiter_hrtimer_expire_exit
__traceiter_irq_handler_entry
__traceiter_irq_handler_exit
__traceiter_kfree_skb
__traceiter_sched_switch
__traceiter_workqueue_execute_start
__tracepoint_android_rvh_arm64_serror_panic
@@ -307,23 +350,34 @@
__tracepoint_android_rvh_report_bug
__tracepoint_android_vh_ipi_stop
__tracepoint_android_vh_is_fpsimd_save
__tracepoint_android_vh_madvise_pageout_swap_entry
__tracepoint_android_vh_madvise_swapin_walk_pmd_entry
__tracepoint_android_vh_mutex_wait_finish
__tracepoint_android_vh_mutex_wait_start
__tracepoint_android_vh_ptype_head
__tracepoint_android_vh_rtmutex_wait_finish
__tracepoint_android_vh_rtmutex_wait_start
__tracepoint_android_vh_rwsem_read_wait_finish
__tracepoint_android_vh_rwsem_read_wait_start
__tracepoint_android_vh_rwsem_write_wait_finish
__tracepoint_android_vh_rwsem_write_wait_start
__tracepoint_android_vh_process_madvise_end
__tracepoint_android_vh_sched_show_task
__tracepoint_android_vh_show_smap
__tracepoint_android_vh_smaps_pte_entry
__tracepoint_android_vh_try_to_freeze_todo
__tracepoint_android_vh_try_to_freeze_todo_unfrozen
__tracepoint_android_vh_watchdog_timer_softlockup
__tracepoint_android_vh_meminfo_cache_adjust
__tracepoint_android_vh_si_mem_available_adjust
__tracepoint_android_vh_si_meminfo_adjust
__tracepoint_block_rq_insert
__tracepoint_console
__tracepoint_hrtimer_expire_entry
__tracepoint_hrtimer_expire_exit
__tracepoint_irq_handler_entry
__tracepoint_irq_handler_exit
__tracepoint_kfree_skb
tracepoint_probe_register
tracepoint_probe_unregister
__tracepoint_sched_switch
@@ -334,6 +388,7 @@
unregister_restart_handler
unregister_syscore_ops
up_write
usb_alloc_dev
usb_gstrings_attach
usbnet_get_endpoints
usbnet_link_change

View File

@@ -0,0 +1,17 @@
[abi_symbol_list]
__tracepoint_android_vh_get_page_wmark
__tracepoint_android_vh_page_add_new_anon_rmap
__tracepoint_android_vh_do_shrink_slab
__tracepoint_android_vh_shrink_slab_bypass
__tracepoint_android_vh_mutex_init
__tracepoint_android_vh_file_is_tiny_bypass
__tracepoint_android_vh_modify_scan_control
__tracepoint_android_vh_should_continue_reclaim
__traceiter_android_vh_get_page_wmark
__traceiter_android_vh_page_add_new_anon_rmap
__traceiter_android_vh_do_shrink_slab
__traceiter_android_vh_shrink_slab_bypass
__traceiter_android_vh_mutex_init
__traceiter_android_vh_file_is_tiny_bypass
__traceiter_android_vh_modify_scan_control
__traceiter_android_vh_should_continue_reclaim

View File

@@ -13,10 +13,13 @@
__alloc_pages
alloc_pages_exact
__alloc_percpu
__alloc_percpu_gfp
__alloc_skb
alloc_workqueue
alt_cb_patch_nops
anon_inode_getfd
arc4_crypt
arc4_setkey
__arch_copy_from_user
__arch_copy_to_user
arm64_use_ng_mappings
@@ -54,10 +57,14 @@
bpf_prog_put
bpf_stats_enabled_key
bpf_trace_run1
bpf_trace_run10
bpf_trace_run2
bpf_trace_run3
bpf_trace_run4
bpf_trace_run5
bpf_trace_run6
bpf_trace_run7
bpf_trace_run8
bpf_warn_invalid_xdp_action
bsearch
build_skb
@@ -108,42 +115,6 @@
cec_transmit_attempt_done_ts
cec_transmit_done_ts
cec_unregister_adapter
__cfg80211_alloc_event_skb
__cfg80211_alloc_reply_skb
cfg80211_auth_timeout
cfg80211_cac_event
cfg80211_ch_switch_notify
cfg80211_classify8021d
cfg80211_connect_done
cfg80211_cqm_rssi_notify
cfg80211_del_sta_sinfo
cfg80211_disconnected
cfg80211_find_elem_match
cfg80211_ft_event
cfg80211_get_bss
cfg80211_inform_bss_data
cfg80211_mgmt_tx_status_ext
cfg80211_michael_mic_failure
cfg80211_new_sta
cfg80211_pmksa_candidate_notify
cfg80211_put_bss
__cfg80211_radar_event
cfg80211_ready_on_channel
cfg80211_register_netdevice
cfg80211_remain_on_channel_expired
cfg80211_report_wowlan_wakeup
cfg80211_roamed
cfg80211_rx_assoc_resp
cfg80211_rx_mgmt_ext
cfg80211_rx_mlme_mgmt
cfg80211_scan_done
cfg80211_sched_scan_results
cfg80211_sched_scan_stopped
__cfg80211_send_event_skb
cfg80211_tdls_oper_request
cfg80211_unlink_bss
cfg80211_unregister_wdev
cfg80211_vendor_cmd_reply
__check_object_size
__class_create
class_destroy
@@ -197,10 +168,13 @@
clk_unprepare
clk_unregister
clockevents_config_and_register
clocksource_mmio_init
clocksource_mmio_readl_up
close_candev
cma_alloc
cma_get_name
cma_release
compat_ptr_ioctl
complete
complete_all
completion_done
@@ -213,6 +187,14 @@
component_master_del
component_match_add_release
component_unbind_all
configfs_register_default_group
configfs_register_subsystem
configfs_unregister_default_group
configfs_unregister_subsystem
config_group_init
config_group_init_type_name
config_item_put
config_item_set_name
console_lock
console_suspend_enabled
console_unlock
@@ -242,7 +224,26 @@
cpu_number
__cpu_online_mask
__cpu_possible_mask
crc32_be
crc32_le
crypto_aead_decrypt
crypto_aead_encrypt
crypto_aead_setauthsize
crypto_aead_setkey
crypto_alloc_aead
crypto_alloc_shash
crypto_alloc_skcipher
crypto_destroy_tfm
__crypto_memneq
crypto_shash_digest
crypto_shash_finup
crypto_shash_setkey
crypto_shash_update
crypto_skcipher_decrypt
crypto_skcipher_encrypt
crypto_skcipher_setkey
__crypto_xor
csum_partial
_ctype
deactivate_locked_super
debugfs_create_blob
@@ -252,6 +253,7 @@
debugfs_lookup
debugfs_lookup_and_remove
debugfs_remove
debugfs_rename
default_llseek
default_wake_function
delayed_work_timer_fn
@@ -260,12 +262,17 @@
destroy_workqueue
dev_addr_mod
dev_alloc_name
__dev_change_net_namespace
dev_close
dev_coredumpv
_dev_crit
dev_driver_string
_dev_err
dev_err_probe
dev_fetch_sw_netstats
dev_fwnode
__dev_get_by_index
dev_get_by_index
dev_get_regmap
device_add
device_create
@@ -290,6 +297,7 @@
device_property_read_u32_array
device_register
device_remove_file
device_rename
__device_reset
device_set_of_node_from_dev
device_set_wakeup_capable
@@ -370,6 +378,7 @@
devm_platform_get_and_ioremap_resource
devm_platform_ioremap_resource
devm_platform_ioremap_resource_byname
devm_power_supply_register
devm_pwmchip_add
devm_pwm_get
devm_rc_allocate_device
@@ -427,6 +436,7 @@
dev_pm_opp_set_sharing_cpus
dev_pm_set_wake_irq
_dev_printk
__dev_queue_xmit
devres_add
__devres_alloc_node
devres_free
@@ -458,6 +468,7 @@
dmabuf_page_pool_create
dmabuf_page_pool_destroy
dmabuf_page_pool_free
dmabuf_page_pool_get_size
dma_buf_put
dma_buf_unmap_attachment
dma_buf_vmap
@@ -516,6 +527,7 @@
dma_unmap_resource
dma_unmap_sg_attrs
do_SAK
do_trace_netlink_extack
down
down_interruptible
down_killable
@@ -783,6 +795,7 @@
enable_irq
enable_percpu_irq
ether_setup
eth_mac_addr
ethnl_cable_test_fault_length
ethnl_cable_test_result
ethtool_op_get_link
@@ -806,6 +819,7 @@
finish_wait
firmware_kobj
fixed_size_llseek
flush_delayed_work
flush_work
__flush_workqueue
fortify_panic
@@ -838,6 +852,10 @@
generic_handle_domain_irq
generic_handle_irq
generic_shutdown_super
genlmsg_multicast_allns
genlmsg_put
genl_register_family
genl_unregister_family
genphy_c37_config_aneg
genphy_c37_read_status
genphy_c45_fast_retrain
@@ -864,7 +882,10 @@
gen_pool_virt_to_phys
get_cpu_device
get_device
get_net_ns_by_fd
get_net_ns_by_pid
get_random_bytes
get_random_u16
get_random_u32
get_random_u8
get_unused_fd_flags
@@ -918,10 +939,14 @@
hdmi_vendor_infoframe_pack
hex_dump_to_buffer
hrtimer_cancel
hrtimer_forward
hrtimer_init
hrtimer_resolution
hrtimer_start_range_ns
hrtimer_try_to_cancel
__hw_addr_init
__hw_addr_sync
__hw_addr_unsync
i2c_adapter_type
i2c_add_adapter
i2c_add_numbered_adapter
@@ -964,16 +989,12 @@
idr_get_next
idr_preload
idr_remove
ieee80211_bss_get_elem
ieee80211_channel_to_freq_khz
ieee80211_freq_khz_to_channel
ieee80211_get_channel_khz
ieee80211_hdrlen
ignore_console_lock_warning
iio_alloc_pollfunc
iio_buffer_enabled
iio_buffer_init
iio_buffer_put
iio_bus_type
iio_dealloc_pollfunc
iio_device_attach_buffer
iio_device_claim_direct_mode
@@ -981,20 +1002,29 @@
__iio_device_register
iio_device_release_direct_mode
iio_device_unregister
iio_format_value
iio_get_time_ns
iio_push_event
iio_push_to_buffers
iio_read_const_attr
iio_read_mount_matrix
iio_show_mount_matrix
iio_str_to_fixpoint
__iio_trigger_alloc
iio_trigger_free
iio_trigger_notify_done
iio_trigger_poll
iio_trigger_poll_chained
iio_trigger_register
iio_trigger_unregister
import_iovec
in4_pton
inet_csk_get_port
init_dummy_netdev
init_net
__init_swait_queue_head
init_timer_key
init_uts_ns
init_wait_entry
__init_waitqueue_head
input_alloc_absinfo
@@ -1056,6 +1086,8 @@
__irq_set_handler
irq_set_irq_wake
irq_to_desc
irq_work_queue
irq_work_sync
ir_raw_event_store_edge
is_console_locked
is_vmalloc_addr
@@ -1071,6 +1103,11 @@
jiffies_to_usecs
kasan_flag_enabled
kasprintf
kernel_param_lock
kernel_param_unlock
key_create_or_update
key_put
keyring_alloc
__kfifo_alloc
__kfifo_free
__kfifo_from_user
@@ -1079,6 +1116,8 @@
__kfifo_out
__kfifo_to_user
kfree
kfree_sensitive
kfree_skb_list_reason
kfree_skb_reason
kimage_voffset
__kmalloc
@@ -1111,9 +1150,11 @@
kthread_stop
kthread_unpark
ktime_get
ktime_get_coarse_with_offset
ktime_get_mono_fast_ns
ktime_get_raw_ts64
ktime_get_real_ts64
ktime_get_seconds
ktime_get_ts64
ktime_get_with_offset
kvfree
@@ -1174,8 +1215,8 @@
memparse
memremap
mem_section
memset32
memset
memset32
__memset_io
memstart_addr
memunmap
@@ -1244,6 +1285,7 @@
netdev_info
netdev_pick_tx
netdev_printk
netdev_set_default_ethtool_ops
netdev_warn
netif_carrier_off
netif_carrier_on
@@ -1252,6 +1294,7 @@
netif_napi_add_weight
__netif_napi_del
netif_receive_skb
netif_receive_skb_list
netif_rx
netif_set_tso_max_segs
netif_tx_lock
@@ -1261,12 +1304,21 @@
netlink_broadcast
__netlink_kernel_create
netlink_kernel_release
netlink_register_notifier
netlink_unicast
netlink_unregister_notifier
net_ns_type_operations
net_ratelimit
net_selftest
net_selftest_get_count
net_selftest_get_strings
nla_find
nla_memcpy
__nla_parse
nla_put
nla_put_64bit
nla_reserve
__nla_validate
noop_llseek
nr_cpu_ids
nsecs_to_jiffies
@@ -1375,6 +1427,7 @@
of_property_read_variable_u32_array
of_property_read_variable_u8_array
of_prop_next_string
of_prop_next_u32
of_pwm_xlate_with_flags
of_regulator_match
of_reserved_mem_device_init_by_idx
@@ -1557,7 +1610,10 @@
pm_wakeup_dev_event
pm_wakeup_ws_event
policy_has_boost_freq
power_supply_am_i_supplied
power_supply_changed
power_supply_get_by_phandle
power_supply_get_drvdata
power_supply_get_property
power_supply_put
power_supply_register
@@ -1576,6 +1632,8 @@
proc_mkdir
proc_remove
pskb_expand_head
__pskb_pull_tail
___pskb_trim
ptp_classify_raw
ptp_clock_event
ptp_clock_index
@@ -1583,6 +1641,7 @@
ptp_clock_unregister
ptp_parse_header
put_device
__put_net
__put_task_struct
put_unused_fd
pwm_apply_state
@@ -1625,6 +1684,8 @@
register_inetaddr_notifier
register_netdev
register_netdevice
register_netdevice_notifier
register_pernet_device
register_pm_notifier
register_reboot_notifier
__register_rpmsg_driver
@@ -1669,8 +1730,6 @@
regulator_set_voltage
regulator_set_voltage_sel_regmap
regulator_set_voltage_time_sel
regulatory_hint
regulatory_set_wiphy_regd_sync
release_firmware
__release_region
remap_pfn_range
@@ -1692,6 +1751,22 @@
reset_controller_unregister
reset_control_put
reset_control_reset
rfkill_alloc
rfkill_blocked
rfkill_destroy
rfkill_register
rfkill_resume_polling
rfkill_set_hw_state_reason
rfkill_unregister
rhashtable_free_and_destroy
rhashtable_insert_slow
rhltable_init
__rht_bucket_nested
rht_bucket_nested
rht_bucket_nested_insert
round_jiffies
round_jiffies_relative
round_jiffies_up
rpmsg_create_channel
rpmsg_create_ept
rpmsg_find_device
@@ -1705,6 +1780,7 @@
rproc_add_carveout
rproc_alloc
rproc_coredump_add_segment
rproc_da_to_va
rproc_del
rproc_elf_find_loaded_rsc_table
rproc_elf_get_boot_addr
@@ -1793,12 +1869,25 @@
simple_write_to_buffer
single_open
single_release
skb_add_rx_frag
skb_checksum_help
skb_clone
skb_clone_sk
skb_complete_tx_timestamp
skb_complete_wifi_ack
skb_copy
skb_copy_bits
skb_copy_expand
skb_dequeue
skb_ensure_writable
__skb_get_hash
__skb_gso_segment
skb_pull
skb_push
skb_put
skb_queue_head
skb_queue_purge
skb_queue_tail
skb_realloc_headroom
skb_trim
skb_tstamp_tx
@@ -1926,6 +2015,8 @@
snprintf
soc_device_match
soc_device_register
__sock_create
sock_release
sort
__spi_alloc_controller
spi_finalize_current_transfer
@@ -1960,6 +2051,7 @@
strlcat
strlen
strncasecmp
strncat
strncmp
strncpy
strncpy_from_user
@@ -1969,6 +2061,7 @@
strscpy
strsep
strstr
__sw_hweight16
__sw_hweight32
__sw_hweight64
__sw_hweight8
@@ -1976,6 +2069,7 @@
sync_file_get_fence
synchronize_irq
synchronize_net
synchronize_rcu
syscon_node_to_regmap
syscon_regmap_lookup_by_compatible
syscon_regmap_lookup_by_phandle
@@ -1984,12 +2078,14 @@
sysfs_create_files
sysfs_create_group
sysfs_create_groups
sysfs_create_link
sysfs_emit
__sysfs_match_string
sysfs_notify
sysfs_remove_file_ns
sysfs_remove_files
sysfs_remove_group
sysfs_remove_link
sysrq_mask
system_freezable_wq
system_long_wq
@@ -2000,6 +2096,7 @@
tasklet_kill
__tasklet_schedule
tasklet_setup
tasklet_unlock_wait
thermal_cooling_device_unregister
thermal_of_cooling_device_register
thermal_of_zone_unregister
@@ -2008,6 +2105,7 @@
timecounter_cyc2time
timecounter_init
timecounter_read
timer_of_init
timespec64_to_jiffies
_totalram_pages
touchscreen_parse_properties
@@ -2069,7 +2167,10 @@
unregister_inet6addr_notifier
unregister_inetaddr_notifier
unregister_netdev
unregister_netdevice_many
unregister_netdevice_notifier
unregister_netdevice_queue
unregister_pernet_device
unregister_reboot_notifier
unregister_rpmsg_driver
unregister_virtio_device
@@ -2123,6 +2224,7 @@
usb_role_switch_unregister
usb_speed_string
usb_udc_vbus_handler
__usecs_to_jiffies
usleep_range_state
v4l2_ctrl_auto_cluster
v4l2_ctrl_handler_free
@@ -2241,6 +2343,7 @@
vchan_init
vchan_tx_desc_free
vchan_tx_submit
verify_pkcs7_signature
vfree
video_devdata
video_device_alloc
@@ -2294,11 +2397,7 @@
__warn_printk
watchdog_init_timeout
watchdog_set_restart_priority
wiphy_apply_custom_regulatory
wiphy_free
wiphy_new_nm
wiphy_register
wiphy_unregister
wireless_nlevent_flush
wireless_send_event
woken_wake_function
ww_mutex_lock
@@ -2314,6 +2413,7 @@
xdp_do_flush
xdp_do_redirect
xdp_master_redirect
xdp_return_frame
xdp_rxq_info_is_reg
__xdp_rxq_info_reg
xdp_rxq_info_reg_mem_model

View File

@@ -186,6 +186,8 @@
clk_unprepare
clockevents_config_and_register
clocks_calc_mult_shift
clocksource_mmio_init
clocksource_mmio_readl_up
close_fd
cma_alloc
cma_release
@@ -246,7 +248,9 @@
cpu_hwcaps
cpuidle_driver_state_disabled
cpuidle_get_driver
cpuidle_governor_latency_req
cpuidle_pause_and_lock
cpuidle_register_governor
cpuidle_resume_and_unlock
cpu_latency_qos_add_request
cpu_latency_qos_remove_request
@@ -302,6 +306,7 @@
crypto_skcipher_setkey
__crypto_xor
css_next_child
csum_ipv6_magic
csum_partial
ct_idle_enter
ct_idle_exit
@@ -378,6 +383,7 @@
dev_get_flags
dev_get_regmap
dev_get_stats
dev_get_tstats64
device_add
device_add_disk
device_attach
@@ -413,6 +419,7 @@
__device_reset
device_set_of_node_from_dev
device_set_wakeup_capable
device_set_wakeup_enable
device_show_bool
device_store_bool
device_unregister
@@ -545,6 +552,8 @@
dev_pm_opp_put_opp_table
dev_pm_opp_remove_all_dynamic
dev_pm_opp_set_config
dev_pm_qos_add_notifier
dev_pm_qos_remove_notifier
dev_pm_qos_update_request
dev_pm_set_dedicated_wake_irq_reverse
_dev_printk
@@ -583,6 +592,10 @@
dma_buf_get_each
dma_buf_map_attachment
dma_buf_mmap
dmabuf_page_pool_alloc
dmabuf_page_pool_create
dmabuf_page_pool_destroy
dmabuf_page_pool_free
dma_buf_put
dma_buf_unmap_attachment
dma_buf_vmap
@@ -760,6 +773,7 @@
drm_gem_prime_fd_to_handle
drm_gem_prime_handle_to_fd
drm_gem_prime_import
drm_gem_prime_import_dev
drm_gem_private_object_init
drm_gem_vm_close
drm_gem_vm_open
@@ -836,6 +850,9 @@
eth_header_cache_update
eth_header_parse
eth_mac_addr
eth_platform_get_mac_address
ethtool_convert_legacy_u32_to_link_mode
ethtool_convert_link_mode_to_legacy_u32
__ethtool_get_link_ksettings
ethtool_op_get_link
ethtool_op_get_ts_info
@@ -855,6 +872,7 @@
fget
file_path
filp_close
filp_open_block
_find_first_bit
_find_first_zero_bit
find_get_pid
@@ -933,6 +951,7 @@
genlmsg_put
genl_register_family
genl_unregister_family
genphy_resume
gen_pool_add_owner
gen_pool_alloc_algo_owner
gen_pool_avail
@@ -1012,6 +1031,7 @@
handle_simple_irq
handle_sysrq
have_governor_per_policy
hex2bin
hex_asc
hex_asc_upper
hex_dump_to_buffer
@@ -1029,6 +1049,7 @@
hrtimer_active
hrtimer_cancel
hrtimer_forward
__hrtimer_get_remaining
hrtimer_init
hrtimer_start_range_ns
hrtimer_try_to_cancel
@@ -1136,8 +1157,10 @@
input_unregister_device
input_unregister_handle
input_unregister_handler
int_sqrt
iomem_resource
iommu_alloc_resv_region
iommu_dev_disable_feature
iommu_device_register
iommu_device_sysfs_add
iommu_device_sysfs_remove
@@ -1208,6 +1231,7 @@
irq_work_queue_on
irq_work_run
irq_work_sync
is_dma_buf_file
is_vmalloc_addr
iterate_dir
iterate_fd
@@ -1256,6 +1280,7 @@
__kmalloc
kmalloc_caches
kmalloc_large
kmalloc_large_node
__kmalloc_node
kmalloc_node_trace
__kmalloc_node_track_caller
@@ -1366,6 +1391,11 @@
mbox_free_channel
mbox_request_channel
mbox_send_message
mdiobus_alloc_size
mdiobus_free
mdiobus_get_phy
__mdiobus_register
mdiobus_unregister
media_create_ancillary_link
media_create_intf_link
media_create_pad_link
@@ -1471,6 +1501,7 @@
mutex_lock_killable
mutex_trylock
mutex_unlock
__napi_alloc_skb
napi_complete_done
napi_disable
napi_enable
@@ -1488,6 +1519,7 @@
netdev_err
netdev_info
netdev_name_in_use
netdev_notice
netdev_printk
netdev_set_default_ethtool_ops
netdev_update_features
@@ -1504,8 +1536,11 @@
netif_receive_skb
netif_receive_skb_list
netif_rx
netif_set_tso_max_size
netif_stacked_transfer_operstate
netif_tx_lock
netif_tx_stop_all_queues
netif_tx_unlock
netif_tx_wake_queue
netlink_broadcast
netlink_capable
@@ -1519,6 +1554,9 @@
net_namespace_list
net_ns_type_operations
net_ratelimit
net_selftest
net_selftest_get_count
net_selftest_get_strings
nf_conntrack_destroy
nf_register_net_hooks
nf_unregister_net_hooks
@@ -1617,6 +1655,7 @@
of_n_addr_cells
of_n_size_cells
__of_parse_phandle_with_args
of_pci_get_max_link_speed
of_phandle_iterator_init
of_phandle_iterator_next
of_phy_simple_xlate
@@ -1726,13 +1765,35 @@
perf_trace_buf_alloc
perf_trace_run_bpf_submit
pfn_is_map_memory
phy_attached_info
phy_connect
phy_disconnect
phy_do_ioctl_running
phy_ethtool_get_link_ksettings
phy_ethtool_nway_reset
phy_ethtool_set_link_ksettings
phy_exit
phy_get
phy_init
phylink_connect_phy
phylink_create
phylink_destroy
phylink_disconnect_phy
phylink_ethtool_get_pauseparam
phylink_ethtool_set_pauseparam
phylink_generic_validate
phylink_resume
phylink_start
phylink_stop
phylink_suspend
phy_power_off
phy_power_on
phy_print_status
phy_put
phy_set_mode_ext
phy_start
phy_stop
phy_suspend
pick_migrate_task
pid_task
pinconf_generic_parse_dt_config
@@ -1823,6 +1884,7 @@
print_hex_dump
_printk
_printk_deferred
__printk_ratelimit
proc_create
proc_create_data
proc_create_net_data
@@ -2062,6 +2124,7 @@
rtnl_unregister_all
runqueues
sched_clock
sched_clock_register
sched_feat_keys
sched_setattr
sched_setattr_nocheck
@@ -2335,6 +2398,7 @@
spi_controller_suspend
spi_delay_to_ns
spi_finalize_current_transfer
spi_mem_default_supports_op
__spi_register_driver
spi_setup
spi_sync
@@ -2444,12 +2508,15 @@
thermal_zone_get_temp
thermal_zone_get_zone_by_name
thread_group_cputime_adjusted
tick_nohz_get_sleep_length
timecounter_init
timecounter_read
timer_of_init
timer_unstable_counter_workaround
topology_clear_scale_freq_source
topology_update_thermal_pressure
_totalram_pages
_trace_android_vh_record_pcpu_rwsem_starttime
__trace_bprintk
trace_event_buffer_commit
trace_event_buffer_reserve
@@ -2524,6 +2591,8 @@
__traceiter_android_vh_check_file_open
__traceiter_android_vh_check_mmap_file
__traceiter_android_vh_cpufreq_fast_switch
__traceiter_android_vh_cpu_idle_enter
__traceiter_android_vh_cpu_idle_exit
__traceiter_android_vh_iommu_iovad_alloc_iova
__traceiter_android_vh_iommu_iovad_free_iova
__traceiter_android_vh_is_fpsimd_save
@@ -2539,6 +2608,8 @@
__traceiter_android_vh_ufs_clock_scaling
__traceiter_cpu_frequency
__traceiter_gpu_mem_total
__traceiter_ipi_entry
__traceiter_ipi_raise
__traceiter_mmap_lock_acquire_returned
__traceiter_mmap_lock_released
__traceiter_mmap_lock_start_locking
@@ -2614,6 +2685,8 @@
__tracepoint_android_vh_check_file_open
__tracepoint_android_vh_check_mmap_file
__tracepoint_android_vh_cpufreq_fast_switch
__tracepoint_android_vh_cpu_idle_enter
__tracepoint_android_vh_cpu_idle_exit
__tracepoint_android_vh_iommu_iovad_alloc_iova
__tracepoint_android_vh_iommu_iovad_free_iova
__tracepoint_android_vh_is_fpsimd_save
@@ -2629,12 +2702,15 @@
__tracepoint_android_vh_ufs_clock_scaling
__tracepoint_cpu_frequency
__tracepoint_gpu_mem_total
__tracepoint_ipi_entry
__tracepoint_ipi_raise
__tracepoint_mmap_lock_acquire_returned
__tracepoint_mmap_lock_released
__tracepoint_mmap_lock_start_locking
__tracepoint_pelt_rt_tp
__tracepoint_pelt_se_tp
tracepoint_probe_register
tracepoint_probe_register_prio
tracepoint_probe_unregister
__tracepoint_sched_update_nr_running_tp
tracepoint_srcu
@@ -2791,6 +2867,7 @@
usb_add_hcd
usb_alloc_coherent
usb_alloc_urb
usb_altnum_to_altsetting
usb_anchor_urb
usb_assign_descriptors
usb_autopm_get_interface
@@ -2803,6 +2880,7 @@
usb_composite_unregister
usb_control_msg
usb_control_msg_recv
usb_control_msg_send
usb_copy_descriptors
usb_create_hcd
usb_create_shared_hcd
@@ -2812,6 +2890,8 @@
usb_disabled
usb_driver_claim_interface
usb_driver_release_interface
usb_driver_set_configuration
usb_enable_lpm
usb_ep_alloc_request
usb_ep_autoconfig
usb_ep_dequeue
@@ -2844,6 +2924,7 @@
usb_get_intf
usb_get_maximum_speed
usb_get_role_switch_default_mode
usb_get_urb
usb_gstrings_attach
usb_hcd_check_unlink_urb
usb_hcd_end_port_resume
@@ -2871,9 +2952,12 @@
usb_put_function_instance
usb_put_hcd
usb_put_intf
usb_queue_reset_device
usb_register_driver
usb_remove_function
usb_remove_hcd
usb_reset_configuration
usb_reset_device
usb_role_string
usb_role_switch_get
usb_role_switch_get_drvdata
@@ -2881,11 +2965,14 @@
usb_role_switch_set_role
usb_role_switch_unregister
usb_root_hub_lost_power
usb_set_interface
usb_show_dynids
usb_speed_string
usb_store_new_id
usb_string
usb_string_id
usb_submit_urb
usb_unlink_urb
usb_unpoison_urb
usb_wakeup_notification
__usecs_to_jiffies
@@ -3053,6 +3140,7 @@
wait_woken
__wake_up
wake_up_bit
wake_up_if_idle
__wake_up_locked
wake_up_process
wakeup_source_add
@@ -3060,6 +3148,10 @@
wakeup_source_destroy
wakeup_source_register
wakeup_source_remove
wakeup_sources_read_lock
wakeup_sources_read_unlock
wakeup_sources_walk_next
wakeup_sources_walk_start
wakeup_source_unregister
__wake_up_sync_key
__warn_printk

View File

@@ -1,20 +1,28 @@
[abi_symbol_list]
address_space_init_once
bio_add_page
bio_associate_blkg
bio_put
__blkdev_issue_discard
blk_finish_plug
blk_rq_map_user
blk_rq_map_user_iov
blk_start_plug
cgroup_add_legacy_cftypes
console_printk
cpufreq_frequency_table_get_index
cpufreq_policy_transition_delay_us
cpufreq_update_util_data
device_create_bin_file
device_remove_bin_file
devres_destroy
down_read_trylock
drm_crtc_vblank_waitqueue
filp_close
for_each_kernel_tracepoint
freq_qos_add_notifier
freq_qos_remove_notifier
get_wchan
gov_attr_set_get
gpiod_to_chip
have_governor_per_policy
@@ -27,10 +35,12 @@
ip6_route_me_harder
ip_route_me_harder
ipv6_find_hdr
is_ashmem_file
jiffies_64_to_clock_t
ktime_get_coarse_real_ts64
memory_cgrp_subsys
memory_cgrp_subsys_enabled_key
mem_cgroup_from_id
mipi_dsi_generic_write
mmc_wait_for_cmd
nf_ct_attach
@@ -38,10 +48,15 @@
nf_register_net_hooks
nf_unregister_net_hooks
of_css
__page_file_index
__page_mapcount
pm_get_active_wakeup_sources
__printk_ratelimit
prepare_to_wait_exclusive
proc_symlink
public_key_verify_signature
radix_tree_lookup_slot
radix_tree_replace_slot
_raw_write_trylock
reciprocal_value
register_tcf_proto_ops
@@ -69,7 +84,140 @@
tcf_exts_dump_stats
tcf_exts_validate
tcf_queue_work
__traceiter_android_rvh_post_init_entity_util_avg
__traceiter_android_vh_account_process_tick_gran
__traceiter_android_vh_account_task_time
__traceiter_android_vh_do_futex
__traceiter_android_vh_futex_sleep_start
__traceiter_android_vh_futex_wait_end
__traceiter_android_vh_futex_wait_start
__traceiter_android_vh_futex_wake_this
__traceiter_android_vh_futex_wake_traverse_plist
__traceiter_android_vh_futex_wake_up_q_finish
__traceiter_android_vh_record_mutex_lock_starttime
__traceiter_android_vh_record_pcpu_rwsem_starttime
__traceiter_android_vh_record_rtmutex_lock_starttime
__traceiter_android_vh_record_rwsem_lock_starttime
__tracepoint_android_vh_record_mutex_lock_starttime
__tracepoint_android_vh_record_pcpu_rwsem_starttime
__tracepoint_android_vh_record_rtmutex_lock_starttime
__tracepoint_android_vh_record_rwsem_lock_starttime
__trace_puts
__traceiter_android_vh_alter_mutex_list_add
__traceiter_android_vh_binder_free_proc
__traceiter_android_vh_binder_has_work_ilocked
__traceiter_android_vh_binder_looper_state_registered
__traceiter_android_vh_binder_new_ref
__traceiter_android_vh_binder_del_ref
__traceiter_android_vh_binder_proc_transaction
__traceiter_android_vh_binder_preset
__traceiter_android_vh_binder_priority_skip
__traceiter_android_vh_binder_proc_transaction_entry
__traceiter_android_vh_binder_proc_transaction_finish
__traceiter_android_vh_binder_read_done
__traceiter_android_vh_binder_select_worklist_ilocked
__traceiter_android_vh_binder_thread_read
__traceiter_android_vh_binder_thread_release
__traceiter_android_vh_binder_wait_for_work
__traceiter_android_vh_cgroup_set_task
__traceiter_android_vh_dup_task_struct
__traceiter_android_vh_exit_signal
__traceiter_android_vh_mem_cgroup_id_remove
__traceiter_android_vh_mem_cgroup_css_offline
__traceiter_android_vh_mem_cgroup_css_online
__traceiter_android_vh_mem_cgroup_free
__traceiter_android_vh_mem_cgroup_alloc
__traceiter_android_vh_irqtime_account_process_tick
__traceiter_android_vh_mutex_can_spin_on_owner
__traceiter_android_vh_mutex_opt_spin_finish
__traceiter_android_vh_mutex_opt_spin_start
__traceiter_android_vh_cpufreq_acct_update_power
__traceiter_android_vh_cleanup_old_buffers_bypass
__traceiter_android_vh_dm_bufio_shrink_scan_bypass
__traceiter_android_vh_mutex_unlock_slowpath
__traceiter_android_vh_rwsem_can_spin_on_owner
__traceiter_android_vh_rwsem_opt_spin_finish
__traceiter_android_vh_rwsem_opt_spin_start
__traceiter_android_vh_rwsem_wake_finish
__traceiter_android_vh_sched_stat_runtime_rt
__traceiter_android_vh_shrink_node_memcgs
__traceiter_android_vh_sync_txn_recvd
__traceiter_block_bio_queue
__traceiter_block_getrq
__traceiter_block_rq_complete
__traceiter_block_rq_issue
__traceiter_block_rq_merge
__traceiter_block_rq_requeue
__traceiter_sched_stat_blocked
__traceiter_sched_stat_iowait
__traceiter_sched_stat_runtime
__traceiter_sched_stat_sleep
__traceiter_sched_stat_wait
__traceiter_sched_waking
__traceiter_task_rename
__tracepoint_android_rvh_post_init_entity_util_avg
__tracepoint_android_vh_account_process_tick_gran
__tracepoint_android_vh_account_task_time
__tracepoint_android_vh_alter_mutex_list_add
__tracepoint_android_vh_binder_free_proc
__tracepoint_android_vh_binder_has_work_ilocked
__tracepoint_android_vh_binder_looper_state_registered
__tracepoint_android_vh_binder_new_ref
__tracepoint_android_vh_binder_del_ref
__tracepoint_android_vh_binder_proc_transaction
__tracepoint_android_vh_binder_preset
__tracepoint_android_vh_binder_priority_skip
__tracepoint_android_vh_binder_proc_transaction_entry
__tracepoint_android_vh_binder_proc_transaction_finish
__tracepoint_android_vh_binder_read_done
__tracepoint_android_vh_binder_select_worklist_ilocked
__tracepoint_android_vh_binder_thread_read
__tracepoint_android_vh_binder_thread_release
__tracepoint_android_vh_binder_wait_for_work
__tracepoint_android_vh_cgroup_set_task
__tracepoint_android_vh_do_futex
__tracepoint_android_vh_dup_task_struct
__tracepoint_android_vh_exit_signal
__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_futex_sleep_start
__tracepoint_android_vh_futex_wait_end
__tracepoint_android_vh_futex_wait_start
__tracepoint_android_vh_futex_wake_this
__tracepoint_android_vh_futex_wake_traverse_plist
__tracepoint_android_vh_futex_wake_up_q_finish
__tracepoint_android_vh_irqtime_account_process_tick
__tracepoint_android_vh_mutex_can_spin_on_owner
__tracepoint_android_vh_mutex_opt_spin_finish
__tracepoint_android_vh_mutex_opt_spin_start
__tracepoint_android_vh_cpufreq_acct_update_power
__tracepoint_android_vh_cleanup_old_buffers_bypass
__tracepoint_android_vh_dm_bufio_shrink_scan_bypass
__tracepoint_android_vh_mutex_unlock_slowpath
__tracepoint_android_vh_rwsem_can_spin_on_owner
__tracepoint_android_vh_rwsem_opt_spin_finish
__tracepoint_android_vh_rwsem_opt_spin_start
__tracepoint_android_vh_rwsem_wake_finish
__tracepoint_android_vh_sched_stat_runtime_rt
__tracepoint_android_vh_shrink_node_memcgs
__tracepoint_android_vh_sync_txn_recvd
__tracepoint_block_bio_queue
__tracepoint_block_getrq
__tracepoint_block_rq_complete
__tracepoint_block_rq_issue
__tracepoint_block_rq_merge
__tracepoint_block_rq_requeue
__tracepoint_sched_stat_blocked
__tracepoint_sched_stat_iowait
__tracepoint_sched_stat_runtime
__tracepoint_sched_stat_sleep
__tracepoint_sched_stat_wait
__tracepoint_sched_waking
__tracepoint_task_rename
try_to_free_mem_cgroup_pages
typec_mux_get_drvdata
unregister_memory_notifier
unregister_tcf_proto_ops
@@ -77,3 +225,4 @@
wait_for_completion_io_timeout
wait_for_completion_killable_timeout
wakeup_source_remove
wq_worker_comm

View File

@@ -15,6 +15,7 @@
__alloc_pages
alloc_pages_exact
__alloc_percpu
__alloc_percpu_gfp
__alloc_skb
alloc_workqueue
alt_cb_patch_nops
@@ -23,6 +24,8 @@
amba_driver_unregister
android_rvh_probe_register
anon_inode_getfd
arc4_crypt
arc4_setkey
__arch_clear_user
__arch_copy_from_user
__arch_copy_to_user
@@ -108,8 +111,8 @@
blocking_notifier_call_chain
blocking_notifier_chain_register
blocking_notifier_chain_unregister
bpf_trace_run10
bpf_trace_run1
bpf_trace_run10
bpf_trace_run2
bpf_trace_run3
bpf_trace_run4
@@ -127,6 +130,7 @@
bus_unregister
bus_unregister_notifier
cache_line_size
call_rcu
cancel_delayed_work
cancel_delayed_work_sync
cancel_work_sync
@@ -137,35 +141,6 @@
cdev_device_add
cdev_device_del
cdev_init
__cfg80211_alloc_event_skb
__cfg80211_alloc_reply_skb
cfg80211_chandef_create
cfg80211_ch_switch_notify
cfg80211_connect_done
cfg80211_del_sta_sinfo
cfg80211_disconnected
cfg80211_external_auth_request
cfg80211_find_elem_match
cfg80211_get_bss
cfg80211_ibss_joined
cfg80211_inform_bss_frame_data
cfg80211_mgmt_tx_status_ext
cfg80211_michael_mic_failure
cfg80211_new_sta
cfg80211_port_authorized
cfg80211_put_bss
cfg80211_ready_on_channel
cfg80211_register_netdevice
cfg80211_remain_on_channel_expired
cfg80211_roamed
cfg80211_rx_mgmt_ext
cfg80211_scan_done
cfg80211_sched_scan_results
cfg80211_sched_scan_stopped
__cfg80211_send_event_skb
cfg80211_unlink_bss
cfg80211_unregister_wdev
cfg80211_vendor_cmd_reply
__check_object_size
__class_create
class_destroy
@@ -260,9 +235,12 @@
cpu_pm_unregister_notifier
__cpu_possible_mask
__cpu_present_mask
cpu_scale
cpus_read_lock
cpus_read_unlock
cpu_subsys
crc32_be
crc32_le
crc8
crc8_populate_msb
crypto_aead_decrypt
@@ -278,6 +256,7 @@
crypto_comp_decompress
crypto_destroy_tfm
crypto_has_alg
__crypto_memneq
crypto_register_notifier
crypto_register_shash
crypto_req_done
@@ -290,7 +269,9 @@
crypto_skcipher_setkey
crypto_unregister_notifier
crypto_unregister_shash
__crypto_xor
csum_ipv6_magic
csum_partial
csum_tcpudp_nofold
_ctype
debugfs_attr_read
@@ -309,6 +290,7 @@
debugfs_create_x32
debugfs_lookup
debugfs_remove
debugfs_rename
dec_zone_page_state
default_llseek
deferred_free
@@ -319,12 +301,15 @@
desc_to_gpio
destroy_workqueue
dev_addr_mod
dev_alloc_name
__dev_change_net_namespace
dev_close
_dev_crit
dev_driver_string
_dev_emerg
_dev_err
dev_err_probe
dev_fetch_sw_netstats
devfreq_add_device
devfreq_add_governor
devfreq_monitor_resume
@@ -337,13 +322,17 @@
devfreq_unregister_opp_notifier
devfreq_update_interval
dev_fwnode
__dev_get_by_index
dev_get_by_index
dev_get_by_name
device_add
device_add_disk
device_add_groups
device_create
device_create_file
device_create_managed_software_node
device_create_with_groups
device_del
device_destroy
device_find_child
device_for_each_child
@@ -362,6 +351,7 @@
device_register
device_remove_file
device_remove_groups
device_rename
device_set_wakeup_capable
device_set_wakeup_enable
device_unregister
@@ -738,6 +728,9 @@
enable_irq
enable_percpu_irq
errno_to_blk_status
ether_setup
eth_mac_addr
ethtool_op_get_link
eth_type_trans
eventfd_ctx_fdget
eventfd_ctx_put
@@ -800,6 +793,7 @@
gcd
generic_file_llseek
generic_handle_domain_irq
genlmsg_multicast_allns
genlmsg_put
genl_register_family
genl_unregister_family
@@ -818,6 +812,8 @@
get_cpu_iowait_time_us
get_device
__get_free_pages
get_net_ns_by_fd
get_net_ns_by_pid
get_pid_task
get_random_bytes
get_random_u16
@@ -875,6 +871,9 @@
hrtimer_sleeper_start_expires
hrtimer_start_range_ns
hrtimer_try_to_cancel
__hw_addr_init
__hw_addr_sync
__hw_addr_unsync
hwrng_register
hwrng_unregister
i2c_adapter_type
@@ -904,11 +903,9 @@
idr_destroy
idr_find
idr_for_each
idr_get_next
idr_preload
idr_remove
ieee80211_channel_to_freq_khz
ieee80211_freq_khz_to_channel
ieee80211_get_channel_khz
ieee802154_alloc_hw
ieee802154_free_hw
ieee802154_register_hw
@@ -922,6 +919,7 @@
in6_pton
in_aton
inc_zone_page_state
inet_csk_get_port
init_dummy_netdev
init_net
init_pid_ns
@@ -929,6 +927,7 @@
__init_swait_queue_head
init_task
init_timer_key
init_uts_ns
init_wait_entry
__init_waitqueue_head
input_alloc_absinfo
@@ -958,7 +957,9 @@
int_to_scsilun
iomem_resource
iommu_alloc_resv_region
iommu_attach_device_pasid
iommu_attach_group
iommu_detach_device_pasid
iommu_device_register
iommu_device_sysfs_add
iommu_device_sysfs_remove
@@ -969,6 +970,7 @@
iommu_fwspec_add_ids
iommu_fwspec_free
iommu_get_domain_for_dev
iommu_get_domain_for_dev_pasid
iommu_group_alloc
iommu_group_for_each_dev
iommu_group_get
@@ -1011,15 +1013,20 @@
irq_set_irq_wake
irq_to_desc
is_vmalloc_addr
jiffies64_to_msecs
jiffies
jiffies64_to_msecs
jiffies_to_msecs
jiffies_to_usecs
kasan_flag_enabled
kasprintf
kernel_cpustat
kernel_kobj
kernel_param_lock
kernel_param_unlock
kernel_restart
key_create_or_update
key_put
keyring_alloc
__kfifo_alloc
__kfifo_free
__kfifo_in
@@ -1028,6 +1035,7 @@
__kfifo_out_peek
kfree
kfree_sensitive
kfree_skb_list_reason
kfree_skb_reason
kill_fasync
kimage_voffset
@@ -1091,11 +1099,13 @@
kthread_unpark
kthread_worker_fn
ktime_get
ktime_get_coarse_with_offset
ktime_get_mono_fast_ns
ktime_get_raw
ktime_get_raw_ts64
ktime_get_real_seconds
ktime_get_real_ts64
ktime_get_seconds
ktime_get_snapshot
ktime_get_ts64
ktime_get_with_offset
@@ -1138,8 +1148,8 @@
memparse
memremap
mem_section
memset64
memset
memset64
__memset_io
memstart_addr
memunmap
@@ -1190,22 +1200,37 @@
__napi_schedule
napi_schedule_prep
__netdev_alloc_skb
netdev_err
netdev_info
netdev_set_default_ethtool_ops
netdev_state_change
netdev_update_features
netif_carrier_off
netif_carrier_on
netif_napi_add_weight
__netif_napi_del
netif_receive_skb
netif_receive_skb_list
netif_rx
netif_tx_stop_all_queues
netif_tx_wake_queue
netlink_broadcast
__netlink_kernel_create
netlink_kernel_release
netlink_register_notifier
netlink_unicast
netlink_unregister_notifier
net_ns_type_operations
net_ratelimit
nla_find
nla_memcpy
__nla_parse
nla_put
nla_put_64bit
nla_put_nohdr
nla_reserve
nla_strscpy
__nla_validate
__nlmsg_put
nonseekable_open
noop_llseek
@@ -1302,6 +1327,8 @@
page_frag_alloc_align
__page_frag_cache_drain
page_frag_free
page_pinner_inited
__page_pinner_put_page
panic
panic_notifier_list
param_array_ops
@@ -1461,8 +1488,11 @@
proc_mkdir_data
proc_remove
pskb_expand_head
__pskb_pull_tail
___pskb_trim
put_device
put_disk
__put_net
put_pid
put_sg_io_hdr
__put_task_struct
@@ -1506,6 +1536,7 @@
rb_next
rb_prev
rb_replace_node
rcu_barrier
__rcu_read_lock
__rcu_read_unlock
rdev_get_drvdata
@@ -1529,6 +1560,7 @@
register_netdevice
register_netdevice_notifier
register_oom_notifier
register_pernet_device
register_pernet_subsys
register_pm_notifier
register_reboot_notifier
@@ -1571,9 +1603,6 @@
regulator_set_voltage
regulator_set_voltage_sel_regmap
regulator_unregister
regulatory_hint
regulatory_set_wiphy_regd
regulatory_set_wiphy_regd_sync
release_firmware
__release_region
remap_pfn_range
@@ -1588,12 +1617,24 @@
request_threaded_irq
return_address
rfkill_alloc
rfkill_blocked
rfkill_destroy
rfkill_init_sw_state
rfkill_register
rfkill_resume_polling
rfkill_set_hw_state_reason
rfkill_unregister
rhashtable_free_and_destroy
rhashtable_insert_slow
rhltable_init
__rht_bucket_nested
rht_bucket_nested
rht_bucket_nested_insert
__root_device_register
root_device_unregister
round_jiffies
round_jiffies_relative
round_jiffies_up
rps_needed
rtc_class_close
rtc_class_open
@@ -1693,11 +1734,20 @@
single_open
single_open_size
single_release
skb_add_rx_frag
skb_checksum
skb_checksum_help
skb_clone
skb_clone_sk
skb_complete_wifi_ack
skb_copy
skb_copy_bits
skb_copy_expand
skb_dequeue
skb_dequeue_tail
skb_ensure_writable
__skb_get_hash
__skb_gso_segment
skb_pull
skb_push
skb_put
@@ -1780,6 +1830,8 @@
snd_soc_unregister_component
snprintf
soc_device_register
__sock_create
sock_release
sock_wfree
softnet_data
sort
@@ -1835,8 +1887,10 @@
strstr
subsys_system_register
suspend_set_ops
__sw_hweight16
__sw_hweight32
__sw_hweight64
__sw_hweight8
sync_blockdev
sync_file_create
sync_file_get_fence
@@ -1864,8 +1918,10 @@
sysfs_streq
sysfs_update_group
sysrq_mask
system_freezable_wq
system_highpri_wq
system_long_wq
system_power_efficient_wq
system_state
system_unbound_wq
system_wq
@@ -1874,6 +1930,7 @@
tasklet_init
tasklet_kill
__tasklet_schedule
tasklet_setup
tasklet_unlock_wait
__task_pid_nr_ns
tcpci_get_tcpm_port
@@ -2021,9 +2078,11 @@
unregister_inet6addr_notifier
unregister_inetaddr_notifier
unregister_netdev
unregister_netdevice_many
unregister_netdevice_notifier
unregister_netdevice_queue
unregister_oom_notifier
unregister_pernet_device
unregister_pernet_subsys
unregister_pm_notifier
unregister_reboot_notifier
@@ -2129,6 +2188,7 @@
vb2_streamon
vb2_vmalloc_memops
vb2_wait_for_all_buffers
verify_pkcs7_signature
vfree
video_devdata
video_device_alloc
@@ -2178,10 +2238,7 @@
watchdog_register_device
watchdog_set_restart_priority
watchdog_unregister_device
wiphy_free
wiphy_new_nm
wiphy_register
wiphy_unregister
wireless_nlevent_flush
woken_wake_function
work_busy
__xa_alloc

View File

@@ -31,6 +31,7 @@
__alloc_percpu_gfp
__alloc_skb
alloc_skb_with_frags
alloc_swapdev_block
alloc_workqueue
alt_cb_patch_nops
amba_bustype
@@ -141,10 +142,10 @@
bpf_prog_put
bpf_prog_sub
bpf_stats_enabled_key
bpf_trace_run1
bpf_trace_run10
bpf_trace_run11
bpf_trace_run12
bpf_trace_run1
bpf_trace_run2
bpf_trace_run3
bpf_trace_run4
@@ -154,7 +155,6 @@
bpf_trace_run8
bpf_trace_run9
bpf_warn_invalid_xdp_action
bridge_tunnel_header
bt_accept_dequeue
bt_accept_enqueue
bt_accept_unlink
@@ -243,104 +243,6 @@
cdev_device_add
cdev_device_del
cdev_init
__cfg80211_alloc_event_skb
__cfg80211_alloc_reply_skb
cfg80211_any_usable_channels
cfg80211_assoc_comeback
cfg80211_assoc_failure
cfg80211_auth_timeout
cfg80211_background_cac_abort
cfg80211_bss_color_notify
cfg80211_bss_flush
cfg80211_bss_iter
cfg80211_cac_event
cfg80211_calculate_bitrate
cfg80211_chandef_compatible
cfg80211_chandef_create
cfg80211_chandef_dfs_required
cfg80211_chandef_usable
cfg80211_chandef_valid
cfg80211_check_combinations
cfg80211_check_station_change
cfg80211_ch_switch_notify
cfg80211_ch_switch_started_notify
cfg80211_classify8021d
cfg80211_connect_done
cfg80211_conn_failed
cfg80211_control_port_tx_status
cfg80211_cqm_beacon_loss_notify
cfg80211_cqm_pktloss_notify
cfg80211_cqm_rssi_notify
cfg80211_cqm_txe_notify
cfg80211_crit_proto_stopped
cfg80211_del_sta_sinfo
cfg80211_disconnected
cfg80211_external_auth_request
cfg80211_find_elem_match
cfg80211_find_vendor_elem
cfg80211_free_nan_func
cfg80211_ft_event
cfg80211_get_bss
cfg80211_get_drvinfo
cfg80211_get_ies_channel_number
cfg80211_get_iftype_ext_capa
cfg80211_get_p2p_attr
cfg80211_get_station
cfg80211_gtk_rekey_notify
cfg80211_ibss_joined
cfg80211_iftype_allowed
cfg80211_inform_bss_data
cfg80211_inform_bss_frame_data
cfg80211_is_element_inherited
cfg80211_iter_combinations
cfg80211_merge_profile
cfg80211_mgmt_tx_status_ext
cfg80211_michael_mic_failure
cfg80211_nan_func_terminated
cfg80211_nan_match
cfg80211_new_sta
cfg80211_notify_new_peer_candidate
cfg80211_pmksa_candidate_notify
cfg80211_pmsr_complete
cfg80211_pmsr_report
cfg80211_port_authorized
cfg80211_probe_status
cfg80211_put_bss
__cfg80211_radar_event
cfg80211_ready_on_channel
cfg80211_ref_bss
cfg80211_reg_can_beacon
cfg80211_reg_can_beacon_relax
cfg80211_register_netdevice
cfg80211_remain_on_channel_expired
cfg80211_report_obss_beacon_khz
cfg80211_report_wowlan_wakeup
cfg80211_roamed
cfg80211_rx_assoc_resp
cfg80211_rx_control_port
cfg80211_rx_mgmt_ext
cfg80211_rx_mlme_mgmt
cfg80211_rx_spurious_frame
cfg80211_rx_unexpected_4addr_frame
cfg80211_rx_unprot_mlme_mgmt
cfg80211_scan_done
cfg80211_sched_scan_results
cfg80211_sched_scan_stopped
cfg80211_sched_scan_stopped_locked
__cfg80211_send_event_skb
cfg80211_send_layer2_update
cfg80211_shutdown_all_interfaces
cfg80211_sinfo_alloc_tid_stats
cfg80211_sta_opmode_change_notify
cfg80211_stop_iface
cfg80211_tdls_oper_request
cfg80211_tx_mgmt_expired
cfg80211_tx_mlme_mgmt
cfg80211_unlink_bss
cfg80211_unregister_wdev
cfg80211_update_owe_info_event
cfg80211_vendor_cmd_get_sender
cfg80211_vendor_cmd_reply
cgroup_path_ns
cgroup_taskset_first
cgroup_taskset_next
@@ -398,6 +300,7 @@
clk_register
clk_restore_context
clk_round_rate
clk_save_context
clk_set_parent
clk_set_rate
clk_sync_state
@@ -626,6 +529,7 @@
dev_get_flags
dev_get_regmap
dev_get_stats
dev_get_tstats64
device_add
device_add_disk
device_add_groups
@@ -792,6 +696,7 @@
dev_pm_opp_of_register_em
dev_pm_opp_of_remove_table
dev_pm_opp_put
dev_pm_opp_remove
dev_pm_opp_remove_all_dynamic
dev_pm_opp_set_config
dev_pm_opp_set_opp
@@ -829,6 +734,7 @@
divider_ro_round_rate_parent
divider_round_rate_parent
dma_alloc_attrs
dma_alloc_noncontiguous
dma_alloc_pages
dma_async_device_register
dma_async_device_unregister
@@ -867,6 +773,7 @@
dma_fence_signal_timestamp_locked
dma_fence_wait_timeout
dma_free_attrs
dma_free_noncontiguous
dma_free_pages
dma_get_sgtable_attrs
dma_get_slave_channel
@@ -901,6 +808,8 @@
dma_unmap_page_attrs
dma_unmap_resource
dma_unmap_sg_attrs
dma_vmap_noncontiguous
dma_vunmap_noncontiguous
do_trace_netlink_extack
do_trace_rcu_torture_read
double_rq_lock
@@ -1157,6 +1066,7 @@
eth_mac_addr
ethnl_cable_test_fault_length
ethnl_cable_test_result
eth_platform_get_mac_address
eth_prepare_mac_addr_change
ethtool_convert_legacy_u32_to_link_mode
ethtool_convert_link_mode_to_legacy_u32
@@ -1231,7 +1141,6 @@
freq_qos_add_request
freq_qos_remove_request
freq_qos_update_request
freq_reg_info
fsync_bdev
ftrace_dump
fwnode_find_reference
@@ -1319,11 +1228,15 @@
get_unused_fd_flags
get_user_ifreq
get_user_pages
get_wiphy_regdom
get_zeroed_page
gh_rm_call
gh_rm_notifier_register
gh_rm_notifier_unregister
gh_rm_register_platform_ops
gh_rm_unregister_platform_ops
gic_v3_cpu_init
gic_v3_dist_init
gic_v3_dist_wait_for_rwp
gic_nonsecure_priorities
gov_attr_set_init
gov_attr_set_put
@@ -1500,6 +1413,9 @@
icc_nodes_remove
icc_provider_add
icc_provider_del
icc_provider_deregister
icc_provider_init
icc_provider_register
icc_put
icc_set_bw
icc_set_tag
@@ -1517,152 +1433,6 @@
idr_preload
idr_remove
idr_replace
ieee80211_alloc_hw_nm
ieee80211_amsdu_to_8023s
ieee80211_ap_probereq_get
ieee80211_ave_rssi
ieee80211_beacon_cntdwn_is_complete
ieee80211_beacon_get_template
ieee80211_beacon_get_tim
ieee80211_beacon_loss
ieee80211_beacon_set_cntdwn
ieee80211_beacon_update_cntdwn
ieee80211_bss_get_elem
ieee80211_calc_rx_airtime
ieee80211_calc_tx_airtime
ieee80211_chandef_to_operating_class
ieee80211_channel_switch_disconnect
ieee80211_channel_to_freq_khz
ieee80211_chswitch_done
ieee80211_color_change_finish
ieee80211_connection_loss
ieee80211_cqm_beacon_loss_notify
ieee80211_cqm_rssi_notify
ieee80211_csa_finish
ieee80211_ctstoself_duration
ieee80211_ctstoself_get
ieee80211_data_to_8023_exthdr
ieee80211_disable_rssi_reports
ieee80211_disconnect
ieee80211_enable_rssi_reports
ieee80211_find_sta
ieee80211_find_sta_by_ifaddr
ieee80211_find_sta_by_link_addrs
ieee80211_free_hw
ieee80211_free_txskb
ieee80211_freq_khz_to_channel
ieee80211_generic_frame_duration
ieee80211_get_bssid
ieee80211_get_buffered_bc
ieee80211_get_channel_khz
ieee80211_get_fils_discovery_tmpl
ieee80211_get_hdrlen_from_skb
ieee80211_get_key_rx_seq
ieee80211_get_mesh_hdrlen
ieee80211_get_num_supported_channels
ieee80211_get_response_rate
ieee80211_get_tkip_p1k_iv
ieee80211_get_tkip_p2k
ieee80211_get_tkip_rx_p1k
ieee80211_get_tx_rates
ieee80211_get_unsol_bcast_probe_resp_tmpl
ieee80211_get_vht_max_nss
ieee80211_gtk_rekey_add
ieee80211_gtk_rekey_notify
ieee80211_hdrlen
ieee80211_hw_restart_disconnect
ieee80211_ie_split_ric
ieee80211_iterate_active_interfaces_atomic
ieee80211_iterate_active_interfaces_mtx
ieee80211_iterate_interfaces
ieee80211_iterate_stations
ieee80211_iterate_stations_atomic
ieee80211_iter_chan_contexts_atomic
ieee80211_iter_keys
ieee80211_iter_keys_rcu
ieee80211_key_mic_failure
ieee80211_key_replay
ieee80211_manage_rx_ba_offl
ieee80211_mandatory_rates
ieee80211_mark_rx_ba_filtered_frames
ieee80211_nan_func_match
ieee80211_nan_func_terminated
ieee80211_next_txq
ieee80211_nullfunc_get
ieee80211_operating_class_to_band
ieee80211_parse_p2p_noa
ieee80211_probereq_get
ieee80211_proberesp_get
ieee80211_pspoll_get
ieee80211_queue_delayed_work
ieee80211_queue_stopped
ieee80211_queue_work
ieee80211_radar_detected
ieee80211_radiotap_iterator_init
ieee80211_radiotap_iterator_next
ieee80211_rate_control_register
ieee80211_rate_control_unregister
ieee80211_ready_on_channel
ieee80211_register_hw
ieee80211_remain_on_channel_expired
ieee80211_remove_key
ieee80211_report_low_ack
ieee80211_report_wowlan_wakeup
ieee80211_request_smps
ieee80211_reserve_tid
ieee80211_restart_hw
ieee80211_resume_disconnect
ieee80211_rts_duration
ieee80211_rts_get
ieee80211_rx_ba_timer_expired
ieee80211_rx_irqsafe
ieee80211_rx_list
ieee80211_rx_napi
ieee80211_s1g_channel_width
ieee80211_scan_completed
ieee80211_sched_scan_results
ieee80211_sched_scan_stopped
__ieee80211_schedule_txq
ieee80211_send_bar
ieee80211_send_eosp_nullfunc
ieee80211_set_active_links
ieee80211_set_active_links_async
ieee80211_set_key_rx_seq
ieee80211_sta_block_awake
ieee80211_sta_eosp
ieee80211_sta_pspoll
ieee80211_sta_ps_transition
ieee80211_sta_recalc_aggregates
ieee80211_sta_register_airtime
ieee80211_start_tx_ba_cb_irqsafe
ieee80211_start_tx_ba_session
ieee80211_sta_set_buffered
ieee80211_sta_uapsd_trigger
ieee80211_stop_queue
ieee80211_stop_queues
ieee80211_stop_rx_ba_session
ieee80211_stop_tx_ba_cb_irqsafe
ieee80211_stop_tx_ba_session
ieee80211_tdls_oper_request
ieee80211_tkip_add_iv
ieee80211_tx_dequeue
ieee80211_tx_prepare_skb
ieee80211_txq_airtime_check
ieee80211_txq_get_depth
ieee80211_txq_may_transmit
ieee80211_txq_schedule_start
ieee80211_tx_rate_update
ieee80211_tx_status_8023
ieee80211_tx_status
ieee80211_tx_status_ext
ieee80211_tx_status_irqsafe
ieee80211_unregister_hw
ieee80211_unreserve_tid
ieee80211_update_mu_groups
ieee80211_update_p2p_noa
ieee80211_vif_to_wdev
ieee80211_wake_queue
ieee80211_wake_queues
ieee802154_alloc_hw
ieee802154_configure_durations
ieee802154_free_hw
@@ -1679,7 +1449,6 @@
ieee802154_xmit_complete
ieee802154_xmit_error
ieee802154_xmit_hw_error
ieeee80211_obss_color_collision_notify
iio_buffer_init
iio_buffer_put
iio_device_attach_buffer
@@ -1910,6 +1679,7 @@
__kmalloc
kmalloc_caches
kmalloc_large
kmalloc_large_node
kmalloc_node_trace
__kmalloc_node_track_caller
kmalloc_trace
@@ -2077,6 +1847,7 @@
mdiobus_modify_changed
__mdiobus_read
mdiobus_read
__mdiobus_register
mdiobus_unregister
__mdiobus_write
mdiobus_write
@@ -2112,8 +1883,8 @@
memremap_pages
memscan
mem_section
memset64
memset
memset64
__memset_io
memstart_addr
memunmap
@@ -2131,12 +1902,37 @@
__mmap_lock_do_trace_acquire_returned
__mmap_lock_do_trace_released
__mmap_lock_do_trace_start_locking
__mmc_claim_host
mmc_cqe_request_done
mmc_execute_tuning
mmc_get_card
mmc_get_ext_csd
mmc_hs200_tuning
mmc_issue_type
mmc_of_parse
__mmc_poll_for_busy
mmc_prepare_busy_cmd
mmc_put_card
mmc_regulator_get_supply
mmc_regulator_set_ocr
mmc_regulator_set_vqmmc
mmc_release_host
mmc_retune_hold
mmc_retune_release
mmc_select_bus_width
mmc_select_card
mmc_select_hs
mmc_select_hs400
mmc_select_hs_ddr
mmc_select_timing
mmc_send_status
mmc_send_tuning
mmc_set_bus_mode
mmc_set_bus_width
mmc_set_clock
mmc_set_initial_state
mmc_set_timing
mmc_wait_for_cmd
mmput
mod_delayed_work_on
mod_node_page_state
@@ -2208,6 +2004,7 @@
netif_schedule_queue
netif_set_real_num_rx_queues
netif_set_real_num_tx_queues
netif_set_tso_max_size
__netif_set_xps_queue
netif_stacked_transfer_operstate
netif_tx_lock
@@ -2255,10 +2052,10 @@
nla_find
nla_memcpy
__nla_parse
nla_put_64bit
nla_put
nla_reserve_64bit
nla_put_64bit
nla_reserve
nla_reserve_64bit
nla_strscpy
__nla_validate
__nlmsg_put
@@ -2352,6 +2149,7 @@
of_machine_is_compatible
of_match_device
of_match_node
__of_mdiobus_register
of_modalias_node
of_n_addr_cells
of_node_name_eq
@@ -2396,6 +2194,8 @@
page_ext_put
page_is_ram
page_mapping
page_pinner_inited
__page_pinner_put_page
page_pool_alloc_pages
page_pool_create
page_pool_destroy
@@ -2488,6 +2288,7 @@
perf_trace_run_bpf_submit
phy_attached_info
phy_calibrate
phy_do_ioctl_running
phy_drivers_register
phy_drivers_unregister
phy_error
@@ -2532,6 +2333,7 @@
phy_power_on
phy_read_mmd
phy_set_mode_ext
phy_suspend
phy_trigger_machine
phy_write_mmd
pick_highest_pushable_task
@@ -2701,7 +2503,6 @@
radix_tree_lookup
radix_tree_next_chunk
radix_tree_tagged
rate_control_set_rates
___ratelimit
rational_best_approximation
raw_notifier_call_chain
@@ -2786,7 +2587,6 @@
regcache_mark_dirty
regcache_sync
regcache_sync_region
reg_initiator_name
__register_blkdev
register_candev
__register_chrdev
@@ -2831,7 +2631,6 @@
regmap_read
regmap_update_bits_base
regmap_write
reg_query_regdb_wmm
regulator_allow_bypass
regulator_bulk_disable
regulator_bulk_enable
@@ -2864,10 +2663,6 @@
regulator_set_voltage
regulator_set_voltage_sel_regmap
regulator_unregister_notifier
regulatory_hint
regulatory_pre_cac_allowed
regulatory_set_wiphy_regd
regulatory_set_wiphy_regd_sync
release_firmware
__release_region
release_sock
@@ -2894,7 +2689,6 @@
reset_control_release
reset_control_reset
return_address
rfc1042_header
rfkill_alloc
rfkill_blocked
rfkill_destroy
@@ -3015,6 +2809,7 @@
sdhci_cqe_disable
sdhci_cqe_enable
sdhci_cqe_irq
sdhci_dumpregs
sdhci_enable_clk
sdhci_get_property
sdhci_pltfm_free
@@ -3175,6 +2970,7 @@
smp_call_function
smp_call_function_single
smp_call_function_single_async
snapshot_get_image_size
snd_ctl_remove
snd_hwdep_new
snd_info_create_card_entry
@@ -3236,6 +3032,7 @@
snd_usb_endpoint_close
snd_usb_endpoint_open
snd_usb_endpoint_prepare
snd_usb_power_domain_set
snprintf
soc_device_register
soc_device_unregister
@@ -3397,6 +3194,7 @@
sysfs_remove_link
sysfs_remove_link_from_group
sysfs_streq
sysfs_update_group
sysrq_mask
system_32bit_el0_cpumask
system_freezable_power_efficient_wq
@@ -3443,6 +3241,7 @@
topology_update_done
topology_update_thermal_pressure
_totalram_pages
_trace_android_vh_record_pcpu_rwsem_starttime
trace_array_put
__trace_bprintk
trace_clock_local
@@ -3487,6 +3286,8 @@
__traceiter_android_rvh_iommu_setup_dma_ops
__traceiter_android_rvh_is_cpu_allowed
__traceiter_android_rvh_migrate_queued_task
__traceiter_android_rvh_mmc_resume
__traceiter_android_rvh_mmc_suspend
__traceiter_android_rvh_new_task_stats
__traceiter_android_rvh_pick_next_entity
__traceiter_android_rvh_place_entity
@@ -3539,6 +3340,7 @@
__traceiter_android_vh_cpufreq_fast_switch
__traceiter_android_vh_cpufreq_resolve_freq
__traceiter_android_vh_cpufreq_target
__traceiter_android_vh_check_hibernation_swap
__traceiter_android_vh_cpu_idle_enter
__traceiter_android_vh_cpu_idle_exit
__traceiter_android_vh_cpuidle_psci_enter
@@ -3547,22 +3349,30 @@
__traceiter_android_vh_do_wake_up_sync
__traceiter_android_vh_dump_throttled_rt_tasks
__traceiter_android_vh_free_task
__traceiter_android_vh_encrypt_page
__traceiter_android_vh_ftrace_dump_buffer
__traceiter_android_vh_ftrace_format_check
__traceiter_android_vh_ftrace_oops_enter
__traceiter_android_vh_ftrace_oops_exit
__traceiter_android_vh_ftrace_size_check
__traceiter_android_vh_ignore_dmabuf_vmap_bounds
__traceiter_android_vh_gic_v3_suspend
__traceiter_android_vh_ipi_stop
__traceiter_android_vh_jiffies_update
__traceiter_android_vh_kswapd_per_node
__traceiter_android_vh_mpam_set
__traceiter_android_vh_init_aes_encrypt
__traceiter_android_vh_post_image_save
__traceiter_android_vh_printk_hotplug
__traceiter_android_vh_rproc_recovery
__traceiter_android_vh_rproc_recovery_set
__traceiter_android_vh_save_cpu_resume
__traceiter_android_vh_save_hib_resume_bdev
__traceiter_android_vh_scheduler_tick
__traceiter_android_vh_setscheduler_uclamp
__traceiter_android_vh_show_resume_epoch_val
__traceiter_android_vh_show_suspend_epoch_val
__traceiter_android_vh_skip_swap_map_write
__traceiter_android_vh_timer_calc_index
__traceiter_android_vh_ufs_check_int_errors
__traceiter_android_vh_ufs_compl_command
@@ -3619,6 +3429,8 @@
__tracepoint_android_rvh_iommu_setup_dma_ops
__tracepoint_android_rvh_is_cpu_allowed
__tracepoint_android_rvh_migrate_queued_task
__tracepoint_android_rvh_mmc_resume
__tracepoint_android_rvh_mmc_suspend
__tracepoint_android_rvh_new_task_stats
__tracepoint_android_rvh_pick_next_entity
__tracepoint_android_rvh_place_entity
@@ -3671,6 +3483,7 @@
__tracepoint_android_vh_cpufreq_fast_switch
__tracepoint_android_vh_cpufreq_resolve_freq
__tracepoint_android_vh_cpufreq_target
__tracepoint_android_vh_check_hibernation_swap
__tracepoint_android_vh_cpu_idle_enter
__tracepoint_android_vh_cpu_idle_exit
__tracepoint_android_vh_cpuidle_psci_enter
@@ -3679,22 +3492,30 @@
__tracepoint_android_vh_do_wake_up_sync
__tracepoint_android_vh_dump_throttled_rt_tasks
__tracepoint_android_vh_free_task
__tracepoint_android_vh_encrypt_page
__tracepoint_android_vh_ftrace_dump_buffer
__tracepoint_android_vh_ftrace_format_check
__tracepoint_android_vh_ftrace_oops_enter
__tracepoint_android_vh_ftrace_oops_exit
__tracepoint_android_vh_ftrace_size_check
__tracepoint_android_vh_ignore_dmabuf_vmap_bounds
__tracepoint_android_vh_gic_v3_suspend
__tracepoint_android_vh_ipi_stop
__tracepoint_android_vh_jiffies_update
__tracepoint_android_vh_kswapd_per_node
__tracepoint_android_vh_mpam_set
__tracepoint_android_vh_init_aes_encrypt
__tracepoint_android_vh_post_image_save
__tracepoint_android_vh_printk_hotplug
__tracepoint_android_vh_rproc_recovery
__tracepoint_android_vh_rproc_recovery_set
__tracepoint_android_vh_save_cpu_resume
__tracepoint_android_vh_save_hib_resume_bdev
__tracepoint_android_vh_scheduler_tick
__tracepoint_android_vh_setscheduler_uclamp
__tracepoint_android_vh_show_resume_epoch_val
__tracepoint_android_vh_show_suspend_epoch_val
__tracepoint_android_vh_skip_swap_map_write
__tracepoint_android_vh_timer_calc_index
__tracepoint_android_vh_ufs_check_int_errors
__tracepoint_android_vh_ufs_compl_command
@@ -3878,6 +3699,7 @@
usb_add_phy_dev
usb_alloc_coherent
usb_alloc_urb
usb_altnum_to_altsetting
usb_anchor_urb
usb_assign_descriptors
usb_autopm_get_interface
@@ -3899,6 +3721,8 @@
usb_disabled
usb_driver_claim_interface
usb_driver_release_interface
usb_driver_set_configuration
usb_enable_lpm
usb_ep_alloc_request
usb_ep_autoconfig
usb_ep_dequeue
@@ -3917,6 +3741,7 @@
usb_get_dev
usb_get_from_anchor
usb_get_intf
usb_get_urb
usb_ifnum_to_if
usb_interface_id
usb_kill_urb
@@ -3930,6 +3755,7 @@
usb_register_driver
usb_register_notify
usb_remove_phy
usb_reset_configuration
usb_role_switch_find_by_fwnode
usb_role_switch_get_drvdata
usb_role_switch_register
@@ -3960,8 +3786,10 @@
usb_show_dynids
usb_speed_string
usb_store_new_id
usb_string
usb_string_id
usb_submit_urb
usb_unlink_urb
usb_unpoison_urb
usb_unregister_notify
__usecs_to_jiffies
@@ -4138,17 +3966,6 @@
wakeup_source_unregister
__wake_up_sync_key
__warn_printk
wdev_chandef
wdev_to_ieee80211_vif
wiphy_apply_custom_regulatory
wiphy_free
wiphy_new_nm
wiphy_read_of_freq_limits
wiphy_register
wiphy_rfkill_set_hw_state_reason
wiphy_rfkill_start_polling
wiphy_to_ieee80211_hw
wiphy_unregister
wireless_nlevent_flush
wireless_send_event
woken_wake_function

File diff suppressed because it is too large Load Diff

View File

@@ -1,6 +1,7 @@
[abi_symbol_list]
# commonly used symbols
alloc_etherdev_mqs
alloc_netdev_mqs
__alloc_pages
__alloc_skb
alloc_workqueue
@@ -11,15 +12,19 @@
__arch_copy_to_user
arm64_use_ng_mappings
bcmp
bpf_trace_run1
bpf_trace_run2
bpf_trace_run3
bpf_trace_run4
bpf_trace_run5
bpf_trace_run6
bt_err
bt_info
bt_warn
build_skb
cancel_delayed_work
cancel_delayed_work_sync
cancel_work_sync
cfg80211_chandef_valid
__check_object_size
__class_create
class_destroy
@@ -35,6 +40,8 @@
cpu_hwcaps
cpu_number
__cpu_online_mask
crc32_le
csum_partial
debugfs_attr_read
debugfs_attr_write
debugfs_create_devm_seqfile
@@ -46,9 +53,13 @@
default_llseek
delayed_work_timer_fn
del_timer
del_timer_sync
destroy_workqueue
dev_addr_mod
dev_alloc_name
dev_close
_dev_err
__dev_get_by_index
device_create
device_create_file
device_remove_file
@@ -65,6 +76,7 @@
devm_kmalloc
devm_request_threaded_irq
_dev_notice
_dev_printk
__dev_queue_xmit
_dev_warn
dma_alloc_attrs
@@ -138,13 +150,18 @@
drm_simple_encoder_init
drm_vblank_init
ether_setup
eth_mac_addr
ethtool_op_get_link
ethtool_op_get_ts_info
eth_type_trans
eth_validate_addr
fd_install
_find_first_bit
finish_wait
firmware_request_nowarn
flush_delayed_work
flush_work
__flush_workqueue
__folio_put
fortify_panic
fput
@@ -152,6 +169,9 @@
free_netdev
__free_pages
free_pages
genlmsg_put
genl_register_family
genl_unregister_family
get_device
__get_free_pages
get_random_bytes
@@ -171,28 +191,11 @@
hrtimer_start_range_ns
ida_alloc_range
ida_free
idr_alloc
idr_destroy
idr_get_next
idr_remove
ieee80211_alloc_hw_nm
ieee80211_beacon_cntdwn_is_complete
ieee80211_beacon_get_tim
ieee80211_csa_finish
ieee80211_free_hw
ieee80211_free_txskb
ieee80211_get_buffered_bc
ieee80211_get_hdrlen_from_skb
ieee80211_get_tx_rates
ieee80211_iterate_active_interfaces_atomic
ieee80211_queue_delayed_work
ieee80211_radar_detected
ieee80211_register_hw
ieee80211_send_bar
ieee80211_sta_register_airtime
ieee80211_stop_queues
ieee80211_stop_tx_ba_cb_irqsafe
ieee80211_tx_status_ext
ieee80211_unregister_hw
ieee80211_wake_queues
init_net
__init_swait_queue_head
init_timer_key
init_wait_entry
@@ -210,8 +213,10 @@
irq_set_irq_wake
is_vmalloc_addr
jiffies
jiffies_to_msecs
kasan_flag_enabled
kfree
kfree_sensitive
kfree_skb_reason
kimage_voffset
__kmalloc
@@ -228,6 +233,7 @@
ktime_get
ktime_get_with_offset
kvfree
kvfree_call_rcu
kvmalloc_node
__list_add_valid
__list_del_entry_valid
@@ -242,6 +248,7 @@
memstart_addr
misc_deregister
misc_register
mod_delayed_work_on
mod_timer
module_layout
__msecs_to_jiffies
@@ -256,6 +263,7 @@
napi_gro_receive
__napi_schedule
napi_schedule_prep
__netdev_alloc_skb
netdev_err
netdev_info
netdev_printk
@@ -268,13 +276,20 @@
netif_device_detach
netif_napi_add_weight
__netif_napi_del
netif_receive_skb_list
netif_rx
netif_tx_stop_all_queues
netif_tx_wake_queue
netlink_broadcast
netlink_register_notifier
netlink_unicast
netlink_unregister_notifier
net_ratelimit
nf_conntrack_destroy
nla_memcpy
__nla_parse
nla_put_64bit
nla_put
nla_put_64bit
nonseekable_open
noop_llseek
nr_cpu_ids
@@ -284,7 +299,10 @@
page_frag_alloc_align
__page_frag_cache_drain
page_frag_free
page_pinner_inited
__page_pinner_put_page
param_ops_bool
param_ops_charp
param_ops_int
param_ops_uint
passthru_features_check
@@ -318,6 +336,8 @@
preempt_schedule_notrace
prepare_to_wait_event
_printk
__pskb_pull_tail
___pskb_trim
put_device
__put_task_struct
put_unused_fd
@@ -338,6 +358,7 @@
refcount_warn_saturate
register_netdevice
register_netdevice_notifier
register_pernet_device
register_virtio_device
register_virtio_driver
__regmap_init
@@ -346,11 +367,17 @@
remap_pfn_range
request_firmware
request_threaded_irq
rhashtable_insert_slow
__rht_bucket_nested
rht_bucket_nested
rht_bucket_nested_insert
rtnl_is_locked
rtnl_lock
rtnl_unlock
sched_set_fifo_low
schedule
schedule_timeout
scnprintf
seq_lseek
seq_printf
seq_puts
@@ -377,30 +404,44 @@
single_open
single_release
skb_add_rx_frag
skb_clone
skb_copy
skb_copy_bits
skb_copy_expand
skb_dequeue
skb_pull
skb_push
skb_put
skb_queue_head
skb_queue_purge
skb_queue_tail
skb_to_sgvec
skb_trim
snprintf
sprintf
sscanf
__stack_chk_fail
strcasecmp
strcmp
strcpy
strlen
strncpy
strnlen
strscpy
__sw_hweight16
__sw_hweight32
__sw_hweight8
sync_file_create
synchronize_irq
synchronize_net
synchronize_rcu
sysfs_create_group
sysfs_remove_group
sysfs_remove_link
system_freezable_wq
system_wq
__tasklet_schedule
tasklet_setup
tasklet_unlock_wait
trace_event_buffer_commit
trace_event_buffer_reserve
@@ -411,8 +452,10 @@
trace_raw_output_prep
__trace_trigger_soft_disabled
unregister_netdev
unregister_netdevice_many
unregister_netdevice_notifier
unregister_netdevice_queue
unregister_pernet_device
unregister_virtio_device
unregister_virtio_driver
usb_add_hcd
@@ -537,7 +580,6 @@
btbcm_set_bdaddr
btbcm_setup_apple
btbcm_setup_patchram
cancel_delayed_work
device_wakeup_disable
__dev_kfree_skb_irq
disable_irq
@@ -568,6 +610,56 @@
usb_scuttle_anchored_urbs
usb_set_interface
# required by cfg80211.ko
bpf_trace_run10
bpf_trace_run7
bpf_trace_run8
__class_register
class_unregister
_ctype
debugfs_rename
__dev_change_net_namespace
dev_get_by_index
device_add
device_del
device_initialize
device_rename
dev_set_name
gcd
genlmsg_multicast_allns
get_net_ns_by_fd
get_net_ns_by_pid
inet_csk_get_port
init_uts_ns
key_create_or_update
key_put
keyring_alloc
ktime_get_coarse_with_offset
memcmp
net_ns_type_operations
nla_find
nla_reserve
__nla_validate
of_prop_next_u32
__put_net
rb_erase
rb_insert_color
request_firmware_nowait
rfkill_alloc
rfkill_blocked
rfkill_destroy
rfkill_register
rfkill_resume_polling
rfkill_set_hw_state_reason
rfkill_unregister
__sock_create
sock_release
sysfs_create_link
system_power_efficient_wq
trace_print_array_seq
verify_pkcs7_signature
wireless_nlevent_flush
# required by clk-vexpress-osc.ko
clk_hw_set_rate_range
devm_of_clk_add_hw_provider
@@ -601,7 +693,6 @@
# required by dummy_hcd.ko
ktime_get_ts64
scnprintf
strstr
usb_add_gadget_udc
usb_del_gadget_udc
@@ -611,7 +702,6 @@
# required by failover.ko
netdev_master_upper_dev_link
rtnl_is_locked
# required by goldfish_address_space.ko
memremap
@@ -661,59 +751,80 @@
hci_resume_dev
hci_suspend_dev
iov_iter_revert
skb_queue_head
# required by mac80211.ko
__alloc_percpu_gfp
arc4_crypt
arc4_setkey
bitmap_free
bitmap_zalloc
call_rcu
__cpu_possible_mask
crc32_be
crypto_aead_decrypt
crypto_aead_encrypt
crypto_aead_setauthsize
crypto_aead_setkey
crypto_alloc_aead
crypto_alloc_shash
crypto_alloc_skcipher
crypto_destroy_tfm
__crypto_memneq
crypto_shash_digest
crypto_shash_finup
crypto_shash_setkey
crypto_shash_update
crypto_skcipher_decrypt
crypto_skcipher_encrypt
crypto_skcipher_setkey
__crypto_xor
dev_fetch_sw_netstats
_find_next_bit
free_percpu
get_random_u16
__hw_addr_init
__hw_addr_sync
__hw_addr_unsync
idr_find
idr_for_each
kernel_param_lock
kernel_param_unlock
kfree_skb_list_reason
kmalloc_large
ktime_get_seconds
netdev_set_default_ethtool_ops
netif_receive_skb
__per_cpu_offset
pskb_expand_head
rcu_barrier
register_inet6addr_notifier
register_inetaddr_notifier
rhashtable_free_and_destroy
rhltable_init
round_jiffies
round_jiffies_relative
round_jiffies_up
skb_checksum_help
skb_clone_sk
skb_complete_wifi_ack
skb_ensure_writable
__skb_get_hash
__skb_gso_segment
__sw_hweight64
tasklet_kill
unregister_inet6addr_notifier
unregister_inetaddr_notifier
# required by mac80211_hwsim.ko
alloc_netdev_mqs
__cfg80211_alloc_event_skb
__cfg80211_alloc_reply_skb
__cfg80211_send_event_skb
cfg80211_vendor_cmd_reply
dev_alloc_name
device_bind_driver
device_release_driver
dst_release
eth_mac_addr
genlmsg_put
genl_notify
genl_register_family
genl_unregister_family
ieee80211_find_sta_by_link_addrs
ieee80211_get_channel_khz
ieee80211_nullfunc_get
ieee80211_probereq_get
ieee80211_ready_on_channel
ieee80211_remain_on_channel_expired
ieee80211_rx_irqsafe
ieee80211_scan_completed
ieee80211_set_active_links_async
ieee80211_tx_prepare_skb
ieee80211_tx_status_irqsafe
init_net
jiffies_to_msecs
__netdev_alloc_skb
netlink_broadcast
netlink_register_notifier
netlink_unicast
netlink_unregister_notifier
net_namespace_list
nla_memcpy
register_pernet_device
regulatory_hint
rhashtable_destroy
rhashtable_init
rhashtable_insert_slow
__rht_bucket_nested
rht_bucket_nested
rht_bucket_nested_insert
schedule_timeout_interruptible
skb_copy
skb_copy_expand
__skb_ext_put
skb_trim
__sw_hweight16
unregister_pernet_device
wiphy_apply_custom_regulatory
# required by mt76-usb.ko
usb_init_urb
@@ -722,7 +833,6 @@
usb_unpoison_urb
# required by mt76.ko
cfg80211_reg_can_beacon
debugfs_create_blob
debugfs_create_file_unsafe
dev_driver_string
@@ -731,30 +841,13 @@
dma_map_page_attrs
dma_sync_single_for_cpu
dma_unmap_page_attrs
idr_alloc
idr_get_next
ieee80211_calc_rx_airtime
ieee80211_channel_to_freq_khz
ieee80211_find_sta_by_ifaddr
ieee80211_get_key_rx_seq
ieee80211_next_txq
ieee80211_rx_list
__ieee80211_schedule_txq
ieee80211_sta_eosp
ieee80211_sta_pspoll
ieee80211_sta_ps_transition
ieee80211_sta_uapsd_trigger
ieee80211_tx_dequeue
ieee80211_txq_schedule_start
init_dummy_netdev
__ioread32_copy
__iowrite32_copy
kthread_parkme
kthread_should_park
kvfree_call_rcu
led_classdev_register_ext
led_classdev_unregister
netif_receive_skb_list
of_get_child_by_name
of_get_mac_address
of_get_next_child
@@ -763,26 +856,14 @@
pcie_capability_clear_and_set_word
pcie_capability_read_word
radix_tree_tagged
rfc1042_header
__skb_pad
wiphy_read_of_freq_limits
# required by mt76x02-lib.ko
bpf_trace_run1
debugfs_create_bool
ieee80211_calc_tx_airtime
ieee80211_hdrlen
ieee80211_iter_keys_rcu
ieee80211_restart_hw
__kfifo_init
___pskb_trim
__tasklet_schedule
tasklet_setup
wiphy_to_ieee80211_hw
# required by mt76x02-usb.ko
hrtimer_active
ieee80211_iterate_interfaces
system_highpri_wq
# required by nd_virtio.ko
@@ -794,7 +875,6 @@
# required by net_failover.ko
call_netdevice_notifiers
dev_close
dev_get_stats
dev_mc_sync_multiple
dev_mc_unsync
@@ -839,12 +919,10 @@
# required by psmouse.ko
bus_register_notifier
bus_unregister_notifier
del_timer_sync
device_add_groups
device_link_add
device_link_remove
device_remove_groups
__flush_workqueue
i2c_adapter_type
i2c_bus_type
i2c_client_type
@@ -946,29 +1024,15 @@
platform_bus
sockfd_lookup
strchr
sysfs_remove_link
usb_speed_string
# required by virt_wifi.ko
cfg80211_connect_done
cfg80211_disconnected
cfg80211_inform_bss_data
cfg80211_put_bss
cfg80211_scan_done
__dev_get_by_index
_dev_printk
__module_get
module_put
netdev_upper_dev_link
netif_stacked_transfer_operstate
rtnl_link_register
rtnl_link_unregister
skb_clone
unregister_netdevice_many
wiphy_free
wiphy_new_nm
wiphy_register
wiphy_unregister
# required by virtio-gpu.ko
__devm_request_region
@@ -1082,7 +1146,6 @@
__SetPageMovable
si_mem_available
si_meminfo
system_freezable_wq
unregister_oom_notifier
unregister_shrinker
virtqueue_disable_dma_api_for_buffers
@@ -1184,8 +1247,6 @@
eth_prepare_mac_addr_change
ethtool_sprintf
ethtool_virtdev_set_link_ksettings
eth_type_trans
_find_first_bit
flow_keys_basic_dissector
jiffies_to_usecs
__napi_alloc_skb
@@ -1198,9 +1259,7 @@
__netif_set_xps_queue
netif_tx_lock
netif_tx_unlock
net_ratelimit
__num_online_cpus
__pskb_pull_tail
sched_clock
skb_coalesce_rx_frag
__skb_flow_dissect
@@ -1270,7 +1329,6 @@
wait_for_completion_interruptible_timeout
# required by vkms.ko
crc32_le
__devm_drm_dev_alloc
devres_open_group
devres_release_group
@@ -1308,7 +1366,6 @@
# required by vmw_vsock_virtio_transport.ko
sk_error_report
synchronize_rcu
virtio_transport_connect
virtio_transport_deliver_tap_pkt
virtio_transport_destruct
@@ -1359,26 +1416,18 @@
can_bus_off
can_change_state
capable
__class_register
class_unregister
contig_page_data
__cpu_possible_mask
crypto_alloc_base
crypto_comp_compress
crypto_comp_decompress
crypto_destroy_tfm
crypto_has_alg
dec_zone_page_state
down_read
down_write
_find_next_bit
flush_dcache_page
folio_wait_bit
free_percpu
hex_asc_upper
hex_to_bin
idr_find
idr_for_each
inc_zone_page_state
__init_rwsem
kstrdup
@@ -1387,7 +1436,6 @@
memset64
mutex_is_locked
page_endio
__per_cpu_offset
_raw_read_lock
_raw_read_unlock
_raw_write_lock

View File

@@ -31,10 +31,6 @@
__blk_mq_alloc_disk
__blk_mq_end_request
__blk_rq_map_sg
__cfg80211_alloc_event_skb
__cfg80211_alloc_reply_skb
__cfg80211_radar_event
__cfg80211_send_event_skb
__check_object_size
__class_create
__class_register
@@ -139,7 +135,6 @@
__hwspin_unlock
__i2c_smbus_xfer
__i2c_transfer
__ieee80211_schedule_txq
__inet6_lookup_established
__inet_lookup_established
__init_rwsem
@@ -400,6 +395,7 @@
__traceiter_android_vh_ipi_stop
__traceiter_android_vh_is_fpsimd_save
__traceiter_android_vh_jiffies_update
__traceiter_android_vh_mmap_region
__traceiter_android_vh_mutex_wait_finish
__traceiter_android_vh_mutex_wait_start
__traceiter_android_vh_printk_hotplug
@@ -420,6 +416,7 @@
__traceiter_android_vh_timer_calc_index
__traceiter_android_vh_try_to_freeze_todo
__traceiter_android_vh_try_to_freeze_todo_unfrozen
__traceiter_android_vh_try_to_unmap_one
__traceiter_android_vh_ufs_check_int_errors
__traceiter_android_vh_ufs_clock_scaling
__traceiter_android_vh_ufs_compl_command
@@ -566,6 +563,7 @@
__tracepoint_android_vh_ipi_stop
__tracepoint_android_vh_is_fpsimd_save
__tracepoint_android_vh_jiffies_update
__tracepoint_android_vh_mmap_region
__tracepoint_android_vh_mutex_wait_finish
__tracepoint_android_vh_mutex_wait_start
__tracepoint_android_vh_printk_hotplug
@@ -584,6 +582,7 @@
__tracepoint_android_vh_show_suspend_epoch_val
__tracepoint_android_vh_sysrq_crash
__tracepoint_android_vh_timer_calc_index
__tracepoint_android_vh_try_to_unmap_one
__tracepoint_android_vh_try_to_freeze_todo
__tracepoint_android_vh_try_to_freeze_todo_unfrozen
__tracepoint_android_vh_ufs_check_int_errors
@@ -872,7 +871,6 @@
bpf_trace_run8
bpf_trace_run9
bpf_warn_invalid_xdp_action
bridge_tunnel_header
bsg_job_done
bsg_remove_queue
bsg_setup_queue
@@ -974,100 +972,6 @@
cec_s_phys_addr
cec_transmit_attempt_done_ts
cec_unregister_adapter
cfg80211_any_usable_channels
cfg80211_assoc_comeback
cfg80211_assoc_failure
cfg80211_auth_timeout
cfg80211_background_cac_abort
cfg80211_bss_color_notify
cfg80211_bss_flush
cfg80211_bss_iter
cfg80211_cac_event
cfg80211_calculate_bitrate
cfg80211_ch_switch_notify
cfg80211_ch_switch_started_notify
cfg80211_chandef_compatible
cfg80211_chandef_create
cfg80211_chandef_dfs_required
cfg80211_chandef_usable
cfg80211_chandef_valid
cfg80211_check_combinations
cfg80211_check_station_change
cfg80211_classify8021d
cfg80211_conn_failed
cfg80211_connect_done
cfg80211_control_port_tx_status
cfg80211_cqm_beacon_loss_notify
cfg80211_cqm_pktloss_notify
cfg80211_cqm_rssi_notify
cfg80211_cqm_txe_notify
cfg80211_crit_proto_stopped
cfg80211_del_sta_sinfo
cfg80211_disconnected
cfg80211_external_auth_request
cfg80211_find_elem_match
cfg80211_find_vendor_elem
cfg80211_free_nan_func
cfg80211_ft_event
cfg80211_get_bss
cfg80211_get_drvinfo
cfg80211_get_ies_channel_number
cfg80211_get_iftype_ext_capa
cfg80211_get_p2p_attr
cfg80211_get_station
cfg80211_gtk_rekey_notify
cfg80211_ibss_joined
cfg80211_iftype_allowed
cfg80211_inform_bss_data
cfg80211_inform_bss_frame_data
cfg80211_is_element_inherited
cfg80211_iter_combinations
cfg80211_merge_profile
cfg80211_mgmt_tx_status_ext
cfg80211_michael_mic_failure
cfg80211_nan_func_terminated
cfg80211_nan_match
cfg80211_new_sta
cfg80211_notify_new_peer_candidate
cfg80211_pmksa_candidate_notify
cfg80211_pmsr_complete
cfg80211_pmsr_report
cfg80211_port_authorized
cfg80211_probe_status
cfg80211_put_bss
cfg80211_ready_on_channel
cfg80211_ref_bss
cfg80211_reg_can_beacon
cfg80211_reg_can_beacon_relax
cfg80211_register_netdevice
cfg80211_remain_on_channel_expired
cfg80211_report_obss_beacon_khz
cfg80211_report_wowlan_wakeup
cfg80211_roamed
cfg80211_rx_assoc_resp
cfg80211_rx_control_port
cfg80211_rx_mgmt_ext
cfg80211_rx_mlme_mgmt
cfg80211_rx_spurious_frame
cfg80211_rx_unexpected_4addr_frame
cfg80211_rx_unprot_mlme_mgmt
cfg80211_scan_done
cfg80211_sched_scan_results
cfg80211_sched_scan_stopped
cfg80211_sched_scan_stopped_locked
cfg80211_send_layer2_update
cfg80211_shutdown_all_interfaces
cfg80211_sinfo_alloc_tid_stats
cfg80211_sta_opmode_change_notify
cfg80211_stop_iface
cfg80211_tdls_oper_request
cfg80211_tx_mgmt_expired
cfg80211_tx_mlme_mgmt
cfg80211_unlink_bss
cfg80211_unregister_wdev
cfg80211_update_owe_info_event
cfg80211_vendor_cmd_get_sender
cfg80211_vendor_cmd_reply
cgroup_path_ns
cgroup_taskset_first
cgroup_taskset_next
@@ -2169,7 +2073,6 @@
freq_qos_remove_notifier
freq_qos_remove_request
freq_qos_update_request
freq_reg_info
fs_bio_set
fsync_bdev
ftrace_dump
@@ -2275,7 +2178,6 @@
get_user_pages
get_user_pages_fast
get_vaddr_frames
get_wiphy_regdom
get_zeroed_page
getboottime64
gh_rm_call
@@ -2502,151 +2404,6 @@
idr_preload
idr_remove
idr_replace
ieee80211_alloc_hw_nm
ieee80211_amsdu_to_8023s
ieee80211_ap_probereq_get
ieee80211_ave_rssi
ieee80211_beacon_cntdwn_is_complete
ieee80211_beacon_get_template
ieee80211_beacon_get_tim
ieee80211_beacon_loss
ieee80211_beacon_set_cntdwn
ieee80211_beacon_update_cntdwn
ieee80211_bss_get_elem
ieee80211_calc_rx_airtime
ieee80211_calc_tx_airtime
ieee80211_chandef_to_operating_class
ieee80211_channel_switch_disconnect
ieee80211_channel_to_freq_khz
ieee80211_chswitch_done
ieee80211_color_change_finish
ieee80211_connection_loss
ieee80211_cqm_beacon_loss_notify
ieee80211_cqm_rssi_notify
ieee80211_csa_finish
ieee80211_ctstoself_duration
ieee80211_ctstoself_get
ieee80211_data_to_8023_exthdr
ieee80211_disable_rssi_reports
ieee80211_disconnect
ieee80211_enable_rssi_reports
ieee80211_find_sta
ieee80211_find_sta_by_ifaddr
ieee80211_find_sta_by_link_addrs
ieee80211_free_hw
ieee80211_free_txskb
ieee80211_freq_khz_to_channel
ieee80211_generic_frame_duration
ieee80211_get_bssid
ieee80211_get_buffered_bc
ieee80211_get_channel_khz
ieee80211_get_fils_discovery_tmpl
ieee80211_get_hdrlen_from_skb
ieee80211_get_key_rx_seq
ieee80211_get_mesh_hdrlen
ieee80211_get_num_supported_channels
ieee80211_get_response_rate
ieee80211_get_tkip_p1k_iv
ieee80211_get_tkip_p2k
ieee80211_get_tkip_rx_p1k
ieee80211_get_tx_rates
ieee80211_get_unsol_bcast_probe_resp_tmpl
ieee80211_get_vht_max_nss
ieee80211_gtk_rekey_add
ieee80211_gtk_rekey_notify
ieee80211_hdrlen
ieee80211_hw_restart_disconnect
ieee80211_ie_split_ric
ieee80211_iter_chan_contexts_atomic
ieee80211_iter_keys
ieee80211_iter_keys_rcu
ieee80211_iterate_active_interfaces_atomic
ieee80211_iterate_active_interfaces_mtx
ieee80211_iterate_interfaces
ieee80211_iterate_stations
ieee80211_iterate_stations_atomic
ieee80211_key_mic_failure
ieee80211_key_replay
ieee80211_manage_rx_ba_offl
ieee80211_mandatory_rates
ieee80211_mark_rx_ba_filtered_frames
ieee80211_nan_func_match
ieee80211_nan_func_terminated
ieee80211_next_txq
ieee80211_nullfunc_get
ieee80211_operating_class_to_band
ieee80211_parse_p2p_noa
ieee80211_probereq_get
ieee80211_proberesp_get
ieee80211_pspoll_get
ieee80211_queue_delayed_work
ieee80211_queue_stopped
ieee80211_queue_work
ieee80211_radar_detected
ieee80211_radiotap_iterator_init
ieee80211_radiotap_iterator_next
ieee80211_rate_control_register
ieee80211_rate_control_unregister
ieee80211_ready_on_channel
ieee80211_register_hw
ieee80211_remain_on_channel_expired
ieee80211_remove_key
ieee80211_report_low_ack
ieee80211_report_wowlan_wakeup
ieee80211_request_smps
ieee80211_reserve_tid
ieee80211_restart_hw
ieee80211_resume_disconnect
ieee80211_rts_duration
ieee80211_rts_get
ieee80211_rx_ba_timer_expired
ieee80211_rx_irqsafe
ieee80211_rx_list
ieee80211_rx_napi
ieee80211_s1g_channel_width
ieee80211_scan_completed
ieee80211_sched_scan_results
ieee80211_sched_scan_stopped
ieee80211_send_bar
ieee80211_send_eosp_nullfunc
ieee80211_set_active_links
ieee80211_set_active_links_async
ieee80211_set_key_rx_seq
ieee80211_sta_block_awake
ieee80211_sta_eosp
ieee80211_sta_ps_transition
ieee80211_sta_pspoll
ieee80211_sta_recalc_aggregates
ieee80211_sta_register_airtime
ieee80211_sta_set_buffered
ieee80211_sta_uapsd_trigger
ieee80211_start_tx_ba_cb_irqsafe
ieee80211_start_tx_ba_session
ieee80211_stop_queue
ieee80211_stop_queues
ieee80211_stop_rx_ba_session
ieee80211_stop_tx_ba_cb_irqsafe
ieee80211_stop_tx_ba_session
ieee80211_tdls_oper_request
ieee80211_tkip_add_iv
ieee80211_tx_dequeue
ieee80211_tx_prepare_skb
ieee80211_tx_rate_update
ieee80211_tx_status
ieee80211_tx_status_8023
ieee80211_tx_status_ext
ieee80211_tx_status_irqsafe
ieee80211_txq_airtime_check
ieee80211_txq_get_depth
ieee80211_txq_may_transmit
ieee80211_txq_schedule_start
ieee80211_unregister_hw
ieee80211_unreserve_tid
ieee80211_update_mu_groups
ieee80211_update_p2p_noa
ieee80211_vif_to_wdev
ieee80211_wake_queue
ieee80211_wake_queues
ieee802154_alloc_hw
ieee802154_configure_durations
ieee802154_free_hw
@@ -2663,7 +2420,6 @@
ieee802154_xmit_complete
ieee802154_xmit_error
ieee802154_xmit_hw_error
ieeee80211_obss_color_collision_notify
iio_buffer_enabled
iio_buffer_init
iio_buffer_put
@@ -3807,7 +3563,6 @@
radix_tree_lookup
radix_tree_next_chunk
radix_tree_tagged
rate_control_set_rates
rational_best_approximation
raw_notifier_call_chain
raw_notifier_chain_register
@@ -3861,8 +3616,6 @@
refcount_dec_if_one
refcount_dec_not_one
refcount_warn_saturate
reg_initiator_name
reg_query_regdb_wmm
regcache_cache_bypass
regcache_cache_only
regcache_drop_region
@@ -3937,6 +3690,7 @@
regulator_force_disable
regulator_get
regulator_get_current_limit_regmap
regulator_get_drvdata
regulator_get_linear_step
regulator_get_mode
regulator_get_optional
@@ -3963,10 +3717,6 @@
regulator_set_voltage_sel_regmap
regulator_unregister
regulator_unregister_notifier
regulatory_hint
regulatory_pre_cac_allowed
regulatory_set_wiphy_regd
regulatory_set_wiphy_regd_sync
release_firmware
release_sock
remap_pfn_range
@@ -3995,7 +3745,6 @@
reset_control_release
reset_control_reset
return_address
rfc1042_header
rfkill_alloc
rfkill_blocked
rfkill_destroy
@@ -4780,6 +4529,7 @@
ucsi_destroy
ucsi_get_drvdata
ucsi_register
ucsi_send_command
ucsi_set_drvdata
ucsi_unregister
udp4_hwcsum
@@ -5287,17 +5037,6 @@
watchdog_register_device
watchdog_set_restart_priority
watchdog_unregister_device
wdev_chandef
wdev_to_ieee80211_vif
wiphy_apply_custom_regulatory
wiphy_free
wiphy_new_nm
wiphy_read_of_freq_limits
wiphy_register
wiphy_rfkill_set_hw_state_reason
wiphy_rfkill_start_polling
wiphy_to_ieee80211_hw
wiphy_unregister
wireless_nlevent_flush
wireless_send_event
woken_wake_function

View File

@@ -133,3 +133,125 @@
__tracepoint_android_rvh_after_enqueue_task
__tracepoint_android_rvh_after_dequeue_task
__tracepoint_android_vh_map_util_freq
#required by ufs-qcom.ko
blk_crypto_reprogram_all_keys
blk_crypto_register
blk_crypto_keyslot_index
blk_mq_destroy_queue
blk_put_queue
blk_pm_runtime_init
sbitmap_weight
scsi_done
scsi_remove_device
#required by mi_sched.ko
__traceiter_android_vh_scheduler_tick
__traceiter_android_vh_free_user
__traceiter_android_vh_alloc_uid
__tracepoint_android_vh_scheduler_tick
__tracepoint_android_vh_free_user
__tracepoint_android_vh_alloc_uid
free_uid
find_user
#required by mi_freqwdg.ko
__traceiter_android_vh_freq_qos_remove_request
__traceiter_android_vh_freq_qos_update_request
__traceiter_android_vh_freq_qos_add_request
__traceiter_android_rvh_entity_tick
__traceiter_android_rvh_dequeue_task_fair
__tracepoint_android_vh_freq_qos_remove_request
__tracepoint_android_vh_freq_qos_update_request
__tracepoint_android_vh_freq_qos_add_request
__tracepoint_android_rvh_dequeue_task_fair
__tracepoint_android_rvh_entity_tick
#required by millet.ko
__traceiter_android_rvh_refrigerator
__tracepoint_android_rvh_refrigerator
freezer_cgrp_subsys
#required by bfq module
__blkg_prfill_rwstat
blkg_rwstat_recursive_sum
blkg_prfill_rwstat
blkg_conf_finish
blkg_conf_prep
__blkg_prfill_u64
blkcg_print_blkgs
blkg_rwstat_exit
blkg_rwstat_init
percpu_counter_add_batch
io_cgrp_subsys_on_dfl_key
ioc_lookup_icq
bdi_dev_name
#required by metis.ko module
__traceiter_android_vh_rwsem_read_wait_start
__traceiter_android_vh_rwsem_write_wait_start
__traceiter_android_vh_mutex_wait_start
__traceiter_android_vh_alter_mutex_list_add
__traceiter_android_rvh_cpuset_fork
__traceiter_android_vh_sched_setaffinity_early
__traceiter_android_rvh_set_cpus_allowed_comm
__traceiter_android_rvh_dequeue_task
__tracepoint_android_vh_rwsem_read_wait_start
__tracepoint_android_vh_rwsem_write_wait_start
__tracepoint_android_vh_mutex_wait_start
__tracepoint_android_vh_alter_mutex_list_add
__tracepoint_android_rvh_cpuset_fork
__tracepoint_android_vh_sched_setaffinity_early
__tracepoint_android_rvh_set_cpus_allowed_comm
__tracepoint_android_rvh_dequeue_task
cpuset_cpus_allowed
#required by millet.ko
__traceiter_android_vh_binder_wait_for_work
__traceiter_android_vh_do_send_sig_info
__traceiter_android_vh_binder_preset
__traceiter_android_vh_binder_trans
__traceiter_android_vh_binder_reply
__traceiter_android_vh_binder_alloc_new_buf_locked
__tracepoint_android_vh_binder_wait_for_work
__tracepoint_android_vh_do_send_sig_info
__tracepoint_android_vh_binder_preset
__tracepoint_android_vh_binder_trans
__tracepoint_android_vh_binder_reply
__tracepoint_android_vh_binder_alloc_new_buf_locked
#required by io_limit.ko
__traceiter_android_vh_psi_event
__traceiter_android_vh_psi_group
__traceiter_android_rvh_ctl_dirty_rate
__tracepoint_android_vh_psi_event
__tracepoint_android_vh_psi_group
__tracepoint_android_rvh_ctl_dirty_rate
#required by touch module
power_supply_is_system_supplied
#required by mi_mempool.ko
__traceiter_android_vh_alloc_pages_reclaim_bypass
__traceiter_android_vh_alloc_pages_failure_bypass
__tracepoint_android_vh_alloc_pages_reclaim_bypass
__tracepoint_android_vh_alloc_pages_failure_bypass
#required by mi_mempool.ko
__traceiter_android_vh_mmput
__tracepoint_android_vh_mmput
#required by mi_mempool.ko
__traceiter_android_vh_madvise_cold_pageout_skip
__tracepoint_android_vh_madvise_cold_pageout_skip
#required by n_gsm.ko
tty_write_room
tty_port_tty_set
tty_register_device
tty_hung_up_p
tty_name
tty_port_block_til_ready
tty_port_close_start
tty_port_lower_dtr_rts
tty_port_close_end

View File

@@ -1,14 +1,9 @@
__cfg80211_alloc_event_skb
__cfg80211_alloc_reply_skb
__cfg80211_radar_event
__cfg80211_send_event_skb
__hci_cmd_send
__hci_cmd_sync
__hci_cmd_sync_ev
__hci_cmd_sync_sk
__hci_cmd_sync_status
__hci_cmd_sync_status_sk
__ieee80211_schedule_txq
__nfc_alloc_vendor_cmd_reply_skb
alloc_can_err_skb
alloc_can_skb
@@ -18,7 +13,6 @@ alloc_canxl_skb
arc4_crypt
arc4_setkey
baswap
bridge_tunnel_header
bt_accept_dequeue
bt_accept_enqueue
bt_accept_unlink
@@ -94,106 +88,9 @@ cdc_ncm_rx_verify_nth32
cdc_ncm_select_altsetting
cdc_ncm_tx_fixup
cdc_ncm_unbind
cfg80211_any_usable_channels
cfg80211_assoc_comeback
cfg80211_assoc_failure
cfg80211_auth_timeout
cfg80211_background_cac_abort
cfg80211_bss_color_notify
cfg80211_bss_flush
cfg80211_bss_iter
cfg80211_cac_event
cfg80211_calculate_bitrate
cfg80211_ch_switch_notify
cfg80211_ch_switch_started_notify
cfg80211_chandef_compatible
cfg80211_chandef_create
cfg80211_chandef_dfs_required
cfg80211_chandef_usable
cfg80211_chandef_valid
cfg80211_check_combinations
cfg80211_check_station_change
cfg80211_classify8021d
cfg80211_conn_failed
cfg80211_connect_done
cfg80211_control_port_tx_status
cfg80211_cqm_beacon_loss_notify
cfg80211_cqm_pktloss_notify
cfg80211_cqm_rssi_notify
cfg80211_cqm_txe_notify
cfg80211_crit_proto_stopped
cfg80211_del_sta_sinfo
cfg80211_disconnected
cfg80211_external_auth_request
cfg80211_find_elem_match
cfg80211_find_vendor_elem
cfg80211_free_nan_func
cfg80211_ft_event
cfg80211_get_bss
cfg80211_get_drvinfo
cfg80211_get_ies_channel_number
cfg80211_get_iftype_ext_capa
cfg80211_get_p2p_attr
cfg80211_get_station
cfg80211_gtk_rekey_notify
cfg80211_ibss_joined
cfg80211_iftype_allowed
cfg80211_inform_bss_data
cfg80211_inform_bss_frame_data
cfg80211_is_element_inherited
cfg80211_iter_combinations
cfg80211_merge_profile
cfg80211_mgmt_tx_status_ext
cfg80211_michael_mic_failure
cfg80211_nan_func_terminated
cfg80211_nan_match
cfg80211_new_sta
cfg80211_notify_new_peer_candidate
cfg80211_pmksa_candidate_notify
cfg80211_pmsr_complete
cfg80211_pmsr_report
cfg80211_port_authorized
cfg80211_probe_status
cfg80211_put_bss
cfg80211_ready_on_channel
cfg80211_ref_bss
cfg80211_reg_can_beacon
cfg80211_reg_can_beacon_relax
cfg80211_register_netdevice
cfg80211_remain_on_channel_expired
cfg80211_report_obss_beacon_khz
cfg80211_report_wowlan_wakeup
cfg80211_roamed
cfg80211_rx_assoc_resp
cfg80211_rx_control_port
cfg80211_rx_mgmt_ext
cfg80211_rx_mlme_mgmt
cfg80211_rx_spurious_frame
cfg80211_rx_unexpected_4addr_frame
cfg80211_rx_unprot_mlme_mgmt
cfg80211_scan_done
cfg80211_sched_scan_results
cfg80211_sched_scan_stopped
cfg80211_sched_scan_stopped_locked
cfg80211_send_layer2_update
cfg80211_shutdown_all_interfaces
cfg80211_sinfo_alloc_tid_stats
cfg80211_sta_opmode_change_notify
cfg80211_stop_iface
cfg80211_tdls_oper_request
cfg80211_tx_mgmt_expired
cfg80211_tx_mlme_mgmt
cfg80211_unlink_bss
cfg80211_unregister_wdev
cfg80211_update_owe_info_event
cfg80211_valid_disable_subchannel_bitmap
cfg80211_vendor_cmd_get_sender
cfg80211_vendor_cmd_reply
close_candev
free_candev
freq_reg_info
generic_mii_ioctl
get_wiphy_regdom
h4_recv_buf
hci_alloc_dev_priv
hci_cmd_sync
@@ -222,151 +119,6 @@ hci_uart_unregister_device
hci_unregister_cb
hci_unregister_dev
hidp_hid_driver
ieee80211_alloc_hw_nm
ieee80211_amsdu_to_8023s
ieee80211_ap_probereq_get
ieee80211_ave_rssi
ieee80211_beacon_cntdwn_is_complete
ieee80211_beacon_get_template
ieee80211_beacon_get_tim
ieee80211_beacon_loss
ieee80211_beacon_set_cntdwn
ieee80211_beacon_update_cntdwn
ieee80211_bss_get_elem
ieee80211_calc_rx_airtime
ieee80211_calc_tx_airtime
ieee80211_chandef_to_operating_class
ieee80211_channel_switch_disconnect
ieee80211_channel_to_freq_khz
ieee80211_chswitch_done
ieee80211_color_change_finish
ieee80211_connection_loss
ieee80211_cqm_beacon_loss_notify
ieee80211_cqm_rssi_notify
ieee80211_csa_finish
ieee80211_ctstoself_duration
ieee80211_ctstoself_get
ieee80211_data_to_8023_exthdr
ieee80211_disable_rssi_reports
ieee80211_disconnect
ieee80211_enable_rssi_reports
ieee80211_find_sta
ieee80211_find_sta_by_ifaddr
ieee80211_find_sta_by_link_addrs
ieee80211_free_hw
ieee80211_free_txskb
ieee80211_freq_khz_to_channel
ieee80211_generic_frame_duration
ieee80211_get_bssid
ieee80211_get_buffered_bc
ieee80211_get_channel_khz
ieee80211_get_fils_discovery_tmpl
ieee80211_get_hdrlen_from_skb
ieee80211_get_key_rx_seq
ieee80211_get_mesh_hdrlen
ieee80211_get_num_supported_channels
ieee80211_get_response_rate
ieee80211_get_tkip_p1k_iv
ieee80211_get_tkip_p2k
ieee80211_get_tkip_rx_p1k
ieee80211_get_tx_rates
ieee80211_get_unsol_bcast_probe_resp_tmpl
ieee80211_get_vht_max_nss
ieee80211_gtk_rekey_add
ieee80211_gtk_rekey_notify
ieee80211_hdrlen
ieee80211_hw_restart_disconnect
ieee80211_ie_split_ric
ieee80211_iter_chan_contexts_atomic
ieee80211_iter_keys
ieee80211_iter_keys_rcu
ieee80211_iterate_active_interfaces_atomic
ieee80211_iterate_active_interfaces_mtx
ieee80211_iterate_interfaces
ieee80211_iterate_stations
ieee80211_iterate_stations_atomic
ieee80211_key_mic_failure
ieee80211_key_replay
ieee80211_manage_rx_ba_offl
ieee80211_mandatory_rates
ieee80211_mark_rx_ba_filtered_frames
ieee80211_nan_func_match
ieee80211_nan_func_terminated
ieee80211_next_txq
ieee80211_nullfunc_get
ieee80211_operating_class_to_band
ieee80211_parse_p2p_noa
ieee80211_probereq_get
ieee80211_proberesp_get
ieee80211_pspoll_get
ieee80211_queue_delayed_work
ieee80211_queue_stopped
ieee80211_queue_work
ieee80211_radar_detected
ieee80211_radiotap_iterator_init
ieee80211_radiotap_iterator_next
ieee80211_rate_control_register
ieee80211_rate_control_unregister
ieee80211_ready_on_channel
ieee80211_register_hw
ieee80211_remain_on_channel_expired
ieee80211_remove_key
ieee80211_report_low_ack
ieee80211_report_wowlan_wakeup
ieee80211_request_smps
ieee80211_reserve_tid
ieee80211_restart_hw
ieee80211_resume_disconnect
ieee80211_rts_duration
ieee80211_rts_get
ieee80211_rx_ba_timer_expired
ieee80211_rx_irqsafe
ieee80211_rx_list
ieee80211_rx_napi
ieee80211_s1g_channel_width
ieee80211_scan_completed
ieee80211_sched_scan_results
ieee80211_sched_scan_stopped
ieee80211_send_bar
ieee80211_send_eosp_nullfunc
ieee80211_set_active_links
ieee80211_set_active_links_async
ieee80211_set_key_rx_seq
ieee80211_sta_block_awake
ieee80211_sta_eosp
ieee80211_sta_ps_transition
ieee80211_sta_pspoll
ieee80211_sta_recalc_aggregates
ieee80211_sta_register_airtime
ieee80211_sta_set_buffered
ieee80211_sta_uapsd_trigger
ieee80211_start_tx_ba_cb_irqsafe
ieee80211_start_tx_ba_session
ieee80211_stop_queue
ieee80211_stop_queues
ieee80211_stop_rx_ba_session
ieee80211_stop_tx_ba_cb_irqsafe
ieee80211_stop_tx_ba_session
ieee80211_tdls_oper_request
ieee80211_tkip_add_iv
ieee80211_tx_dequeue
ieee80211_tx_prepare_skb
ieee80211_tx_rate_update
ieee80211_tx_status
ieee80211_tx_status_8023
ieee80211_tx_status_ext
ieee80211_tx_status_irqsafe
ieee80211_txq_airtime_check
ieee80211_txq_get_depth
ieee80211_txq_may_transmit
ieee80211_txq_schedule_start
ieee80211_unregister_hw
ieee80211_unreserve_tid
ieee80211_update_mu_groups
ieee80211_update_p2p_noa
ieee80211_vif_to_wdev
ieee80211_wake_queue
ieee80211_wake_queues
ieee802154_alloc_hw
ieee802154_configure_durations
ieee802154_free_hw
@@ -383,7 +135,6 @@ ieee802154_wake_queue
ieee802154_xmit_complete
ieee802154_xmit_error
ieee802154_xmit_hw_error
ieeee80211_obss_color_collision_notify
l2cap_add_psm
l2cap_chan_close
l2cap_chan_connect
@@ -481,16 +232,8 @@ qca_send_pre_shutdown_cmd
qca_set_bdaddr
qca_set_bdaddr_rome
qca_uart_setup
rate_control_set_rates
reg_initiator_name
reg_query_regdb_wmm
register_candev
register_pppox_proto
regulatory_hint
regulatory_pre_cac_allowed
regulatory_set_wiphy_regd
regulatory_set_wiphy_regd_sync
rfc1042_header
rfkill_alloc
rfkill_blocked
rfkill_destroy
@@ -586,17 +329,6 @@ usbnet_update_max_qlen
usbnet_write_cmd
usbnet_write_cmd_async
usbnet_write_cmd_nopm
wdev_chandef
wdev_to_ieee80211_vif
wiphy_apply_custom_regulatory
wiphy_free
wiphy_new_nm
wiphy_read_of_freq_limits
wiphy_register
wiphy_rfkill_set_hw_state_reason
wiphy_rfkill_start_polling
wiphy_to_ieee80211_hw
wiphy_unregister
wpan_phy_find
wpan_phy_for_each
wpan_phy_free

View File

@@ -27,6 +27,7 @@ drivers/net/usb/usbnet.ko
drivers/usb/class/cdc-acm.ko
drivers/usb/serial/ftdi_sio.ko
drivers/usb/serial/usbserial.ko
kernel/kheaders.ko
lib/crypto/libarc4.ko
mm/zsmalloc.ko
net/6lowpan/6lowpan.ko
@@ -50,11 +51,9 @@ net/ieee802154/ieee802154.ko
net/ieee802154/ieee802154_socket.ko
net/l2tp/l2tp_core.ko
net/l2tp/l2tp_ppp.ko
net/mac80211/mac80211.ko
net/mac802154/mac802154.ko
net/nfc/nfc.ko
net/rfkill/rfkill.ko
net/tipc/diag.ko
net/tipc/tipc.ko
net/wireless/cfg80211.ko

View File

@@ -48,11 +48,9 @@ net/ieee802154/ieee802154.ko
net/ieee802154/ieee802154_socket.ko
net/l2tp/l2tp_core.ko
net/l2tp/l2tp_ppp.ko
net/mac80211/mac80211.ko
net/mac802154/mac802154.ko
net/nfc/nfc.ko
net/rfkill/rfkill.ko
net/tipc/diag.ko
net/tipc/tipc.ko
net/wireless/cfg80211.ko

View File

@@ -651,6 +651,13 @@ config SHADOW_CALL_STACK
reading and writing arbitrary memory may be able to locate them
and hijack control flow by modifying the stacks.
config DYNAMIC_SCS
bool
help
Set by the arch code if it relies on code patching to insert the
shadow call stack push and pop instructions rather than on the
compiler.
config LTO
bool
help

View File

@@ -1 +0,0 @@
include ../arm64/OWNERS

View File

@@ -318,7 +318,7 @@ static int __init gate_vma_init(void)
gate_vma.vm_page_prot = PAGE_READONLY_EXEC;
gate_vma.vm_start = 0xffff0000;
gate_vma.vm_end = 0xffff0000 + PAGE_SIZE;
gate_vma.vm_flags = VM_READ | VM_EXEC | VM_MAYREAD | VM_MAYEXEC;
vm_flags_init(&gate_vma, VM_READ | VM_EXEC | VM_MAYREAD | VM_MAYEXEC);
return 0;
}
arch_initcall(gate_vma_init);

View File

@@ -96,6 +96,7 @@ config ARM64
select ARCH_SUPPORTS_INT128 if CC_HAS_INT128
select ARCH_SUPPORTS_NUMA_BALANCING
select ARCH_SUPPORTS_PAGE_TABLE_CHECK
select ARCH_SUPPORTS_PER_VMA_LOCK
select ARCH_WANT_COMPAT_IPC_PARSE_VERSION if COMPAT
select ARCH_WANT_DEFAULT_BPF_JIT
select ARCH_WANT_DEFAULT_TOPDOWN_MMAP_LAYOUT
@@ -373,6 +374,9 @@ config KASAN_SHADOW_OFFSET
default 0xeffffff800000000 if ARM64_VA_BITS_36 && KASAN_SW_TAGS
default 0xffffffffffffffff
config UNWIND_TABLES
bool
source "arch/arm64/Kconfig.platforms"
menu "Kernel Features"
@@ -2176,6 +2180,15 @@ config ARCH_NR_GPIO
If unsure, leave the default value.
config UNWIND_PATCH_PAC_INTO_SCS
bool "Enable shadow call stack dynamically using code patching"
# needs Clang with https://reviews.llvm.org/D111780 incorporated
depends on CC_IS_CLANG && CLANG_VERSION >= 150000
depends on ARM64_PTR_AUTH_KERNEL && CC_HAS_BRANCH_PROT_PAC_RET
depends on SHADOW_CALL_STACK
select UNWIND_TABLES
select DYNAMIC_SCS
endmenu # "Kernel Features"
menu "Boot options"

View File

@@ -45,8 +45,13 @@ KBUILD_CFLAGS += $(call cc-option,-mabi=lp64)
KBUILD_AFLAGS += $(call cc-option,-mabi=lp64)
# Avoid generating .eh_frame* sections.
ifneq ($(CONFIG_UNWIND_TABLES),y)
KBUILD_CFLAGS += -fno-asynchronous-unwind-tables -fno-unwind-tables
KBUILD_AFLAGS += -fno-asynchronous-unwind-tables -fno-unwind-tables
else
KBUILD_CFLAGS += -fasynchronous-unwind-tables
KBUILD_AFLAGS += -fasynchronous-unwind-tables
endif
ifeq ($(CONFIG_STACKPROTECTOR_PER_TASK),y)
prepare: stack_protector_prepare
@@ -72,10 +77,16 @@ branch-prot-flags-$(CONFIG_CC_HAS_SIGN_RETURN_ADDRESS) := -msign-return-address=
# We enable additional protection for leaf functions as there is some
# narrow potential for ROP protection benefits and no substantial
# performance impact has been observed.
PACRET-y := pac-ret+leaf
# Using a shadow call stack in leaf functions is too costly, so avoid PAC there
# as well when we may be patching PAC into SCS
PACRET-$(CONFIG_UNWIND_PATCH_PAC_INTO_SCS) := pac-ret
ifeq ($(CONFIG_ARM64_BTI_KERNEL),y)
branch-prot-flags-$(CONFIG_CC_HAS_BRANCH_PROT_PAC_RET_BTI) := -mbranch-protection=pac-ret+leaf+bti
branch-prot-flags-$(CONFIG_CC_HAS_BRANCH_PROT_PAC_RET_BTI) := -mbranch-protection=$(PACRET-y)+bti
else
branch-prot-flags-$(CONFIG_CC_HAS_BRANCH_PROT_PAC_RET) := -mbranch-protection=pac-ret+leaf
branch-prot-flags-$(CONFIG_CC_HAS_BRANCH_PROT_PAC_RET) := -mbranch-protection=$(PACRET-y)
endif
# -march=armv8.3-a enables the non-nops instructions for PAC, to avoid the
# compiler to generate them and consequently to break the single image contract

View File

@@ -1,4 +0,0 @@
per-file crypto/**=file:/crypto/OWNERS
per-file {include,kernel,kvm,lib}/**=mzyngier@google.com,willdeacon@google.com
per-file mm/**=file:/mm/OWNERS
per-file net/**=file:/net/OWNERS

View File

@@ -1571,10 +1571,9 @@
dmc: bus@38000 {
compatible = "simple-bus";
reg = <0x0 0x38000 0x0 0x400>;
#address-cells = <2>;
#size-cells = <2>;
ranges = <0x0 0x0 0x0 0x38000 0x0 0x400>;
ranges = <0x0 0x0 0x0 0x38000 0x0 0x2000>;
canvas: video-lut@48 {
compatible = "amlogic,canvas";

View File

@@ -193,7 +193,7 @@
rohm,reset-snvs-powered;
#clock-cells = <0>;
clocks = <&osc_32k 0>;
clocks = <&osc_32k>;
clock-output-names = "clk-32k-out";
regulators {

View File

@@ -95,7 +95,7 @@
compatible = "regulator-fixed";
enable-active-high;
gpio = <&gpio2 20 GPIO_ACTIVE_HIGH>; /* PMIC_EN_ETH */
off-on-delay = <500000>;
off-on-delay-us = <500000>;
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_reg_eth>;
regulator-always-on;
@@ -135,7 +135,7 @@
enable-active-high;
/* Verdin SD_1_PWR_EN (SODIMM 76) */
gpio = <&gpio3 5 GPIO_ACTIVE_HIGH>;
off-on-delay = <100000>;
off-on-delay-us = <100000>;
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_usdhc2_pwr_en>;
regulator-max-microvolt = <3300000>;

View File

@@ -12,7 +12,7 @@
compatible = "regulator-fixed";
enable-active-high;
gpio = <&gpio_expander_21 4 GPIO_ACTIVE_HIGH>; /* ETH_PWR_EN */
off-on-delay = <500000>;
off-on-delay-us = <500000>;
regulator-max-microvolt = <3300000>;
regulator-min-microvolt = <3300000>;
regulator-name = "+V3.3_ETH";

View File

@@ -86,7 +86,7 @@
compatible = "regulator-fixed";
enable-active-high;
gpio = <&gpio2 20 GPIO_ACTIVE_HIGH>; /* PMIC_EN_ETH */
off-on-delay = <500000>;
off-on-delay-us = <500000>;
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_reg_eth>;
regulator-always-on;
@@ -127,7 +127,7 @@
enable-active-high;
/* Verdin SD_1_PWR_EN (SODIMM 76) */
gpio = <&gpio4 22 GPIO_ACTIVE_HIGH>;
off-on-delay = <100000>;
off-on-delay-us = <100000>;
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_usdhc2_pwr_en>;
regulator-max-microvolt = <3300000>;

View File

@@ -59,11 +59,11 @@
perst-gpios = <&tlmm 58 0x1>;
};
&pcie_phy0 {
&pcie_qmp0 {
status = "okay";
};
&pcie_phy1 {
&pcie_qmp1 {
status = "okay";
};

View File

@@ -22,7 +22,7 @@
};
&blsp1_spi1 {
status = "ok";
status = "okay";
flash@0 {
#address-cells = <1>;
@@ -34,33 +34,33 @@
};
&blsp1_uart5 {
status = "ok";
status = "okay";
};
&pcie0 {
status = "ok";
status = "okay";
perst-gpios = <&tlmm 58 0x1>;
};
&pcie1 {
status = "ok";
status = "okay";
perst-gpios = <&tlmm 61 0x1>;
};
&pcie_phy0 {
status = "ok";
&pcie_qmp0 {
status = "okay";
};
&pcie_phy1 {
status = "ok";
&pcie_qmp1 {
status = "okay";
};
&qpic_bam {
status = "ok";
status = "okay";
};
&qpic_nand {
status = "ok";
status = "okay";
nand@0 {
reg = <0>;

View File

@@ -15,8 +15,9 @@
#size-cells = <0>;
pmk8280_pon: pon@1300 {
compatible = "qcom,pm8998-pon";
reg = <0x1300>;
compatible = "qcom,pmk8350-pon";
reg = <0x1300>, <0x800>;
reg-names = "hlos", "pbs";
pmk8280_pon_pwrkey: pwrkey {
compatible = "qcom,pmk8350-pwrkey";

View File

@@ -540,7 +540,7 @@
non-removable;
pinctrl-names = "default";
pinctrl-0 = <&sdmmc1_bus4 &sdmmc1_cmd &sdmmc1_clk>;
sd-uhs-sdr104;
sd-uhs-sdr50;
vmmc-supply = <&vcc3v3_sys>;
vqmmc-supply = <&vcc_1v8>;
status = "okay";

View File

@@ -308,3 +308,9 @@ CONFIG_QCOM_SPM=m
CONFIG_PINCTRL_SM8450=m
CONFIG_SM_GCC_8450=m
CONFIG_INTERCONNECT_QCOM_SM8450=m
# CFG80211 & MAC80211 as modules
CONFIG_CFG80211=m
CONFIG_NL80211_TESTMODE=y
# CONFIG_CFG80211_DEFAULT_PS is not set
# CONFIG_CFG80211_CRDA_SUPPORT is not set
CONFIG_MAC80211=m

View File

@@ -17,7 +17,7 @@ CONFIG_RCU_BOOST=y
CONFIG_RCU_NOCB_CPU=y
CONFIG_IKCONFIG=y
CONFIG_IKCONFIG_PROC=y
CONFIG_IKHEADERS=y
CONFIG_IKHEADERS=m
CONFIG_UCLAMP_TASK=y
CONFIG_UCLAMP_BUCKETS_COUNT=20
CONFIG_CGROUPS=y
@@ -55,11 +55,14 @@ CONFIG_ARMV8_DEPRECATED=y
CONFIG_SWP_EMULATION=y
CONFIG_CP15_BARRIER_EMULATION=y
CONFIG_SETEND_EMULATION=y
# CONFIG_ARM64_BTI_KERNEL is not set
CONFIG_RANDOMIZE_BASE=y
# CONFIG_RANDOMIZE_MODULE_REGION_FULL is not set
CONFIG_UNWIND_PATCH_PAC_INTO_SCS=y
CONFIG_CMDLINE="console=ttynull stack_depot_disable=on cgroup_disable=pressure kasan.page_alloc.sample=10 kasan.stacktrace=off kvm-arm.mode=protected bootconfig ioremap_guard"
CONFIG_CMDLINE_EXTEND=y
# CONFIG_DMI is not set
CONFIG_HIBERNATION=y
CONFIG_PM_WAKELOCKS=y
CONFIG_PM_WAKELOCKS_LIMIT=0
# CONFIG_PM_WAKELOCKS_GC is not set
@@ -91,6 +94,7 @@ CONFIG_MODULE_SIG_PROTECT=y
CONFIG_MODPROBE_PATH="/system/bin/modprobe"
CONFIG_BLK_DEV_ZONED=y
CONFIG_BLK_DEV_THROTTLING=y
CONFIG_BLK_CGROUP_IOCOST=y
CONFIG_BLK_INLINE_ENCRYPTION=y
CONFIG_BLK_INLINE_ENCRYPTION_FALLBACK=y
CONFIG_IOSCHED_BFQ=y
@@ -179,6 +183,7 @@ CONFIG_NETFILTER_XT_TARGET_SECMARK=y
CONFIG_NETFILTER_XT_TARGET_TCPMSS=y
CONFIG_NETFILTER_XT_MATCH_BPF=y
CONFIG_NETFILTER_XT_MATCH_COMMENT=y
CONFIG_NETFILTER_XT_MATCH_CONNBYTES=y
CONFIG_NETFILTER_XT_MATCH_CONNLIMIT=y
CONFIG_NETFILTER_XT_MATCH_CONNMARK=y
CONFIG_NETFILTER_XT_MATCH_CONNTRACK=y
@@ -276,11 +281,6 @@ CONFIG_BT_HCIUART=m
CONFIG_BT_HCIUART_LL=y
CONFIG_BT_HCIUART_BCM=y
CONFIG_BT_HCIUART_QCA=y
CONFIG_CFG80211=m
CONFIG_NL80211_TESTMODE=y
# CONFIG_CFG80211_DEFAULT_PS is not set
# CONFIG_CFG80211_CRDA_SUPPORT is not set
CONFIG_MAC80211=m
CONFIG_RFKILL=m
CONFIG_NFC=m
CONFIG_PCI=y
@@ -309,6 +309,7 @@ CONFIG_BLK_DEV_LOOP_MIN_COUNT=16
CONFIG_BLK_DEV_RAM=y
CONFIG_BLK_DEV_RAM_SIZE=8192
CONFIG_BLK_DEV_UBLK=y
CONFIG_BLK_DEV_NVME=y
CONFIG_SRAM=y
CONFIG_UID_SYS_STATS=y
CONFIG_SCSI=y
@@ -329,6 +330,7 @@ CONFIG_IFB=y
CONFIG_MACSEC=y
CONFIG_TUN=y
CONFIG_VETH=y
CONFIG_LED_TRIGGER_PHY=y
CONFIG_AX88796B_PHY=y
CONFIG_CAN_VCAN=m
CONFIG_CAN_SLCAN=m
@@ -543,6 +545,7 @@ CONFIG_DMABUF_HEAPS_PAGE_POOL=y
CONFIG_UIO=y
CONFIG_VIRT_DRIVERS=y
CONFIG_GUNYAH=y
# CONFIG_GUNYAH_QCOM_PLATFORM is not set
CONFIG_GUNYAH_VCPU=y
CONFIG_GUNYAH_IRQFD=y
CONFIG_GUNYAH_IOEVENTFD=y
@@ -692,7 +695,7 @@ CONFIG_DMA_CMA=y
CONFIG_PRINTK_TIME=y
CONFIG_PRINTK_CALLER=y
CONFIG_DYNAMIC_DEBUG_CORE=y
CONFIG_DEBUG_INFO_DWARF5=y
CONFIG_DEBUG_INFO_DWARF4=y
CONFIG_DEBUG_INFO_BTF=y
CONFIG_MODULE_ALLOW_BTF_MISMATCH=y
CONFIG_HEADERS_INSTALL=y
@@ -705,6 +708,8 @@ CONFIG_UBSAN_LOCAL_BOUNDS=y
# CONFIG_UBSAN_BOOL is not set
# CONFIG_UBSAN_ENUM is not set
CONFIG_PAGE_OWNER=y
CONFIG_PAGE_PINNER=y
CONFIG_PER_VMA_LOCK_STATS=y
CONFIG_DEBUG_STACK_USAGE=y
CONFIG_DEBUG_MEMORY_INIT=y
CONFIG_KASAN=y

View File

@@ -8,31 +8,25 @@
#include <linux/gunyah.h>
#include <linux/uuid.h>
static const uuid_t gh_known_uuids[] = {
/* Qualcomm's version of Gunyah {19bd54bd-0b37-571b-946f-609b54539de6} */
UUID_INIT(0x19bd54bd, 0x0b37, 0x571b, 0x94, 0x6f, 0x60, 0x9b, 0x54, 0x53, 0x9d, 0xe6),
/* Standard version of Gunyah {c1d58fcd-a453-5fdb-9265-ce36673d5f14} */
UUID_INIT(0xc1d58fcd, 0xa453, 0x5fdb, 0x92, 0x65, 0xce, 0x36, 0x67, 0x3d, 0x5f, 0x14),
};
/* {c1d58fcd-a453-5fdb-9265-ce36673d5f14} */
static const uuid_t GUNYAH_UUID =
UUID_INIT(0xc1d58fcd, 0xa453, 0x5fdb, 0x92, 0x65, 0xce, 0x36, 0x67, 0x3d, 0x5f, 0x14);
bool arch_is_gh_guest(void)
{
struct arm_smccc_res res;
uuid_t uuid;
int i;
u32 *up;
arm_smccc_1_1_hvc(ARM_SMCCC_VENDOR_HYP_CALL_UID_FUNC_ID, &res);
((u32 *)&uuid.b[0])[0] = lower_32_bits(res.a0);
((u32 *)&uuid.b[0])[1] = lower_32_bits(res.a1);
((u32 *)&uuid.b[0])[2] = lower_32_bits(res.a2);
((u32 *)&uuid.b[0])[3] = lower_32_bits(res.a3);
up = (u32 *)&uuid.b[0];
up[0] = lower_32_bits(res.a0);
up[1] = lower_32_bits(res.a1);
up[2] = lower_32_bits(res.a2);
up[3] = lower_32_bits(res.a3);
for (i = 0; i < ARRAY_SIZE(gh_known_uuids); i++)
if (uuid_equal(&uuid, &gh_known_uuids[i]))
return true;
return false;
return uuid_equal(&uuid, &GUNYAH_UUID);
}
EXPORT_SYMBOL_GPL(arch_is_gh_guest);
@@ -71,7 +65,7 @@ enum gh_error gh_hypercall_bell_send(u64 capid, u64 new_flags, u64 *old_flags)
arm_smccc_1_1_hvc(GH_HYPERCALL_BELL_SEND, capid, new_flags, 0, &res);
if (res.a0 == GH_ERROR_OK)
if (res.a0 == GH_ERROR_OK && old_flags)
*old_flags = res.a1;
return res.a0;
@@ -88,7 +82,7 @@ enum gh_error gh_hypercall_bell_set_mask(u64 capid, u64 enable_mask, u64 ack_mas
}
EXPORT_SYMBOL_GPL(gh_hypercall_bell_set_mask);
enum gh_error gh_hypercall_msgq_send(u64 capid, size_t size, void *buff, int tx_flags, bool *ready)
enum gh_error gh_hypercall_msgq_send(u64 capid, size_t size, void *buff, u64 tx_flags, bool *ready)
{
struct arm_smccc_res res;
@@ -134,7 +128,7 @@ enum gh_error gh_hypercall_vcpu_run(u64 capid, u64 *resume_data,
arm_smccc_1_2_hvc(&args, &res);
if (res.a0 == GH_ERROR_OK) {
resp->state = res.a1;
resp->sized_state = res.a1;
resp->state_data[0] = res.a2;
resp->state_data[1] = res.a3;
resp->state_data[2] = res.a4;

View File

@@ -921,4 +921,19 @@ alternative_cb ARM64_ALWAYS_SYSTEM, spectre_bhb_patch_clearbhb
alternative_cb_end
#endif /* CONFIG_MITIGATE_SPECTRE_BRANCH_HISTORY */
.endm
#if defined(__KVM_NVHE_HYPERVISOR__)
/*
* pKVM uses the module_ops struct to expose services to modules but
* doesn't allow fine-grained definition of the license for each export,
* and doesn't have a way to check the license of the loaded module.
* Given that said module may be proprietary, let's seek GPL compliance
* by preventing the accidental export of GPL symbols to hyp modules via
* pKVM's module_ops struct.
*/
#ifdef EXPORT_SYMBOL_GPL
#undef EXPORT_SYMBOL_GPL
#endif
#define EXPORT_SYMBOL_GPL(sym) ASM_BUILD_BUG()
#endif
#endif /* __ASM_ASSEMBLER_H */

View File

@@ -8,16 +8,11 @@
#define __ASM_EXCEPTION_H
#include <asm/esr.h>
#include <asm/kprobes.h>
#include <asm/ptrace.h>
#include <linux/interrupt.h>
#ifdef CONFIG_FUNCTION_GRAPH_TRACER
#define __exception_irq_entry __irq_entry
#else
#define __exception_irq_entry __kprobes
#endif
static inline unsigned long disr_to_esr(u64 disr)
{

View File

@@ -1,16 +1,17 @@
/* SPDX-License-Identifier: GPL-2.0-only */
/*
* Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved.
* Copyright (c) 2022-2023 Qualcomm Innovation Center, Inc. All rights reserved.
*/
#ifndef __ASM_GUNYAH_H_
#define __ASM_GUNYAH_H_
#ifndef _ASM_GUNYAH_H
#define _ASM_GUNYAH_H
#include <linux/irq.h>
#include <dt-bindings/interrupt-controller/arm-gic.h>
static inline int arch_gh_fill_irq_fwspec_params(u32 virq, struct irq_fwspec *fwspec)
{
if (virq < 32 || virq > 1019)
/* Assume that Gunyah gave us an SPI; defensively check it */
if (WARN_ON(virq < 32 || virq > 1019))
return -EINVAL;
fwspec->param_count = 3;

View File

@@ -19,4 +19,14 @@ static inline bool kfence_protect_page(unsigned long addr, bool protect)
return true;
}
#ifdef CONFIG_KFENCE
extern bool kfence_early_init;
static inline bool arm64_kfence_can_set_direct_map(void)
{
return !kfence_early_init;
}
#else /* CONFIG_KFENCE */
static inline bool arm64_kfence_can_set_direct_map(void) { return false; }
#endif /* CONFIG_KFENCE */
#endif /* __ASM_KFENCE_H */

View File

@@ -63,17 +63,11 @@ enum __kvm_host_smccc_func {
__KVM_HOST_SMCCC_FUNC___kvm_tlb_flush_vmid_ipa,
__KVM_HOST_SMCCC_FUNC___kvm_tlb_flush_vmid,
__KVM_HOST_SMCCC_FUNC___kvm_flush_cpu_context,
/*
* __pkvm_alloc_module_va may temporarily serve as the privileged hcall
* limit when module loading is enabled, see early_pkvm_enable_modules().
*/
__KVM_HOST_SMCCC_FUNC___pkvm_alloc_module_va,
__KVM_HOST_SMCCC_FUNC___pkvm_map_module_page,
__KVM_HOST_SMCCC_FUNC___pkvm_unmap_module_page,
__KVM_HOST_SMCCC_FUNC___pkvm_init_module,
__KVM_HOST_SMCCC_FUNC___pkvm_register_hcall,
__KVM_HOST_SMCCC_FUNC___pkvm_close_module_registration,
__KVM_HOST_SMCCC_FUNC___pkvm_prot_finalize,
/* Hypercalls available after pKVM finalisation */
@@ -159,6 +153,19 @@ extern void *__nvhe_undefined_symbol;
#define this_cpu_ptr_hyp_sym(sym) (&__nvhe_undefined_symbol)
#define per_cpu_ptr_hyp_sym(sym, cpu) (&__nvhe_undefined_symbol)
/*
* pKVM uses the module_ops struct to expose services to modules but
* doesn't allow fine-grained definition of the license for each export,
* and doesn't have a way to check the license of the loaded module.
* Given that said module may be proprietary, let's seek GPL compliance
* by preventing the accidental export of GPL symbols to hyp modules via
* pKVM's module_ops struct.
*/
#ifdef EXPORT_SYMBOL_GPL
#undef EXPORT_SYMBOL_GPL
#endif
#define EXPORT_SYMBOL_GPL(sym) BUILD_BUG()
#elif defined(__KVM_VHE_HYPERVISOR__)
#define CHOOSE_VHE_SYM(sym) sym
@@ -208,6 +215,7 @@ struct kvm_nvhe_init_params {
unsigned long stack_pa;
phys_addr_t pgd_pa;
unsigned long hcr_el2;
unsigned long hfgwtr_el2;
unsigned long vttbr;
unsigned long vtcr;
};

View File

@@ -406,6 +406,8 @@ int pkvm_iommu_resume(struct device *dev);
*/
int pkvm_iommu_finalize(int err);
bool pkvm_iommu_finalized(void);
struct vcpu_reset_state {
unsigned long pc;
unsigned long r0;

View File

@@ -72,7 +72,10 @@ typedef u64 kvm_pte_t;
#define KVM_PTE_LEAF_ATTR_HI_S1_XN BIT(54)
#define KVM_PTE_LEAF_ATTR_HI_S2_XN BIT(54)
#define KVM_PTE_LEAF_ATTR_HI_S2_XN_PXN 1
#define KVM_PTE_LEAF_ATTR_HI_S2_XN_UXN 3
#define KVM_PTE_LEAF_ATTR_HI_S2_XN_XN 2
#define KVM_PTE_LEAF_ATTR_HI_S2_XN GENMASK(54, 53)
static inline bool kvm_pte_valid(kvm_pte_t pte)
{
@@ -167,6 +170,11 @@ struct kvm_pgtable_mm_ops {
void (*icache_inval_pou)(void *addr, size_t size);
};
static inline kvm_pte_t *kvm_pte_follow(kvm_pte_t pte, struct kvm_pgtable_mm_ops *mm_ops)
{
return mm_ops->phys_to_virt(kvm_pte_to_phys(pte));
}
/**
* enum kvm_pgtable_stage2_flags - Stage-2 page-table flags.
* @KVM_PGTABLE_S2_NOFWB: Don't enforce Normal-WB even if the CPUs have
@@ -184,7 +192,9 @@ enum kvm_pgtable_stage2_flags {
* @KVM_PGTABLE_PROT_W: Write permission.
* @KVM_PGTABLE_PROT_R: Read permission.
* @KVM_PGTABLE_PROT_DEVICE: Device attributes.
* @KVM_PGTABLE_PROT_NC: Normal non-cacheable attributes.
* @KVM_PGTABLE_PROT_NC: Normal non-cacheable attributes.
* @KVM_PGTABLE_PROT_PXN: Privileged execute-never.
* @KVM_PGTABLE_PROT_UXN: Unprivileged execute-never.
* @KVM_PGTABLE_PROT_SW0: Software bit 0.
* @KVM_PGTABLE_PROT_SW1: Software bit 1.
* @KVM_PGTABLE_PROT_SW2: Software bit 2.
@@ -197,6 +207,8 @@ enum kvm_pgtable_prot {
KVM_PGTABLE_PROT_DEVICE = BIT(3),
KVM_PGTABLE_PROT_NC = BIT(4),
KVM_PGTABLE_PROT_PXN = BIT(5),
KVM_PGTABLE_PROT_UXN = BIT(6),
KVM_PGTABLE_PROT_SW0 = BIT(55),
KVM_PGTABLE_PROT_SW1 = BIT(56),
@@ -490,6 +502,21 @@ int kvm_pgtable_stage2_annotate(struct kvm_pgtable *pgt, u64 addr, u64 size,
*/
int kvm_pgtable_stage2_unmap(struct kvm_pgtable *pgt, u64 addr, u64 size);
/**
* kvm_pgtable_stage2_reclaim_leaves() - Attempt to reclaim leaf page-table
* pages by coalescing table entries into
* block mappings.
* @pgt: Page-table structure initialised by kvm_pgtable_stage2_init*().
* @addr: Intermediate physical address from which to reclaim leaves.
* @size: Size of the range.
*
* The offset of @addr within a page is ignored and @size is rounded-up to
* the next page boundary.
*
* Return: 0 on success, negative error code on failure.
*/
int kvm_pgtable_stage2_reclaim_leaves(struct kvm_pgtable *pgt, u64 addr, u64 size);
/**
* kvm_pgtable_stage2_wrprotect() - Write-protect guest stage-2 address range
* without TLB invalidation.

View File

@@ -30,6 +30,8 @@ struct pkvm_module_ops {
void *(*linear_map_early)(phys_addr_t phys, size_t size, enum kvm_pgtable_prot prot);
void (*linear_unmap_early)(void *addr, size_t size);
void (*flush_dcache_to_poc)(void *addr, size_t size);
void (*update_hcr_el2)(unsigned long set_mask, unsigned long clear_mask);
void (*update_hfgwtr_el2)(unsigned long set_mask, unsigned long clear_mask);
int (*register_host_perm_fault_handler)(int (*cb)(struct kvm_cpu_context *ctxt, u64 esr, u64 addr));
int (*host_stage2_mod_prot)(u64 pfn, enum kvm_pgtable_prot prot);
int (*host_stage2_get_leaf)(phys_addr_t phys, kvm_pte_t *ptep, u32 *level);

View File

@@ -40,4 +40,12 @@ SECTIONS {
}
.hyp.reloc : ALIGN(4) { *(.hyp.reloc) }
#endif
#ifdef CONFIG_UNWIND_TABLES
/*
* Currently, we only use unwind info at module load time, so we can
* put it into the .init allocation.
*/
.init.eh_frame : { *(.eh_frame) }
#endif
}

View File

@@ -25,7 +25,7 @@ unsigned long mte_copy_tags_to_user(void __user *to, void *from,
unsigned long n);
int mte_save_tags(struct page *page);
void mte_save_page_tags(const void *page_addr, void *tag_storage);
bool mte_restore_tags(swp_entry_t entry, struct page *page);
void mte_restore_tags(swp_entry_t entry, struct page *page);
void mte_restore_page_tags(void *page_addr, const void *tag_storage);
void mte_invalidate_tags(int type, pgoff_t offset);
void mte_invalidate_tags_area(int type);
@@ -61,7 +61,7 @@ static inline bool page_mte_tagged(struct page *page)
}
void mte_zero_clear_page_tags(void *addr);
void mte_sync_tags(pte_t old_pte, pte_t pte);
void mte_sync_tags(pte_t pte);
void mte_copy_page_tags(void *kto, const void *kfrom);
void mte_thread_init_user(void);
void mte_thread_switch(struct task_struct *next);
@@ -89,7 +89,7 @@ static inline bool page_mte_tagged(struct page *page)
static inline void mte_zero_clear_page_tags(void *addr)
{
}
static inline void mte_sync_tags(pte_t old_pte, pte_t pte)
static inline void mte_sync_tags(pte_t pte)
{
}
static inline void mte_copy_page_tags(void *kto, const void *kfrom)

View File

@@ -335,18 +335,8 @@ static inline void __set_pte_at(struct mm_struct *mm, unsigned long addr,
* don't expose tags (instruction fetches don't check tags).
*/
if (system_supports_mte() && pte_access_permitted(pte, false) &&
!pte_special(pte)) {
pte_t old_pte = READ_ONCE(*ptep);
/*
* We only need to synchronise if the new PTE has tags enabled
* or if swapping in (in which case another mapping may have
* set tags in the past even if this PTE isn't tagged).
* (!pte_none() && !pte_present()) is an open coded version of
* is_swap_pte()
*/
if (pte_tagged(pte) || (!pte_none(old_pte) && !pte_present(old_pte)))
mte_sync_tags(old_pte, pte);
}
!pte_special(pte) && pte_tagged(pte))
mte_sync_tags(pte);
__check_racy_pte_update(mm, ptep, pte);
@@ -1066,8 +1056,8 @@ static inline void arch_swap_invalidate_area(int type)
#define __HAVE_ARCH_SWAP_RESTORE
static inline void arch_swap_restore(swp_entry_t entry, struct folio *folio)
{
if (system_supports_mte() && mte_restore_tags(entry, &folio->page))
set_page_mte_tagged(&folio->page);
if (system_supports_mte())
mte_restore_tags(entry, &folio->page);
}
#endif /* CONFIG_ARM64_MTE */

View File

@@ -5,6 +5,7 @@
#ifdef __ASSEMBLY__
#include <asm/asm-offsets.h>
#include <asm/sysreg.h>
#ifdef CONFIG_SHADOW_CALL_STACK
scs_sp .req x18
@@ -24,6 +25,54 @@
.endm
#endif /* CONFIG_SHADOW_CALL_STACK */
#else
#include <linux/scs.h>
#include <asm/cpufeature.h>
#ifdef CONFIG_UNWIND_PATCH_PAC_INTO_SCS
static inline bool should_patch_pac_into_scs(void)
{
u64 reg;
/*
* We only enable the shadow call stack dynamically if we are running
* on a system that does not implement PAC or BTI. PAC and SCS provide
* roughly the same level of protection, and BTI relies on the PACIASP
* instructions serving as landing pads, preventing us from patching
* those instructions into something else.
*/
reg = read_sysreg_s(SYS_ID_AA64ISAR1_EL1);
if (SYS_FIELD_GET(ID_AA64ISAR1_EL1, APA, reg) |
SYS_FIELD_GET(ID_AA64ISAR1_EL1, API, reg))
return false;
reg = read_sysreg_s(SYS_ID_AA64ISAR2_EL1);
if (SYS_FIELD_GET(ID_AA64ISAR2_EL1, APA3, reg))
return false;
if (IS_ENABLED(CONFIG_ARM64_BTI_KERNEL)) {
reg = read_sysreg_s(SYS_ID_AA64PFR1_EL1);
if (reg & (0xf << ID_AA64PFR1_EL1_BT_SHIFT))
return false;
}
return true;
}
static inline void dynamic_scs_init(void)
{
if (should_patch_pac_into_scs()) {
pr_info("Enabling dynamic shadow call stack\n");
static_branch_enable(&dynamic_scs_enabled);
}
}
#else
static inline void dynamic_scs_init(void) {}
#endif
int scs_patch(const u8 eh_frame[], int size);
#endif /* __ASSEMBLY __ */
#endif /* _ASM_SCS_H */

View File

@@ -80,6 +80,8 @@ obj-$(CONFIG_ARM64_PTR_AUTH) += pointer_auth.o
obj-$(CONFIG_ARM64_MTE) += mte.o
obj-y += vdso-wrap.o
obj-$(CONFIG_COMPAT_VDSO) += vdso32-wrap.o
obj-$(CONFIG_UNWIND_PATCH_PAC_INTO_SCS) += patch-scs.o
CFLAGS_patch-scs.o += -mbranch-protection=none
# Force dependency (vdso*-wrap.S includes vdso.so through incbin)
$(obj)/vdso-wrap.o: $(obj)/vdso/vdso.so

View File

@@ -128,6 +128,7 @@ int main(void)
DEFINE(NVHE_INIT_STACK_HYP_VA, offsetof(struct kvm_nvhe_init_params, stack_hyp_va));
DEFINE(NVHE_INIT_PGD_PA, offsetof(struct kvm_nvhe_init_params, pgd_pa));
DEFINE(NVHE_INIT_HCR_EL2, offsetof(struct kvm_nvhe_init_params, hcr_el2));
DEFINE(NVHE_INIT_HFGWTR_EL2, offsetof(struct kvm_nvhe_init_params, hfgwtr_el2));
DEFINE(NVHE_INIT_VTTBR, offsetof(struct kvm_nvhe_init_params, vttbr));
DEFINE(NVHE_INIT_VTCR, offsetof(struct kvm_nvhe_init_params, vtcr));
#endif

View File

@@ -462,6 +462,9 @@ SYM_FUNC_START_LOCAL(__primary_switched)
bl early_fdt_map // Try mapping the FDT early
mov x0, x20 // pass the full boot status
bl init_feature_override // Parse cpu feature overrides
#ifdef CONFIG_UNWIND_PATCH_PAC_INTO_SCS
bl scs_patch_vmlinux
#endif
mov x0, x20
bl finalise_el2 // Prefer VHE if possible
ldp x29, x30, [sp], #16

View File

@@ -33,6 +33,7 @@
#include <asm/sysreg.h>
#include <asm/trans_pgd.h>
#include <asm/virt.h>
#include <trace/hooks/bl_hib.h>
/*
* Hibernate core relies on this value being 0 on resume, and marks it
@@ -80,6 +81,8 @@ static struct arch_hibernate_hdr {
phys_addr_t __hyp_stub_vectors;
u64 sleep_cpu_mpidr;
ANDROID_VENDOR_DATA(1);
} resume_hdr;
static inline void arch_hdr_invariants(struct arch_hibernate_hdr_invariants *i)
@@ -117,6 +120,9 @@ int arch_hibernation_header_save(void *addr, unsigned int max_size)
hdr->ttbr1_el1 = __pa_symbol(swapper_pg_dir);
hdr->reenter_kernel = _cpu_resume;
trace_android_vh_save_cpu_resume(&hdr->android_vendor_data1,
__pa(cpu_resume));
/* We can't use __hyp_get_vectors() because kvm may still be loaded */
if (el2_reset_needed())
hdr->__hyp_stub_vectors = __pa_symbol(__hyp_stub_vectors);

View File

@@ -41,7 +41,7 @@ static void init_irq_scs(void)
{
int cpu;
if (!IS_ENABLED(CONFIG_SHADOW_CALL_STACK))
if (!scs_is_enabled())
return;
for_each_possible_cpu(cpu)

View File

@@ -15,9 +15,11 @@
#include <linux/kernel.h>
#include <linux/mm.h>
#include <linux/moduleloader.h>
#include <linux/scs.h>
#include <linux/vmalloc.h>
#include <asm/alternative.h>
#include <asm/insn.h>
#include <asm/scs.h>
#include <asm/sections.h>
void *module_alloc(unsigned long size)
@@ -569,6 +571,12 @@ int module_finalize(const Elf_Ehdr *hdr,
if (s)
apply_alternatives_module((void *)s->sh_addr, s->sh_size);
if (scs_is_dynamic()) {
s = find_section(hdr, sechdrs, ".init.eh_frame");
if (s)
scs_patch((void *)s->sh_addr, s->sh_size);
}
err = module_init_ftrace_plt(hdr, sechdrs, me);
if (err)
return err;

View File

@@ -35,47 +35,18 @@ DEFINE_STATIC_KEY_FALSE(mte_async_or_asymm_mode);
EXPORT_SYMBOL_GPL(mte_async_or_asymm_mode);
#endif
static void mte_sync_page_tags(struct page *page, pte_t old_pte,
bool check_swap, bool pte_is_tagged)
{
if (check_swap && is_swap_pte(old_pte)) {
swp_entry_t entry = pte_to_swp_entry(old_pte);
if (!non_swap_entry(entry) && mte_restore_tags(entry, page)) {
set_page_mte_tagged(page);
return;
}
}
if (!pte_is_tagged)
return;
/*
* Test PG_mte_tagged again in case it was racing with another
* set_pte_at().
*/
if (!page_mte_tagged(page)) {
mte_clear_page_tags(page_address(page));
set_page_mte_tagged(page);
}
}
void mte_sync_tags(pte_t old_pte, pte_t pte)
void mte_sync_tags(pte_t pte)
{
struct page *page = pte_page(pte);
long i, nr_pages = compound_nr(page);
bool check_swap = nr_pages == 1;
bool pte_is_tagged = pte_tagged(pte);
/* Early out if there's nothing to do */
if (!check_swap && !pte_is_tagged)
return;
/* if PG_mte_tagged is set, tags have already been initialised */
for (i = 0; i < nr_pages; i++, page++)
if (!page_mte_tagged(page))
mte_sync_page_tags(page, old_pte, check_swap,
pte_is_tagged);
for (i = 0; i < nr_pages; i++, page++) {
if (!page_mte_tagged(page)) {
mte_clear_page_tags(page_address(page));
set_page_mte_tagged(page);
}
}
/* ensure the tags are visible before the PTE is set */
smp_wmb();

View File

@@ -0,0 +1,257 @@
// SPDX-License-Identifier: GPL-2.0-only
/*
* Copyright (C) 2022 - Google LLC
* Author: Ard Biesheuvel <ardb@google.com>
*/
#include <linux/bug.h>
#include <linux/errno.h>
#include <linux/init.h>
#include <linux/linkage.h>
#include <linux/printk.h>
#include <linux/types.h>
#include <asm/cacheflush.h>
#include <asm/scs.h>
//
// This minimal DWARF CFI parser is partially based on the code in
// arch/arc/kernel/unwind.c, and on the document below:
// https://refspecs.linuxbase.org/LSB_4.0.0/LSB-Core-generic/LSB-Core-generic/ehframechpt.html
//
#define DW_CFA_nop 0x00
#define DW_CFA_set_loc 0x01
#define DW_CFA_advance_loc1 0x02
#define DW_CFA_advance_loc2 0x03
#define DW_CFA_advance_loc4 0x04
#define DW_CFA_offset_extended 0x05
#define DW_CFA_restore_extended 0x06
#define DW_CFA_undefined 0x07
#define DW_CFA_same_value 0x08
#define DW_CFA_register 0x09
#define DW_CFA_remember_state 0x0a
#define DW_CFA_restore_state 0x0b
#define DW_CFA_def_cfa 0x0c
#define DW_CFA_def_cfa_register 0x0d
#define DW_CFA_def_cfa_offset 0x0e
#define DW_CFA_def_cfa_expression 0x0f
#define DW_CFA_expression 0x10
#define DW_CFA_offset_extended_sf 0x11
#define DW_CFA_def_cfa_sf 0x12
#define DW_CFA_def_cfa_offset_sf 0x13
#define DW_CFA_val_offset 0x14
#define DW_CFA_val_offset_sf 0x15
#define DW_CFA_val_expression 0x16
#define DW_CFA_lo_user 0x1c
#define DW_CFA_negate_ra_state 0x2d
#define DW_CFA_GNU_args_size 0x2e
#define DW_CFA_GNU_negative_offset_extended 0x2f
#define DW_CFA_hi_user 0x3f
extern const u8 __eh_frame_start[], __eh_frame_end[];
enum {
PACIASP = 0xd503233f,
AUTIASP = 0xd50323bf,
SCS_PUSH = 0xf800865e,
SCS_POP = 0xf85f8e5e,
};
static void __always_inline scs_patch_loc(u64 loc)
{
u32 insn = le32_to_cpup((void *)loc);
switch (insn) {
case PACIASP:
*(u32 *)loc = cpu_to_le32(SCS_PUSH);
break;
case AUTIASP:
*(u32 *)loc = cpu_to_le32(SCS_POP);
break;
default:
/*
* While the DW_CFA_negate_ra_state directive is guaranteed to
* appear right after a PACIASP/AUTIASP instruction, it may
* also appear after a DW_CFA_restore_state directive that
* restores a state that is only partially accurate, and is
* followed by DW_CFA_negate_ra_state directive to toggle the
* PAC bit again. So we permit other instructions here, and ignore
* them.
*/
return;
}
dcache_clean_pou(loc, loc + sizeof(u32));
}
/*
* Skip one uleb128/sleb128 encoded quantity from the opcode stream. All bytes
* except the last one have bit #7 set.
*/
static int __always_inline skip_xleb128(const u8 **opcode, int size)
{
u8 c;
do {
c = *(*opcode)++;
size--;
} while (c & BIT(7));
return size;
}
struct eh_frame {
/*
* The size of this frame if 0 < size < U32_MAX, 0 terminates the list.
*/
u32 size;
/*
* The first frame is a Common Information Entry (CIE) frame, followed
* by one or more Frame Description Entry (FDE) frames. In the former
* case, this field is 0, otherwise it is the negated offset relative
* to the associated CIE frame.
*/
u32 cie_id_or_pointer;
union {
struct { // CIE
u8 version;
u8 augmentation_string[];
};
struct { // FDE
s32 initial_loc;
s32 range;
u8 opcodes[];
};
};
};
static int noinstr scs_handle_fde_frame(const struct eh_frame *frame,
bool fde_has_augmentation_data,
int code_alignment_factor)
{
int size = frame->size - offsetof(struct eh_frame, opcodes) + 4;
u64 loc = (u64)offset_to_ptr(&frame->initial_loc);
const u8 *opcode = frame->opcodes;
if (fde_has_augmentation_data) {
int l;
// assume single byte uleb128_t
if (WARN_ON(*opcode & BIT(7)))
return -ENOEXEC;
l = *opcode++;
opcode += l;
size -= l + 1;
}
/*
* Starting from 'loc', apply the CFA opcodes that advance the location
* pointer, and identify the locations of the PAC instructions.
*/
while (size-- > 0) {
switch (*opcode++) {
case DW_CFA_nop:
case DW_CFA_remember_state:
case DW_CFA_restore_state:
break;
case DW_CFA_advance_loc1:
loc += *opcode++ * code_alignment_factor;
size--;
break;
case DW_CFA_advance_loc2:
loc += *opcode++ * code_alignment_factor;
loc += (*opcode++ << 8) * code_alignment_factor;
size -= 2;
break;
case DW_CFA_def_cfa:
case DW_CFA_offset_extended:
size = skip_xleb128(&opcode, size);
fallthrough;
case DW_CFA_def_cfa_offset:
case DW_CFA_def_cfa_offset_sf:
case DW_CFA_def_cfa_register:
case DW_CFA_same_value:
case DW_CFA_restore_extended:
case 0x80 ... 0xbf:
size = skip_xleb128(&opcode, size);
break;
case DW_CFA_negate_ra_state:
scs_patch_loc(loc - 4);
break;
case 0x40 ... 0x7f:
// advance loc
loc += (opcode[-1] & 0x3f) * code_alignment_factor;
break;
case 0xc0 ... 0xff:
break;
default:
pr_err("unhandled opcode: %02x in FDE frame %lx\n", opcode[-1], (uintptr_t)frame);
return -ENOEXEC;
}
}
return 0;
}
int noinstr scs_patch(const u8 eh_frame[], int size)
{
const u8 *p = eh_frame;
while (size > 4) {
const struct eh_frame *frame = (const void *)p;
bool fde_has_augmentation_data = true;
int code_alignment_factor = 1;
int ret;
if (frame->size == 0 ||
frame->size == U32_MAX ||
frame->size > size)
break;
if (frame->cie_id_or_pointer == 0) {
const u8 *p = frame->augmentation_string;
/* a 'z' in the augmentation string must come first */
fde_has_augmentation_data = *p == 'z';
/*
* The code alignment factor is a uleb128 encoded field
* but given that the only sensible values are 1 or 4,
* there is no point in decoding the whole thing.
*/
p += strlen(p) + 1;
if (!WARN_ON(*p & BIT(7)))
code_alignment_factor = *p;
} else {
ret = scs_handle_fde_frame(frame,
fde_has_augmentation_data,
code_alignment_factor);
if (ret)
return ret;
}
p += sizeof(frame->size) + frame->size;
size -= sizeof(frame->size) + frame->size;
}
return 0;
}
asmlinkage void __init scs_patch_vmlinux(void)
{
if (!should_patch_pac_into_scs())
return;
WARN_ON(scs_patch(__eh_frame_start, __eh_frame_end - __eh_frame_start));
icache_inval_all_pou();
isb();
}

View File

@@ -7,6 +7,7 @@ KBUILD_CFLAGS := $(subst $(CC_FLAGS_FTRACE),,$(KBUILD_CFLAGS)) -fpie \
-I$(srctree)/scripts/dtc/libfdt -fno-stack-protector \
-include $(srctree)/include/linux/hidden.h \
-D__DISABLE_EXPORTS -ffreestanding -D__NO_FORTIFY \
-fno-asynchronous-unwind-tables -fno-unwind-tables \
$(call cc-option,-fno-addrsig)
# remove SCS flags from all objects in this directory

View File

@@ -667,6 +667,7 @@ unsigned long __get_wchan(struct task_struct *p)
return wchan_info.pc;
}
EXPORT_SYMBOL_GPL(get_wchan);
unsigned long arch_align_stack(unsigned long sp)
{

View File

@@ -144,7 +144,7 @@ static int init_sdei_scs(void)
int cpu;
int err = 0;
if (!IS_ENABLED(CONFIG_SHADOW_CALL_STACK))
if (!scs_is_enabled())
return 0;
for_each_possible_cpu(cpu) {

View File

@@ -30,6 +30,7 @@
#include <linux/efi.h>
#include <linux/psci.h>
#include <linux/sched/task.h>
#include <linux/scs.h>
#include <linux/mm.h>
#include <asm/acpi.h>
@@ -43,6 +44,7 @@
#include <asm/hypervisor.h>
#include <asm/kasan.h>
#include <asm/numa.h>
#include <asm/scs.h>
#include <asm/sections.h>
#include <asm/setup.h>
#include <asm/smp_plat.h>
@@ -314,6 +316,8 @@ void __init __no_sanitize_address setup_arch(char **cmdline_p)
jump_label_init();
parse_early_param();
dynamic_scs_init();
/*
* Unmask asynchronous aborts and fiq after bringing up possible
* earlycon. (Report possible System Errors once we can report this

View File

@@ -143,6 +143,17 @@ jiffies = jiffies_64;
#define TRAMP_TEXT
#endif
#ifdef CONFIG_UNWIND_TABLES
#define UNWIND_DATA_SECTIONS \
.eh_frame : { \
__eh_frame_start = .; \
*(.eh_frame) \
__eh_frame_end = .; \
}
#else
#define UNWIND_DATA_SECTIONS
#endif
/*
* The size of the PE/COFF section that covers the kernel image, which
* runs from _stext to _edata, must be a round multiple of the PE/COFF
@@ -261,6 +272,8 @@ SECTIONS
__alt_instructions_end = .;
}
UNWIND_DATA_SECTIONS
. = ALIGN(SEGMENT_ALIGN);
__inittext_end = .;
__initdata_begin = .;

View File

@@ -1687,6 +1687,7 @@ static void cpu_prepare_hyp_mode(int cpu)
else
params->hcr_el2 = HCR_HOST_NVHE_FLAGS;
params->vttbr = params->vtcr = 0;
params->hfgwtr_el2 = HFGxTR_EL2_nSMPRI_EL1_MASK | HFGxTR_EL2_nTPIDR2_EL0_MASK;
/*
* Flush the init params from the data cache because the struct will

View File

@@ -93,8 +93,6 @@ int __pkvm_iommu_register(unsigned long dev_id, unsigned long drv_id,
int __pkvm_iommu_pm_notify(unsigned long dev_id,
enum pkvm_iommu_pm_event event);
int __pkvm_iommu_finalize(int err);
int pkvm_iommu_host_stage2_adjust_range(phys_addr_t addr, phys_addr_t *start,
phys_addr_t *end);
bool pkvm_iommu_host_dabt_handler(struct kvm_cpu_context *host_ctxt, u32 esr,
phys_addr_t fault_pa);
void pkvm_iommu_host_stage2_idmap(phys_addr_t start, phys_addr_t end,

View File

@@ -72,6 +72,8 @@ int __pkvm_host_share_hyp(u64 pfn);
int __pkvm_host_unshare_hyp(u64 pfn);
int __pkvm_host_reclaim_page(struct pkvm_hyp_vm *vm, u64 pfn, u64 ipa);
int __pkvm_host_donate_hyp(u64 pfn, u64 nr_pages);
int ___pkvm_host_donate_hyp(u64 pfn, u64 nr_pages, bool accept_mmio);
int __pkvm_host_donate_hyp_locked(u64 pfn, u64 nr_pages);
int __pkvm_hyp_donate_host(u64 pfn, u64 nr_pages);
int __pkvm_host_share_guest(u64 pfn, u64 gfn, struct pkvm_hyp_vcpu *vcpu);
int __pkvm_host_donate_guest(u64 pfn, u64 gfn, struct pkvm_hyp_vcpu *vcpu);
@@ -89,7 +91,6 @@ bool addr_is_memory(phys_addr_t phys);
int host_stage2_idmap_locked(phys_addr_t addr, u64 size, enum kvm_pgtable_prot prot,
bool update_iommu);
int host_stage2_set_owner_locked(phys_addr_t addr, u64 size, enum pkvm_component_id owner_id);
int host_stage2_protect_pages_locked(phys_addr_t addr, u64 size);
int host_stage2_unmap_reg_locked(phys_addr_t start, u64 size);
int kvm_host_prepare_stage2(void *pgt_pool_base);
int kvm_guest_prepare_stage2(struct pkvm_hyp_vm *vm, void *pgd);

View File

@@ -11,13 +11,10 @@ int __pkvm_register_hyp_panic_notifier(void (*cb)(struct kvm_cpu_context *));
enum pkvm_psci_notification;
int __pkvm_register_psci_notifier(void (*cb)(enum pkvm_psci_notification, struct kvm_cpu_context *));
int reset_pkvm_priv_hcall_limit(void);
#ifdef CONFIG_MODULES
int __pkvm_init_module(void *module_init);
int __pkvm_register_hcall(unsigned long hfn_hyp_va);
int handle_host_dynamic_hcall(struct kvm_cpu_context *host_ctxt);
int __pkvm_close_late_module_registration(void);
void __pkvm_close_module_registration(void);
#else
static inline int __pkvm_init_module(void *module_init) { return -EOPNOTSUPP; }
@@ -27,6 +24,5 @@ static inline int handle_host_dynamic_hcall(struct kvm_cpu_context *host_ctxt)
{
return HCALL_UNHANDLED;
}
static inline int __pkvm_close_late_module_registration(void) { return -EOPNOTSUPP; }
static inline void __pkvm_close_module_registration(void) { }
#endif

View File

@@ -162,9 +162,4 @@ int pkvm_load_pvmfw_pages(struct pkvm_hyp_vm *vm, u64 ipa, phys_addr_t phys,
u64 size);
void pkvm_poison_pvmfw_pages(void);
/*
* Notify pKVM about events that can undermine pKVM security.
*/
void pkvm_handle_system_misconfiguration(enum pkvm_system_misconfiguration event);
#endif /* __ARM64_KVM_NVHE_PKVM_H__ */

View File

@@ -79,6 +79,7 @@ KBUILD_CFLAGS := $(filter-out $(CC_FLAGS_FTRACE) $(CC_FLAGS_SCS) $(CC_FLAGS_CFI)
# when profile optimization is applied. gen-hyprel does not support SHT_REL and
# causes a build failure. Remove profile optimization flags.
KBUILD_CFLAGS := $(filter-out -fprofile-sample-use=% -fprofile-use=%, $(KBUILD_CFLAGS))
KBUILD_CFLAGS += -fno-asynchronous-unwind-tables -fno-unwind-tables
# KVM nVHE code is run at a different exception code with a different map, so
# compiler instrumentation that inserts callbacks or checks into the code may

View File

@@ -95,6 +95,13 @@ SYM_CODE_START_LOCAL(___kvm_hyp_init)
ldr x1, [x0, #NVHE_INIT_HCR_EL2]
msr hcr_el2, x1
mrs x1, ID_AA64MMFR0_EL1
and x1, x1, #(0xf << ID_AA64MMFR0_EL1_FGT_SHIFT)
cbz x1, 1f
ldr x1, [x0, #NVHE_INIT_HFGWTR_EL2]
msr_s SYS_HFGWTR_EL2, x1
1:
ldr x1, [x0, #NVHE_INIT_VTTBR]
msr vttbr_el2, x1

View File

@@ -1212,12 +1212,6 @@ static void handle___pkvm_register_hcall(struct kvm_cpu_context *host_ctxt)
cpu_reg(host_ctxt, 1) = __pkvm_register_hcall(hfn_hyp_va);
}
static void
handle___pkvm_close_module_registration(struct kvm_cpu_context *host_ctxt)
{
cpu_reg(host_ctxt, 1) = __pkvm_close_late_module_registration();
}
static void handle___pkvm_load_tracing(struct kvm_cpu_context *host_ctxt)
{
DECLARE_REG(unsigned long, pack_hva, host_ctxt, 1);
@@ -1290,13 +1284,11 @@ static const hcall_t host_hcall[] = {
HANDLE_FUNC(__kvm_tlb_flush_vmid_ipa),
HANDLE_FUNC(__kvm_tlb_flush_vmid),
HANDLE_FUNC(__kvm_flush_cpu_context),
HANDLE_FUNC(__pkvm_alloc_module_va),
HANDLE_FUNC(__pkvm_map_module_page),
HANDLE_FUNC(__pkvm_unmap_module_page),
HANDLE_FUNC(__pkvm_init_module),
HANDLE_FUNC(__pkvm_register_hcall),
HANDLE_FUNC(__pkvm_close_module_registration),
HANDLE_FUNC(__pkvm_prot_finalize),
HANDLE_FUNC(__pkvm_host_share_hyp),
@@ -1330,22 +1322,6 @@ static const hcall_t host_hcall[] = {
#endif
};
unsigned long pkvm_priv_hcall_limit __ro_after_init = __KVM_HOST_SMCCC_FUNC___pkvm_prot_finalize;
int reset_pkvm_priv_hcall_limit(void)
{
unsigned long *addr;
if (pkvm_priv_hcall_limit == __KVM_HOST_SMCCC_FUNC___pkvm_prot_finalize)
return -EACCES;
addr = hyp_fixmap_map(__hyp_pa(&pkvm_priv_hcall_limit));
*addr = __KVM_HOST_SMCCC_FUNC___pkvm_prot_finalize;
hyp_fixmap_unmap();
return 0;
}
static void handle_host_hcall(struct kvm_cpu_context *host_ctxt)
{
DECLARE_REG(unsigned long, id, host_ctxt, 0);
@@ -1365,7 +1341,7 @@ static void handle_host_hcall(struct kvm_cpu_context *host_ctxt)
* returns -EPERM after the first call for a given CPU.
*/
if (static_branch_unlikely(&kvm_protected_mode_initialized))
hcall_min = pkvm_priv_hcall_limit;
hcall_min = __KVM_HOST_SMCCC_FUNC___pkvm_prot_finalize;
id -= KVM_HOST_SMCCC_ID(0);

View File

@@ -392,6 +392,7 @@ int __pkvm_iommu_register(unsigned long dev_id, unsigned long drv_id,
.id = dev_id,
.ops = drv->ops,
.pa = dev_pa,
.va = hyp_phys_to_virt(dev_pa),
.size = dev_size,
.flags = flags,
};
@@ -421,22 +422,11 @@ int __pkvm_iommu_register(unsigned long dev_id, unsigned long drv_id,
goto out_free;
}
/*
* Unmap the device's MMIO range from host stage-2. If registration
* is successful, future attempts to re-map will be blocked by
* pkvm_iommu_host_stage2_adjust_range.
*/
ret = host_stage2_unmap_reg_locked(dev_pa, dev_size);
ret = __pkvm_host_donate_hyp_locked(hyp_phys_to_pfn(dev_pa),
PAGE_ALIGN(dev_size) >> PAGE_SHIFT);
if (ret)
goto out_free;
/* Create EL2 mapping for the device. */
ret = __pkvm_create_private_mapping(dev_pa, dev_size,
PAGE_HYP_DEVICE, (unsigned long *)(&dev->va));
if (ret){
goto out_free;
}
/* Register device and prevent host from mapping the MMIO range. */
list_add_tail(&dev->list, &iommu_list);
if (dev->parent)
@@ -456,6 +446,9 @@ int __pkvm_iommu_finalize(int err)
{
int ret = 0;
/* Err is not currently used in EL2.*/
WARN_ON(err);
hyp_spin_lock(&iommu_registration_lock);
if (!iommu_finalized)
iommu_finalized = true;
@@ -463,15 +456,6 @@ int __pkvm_iommu_finalize(int err)
ret = -EPERM;
hyp_spin_unlock(&iommu_registration_lock);
/*
* If finalize failed in EL1 driver for any reason, this means we can't trust the DMA
* isolation. So we have to inform pKVM to properly protect itself.
*/
if (!ret && err)
pkvm_handle_system_misconfiguration(NO_DMA_ISOLATION);
__pkvm_close_late_module_registration();
return ret;
}
@@ -501,39 +485,6 @@ int __pkvm_iommu_pm_notify(unsigned long dev_id, enum pkvm_iommu_pm_event event)
return ret;
}
/*
* Check host memory access against IOMMUs' MMIO regions.
* Returns -EPERM if the address is within the bounds of a registered device.
* Otherwise returns zero and adjusts boundaries of the new mapping to avoid
* MMIO regions of registered IOMMUs.
*/
int pkvm_iommu_host_stage2_adjust_range(phys_addr_t addr, phys_addr_t *start,
phys_addr_t *end)
{
struct pkvm_iommu *dev;
phys_addr_t new_start = *start;
phys_addr_t new_end = *end;
phys_addr_t dev_start, dev_end;
assert_host_component_locked();
list_for_each_entry(dev, &iommu_list, list) {
dev_start = dev->pa;
dev_end = dev_start + dev->size;
if (addr < dev_start)
new_end = min(new_end, dev_start);
else if (addr >= dev_end)
new_start = max(new_start, dev_end);
else
return -EPERM;
}
*start = new_start;
*end = new_end;
return 0;
}
bool pkvm_iommu_host_dabt_handler(struct kvm_cpu_context *host_ctxt, u32 esr,
phys_addr_t pa)
{

View File

@@ -79,10 +79,35 @@ static void hyp_unlock_component(void)
hyp_spin_unlock(&pkvm_pgd_lock);
}
static void assert_host_can_alloc(void)
{
/* We can always get back to the host from guest context */
if (read_sysreg(vttbr_el2) != kvm_get_vttbr(&host_mmu.arch.mmu))
return;
/*
* An error code must be returned to EL1 to handle memory allocation
* failures cleanly. That's doable for explicit calls into higher
* ELs, but not so much for other EL2 entry reasons such as mem aborts.
* Thankfully we don't need memory allocation in these cases by
* construction, so let's enforce the invariant.
*/
switch (ESR_ELx_EC(read_sysreg(esr_el2))) {
case ESR_ELx_EC_HVC64:
case ESR_ELx_EC_SMC64:
break;
default:
WARN_ON(1);
}
}
static void *host_s2_zalloc_pages_exact(size_t size)
{
void *addr = hyp_alloc_pages(&host_s2_pool, get_order(size));
void *addr;
assert_host_can_alloc();
addr = hyp_alloc_pages(&host_s2_pool, get_order(size));
hyp_split_page(hyp_virt_to_page(addr));
/*
@@ -97,6 +122,8 @@ static void *host_s2_zalloc_pages_exact(size_t size)
static void *host_s2_zalloc_page(void *pool)
{
assert_host_can_alloc();
return hyp_alloc_pages(pool, 0);
}
@@ -146,6 +173,27 @@ static void prepare_host_vtcr(void)
id_aa64mmfr1_el1_sys_val, phys_shift);
}
static int prepopulate_host_stage2(void)
{
struct memblock_region *reg;
u64 addr = 0;
int i, ret;
for (i = 0; i < hyp_memblock_nr; i++) {
reg = &hyp_memory[i];
ret = host_stage2_idmap_locked(addr, reg->base - addr, PKVM_HOST_MMIO_PROT, false);
if (ret)
return ret;
ret = host_stage2_idmap_locked(reg->base, reg->size, PKVM_HOST_MEM_PROT, false);
if (ret)
return ret;
addr = reg->base + reg->size;
}
return host_stage2_idmap_locked(addr, BIT(host_mmu.pgt.ia_bits) - addr, PKVM_HOST_MMIO_PROT,
false);
}
int kvm_host_prepare_stage2(void *pgt_pool_base)
{
struct kvm_s2_mmu *mmu = &host_mmu.arch.mmu;
@@ -172,7 +220,7 @@ int kvm_host_prepare_stage2(void *pgt_pool_base)
mmu->pgt = &host_mmu.pgt;
atomic64_set(&mmu->vmid.id, 0);
return 0;
return prepopulate_host_stage2();
}
static bool guest_stage2_force_pte_cb(u64 addr, u64 end,
@@ -398,7 +446,7 @@ int host_stage2_unmap_reg_locked(phys_addr_t start, u64 size)
hyp_assert_lock_held(&host_mmu.lock);
ret = kvm_pgtable_stage2_unmap(&host_mmu.pgt, start, size);
ret = kvm_pgtable_stage2_reclaim_leaves(&host_mmu.pgt, start, size);
if (ret)
return ret;
@@ -466,6 +514,11 @@ static enum kvm_pgtable_prot default_host_prot(bool is_memory)
return is_memory ? PKVM_HOST_MEM_PROT : PKVM_HOST_MMIO_PROT;
}
static enum kvm_pgtable_prot default_hyp_prot(phys_addr_t phys)
{
return addr_is_memory(phys) ? PAGE_HYP : PAGE_HYP_DEVICE;
}
bool addr_is_memory(phys_addr_t phys)
{
struct kvm_mem_range range;
@@ -763,22 +816,15 @@ static int host_stage2_idmap(struct kvm_vcpu_fault_info *fault, u64 addr)
}
}
/*
* Adjust against IOMMU devices first. host_stage2_adjust_range() should
* be called last for proper alignment.
*/
if (!is_memory) {
ret = pkvm_iommu_host_stage2_adjust_range(addr, &range.start,
&range.end);
if (ret)
return ret;
}
ret = host_stage2_adjust_range(addr, &range, level);
if (ret)
return ret;
return host_stage2_idmap_locked(range.start, range.end - range.start, prot, false);
/*
* We're guaranteed not to require memory allocation by construction,
* no need to bother even trying to recycle pages.
*/
return __host_stage2_idmap(range.start, range.end, prot, false);
}
static void (*illegal_abt_notifier)(struct kvm_cpu_context *host_ctxt);
@@ -972,7 +1018,7 @@ static enum pkvm_page_state host_get_page_state(kvm_pte_t pte, u64 addr)
if (is_memory && hyp_phys_to_page(addr)->flags & MODULE_OWNED_PAGE)
return PKVM_MODULE_DONT_TOUCH;
if (!addr_is_allowed_memory(addr))
if (is_memory && !addr_is_allowed_memory(addr))
return PKVM_NOPAGE;
if (!kvm_pte_valid(pte) && pte)
@@ -1186,8 +1232,10 @@ static int hyp_ack_share(u64 addr, const struct pkvm_mem_transition *tx,
enum kvm_pgtable_prot perms)
{
u64 size = tx->nr_pages * PAGE_SIZE;
phys_addr_t phys = hyp_virt_to_phys((void *)addr);
enum kvm_pgtable_prot prot = default_hyp_prot(phys);
if (perms != PAGE_HYP)
if (!addr_is_memory(phys) || perms != prot)
return -EPERM;
if (__hyp_ack_skip_pgtable_check(tx))
@@ -1242,8 +1290,10 @@ static int hyp_complete_donation(u64 addr,
const struct pkvm_mem_transition *tx)
{
void *start = (void *)addr, *end = start + (tx->nr_pages * PAGE_SIZE);
enum kvm_pgtable_prot prot = pkvm_mkstate(PAGE_HYP, PKVM_PAGE_OWNED);
phys_addr_t phys = hyp_virt_to_phys(start);
enum kvm_pgtable_prot prot = default_hyp_prot(phys);
prot = pkvm_mkstate(prot, PKVM_PAGE_OWNED);
return pkvm_create_mappings_locked(start, end, prot);
}
@@ -1280,7 +1330,7 @@ static int guest_ack_share(u64 addr, const struct pkvm_mem_transition *tx,
{
u64 size = tx->nr_pages * PAGE_SIZE;
if (perms != KVM_PGTABLE_PROT_RWX)
if (!addr_is_memory(tx->completer.guest.phys) || perms != KVM_PGTABLE_PROT_RWX)
return -EPERM;
return __guest_check_page_state_range(tx->completer.guest.hyp_vcpu,
@@ -1291,6 +1341,9 @@ static int guest_ack_donation(u64 addr, const struct pkvm_mem_transition *tx)
{
u64 size = tx->nr_pages * PAGE_SIZE;
if (!addr_is_memory(tx->completer.guest.phys))
return -EPERM;
return __guest_check_page_state_range(tx->completer.guest.hyp_vcpu,
addr, size, PKVM_NOPAGE);
}
@@ -1776,7 +1829,7 @@ int __pkvm_host_share_hyp(u64 pfn)
.id = PKVM_ID_HYP,
},
},
.completer_prot = PAGE_HYP,
.completer_prot = default_hyp_prot(host_addr),
};
host_lock_component();
@@ -1873,7 +1926,7 @@ int __pkvm_host_unshare_hyp(u64 pfn)
.id = PKVM_ID_HYP,
},
},
.completer_prot = PAGE_HYP,
.completer_prot = default_hyp_prot(host_addr),
};
host_lock_component();
@@ -1888,6 +1941,27 @@ int __pkvm_host_unshare_hyp(u64 pfn)
}
int __pkvm_host_donate_hyp(u64 pfn, u64 nr_pages)
{
return ___pkvm_host_donate_hyp(pfn, nr_pages, false);
}
int ___pkvm_host_donate_hyp(u64 pfn, u64 nr_pages, bool accept_mmio)
{
phys_addr_t start = hyp_pfn_to_phys(pfn);
phys_addr_t end = start + (nr_pages << PAGE_SHIFT);
int ret;
if (!accept_mmio && !range_is_memory(start, end))
return -EPERM;
host_lock_component();
ret = __pkvm_host_donate_hyp_locked(pfn, nr_pages);
host_unlock_component();
return ret;
}
int __pkvm_host_donate_hyp_locked(u64 pfn, u64 nr_pages)
{
int ret;
u64 host_addr = hyp_pfn_to_phys(pfn);
@@ -1908,13 +1982,12 @@ int __pkvm_host_donate_hyp(u64 pfn, u64 nr_pages)
},
};
host_lock_component();
hyp_assert_lock_held(&host_mmu.lock);
hyp_lock_component();
ret = do_donate(&donation);
hyp_unlock_component();
host_unlock_component();
return ret;
}
@@ -1964,15 +2037,19 @@ static int restrict_host_page_perms(u64 addr, kvm_pte_t pte, u32 level, enum kvm
return ret;
}
#define MODULE_PROT_ALLOWLIST (KVM_PGTABLE_PROT_RWX | \
KVM_PGTABLE_PROT_NC | \
KVM_PGTABLE_PROT_PXN | \
KVM_PGTABLE_PROT_UXN)
int module_change_host_page_prot(u64 pfn, enum kvm_pgtable_prot prot)
{
u64 addr = hyp_pfn_to_phys(pfn);
struct hyp_page *page;
struct hyp_page *page = NULL;
kvm_pte_t pte;
u32 level;
int ret;
if ((prot & KVM_PGTABLE_PROT_RWX) != prot || !addr_is_memory(addr))
if ((prot & MODULE_PROT_ALLOWLIST) != prot)
return -EINVAL;
host_lock_component();
@@ -1980,6 +2057,14 @@ int module_change_host_page_prot(u64 pfn, enum kvm_pgtable_prot prot)
if (ret)
goto unlock;
/*
* There is no hyp_vmemmap covering MMIO regions, which makes tracking
* of module-owned MMIO regions hard, so we trust the modules not to
* mess things up.
*/
if (!addr_is_memory(addr))
goto update;
ret = -EPERM;
page = hyp_phys_to_page(addr);
@@ -1994,14 +2079,15 @@ int module_change_host_page_prot(u64 pfn, enum kvm_pgtable_prot prot)
goto unlock;
}
if (prot == KVM_PGTABLE_PROT_RWX)
update:
if (prot == default_host_prot(!!page))
ret = host_stage2_set_owner_locked(addr, PAGE_SIZE, PKVM_ID_HOST);
else if (!prot)
ret = host_stage2_set_owner_locked(addr, PAGE_SIZE, PKVM_ID_PROTECTED);
else
ret = restrict_host_page_perms(addr, pte, level, prot);
if (ret)
if (ret || !page)
goto unlock;
if (prot != KVM_PGTABLE_PROT_RWX)
@@ -2366,19 +2452,6 @@ bool __pkvm_check_ioguard_page(struct pkvm_hyp_vcpu *hyp_vcpu)
return ret;
}
int host_stage2_protect_pages_locked(phys_addr_t addr, u64 size)
{
int ret;
hyp_assert_lock_held(&host_mmu.lock);
ret = __host_check_page_state_range(addr, size, PKVM_PAGE_OWNED);
if (!ret)
ret = host_stage2_set_owner_locked(addr, size, PKVM_ID_PROTECTED);
return ret;
}
int host_stage2_get_leaf(phys_addr_t phys, kvm_pte_t *ptep, u32 *level)
{
int ret;

View File

@@ -17,6 +17,26 @@ static void __kvm_flush_dcache_to_poc(void *addr, size_t size)
kvm_flush_dcache_to_poc((unsigned long)addr, (unsigned long)size);
}
static void __update_hcr_el2(unsigned long set_mask, unsigned long clear_mask)
{
struct kvm_nvhe_init_params *params = this_cpu_ptr(&kvm_init_params);
params->hcr_el2 |= set_mask;
params->hcr_el2 &= ~clear_mask;
__kvm_flush_dcache_to_poc(params, sizeof(*params));
write_sysreg(params->hcr_el2, hcr_el2);
}
static void __update_hfgwtr_el2(unsigned long set_mask, unsigned long clear_mask)
{
struct kvm_nvhe_init_params *params = this_cpu_ptr(&kvm_init_params);
params->hfgwtr_el2 |= set_mask;
params->hfgwtr_el2 &= ~clear_mask;
__kvm_flush_dcache_to_poc(params, sizeof(*params));
write_sysreg_s(params->hfgwtr_el2, SYS_HFGWTR_EL2);
}
static atomic_t early_lm_pages;
static void *__pkvm_linear_map_early(phys_addr_t phys, size_t size, enum kvm_pgtable_prot prot)
{
@@ -57,13 +77,9 @@ void __pkvm_close_module_registration(void)
*/
}
int __pkvm_close_late_module_registration(void)
static int __pkvm_module_host_donate_hyp(u64 pfn, u64 nr_pages)
{
__pkvm_close_module_registration();
return reset_pkvm_priv_hcall_limit();
/* The fuse is blown! No way back until reset */
return ___pkvm_host_donate_hyp(pfn, nr_pages, true);
}
const struct pkvm_module_ops module_ops = {
@@ -78,6 +94,8 @@ const struct pkvm_module_ops module_ops = {
.linear_map_early = __pkvm_linear_map_early,
.linear_unmap_early = __pkvm_linear_unmap_early,
.flush_dcache_to_poc = __kvm_flush_dcache_to_poc,
.update_hcr_el2 = __update_hcr_el2,
.update_hfgwtr_el2 = __update_hfgwtr_el2,
.register_host_perm_fault_handler = hyp_register_host_perm_fault_handler,
.host_stage2_mod_prot = module_change_host_page_prot,
.host_stage2_get_leaf = host_stage2_get_leaf,
@@ -86,7 +104,7 @@ const struct pkvm_module_ops module_ops = {
.register_illegal_abt_notifier = __pkvm_register_illegal_abt_notifier,
.register_psci_notifier = __pkvm_register_psci_notifier,
.register_hyp_panic_notifier = __pkvm_register_hyp_panic_notifier,
.host_donate_hyp = __pkvm_host_donate_hyp,
.host_donate_hyp = __pkvm_module_host_donate_hyp,
.hyp_donate_host = __pkvm_hyp_donate_host,
.host_share_hyp = __pkvm_host_share_hyp,
.host_unshare_hyp = __pkvm_host_unshare_hyp,

View File

@@ -1570,14 +1570,3 @@ bool kvm_hyp_handle_hvc64(struct kvm_vcpu *vcpu, u64 *exit_code)
return false;
}
/*
* Notify pKVM about events that can undermine pKVM security.
*/
void pkvm_handle_system_misconfiguration(enum pkvm_system_misconfiguration event)
{
if (event == NO_DMA_ISOLATION)
pkvm_poison_pvmfw_pages();
else
BUG();
}

View File

@@ -277,6 +277,29 @@ static int fix_hyp_pgtable_refcnt_walker(u64 addr, u64 end, u32 level,
return 0;
}
static int pin_table_walker(u64 addr, u64 end, u32 level, kvm_pte_t *ptep,
enum kvm_pgtable_walk_flags flag, void * const arg)
{
struct kvm_pgtable_mm_ops *mm_ops = arg;
kvm_pte_t pte = *ptep;
if (kvm_pte_valid(pte))
mm_ops->get_page(kvm_pte_follow(pte, mm_ops));
return 0;
}
static int pin_host_tables(void)
{
struct kvm_pgtable_walker walker = {
.cb = pin_table_walker,
.flags = KVM_PGTABLE_WALK_TABLE_POST,
.arg = &host_mmu.mm_ops,
};
return kvm_pgtable_walk(&host_mmu.pgt, 0, BIT(host_mmu.pgt.ia_bits), &walker);
}
static int fix_host_ownership(void)
{
struct kvm_pgtable_walker walker = {
@@ -318,7 +341,9 @@ static int unmap_protected_regions(void)
reg = &pkvm_moveable_regs[i];
if (reg->type != PKVM_MREG_PROTECTED_RANGE)
continue;
ret = host_stage2_protect_pages_locked(reg->start, reg->size);
ret = host_stage2_set_owner_locked(reg->start, reg->size,
PKVM_ID_PROTECTED);
if (ret)
return ret;
}
@@ -355,10 +380,6 @@ void __noreturn __pkvm_init_finalise(void)
};
pkvm_pgtable.mm_ops = &pkvm_pgtable_mm_ops;
ret = fix_host_ownership();
if (ret)
goto out;
ret = fix_hyp_pgtable_refcnt();
if (ret)
goto out;
@@ -367,10 +388,18 @@ void __noreturn __pkvm_init_finalise(void)
if (ret)
goto out;
ret = fix_host_ownership();
if (ret)
goto out;
ret = unmap_protected_regions();
if (ret)
goto out;
ret = pin_host_tables();
if (ret)
goto out;
ret = hyp_ffa_init(ffa_proxy_pages);
if (ret)
goto out;

View File

@@ -76,11 +76,6 @@ static u32 kvm_pgd_pages(u32 ia_bits, u32 start_level)
return __kvm_pgd_page_idx(&pgt, -1ULL) + 1;
}
static kvm_pte_t *kvm_pte_follow(kvm_pte_t pte, struct kvm_pgtable_mm_ops *mm_ops)
{
return mm_ops->phys_to_virt(kvm_pte_to_phys(pte));
}
static void kvm_clear_pte(kvm_pte_t *ptep)
{
WRITE_ONCE(*ptep, 0);
@@ -281,7 +276,8 @@ static int hyp_set_prot_attr(enum kvm_pgtable_prot prot, kvm_pte_t *ptep)
kvm_pte_t attr;
u32 mtype;
if (!(prot & KVM_PGTABLE_PROT_R) || (device && nc))
if (!(prot & KVM_PGTABLE_PROT_R) || (device && nc) ||
(prot & (KVM_PGTABLE_PROT_PXN | KVM_PGTABLE_PROT_UXN)))
return -EINVAL;
if (device)
@@ -570,16 +566,15 @@ static bool stage2_has_fwb(struct kvm_pgtable *pgt)
#define KVM_S2_MEMATTR(pgt, attr) PAGE_S2_MEMATTR(attr, stage2_has_fwb(pgt))
static int stage2_set_prot_attr(struct kvm_pgtable *pgt, enum kvm_pgtable_prot prot,
kvm_pte_t *ptep)
kvm_pte_t *ptep)
{
u64 exec_type = KVM_PTE_LEAF_ATTR_HI_S2_XN_XN;
bool device = prot & KVM_PGTABLE_PROT_DEVICE;
u32 sh = KVM_PTE_LEAF_ATTR_LO_S2_SH_IS;
bool nc = prot & KVM_PGTABLE_PROT_NC;
enum kvm_pgtable_prot exec_prot;
kvm_pte_t attr;
if (device && nc)
return -EINVAL;
if (device)
attr = KVM_S2_MEMATTR(pgt, DEVICE_nGnRE);
else if (nc)
@@ -587,11 +582,23 @@ static int stage2_set_prot_attr(struct kvm_pgtable *pgt, enum kvm_pgtable_prot p
else
attr = KVM_S2_MEMATTR(pgt, NORMAL);
if (!(prot & KVM_PGTABLE_PROT_X))
attr |= KVM_PTE_LEAF_ATTR_HI_S2_XN;
else if (device)
return -EINVAL;
exec_prot = prot & (KVM_PGTABLE_PROT_X | KVM_PGTABLE_PROT_PXN | KVM_PGTABLE_PROT_UXN);
switch(exec_prot) {
case KVM_PGTABLE_PROT_X:
goto set_ap;
case KVM_PGTABLE_PROT_PXN:
exec_type = KVM_PTE_LEAF_ATTR_HI_S2_XN_PXN;
break;
case KVM_PGTABLE_PROT_UXN:
exec_type = KVM_PTE_LEAF_ATTR_HI_S2_XN_UXN;
break;
default:
if (exec_prot)
return -EINVAL;
}
attr |= FIELD_PREP(KVM_PTE_LEAF_ATTR_HI_S2_XN, exec_type);
set_ap:
if (prot & KVM_PGTABLE_PROT_R)
attr |= KVM_PTE_LEAF_ATTR_LO_S2_S2AP_R;
@@ -617,8 +624,21 @@ enum kvm_pgtable_prot kvm_pgtable_stage2_pte_prot(kvm_pte_t pte)
prot |= KVM_PGTABLE_PROT_R;
if (pte & KVM_PTE_LEAF_ATTR_LO_S2_S2AP_W)
prot |= KVM_PGTABLE_PROT_W;
if (!(pte & KVM_PTE_LEAF_ATTR_HI_S2_XN))
switch(FIELD_GET(KVM_PTE_LEAF_ATTR_HI_S2_XN, pte)) {
case 0:
prot |= KVM_PGTABLE_PROT_X;
break;
case KVM_PTE_LEAF_ATTR_HI_S2_XN_PXN:
prot |= KVM_PGTABLE_PROT_PXN;
break;
case KVM_PTE_LEAF_ATTR_HI_S2_XN_UXN:
prot |= KVM_PGTABLE_PROT_UXN;
break;
case KVM_PTE_LEAF_ATTR_HI_S2_XN_XN:
break;
default:
WARN_ON(1);
}
return prot;
}
@@ -660,7 +680,9 @@ static bool stage2_pte_cacheable(struct kvm_pgtable *pgt, kvm_pte_t pte)
static bool stage2_pte_executable(kvm_pte_t pte)
{
return kvm_pte_valid(pte) && !(pte & KVM_PTE_LEAF_ATTR_HI_S2_XN);
kvm_pte_t xn = FIELD_GET(KVM_PTE_LEAF_ATTR_HI_S2_XN, pte);
return kvm_pte_valid(pte) && xn != KVM_PTE_LEAF_ATTR_HI_S2_XN_XN;
}
static bool stage2_leaf_mapping_allowed(u64 addr, u64 end, u32 level,
@@ -1017,6 +1039,30 @@ int kvm_pgtable_stage2_unmap(struct kvm_pgtable *pgt, u64 addr, u64 size)
return kvm_pgtable_walk(pgt, addr, size, &walker);
}
static int stage2_reclaim_leaf_walker(u64 addr, u64 end, u32 level, kvm_pte_t *ptep,
enum kvm_pgtable_walk_flags flag, void * const arg)
{
stage2_coalesce_walk_table_post(addr, end, level, ptep, arg);
return 0;
}
int kvm_pgtable_stage2_reclaim_leaves(struct kvm_pgtable *pgt, u64 addr, u64 size)
{
struct stage2_map_data map_data = {
.phys = KVM_PHYS_INVALID,
.mmu = pgt->mmu,
.mm_ops = pgt->mm_ops,
};
struct kvm_pgtable_walker walker = {
.cb = stage2_reclaim_leaf_walker,
.arg = &map_data,
.flags = KVM_PGTABLE_WALK_TABLE_POST,
};
return kvm_pgtable_walk(pgt, addr, size, &walker);
}
struct stage2_attr_data {
kvm_pte_t attr_set;
kvm_pte_t attr_clr;
@@ -1135,7 +1181,7 @@ int kvm_pgtable_stage2_relax_perms(struct kvm_pgtable *pgt, u64 addr,
u32 level;
kvm_pte_t set = 0, clr = 0;
if (prot & KVM_PTE_LEAF_ATTR_HI_SW)
if (prot & !KVM_PGTABLE_PROT_RWX)
return -EINVAL;
if (prot & KVM_PGTABLE_PROT_R)

View File

@@ -429,6 +429,8 @@ int kvm_arm_set_fw_reg(struct kvm_vcpu *vcpu, const struct kvm_one_reg *reg)
u64 val;
int wa_level;
if (KVM_REG_SIZE(reg->id) != sizeof(val))
return -ENOENT;
if (copy_from_user(&val, uaddr, KVM_REG_SIZE(reg->id)))
return -EFAULT;

View File

@@ -6,6 +6,9 @@
#include <linux/kvm_host.h>
/* Did all IOMMUs register as expected. */
static bool finalised;
static unsigned long dev_to_id(struct device *dev)
{
/* Use the struct device pointer as a unique identifier. */
@@ -16,7 +19,7 @@ int pkvm_iommu_driver_init(u64 drv, void *data, size_t size)
{
return kvm_call_hyp_nvhe(__pkvm_iommu_driver_init, drv, data, size);
}
EXPORT_SYMBOL_GPL(pkvm_iommu_driver_init);
EXPORT_SYMBOL(pkvm_iommu_driver_init);
int pkvm_iommu_register(struct device *dev, u64 drv, phys_addr_t pa,
size_t size, struct device *parent, u8 flags)
@@ -41,24 +44,30 @@ int pkvm_iommu_register(struct device *dev, u64 drv, phys_addr_t pa,
}
return ret;
}
EXPORT_SYMBOL_GPL(pkvm_iommu_register);
EXPORT_SYMBOL(pkvm_iommu_register);
int pkvm_iommu_suspend(struct device *dev)
{
return kvm_call_hyp_nvhe(__pkvm_iommu_pm_notify, dev_to_id(dev),
PKVM_IOMMU_PM_SUSPEND);
}
EXPORT_SYMBOL_GPL(pkvm_iommu_suspend);
EXPORT_SYMBOL(pkvm_iommu_suspend);
int pkvm_iommu_resume(struct device *dev)
{
return kvm_call_hyp_nvhe(__pkvm_iommu_pm_notify, dev_to_id(dev),
PKVM_IOMMU_PM_RESUME);
}
EXPORT_SYMBOL_GPL(pkvm_iommu_resume);
EXPORT_SYMBOL(pkvm_iommu_resume);
int pkvm_iommu_finalize(int err)
{
return kvm_call_hyp_nvhe(__pkvm_iommu_finalize, err);
finalised = !err;
return kvm_call_hyp_nvhe(__pkvm_iommu_finalize, 0);
}
EXPORT_SYMBOL_GPL(pkvm_iommu_finalize);
bool pkvm_iommu_finalized(void)
{
return finalised;
}

View File

@@ -448,6 +448,9 @@ static int __init pkvm_firmware_rmem_clear(void)
return -EINVAL;
memset(addr, 0, size);
/* Clear so user space doesn't get stale info via IOCTL. */
pkvm_firmware_mem = NULL;
dcache_clean_poc((unsigned long)addr, (unsigned long)addr + size);
memunmap(addr);
return 0;
@@ -501,6 +504,10 @@ static int __init finalize_pkvm(void)
if (pkvm_load_early_modules())
pkvm_firmware_rmem_clear();
/* If no DMA protection. */
if (!pkvm_iommu_finalized())
pkvm_firmware_rmem_clear();
/*
* Exclude HYP sections from kmemleak so that they don't get peeked
* at, which would end badly once inaccessible.
@@ -578,26 +585,14 @@ int pkvm_vm_ioctl_enable_cap(struct kvm *kvm, struct kvm_enable_cap *cap)
#ifdef CONFIG_MODULES
static char early_pkvm_modules[COMMAND_LINE_SIZE] __initdata;
static int __init pkvm_enable_module_late_loading(void)
{
extern unsigned long kvm_nvhe_sym(pkvm_priv_hcall_limit);
WARN(1, "Loading pKVM modules with kvm-arm.protected_modules is deprecated\n"
"Use kvm-arm.protected_modules=<module1>,<module2>");
/*
* Move the limit to allow module loading HVCs. It will be moved back to
* its original position in __pkvm_close_module_registration().
*/
kvm_nvhe_sym(pkvm_priv_hcall_limit) = __KVM_HOST_SMCCC_FUNC___pkvm_alloc_module_va;
return 0;
}
static int __init early_pkvm_modules_cfg(char *arg)
{
/*
* Loading pKVM modules with kvm-arm.protected_modules is deprecated
* Use kvm-arm.protected_modules=<module1>,<module2>
*/
if (!arg)
return pkvm_enable_module_late_loading();
return -EINVAL;
strscpy(early_pkvm_modules, arg, COMMAND_LINE_SIZE);
@@ -800,7 +795,8 @@ int __pkvm_load_el2_module(struct module *this, unsigned long *token)
int ret, i, secs_first;
size_t offset, size;
if (!is_protected_kvm_enabled())
/* The pKVM hyp only allows loading before it is fully initialized */
if (!is_protected_kvm_enabled() || is_pkvm_initialized())
return -EOPNOTSUPP;
for (i = 0; i < ARRAY_SIZE(secs_map); i++) {
@@ -870,11 +866,11 @@ int __pkvm_load_el2_module(struct module *this, unsigned long *token)
return 0;
}
EXPORT_SYMBOL_GPL(__pkvm_load_el2_module);
EXPORT_SYMBOL(__pkvm_load_el2_module);
int __pkvm_register_el2_call(unsigned long hfn_hyp_va)
{
return kvm_call_hyp_nvhe(__pkvm_register_hcall, hfn_hyp_va);
}
EXPORT_SYMBOL_GPL(__pkvm_register_el2_call);
EXPORT_SYMBOL(__pkvm_register_el2_call);
#endif /* CONFIG_MODULES */

View File

@@ -15,16 +15,14 @@
#include <kvm/arm_pmu.h>
#include <kvm/arm_vgic.h>
#define PERF_ATTR_CFG1_COUNTER_64BIT BIT(0)
DEFINE_STATIC_KEY_FALSE(kvm_arm_pmu_available);
static LIST_HEAD(arm_pmus);
static DEFINE_MUTEX(arm_pmus_lock);
static void kvm_pmu_create_perf_event(struct kvm_vcpu *vcpu, u64 select_idx);
static void kvm_pmu_update_pmc_chained(struct kvm_vcpu *vcpu, u64 select_idx);
static void kvm_pmu_stop_counter(struct kvm_vcpu *vcpu, struct kvm_pmc *pmc);
#define PERF_ATTR_CFG1_KVM_PMU_CHAINED 0x1
static u32 kvm_pmu_event_mask(struct kvm *kvm)
{
@@ -52,11 +50,22 @@ static u32 kvm_pmu_event_mask(struct kvm *kvm)
* @select_idx: The counter index
*/
static bool kvm_pmu_idx_is_64bit(struct kvm_vcpu *vcpu, u64 select_idx)
{
return (select_idx == ARMV8_PMU_CYCLE_IDX);
}
static bool kvm_pmu_idx_has_64bit_overflow(struct kvm_vcpu *vcpu, u64 select_idx)
{
return (select_idx == ARMV8_PMU_CYCLE_IDX &&
__vcpu_sys_reg(vcpu, PMCR_EL0) & ARMV8_PMU_PMCR_LC);
}
static bool kvm_pmu_counter_can_chain(struct kvm_vcpu *vcpu, u64 idx)
{
return (!(idx & 1) && (idx + 1) < ARMV8_PMU_CYCLE_IDX &&
!kvm_pmu_idx_has_64bit_overflow(vcpu, idx));
}
static struct kvm_vcpu *kvm_pmc_to_vcpu(struct kvm_pmc *pmc)
{
struct kvm_pmu *pmu;
@@ -69,91 +78,22 @@ static struct kvm_vcpu *kvm_pmc_to_vcpu(struct kvm_pmc *pmc)
}
/**
* kvm_pmu_pmc_is_chained - determine if the pmc is chained
* @pmc: The PMU counter pointer
*/
static bool kvm_pmu_pmc_is_chained(struct kvm_pmc *pmc)
{
struct kvm_vcpu *vcpu = kvm_pmc_to_vcpu(pmc);
return test_bit(pmc->idx >> 1, vcpu->arch.pmu.chained);
}
/**
* kvm_pmu_idx_is_high_counter - determine if select_idx is a high/low counter
* @select_idx: The counter index
*/
static bool kvm_pmu_idx_is_high_counter(u64 select_idx)
{
return select_idx & 0x1;
}
/**
* kvm_pmu_get_canonical_pmc - obtain the canonical pmc
* @pmc: The PMU counter pointer
*
* When a pair of PMCs are chained together we use the low counter (canonical)
* to hold the underlying perf event.
*/
static struct kvm_pmc *kvm_pmu_get_canonical_pmc(struct kvm_pmc *pmc)
{
if (kvm_pmu_pmc_is_chained(pmc) &&
kvm_pmu_idx_is_high_counter(pmc->idx))
return pmc - 1;
return pmc;
}
static struct kvm_pmc *kvm_pmu_get_alternate_pmc(struct kvm_pmc *pmc)
{
if (kvm_pmu_idx_is_high_counter(pmc->idx))
return pmc - 1;
else
return pmc + 1;
}
/**
* kvm_pmu_idx_has_chain_evtype - determine if the event type is chain
* kvm_pmu_get_counter_value - get PMU counter value
* @vcpu: The vcpu pointer
* @select_idx: The counter index
*/
static bool kvm_pmu_idx_has_chain_evtype(struct kvm_vcpu *vcpu, u64 select_idx)
u64 kvm_pmu_get_counter_value(struct kvm_vcpu *vcpu, u64 select_idx)
{
u64 eventsel, reg;
u64 counter, reg, enabled, running;
struct kvm_pmu *pmu = &vcpu->arch.pmu;
struct kvm_pmc *pmc = &pmu->pmc[select_idx];
select_idx |= 0x1;
if (!kvm_vcpu_has_pmu(vcpu))
return 0;
if (select_idx == ARMV8_PMU_CYCLE_IDX)
return false;
reg = PMEVTYPER0_EL0 + select_idx;
eventsel = __vcpu_sys_reg(vcpu, reg) & kvm_pmu_event_mask(vcpu->kvm);
return eventsel == ARMV8_PMUV3_PERFCTR_CHAIN;
}
/**
* kvm_pmu_get_pair_counter_value - get PMU counter value
* @vcpu: The vcpu pointer
* @pmc: The PMU counter pointer
*/
static u64 kvm_pmu_get_pair_counter_value(struct kvm_vcpu *vcpu,
struct kvm_pmc *pmc)
{
u64 counter, counter_high, reg, enabled, running;
if (kvm_pmu_pmc_is_chained(pmc)) {
pmc = kvm_pmu_get_canonical_pmc(pmc);
reg = PMEVCNTR0_EL0 + pmc->idx;
counter = __vcpu_sys_reg(vcpu, reg);
counter_high = __vcpu_sys_reg(vcpu, reg + 1);
counter = lower_32_bits(counter) | (counter_high << 32);
} else {
reg = (pmc->idx == ARMV8_PMU_CYCLE_IDX)
? PMCCNTR_EL0 : PMEVCNTR0_EL0 + pmc->idx;
counter = __vcpu_sys_reg(vcpu, reg);
}
reg = (pmc->idx == ARMV8_PMU_CYCLE_IDX)
? PMCCNTR_EL0 : PMEVCNTR0_EL0 + pmc->idx;
counter = __vcpu_sys_reg(vcpu, reg);
/*
* The real counter value is equal to the value of counter register plus
@@ -163,29 +103,7 @@ static u64 kvm_pmu_get_pair_counter_value(struct kvm_vcpu *vcpu,
counter += perf_event_read_value(pmc->perf_event, &enabled,
&running);
return counter;
}
/**
* kvm_pmu_get_counter_value - get PMU counter value
* @vcpu: The vcpu pointer
* @select_idx: The counter index
*/
u64 kvm_pmu_get_counter_value(struct kvm_vcpu *vcpu, u64 select_idx)
{
u64 counter;
struct kvm_pmu *pmu = &vcpu->arch.pmu;
struct kvm_pmc *pmc = &pmu->pmc[select_idx];
if (!kvm_vcpu_has_pmu(vcpu))
return 0;
counter = kvm_pmu_get_pair_counter_value(vcpu, pmc);
if (kvm_pmu_pmc_is_chained(pmc) &&
kvm_pmu_idx_is_high_counter(select_idx))
counter = upper_32_bits(counter);
else if (select_idx != ARMV8_PMU_CYCLE_IDX)
if (!kvm_pmu_idx_is_64bit(vcpu, select_idx))
counter = lower_32_bits(counter);
return counter;
@@ -218,7 +136,6 @@ void kvm_pmu_set_counter_value(struct kvm_vcpu *vcpu, u64 select_idx, u64 val)
*/
static void kvm_pmu_release_perf_event(struct kvm_pmc *pmc)
{
pmc = kvm_pmu_get_canonical_pmc(pmc);
if (pmc->perf_event) {
perf_event_disable(pmc->perf_event);
perf_event_release_kernel(pmc->perf_event);
@@ -236,11 +153,10 @@ static void kvm_pmu_stop_counter(struct kvm_vcpu *vcpu, struct kvm_pmc *pmc)
{
u64 counter, reg, val;
pmc = kvm_pmu_get_canonical_pmc(pmc);
if (!pmc->perf_event)
return;
counter = kvm_pmu_get_pair_counter_value(vcpu, pmc);
counter = kvm_pmu_get_counter_value(vcpu, pmc->idx);
if (pmc->idx == ARMV8_PMU_CYCLE_IDX) {
reg = PMCCNTR_EL0;
@@ -252,9 +168,6 @@ static void kvm_pmu_stop_counter(struct kvm_vcpu *vcpu, struct kvm_pmc *pmc)
__vcpu_sys_reg(vcpu, reg) = val;
if (kvm_pmu_pmc_is_chained(pmc))
__vcpu_sys_reg(vcpu, reg + 1) = upper_32_bits(counter);
kvm_pmu_release_perf_event(pmc);
}
@@ -285,8 +198,6 @@ void kvm_pmu_vcpu_reset(struct kvm_vcpu *vcpu)
for_each_set_bit(i, &mask, 32)
kvm_pmu_stop_counter(vcpu, &pmu->pmc[i]);
bitmap_zero(vcpu->arch.pmu.chained, ARMV8_PMU_MAX_COUNTER_PAIRS);
}
/**
@@ -340,12 +251,9 @@ void kvm_pmu_enable_counter_mask(struct kvm_vcpu *vcpu, u64 val)
pmc = &pmu->pmc[i];
/* A change in the enable state may affect the chain state */
kvm_pmu_update_pmc_chained(vcpu, i);
kvm_pmu_create_perf_event(vcpu, i);
/* At this point, pmc must be the canonical */
if (pmc->perf_event) {
if (!pmc->perf_event) {
kvm_pmu_create_perf_event(vcpu, i);
} else {
perf_event_enable(pmc->perf_event);
if (pmc->perf_event->state != PERF_EVENT_STATE_ACTIVE)
kvm_debug("fail to enable perf event\n");
@@ -375,11 +283,6 @@ void kvm_pmu_disable_counter_mask(struct kvm_vcpu *vcpu, u64 val)
pmc = &pmu->pmc[i];
/* A change in the enable state may affect the chain state */
kvm_pmu_update_pmc_chained(vcpu, i);
kvm_pmu_create_perf_event(vcpu, i);
/* At this point, pmc must be the canonical */
if (pmc->perf_event)
perf_event_disable(pmc->perf_event);
}
@@ -484,6 +387,65 @@ static void kvm_pmu_perf_overflow_notify_vcpu(struct irq_work *work)
kvm_vcpu_kick(vcpu);
}
/*
* Perform an increment on any of the counters described in @mask,
* generating the overflow if required, and propagate it as a chained
* event if possible.
*/
static void kvm_pmu_counter_increment(struct kvm_vcpu *vcpu,
unsigned long mask, u32 event)
{
int i;
if (!(__vcpu_sys_reg(vcpu, PMCR_EL0) & ARMV8_PMU_PMCR_E))
return;
/* Weed out disabled counters */
mask &= __vcpu_sys_reg(vcpu, PMCNTENSET_EL0);
for_each_set_bit(i, &mask, ARMV8_PMU_CYCLE_IDX) {
u64 type, reg;
/* Filter on event type */
type = __vcpu_sys_reg(vcpu, PMEVTYPER0_EL0 + i);
type &= kvm_pmu_event_mask(vcpu->kvm);
if (type != event)
continue;
/* Increment this counter */
reg = __vcpu_sys_reg(vcpu, PMEVCNTR0_EL0 + i) + 1;
reg = lower_32_bits(reg);
__vcpu_sys_reg(vcpu, PMEVCNTR0_EL0 + i) = reg;
if (reg) /* No overflow? move on */
continue;
/* Mark overflow */
__vcpu_sys_reg(vcpu, PMOVSSET_EL0) |= BIT(i);
if (kvm_pmu_counter_can_chain(vcpu, i))
kvm_pmu_counter_increment(vcpu, BIT(i + 1),
ARMV8_PMUV3_PERFCTR_CHAIN);
}
}
/* Compute the sample period for a given counter value */
static u64 compute_period(struct kvm_vcpu *vcpu, u64 select_idx, u64 counter)
{
u64 val;
if (kvm_pmu_idx_is_64bit(vcpu, select_idx)) {
if (!kvm_pmu_idx_has_64bit_overflow(vcpu, select_idx))
val = -(counter & GENMASK(31, 0));
else
val = (-counter) & GENMASK(63, 0);
} else {
val = (-counter) & GENMASK(31, 0);
}
return val;
}
/**
* When the perf event overflows, set the overflow status and inform the vcpu.
*/
@@ -503,10 +465,7 @@ static void kvm_pmu_perf_overflow(struct perf_event *perf_event,
* Reset the sample period to the architectural limit,
* i.e. the point where the counter overflows.
*/
period = -(local64_read(&perf_event->count));
if (!kvm_pmu_idx_is_64bit(vcpu, pmc->idx))
period &= GENMASK(31, 0);
period = compute_period(vcpu, idx, local64_read(&perf_event->count));
local64_set(&perf_event->hw.period_left, 0);
perf_event->attr.sample_period = period;
@@ -514,6 +473,10 @@ static void kvm_pmu_perf_overflow(struct perf_event *perf_event,
__vcpu_sys_reg(vcpu, PMOVSSET_EL0) |= BIT(idx);
if (kvm_pmu_counter_can_chain(vcpu, idx))
kvm_pmu_counter_increment(vcpu, BIT(idx + 1),
ARMV8_PMUV3_PERFCTR_CHAIN);
if (kvm_pmu_overflow_status(vcpu)) {
kvm_make_request(KVM_REQ_IRQ_PENDING, vcpu);
@@ -533,50 +496,7 @@ static void kvm_pmu_perf_overflow(struct perf_event *perf_event,
*/
void kvm_pmu_software_increment(struct kvm_vcpu *vcpu, u64 val)
{
struct kvm_pmu *pmu = &vcpu->arch.pmu;
int i;
if (!kvm_vcpu_has_pmu(vcpu))
return;
if (!(__vcpu_sys_reg(vcpu, PMCR_EL0) & ARMV8_PMU_PMCR_E))
return;
/* Weed out disabled counters */
val &= __vcpu_sys_reg(vcpu, PMCNTENSET_EL0);
for (i = 0; i < ARMV8_PMU_CYCLE_IDX; i++) {
u64 type, reg;
if (!(val & BIT(i)))
continue;
/* PMSWINC only applies to ... SW_INC! */
type = __vcpu_sys_reg(vcpu, PMEVTYPER0_EL0 + i);
type &= kvm_pmu_event_mask(vcpu->kvm);
if (type != ARMV8_PMUV3_PERFCTR_SW_INCR)
continue;
/* increment this even SW_INC counter */
reg = __vcpu_sys_reg(vcpu, PMEVCNTR0_EL0 + i) + 1;
reg = lower_32_bits(reg);
__vcpu_sys_reg(vcpu, PMEVCNTR0_EL0 + i) = reg;
if (reg) /* no overflow on the low part */
continue;
if (kvm_pmu_pmc_is_chained(&pmu->pmc[i])) {
/* increment the high counter */
reg = __vcpu_sys_reg(vcpu, PMEVCNTR0_EL0 + i + 1) + 1;
reg = lower_32_bits(reg);
__vcpu_sys_reg(vcpu, PMEVCNTR0_EL0 + i + 1) = reg;
if (!reg) /* mark overflow on the high counter */
__vcpu_sys_reg(vcpu, PMOVSSET_EL0) |= BIT(i + 1);
} else {
/* mark overflow on low counter */
__vcpu_sys_reg(vcpu, PMOVSSET_EL0) |= BIT(i);
}
}
kvm_pmu_counter_increment(vcpu, val, ARMV8_PMUV3_PERFCTR_SW_INCR);
}
/**
@@ -591,6 +511,9 @@ void kvm_pmu_handle_pmcr(struct kvm_vcpu *vcpu, u64 val)
if (!kvm_vcpu_has_pmu(vcpu))
return;
/* The reset bits don't indicate any state, and shouldn't be saved. */
__vcpu_sys_reg(vcpu, PMCR_EL0) = val & ~(ARMV8_PMU_PMCR_C | ARMV8_PMU_PMCR_P);
if (val & ARMV8_PMU_PMCR_E) {
kvm_pmu_enable_counter_mask(vcpu,
__vcpu_sys_reg(vcpu, PMCNTENSET_EL0));
@@ -626,18 +549,11 @@ static void kvm_pmu_create_perf_event(struct kvm_vcpu *vcpu, u64 select_idx)
{
struct arm_pmu *arm_pmu = vcpu->kvm->arch.arm_pmu;
struct kvm_pmu *pmu = &vcpu->arch.pmu;
struct kvm_pmc *pmc;
struct kvm_pmc *pmc = &pmu->pmc[select_idx];
struct perf_event *event;
struct perf_event_attr attr;
u64 eventsel, counter, reg, data;
/*
* For chained counters the event type and filtering attributes are
* obtained from the low/even counter. We also use this counter to
* determine if the event is enabled/disabled.
*/
pmc = kvm_pmu_get_canonical_pmc(&pmu->pmc[select_idx]);
reg = (pmc->idx == ARMV8_PMU_CYCLE_IDX)
? PMCCFILTR_EL0 : PMEVTYPER0_EL0 + pmc->idx;
data = __vcpu_sys_reg(vcpu, reg);
@@ -648,8 +564,12 @@ static void kvm_pmu_create_perf_event(struct kvm_vcpu *vcpu, u64 select_idx)
else
eventsel = data & kvm_pmu_event_mask(vcpu->kvm);
/* Software increment event doesn't need to be backed by a perf event */
if (eventsel == ARMV8_PMUV3_PERFCTR_SW_INCR)
/*
* Neither SW increment nor chained events need to be backed
* by a perf event.
*/
if (eventsel == ARMV8_PMUV3_PERFCTR_SW_INCR ||
eventsel == ARMV8_PMUV3_PERFCTR_CHAIN)
return;
/*
@@ -671,30 +591,20 @@ static void kvm_pmu_create_perf_event(struct kvm_vcpu *vcpu, u64 select_idx)
attr.exclude_host = 1; /* Don't count host events */
attr.config = eventsel;
counter = kvm_pmu_get_pair_counter_value(vcpu, pmc);
counter = kvm_pmu_get_counter_value(vcpu, select_idx);
if (kvm_pmu_pmc_is_chained(pmc)) {
/**
* The initial sample period (overflow count) of an event. For
* chained counters we only support overflow interrupts on the
* high counter.
*/
attr.sample_period = (-counter) & GENMASK(63, 0);
attr.config1 |= PERF_ATTR_CFG1_KVM_PMU_CHAINED;
/*
* If counting with a 64bit counter, advertise it to the perf
* code, carefully dealing with the initial sample period
* which also depends on the overflow.
*/
if (kvm_pmu_idx_is_64bit(vcpu, select_idx))
attr.config1 |= PERF_ATTR_CFG1_COUNTER_64BIT;
event = perf_event_create_kernel_counter(&attr, -1, current,
kvm_pmu_perf_overflow,
pmc + 1);
} else {
/* The initial sample period (overflow count) of an event. */
if (kvm_pmu_idx_is_64bit(vcpu, pmc->idx))
attr.sample_period = (-counter) & GENMASK(63, 0);
else
attr.sample_period = (-counter) & GENMASK(31, 0);
attr.sample_period = compute_period(vcpu, select_idx, counter);
event = perf_event_create_kernel_counter(&attr, -1, current,
event = perf_event_create_kernel_counter(&attr, -1, current,
kvm_pmu_perf_overflow, pmc);
}
if (IS_ERR(event)) {
pr_err_once("kvm: pmu event creation failed %ld\n",
@@ -705,41 +615,6 @@ static void kvm_pmu_create_perf_event(struct kvm_vcpu *vcpu, u64 select_idx)
pmc->perf_event = event;
}
/**
* kvm_pmu_update_pmc_chained - update chained bitmap
* @vcpu: The vcpu pointer
* @select_idx: The number of selected counter
*
* Update the chained bitmap based on the event type written in the
* typer register and the enable state of the odd register.
*/
static void kvm_pmu_update_pmc_chained(struct kvm_vcpu *vcpu, u64 select_idx)
{
struct kvm_pmu *pmu = &vcpu->arch.pmu;
struct kvm_pmc *pmc = &pmu->pmc[select_idx], *canonical_pmc;
bool new_state, old_state;
old_state = kvm_pmu_pmc_is_chained(pmc);
new_state = kvm_pmu_idx_has_chain_evtype(vcpu, pmc->idx) &&
kvm_pmu_counter_is_enabled(vcpu, pmc->idx | 0x1);
if (old_state == new_state)
return;
canonical_pmc = kvm_pmu_get_canonical_pmc(pmc);
kvm_pmu_stop_counter(vcpu, canonical_pmc);
if (new_state) {
/*
* During promotion from !chained to chained we must ensure
* the adjacent counter is stopped and its event destroyed
*/
kvm_pmu_stop_counter(vcpu, kvm_pmu_get_alternate_pmc(pmc));
set_bit(pmc->idx >> 1, vcpu->arch.pmu.chained);
return;
}
clear_bit(pmc->idx >> 1, vcpu->arch.pmu.chained);
}
/**
* kvm_pmu_set_counter_event_type - set selected counter to monitor some event
* @vcpu: The vcpu pointer
@@ -767,7 +642,6 @@ void kvm_pmu_set_counter_event_type(struct kvm_vcpu *vcpu, u64 data,
__vcpu_sys_reg(vcpu, reg) = data & mask;
kvm_pmu_update_pmc_chained(vcpu, select_idx);
kvm_pmu_create_perf_event(vcpu, select_idx);
}

View File

@@ -665,13 +665,15 @@ static bool access_pmcr(struct kvm_vcpu *vcpu, struct sys_reg_params *p,
return false;
if (p->is_write) {
/* Only update writeable bits of PMCR */
/*
* Only update writeable bits of PMCR (continuing into
* kvm_pmu_handle_pmcr() as well)
*/
val = __vcpu_sys_reg(vcpu, PMCR_EL0);
val &= ~ARMV8_PMU_PMCR_MASK;
val |= p->regval & ARMV8_PMU_PMCR_MASK;
if (!kvm_supports_32bit_el0())
val |= ARMV8_PMU_PMCR_LC;
__vcpu_sys_reg(vcpu, PMCR_EL0) = val;
kvm_pmu_handle_pmcr(vcpu, val);
} else {
/* PMCR.P & PMCR.C are RAZ */

View File

@@ -554,6 +554,9 @@ static int __kprobes do_page_fault(unsigned long far, unsigned long esr,
unsigned long vm_flags;
unsigned int mm_flags = FAULT_FLAG_DEFAULT;
unsigned long addr = untagged_addr(far);
#ifdef CONFIG_PER_VMA_LOCK
struct vm_area_struct *vma;
#endif
if (kprobe_page_fault(regs, esr))
return 0;
@@ -611,6 +614,36 @@ static int __kprobes do_page_fault(unsigned long far, unsigned long esr,
perf_sw_event(PERF_COUNT_SW_PAGE_FAULTS, 1, regs, addr);
#ifdef CONFIG_PER_VMA_LOCK
if (!(mm_flags & FAULT_FLAG_USER))
goto lock_mmap;
vma = lock_vma_under_rcu(mm, addr);
if (!vma)
goto lock_mmap;
if (!(vma->vm_flags & vm_flags)) {
vma_end_read(vma);
goto lock_mmap;
}
fault = handle_mm_fault(vma, addr & PAGE_MASK,
mm_flags | FAULT_FLAG_VMA_LOCK, regs);
vma_end_read(vma);
if (!(fault & VM_FAULT_RETRY)) {
count_vm_vma_lock_event(VMA_LOCK_SUCCESS);
goto done;
}
count_vm_vma_lock_event(VMA_LOCK_RETRY);
/* Quick path to respond to signals */
if (fault_signal_pending(fault, regs)) {
if (!user_mode(regs))
goto no_context;
return 0;
}
lock_mmap:
#endif /* CONFIG_PER_VMA_LOCK */
/*
* As per x86, we may deadlock here. However, since the kernel only
* validly references user space from well defined areas of the code,
@@ -654,6 +687,9 @@ retry:
}
mmap_read_unlock(mm);
#ifdef CONFIG_PER_VMA_LOCK
done:
#endif
/*
* Handle the "normal" (no error) case first.
*/

View File

@@ -24,6 +24,7 @@
#include <linux/mm.h>
#include <linux/vmalloc.h>
#include <linux/set_memory.h>
#include <linux/kfence.h>
#include <asm/barrier.h>
#include <asm/cputype.h>
@@ -38,6 +39,7 @@
#include <asm/ptdump.h>
#include <asm/tlbflush.h>
#include <asm/pgalloc.h>
#include <asm/kfence.h>
#define NO_BLOCK_MAPPINGS BIT(0)
#define NO_CONT_MAPPINGS BIT(1)
@@ -521,12 +523,67 @@ static int __init enable_crash_mem_map(char *arg)
}
early_param("crashkernel", enable_crash_mem_map);
#ifdef CONFIG_KFENCE
bool __ro_after_init kfence_early_init = !!CONFIG_KFENCE_SAMPLE_INTERVAL;
/* early_param() will be parsed before map_mem() below. */
static int __init parse_kfence_early_init(char *arg)
{
int val;
if (get_option(&arg, &val))
kfence_early_init = !!val;
return 0;
}
early_param("kfence.sample_interval", parse_kfence_early_init);
static phys_addr_t __init arm64_kfence_alloc_pool(void)
{
phys_addr_t kfence_pool;
if (!kfence_early_init)
return 0;
kfence_pool = memblock_phys_alloc(KFENCE_POOL_SIZE, PAGE_SIZE);
if (!kfence_pool) {
pr_err("failed to allocate kfence pool\n");
kfence_early_init = false;
return 0;
}
/* Temporarily mark as NOMAP. */
memblock_mark_nomap(kfence_pool, KFENCE_POOL_SIZE);
return kfence_pool;
}
static void __init arm64_kfence_map_pool(phys_addr_t kfence_pool, pgd_t *pgdp)
{
if (!kfence_pool)
return;
/* KFENCE pool needs page-level mapping. */
__map_memblock(pgdp, kfence_pool, kfence_pool + KFENCE_POOL_SIZE,
pgprot_tagged(PAGE_KERNEL),
NO_BLOCK_MAPPINGS | NO_CONT_MAPPINGS);
memblock_clear_nomap(kfence_pool, KFENCE_POOL_SIZE);
__kfence_pool = phys_to_virt(kfence_pool);
}
#else /* CONFIG_KFENCE */
static inline phys_addr_t arm64_kfence_alloc_pool(void) { return 0; }
static inline void arm64_kfence_map_pool(phys_addr_t kfence_pool, pgd_t *pgdp) { }
#endif /* CONFIG_KFENCE */
static void __init map_mem(pgd_t *pgdp)
{
static const u64 direct_map_end = _PAGE_END(VA_BITS_MIN);
phys_addr_t kernel_start = __pa_symbol(_stext);
phys_addr_t kernel_end = __pa_symbol(__init_begin);
phys_addr_t start, end;
phys_addr_t early_kfence_pool;
int flags = NO_EXEC_MAPPINGS;
u64 i;
@@ -539,6 +596,8 @@ static void __init map_mem(pgd_t *pgdp)
*/
BUILD_BUG_ON(pgd_index(direct_map_end - 1) == pgd_index(direct_map_end));
early_kfence_pool = arm64_kfence_alloc_pool();
if (can_set_direct_map())
flags |= NO_BLOCK_MAPPINGS | NO_CONT_MAPPINGS;
@@ -604,6 +663,8 @@ static void __init map_mem(pgd_t *pgdp)
}
}
#endif
arm64_kfence_map_pool(early_kfence_pool, pgdp);
}
void mark_rodata_ro(void)

View File

@@ -46,21 +46,19 @@ int mte_save_tags(struct page *page)
return 0;
}
bool mte_restore_tags(swp_entry_t entry, struct page *page)
void mte_restore_tags(swp_entry_t entry, struct page *page)
{
void *tags = xa_load(&mte_pages, entry.val);
if (!tags)
return false;
return;
/*
* Test PG_mte_tagged again in case it was racing with another
* set_pte_at().
* Test PG_mte_tagged in case the tags were restored before
* (e.g. CoW pages).
*/
if (!test_and_set_bit(PG_mte_tagged, &page->flags))
mte_restore_page_tags(page_address(page), tags);
return true;
}
void mte_invalidate_tags(int type, pgoff_t offset)

View File

@@ -11,6 +11,7 @@
#include <asm/cacheflush.h>
#include <asm/set_memory.h>
#include <asm/tlbflush.h>
#include <asm/kfence.h>
struct page_change_data {
pgprot_t set_mask;
@@ -22,12 +23,14 @@ bool rodata_full __ro_after_init = IS_ENABLED(CONFIG_RODATA_FULL_DEFAULT_ENABLED
bool can_set_direct_map(void)
{
/*
* rodata_full, DEBUG_PAGEALLOC and KFENCE require linear map to be
* rodata_full and DEBUG_PAGEALLOC require linear map to be
* mapped at page granularity, so that it is possible to
* protect/unprotect single pages.
*
* KFENCE pool requires page-granular mapping if initialized late.
*/
return (rodata_enabled && rodata_full) || debug_pagealloc_enabled() ||
IS_ENABLED(CONFIG_KFENCE);
arm64_kfence_can_set_direct_map();
}
static int change_page_range(pte_t *ptep, unsigned long addr, void *data)

View File

@@ -82,6 +82,27 @@ WORKAROUND_CAVIUM_TX2_219_TVM
WORKAROUND_CLEAN_CACHE
WORKAROUND_DEVICE_LOAD_ACQUIRE
WORKAROUND_NVIDIA_CARMEL_CNP
WORKAROUND_NXP_ERR050104
WORKAROUND_QCOM_FALKOR_E1003
WORKAROUND_REPEAT_TLBI
WORKAROUND_SPECULATIVE_AT
ANDROID_KABI_RESERVE_01
ANDROID_KABI_RESERVE_02
ANDROID_KABI_RESERVE_03
ANDROID_KABI_RESERVE_04
ANDROID_KABI_RESERVE_05
ANDROID_KABI_RESERVE_06
ANDROID_KABI_RESERVE_07
ANDROID_KABI_RESERVE_08
ANDROID_KABI_RESERVE_09
ANDROID_KABI_RESERVE_10
ANDROID_KABI_RESERVE_11
ANDROID_KABI_RESERVE_12
ANDROID_KABI_RESERVE_13
ANDROID_KABI_RESERVE_14
ANDROID_KABI_RESERVE_15
ANDROID_KABI_RESERVE_16
ANDROID_KABI_RESERVE_17
ANDROID_KABI_RESERVE_18
ANDROID_KABI_RESERVE_19
ANDROID_KABI_RESERVE_20

View File

@@ -109,7 +109,7 @@ ia64_init_addr_space (void)
vma_set_anonymous(vma);
vma->vm_start = current->thread.rbs_bot & PAGE_MASK;
vma->vm_end = vma->vm_start + PAGE_SIZE;
vma->vm_flags = VM_DATA_DEFAULT_FLAGS|VM_GROWSUP|VM_ACCOUNT;
vm_flags_init(vma, VM_DATA_DEFAULT_FLAGS|VM_GROWSUP|VM_ACCOUNT);
vma->vm_page_prot = vm_get_page_prot(vma->vm_flags);
mmap_write_lock(current->mm);
if (insert_vm_struct(current->mm, vma)) {
@@ -127,8 +127,8 @@ ia64_init_addr_space (void)
vma_set_anonymous(vma);
vma->vm_end = PAGE_SIZE;
vma->vm_page_prot = __pgprot(pgprot_val(PAGE_READONLY) | _PAGE_MA_NAT);
vma->vm_flags = VM_READ | VM_MAYREAD | VM_IO |
VM_DONTEXPAND | VM_DONTDUMP;
vm_flags_init(vma, VM_READ | VM_MAYREAD | VM_IO |
VM_DONTEXPAND | VM_DONTDUMP);
mmap_write_lock(current->mm);
if (insert_vm_struct(current->mm, vma)) {
mmap_write_unlock(current->mm);
@@ -272,7 +272,7 @@ static int __init gate_vma_init(void)
vma_init(&gate_vma, NULL);
gate_vma.vm_start = FIXADDR_USER_START;
gate_vma.vm_end = FIXADDR_USER_END;
gate_vma.vm_flags = VM_READ | VM_MAYREAD | VM_EXEC | VM_MAYEXEC;
vm_flags_init(&gate_vma, VM_READ | VM_MAYREAD | VM_EXEC | VM_MAYEXEC);
gate_vma.vm_page_prot = __pgprot(__ACCESS_BITS | _PAGE_PL_3 | _PAGE_AR_RX);
return 0;

View File

@@ -42,6 +42,7 @@
#define cpu_has_fpu cpu_opt(LOONGARCH_CPU_FPU)
#define cpu_has_lsx cpu_opt(LOONGARCH_CPU_LSX)
#define cpu_has_lasx cpu_opt(LOONGARCH_CPU_LASX)
#define cpu_has_crc32 cpu_opt(LOONGARCH_CPU_CRC32)
#define cpu_has_complex cpu_opt(LOONGARCH_CPU_COMPLEX)
#define cpu_has_crypto cpu_opt(LOONGARCH_CPU_CRYPTO)
#define cpu_has_lvz cpu_opt(LOONGARCH_CPU_LVZ)

View File

@@ -78,25 +78,26 @@ enum cpu_type_enum {
#define CPU_FEATURE_FPU 3 /* CPU has FPU */
#define CPU_FEATURE_LSX 4 /* CPU has LSX (128-bit SIMD) */
#define CPU_FEATURE_LASX 5 /* CPU has LASX (256-bit SIMD) */
#define CPU_FEATURE_COMPLEX 6 /* CPU has Complex instructions */
#define CPU_FEATURE_CRYPTO 7 /* CPU has Crypto instructions */
#define CPU_FEATURE_LVZ 8 /* CPU has Virtualization extension */
#define CPU_FEATURE_LBT_X86 9 /* CPU has X86 Binary Translation */
#define CPU_FEATURE_LBT_ARM 10 /* CPU has ARM Binary Translation */
#define CPU_FEATURE_LBT_MIPS 11 /* CPU has MIPS Binary Translation */
#define CPU_FEATURE_TLB 12 /* CPU has TLB */
#define CPU_FEATURE_CSR 13 /* CPU has CSR */
#define CPU_FEATURE_WATCH 14 /* CPU has watchpoint registers */
#define CPU_FEATURE_VINT 15 /* CPU has vectored interrupts */
#define CPU_FEATURE_CSRIPI 16 /* CPU has CSR-IPI */
#define CPU_FEATURE_EXTIOI 17 /* CPU has EXT-IOI */
#define CPU_FEATURE_PREFETCH 18 /* CPU has prefetch instructions */
#define CPU_FEATURE_PMP 19 /* CPU has perfermance counter */
#define CPU_FEATURE_SCALEFREQ 20 /* CPU supports cpufreq scaling */
#define CPU_FEATURE_FLATMODE 21 /* CPU has flat mode */
#define CPU_FEATURE_EIODECODE 22 /* CPU has EXTIOI interrupt pin decode mode */
#define CPU_FEATURE_GUESTID 23 /* CPU has GuestID feature */
#define CPU_FEATURE_HYPERVISOR 24 /* CPU has hypervisor (running in VM) */
#define CPU_FEATURE_CRC32 6 /* CPU has CRC32 instructions */
#define CPU_FEATURE_COMPLEX 7 /* CPU has Complex instructions */
#define CPU_FEATURE_CRYPTO 8 /* CPU has Crypto instructions */
#define CPU_FEATURE_LVZ 9 /* CPU has Virtualization extension */
#define CPU_FEATURE_LBT_X86 10 /* CPU has X86 Binary Translation */
#define CPU_FEATURE_LBT_ARM 11 /* CPU has ARM Binary Translation */
#define CPU_FEATURE_LBT_MIPS 12 /* CPU has MIPS Binary Translation */
#define CPU_FEATURE_TLB 13 /* CPU has TLB */
#define CPU_FEATURE_CSR 14 /* CPU has CSR */
#define CPU_FEATURE_WATCH 15 /* CPU has watchpoint registers */
#define CPU_FEATURE_VINT 16 /* CPU has vectored interrupts */
#define CPU_FEATURE_CSRIPI 17 /* CPU has CSR-IPI */
#define CPU_FEATURE_EXTIOI 18 /* CPU has EXT-IOI */
#define CPU_FEATURE_PREFETCH 19 /* CPU has prefetch instructions */
#define CPU_FEATURE_PMP 20 /* CPU has perfermance counter */
#define CPU_FEATURE_SCALEFREQ 21 /* CPU supports cpufreq scaling */
#define CPU_FEATURE_FLATMODE 22 /* CPU has flat mode */
#define CPU_FEATURE_EIODECODE 23 /* CPU has EXTIOI interrupt pin decode mode */
#define CPU_FEATURE_GUESTID 24 /* CPU has GuestID feature */
#define CPU_FEATURE_HYPERVISOR 25 /* CPU has hypervisor (running in VM) */
#define LOONGARCH_CPU_CPUCFG BIT_ULL(CPU_FEATURE_CPUCFG)
#define LOONGARCH_CPU_LAM BIT_ULL(CPU_FEATURE_LAM)
@@ -104,6 +105,7 @@ enum cpu_type_enum {
#define LOONGARCH_CPU_FPU BIT_ULL(CPU_FEATURE_FPU)
#define LOONGARCH_CPU_LSX BIT_ULL(CPU_FEATURE_LSX)
#define LOONGARCH_CPU_LASX BIT_ULL(CPU_FEATURE_LASX)
#define LOONGARCH_CPU_CRC32 BIT_ULL(CPU_FEATURE_CRC32)
#define LOONGARCH_CPU_COMPLEX BIT_ULL(CPU_FEATURE_COMPLEX)
#define LOONGARCH_CPU_CRYPTO BIT_ULL(CPU_FEATURE_CRYPTO)
#define LOONGARCH_CPU_LVZ BIT_ULL(CPU_FEATURE_LVZ)

View File

@@ -117,7 +117,7 @@ static inline u32 read_cpucfg(u32 reg)
#define CPUCFG1_EP BIT(22)
#define CPUCFG1_RPLV BIT(23)
#define CPUCFG1_HUGEPG BIT(24)
#define CPUCFG1_IOCSRBRD BIT(25)
#define CPUCFG1_CRC32 BIT(25)
#define CPUCFG1_MSGINT BIT(26)
#define LOONGARCH_CPUCFG2 0x2

View File

@@ -149,7 +149,7 @@ static inline void tlb_flush(struct mmu_gather *tlb)
struct vm_area_struct vma;
vma.vm_mm = tlb->mm;
vma.vm_flags = 0;
vm_flags_init(&vma, 0);
if (tlb->fullmm) {
flush_tlb_mm(tlb->mm);
return;

View File

@@ -60,7 +60,7 @@ static inline void set_elf_platform(int cpu, const char *plat)
/* MAP BASE */
unsigned long vm_map_base;
EXPORT_SYMBOL_GPL(vm_map_base);
EXPORT_SYMBOL(vm_map_base);
static void cpu_probe_addrbits(struct cpuinfo_loongarch *c)
{
@@ -94,13 +94,18 @@ static void cpu_probe_common(struct cpuinfo_loongarch *c)
c->options = LOONGARCH_CPU_CPUCFG | LOONGARCH_CPU_CSR |
LOONGARCH_CPU_TLB | LOONGARCH_CPU_VINT | LOONGARCH_CPU_WATCH;
elf_hwcap = HWCAP_LOONGARCH_CPUCFG | HWCAP_LOONGARCH_CRC32;
elf_hwcap = HWCAP_LOONGARCH_CPUCFG;
config = read_cpucfg(LOONGARCH_CPUCFG1);
if (config & CPUCFG1_UAL) {
c->options |= LOONGARCH_CPU_UAL;
elf_hwcap |= HWCAP_LOONGARCH_UAL;
}
if (config & CPUCFG1_CRC32) {
c->options |= LOONGARCH_CPU_CRC32;
elf_hwcap |= HWCAP_LOONGARCH_CRC32;
}
config = read_cpucfg(LOONGARCH_CPUCFG2);
if (config & CPUCFG2_LAM) {

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