mirror of
https://github.com/nxp-imx/linux-imx.git
synced 2025-07-06 17:35:20 +02:00
Merge branch 'lf-6.6.y_android' into dev_automotive-15.0_1.3.0
This commit is contained in:
commit
d4c97505f5
94
BUILD.bazel
94
BUILD.bazel
|
@ -27,7 +27,12 @@ load(
|
||||||
"merged_kernel_uapi_headers",
|
"merged_kernel_uapi_headers",
|
||||||
)
|
)
|
||||||
load(":abi.bzl", "cc_binary_with_abi")
|
load(":abi.bzl", "cc_binary_with_abi")
|
||||||
load(":modules.bzl", "get_gki_modules_list", "get_kunit_modules_list")
|
load(
|
||||||
|
":modules.bzl",
|
||||||
|
"get_gki_modules_list",
|
||||||
|
"get_gki_protected_modules_list",
|
||||||
|
"get_kunit_modules_list",
|
||||||
|
)
|
||||||
load(":imx.bzl", "define_imx")
|
load(":imx.bzl", "define_imx")
|
||||||
define_imx()
|
define_imx()
|
||||||
|
|
||||||
|
@ -95,6 +100,14 @@ write_file(
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
|
|
||||||
|
write_file(
|
||||||
|
name = "gki_aarch64_protected_modules",
|
||||||
|
out = "android/gki_aarch64_protected_modules",
|
||||||
|
content = get_gki_protected_modules_list("arm64") + [
|
||||||
|
"", # Ensure new line at the end.
|
||||||
|
],
|
||||||
|
)
|
||||||
|
|
||||||
filegroup(
|
filegroup(
|
||||||
name = "aarch64_additional_kmi_symbol_lists",
|
name = "aarch64_additional_kmi_symbol_lists",
|
||||||
srcs = [
|
srcs = [
|
||||||
|
@ -137,7 +150,7 @@ define_common_kernels(target_configs = {
|
||||||
"additional_kmi_symbol_lists": [":aarch64_additional_kmi_symbol_lists"],
|
"additional_kmi_symbol_lists": [":aarch64_additional_kmi_symbol_lists"],
|
||||||
"trim_nonlisted_kmi": True,
|
"trim_nonlisted_kmi": True,
|
||||||
"protected_exports_list": "android/abi_gki_protected_exports_aarch64",
|
"protected_exports_list": "android/abi_gki_protected_exports_aarch64",
|
||||||
"protected_modules_list": "android/gki_aarch64_protected_modules",
|
"protected_modules_list": ":gki_aarch64_protected_modules",
|
||||||
"module_implicit_outs": get_gki_modules_list("arm64") + get_kunit_modules_list("arm64"),
|
"module_implicit_outs": get_gki_modules_list("arm64") + get_kunit_modules_list("arm64"),
|
||||||
"make_goals": _GKI_AARCH64_MAKE_GOALS,
|
"make_goals": _GKI_AARCH64_MAKE_GOALS,
|
||||||
"ddk_headers_archive": ":kernel_aarch64_ddk_headers_archive",
|
"ddk_headers_archive": ":kernel_aarch64_ddk_headers_archive",
|
||||||
|
@ -152,7 +165,7 @@ define_common_kernels(target_configs = {
|
||||||
"additional_kmi_symbol_lists": [":aarch64_additional_kmi_symbol_lists"],
|
"additional_kmi_symbol_lists": [":aarch64_additional_kmi_symbol_lists"],
|
||||||
"trim_nonlisted_kmi": True,
|
"trim_nonlisted_kmi": True,
|
||||||
"protected_exports_list": "android/abi_gki_protected_exports_aarch64",
|
"protected_exports_list": "android/abi_gki_protected_exports_aarch64",
|
||||||
"protected_modules_list": "android/gki_aarch64_protected_modules",
|
"protected_modules_list": ":gki_aarch64_protected_modules",
|
||||||
"module_implicit_outs": get_gki_modules_list("arm64") + get_kunit_modules_list("arm64"),
|
"module_implicit_outs": get_gki_modules_list("arm64") + get_kunit_modules_list("arm64"),
|
||||||
"make_goals": _GKI_AARCH64_MAKE_GOALS,
|
"make_goals": _GKI_AARCH64_MAKE_GOALS,
|
||||||
"ddk_headers_archive": ":kernel_aarch64_ddk_headers_archive",
|
"ddk_headers_archive": ":kernel_aarch64_ddk_headers_archive",
|
||||||
|
@ -626,7 +639,6 @@ _ROCKPI4_MODULE_OUTS = [
|
||||||
"drivers/thermal/rockchip_thermal.ko",
|
"drivers/thermal/rockchip_thermal.ko",
|
||||||
"drivers/usb/host/ohci-hcd.ko",
|
"drivers/usb/host/ohci-hcd.ko",
|
||||||
"drivers/usb/host/ohci-platform.ko",
|
"drivers/usb/host/ohci-platform.ko",
|
||||||
"drivers/virtio/virtio_pci_legacy_dev.ko",
|
|
||||||
"net/core/failover.ko",
|
"net/core/failover.ko",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
@ -935,8 +947,10 @@ ddk_headers(
|
||||||
"drivers/usb/core/usb.h",
|
"drivers/usb/core/usb.h",
|
||||||
"drivers/usb/host/pci-quirks.h",
|
"drivers/usb/host/pci-quirks.h",
|
||||||
"drivers/usb/host/xhci.h",
|
"drivers/usb/host/xhci.h",
|
||||||
|
"drivers/usb/host/xhci-caps.h",
|
||||||
"drivers/usb/host/xhci-ext-caps.h",
|
"drivers/usb/host/xhci-ext-caps.h",
|
||||||
"drivers/usb/host/xhci-plat.h",
|
"drivers/usb/host/xhci-plat.h",
|
||||||
|
"drivers/usb/host/xhci-port.h",
|
||||||
],
|
],
|
||||||
linux_includes = [
|
linux_includes = [
|
||||||
"drivers/usb",
|
"drivers/usb",
|
||||||
|
@ -950,8 +964,11 @@ ddk_headers(
|
||||||
ddk_headers(
|
ddk_headers(
|
||||||
name = "all_headers_allowlist_aarch64",
|
name = "all_headers_allowlist_aarch64",
|
||||||
hdrs = [
|
hdrs = [
|
||||||
|
"drivers/dma-buf/heaps/deferred-free-helper.h",
|
||||||
|
"drivers/extcon/extcon.h",
|
||||||
"drivers/thermal/thermal_core.h",
|
"drivers/thermal/thermal_core.h",
|
||||||
"drivers/thermal/thermal_netlink.h",
|
"drivers/thermal/thermal_netlink.h",
|
||||||
|
"drivers/usb/dwc3/core.h",
|
||||||
"sound/usb/card.h",
|
"sound/usb/card.h",
|
||||||
"sound/usb/usbaudio.h",
|
"sound/usb/usbaudio.h",
|
||||||
":all_headers_allowlist_aarch64_globs",
|
":all_headers_allowlist_aarch64_globs",
|
||||||
|
@ -964,7 +981,10 @@ ddk_headers(
|
||||||
linux_includes = [
|
linux_includes = [
|
||||||
"arch/arm64/include",
|
"arch/arm64/include",
|
||||||
"arch/arm64/include/uapi",
|
"arch/arm64/include/uapi",
|
||||||
|
"drivers/dma-buf",
|
||||||
|
"drivers/extcon",
|
||||||
"drivers/thermal",
|
"drivers/thermal",
|
||||||
|
"drivers/usb",
|
||||||
"sound/usb",
|
"sound/usb",
|
||||||
"include",
|
"include",
|
||||||
"include/uapi",
|
"include/uapi",
|
||||||
|
@ -1067,34 +1087,10 @@ _KSELFTEST_COPTS = [
|
||||||
"-pthread",
|
"-pthread",
|
||||||
"-std=gnu99",
|
"-std=gnu99",
|
||||||
] + select({
|
] + select({
|
||||||
":arm": ["-mcpu=cortex-a8"],
|
"//build/kernel/kleaf/platforms/config_settings:android_arm": ["-mcpu=cortex-a8"],
|
||||||
"//conditions:default": [],
|
"//conditions:default": [],
|
||||||
})
|
})
|
||||||
|
|
||||||
config_setting(
|
|
||||||
name = "x86_64",
|
|
||||||
values = {"platforms": "//build/kernel/kleaf/impl:android_x86_64"},
|
|
||||||
visibility = ["//visibility:private"],
|
|
||||||
)
|
|
||||||
|
|
||||||
config_setting(
|
|
||||||
name = "i386",
|
|
||||||
values = {"platforms": "//build/kernel/kleaf/impl:android_i386"},
|
|
||||||
visibility = ["//visibility:private"],
|
|
||||||
)
|
|
||||||
|
|
||||||
config_setting(
|
|
||||||
name = "arm64",
|
|
||||||
values = {"platforms": "//build/kernel/kleaf/impl:android_arm64"},
|
|
||||||
visibility = ["//visibility:private"],
|
|
||||||
)
|
|
||||||
|
|
||||||
config_setting(
|
|
||||||
name = "arm",
|
|
||||||
values = {"platforms": "//build/kernel/kleaf/impl:android_arm"},
|
|
||||||
visibility = ["//visibility:private"],
|
|
||||||
)
|
|
||||||
|
|
||||||
cc_library(
|
cc_library(
|
||||||
name = "kselftest_headers_lib",
|
name = "kselftest_headers_lib",
|
||||||
hdrs = glob(["tools/testing/selftests/*.h"]),
|
hdrs = glob(["tools/testing/selftests/*.h"]),
|
||||||
|
@ -1118,9 +1114,9 @@ cc_binary_with_abi(
|
||||||
cc_binary_with_abi(
|
cc_binary_with_abi(
|
||||||
name = "kselftest_breakpoints_breakpoint_test",
|
name = "kselftest_breakpoints_breakpoint_test",
|
||||||
srcs = select({
|
srcs = select({
|
||||||
":x86_64": ["tools/testing/selftests/breakpoints/breakpoint_test.c"],
|
"//build/kernel/kleaf/platforms/config_settings:android_x86_64": ["tools/testing/selftests/breakpoints/breakpoint_test.c"],
|
||||||
":i386": ["tools/testing/selftests/breakpoints/breakpoint_test.c"],
|
"//build/kernel/kleaf/platforms/config_settings:android_i386": ["tools/testing/selftests/breakpoints/breakpoint_test.c"],
|
||||||
":arm64": ["tools/testing/selftests/breakpoints/breakpoint_test_arm64.c"],
|
"//build/kernel/kleaf/platforms/config_settings:android_arm64": ["tools/testing/selftests/breakpoints/breakpoint_test_arm64.c"],
|
||||||
"//conditions:default": [],
|
"//conditions:default": [],
|
||||||
}),
|
}),
|
||||||
copts = _KSELFTEST_COPTS,
|
copts = _KSELFTEST_COPTS,
|
||||||
|
@ -1392,6 +1388,28 @@ cc_binary_with_abi(
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
|
|
||||||
|
cc_library(
|
||||||
|
name = "kselftest_memfd",
|
||||||
|
srcs = ["tools/testing/selftests/memfd/common.c"],
|
||||||
|
hdrs = ["tools/testing/selftests/memfd/common.h"],
|
||||||
|
copts = _KSELFTEST_COPTS,
|
||||||
|
visibility = ["//visibility:private"],
|
||||||
|
deps = [
|
||||||
|
":kselftest_headers_lib",
|
||||||
|
],
|
||||||
|
)
|
||||||
|
|
||||||
|
cc_binary_with_abi(
|
||||||
|
name = "kselftest_memfd_test",
|
||||||
|
srcs = ["tools/testing/selftests/memfd/memfd_test.c"],
|
||||||
|
copts = _KSELFTEST_COPTS,
|
||||||
|
includes = ["tools/testing/selftests"],
|
||||||
|
path_prefix = _KSELFTEST_DIR,
|
||||||
|
target_compatible_with = ["@platforms//os:android"],
|
||||||
|
visibility = ["//visibility:private"],
|
||||||
|
deps = [":kselftest_memfd"],
|
||||||
|
)
|
||||||
|
|
||||||
cc_binary_with_abi(
|
cc_binary_with_abi(
|
||||||
name = "kselftest_mm_compaction_test",
|
name = "kselftest_mm_compaction_test",
|
||||||
srcs = ["tools/testing/selftests/mm/compaction_test.c"],
|
srcs = ["tools/testing/selftests/mm/compaction_test.c"],
|
||||||
|
@ -1634,7 +1652,7 @@ cc_binary_with_abi(
|
||||||
name = "kselftest_size_test_get_size",
|
name = "kselftest_size_test_get_size",
|
||||||
srcs = ["tools/testing/selftests/size/get_size.c"],
|
srcs = ["tools/testing/selftests/size/get_size.c"],
|
||||||
copts = _KSELFTEST_COPTS + select({
|
copts = _KSELFTEST_COPTS + select({
|
||||||
":x86_64": ["-mstackrealign"],
|
"//build/kernel/kleaf/platforms/config_settings:android_x86_64": ["-mstackrealign"],
|
||||||
"//conditions:default": [],
|
"//conditions:default": [],
|
||||||
}),
|
}),
|
||||||
includes = [
|
includes = [
|
||||||
|
@ -2074,10 +2092,10 @@ cc_binary_with_abi(
|
||||||
copy_file(
|
copy_file(
|
||||||
name = "kselftest_gen_config",
|
name = "kselftest_gen_config",
|
||||||
src = select({
|
src = select({
|
||||||
":x86_64": "tools/testing/selftests/android/config_x86_64.xml",
|
"//build/kernel/kleaf/platforms/config_settings:android_x86_64": "tools/testing/selftests/android/config_x86_64.xml",
|
||||||
":i386": "tools/testing/selftests/android/config_x86.xml",
|
"//build/kernel/kleaf/platforms/config_settings:android_i386": "tools/testing/selftests/android/config_x86.xml",
|
||||||
":arm64": "tools/testing/selftests/android/config_arm64.xml",
|
"//build/kernel/kleaf/platforms/config_settings:android_arm64": "tools/testing/selftests/android/config_arm64.xml",
|
||||||
":arm": "tools/testing/selftests/android/config_arm.xml",
|
"//build/kernel/kleaf/platforms/config_settings:android_arm": "tools/testing/selftests/android/config_arm.xml",
|
||||||
}),
|
}),
|
||||||
out = _KSELFTEST_DIR + "/selftests.config",
|
out = _KSELFTEST_DIR + "/selftests.config",
|
||||||
visibility = ["//visibility:private"],
|
visibility = ["//visibility:private"],
|
||||||
|
@ -2101,6 +2119,7 @@ android_filegroup(
|
||||||
":kselftest_futex_futex_wait_x86_64",
|
":kselftest_futex_futex_wait_x86_64",
|
||||||
":kselftest_gen_config",
|
":kselftest_gen_config",
|
||||||
":kselftest_kcmp_kcmp_test_x86_64",
|
":kselftest_kcmp_kcmp_test_x86_64",
|
||||||
|
":kselftest_memfd_test_x86_64",
|
||||||
":kselftest_mm_compaction_test_x86_64",
|
":kselftest_mm_compaction_test_x86_64",
|
||||||
":kselftest_mm_hugepage_mmap_x86_64",
|
":kselftest_mm_hugepage_mmap_x86_64",
|
||||||
":kselftest_mm_hugepage_shm_x86_64",
|
":kselftest_mm_hugepage_shm_x86_64",
|
||||||
|
@ -2305,6 +2324,7 @@ android_filegroup(
|
||||||
":kselftest_futex_futex_wait_wouldblock_arm64",
|
":kselftest_futex_futex_wait_wouldblock_arm64",
|
||||||
":kselftest_gen_config",
|
":kselftest_gen_config",
|
||||||
":kselftest_kcmp_kcmp_test_arm64",
|
":kselftest_kcmp_kcmp_test_arm64",
|
||||||
|
":kselftest_memfd_test_arm64",
|
||||||
":kselftest_mm_compaction_test_arm64",
|
":kselftest_mm_compaction_test_arm64",
|
||||||
":kselftest_mm_hugepage_mmap_arm64",
|
":kselftest_mm_hugepage_mmap_arm64",
|
||||||
":kselftest_mm_hugepage_shm_arm64",
|
":kselftest_mm_hugepage_shm_arm64",
|
||||||
|
|
|
@ -342,6 +342,70 @@ Description: Specific uncompressed frame descriptors
|
||||||
support
|
support
|
||||||
========================= =====================================
|
========================= =====================================
|
||||||
|
|
||||||
|
What: /config/usb-gadget/gadget/functions/uvc.name/streaming/framebased
|
||||||
|
Date: Sept 2024
|
||||||
|
KernelVersion: 5.15
|
||||||
|
Description: Framebased format descriptors
|
||||||
|
|
||||||
|
What: /config/usb-gadget/gadget/functions/uvc.name/streaming/framebased/name
|
||||||
|
Date: Sept 2024
|
||||||
|
KernelVersion: 5.15
|
||||||
|
Description: Specific framebased format descriptors
|
||||||
|
|
||||||
|
================== =======================================
|
||||||
|
bFormatIndex unique id for this format descriptor;
|
||||||
|
only defined after parent header is
|
||||||
|
linked into the streaming class;
|
||||||
|
read-only
|
||||||
|
bmaControls this format's data for bmaControls in
|
||||||
|
the streaming header
|
||||||
|
bmInterlaceFlags specifies interlace information,
|
||||||
|
read-only
|
||||||
|
bAspectRatioY the X dimension of the picture aspect
|
||||||
|
ratio, read-only
|
||||||
|
bAspectRatioX the Y dimension of the picture aspect
|
||||||
|
ratio, read-only
|
||||||
|
bDefaultFrameIndex optimum frame index for this stream
|
||||||
|
bBitsPerPixel number of bits per pixel used to
|
||||||
|
specify color in the decoded video
|
||||||
|
frame
|
||||||
|
guidFormat globally unique id used to identify
|
||||||
|
stream-encoding format
|
||||||
|
================== =======================================
|
||||||
|
|
||||||
|
What: /config/usb-gadget/gadget/functions/uvc.name/streaming/framebased/name/name
|
||||||
|
Date: Sept 2024
|
||||||
|
KernelVersion: 5.15
|
||||||
|
Description: Specific framebased frame descriptors
|
||||||
|
|
||||||
|
========================= =====================================
|
||||||
|
bFrameIndex unique id for this framedescriptor;
|
||||||
|
only defined after parent format is
|
||||||
|
linked into the streaming header;
|
||||||
|
read-only
|
||||||
|
dwFrameInterval indicates how frame interval can be
|
||||||
|
programmed; a number of values
|
||||||
|
separated by newline can be specified
|
||||||
|
dwDefaultFrameInterval the frame interval the device would
|
||||||
|
like to use as default
|
||||||
|
dwBytesPerLine Specifies the number of bytes per line
|
||||||
|
of video for packed fixed frame size
|
||||||
|
formats, allowing the receiver to
|
||||||
|
perform stride alignment of the video.
|
||||||
|
If the bVariableSize value (above) is
|
||||||
|
TRUE (1), or if the format does not
|
||||||
|
permit such alignment, this value shall
|
||||||
|
be set to zero (0).
|
||||||
|
dwMaxBitRate the maximum bit rate at the shortest
|
||||||
|
frame interval in bps
|
||||||
|
dwMinBitRate the minimum bit rate at the longest
|
||||||
|
frame interval in bps
|
||||||
|
wHeight height of decoded bitmap frame in px
|
||||||
|
wWidth width of decoded bitmam frame in px
|
||||||
|
bmCapabilities still image support, fixed frame-rate
|
||||||
|
support
|
||||||
|
========================= =====================================
|
||||||
|
|
||||||
What: /config/usb-gadget/gadget/functions/uvc.name/streaming/header
|
What: /config/usb-gadget/gadget/functions/uvc.name/streaming/header
|
||||||
Date: Dec 2014
|
Date: Dec 2014
|
||||||
KernelVersion: 4.0
|
KernelVersion: 4.0
|
||||||
|
|
|
@ -311,10 +311,13 @@ Description: Do background GC aggressively when set. Set to 0 by default.
|
||||||
GC approach and turns SSR mode on.
|
GC approach and turns SSR mode on.
|
||||||
gc urgent low(2): lowers the bar of checking I/O idling in
|
gc urgent low(2): lowers the bar of checking I/O idling in
|
||||||
order to process outstanding discard commands and GC a
|
order to process outstanding discard commands and GC a
|
||||||
little bit aggressively. uses cost benefit GC approach.
|
little bit aggressively. always uses cost benefit GC approach,
|
||||||
|
and will override age-threshold GC approach if ATGC is enabled
|
||||||
|
at the same time.
|
||||||
gc urgent mid(3): does GC forcibly in a period of given
|
gc urgent mid(3): does GC forcibly in a period of given
|
||||||
gc_urgent_sleep_time and executes a mid level of I/O idling check.
|
gc_urgent_sleep_time and executes a mid level of I/O idling check.
|
||||||
uses cost benefit GC approach.
|
always uses cost benefit GC approach, and will override
|
||||||
|
age-threshold GC approach if ATGC is enabled at the same time.
|
||||||
|
|
||||||
What: /sys/fs/f2fs/<disk>/gc_urgent_sleep_time
|
What: /sys/fs/f2fs/<disk>/gc_urgent_sleep_time
|
||||||
Date: August 2017
|
Date: August 2017
|
||||||
|
@ -819,3 +822,9 @@ Description: It controls the valid block ratio threshold not to trigger excessiv
|
||||||
for zoned deivces. The initial value of it is 95(%). F2FS will stop the
|
for zoned deivces. The initial value of it is 95(%). F2FS will stop the
|
||||||
background GC thread from intiating GC for sections having valid blocks
|
background GC thread from intiating GC for sections having valid blocks
|
||||||
exceeding the ratio.
|
exceeding the ratio.
|
||||||
|
|
||||||
|
What: /sys/fs/f2fs/<disk>/max_read_extent_count
|
||||||
|
Date: November 2024
|
||||||
|
Contact: "Chao Yu" <chao@kernel.org>
|
||||||
|
Description: It controls max read extent count for per-inode, the value of threshold
|
||||||
|
is 10240 by default.
|
||||||
|
|
|
@ -6472,6 +6472,15 @@
|
||||||
<deci-seconds>: poll all this frequency
|
<deci-seconds>: poll all this frequency
|
||||||
0: no polling (default)
|
0: no polling (default)
|
||||||
|
|
||||||
|
thp_anon= [KNL]
|
||||||
|
Format: <size>,<size>[KMG]:<state>;<size>-<size>[KMG]:<state>
|
||||||
|
state is one of "always", "madvise", "never" or "inherit".
|
||||||
|
Control the default behavior of the system with respect
|
||||||
|
to anonymous transparent hugepages.
|
||||||
|
Can be used multiple times for multiple anon THP sizes.
|
||||||
|
See Documentation/admin-guide/mm/transhuge.rst for more
|
||||||
|
details.
|
||||||
|
|
||||||
threadirqs [KNL]
|
threadirqs [KNL]
|
||||||
Force threading of all interrupt handlers except those
|
Force threading of all interrupt handlers except those
|
||||||
marked explicitly IRQF_NO_THREAD.
|
marked explicitly IRQF_NO_THREAD.
|
||||||
|
|
|
@ -284,13 +284,37 @@ processes. Exceeding the number would block the collapse::
|
||||||
|
|
||||||
A higher value may increase memory footprint for some workloads.
|
A higher value may increase memory footprint for some workloads.
|
||||||
|
|
||||||
Boot parameter
|
Boot parameters
|
||||||
==============
|
===============
|
||||||
|
|
||||||
You can change the sysfs boot time defaults of Transparent Hugepage
|
You can change the sysfs boot time default for the top-level "enabled"
|
||||||
Support by passing the parameter ``transparent_hugepage=always`` or
|
control by passing the parameter ``transparent_hugepage=always`` or
|
||||||
``transparent_hugepage=madvise`` or ``transparent_hugepage=never``
|
``transparent_hugepage=madvise`` or ``transparent_hugepage=never`` to the
|
||||||
to the kernel command line.
|
kernel command line.
|
||||||
|
|
||||||
|
Alternatively, each supported anonymous THP size can be controlled by
|
||||||
|
passing ``thp_anon=<size>,<size>[KMG]:<state>;<size>-<size>[KMG]:<state>``,
|
||||||
|
where ``<size>`` is the THP size (must be a power of 2 of PAGE_SIZE and
|
||||||
|
supported anonymous THP) and ``<state>`` is one of ``always``, ``madvise``,
|
||||||
|
``never`` or ``inherit``.
|
||||||
|
|
||||||
|
For example, the following will set 16K, 32K, 64K THP to ``always``,
|
||||||
|
set 128K, 512K to ``inherit``, set 256K to ``madvise`` and 1M, 2M
|
||||||
|
to ``never``::
|
||||||
|
|
||||||
|
thp_anon=16K-64K:always;128K,512K:inherit;256K:madvise;1M-2M:never
|
||||||
|
|
||||||
|
``thp_anon=`` may be specified multiple times to configure all THP sizes as
|
||||||
|
required. If ``thp_anon=`` is specified at least once, any anon THP sizes
|
||||||
|
not explicitly configured on the command line are implicitly set to
|
||||||
|
``never``.
|
||||||
|
|
||||||
|
``transparent_hugepage`` setting only affects the global toggle. If
|
||||||
|
``thp_anon`` is not specified, PMD_ORDER THP will default to ``inherit``.
|
||||||
|
However, if a valid ``thp_anon`` setting is provided by the user, the
|
||||||
|
PMD_ORDER THP policy will be overridden. If the policy for PMD_ORDER
|
||||||
|
is not defined within a valid ``thp_anon``, its policy will default to
|
||||||
|
``never``.
|
||||||
|
|
||||||
Hugepages in tmpfs/shmem
|
Hugepages in tmpfs/shmem
|
||||||
========================
|
========================
|
||||||
|
|
|
@ -1,58 +1,55 @@
|
||||||
# SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note
|
.. SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note
|
||||||
#
|
|
||||||
# (C) COPYRIGHT 2022-2023 ARM Limited. All rights reserved.
|
|
||||||
#
|
|
||||||
# This program is free software and is provided to you under the terms of the
|
|
||||||
# GNU General Public License version 2 as published by the Free Software
|
|
||||||
# Foundation, and any use by you of this program is subject to the terms
|
|
||||||
# of such GNU license.
|
|
||||||
#
|
|
||||||
# This program is distributed in the hope that it will be useful,
|
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
# GNU General Public License for more details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU General Public License
|
|
||||||
# along with this program; if not, you can access it online at
|
|
||||||
# http://www.gnu.org/licenses/gpl-2.0.html.
|
|
||||||
#
|
|
||||||
#
|
|
||||||
|
|
||||||
DebugFS interface:
|
==================
|
||||||
------------------
|
DebugFS interface
|
||||||
|
==================
|
||||||
|
|
||||||
|
**Copyright:** \(C) 2022-2024 ARM Limited. All rights reserved.
|
||||||
|
..
|
||||||
|
This program is free software and is provided to you under the terms of the
|
||||||
|
GNU General Public License version 2 as published by the Free Software
|
||||||
|
Foundation, and any use by you of this program is subject to the terms
|
||||||
|
of such GNU license.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with this program; if not, you can access it online at
|
||||||
|
http://www.gnu.org/licenses/gpl-2.0.html.
|
||||||
|
|
||||||
A new per-kbase-context debugfs file called csf_sync has been implemented
|
A new per-kbase-context debugfs file called csf_sync has been implemented
|
||||||
which captures the current KCPU & GPU queue state of the not-yet-completed
|
which captures the current KCPU & GPU queue state of the not-yet-completed
|
||||||
operations and displayed through the debugfs file.
|
operations and displayed through the debugfs file.
|
||||||
This file is at:
|
This file is at
|
||||||
=======================================================
|
|
||||||
/sys/kernel/debug/mali0/ctx/<pid>_<context id>/csf_sync
|
|
||||||
=======================================================
|
|
||||||
|
|
||||||
Output Format:
|
::
|
||||||
----------------
|
|
||||||
|
/sys/kernel/debug/mali0/ctx/<pid>_<context id>/csf_sync
|
||||||
|
|
||||||
|
|
||||||
|
Output Format
|
||||||
|
-------------
|
||||||
|
|
||||||
The csf_sync file contains important data for the currently active queues.
|
The csf_sync file contains important data for the currently active queues.
|
||||||
This data is formatted into two segments, which are separated by a
|
This data is formatted into two segments, which are separated by a
|
||||||
pipe character: the common properties and the operation-specific properties.
|
pipe character: the common properties and the operation-specific properties.
|
||||||
|
|
||||||
Common Properties:
|
Common Properties
|
||||||
------------------
|
-----------------
|
||||||
|
|
||||||
* Queue type: GPU or KCPU.
|
* Queue type: GPU or KCPU.
|
||||||
* kbase context id and the queue id.
|
* kbase context id and the queue id.
|
||||||
* If the queue type is a GPU queue then the group handle is also noted,
|
* If the queue type is a GPU queue then the group handle is also noted,in the middle of the other two IDs. The slot value is also dumped.
|
||||||
in the middle of the other two IDs. The slot value is also dumped.
|
|
||||||
* Execution status, which can either be 'P' for pending or 'S' for started.
|
* Execution status, which can either be 'P' for pending or 'S' for started.
|
||||||
* Command type is then output which indicates the type of dependency
|
* Command type is then output which indicates the type of dependency (i.e. wait or signal).
|
||||||
(i.e. wait or signal).
|
* Object address which is a pointer to the sync object that the command operates on.
|
||||||
* Object address which is a pointer to the sync object that the
|
|
||||||
command operates on.
|
|
||||||
* The live value, which is the value of the synchronization object
|
|
||||||
at the time of dumping. This could help to determine why wait
|
|
||||||
operations might be blocked.
|
|
||||||
|
|
||||||
Operation-Specific Properties:
|
* The live value, which is the value of the synchronization object at the time of dumping. This could help to determine why wait operations might be blocked.
|
||||||
|
|
||||||
|
Operation-Specific Properties
|
||||||
------------------------------
|
------------------------------
|
||||||
|
|
||||||
The operation-specific values for KCPU queue fence operations
|
The operation-specific values for KCPU queue fence operations
|
||||||
|
@ -67,48 +64,49 @@ which are always shown; the argument value to wait on or set/add to,
|
||||||
and the operation type (set/add) or wait condition (e.g. LE, GT, GE).
|
and the operation type (set/add) or wait condition (e.g. LE, GT, GE).
|
||||||
|
|
||||||
Examples
|
Examples
|
||||||
--------
|
========
|
||||||
|
|
||||||
GPU Queue Example
|
GPU Queue Example
|
||||||
------------------
|
------------------
|
||||||
|
|
||||||
The following output is of a GPU queue, from a process that has a KCTX ID of 52,
|
The following output is of a GPU queue, from a process that has a KCTX ID of 52,
|
||||||
is in Queue Group (CSG) 0, and has Queue ID 0. It has started and is waiting on
|
is in Queue Group (CSG) 0, and has Queue ID 0. It has started and is waiting on
|
||||||
the object at address 0x0000007f81ffc800. The live value is 0,
|
the object at address **0x0000007f81ffc800**. The live value is 0,
|
||||||
as is the arg value. However, the operation "op" is GT, indicating it's waiting
|
as is the arg value. However, the operation "op" is GT, indicating it's waiting
|
||||||
for the live value to surpass the arg value:
|
for the live value to surpass the arg value:
|
||||||
|
|
||||||
======================================================================================================================================
|
::
|
||||||
queue:GPU-52-0-0 exec:S cmd:SYNC_WAIT slot:4 obj:0x0000007f81ffc800 live_value:0x0000000000000000 | op:gt arg_value:0x0000000000000000
|
|
||||||
======================================================================================================================================
|
queue:GPU-52-0-0 exec:S cmd:SYNC_WAIT slot:4 obj:0x0000007f81ffc800 live_value:0x0000000000000000 | op:gt arg_value:0x0000000000000000
|
||||||
|
|
||||||
The following is an example of GPU queue dump, where the SYNC SET operation
|
The following is an example of GPU queue dump, where the SYNC SET operation
|
||||||
is blocked by the preceding SYNC WAIT operation. This shows two GPU queues,
|
is blocked by the preceding SYNC WAIT operation. This shows two GPU queues,
|
||||||
with the same KCTX ID of 8, Queue Group (CSG) 0, and Queue ID 0. The SYNC WAIT
|
with the same KCTX ID of 8, Queue Group (CSG) 0, and Queue ID 0. The SYNC WAIT
|
||||||
operation has started, while the SYNC SET is pending, blocked by the SYNC WAIT.
|
operation has started, while the SYNC SET is pending, blocked by the SYNC WAIT.
|
||||||
Both operations are on the same slot, 2 and have live value of 0. The SYNC WAIT
|
Both operations are on the same slot, 2 and have live value of 0. The SYNC WAIT
|
||||||
is waiting on the object at address 0x0000007f81ffc800, while the SYNC SET will
|
is waiting on the object at address **0x0000007f81ffc800**, while the SYNC SET will
|
||||||
set the object at address 0x00000000a3bad4fb when it is unblocked.
|
set the object at address **0x00000000a3bad4fb** when it is unblocked.
|
||||||
The operation "op" is GT for the SYNC WAIT, indicating it's waiting for the
|
The operation "op" is GT for the SYNC WAIT, indicating it's waiting for the
|
||||||
live value to surpass the arg value, while the operation and arg value for the
|
live value to surpass the arg value, while the operation and arg value for the
|
||||||
SYNC SET is "set" and "1" respectively:
|
SYNC SET is "set" and "1" respectively.
|
||||||
|
|
||||||
======================================================================================================================================
|
::
|
||||||
queue:GPU-8-0-0 exec:S cmd:SYNC_WAIT slot:2 obj:0x0000007f81ffc800 live_value:0x0000000000000000 | op:gt arg_value:0x0000000000000000
|
|
||||||
queue:GPU-8-0-0 exec:P cmd:SYNC_SET slot:2 obj:0x00000000a3bad4fb live_value:0x0000000000000000 | op:set arg_value:0x0000000000000001
|
queue:GPU-8-0-0 exec:S cmd:SYNC_WAIT slot:2 obj:0x0000007f81ffc800 live_value:0x0000000000000000 | op:gt arg_value:0x0000000000000000
|
||||||
======================================================================================================================================
|
queue:GPU-8-0-0 exec:P cmd:SYNC_SET slot:2 obj:0x00000000a3bad4fb live_value:0x0000000000000000 | op:set arg_value:0x0000000000000001
|
||||||
|
|
||||||
KCPU Queue Example
|
KCPU Queue Example
|
||||||
------------------
|
------------------
|
||||||
|
|
||||||
The following is an example of a KCPU queue, from a process that has
|
The following is an example of a KCPU queue, from a process that has
|
||||||
a KCTX ID of 0 and has Queue ID 1. It has started and is waiting on the
|
a KCTX ID of 0 and has Queue ID 1. It has started and is waiting on the
|
||||||
object at address 0x0000007fbf6f2ff8. The live value is currently 0 with
|
object at address **0x0000007fbf6f2ff8**. The live value is currently 0 with
|
||||||
the "op" being GT indicating it is waiting on the live value to
|
the "op" being GT indicating it is waiting on the live value to
|
||||||
surpass the arg value.
|
surpass the arg value.
|
||||||
|
|
||||||
===============================================================================================================================
|
::
|
||||||
queue:KCPU-0-1 exec:S cmd:CQS_WAIT_OPERATION obj:0x0000007fbf6f2ff8 live_value:0x0000000000000000 | op:gt arg_value: 0x00000000
|
|
||||||
===============================================================================================================================
|
queue:KCPU-0-1 exec:S cmd:CQS_WAIT_OPERATION obj:0x0000007fbf6f2ff8 live_value:0x0000000000000000 | op:gt arg_value: 0x00000000
|
||||||
|
|
||||||
CSF Sync State Dump For Fence Signal Timeouts
|
CSF Sync State Dump For Fence Signal Timeouts
|
||||||
---------------------------------------------
|
---------------------------------------------
|
||||||
|
@ -142,18 +140,23 @@ which is written to, to turn this feature on and off.
|
||||||
|
|
||||||
Example:
|
Example:
|
||||||
--------
|
--------
|
||||||
when writing to fence_signal_timeout_enable entry:
|
when writing to fence_signal_timeout_enable entry
|
||||||
echo 1 > /sys/kernel/debug/mali0/fence_signal_timeout_enable -> feature is enabled.
|
|
||||||
echo 0 > /sys/kernel/debug/mali0/fence_signal_timeout_enable -> feature is disabled.
|
::
|
||||||
|
|
||||||
|
echo 1 > /sys/kernel/debug/mali0/fence_signal_timeout_enable -> feature is enabled.
|
||||||
|
echo 0 > /sys/kernel/debug/mali0/fence_signal_timeout_enable -> feature is disabled.
|
||||||
|
|
||||||
It is also possible to read from this file to check if the feature is currently
|
It is also possible to read from this file to check if the feature is currently
|
||||||
enabled or not checking the return value of fence_signal_timeout_enable.
|
enabled or not checking the return value of fence_signal_timeout_enable.
|
||||||
|
|
||||||
Example:
|
Example:
|
||||||
--------
|
--------
|
||||||
when reading from fence_signal_timeout_enable entry, if:
|
when reading from fence_signal_timeout_enable entry, if
|
||||||
cat /sys/kernel/debug/mali0/fence_signal_timeout_enable returns 1 -> feature is enabled.
|
::
|
||||||
cat /sys/kernel/debug/mali0/fence_signal_timeout_enable returns 0 -> feature is disabled.
|
|
||||||
|
cat /sys/kernel/debug/mali0/fence_signal_timeout_enable returns 1 -> feature is enabled.
|
||||||
|
cat /sys/kernel/debug/mali0/fence_signal_timeout_enable returns 0 -> feature is disabled.
|
||||||
|
|
||||||
Update Timer Duration
|
Update Timer Duration
|
||||||
---------------------
|
---------------------
|
||||||
|
@ -163,11 +166,15 @@ milliseconds.
|
||||||
|
|
||||||
Example:
|
Example:
|
||||||
--------
|
--------
|
||||||
cat /sys/kernel/debug/mali0/fence_signal_timeout_ms
|
::
|
||||||
|
|
||||||
|
cat /sys/kernel/debug/mali0/fence_signal_timeout_ms
|
||||||
|
|
||||||
The 'fence_signal_timeout_ms' debugfs entry can also be written to, to update
|
The 'fence_signal_timeout_ms' debugfs entry can also be written to, to update
|
||||||
the time in milliseconds.
|
the time in milliseconds.
|
||||||
|
|
||||||
Example:
|
Example:
|
||||||
--------
|
--------
|
||||||
echo 10000 > /sys/kernel/debug/mali0/fence_signal_timeout_ms
|
::
|
||||||
|
|
||||||
|
echo 10000 > /sys/kernel/debug/mali0/fence_signal_timeout_ms
|
|
@ -255,9 +255,21 @@ Contributing new tests (details)
|
||||||
|
|
||||||
TEST_PROGS_EXTENDED, TEST_GEN_PROGS_EXTENDED mean it is the
|
TEST_PROGS_EXTENDED, TEST_GEN_PROGS_EXTENDED mean it is the
|
||||||
executable which is not tested by default.
|
executable which is not tested by default.
|
||||||
|
|
||||||
TEST_FILES, TEST_GEN_FILES mean it is the file which is used by
|
TEST_FILES, TEST_GEN_FILES mean it is the file which is used by
|
||||||
test.
|
test.
|
||||||
|
|
||||||
|
TEST_INCLUDES is similar to TEST_FILES, it lists files which should be
|
||||||
|
included when exporting or installing the tests, with the following
|
||||||
|
differences:
|
||||||
|
|
||||||
|
* symlinks to files in other directories are preserved
|
||||||
|
* the part of paths below tools/testing/selftests/ is preserved when
|
||||||
|
copying the files to the output directory
|
||||||
|
|
||||||
|
TEST_INCLUDES is meant to list dependencies located in other directories of
|
||||||
|
the selftests hierarchy.
|
||||||
|
|
||||||
* First use the headers inside the kernel source and/or git repo, and then the
|
* First use the headers inside the kernel source and/or git repo, and then the
|
||||||
system headers. Headers for the kernel release as opposed to headers
|
system headers. Headers for the kernel release as opposed to headers
|
||||||
installed by the distro on the system should be the primary focus to be able
|
installed by the distro on the system should be the primary focus to be able
|
||||||
|
|
|
@ -0,0 +1,163 @@
|
||||||
|
# SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note
|
||||||
|
#
|
||||||
|
# (C) COPYRIGHT 2022-2024 ARM Limited. All rights reserved.
|
||||||
|
#
|
||||||
|
# This program is free software and is provided to you under the terms of the
|
||||||
|
# GNU General Public License version 2 as published by the Free Software
|
||||||
|
# Foundation, and any use by you of this program is subject to the terms
|
||||||
|
# of such GNU license.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with this program; if not, you can access it online at
|
||||||
|
# http://www.gnu.org/licenses/gpl-2.0.html.
|
||||||
|
#
|
||||||
|
#
|
||||||
|
%YAML 1.2
|
||||||
|
---
|
||||||
|
$id: http://devicetree.org/schemas/arm/arm,coresight-mali-source.yaml#
|
||||||
|
$schema: http://devicetree.org/meta-schemas/core.yaml#
|
||||||
|
|
||||||
|
title: ARM CoreSight Mali Source integration
|
||||||
|
|
||||||
|
maintainers:
|
||||||
|
- ARM Ltd.
|
||||||
|
|
||||||
|
description: |
|
||||||
|
See Documentation/trace/coresight/coresight.rst for detailed information
|
||||||
|
about Coresight.
|
||||||
|
|
||||||
|
This documentation will cover Mali specific devicetree integration.
|
||||||
|
|
||||||
|
References to Sink ports are given as examples. Access to Sink is specific
|
||||||
|
to an implementation and would require dedicated kernel modules.
|
||||||
|
|
||||||
|
Arm Mali GPU are supporting 3 different sources: ITM, ETM, ELA
|
||||||
|
|
||||||
|
ELA source configuration via SysFS entries:
|
||||||
|
|
||||||
|
The register values used by CoreSight for ELA can be configured using SysFS
|
||||||
|
interfaces. This implicitly includes configuring the ELA for independent or
|
||||||
|
shared JCN request and response channels.
|
||||||
|
|
||||||
|
properties:
|
||||||
|
compatible:
|
||||||
|
enum:
|
||||||
|
- arm,coresight-mali-source-itm
|
||||||
|
- arm,coresight-mali-source-etm
|
||||||
|
- arm,coresight-mali-source-ela
|
||||||
|
|
||||||
|
gpu:
|
||||||
|
minItems: 1
|
||||||
|
maxItems: 1
|
||||||
|
description:
|
||||||
|
Phandle to a Mali GPU definition
|
||||||
|
|
||||||
|
port:
|
||||||
|
description:
|
||||||
|
Output connection to CoreSight Sink Trace bus.
|
||||||
|
|
||||||
|
Legacy binding between Coresight Sources and CoreSight Sink.
|
||||||
|
For Linux kernel < v4.20.
|
||||||
|
$ref: /schemas/graph.yaml#/properties/port
|
||||||
|
|
||||||
|
out-ports:
|
||||||
|
description:
|
||||||
|
Binding between Coresight Sources and CoreSight Sink.
|
||||||
|
For Linux kernel >= v4.20.
|
||||||
|
$ref: /schemas/graph.yaml#/properties/ports
|
||||||
|
|
||||||
|
properties:
|
||||||
|
port:
|
||||||
|
description: Output connection to CoreSight Sink Trace bus.
|
||||||
|
$ref: /schemas/graph.yaml#/properties/port
|
||||||
|
|
||||||
|
required:
|
||||||
|
- compatible
|
||||||
|
- gpu
|
||||||
|
- port
|
||||||
|
- out-ports
|
||||||
|
|
||||||
|
additionalProperties: false
|
||||||
|
|
||||||
|
examples:
|
||||||
|
|
||||||
|
# A Sink node without legacy CoreSight connections
|
||||||
|
- |
|
||||||
|
mali-source-itm {
|
||||||
|
compatible = "arm,coresight-mali-source-itm";
|
||||||
|
gpu = <&gpu>;
|
||||||
|
|
||||||
|
out-ports {
|
||||||
|
port {
|
||||||
|
mali_source_itm_out_port0: endpoint {
|
||||||
|
remote-endpoint = <&mali_sink_in_port0>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
mali-source-ela {
|
||||||
|
compatible = "arm,coresight-mali-source-ela";
|
||||||
|
gpu = <&gpu>;
|
||||||
|
|
||||||
|
out-ports {
|
||||||
|
port {
|
||||||
|
mali_source_ela_out_port0: endpoint {
|
||||||
|
remote-endpoint = <&mali_sink_in_port1>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
mali-source-etm {
|
||||||
|
compatible = "arm,coresight-mali-source-etm";
|
||||||
|
gpu = <&gpu>;
|
||||||
|
|
||||||
|
out-ports {
|
||||||
|
port {
|
||||||
|
mali_source_etm_out_port0: endpoint {
|
||||||
|
remote-endpoint = <&mali_sink_in_port2>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
# A Sink node with legacy CoreSight connections
|
||||||
|
- |
|
||||||
|
mali-source-itm {
|
||||||
|
compatible = "arm,coresight-mali-source-itm";
|
||||||
|
gpu = <&gpu>;
|
||||||
|
|
||||||
|
port {
|
||||||
|
mali_source_itm_out_port0: endpoint {
|
||||||
|
remote-endpoint = <&mali_sink_in_port0>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
mali-source-etm {
|
||||||
|
compatible = "arm,coresight-mali-source-etm";
|
||||||
|
gpu = <&gpu>;
|
||||||
|
|
||||||
|
port {
|
||||||
|
mali_source_etm_out_port0: endpoint {
|
||||||
|
remote-endpoint = <&mali_sink_in_port1>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
mali-source-ela {
|
||||||
|
compatible = "arm,coresight-mali-source-ela";
|
||||||
|
gpu = <&gpu>;
|
||||||
|
|
||||||
|
port {
|
||||||
|
mali_source_ela_out_port0: endpoint {
|
||||||
|
remote-endpoint = <&mali_sink_in_port2>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
|
@ -1,116 +0,0 @@
|
||||||
# SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note
|
|
||||||
#
|
|
||||||
# (C) COPYRIGHT 2023 ARM Limited. All rights reserved.
|
|
||||||
#
|
|
||||||
# This program is free software and is provided to you under the terms of the
|
|
||||||
# GNU General Public License version 2 as published by the Free Software
|
|
||||||
# Foundation, and any use by you of this program is subject to the terms
|
|
||||||
# of such GNU license.
|
|
||||||
#
|
|
||||||
# This program is distributed in the hope that it will be useful,
|
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
# GNU General Public License for more details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU General Public License
|
|
||||||
# along with this program; if not, you can access it online at
|
|
||||||
# http://www.gnu.org/licenses/gpl-2.0.html.
|
|
||||||
#
|
|
||||||
#
|
|
||||||
=====================================
|
|
||||||
ARM CoreSight Mali Source integration
|
|
||||||
=====================================
|
|
||||||
|
|
||||||
See Documentation/trace/coresight/coresight.rst for detailed information
|
|
||||||
about Coresight.
|
|
||||||
|
|
||||||
This documentation will cover Mali specific devicetree integration.
|
|
||||||
|
|
||||||
References to Sink ports are given as examples. Access to Sink is specific
|
|
||||||
to an implementation and would require dedicated kernel modules.
|
|
||||||
|
|
||||||
ARM Coresight Mali Source ITM
|
|
||||||
=============================
|
|
||||||
|
|
||||||
Required properties
|
|
||||||
-------------------
|
|
||||||
|
|
||||||
- compatible: Has to be "arm,coresight-mali-source-itm"
|
|
||||||
- gpu : phandle to a Mali GPU definition
|
|
||||||
- port:
|
|
||||||
- endpoint:
|
|
||||||
- remote-endpoint: phandle to a Coresight sink port
|
|
||||||
|
|
||||||
Example
|
|
||||||
-------
|
|
||||||
|
|
||||||
mali-source-itm {
|
|
||||||
compatible = "arm,coresight-mali-source-itm";
|
|
||||||
gpu = <&gpu>;
|
|
||||||
port {
|
|
||||||
mali_source_itm_out_port0: endpoint {
|
|
||||||
remote-endpoint = <&mali_sink_in_port0>;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
ARM Coresight Mali Source ETM
|
|
||||||
=============================
|
|
||||||
|
|
||||||
Required properties
|
|
||||||
-------------------
|
|
||||||
|
|
||||||
- compatible: Has to be "arm,coresight-mali-source-etm"
|
|
||||||
- gpu : phandle to a Mali GPU definition
|
|
||||||
- port:
|
|
||||||
- endpoint:
|
|
||||||
- remote-endpoint: phandle to a Coresight sink port
|
|
||||||
|
|
||||||
Example
|
|
||||||
-------
|
|
||||||
|
|
||||||
mali-source-etm {
|
|
||||||
compatible = "arm,coresight-mali-source-etm";
|
|
||||||
gpu = <&gpu>;
|
|
||||||
port {
|
|
||||||
mali_source_etm_out_port0: endpoint {
|
|
||||||
remote-endpoint = <&mali_sink_in_port1>;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
ARM Coresight Mali Source ELA
|
|
||||||
=============================
|
|
||||||
|
|
||||||
Required properties
|
|
||||||
-------------------
|
|
||||||
|
|
||||||
- compatible: Has to be "arm,coresight-mali-source-ela"
|
|
||||||
- gpu : phandle to a Mali GPU definition
|
|
||||||
- port:
|
|
||||||
- endpoint:
|
|
||||||
- remote-endpoint: phandle to a Coresight sink port
|
|
||||||
|
|
||||||
Example: Split JCN request/response channel
|
|
||||||
--------------------------------------------
|
|
||||||
|
|
||||||
This examples applies to implementations with a total of 5 signal groups,
|
|
||||||
where JCN request and response are assigned to independent or shared
|
|
||||||
channels depending on the GPU model.
|
|
||||||
|
|
||||||
mali-source-ela {
|
|
||||||
compatible = "arm,coresight-mali-source-ela";
|
|
||||||
gpu = <&gpu>;
|
|
||||||
port {
|
|
||||||
mali_source_ela_out_port0: endpoint {
|
|
||||||
remote-endpoint = <&mali_sink_in_port2>;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
SysFS Configuration
|
|
||||||
--------------------------------------------
|
|
||||||
|
|
||||||
The register values used by CoreSight for ELA can be configured using SysFS
|
|
||||||
interfaces. This implicitly includes configuring the ELA for independent or
|
|
||||||
shared JCN request and response channels.
|
|
|
@ -1,6 +1,6 @@
|
||||||
# SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note
|
# SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note
|
||||||
#
|
#
|
||||||
# (C) COPYRIGHT 2013-2023 ARM Limited. All rights reserved.
|
# (C) COPYRIGHT 2013-2024 ARM Limited. All rights reserved.
|
||||||
#
|
#
|
||||||
# This program is free software and is provided to you under the terms of the
|
# This program is free software and is provided to you under the terms of the
|
||||||
# GNU General Public License version 2 as published by the Free Software
|
# GNU General Public License version 2 as published by the Free Software
|
||||||
|
@ -35,14 +35,21 @@ Optional:
|
||||||
|
|
||||||
- clocks : One or more pairs of phandle to clock and clock specifier
|
- clocks : One or more pairs of phandle to clock and clock specifier
|
||||||
for the Mali device. The order is important: the first clock
|
for the Mali device. The order is important: the first clock
|
||||||
shall correspond to the "clk_mali" source, while the second clock
|
shall correspond to the "clk_mali" source. Other clocks are optional
|
||||||
(that is optional) shall correspond to the "shadercores" source.
|
and, if present, they shall correspond to domains like "shadercores",
|
||||||
- clock-names : Shall be set to: "clk_mali", "shadercores".
|
which is available for all GPUs, or "coregroup" and "neuralengines"
|
||||||
|
which are available for newer GPUs. Also notice that the "neuralengines"
|
||||||
|
clock domain, if present, doesn't expect a corresponding regulator.
|
||||||
|
- clock-names : Shall be set to values like: "clk_mali", "shadercores", "coregroup",
|
||||||
|
"neuralengines". Only the first one is mandatory. Most GPUs
|
||||||
|
support only the first two entries.
|
||||||
- mali-supply : Phandle to the top level regulator for the Mali device.
|
- mali-supply : Phandle to the top level regulator for the Mali device.
|
||||||
Refer to
|
Refer to
|
||||||
Documentation/devicetree/bindings/regulator/regulator.txt for details.
|
Documentation/devicetree/bindings/regulator/regulator.txt for details.
|
||||||
- shadercores-supply : Phandle to shader cores regulator for the Mali device.
|
- shadercores-supply : Phandle to shader cores regulator for the Mali device.
|
||||||
This is optional.
|
This is optional.
|
||||||
|
- coregroup-supply: Phandle to core group regulator for the Mali device.
|
||||||
|
This is optional and only available on newer GPUs.
|
||||||
- operating-points-v2 : Refer to Documentation/devicetree/bindings/power/mali-opp.txt
|
- operating-points-v2 : Refer to Documentation/devicetree/bindings/power/mali-opp.txt
|
||||||
for details.
|
for details.
|
||||||
- quirks-gpu : Used to write to the JM_CONFIG or CSF_CONFIG register.
|
- quirks-gpu : Used to write to the JM_CONFIG or CSF_CONFIG register.
|
||||||
|
@ -133,6 +140,10 @@ for details.
|
||||||
set and the setting coresponding to the SYSC_ALLOC register.
|
set and the setting coresponding to the SYSC_ALLOC register.
|
||||||
- propagate-bits: Used to write to L2_CONFIG.PBHA_HWU. This bitset establishes which
|
- propagate-bits: Used to write to L2_CONFIG.PBHA_HWU. This bitset establishes which
|
||||||
PBHA bits are propagated on the AXI bus.
|
PBHA bits are propagated on the AXI bus.
|
||||||
|
- mma-wa-id: Sets the PBHA ID to be used for the PBHA override based MMA violation workaround.
|
||||||
|
The read and write allocation override bits for the PBHA are set to NONCACHEABLE
|
||||||
|
and the driver encodes the PBHA ID in the PTEs where this workaround is to be applied.
|
||||||
|
Valid values are from 1 to 15.
|
||||||
|
|
||||||
|
|
||||||
Example for a Mali GPU with 1 clock and 1 regulator:
|
Example for a Mali GPU with 1 clock and 1 regulator:
|
||||||
|
@ -242,6 +253,7 @@ gpu@0xfc010000 {
|
||||||
pbha {
|
pbha {
|
||||||
int-id-override = <2 0x32>, <9 0x05>, <16 0x32>;
|
int-id-override = <2 0x32>, <9 0x05>, <16 0x32>;
|
||||||
propagate-bits = /bits/ 8 <0x03>;
|
propagate-bits = /bits/ 8 <0x03>;
|
||||||
|
mma-wa-id = <2>;
|
||||||
};
|
};
|
||||||
...
|
...
|
||||||
};
|
};
|
||||||
|
|
|
@ -231,6 +231,46 @@ properties:
|
||||||
SNK_READY for non-pd link.
|
SNK_READY for non-pd link.
|
||||||
type: boolean
|
type: boolean
|
||||||
|
|
||||||
|
sink-wait-cap-time-ms:
|
||||||
|
description: Represents the max time in ms that USB Type-C port (in sink
|
||||||
|
role) should wait for the port partner (source role) to send source caps.
|
||||||
|
SinkWaitCap timer starts when port in sink role attaches to the source.
|
||||||
|
This timer will stop when sink receives PD source cap advertisement before
|
||||||
|
timeout in which case it'll move to capability negotiation stage. A
|
||||||
|
timeout leads to a hard reset message by the port.
|
||||||
|
minimum: 310
|
||||||
|
maximum: 620
|
||||||
|
default: 310
|
||||||
|
|
||||||
|
ps-source-off-time-ms:
|
||||||
|
description: Represents the max time in ms that a DRP in source role should
|
||||||
|
take to turn off power after the PsSourceOff timer starts. PsSourceOff
|
||||||
|
timer starts when a sink's PHY layer receives EOP of the GoodCRC message
|
||||||
|
(corresponding to an Accept message sent in response to a PR_Swap or a
|
||||||
|
FR_Swap request). This timer stops when last bit of GoodCRC EOP
|
||||||
|
corresponding to the received PS_RDY message is transmitted by the PHY
|
||||||
|
layer. A timeout shall lead to error recovery in the type-c port.
|
||||||
|
minimum: 750
|
||||||
|
maximum: 920
|
||||||
|
default: 920
|
||||||
|
|
||||||
|
cc-debounce-time-ms:
|
||||||
|
description: Represents the max time in ms that a port shall wait to
|
||||||
|
determine if it's attached to a partner.
|
||||||
|
minimum: 100
|
||||||
|
maximum: 200
|
||||||
|
default: 200
|
||||||
|
|
||||||
|
sink-bc12-completion-time-ms:
|
||||||
|
description: Represents the max time in ms that a port in sink role takes
|
||||||
|
to complete Battery Charger (BC1.2) Detection. BC1.2 detection is a
|
||||||
|
hardware mechanism, which in some TCPC implementations, can run in
|
||||||
|
parallel once the Type-C connection state machine reaches the "potential
|
||||||
|
connect as sink" state. In TCPCs where this causes delays to respond to
|
||||||
|
the incoming PD messages, sink-bc12-completion-time-ms is used to delay
|
||||||
|
PD negotiation till BC1.2 detection completes.
|
||||||
|
default: 0
|
||||||
|
|
||||||
dependencies:
|
dependencies:
|
||||||
sink-vdos-v1: [ sink-vdos ]
|
sink-vdos-v1: [ sink-vdos ]
|
||||||
sink-vdos: [ sink-vdos-v1 ]
|
sink-vdos: [ sink-vdos-v1 ]
|
||||||
|
@ -316,7 +356,7 @@ examples:
|
||||||
};
|
};
|
||||||
|
|
||||||
# USB-C connector attached to a typec port controller(ptn5110), which has
|
# USB-C connector attached to a typec port controller(ptn5110), which has
|
||||||
# power delivery support and enables drp.
|
# power delivery support, explicitly defines time properties and enables drp.
|
||||||
- |
|
- |
|
||||||
#include <dt-bindings/usb/pd.h>
|
#include <dt-bindings/usb/pd.h>
|
||||||
typec: ptn5110 {
|
typec: ptn5110 {
|
||||||
|
@ -329,6 +369,10 @@ examples:
|
||||||
sink-pdos = <PDO_FIXED(5000, 2000, PDO_FIXED_USB_COMM)
|
sink-pdos = <PDO_FIXED(5000, 2000, PDO_FIXED_USB_COMM)
|
||||||
PDO_VAR(5000, 12000, 2000)>;
|
PDO_VAR(5000, 12000, 2000)>;
|
||||||
op-sink-microwatt = <10000000>;
|
op-sink-microwatt = <10000000>;
|
||||||
|
sink-wait-cap-time-ms = <465>;
|
||||||
|
ps-source-off-time-ms = <835>;
|
||||||
|
cc-debounce-time-ms = <101>;
|
||||||
|
sink-bc12-completion-time-ms = <500>;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -10,7 +10,7 @@ maintainers:
|
||||||
- Yingshiuan Pan <yingshiuan.pan@mediatek.com>
|
- Yingshiuan Pan <yingshiuan.pan@mediatek.com>
|
||||||
|
|
||||||
description:
|
description:
|
||||||
GenieZone is a proprietary type-II hypervisor firmware developed by MediaTek,
|
GenieZone is a proprietary type-I hypervisor firmware developed by MediaTek,
|
||||||
providing an isolated execution environment for mTEE (MediaTek Trusted
|
providing an isolated execution environment for mTEE (MediaTek Trusted
|
||||||
Execution Environment) and AVF (Android Virtualization Framework) virtual
|
Execution Environment) and AVF (Android Virtualization Framework) virtual
|
||||||
machines. This binding facilitates the integration of GenieZone into the
|
machines. This binding facilitates the integration of GenieZone into the
|
||||||
|
|
|
@ -69,6 +69,7 @@ examples:
|
||||||
PDO_FIXED_DATA_SWAP |
|
PDO_FIXED_DATA_SWAP |
|
||||||
PDO_FIXED_DUAL_ROLE)
|
PDO_FIXED_DUAL_ROLE)
|
||||||
PDO_FIXED(9000, 2000, 0)>;
|
PDO_FIXED(9000, 2000, 0)>;
|
||||||
|
sink-bc12-completion-time-ms = <500>;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
42
Documentation/dma-buf-test-exporter.rst
Normal file
42
Documentation/dma-buf-test-exporter.rst
Normal file
|
@ -0,0 +1,42 @@
|
||||||
|
.. SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note
|
||||||
|
|
||||||
|
=====================
|
||||||
|
dma-buf-test-exporter
|
||||||
|
=====================
|
||||||
|
|
||||||
|
**Copyright:** \(C) 2012-2013, 2020-2022, 2024 ARM Limited. All rights reserved.
|
||||||
|
|
||||||
|
..
|
||||||
|
This program is free software and is provided to you under the terms of the
|
||||||
|
GNU General Public License version 2 as published by the Free Software
|
||||||
|
Foundation, and any use by you of this program is subject to the terms
|
||||||
|
of such GNU license.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with this program; if not, you can access it online at
|
||||||
|
http://www.gnu.org/licenses/gpl-2.0.html.
|
||||||
|
|
||||||
|
Overview
|
||||||
|
--------
|
||||||
|
|
||||||
|
The dma-buf-test-exporter is a simple exporter of dma_buf objects.
|
||||||
|
It has a private API to allocate and manipulate the buffers which are represented as dma_buf fds.
|
||||||
|
The private API allows:
|
||||||
|
|
||||||
|
* simple allocation of physically non-contiguous buffers
|
||||||
|
* simple allocation of physically contiguous buffers
|
||||||
|
* query kernel side API usage stats (number of attachments, number of mappings, mmaps)
|
||||||
|
* failure mode configuration (fail attach, mapping, mmap)
|
||||||
|
* kernel side memset of buffers
|
||||||
|
|
||||||
|
The buffers support all of the dma_buf API, including mmap.
|
||||||
|
|
||||||
|
It supports being compiled as a module both in-tree and out-of-tree.
|
||||||
|
|
||||||
|
See **include/uapi/base/arm/dma_buf_test_exporter/dma-buf-test-exporter.h** for the ioctl interface.
|
||||||
|
See **Documentation/dma-buf-sharing.txt** for details on dma_buf.
|
|
@ -1,42 +0,0 @@
|
||||||
# SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note
|
|
||||||
#
|
|
||||||
# (C) COPYRIGHT 2012-2013, 2020-2022 ARM Limited. All rights reserved.
|
|
||||||
#
|
|
||||||
# This program is free software and is provided to you under the terms of the
|
|
||||||
# GNU General Public License version 2 as published by the Free Software
|
|
||||||
# Foundation, and any use by you of this program is subject to the terms
|
|
||||||
# of such GNU license.
|
|
||||||
#
|
|
||||||
# This program is distributed in the hope that it will be useful,
|
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
# GNU General Public License for more details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU General Public License
|
|
||||||
# along with this program; if not, you can access it online at
|
|
||||||
# http://www.gnu.org/licenses/gpl-2.0.html.
|
|
||||||
#
|
|
||||||
#
|
|
||||||
|
|
||||||
=====================
|
|
||||||
dma-buf-test-exporter
|
|
||||||
=====================
|
|
||||||
|
|
||||||
Overview
|
|
||||||
--------
|
|
||||||
|
|
||||||
The dma-buf-test-exporter is a simple exporter of dma_buf objects.
|
|
||||||
It has a private API to allocate and manipulate the buffers which are represented as dma_buf fds.
|
|
||||||
The private API allows:
|
|
||||||
* simple allocation of physically non-contiguous buffers
|
|
||||||
* simple allocation of physically contiguous buffers
|
|
||||||
* query kernel side API usage stats (number of attachments, number of mappings, mmaps)
|
|
||||||
* failure mode configuration (fail attach, mapping, mmap)
|
|
||||||
* kernel side memset of buffers
|
|
||||||
|
|
||||||
The buffers support all of the dma_buf API, including mmap.
|
|
||||||
|
|
||||||
It supports being compiled as a module both in-tree and out-of-tree.
|
|
||||||
|
|
||||||
See include/uapi/base/arm/dma_buf_test_exporter/dma-buf-test-exporter.h for the ioctl interface.
|
|
||||||
See Documentation/dma-buf-sharing.txt for details on dma_buf.
|
|
|
@ -943,3 +943,47 @@ NVMe Zoned Namespace devices
|
||||||
can start before the zone-capacity and span across zone-capacity boundary.
|
can start before the zone-capacity and span across zone-capacity boundary.
|
||||||
Such spanning segments are also considered as usable segments. All blocks
|
Such spanning segments are also considered as usable segments. All blocks
|
||||||
past the zone-capacity are considered unusable in these segments.
|
past the zone-capacity are considered unusable in these segments.
|
||||||
|
|
||||||
|
Device aliasing feature
|
||||||
|
-----------------------
|
||||||
|
|
||||||
|
f2fs can utilize a special file called a "device aliasing file." This file allows
|
||||||
|
the entire storage device to be mapped with a single, large extent, not using
|
||||||
|
the usual f2fs node structures. This mapped area is pinned and primarily intended
|
||||||
|
for holding the space.
|
||||||
|
|
||||||
|
Essentially, this mechanism allows a portion of the f2fs area to be temporarily
|
||||||
|
reserved and used by another filesystem or for different purposes. Once that
|
||||||
|
external usage is complete, the device aliasing file can be deleted, releasing
|
||||||
|
the reserved space back to F2FS for its own use.
|
||||||
|
|
||||||
|
<use-case>
|
||||||
|
|
||||||
|
# ls /dev/vd*
|
||||||
|
/dev/vdb (32GB) /dev/vdc (32GB)
|
||||||
|
# mkfs.ext4 /dev/vdc
|
||||||
|
# mkfs.f2fs -c /dev/vdc@vdc.file /dev/vdb
|
||||||
|
# mount /dev/vdb /mnt/f2fs
|
||||||
|
# ls -l /mnt/f2fs
|
||||||
|
vdc.file
|
||||||
|
# df -h
|
||||||
|
/dev/vdb 64G 33G 32G 52% /mnt/f2fs
|
||||||
|
|
||||||
|
# mount -o loop /dev/vdc /mnt/ext4
|
||||||
|
# df -h
|
||||||
|
/dev/vdb 64G 33G 32G 52% /mnt/f2fs
|
||||||
|
/dev/loop7 32G 24K 30G 1% /mnt/ext4
|
||||||
|
# umount /mnt/ext4
|
||||||
|
|
||||||
|
# f2fs_io getflags /mnt/f2fs/vdc.file
|
||||||
|
get a flag on /mnt/f2fs/vdc.file ret=0, flags=nocow(pinned),immutable
|
||||||
|
# f2fs_io setflags noimmutable /mnt/f2fs/vdc.file
|
||||||
|
get a flag on noimmutable ret=0, flags=800010
|
||||||
|
set a flag on /mnt/f2fs/vdc.file ret=0, flags=noimmutable
|
||||||
|
# rm /mnt/f2fs/vdc.file
|
||||||
|
# df -h
|
||||||
|
/dev/vdb 64G 753M 64G 2% /mnt/f2fs
|
||||||
|
|
||||||
|
So, the key idea is, user can do any file operations on /dev/vdc, and
|
||||||
|
reclaim the space after the use, while the space is counted as /data.
|
||||||
|
That doesn't require modifying partition size and filesystem format.
|
||||||
|
|
|
@ -6,12 +6,12 @@ GenieZone Introduction
|
||||||
|
|
||||||
Overview
|
Overview
|
||||||
========
|
========
|
||||||
GenieZone hypervisor (gzvm) is a type-1 hypervisor that supports various virtual
|
GenieZone hypervisor (gzvm) is a type-I hypervisor that supports various virtual
|
||||||
machine types and provides security features such as TEE-like scenarios and
|
machine types and provides security features such as TEE-like scenarios and
|
||||||
secure boot. It can create guest VMs for security use cases and has
|
secure boot. It can create guest VMs for security use cases and has
|
||||||
virtualization capabilities for both platform and interrupt. Although the
|
virtualization capabilities for both platform and interrupt. Although the
|
||||||
hypervisor can be booted independently, it requires the assistance of GenieZone
|
hypervisor can be booted independently, it requires the assistance of GenieZone
|
||||||
hypervisor kernel driver(also named gzvm) to leverage the ability of Linux
|
hypervisor kernel driver (also named gzvm) to leverage the ability of Linux
|
||||||
kernel for vCPU scheduling, memory management, inter-VM communication and virtio
|
kernel for vCPU scheduling, memory management, inter-VM communication and virtio
|
||||||
backend support.
|
backend support.
|
||||||
|
|
||||||
|
@ -32,34 +32,34 @@ Features
|
||||||
|
|
||||||
Direct use of physical memory from VMs is forbidden and designed to be
|
Direct use of physical memory from VMs is forbidden and designed to be
|
||||||
dictated to the privilege models managed by GenieZone hypervisor for security
|
dictated to the privilege models managed by GenieZone hypervisor for security
|
||||||
reason. With the help of gzvm module, the hypervisor would be able to manipulate
|
reason. With the help of the gzvm module, the hypervisor is able to manipulate
|
||||||
memory as objects.
|
memory as objects.
|
||||||
|
|
||||||
- Virtual Platform
|
- Virtual Platform
|
||||||
|
|
||||||
We manage to emulate a virtual mobile platform for guest OS running on guest
|
The gzvm hypervisor emulates a virtual mobile platform for guest OS running on
|
||||||
VM. The platform supports various architecture-defined devices, such as
|
guest VM. The platform supports various architecture-defined devices, such as
|
||||||
virtual arch timer, GIC, MMIO, PSCI, and exception watching...etc.
|
virtual arch timer, GIC, MMIO, PSCI, and exception watching...etc.
|
||||||
|
|
||||||
- Inter-VM Communication
|
- Inter-VM Communication
|
||||||
|
|
||||||
Communication among guest VMs was provided mainly on RPC. More communication
|
Communication among guest VMs is provided mainly on RPC. More communication
|
||||||
mechanisms were to be provided in the future based on VirtIO-vsock.
|
mechanisms will be provided in the future based on VirtIO-vsock.
|
||||||
|
|
||||||
- Device Virtualization
|
- Device Virtualization
|
||||||
|
|
||||||
The solution is provided using the well-known VirtIO. The gzvm module would
|
The solution is provided using the well-known VirtIO. The gzvm module redirects
|
||||||
redirect MMIO traps back to VMM where the virtual devices are mostly emulated.
|
MMIO traps back to VMM where the virtual devices are mostly emulated.
|
||||||
Ioeventfd is implemented using eventfd for signaling host VM that some IO
|
Ioeventfd is implemented using eventfd for signaling host VM that some IO
|
||||||
events in guest VMs need to be processed.
|
events in guest VMs need to be processed.
|
||||||
|
|
||||||
- Interrupt virtualization
|
- Interrupt virtualization
|
||||||
|
|
||||||
All Interrupts during some guest VMs running would be handled by GenieZone
|
All interrupts during some guest VMs running are handled by GenieZone
|
||||||
hypervisor with the help of gzvm module, both virtual and physical ones.
|
hypervisor with the help of gzvm module, both virtual and physical ones.
|
||||||
In case there's no guest VM running out there, physical interrupts would be
|
In case there's no guest VM running, physical interrupts are handled by host
|
||||||
handled by host VM directly for performance reason. Irqfd is also implemented
|
VM directly for performance reason. Irqfd is also implemented using eventfd
|
||||||
using eventfd for accepting vIRQ requests in gzvm module.
|
for accepting vIRQ requests in gzvm module.
|
||||||
|
|
||||||
Platform architecture component
|
Platform architecture component
|
||||||
===============================
|
===============================
|
||||||
|
@ -74,14 +74,14 @@ Platform architecture component
|
||||||
|
|
||||||
- vcpu
|
- vcpu
|
||||||
|
|
||||||
The vcpu component is the core of virtualizing aarch64 physical CPU runnable,
|
The vcpu component is the core of virtualizing an aarch64 physical CPU, and it
|
||||||
and it controls the vCPU lifecycle including creating, running and destroying.
|
controls the vCPU lifecycle including creating, running and destroying.
|
||||||
With self-defined exit handler, the vm component would be able to act
|
With self-defined exit handler, the vm component is able to act accordingly
|
||||||
accordingly before terminated.
|
before termination.
|
||||||
|
|
||||||
- vgic
|
- vgic
|
||||||
|
|
||||||
The vgic component exposes control interfaces to Linux kernel via irqchip, and
|
The vgic component exposes control interfaces to Linux kernel via irqchip, and
|
||||||
we intend to support all SPI, PPI, and SGI. When it comes to virtual
|
we intend to support all SPI, PPI, and SGI. When it comes to virtual
|
||||||
interrupts, the GenieZone hypervisor would write to list registers and trigger
|
interrupts, the GenieZone hypervisor writes to list registers and triggers
|
||||||
vIRQ injection in guest VMs via GIC.
|
vIRQ injection in guest VMs via GIC.
|
||||||
|
|
2
Makefile
2
Makefile
|
@ -1,7 +1,7 @@
|
||||||
# SPDX-License-Identifier: GPL-2.0
|
# SPDX-License-Identifier: GPL-2.0
|
||||||
VERSION = 6
|
VERSION = 6
|
||||||
PATCHLEVEL = 6
|
PATCHLEVEL = 6
|
||||||
SUBLEVEL = 56
|
SUBLEVEL = 58
|
||||||
EXTRAVERSION =
|
EXTRAVERSION =
|
||||||
NAME = Pinguïn Aangedreven
|
NAME = Pinguïn Aangedreven
|
||||||
|
|
||||||
|
|
|
@ -2,3 +2,4 @@
|
||||||
# commonly used symbols
|
# commonly used symbols
|
||||||
module_layout
|
module_layout
|
||||||
__put_task_struct
|
__put_task_struct
|
||||||
|
utf8_data_table
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
103
android/abi_gki_aarch64.stg.allowed_breaks
Normal file
103
android/abi_gki_aarch64.stg.allowed_breaks
Normal file
|
@ -0,0 +1,103 @@
|
||||||
|
# How to use this file: http://go/approve-abi-break
|
||||||
|
# ABI freeze commit: 666cbbfe5c567ca79da30dccad8b5257ca88f02c
|
||||||
|
|
||||||
|
type 'struct shash_alg' changed
|
||||||
|
member 'u64 android_backport_reserved1' was removed
|
||||||
|
member 'u64 android_backport_reserved2' was removed
|
||||||
|
member 'union { int(* finup_mb)(struct shash_desc*, const u8* const*, unsigned int, u8* const*, unsigned int); struct { u64 android_backport_reserved1; }; union { }; }' was added
|
||||||
|
member 'union { unsigned int mb_max_msgs; struct { u64 android_backport_reserved2; }; union { }; }' was added
|
||||||
|
|
||||||
|
type 'struct fsverity_info' changed
|
||||||
|
byte size changed from 272 to 264
|
||||||
|
member 'spinlock_t hash_page_init_lock' was removed
|
||||||
|
|
||||||
|
type 'enum binder_work_type' changed
|
||||||
|
enumerator 'BINDER_WORK_FROZEN_BINDER' (10) was added
|
||||||
|
... 1 other enumerator(s) added
|
||||||
|
|
||||||
|
type 'struct ufs_clk_scaling' changed
|
||||||
|
member 'bool suspend_on_no_request' was added
|
||||||
|
|
||||||
|
type 'struct tty_operations' changed
|
||||||
|
member 'u64 android_kabi_reserved1' was removed
|
||||||
|
member 'union { int(* ldisc_ok)(struct tty_struct*, int); struct { u64 android_kabi_reserved1; }; union { }; }' was added
|
||||||
|
|
||||||
|
type 'struct kvm_hyp_iommu' changed
|
||||||
|
member changed from 'hyp_spinlock_t lock' to 'u32 lock'
|
||||||
|
type changed from 'hyp_spinlock_t' = 'union hyp_spinlock' to 'u32' = '__u32' = 'unsigned int'
|
||||||
|
resolved type changed from 'union hyp_spinlock' to 'unsigned int'
|
||||||
|
|
||||||
|
type 'struct fsverity_hash_alg' changed
|
||||||
|
member 'int mb_max_msgs' was added
|
||||||
|
|
||||||
|
type 'struct pkvm_module_ops' changed
|
||||||
|
member 'u64 android_kabi_reserved1' was removed
|
||||||
|
member 'u64 android_kabi_reserved2' was removed
|
||||||
|
member 'u64 android_kabi_reserved3' was removed
|
||||||
|
member 'union { void(* iommu_flush_unmap_cache)(struct kvm_iommu_paddr_cache*); struct { u64 android_kabi_reserved1; }; union { }; }' was added
|
||||||
|
member 'union { int(* host_stage2_enable_lazy_pte)(u64, u64); struct { u64 android_kabi_reserved2; }; union { }; }' was added
|
||||||
|
member 'union { int(* host_stage2_disable_lazy_pte)(u64, u64); struct { u64 android_kabi_reserved3; }; union { }; }' was added
|
||||||
|
|
||||||
|
type 'struct kvm_hyp_iommu' changed
|
||||||
|
member 'u32 unused' was removed
|
||||||
|
member 'u32 lock' was added
|
||||||
|
|
||||||
|
type 'struct pkvm_module_ops' changed
|
||||||
|
member 'u64 android_kabi_reserved2' was removed
|
||||||
|
member 'u64 android_kabi_reserved3' was removed
|
||||||
|
member 'union { int(* host_stage2_enable_lazy_pte)(u64, u64); struct { u64 android_kabi_reserved2; }; union { }; }' was added
|
||||||
|
member 'union { int(* host_stage2_disable_lazy_pte)(u64, u64); struct { u64 android_kabi_reserved3; }; union { }; }' was added
|
||||||
|
|
||||||
|
11 function symbol(s) removed
|
||||||
|
'int __traceiter_android_rvh_ogki_hiview_hievent_create(void*, unsigned int, void**)'
|
||||||
|
'int __traceiter_android_rvh_ogki_hiview_hievent_destroy(void*, void*)'
|
||||||
|
'int __traceiter_android_rvh_ogki_hiview_hievent_put_integral(void*, void*, const char*, long long, int*)'
|
||||||
|
'int __traceiter_android_rvh_ogki_hiview_hievent_put_string(void*, void*, const char*, const char*, int*)'
|
||||||
|
'int __traceiter_android_rvh_ogki_hiview_hievent_report(void*, void*, int*)'
|
||||||
|
'int __traceiter_android_rvh_ogki_security_audit_log_module_sign(void*, int)'
|
||||||
|
'int __traceiter_android_rvh_ogki_security_audit_log_usercopy(void*, bool, const char*, unsigned long)'
|
||||||
|
'int __traceiter_android_vh_ogki_security_audit_log_cfi(void*, unsigned long, unsigned long*)'
|
||||||
|
'int __traceiter_android_vh_ogki_security_audit_log_setid(void*, u32, u32, u32)'
|
||||||
|
'int __traceiter_android_vh_ogki_tcp_rcv_established_fast_path(void*, struct sock*)'
|
||||||
|
'int __traceiter_android_vh_ogki_tcp_rcv_established_slow_path(void*, struct sock*)'
|
||||||
|
|
||||||
|
11 variable symbol(s) removed
|
||||||
|
'struct tracepoint __tracepoint_android_rvh_ogki_hiview_hievent_create'
|
||||||
|
'struct tracepoint __tracepoint_android_rvh_ogki_hiview_hievent_destroy'
|
||||||
|
'struct tracepoint __tracepoint_android_rvh_ogki_hiview_hievent_put_integral'
|
||||||
|
'struct tracepoint __tracepoint_android_rvh_ogki_hiview_hievent_put_string'
|
||||||
|
'struct tracepoint __tracepoint_android_rvh_ogki_hiview_hievent_report'
|
||||||
|
'struct tracepoint __tracepoint_android_rvh_ogki_security_audit_log_module_sign'
|
||||||
|
'struct tracepoint __tracepoint_android_rvh_ogki_security_audit_log_usercopy'
|
||||||
|
'struct tracepoint __tracepoint_android_vh_ogki_security_audit_log_cfi'
|
||||||
|
'struct tracepoint __tracepoint_android_vh_ogki_security_audit_log_setid'
|
||||||
|
'struct tracepoint __tracepoint_android_vh_ogki_tcp_rcv_established_fast_path'
|
||||||
|
'struct tracepoint __tracepoint_android_vh_ogki_tcp_rcv_established_slow_path'
|
||||||
|
|
||||||
|
type 'enum ftrace_dump_mode' changed
|
||||||
|
enumerator 'DUMP_PARAM' (3) was added
|
||||||
|
|
||||||
|
1 function symbol(s) removed
|
||||||
|
'int __traceiter_android_vh_suitable_migration_target_bypass(void*, struct page*, bool*)'
|
||||||
|
|
||||||
|
1 variable symbol(s) removed
|
||||||
|
'struct tracepoint __tracepoint_android_vh_suitable_migration_target_bypass'
|
||||||
|
|
||||||
|
type 'struct cgroup_root' changed
|
||||||
|
member 'u8 android_backport_reserved1[28]' was removed
|
||||||
|
member 'union { struct callback_head rcu; struct { u8 android_backport_reserved1[28]; }; union { }; }' was added
|
||||||
|
|
||||||
|
1 function symbol(s) removed
|
||||||
|
'int __traceiter_android_vh_mutex_unlock_slowpath_before_wakeq(void*, struct mutex*)'
|
||||||
|
|
||||||
|
1 variable symbol(s) removed
|
||||||
|
'struct tracepoint __tracepoint_android_vh_mutex_unlock_slowpath_before_wakeq'
|
||||||
|
|
||||||
|
2 function symbol(s) removed
|
||||||
|
'int __traceiter_android_vh_mutex_unlock_slowpath_before_wakeq(void*, struct mutex*)'
|
||||||
|
'int __traceiter_android_vh_suitable_migration_target_bypass(void*, struct page*, bool*)'
|
||||||
|
|
||||||
|
2 variable symbol(s) removed
|
||||||
|
'struct tracepoint __tracepoint_android_vh_mutex_unlock_slowpath_before_wakeq'
|
||||||
|
'struct tracepoint __tracepoint_android_vh_suitable_migration_target_bypass'
|
||||||
|
|
|
@ -181,7 +181,9 @@
|
||||||
clk_put
|
clk_put
|
||||||
clk_register
|
clk_register
|
||||||
clk_register_composite
|
clk_register_composite
|
||||||
|
clk_restore_context
|
||||||
clk_round_rate
|
clk_round_rate
|
||||||
|
clk_save_context
|
||||||
clk_set_max_rate
|
clk_set_max_rate
|
||||||
clk_set_min_rate
|
clk_set_min_rate
|
||||||
clk_set_parent
|
clk_set_parent
|
||||||
|
@ -538,6 +540,15 @@
|
||||||
dma_sync_single_for_device
|
dma_sync_single_for_device
|
||||||
dma_unmap_page_attrs
|
dma_unmap_page_attrs
|
||||||
dma_unmap_sg_attrs
|
dma_unmap_sg_attrs
|
||||||
|
dm_get_device
|
||||||
|
dm_io
|
||||||
|
dm_io_client_create
|
||||||
|
dm_io_client_destroy
|
||||||
|
dm_per_bio_data
|
||||||
|
dm_put_device
|
||||||
|
dm_register_target
|
||||||
|
dm_table_get_mode
|
||||||
|
dm_unregister_target
|
||||||
d_obtain_alias
|
d_obtain_alias
|
||||||
do_SAK
|
do_SAK
|
||||||
do_trace_netlink_extack
|
do_trace_netlink_extack
|
||||||
|
@ -726,6 +737,7 @@
|
||||||
drm_property_blob_get
|
drm_property_blob_get
|
||||||
drm_property_blob_put
|
drm_property_blob_put
|
||||||
drm_property_create
|
drm_property_create
|
||||||
|
drm_property_create_blob
|
||||||
drm_property_create_bool
|
drm_property_create_bool
|
||||||
drm_property_create_enum
|
drm_property_create_enum
|
||||||
drm_property_create_range
|
drm_property_create_range
|
||||||
|
@ -1330,6 +1342,7 @@
|
||||||
mmc_cqe_request_done
|
mmc_cqe_request_done
|
||||||
mmc_detect_change
|
mmc_detect_change
|
||||||
mmc_free_host
|
mmc_free_host
|
||||||
|
mmc_get_ext_csd
|
||||||
mmc_gpiod_request_cd
|
mmc_gpiod_request_cd
|
||||||
mmc_gpio_get_cd
|
mmc_gpio_get_cd
|
||||||
mmc_of_parse
|
mmc_of_parse
|
||||||
|
@ -1668,6 +1681,7 @@
|
||||||
platform_get_irq_byname_optional
|
platform_get_irq_byname_optional
|
||||||
platform_get_resource
|
platform_get_resource
|
||||||
platform_get_resource_byname
|
platform_get_resource_byname
|
||||||
|
platform_irq_count
|
||||||
pm_genpd_add_subdomain
|
pm_genpd_add_subdomain
|
||||||
pm_genpd_init
|
pm_genpd_init
|
||||||
pm_genpd_remove
|
pm_genpd_remove
|
||||||
|
@ -2192,6 +2206,7 @@
|
||||||
thermal_zone_device_unregister
|
thermal_zone_device_unregister
|
||||||
thermal_zone_device_update
|
thermal_zone_device_update
|
||||||
thermal_zone_get_num_trips
|
thermal_zone_get_num_trips
|
||||||
|
thermal_zone_get_temp
|
||||||
__thermal_zone_get_trip
|
__thermal_zone_get_trip
|
||||||
thermal_zone_get_trip
|
thermal_zone_get_trip
|
||||||
thermal_zone_get_zone_by_name
|
thermal_zone_get_zone_by_name
|
||||||
|
|
|
@ -51,6 +51,8 @@
|
||||||
v4l2_ctrl_type_op_log
|
v4l2_ctrl_type_op_log
|
||||||
v4l2_m2m_buf_done_and_job_finish
|
v4l2_m2m_buf_done_and_job_finish
|
||||||
v4l2_m2m_last_buf
|
v4l2_m2m_last_buf
|
||||||
|
v4l2_type_names
|
||||||
|
devm_devfreq_register_opp_notifier
|
||||||
|
|
||||||
# required by jpu_heap.ko
|
# required by jpu_heap.ko
|
||||||
kmem_cache_size
|
kmem_cache_size
|
||||||
|
@ -64,3 +66,9 @@
|
||||||
# required by xhci-asr.ko
|
# required by xhci-asr.ko
|
||||||
extcon_find_edev_by_node
|
extcon_find_edev_by_node
|
||||||
|
|
||||||
|
# required by clk-asr.ko
|
||||||
|
clk_register_mux_table
|
||||||
|
|
||||||
|
# required by keypad-asr.ko
|
||||||
|
input_device_enabled
|
||||||
|
fwnode_create_software_node
|
||||||
|
|
|
@ -79,6 +79,7 @@
|
||||||
__traceiter_android_rvh_report_bug
|
__traceiter_android_rvh_report_bug
|
||||||
__traceiter_android_rvh_try_alloc_pages
|
__traceiter_android_rvh_try_alloc_pages
|
||||||
__traceiter_android_rvh_try_alloc_pages_gfp
|
__traceiter_android_rvh_try_alloc_pages_gfp
|
||||||
|
__traceiter_android_rvh_usb_dev_suspend
|
||||||
__traceiter_android_vh_alloc_contig_range_not_isolated
|
__traceiter_android_vh_alloc_contig_range_not_isolated
|
||||||
__traceiter_android_vh_alloc_pages_slowpath_start
|
__traceiter_android_vh_alloc_pages_slowpath_start
|
||||||
__traceiter_android_vh_alloc_pages_slowpath_end
|
__traceiter_android_vh_alloc_pages_slowpath_end
|
||||||
|
@ -112,6 +113,7 @@
|
||||||
__traceiter_android_vh_madvise_pageout_swap_entry
|
__traceiter_android_vh_madvise_pageout_swap_entry
|
||||||
__traceiter_android_vh_madvise_swapin_walk_pmd_entry
|
__traceiter_android_vh_madvise_swapin_walk_pmd_entry
|
||||||
__traceiter_android_vh_meminfo_proc_show
|
__traceiter_android_vh_meminfo_proc_show
|
||||||
|
__traceiter_android_vh_migration_target_bypass
|
||||||
__traceiter_android_vh_mmc_update_mmc_queue
|
__traceiter_android_vh_mmc_update_mmc_queue
|
||||||
__traceiter_android_vh_si_meminfo_adjust_shmem
|
__traceiter_android_vh_si_meminfo_adjust_shmem
|
||||||
__traceiter_android_vh_shmem_mod_shmem
|
__traceiter_android_vh_shmem_mod_shmem
|
||||||
|
@ -130,18 +132,21 @@
|
||||||
__traceiter_android_vh_smaps_pte_entry
|
__traceiter_android_vh_smaps_pte_entry
|
||||||
__traceiter_android_vh_smaps_swap_shared
|
__traceiter_android_vh_smaps_swap_shared
|
||||||
__traceiter_android_vh_show_smap_swap_shared
|
__traceiter_android_vh_show_smap_swap_shared
|
||||||
__traceiter_android_vh_suitable_migration_target_bypass
|
|
||||||
__traceiter_android_vh_split_large_folio_bypass
|
__traceiter_android_vh_split_large_folio_bypass
|
||||||
__traceiter_android_vh_sync_irq_wait_finish
|
__traceiter_android_vh_sync_irq_wait_finish
|
||||||
__traceiter_android_vh_sync_irq_wait_start
|
__traceiter_android_vh_sync_irq_wait_start
|
||||||
__traceiter_android_vh_try_to_freeze_todo
|
__traceiter_android_vh_try_to_freeze_todo
|
||||||
__traceiter_android_vh_try_to_freeze_todo_unfrozen
|
__traceiter_android_vh_try_to_freeze_todo_unfrozen
|
||||||
__traceiter_android_vh_tune_scan_control
|
__traceiter_android_vh_tune_scan_control
|
||||||
|
__traceiter_android_vh_usb_dev_resume
|
||||||
|
__traceiter_android_vh_usb_new_device_added
|
||||||
__traceiter_android_vh_use_vm_swappiness
|
__traceiter_android_vh_use_vm_swappiness
|
||||||
__traceiter_android_vh_warn_alloc_tune_ratelimit
|
__traceiter_android_vh_warn_alloc_tune_ratelimit
|
||||||
__traceiter_android_vh_warn_alloc_show_mem_bypass
|
__traceiter_android_vh_warn_alloc_show_mem_bypass
|
||||||
__traceiter_android_vh_watchdog_timer_softlockup
|
__traceiter_android_vh_watchdog_timer_softlockup
|
||||||
__traceiter_android_vh_wq_lockup_pool
|
__traceiter_android_vh_wq_lockup_pool
|
||||||
|
__traceiter_android_vh_xhci_resume
|
||||||
|
__traceiter_android_vh_xhci_suspend
|
||||||
__traceiter_android_vh_zs_shrinker_adjust
|
__traceiter_android_vh_zs_shrinker_adjust
|
||||||
__traceiter_android_vh_zs_shrinker_bypass
|
__traceiter_android_vh_zs_shrinker_bypass
|
||||||
__traceiter_console
|
__traceiter_console
|
||||||
|
@ -163,6 +168,7 @@
|
||||||
__tracepoint_android_rvh_report_bug
|
__tracepoint_android_rvh_report_bug
|
||||||
__tracepoint_android_rvh_try_alloc_pages
|
__tracepoint_android_rvh_try_alloc_pages
|
||||||
__tracepoint_android_rvh_try_alloc_pages_gfp
|
__tracepoint_android_rvh_try_alloc_pages_gfp
|
||||||
|
__tracepoint_android_rvh_usb_dev_suspend
|
||||||
__tracepoint_android_vh_alloc_contig_range_not_isolated
|
__tracepoint_android_vh_alloc_contig_range_not_isolated
|
||||||
__tracepoint_android_vh_alloc_pages_slowpath_start
|
__tracepoint_android_vh_alloc_pages_slowpath_start
|
||||||
__tracepoint_android_vh_alloc_pages_slowpath_end
|
__tracepoint_android_vh_alloc_pages_slowpath_end
|
||||||
|
@ -196,6 +202,7 @@
|
||||||
__tracepoint_android_vh_madvise_pageout_swap_entry
|
__tracepoint_android_vh_madvise_pageout_swap_entry
|
||||||
__tracepoint_android_vh_madvise_swapin_walk_pmd_entry
|
__tracepoint_android_vh_madvise_swapin_walk_pmd_entry
|
||||||
__tracepoint_android_vh_meminfo_proc_show
|
__tracepoint_android_vh_meminfo_proc_show
|
||||||
|
__tracepoint_android_vh_migration_target_bypass
|
||||||
__tracepoint_android_vh_mmc_update_mmc_queue
|
__tracepoint_android_vh_mmc_update_mmc_queue
|
||||||
__tracepoint_android_vh_si_meminfo_adjust_shmem
|
__tracepoint_android_vh_si_meminfo_adjust_shmem
|
||||||
__tracepoint_android_vh_shmem_mod_shmem
|
__tracepoint_android_vh_shmem_mod_shmem
|
||||||
|
@ -215,17 +222,20 @@
|
||||||
__tracepoint_android_vh_smaps_swap_shared
|
__tracepoint_android_vh_smaps_swap_shared
|
||||||
__tracepoint_android_vh_show_smap_swap_shared
|
__tracepoint_android_vh_show_smap_swap_shared
|
||||||
__tracepoint_android_vh_split_large_folio_bypass
|
__tracepoint_android_vh_split_large_folio_bypass
|
||||||
__tracepoint_android_vh_suitable_migration_target_bypass
|
|
||||||
__tracepoint_android_vh_sync_irq_wait_finish
|
__tracepoint_android_vh_sync_irq_wait_finish
|
||||||
__tracepoint_android_vh_sync_irq_wait_start
|
__tracepoint_android_vh_sync_irq_wait_start
|
||||||
__tracepoint_android_vh_try_to_freeze_todo
|
__tracepoint_android_vh_try_to_freeze_todo
|
||||||
__tracepoint_android_vh_try_to_freeze_todo_unfrozen
|
__tracepoint_android_vh_try_to_freeze_todo_unfrozen
|
||||||
__tracepoint_android_vh_tune_scan_control
|
__tracepoint_android_vh_tune_scan_control
|
||||||
|
__tracepoint_android_vh_usb_dev_resume
|
||||||
|
__tracepoint_android_vh_usb_new_device_added
|
||||||
__tracepoint_android_vh_use_vm_swappiness
|
__tracepoint_android_vh_use_vm_swappiness
|
||||||
__tracepoint_android_vh_warn_alloc_tune_ratelimit
|
__tracepoint_android_vh_warn_alloc_tune_ratelimit
|
||||||
__tracepoint_android_vh_warn_alloc_show_mem_bypass
|
__tracepoint_android_vh_warn_alloc_show_mem_bypass
|
||||||
__tracepoint_android_vh_watchdog_timer_softlockup
|
__tracepoint_android_vh_watchdog_timer_softlockup
|
||||||
__tracepoint_android_vh_wq_lockup_pool
|
__tracepoint_android_vh_wq_lockup_pool
|
||||||
|
__tracepoint_android_vh_xhci_resume
|
||||||
|
__tracepoint_android_vh_xhci_suspend
|
||||||
__tracepoint_android_vh_zs_shrinker_adjust
|
__tracepoint_android_vh_zs_shrinker_adjust
|
||||||
__tracepoint_android_vh_zs_shrinker_bypass
|
__tracepoint_android_vh_zs_shrinker_bypass
|
||||||
__tracepoint_console
|
__tracepoint_console
|
||||||
|
|
|
@ -55,6 +55,16 @@
|
||||||
tty_unlock
|
tty_unlock
|
||||||
tty_set_ldisc
|
tty_set_ldisc
|
||||||
tty_kclose
|
tty_kclose
|
||||||
|
android_debug_per_cpu_symbol
|
||||||
|
android_debug_symbol
|
||||||
|
__traceiter_rpm_idle
|
||||||
|
__tracepoint_rpm_idle
|
||||||
|
__traceiter_rpm_suspend
|
||||||
|
__tracepoint_rpm_suspend
|
||||||
|
__traceiter_rpm_resume
|
||||||
|
__tracepoint_rpm_resume
|
||||||
|
__traceiter_rpm_return_int
|
||||||
|
__tracepoint_rpm_return_int
|
||||||
__kfifo_len_r
|
__kfifo_len_r
|
||||||
__traceiter_android_vh_killed_process
|
__traceiter_android_vh_killed_process
|
||||||
__tracepoint_android_vh_killed_process
|
__tracepoint_android_vh_killed_process
|
||||||
|
@ -112,6 +122,10 @@
|
||||||
__tracepoint_android_vh_udp_unicast_rcv_skb
|
__tracepoint_android_vh_udp_unicast_rcv_skb
|
||||||
__traceiter_android_vh_udp6_unicast_rcv_skb
|
__traceiter_android_vh_udp6_unicast_rcv_skb
|
||||||
__tracepoint_android_vh_udp6_unicast_rcv_skb
|
__tracepoint_android_vh_udp6_unicast_rcv_skb
|
||||||
|
__traceiter_android_vh_tcp_rcv_established_fast_path
|
||||||
|
__tracepoint_android_vh_tcp_rcv_established_fast_path
|
||||||
|
__traceiter_android_vh_tcp_rcv_established_slow_path
|
||||||
|
__tracepoint_android_vh_tcp_rcv_established_slow_path
|
||||||
__tracepoint_android_vh_si_mem_available_adjust
|
__tracepoint_android_vh_si_mem_available_adjust
|
||||||
__traceiter_android_vh_si_mem_available_adjust
|
__traceiter_android_vh_si_mem_available_adjust
|
||||||
__tracepoint_android_vh_si_meminfo_adjust
|
__tracepoint_android_vh_si_meminfo_adjust
|
||||||
|
@ -236,3 +250,5 @@
|
||||||
__traceiter_android_vh_wq_wake_idle_worker
|
__traceiter_android_vh_wq_wake_idle_worker
|
||||||
__tracepoint_android_vh_wq_queue_work
|
__tracepoint_android_vh_wq_queue_work
|
||||||
__tracepoint_android_vh_wq_wake_idle_worker
|
__tracepoint_android_vh_wq_wake_idle_worker
|
||||||
|
__traceiter_android_vh_mutex_unlock_slowpath_bf_wakeq
|
||||||
|
__tracepoint_android_vh_mutex_unlock_slowpath_bf_wakeq
|
||||||
|
|
|
@ -18,6 +18,7 @@
|
||||||
alarm_start_relative
|
alarm_start_relative
|
||||||
alarm_try_to_cancel
|
alarm_try_to_cancel
|
||||||
alloc_chrdev_region
|
alloc_chrdev_region
|
||||||
|
alloc_contig_range
|
||||||
alloc_etherdev_mqs
|
alloc_etherdev_mqs
|
||||||
alloc_io_pgtable_ops
|
alloc_io_pgtable_ops
|
||||||
alloc_netdev_mqs
|
alloc_netdev_mqs
|
||||||
|
@ -1025,6 +1026,7 @@
|
||||||
frame_vector_destroy
|
frame_vector_destroy
|
||||||
frame_vector_to_pages
|
frame_vector_to_pages
|
||||||
frame_vector_to_pfns
|
frame_vector_to_pfns
|
||||||
|
free_contig_range
|
||||||
free_io_pgtable_ops
|
free_io_pgtable_ops
|
||||||
free_irq
|
free_irq
|
||||||
free_netdev
|
free_netdev
|
||||||
|
@ -1721,6 +1723,8 @@
|
||||||
netdev_rx_handler_register
|
netdev_rx_handler_register
|
||||||
netdev_rx_handler_unregister
|
netdev_rx_handler_unregister
|
||||||
netdev_set_default_ethtool_ops
|
netdev_set_default_ethtool_ops
|
||||||
|
netdev_stats_to_stats64
|
||||||
|
netdev_sw_irq_coalesce_default_on
|
||||||
netdev_update_features
|
netdev_update_features
|
||||||
netdev_upper_dev_link
|
netdev_upper_dev_link
|
||||||
netdev_upper_dev_unlink
|
netdev_upper_dev_unlink
|
||||||
|
@ -1939,6 +1943,7 @@
|
||||||
pci_alloc_irq_vectors_affinity
|
pci_alloc_irq_vectors_affinity
|
||||||
pci_ats_supported
|
pci_ats_supported
|
||||||
pci_bus_type
|
pci_bus_type
|
||||||
|
pci_clear_mwi
|
||||||
pci_device_group
|
pci_device_group
|
||||||
pci_device_is_present
|
pci_device_is_present
|
||||||
pci_dev_put
|
pci_dev_put
|
||||||
|
@ -1990,6 +1995,7 @@
|
||||||
pci_save_state
|
pci_save_state
|
||||||
pci_select_bars
|
pci_select_bars
|
||||||
pci_set_master
|
pci_set_master
|
||||||
|
pci_set_mwi
|
||||||
pci_set_power_state
|
pci_set_power_state
|
||||||
pci_stop_root_bus
|
pci_stop_root_bus
|
||||||
pci_unlock_rescan_remove
|
pci_unlock_rescan_remove
|
||||||
|
@ -2653,6 +2659,7 @@
|
||||||
snd_ctl_boolean_mono_info
|
snd_ctl_boolean_mono_info
|
||||||
snd_jack_set_key
|
snd_jack_set_key
|
||||||
snd_pcm_format_physical_width
|
snd_pcm_format_physical_width
|
||||||
|
snd_pcm_format_set_silence
|
||||||
snd_pcm_format_width
|
snd_pcm_format_width
|
||||||
snd_pcm_hw_constraint_integer
|
snd_pcm_hw_constraint_integer
|
||||||
snd_pcm_hw_constraint_minmax
|
snd_pcm_hw_constraint_minmax
|
||||||
|
@ -3211,6 +3218,7 @@
|
||||||
typec_partner_set_identity
|
typec_partner_set_identity
|
||||||
typec_partner_set_pd_revision
|
typec_partner_set_pd_revision
|
||||||
typec_partner_set_svdm_version
|
typec_partner_set_svdm_version
|
||||||
|
typec_port_register_altmodes
|
||||||
typec_register_partner
|
typec_register_partner
|
||||||
typec_register_port
|
typec_register_port
|
||||||
typec_set_data_role
|
typec_set_data_role
|
||||||
|
|
|
@ -187,7 +187,9 @@
|
||||||
tcf_exts_init_ex
|
tcf_exts_init_ex
|
||||||
tcf_exts_validate
|
tcf_exts_validate
|
||||||
tcf_queue_work
|
tcf_queue_work
|
||||||
|
tcp_cong_avoid_ai
|
||||||
tcp_hashinfo
|
tcp_hashinfo
|
||||||
|
tcp_reno_undo_cwnd
|
||||||
touch_atime
|
touch_atime
|
||||||
__traceiter_android_rvh_post_init_entity_util_avg
|
__traceiter_android_rvh_post_init_entity_util_avg
|
||||||
__traceiter_android_rvh_rtmutex_force_update
|
__traceiter_android_rvh_rtmutex_force_update
|
||||||
|
@ -511,6 +513,7 @@
|
||||||
vfs_path_lookup
|
vfs_path_lookup
|
||||||
vfs_rename
|
vfs_rename
|
||||||
vfs_rmdir
|
vfs_rmdir
|
||||||
|
vfs_splice_read
|
||||||
vfs_statfs
|
vfs_statfs
|
||||||
vfs_unlink
|
vfs_unlink
|
||||||
__vmalloc_array
|
__vmalloc_array
|
||||||
|
|
|
@ -24,6 +24,7 @@
|
||||||
__alloc_skb
|
__alloc_skb
|
||||||
alloc_skb_with_frags
|
alloc_skb_with_frags
|
||||||
alloc_workqueue
|
alloc_workqueue
|
||||||
|
all_vm_events
|
||||||
alt_cb_patch_nops
|
alt_cb_patch_nops
|
||||||
amba_bustype
|
amba_bustype
|
||||||
amba_driver_register
|
amba_driver_register
|
||||||
|
@ -305,6 +306,7 @@
|
||||||
debugfs_create_u8
|
debugfs_create_u8
|
||||||
debugfs_create_x32
|
debugfs_create_x32
|
||||||
debugfs_lookup
|
debugfs_lookup
|
||||||
|
debugfs_lookup_and_remove
|
||||||
debugfs_remove
|
debugfs_remove
|
||||||
debugfs_rename
|
debugfs_rename
|
||||||
default_llseek
|
default_llseek
|
||||||
|
@ -443,6 +445,7 @@
|
||||||
devm_power_supply_register
|
devm_power_supply_register
|
||||||
devm_pwm_get
|
devm_pwm_get
|
||||||
devm_register_reboot_notifier
|
devm_register_reboot_notifier
|
||||||
|
devm_register_sys_off_handler
|
||||||
devm_regmap_add_irq_chip
|
devm_regmap_add_irq_chip
|
||||||
__devm_regmap_init
|
__devm_regmap_init
|
||||||
__devm_regmap_init_i2c
|
__devm_regmap_init_i2c
|
||||||
|
@ -577,6 +580,7 @@
|
||||||
dma_unmap_resource
|
dma_unmap_resource
|
||||||
dma_unmap_sg_attrs
|
dma_unmap_sg_attrs
|
||||||
do_SAK
|
do_SAK
|
||||||
|
do_send_sig_info
|
||||||
do_trace_netlink_extack
|
do_trace_netlink_extack
|
||||||
do_wait_intr_irq
|
do_wait_intr_irq
|
||||||
down
|
down
|
||||||
|
@ -812,6 +816,7 @@
|
||||||
drop_reasons_unregister_subsys
|
drop_reasons_unregister_subsys
|
||||||
dump_backtrace
|
dump_backtrace
|
||||||
dump_stack
|
dump_stack
|
||||||
|
dump_tasks
|
||||||
dw_handle_msi_irq
|
dw_handle_msi_irq
|
||||||
dw_pcie_find_capability
|
dw_pcie_find_capability
|
||||||
dw_pcie_host_init
|
dw_pcie_host_init
|
||||||
|
@ -931,6 +936,7 @@
|
||||||
get_random_u32
|
get_random_u32
|
||||||
__get_random_u32_below
|
__get_random_u32_below
|
||||||
get_random_u8
|
get_random_u8
|
||||||
|
get_reclaim_params
|
||||||
get_sg_io_hdr
|
get_sg_io_hdr
|
||||||
__get_task_comm
|
__get_task_comm
|
||||||
get_task_cred
|
get_task_cred
|
||||||
|
@ -1068,6 +1074,7 @@
|
||||||
init_dummy_netdev
|
init_dummy_netdev
|
||||||
init_iova_domain
|
init_iova_domain
|
||||||
init_net
|
init_net
|
||||||
|
init_on_free
|
||||||
init_pid_ns
|
init_pid_ns
|
||||||
__init_rwsem
|
__init_rwsem
|
||||||
__init_swait_queue_head
|
__init_swait_queue_head
|
||||||
|
@ -1522,6 +1529,7 @@
|
||||||
of_reserved_mem_lookup
|
of_reserved_mem_lookup
|
||||||
of_root
|
of_root
|
||||||
of_usb_host_tpl_support
|
of_usb_host_tpl_support
|
||||||
|
__oom_reap_task_mm
|
||||||
page_frag_alloc_align
|
page_frag_alloc_align
|
||||||
__page_frag_cache_drain
|
__page_frag_cache_drain
|
||||||
page_frag_free
|
page_frag_free
|
||||||
|
@ -1543,6 +1551,7 @@
|
||||||
param_ops_ulong
|
param_ops_ulong
|
||||||
param_set_copystring
|
param_set_copystring
|
||||||
param_set_int
|
param_set_int
|
||||||
|
param_set_uint
|
||||||
param_set_uint_minmax
|
param_set_uint_minmax
|
||||||
pci_alloc_irq_vectors
|
pci_alloc_irq_vectors
|
||||||
pci_alloc_irq_vectors_affinity
|
pci_alloc_irq_vectors_affinity
|
||||||
|
@ -1556,6 +1565,7 @@
|
||||||
pci_find_bus
|
pci_find_bus
|
||||||
pci_find_capability
|
pci_find_capability
|
||||||
pci_find_ext_capability
|
pci_find_ext_capability
|
||||||
|
pci_free_irq
|
||||||
pci_free_irq_vectors
|
pci_free_irq_vectors
|
||||||
pci_get_device
|
pci_get_device
|
||||||
pci_iomap
|
pci_iomap
|
||||||
|
@ -1570,6 +1580,7 @@
|
||||||
__pci_register_driver
|
__pci_register_driver
|
||||||
pci_release_region
|
pci_release_region
|
||||||
pci_release_regions
|
pci_release_regions
|
||||||
|
pci_request_irq
|
||||||
pci_request_region
|
pci_request_region
|
||||||
pci_rescan_bus
|
pci_rescan_bus
|
||||||
pci_restore_msi_state
|
pci_restore_msi_state
|
||||||
|
@ -1911,6 +1922,7 @@
|
||||||
sched_uclamp_used
|
sched_uclamp_used
|
||||||
schedule
|
schedule
|
||||||
schedule_timeout
|
schedule_timeout
|
||||||
|
schedule_timeout_idle
|
||||||
schedule_timeout_interruptible
|
schedule_timeout_interruptible
|
||||||
scnprintf
|
scnprintf
|
||||||
scsi_alloc_request
|
scsi_alloc_request
|
||||||
|
@ -1936,6 +1948,8 @@
|
||||||
__seq_open_private
|
__seq_open_private
|
||||||
seq_printf
|
seq_printf
|
||||||
seq_putc
|
seq_putc
|
||||||
|
seq_put_decimal_ull
|
||||||
|
seq_put_decimal_ull_width
|
||||||
seq_puts
|
seq_puts
|
||||||
seq_read
|
seq_read
|
||||||
seq_release
|
seq_release
|
||||||
|
@ -1950,6 +1964,7 @@
|
||||||
set_page_dirty
|
set_page_dirty
|
||||||
set_page_dirty_lock
|
set_page_dirty_lock
|
||||||
__SetPageMovable
|
__SetPageMovable
|
||||||
|
set_reclaim_params
|
||||||
set_task_cpu
|
set_task_cpu
|
||||||
set_user_nice
|
set_user_nice
|
||||||
sg_alloc_table
|
sg_alloc_table
|
||||||
|
@ -1961,6 +1976,7 @@
|
||||||
__sg_page_iter_next
|
__sg_page_iter_next
|
||||||
__sg_page_iter_start
|
__sg_page_iter_start
|
||||||
shmem_file_setup
|
shmem_file_setup
|
||||||
|
si_meminfo
|
||||||
simple_attr_open
|
simple_attr_open
|
||||||
simple_attr_read
|
simple_attr_read
|
||||||
simple_attr_release
|
simple_attr_release
|
||||||
|
@ -2251,6 +2267,7 @@
|
||||||
thermal_zone_get_trip
|
thermal_zone_get_trip
|
||||||
thermal_zone_get_zone_by_name
|
thermal_zone_get_zone_by_name
|
||||||
thread_group_cputime_adjusted
|
thread_group_cputime_adjusted
|
||||||
|
tick_nohz_get_idle_calls_cpu
|
||||||
time64_to_tm
|
time64_to_tm
|
||||||
timer_delete
|
timer_delete
|
||||||
timer_delete_sync
|
timer_delete_sync
|
||||||
|
@ -2272,6 +2289,7 @@
|
||||||
__traceiter_android_rvh_dequeue_task
|
__traceiter_android_rvh_dequeue_task
|
||||||
__traceiter_android_rvh_dequeue_task_fair
|
__traceiter_android_rvh_dequeue_task_fair
|
||||||
__traceiter_android_rvh_detach_entity_load_avg
|
__traceiter_android_rvh_detach_entity_load_avg
|
||||||
|
__traceiter_android_rvh_do_read_fault
|
||||||
__traceiter_android_rvh_enqueue_task
|
__traceiter_android_rvh_enqueue_task
|
||||||
__traceiter_android_rvh_enqueue_task_fair
|
__traceiter_android_rvh_enqueue_task_fair
|
||||||
__traceiter_android_rvh_find_lowest_rq
|
__traceiter_android_rvh_find_lowest_rq
|
||||||
|
@ -2280,9 +2298,14 @@
|
||||||
__traceiter_android_rvh_iommu_limit_align_shift
|
__traceiter_android_rvh_iommu_limit_align_shift
|
||||||
__traceiter_android_rvh_irqs_disable
|
__traceiter_android_rvh_irqs_disable
|
||||||
__traceiter_android_rvh_irqs_enable
|
__traceiter_android_rvh_irqs_enable
|
||||||
|
__traceiter_android_rvh_madvise_pageout_begin
|
||||||
|
__traceiter_android_rvh_madvise_pageout_end
|
||||||
|
__traceiter_android_rvh_mapping_shrinkable
|
||||||
|
__traceiter_android_rvh_meminfo_proc_show
|
||||||
__traceiter_android_rvh_post_init_entity_util_avg
|
__traceiter_android_rvh_post_init_entity_util_avg
|
||||||
__traceiter_android_rvh_preempt_disable
|
__traceiter_android_rvh_preempt_disable
|
||||||
__traceiter_android_rvh_preempt_enable
|
__traceiter_android_rvh_preempt_enable
|
||||||
|
__traceiter_android_rvh_reclaim_folio_list
|
||||||
__traceiter_android_rvh_remove_entity_load_avg
|
__traceiter_android_rvh_remove_entity_load_avg
|
||||||
__traceiter_android_rvh_rtmutex_prepare_setprio
|
__traceiter_android_rvh_rtmutex_prepare_setprio
|
||||||
__traceiter_android_rvh_sched_newidle_balance
|
__traceiter_android_rvh_sched_newidle_balance
|
||||||
|
@ -2306,24 +2329,33 @@
|
||||||
__traceiter_android_rvh_util_est_update
|
__traceiter_android_rvh_util_est_update
|
||||||
__traceiter_android_rvh_util_fits_cpu
|
__traceiter_android_rvh_util_fits_cpu
|
||||||
__traceiter_android_vh_arch_set_freq_scale
|
__traceiter_android_vh_arch_set_freq_scale
|
||||||
|
__traceiter_android_vh_binder_proc_transaction_finish
|
||||||
__traceiter_android_vh_binder_restore_priority
|
__traceiter_android_vh_binder_restore_priority
|
||||||
__traceiter_android_vh_binder_set_priority
|
__traceiter_android_vh_binder_set_priority
|
||||||
|
__traceiter_android_vh_check_new_page
|
||||||
__traceiter_android_vh_cpu_idle_enter
|
__traceiter_android_vh_cpu_idle_enter
|
||||||
__traceiter_android_vh_cpu_idle_exit
|
__traceiter_android_vh_cpu_idle_exit
|
||||||
__traceiter_android_vh_dump_throttled_rt_tasks
|
__traceiter_android_vh_dump_throttled_rt_tasks
|
||||||
__traceiter_android_vh_dup_task_struct
|
__traceiter_android_vh_dup_task_struct
|
||||||
__traceiter_android_vh_early_resume_begin
|
__traceiter_android_vh_early_resume_begin
|
||||||
__traceiter_android_vh_enable_thermal_genl_check
|
__traceiter_android_vh_enable_thermal_genl_check
|
||||||
|
__traceiter_android_vh_filemap_get_folio
|
||||||
|
__traceiter_android_vh_free_pages_prepare_init
|
||||||
__traceiter_android_vh_ipi_stop
|
__traceiter_android_vh_ipi_stop
|
||||||
|
__traceiter_android_vh_mm_compaction_begin
|
||||||
|
__traceiter_android_vh_mm_compaction_end
|
||||||
__traceiter_android_vh_mm_kcompactd_cpu_online
|
__traceiter_android_vh_mm_kcompactd_cpu_online
|
||||||
|
__traceiter_android_vh_post_alloc_hook
|
||||||
__traceiter_android_vh_prio_inheritance
|
__traceiter_android_vh_prio_inheritance
|
||||||
__traceiter_android_vh_prio_restore
|
__traceiter_android_vh_prio_restore
|
||||||
__traceiter_android_vh_resume_end
|
__traceiter_android_vh_resume_end
|
||||||
|
__traceiter_android_vh_rmqueue
|
||||||
__traceiter_android_vh_scheduler_tick
|
__traceiter_android_vh_scheduler_tick
|
||||||
__traceiter_android_vh_setscheduler_uclamp
|
__traceiter_android_vh_setscheduler_uclamp
|
||||||
__traceiter_android_vh_set_task_comm
|
__traceiter_android_vh_set_task_comm
|
||||||
__traceiter_android_vh_si_meminfo_adjust
|
__traceiter_android_vh_si_meminfo_adjust
|
||||||
__traceiter_android_vh_sysrq_crash
|
__traceiter_android_vh_sysrq_crash
|
||||||
|
__traceiter_android_vh_tune_swappiness
|
||||||
__traceiter_android_vh_uclamp_validate
|
__traceiter_android_vh_uclamp_validate
|
||||||
__traceiter_android_vh_ufs_check_int_errors
|
__traceiter_android_vh_ufs_check_int_errors
|
||||||
__traceiter_android_vh_ufs_compl_command
|
__traceiter_android_vh_ufs_compl_command
|
||||||
|
@ -2336,6 +2368,8 @@
|
||||||
__traceiter_android_vh_ufs_update_sysfs
|
__traceiter_android_vh_ufs_update_sysfs
|
||||||
__traceiter_android_vh_use_amu_fie
|
__traceiter_android_vh_use_amu_fie
|
||||||
__traceiter_clock_set_rate
|
__traceiter_clock_set_rate
|
||||||
|
__traceiter_cma_alloc_finish
|
||||||
|
__traceiter_cma_alloc_start
|
||||||
__traceiter_cpu_idle
|
__traceiter_cpu_idle
|
||||||
__traceiter_device_pm_callback_end
|
__traceiter_device_pm_callback_end
|
||||||
__traceiter_device_pm_callback_start
|
__traceiter_device_pm_callback_start
|
||||||
|
@ -2373,6 +2407,7 @@
|
||||||
__tracepoint_android_rvh_dequeue_task
|
__tracepoint_android_rvh_dequeue_task
|
||||||
__tracepoint_android_rvh_dequeue_task_fair
|
__tracepoint_android_rvh_dequeue_task_fair
|
||||||
__tracepoint_android_rvh_detach_entity_load_avg
|
__tracepoint_android_rvh_detach_entity_load_avg
|
||||||
|
__tracepoint_android_rvh_do_read_fault
|
||||||
__tracepoint_android_rvh_enqueue_task
|
__tracepoint_android_rvh_enqueue_task
|
||||||
__tracepoint_android_rvh_enqueue_task_fair
|
__tracepoint_android_rvh_enqueue_task_fair
|
||||||
__tracepoint_android_rvh_find_lowest_rq
|
__tracepoint_android_rvh_find_lowest_rq
|
||||||
|
@ -2381,9 +2416,14 @@
|
||||||
__tracepoint_android_rvh_iommu_limit_align_shift
|
__tracepoint_android_rvh_iommu_limit_align_shift
|
||||||
__tracepoint_android_rvh_irqs_disable
|
__tracepoint_android_rvh_irqs_disable
|
||||||
__tracepoint_android_rvh_irqs_enable
|
__tracepoint_android_rvh_irqs_enable
|
||||||
|
__tracepoint_android_rvh_madvise_pageout_begin
|
||||||
|
__tracepoint_android_rvh_madvise_pageout_end
|
||||||
|
__tracepoint_android_rvh_mapping_shrinkable
|
||||||
|
__tracepoint_android_rvh_meminfo_proc_show
|
||||||
__tracepoint_android_rvh_post_init_entity_util_avg
|
__tracepoint_android_rvh_post_init_entity_util_avg
|
||||||
__tracepoint_android_rvh_preempt_disable
|
__tracepoint_android_rvh_preempt_disable
|
||||||
__tracepoint_android_rvh_preempt_enable
|
__tracepoint_android_rvh_preempt_enable
|
||||||
|
__tracepoint_android_rvh_reclaim_folio_list
|
||||||
__tracepoint_android_rvh_remove_entity_load_avg
|
__tracepoint_android_rvh_remove_entity_load_avg
|
||||||
__tracepoint_android_rvh_rtmutex_prepare_setprio
|
__tracepoint_android_rvh_rtmutex_prepare_setprio
|
||||||
__tracepoint_android_rvh_sched_newidle_balance
|
__tracepoint_android_rvh_sched_newidle_balance
|
||||||
|
@ -2407,24 +2447,33 @@
|
||||||
__tracepoint_android_rvh_util_est_update
|
__tracepoint_android_rvh_util_est_update
|
||||||
__tracepoint_android_rvh_util_fits_cpu
|
__tracepoint_android_rvh_util_fits_cpu
|
||||||
__tracepoint_android_vh_arch_set_freq_scale
|
__tracepoint_android_vh_arch_set_freq_scale
|
||||||
|
__tracepoint_android_vh_binder_proc_transaction_finish
|
||||||
__tracepoint_android_vh_binder_restore_priority
|
__tracepoint_android_vh_binder_restore_priority
|
||||||
__tracepoint_android_vh_binder_set_priority
|
__tracepoint_android_vh_binder_set_priority
|
||||||
|
__tracepoint_android_vh_check_new_page
|
||||||
__tracepoint_android_vh_cpu_idle_enter
|
__tracepoint_android_vh_cpu_idle_enter
|
||||||
__tracepoint_android_vh_cpu_idle_exit
|
__tracepoint_android_vh_cpu_idle_exit
|
||||||
__tracepoint_android_vh_dump_throttled_rt_tasks
|
__tracepoint_android_vh_dump_throttled_rt_tasks
|
||||||
__tracepoint_android_vh_dup_task_struct
|
__tracepoint_android_vh_dup_task_struct
|
||||||
__tracepoint_android_vh_early_resume_begin
|
__tracepoint_android_vh_early_resume_begin
|
||||||
__tracepoint_android_vh_enable_thermal_genl_check
|
__tracepoint_android_vh_enable_thermal_genl_check
|
||||||
|
__tracepoint_android_vh_filemap_get_folio
|
||||||
|
__tracepoint_android_vh_free_pages_prepare_init
|
||||||
__tracepoint_android_vh_ipi_stop
|
__tracepoint_android_vh_ipi_stop
|
||||||
|
__tracepoint_android_vh_mm_compaction_begin
|
||||||
|
__tracepoint_android_vh_mm_compaction_end
|
||||||
__tracepoint_android_vh_mm_kcompactd_cpu_online
|
__tracepoint_android_vh_mm_kcompactd_cpu_online
|
||||||
|
__tracepoint_android_vh_post_alloc_hook
|
||||||
__tracepoint_android_vh_prio_inheritance
|
__tracepoint_android_vh_prio_inheritance
|
||||||
__tracepoint_android_vh_prio_restore
|
__tracepoint_android_vh_prio_restore
|
||||||
__tracepoint_android_vh_resume_end
|
__tracepoint_android_vh_resume_end
|
||||||
|
__tracepoint_android_vh_rmqueue
|
||||||
__tracepoint_android_vh_scheduler_tick
|
__tracepoint_android_vh_scheduler_tick
|
||||||
__tracepoint_android_vh_setscheduler_uclamp
|
__tracepoint_android_vh_setscheduler_uclamp
|
||||||
__tracepoint_android_vh_set_task_comm
|
__tracepoint_android_vh_set_task_comm
|
||||||
__tracepoint_android_vh_si_meminfo_adjust
|
__tracepoint_android_vh_si_meminfo_adjust
|
||||||
__tracepoint_android_vh_sysrq_crash
|
__tracepoint_android_vh_sysrq_crash
|
||||||
|
__tracepoint_android_vh_tune_swappiness
|
||||||
__tracepoint_android_vh_uclamp_validate
|
__tracepoint_android_vh_uclamp_validate
|
||||||
__tracepoint_android_vh_ufs_check_int_errors
|
__tracepoint_android_vh_ufs_check_int_errors
|
||||||
__tracepoint_android_vh_ufs_compl_command
|
__tracepoint_android_vh_ufs_compl_command
|
||||||
|
@ -2437,6 +2486,8 @@
|
||||||
__tracepoint_android_vh_ufs_update_sysfs
|
__tracepoint_android_vh_ufs_update_sysfs
|
||||||
__tracepoint_android_vh_use_amu_fie
|
__tracepoint_android_vh_use_amu_fie
|
||||||
__tracepoint_clock_set_rate
|
__tracepoint_clock_set_rate
|
||||||
|
__tracepoint_cma_alloc_finish
|
||||||
|
__tracepoint_cma_alloc_start
|
||||||
__tracepoint_cpu_idle
|
__tracepoint_cpu_idle
|
||||||
__tracepoint_device_pm_callback_end
|
__tracepoint_device_pm_callback_end
|
||||||
__tracepoint_device_pm_callback_start
|
__tracepoint_device_pm_callback_start
|
||||||
|
@ -2662,6 +2713,7 @@
|
||||||
vmf_insert_pfn_prot
|
vmf_insert_pfn_prot
|
||||||
vm_node_stat
|
vm_node_stat
|
||||||
vm_unmapped_area
|
vm_unmapped_area
|
||||||
|
vm_zone_stat
|
||||||
vprintk
|
vprintk
|
||||||
vprintk_emit
|
vprintk_emit
|
||||||
vring_del_virtqueue
|
vring_del_virtqueue
|
||||||
|
@ -2677,6 +2729,7 @@
|
||||||
wait_for_completion_interruptible_timeout
|
wait_for_completion_interruptible_timeout
|
||||||
wait_for_completion_killable
|
wait_for_completion_killable
|
||||||
wait_for_completion_timeout
|
wait_for_completion_timeout
|
||||||
|
wait_on_page_writeback
|
||||||
wait_woken
|
wait_woken
|
||||||
__wake_up
|
__wake_up
|
||||||
__wake_up_locked
|
__wake_up_locked
|
||||||
|
@ -2717,6 +2770,12 @@
|
||||||
xhci_init_driver
|
xhci_init_driver
|
||||||
xhci_resume
|
xhci_resume
|
||||||
xhci_run
|
xhci_run
|
||||||
|
xhci_sideband_add_endpoint
|
||||||
|
xhci_sideband_create_interrupter
|
||||||
|
xhci_sideband_register
|
||||||
|
xhci_sideband_remove_endpoint
|
||||||
|
xhci_sideband_remove_interrupter
|
||||||
|
xhci_sideband_unregister
|
||||||
xhci_suspend
|
xhci_suspend
|
||||||
zs_compact
|
zs_compact
|
||||||
zs_create_pool
|
zs_create_pool
|
||||||
|
|
|
@ -82,6 +82,7 @@
|
||||||
cache_line_size
|
cache_line_size
|
||||||
cancel_delayed_work
|
cancel_delayed_work
|
||||||
cancel_delayed_work_sync
|
cancel_delayed_work_sync
|
||||||
|
cancel_work
|
||||||
cancel_work_sync
|
cancel_work_sync
|
||||||
capable
|
capable
|
||||||
cdev_add
|
cdev_add
|
||||||
|
@ -97,10 +98,12 @@
|
||||||
check_preempt_curr
|
check_preempt_curr
|
||||||
check_zeroed_user
|
check_zeroed_user
|
||||||
class_create
|
class_create
|
||||||
|
class_create_file_ns
|
||||||
class_destroy
|
class_destroy
|
||||||
class_find_device
|
class_find_device
|
||||||
class_for_each_device
|
class_for_each_device
|
||||||
class_register
|
class_register
|
||||||
|
class_remove_file_ns
|
||||||
class_unregister
|
class_unregister
|
||||||
cleanup_srcu_struct
|
cleanup_srcu_struct
|
||||||
clear_page
|
clear_page
|
||||||
|
@ -295,8 +298,10 @@
|
||||||
_dev_err
|
_dev_err
|
||||||
dev_err_probe
|
dev_err_probe
|
||||||
devfreq_add_device
|
devfreq_add_device
|
||||||
|
devfreq_add_governor
|
||||||
devfreq_get_devfreq_by_node
|
devfreq_get_devfreq_by_node
|
||||||
devfreq_remove_device
|
devfreq_remove_device
|
||||||
|
devfreq_remove_governor
|
||||||
devfreq_resume_device
|
devfreq_resume_device
|
||||||
devfreq_suspend_device
|
devfreq_suspend_device
|
||||||
__dev_fwnode
|
__dev_fwnode
|
||||||
|
@ -888,6 +893,7 @@
|
||||||
housekeeping_test_cpu
|
housekeeping_test_cpu
|
||||||
hrtimer_active
|
hrtimer_active
|
||||||
hrtimer_cancel
|
hrtimer_cancel
|
||||||
|
hrtimer_forward
|
||||||
__hrtimer_get_remaining
|
__hrtimer_get_remaining
|
||||||
hrtimer_init
|
hrtimer_init
|
||||||
hrtimer_start_range_ns
|
hrtimer_start_range_ns
|
||||||
|
@ -1127,6 +1133,7 @@
|
||||||
kobject_uevent_env
|
kobject_uevent_env
|
||||||
kobj_sysfs_ops
|
kobj_sysfs_ops
|
||||||
krealloc
|
krealloc
|
||||||
|
kset_create_and_add
|
||||||
ksize
|
ksize
|
||||||
ksoftirqd
|
ksoftirqd
|
||||||
kstat_irqs_usr
|
kstat_irqs_usr
|
||||||
|
@ -1494,9 +1501,11 @@
|
||||||
pm_clk_suspend
|
pm_clk_suspend
|
||||||
pm_generic_resume
|
pm_generic_resume
|
||||||
pm_generic_suspend
|
pm_generic_suspend
|
||||||
|
pm_genpd_add_device
|
||||||
pm_genpd_add_subdomain
|
pm_genpd_add_subdomain
|
||||||
pm_genpd_init
|
pm_genpd_init
|
||||||
pm_genpd_remove
|
pm_genpd_remove
|
||||||
|
pm_genpd_remove_device
|
||||||
pm_genpd_remove_subdomain
|
pm_genpd_remove_subdomain
|
||||||
pm_power_off
|
pm_power_off
|
||||||
__pm_relax
|
__pm_relax
|
||||||
|
@ -1546,6 +1555,7 @@
|
||||||
proc_dostring
|
proc_dostring
|
||||||
proc_douintvec_minmax
|
proc_douintvec_minmax
|
||||||
proc_mkdir
|
proc_mkdir
|
||||||
|
proc_remove
|
||||||
proto_register
|
proto_register
|
||||||
proto_unregister
|
proto_unregister
|
||||||
pskb_expand_head
|
pskb_expand_head
|
||||||
|
@ -1615,6 +1625,7 @@
|
||||||
rebuild_sched_domains
|
rebuild_sched_domains
|
||||||
refcount_dec_not_one
|
refcount_dec_not_one
|
||||||
refcount_warn_saturate
|
refcount_warn_saturate
|
||||||
|
regcache_cache_bypass
|
||||||
regcache_cache_only
|
regcache_cache_only
|
||||||
regcache_mark_dirty
|
regcache_mark_dirty
|
||||||
regcache_sync
|
regcache_sync
|
||||||
|
@ -1726,6 +1737,7 @@
|
||||||
rproc_report_crash
|
rproc_report_crash
|
||||||
rproc_set_firmware
|
rproc_set_firmware
|
||||||
rproc_shutdown
|
rproc_shutdown
|
||||||
|
rtc_add_group
|
||||||
rtc_class_close
|
rtc_class_close
|
||||||
rtc_class_open
|
rtc_class_open
|
||||||
rtc_read_time
|
rtc_read_time
|
||||||
|
@ -1795,6 +1807,7 @@
|
||||||
sdio_writew
|
sdio_writew
|
||||||
select_fallback_rq
|
select_fallback_rq
|
||||||
send_sig_info
|
send_sig_info
|
||||||
|
seq_buf_printf
|
||||||
seq_hex_dump
|
seq_hex_dump
|
||||||
seq_lseek
|
seq_lseek
|
||||||
seq_open
|
seq_open
|
||||||
|
@ -1984,6 +1997,7 @@
|
||||||
strnstr
|
strnstr
|
||||||
strpbrk
|
strpbrk
|
||||||
strrchr
|
strrchr
|
||||||
|
strreplace
|
||||||
strscpy
|
strscpy
|
||||||
strscpy_pad
|
strscpy_pad
|
||||||
strsep
|
strsep
|
||||||
|
@ -2231,6 +2245,7 @@
|
||||||
__trace_trigger_soft_disabled
|
__trace_trigger_soft_disabled
|
||||||
tracing_off
|
tracing_off
|
||||||
try_module_get
|
try_module_get
|
||||||
|
try_to_del_timer_sync
|
||||||
try_wait_for_completion
|
try_wait_for_completion
|
||||||
tty_flip_buffer_push
|
tty_flip_buffer_push
|
||||||
__tty_insert_flip_string_flags
|
__tty_insert_flip_string_flags
|
||||||
|
@ -2293,6 +2308,8 @@
|
||||||
usb_free_all_descriptors
|
usb_free_all_descriptors
|
||||||
usb_function_register
|
usb_function_register
|
||||||
usb_function_unregister
|
usb_function_unregister
|
||||||
|
usb_gadget_connect
|
||||||
|
usb_gadget_disconnect
|
||||||
usb_gadget_wakeup
|
usb_gadget_wakeup
|
||||||
usb_hcd_is_primary_hcd
|
usb_hcd_is_primary_hcd
|
||||||
usb_interface_id
|
usb_interface_id
|
||||||
|
@ -2310,6 +2327,7 @@
|
||||||
usb_unregister_notify
|
usb_unregister_notify
|
||||||
__usecs_to_jiffies
|
__usecs_to_jiffies
|
||||||
usleep_range_state
|
usleep_range_state
|
||||||
|
utf8_data_table
|
||||||
v4l2_ctrl_find
|
v4l2_ctrl_find
|
||||||
v4l2_ctrl_handler_free
|
v4l2_ctrl_handler_free
|
||||||
v4l2_ctrl_handler_init_class
|
v4l2_ctrl_handler_init_class
|
||||||
|
|
|
@ -1180,12 +1180,15 @@
|
||||||
mmc_cqe_request_done
|
mmc_cqe_request_done
|
||||||
mmc_execute_tuning
|
mmc_execute_tuning
|
||||||
mmc_hs200_tuning
|
mmc_hs200_tuning
|
||||||
|
__mmc_poll_for_busy
|
||||||
|
mmc_prepare_busy_cmd
|
||||||
mmc_issue_type
|
mmc_issue_type
|
||||||
mmc_of_parse
|
mmc_of_parse
|
||||||
mmc_regulator_get_supply
|
mmc_regulator_get_supply
|
||||||
mmc_regulator_set_ocr
|
mmc_regulator_set_ocr
|
||||||
mmc_regulator_set_vqmmc
|
mmc_regulator_set_vqmmc
|
||||||
mmc_retune_hold
|
mmc_retune_hold
|
||||||
|
mmc_retune_release
|
||||||
mmc_select_bus_width
|
mmc_select_bus_width
|
||||||
mmc_select_card
|
mmc_select_card
|
||||||
mmc_select_hs
|
mmc_select_hs
|
||||||
|
@ -2057,6 +2060,8 @@
|
||||||
__traceiter_android_rvh_irqs_disable
|
__traceiter_android_rvh_irqs_disable
|
||||||
__traceiter_android_rvh_irqs_enable
|
__traceiter_android_rvh_irqs_enable
|
||||||
__traceiter_android_rvh_is_cpu_allowed
|
__traceiter_android_rvh_is_cpu_allowed
|
||||||
|
__traceiter_android_rvh_mmc_resume
|
||||||
|
__traceiter_android_rvh_mmc_suspend
|
||||||
__traceiter_android_rvh_new_task_stats
|
__traceiter_android_rvh_new_task_stats
|
||||||
__traceiter_android_rvh_preempt_disable
|
__traceiter_android_rvh_preempt_disable
|
||||||
__traceiter_android_rvh_preempt_enable
|
__traceiter_android_rvh_preempt_enable
|
||||||
|
@ -2161,6 +2166,8 @@
|
||||||
__tracepoint_android_rvh_irqs_disable
|
__tracepoint_android_rvh_irqs_disable
|
||||||
__tracepoint_android_rvh_irqs_enable
|
__tracepoint_android_rvh_irqs_enable
|
||||||
__tracepoint_android_rvh_is_cpu_allowed
|
__tracepoint_android_rvh_is_cpu_allowed
|
||||||
|
__tracepoint_android_rvh_mmc_resume
|
||||||
|
__tracepoint_android_rvh_mmc_suspend
|
||||||
__tracepoint_android_rvh_new_task_stats
|
__tracepoint_android_rvh_new_task_stats
|
||||||
__tracepoint_android_rvh_preempt_disable
|
__tracepoint_android_rvh_preempt_disable
|
||||||
__tracepoint_android_rvh_preempt_enable
|
__tracepoint_android_rvh_preempt_enable
|
||||||
|
@ -2436,6 +2443,7 @@
|
||||||
__xa_alloc
|
__xa_alloc
|
||||||
__xa_alloc_cyclic
|
__xa_alloc_cyclic
|
||||||
xa_destroy
|
xa_destroy
|
||||||
|
__xa_erase
|
||||||
xa_erase
|
xa_erase
|
||||||
xa_find
|
xa_find
|
||||||
xa_find_after
|
xa_find_after
|
||||||
|
|
|
@ -68,6 +68,10 @@
|
||||||
v4l2_ctrl_cluster
|
v4l2_ctrl_cluster
|
||||||
v4l2_g_ctrl
|
v4l2_g_ctrl
|
||||||
v4l2_i2c_new_subdev
|
v4l2_i2c_new_subdev
|
||||||
|
v4l2_src_change_event_subdev_subscribe
|
||||||
|
v4l2_valid_dv_timings
|
||||||
|
v4l2_subdev_notify_event
|
||||||
|
v4l2_ctrl_get_name
|
||||||
vb2_dma_contig_set_max_seg_size
|
vb2_dma_contig_set_max_seg_size
|
||||||
usb_serial_port_softint
|
usb_serial_port_softint
|
||||||
usb_role_switch_get_role
|
usb_role_switch_get_role
|
||||||
|
|
|
@ -26,8 +26,6 @@
|
||||||
cancel_delayed_work_sync
|
cancel_delayed_work_sync
|
||||||
cancel_work_sync
|
cancel_work_sync
|
||||||
__check_object_size
|
__check_object_size
|
||||||
class_register
|
|
||||||
class_unregister
|
|
||||||
clk_disable
|
clk_disable
|
||||||
clk_enable
|
clk_enable
|
||||||
clk_get_rate
|
clk_get_rate
|
||||||
|
@ -42,6 +40,7 @@
|
||||||
cpufreq_unregister_driver
|
cpufreq_unregister_driver
|
||||||
cpu_number
|
cpu_number
|
||||||
__cpu_online_mask
|
__cpu_online_mask
|
||||||
|
__cpu_possible_mask
|
||||||
crc32_le
|
crc32_le
|
||||||
csum_partial
|
csum_partial
|
||||||
debugfs_attr_read
|
debugfs_attr_read
|
||||||
|
@ -60,7 +59,6 @@
|
||||||
dev_close
|
dev_close
|
||||||
_dev_err
|
_dev_err
|
||||||
__dev_get_by_index
|
__dev_get_by_index
|
||||||
device_create
|
|
||||||
device_create_file
|
device_create_file
|
||||||
device_remove_file
|
device_remove_file
|
||||||
device_set_wakeup_capable
|
device_set_wakeup_capable
|
||||||
|
@ -76,20 +74,17 @@
|
||||||
devm_kmalloc
|
devm_kmalloc
|
||||||
devm_platform_ioremap_resource
|
devm_platform_ioremap_resource
|
||||||
devm_request_threaded_irq
|
devm_request_threaded_irq
|
||||||
_dev_notice
|
|
||||||
_dev_printk
|
_dev_printk
|
||||||
__dev_queue_xmit
|
__dev_queue_xmit
|
||||||
devres_add
|
devres_add
|
||||||
__devres_alloc_node
|
__devres_alloc_node
|
||||||
devres_free
|
devres_free
|
||||||
_dev_warn
|
_dev_warn
|
||||||
dma_alloc_attrs
|
|
||||||
dma_buf_export
|
dma_buf_export
|
||||||
dma_fence_context_alloc
|
dma_fence_context_alloc
|
||||||
dma_fence_init
|
dma_fence_init
|
||||||
dma_fence_release
|
dma_fence_release
|
||||||
dma_fence_signal_locked
|
dma_fence_signal_locked
|
||||||
dma_free_attrs
|
|
||||||
dmam_alloc_attrs
|
dmam_alloc_attrs
|
||||||
dma_set_coherent_mask
|
dma_set_coherent_mask
|
||||||
dma_set_mask
|
dma_set_mask
|
||||||
|
@ -161,7 +156,6 @@
|
||||||
flush_delayed_work
|
flush_delayed_work
|
||||||
flush_work
|
flush_work
|
||||||
__flush_workqueue
|
__flush_workqueue
|
||||||
__folio_put
|
|
||||||
fortify_panic
|
fortify_panic
|
||||||
fput
|
fput
|
||||||
free_irq
|
free_irq
|
||||||
|
@ -171,7 +165,6 @@
|
||||||
genlmsg_put
|
genlmsg_put
|
||||||
genl_register_family
|
genl_register_family
|
||||||
genl_unregister_family
|
genl_unregister_family
|
||||||
get_device
|
|
||||||
__get_free_pages
|
__get_free_pages
|
||||||
get_random_bytes
|
get_random_bytes
|
||||||
get_unused_fd_flags
|
get_unused_fd_flags
|
||||||
|
@ -226,6 +219,7 @@
|
||||||
kimage_voffset
|
kimage_voffset
|
||||||
__kmalloc
|
__kmalloc
|
||||||
kmalloc_caches
|
kmalloc_caches
|
||||||
|
kmalloc_large
|
||||||
kmalloc_trace
|
kmalloc_trace
|
||||||
kmemdup
|
kmemdup
|
||||||
kstrndup
|
kstrndup
|
||||||
|
@ -234,7 +228,6 @@
|
||||||
kthread_park
|
kthread_park
|
||||||
kthread_should_stop
|
kthread_should_stop
|
||||||
kthread_stop
|
kthread_stop
|
||||||
kthread_stop_put
|
|
||||||
kthread_unpark
|
kthread_unpark
|
||||||
ktime_get
|
ktime_get
|
||||||
ktime_get_ts64
|
ktime_get_ts64
|
||||||
|
@ -298,12 +291,9 @@
|
||||||
nla_put_64bit
|
nla_put_64bit
|
||||||
nonseekable_open
|
nonseekable_open
|
||||||
noop_llseek
|
noop_llseek
|
||||||
nr_cpu_ids
|
|
||||||
of_device_is_compatible
|
of_device_is_compatible
|
||||||
of_find_property
|
of_find_property
|
||||||
of_property_read_variable_u32_array
|
of_property_read_variable_u32_array
|
||||||
page_pinner_inited
|
|
||||||
__page_pinner_put_page
|
|
||||||
page_pool_alloc_frag
|
page_pool_alloc_frag
|
||||||
page_pool_destroy
|
page_pool_destroy
|
||||||
page_pool_put_defragged_page
|
page_pool_put_defragged_page
|
||||||
|
@ -313,17 +303,11 @@
|
||||||
param_ops_uint
|
param_ops_uint
|
||||||
passthru_features_check
|
passthru_features_check
|
||||||
pci_bus_type
|
pci_bus_type
|
||||||
pci_disable_device
|
pci_iomap_range
|
||||||
pci_enable_device
|
|
||||||
pci_find_capability
|
|
||||||
pci_find_next_capability
|
|
||||||
pci_iounmap
|
|
||||||
pci_read_config_byte
|
|
||||||
pci_read_config_dword
|
|
||||||
__pci_register_driver
|
|
||||||
pci_release_region
|
pci_release_region
|
||||||
|
pci_release_selected_regions
|
||||||
pci_request_region
|
pci_request_region
|
||||||
pci_unregister_driver
|
pci_request_selected_regions
|
||||||
__per_cpu_offset
|
__per_cpu_offset
|
||||||
perf_trace_buf_alloc
|
perf_trace_buf_alloc
|
||||||
perf_trace_run_bpf_submit
|
perf_trace_run_bpf_submit
|
||||||
|
@ -366,7 +350,6 @@
|
||||||
register_netdevice
|
register_netdevice
|
||||||
register_netdevice_notifier
|
register_netdevice_notifier
|
||||||
register_pernet_device
|
register_pernet_device
|
||||||
register_virtio_device
|
|
||||||
register_virtio_driver
|
register_virtio_driver
|
||||||
__regmap_init
|
__regmap_init
|
||||||
regmap_write
|
regmap_write
|
||||||
|
@ -385,10 +368,8 @@
|
||||||
schedule
|
schedule
|
||||||
schedule_timeout
|
schedule_timeout
|
||||||
scnprintf
|
scnprintf
|
||||||
seq_lseek
|
|
||||||
seq_printf
|
seq_printf
|
||||||
seq_puts
|
seq_puts
|
||||||
seq_read
|
|
||||||
serio_close
|
serio_close
|
||||||
serio_interrupt
|
serio_interrupt
|
||||||
serio_open
|
serio_open
|
||||||
|
@ -408,8 +389,6 @@
|
||||||
simple_attr_release
|
simple_attr_release
|
||||||
simple_open
|
simple_open
|
||||||
simple_read_from_buffer
|
simple_read_from_buffer
|
||||||
single_open
|
|
||||||
single_release
|
|
||||||
skb_add_rx_frag
|
skb_add_rx_frag
|
||||||
skb_clone
|
skb_clone
|
||||||
skb_copy
|
skb_copy
|
||||||
|
@ -433,21 +412,17 @@
|
||||||
strcmp
|
strcmp
|
||||||
strcpy
|
strcpy
|
||||||
strlen
|
strlen
|
||||||
|
strncpy
|
||||||
strnlen
|
strnlen
|
||||||
strscpy
|
strscpy
|
||||||
__sw_hweight16
|
__sw_hweight16
|
||||||
__sw_hweight32
|
__sw_hweight32
|
||||||
__sw_hweight8
|
__sw_hweight8
|
||||||
sync_file_create
|
sync_file_create
|
||||||
synchronize_irq
|
|
||||||
synchronize_net
|
synchronize_net
|
||||||
synchronize_rcu
|
synchronize_rcu
|
||||||
sysfs_create_group
|
|
||||||
sysfs_emit
|
|
||||||
sysfs_remove_group
|
|
||||||
sysfs_remove_link
|
sysfs_remove_link
|
||||||
system_cpucaps
|
system_cpucaps
|
||||||
system_freezable_wq
|
|
||||||
system_wq
|
system_wq
|
||||||
__tasklet_schedule
|
__tasklet_schedule
|
||||||
tasklet_setup
|
tasklet_setup
|
||||||
|
@ -466,7 +441,6 @@
|
||||||
unregister_netdevice_notifier
|
unregister_netdevice_notifier
|
||||||
unregister_netdevice_queue
|
unregister_netdevice_queue
|
||||||
unregister_pernet_device
|
unregister_pernet_device
|
||||||
unregister_virtio_device
|
|
||||||
unregister_virtio_driver
|
unregister_virtio_driver
|
||||||
up_write
|
up_write
|
||||||
usb_add_hcd
|
usb_add_hcd
|
||||||
|
@ -497,12 +471,21 @@
|
||||||
usb_unanchor_urb
|
usb_unanchor_urb
|
||||||
__usecs_to_jiffies
|
__usecs_to_jiffies
|
||||||
usleep_range_state
|
usleep_range_state
|
||||||
|
v4l2_device_register
|
||||||
|
v4l2_device_unregister
|
||||||
|
v4l2_event_pending
|
||||||
|
v4l2_event_subscribe
|
||||||
|
v4l2_event_unsubscribe
|
||||||
|
v4l2_fh_add
|
||||||
|
v4l2_fh_del
|
||||||
|
v4l2_fh_exit
|
||||||
|
v4l2_fh_init
|
||||||
vfree
|
vfree
|
||||||
virtio_break_device
|
video_devdata
|
||||||
|
video_ioctl2
|
||||||
|
__video_register_device
|
||||||
|
video_unregister_device
|
||||||
virtio_check_driver_offered_feature
|
virtio_check_driver_offered_feature
|
||||||
virtio_config_changed
|
|
||||||
virtio_device_freeze
|
|
||||||
virtio_device_restore
|
|
||||||
virtio_reset_device
|
virtio_reset_device
|
||||||
virtqueue_add_inbuf
|
virtqueue_add_inbuf
|
||||||
virtqueue_add_outbuf
|
virtqueue_add_outbuf
|
||||||
|
@ -510,10 +493,7 @@
|
||||||
virtqueue_detach_unused_buf
|
virtqueue_detach_unused_buf
|
||||||
virtqueue_disable_cb
|
virtqueue_disable_cb
|
||||||
virtqueue_enable_cb
|
virtqueue_enable_cb
|
||||||
virtqueue_get_avail_addr
|
|
||||||
virtqueue_get_buf
|
virtqueue_get_buf
|
||||||
virtqueue_get_desc_addr
|
|
||||||
virtqueue_get_used_addr
|
|
||||||
virtqueue_get_vring_size
|
virtqueue_get_vring_size
|
||||||
virtqueue_is_broken
|
virtqueue_is_broken
|
||||||
virtqueue_kick
|
virtqueue_kick
|
||||||
|
@ -522,11 +502,7 @@
|
||||||
vmalloc
|
vmalloc
|
||||||
vmalloc_to_page
|
vmalloc_to_page
|
||||||
vm_get_page_prot
|
vm_get_page_prot
|
||||||
vring_create_virtqueue
|
vzalloc
|
||||||
vring_del_virtqueue
|
|
||||||
vring_interrupt
|
|
||||||
vring_notification_data
|
|
||||||
vring_transport_features
|
|
||||||
__wake_up
|
__wake_up
|
||||||
wake_up_process
|
wake_up_process
|
||||||
__warn_printk
|
__warn_printk
|
||||||
|
@ -538,22 +514,6 @@
|
||||||
clk_put
|
clk_put
|
||||||
serio_unregister_port
|
serio_unregister_port
|
||||||
|
|
||||||
# required by android-v-virt-cpufreq.ko
|
|
||||||
arch_freq_scale
|
|
||||||
cpufreq_cpu_get
|
|
||||||
cpufreq_cpu_put
|
|
||||||
cpufreq_frequency_table_verify
|
|
||||||
cpufreq_get_hw_max_freq
|
|
||||||
cpu_scale
|
|
||||||
dev_pm_opp_free_cpufreq_table
|
|
||||||
dev_pm_opp_get_opp_count
|
|
||||||
dev_pm_opp_init_cpufreq_table
|
|
||||||
dev_pm_opp_of_add_table
|
|
||||||
get_cpu_device
|
|
||||||
topology_clear_scale_freq_source
|
|
||||||
topology_set_scale_freq_source
|
|
||||||
topology_update_thermal_pressure
|
|
||||||
|
|
||||||
# required by armmmci.ko
|
# required by armmmci.ko
|
||||||
clk_round_rate
|
clk_round_rate
|
||||||
devm_of_iomap
|
devm_of_iomap
|
||||||
|
@ -644,6 +604,8 @@
|
||||||
bpf_trace_run11
|
bpf_trace_run11
|
||||||
bpf_trace_run7
|
bpf_trace_run7
|
||||||
bpf_trace_run8
|
bpf_trace_run8
|
||||||
|
class_register
|
||||||
|
class_unregister
|
||||||
_ctype
|
_ctype
|
||||||
debugfs_rename
|
debugfs_rename
|
||||||
__dev_change_net_namespace
|
__dev_change_net_namespace
|
||||||
|
@ -698,9 +660,11 @@
|
||||||
regmap_read
|
regmap_read
|
||||||
|
|
||||||
# required by drm_dma_helper.ko
|
# required by drm_dma_helper.ko
|
||||||
|
dma_alloc_attrs
|
||||||
dma_alloc_pages
|
dma_alloc_pages
|
||||||
dma_buf_vmap_unlocked
|
dma_buf_vmap_unlocked
|
||||||
dma_buf_vunmap_unlocked
|
dma_buf_vunmap_unlocked
|
||||||
|
dma_free_attrs
|
||||||
dma_free_pages
|
dma_free_pages
|
||||||
dma_get_sgtable_attrs
|
dma_get_sgtable_attrs
|
||||||
dma_mmap_attrs
|
dma_mmap_attrs
|
||||||
|
@ -730,6 +694,11 @@
|
||||||
# required by goldfish_address_space.ko
|
# required by goldfish_address_space.ko
|
||||||
memremap
|
memremap
|
||||||
memunmap
|
memunmap
|
||||||
|
pci_disable_device
|
||||||
|
pci_enable_device
|
||||||
|
pci_read_config_byte
|
||||||
|
__pci_register_driver
|
||||||
|
pci_unregister_driver
|
||||||
|
|
||||||
# required by goldfish_battery.ko
|
# required by goldfish_battery.ko
|
||||||
power_supply_changed
|
power_supply_changed
|
||||||
|
@ -802,7 +771,6 @@
|
||||||
bitmap_free
|
bitmap_free
|
||||||
bitmap_zalloc
|
bitmap_zalloc
|
||||||
call_rcu
|
call_rcu
|
||||||
__cpu_possible_mask
|
|
||||||
crc32_be
|
crc32_be
|
||||||
crypto_aead_decrypt
|
crypto_aead_decrypt
|
||||||
crypto_aead_encrypt
|
crypto_aead_encrypt
|
||||||
|
@ -834,7 +802,6 @@
|
||||||
kernel_param_lock
|
kernel_param_lock
|
||||||
kernel_param_unlock
|
kernel_param_unlock
|
||||||
kfree_skb_list_reason
|
kfree_skb_list_reason
|
||||||
kmalloc_large
|
|
||||||
ktime_get_seconds
|
ktime_get_seconds
|
||||||
netdev_set_default_ethtool_ops
|
netdev_set_default_ethtool_ops
|
||||||
netif_receive_skb
|
netif_receive_skb
|
||||||
|
@ -853,8 +820,8 @@
|
||||||
skb_ensure_writable
|
skb_ensure_writable
|
||||||
__skb_get_hash
|
__skb_get_hash
|
||||||
__skb_gso_segment
|
__skb_gso_segment
|
||||||
strncpy
|
|
||||||
__sw_hweight64
|
__sw_hweight64
|
||||||
|
system_freezable_wq
|
||||||
tasklet_kill
|
tasklet_kill
|
||||||
unregister_inet6addr_notifier
|
unregister_inet6addr_notifier
|
||||||
unregister_inetaddr_notifier
|
unregister_inetaddr_notifier
|
||||||
|
@ -863,6 +830,7 @@
|
||||||
class_create
|
class_create
|
||||||
class_destroy
|
class_destroy
|
||||||
device_bind_driver
|
device_bind_driver
|
||||||
|
device_create
|
||||||
device_release_driver
|
device_release_driver
|
||||||
dst_release
|
dst_release
|
||||||
genl_notify
|
genl_notify
|
||||||
|
@ -913,6 +881,10 @@
|
||||||
# required by mt76x02-lib.ko
|
# required by mt76x02-lib.ko
|
||||||
debugfs_create_bool
|
debugfs_create_bool
|
||||||
__kfifo_init
|
__kfifo_init
|
||||||
|
seq_lseek
|
||||||
|
seq_read
|
||||||
|
single_open
|
||||||
|
single_release
|
||||||
|
|
||||||
# required by mt76x02-usb.ko
|
# required by mt76x02-usb.ko
|
||||||
hrtimer_active
|
hrtimer_active
|
||||||
|
@ -975,6 +947,7 @@
|
||||||
device_link_add
|
device_link_add
|
||||||
device_link_remove
|
device_link_remove
|
||||||
device_remove_groups
|
device_remove_groups
|
||||||
|
_dev_notice
|
||||||
i2c_adapter_type
|
i2c_adapter_type
|
||||||
i2c_bus_type
|
i2c_bus_type
|
||||||
i2c_client_type
|
i2c_client_type
|
||||||
|
@ -1036,6 +1009,30 @@
|
||||||
scmi_driver_register
|
scmi_driver_register
|
||||||
scmi_driver_unregister
|
scmi_driver_unregister
|
||||||
strrchr
|
strrchr
|
||||||
|
sysfs_emit
|
||||||
|
|
||||||
|
# required by snd-aloop.ko
|
||||||
|
devm_kfree
|
||||||
|
devm_kstrdup
|
||||||
|
snd_card_ref
|
||||||
|
snd_card_rw_proc_new
|
||||||
|
snd_ctl_boolean_mono_info
|
||||||
|
snd_devm_card_new
|
||||||
|
snd_ecards_limit
|
||||||
|
snd_info_get_line
|
||||||
|
snd_interval_refine
|
||||||
|
snd_pcm_format_set_silence
|
||||||
|
snd_pcm_hw_rule_add
|
||||||
|
snd_pcm_stop
|
||||||
|
snd_pcm_stop_xrun
|
||||||
|
snd_timer_close
|
||||||
|
snd_timer_instance_free
|
||||||
|
snd_timer_instance_new
|
||||||
|
snd_timer_open
|
||||||
|
snd_timer_start
|
||||||
|
snd_timer_stop
|
||||||
|
strim
|
||||||
|
strpbrk
|
||||||
|
|
||||||
# required by system_heap.ko
|
# required by system_heap.ko
|
||||||
dma_heap_add
|
dma_heap_add
|
||||||
|
@ -1063,25 +1060,11 @@
|
||||||
v4l2_ctrl_handler_setup
|
v4l2_ctrl_handler_setup
|
||||||
v4l2_ctrl_new_custom
|
v4l2_ctrl_new_custom
|
||||||
v4l2_ctrl_subscribe_event
|
v4l2_ctrl_subscribe_event
|
||||||
v4l2_device_register
|
|
||||||
v4l2_device_unregister
|
|
||||||
v4l2_event_pending
|
|
||||||
v4l2_event_queue
|
v4l2_event_queue
|
||||||
v4l2_event_subscribe
|
|
||||||
v4l2_event_unsubscribe
|
|
||||||
v4l2_fh_add
|
|
||||||
v4l2_fh_del
|
|
||||||
v4l2_fh_exit
|
|
||||||
v4l2_fh_init
|
|
||||||
v4l2_format_info
|
v4l2_format_info
|
||||||
video_devdata
|
|
||||||
video_device_alloc
|
video_device_alloc
|
||||||
video_device_release
|
video_device_release
|
||||||
video_ioctl2
|
|
||||||
__video_register_device
|
|
||||||
video_unregister_device
|
|
||||||
vm_insert_page
|
vm_insert_page
|
||||||
vzalloc
|
|
||||||
|
|
||||||
# required by vexpress-config.ko
|
# required by vexpress-config.ko
|
||||||
of_find_compatible_node
|
of_find_compatible_node
|
||||||
|
@ -1102,9 +1085,12 @@
|
||||||
kernel_sock_shutdown
|
kernel_sock_shutdown
|
||||||
kstrtoint
|
kstrtoint
|
||||||
kstrtoll
|
kstrtoll
|
||||||
|
kthread_stop_put
|
||||||
platform_bus
|
platform_bus
|
||||||
sockfd_lookup
|
sockfd_lookup
|
||||||
strchr
|
strchr
|
||||||
|
sysfs_create_group
|
||||||
|
sysfs_remove_group
|
||||||
usb_speed_string
|
usb_speed_string
|
||||||
|
|
||||||
# required by virt_wifi.ko
|
# required by virt_wifi.ko
|
||||||
|
@ -1216,116 +1202,40 @@
|
||||||
ww_mutex_lock_interruptible
|
ww_mutex_lock_interruptible
|
||||||
ww_mutex_unlock
|
ww_mutex_unlock
|
||||||
|
|
||||||
|
# required by virtio-media.ko
|
||||||
|
frame_vector_to_pages
|
||||||
|
pfn_is_map_memory
|
||||||
|
sg_alloc_table_from_pages_segment
|
||||||
|
sg_nents
|
||||||
|
v4l2_event_queue_fh
|
||||||
|
v4l2_src_change_event_subscribe
|
||||||
|
vb2_create_framevec
|
||||||
|
vb2_destroy_framevec
|
||||||
|
video_device_release_empty
|
||||||
|
|
||||||
# required by virtio-rng.ko
|
# required by virtio-rng.ko
|
||||||
hwrng_register
|
hwrng_register
|
||||||
hwrng_unregister
|
hwrng_unregister
|
||||||
wait_for_completion_killable
|
wait_for_completion_killable
|
||||||
|
|
||||||
# required by virtio_balloon.ko
|
|
||||||
adjust_managed_page_count
|
|
||||||
all_vm_events
|
|
||||||
balloon_mops
|
|
||||||
balloon_page_alloc
|
|
||||||
balloon_page_dequeue
|
|
||||||
balloon_page_enqueue
|
|
||||||
__ClearPageMovable
|
|
||||||
init_on_free
|
|
||||||
mutex_trylock
|
|
||||||
page_relinquish
|
|
||||||
page_reporting_register
|
|
||||||
page_reporting_unregister
|
|
||||||
post_page_relinquish_tlb_inv
|
|
||||||
register_oom_notifier
|
|
||||||
register_shrinker
|
|
||||||
__SetPageMovable
|
|
||||||
si_mem_available
|
|
||||||
si_meminfo
|
|
||||||
unregister_oom_notifier
|
|
||||||
unregister_shrinker
|
|
||||||
virtqueue_disable_dma_api_for_buffers
|
|
||||||
vm_event_states
|
|
||||||
vm_node_stat
|
|
||||||
|
|
||||||
# required by virtio_blk.ko
|
|
||||||
blk_execute_rq
|
|
||||||
__blk_mq_alloc_disk
|
|
||||||
blk_mq_alloc_request
|
|
||||||
blk_mq_alloc_tag_set
|
|
||||||
blk_mq_complete_request
|
|
||||||
blk_mq_complete_request_remote
|
|
||||||
blk_mq_end_request
|
|
||||||
blk_mq_end_request_batch
|
|
||||||
blk_mq_free_request
|
|
||||||
blk_mq_free_tag_set
|
|
||||||
blk_mq_freeze_queue
|
|
||||||
blk_mq_map_queues
|
|
||||||
blk_mq_requeue_request
|
|
||||||
blk_mq_start_request
|
|
||||||
blk_mq_start_stopped_hw_queues
|
|
||||||
blk_mq_stop_hw_queue
|
|
||||||
blk_mq_unfreeze_queue
|
|
||||||
blk_mq_virtio_map_queues
|
|
||||||
blk_queue_alignment_offset
|
|
||||||
blk_queue_chunk_sectors
|
|
||||||
blk_queue_flag_set
|
|
||||||
blk_queue_io_min
|
|
||||||
blk_queue_io_opt
|
|
||||||
blk_queue_logical_block_size
|
|
||||||
blk_queue_max_discard_sectors
|
|
||||||
blk_queue_max_discard_segments
|
|
||||||
blk_queue_max_hw_sectors
|
|
||||||
blk_queue_max_secure_erase_sectors
|
|
||||||
blk_queue_max_segments
|
|
||||||
blk_queue_max_segment_size
|
|
||||||
blk_queue_max_write_zeroes_sectors
|
|
||||||
blk_queue_max_zone_append_sectors
|
|
||||||
blk_queue_physical_block_size
|
|
||||||
blk_queue_write_cache
|
|
||||||
blk_revalidate_disk_zones
|
|
||||||
blk_rq_map_kern
|
|
||||||
__blk_rq_map_sg
|
|
||||||
blk_status_to_errno
|
|
||||||
del_gendisk
|
|
||||||
device_add_disk
|
|
||||||
disk_set_zoned
|
|
||||||
put_disk
|
|
||||||
__register_blkdev
|
|
||||||
set_capacity_and_notify
|
|
||||||
set_disk_ro
|
|
||||||
sg_alloc_table_chained
|
|
||||||
sg_free_table_chained
|
|
||||||
string_get_size
|
|
||||||
__sysfs_match_string
|
|
||||||
unregister_blkdev
|
|
||||||
virtio_max_dma_size
|
|
||||||
__vmalloc
|
|
||||||
|
|
||||||
# required by virtio_console.ko
|
|
||||||
cdev_add
|
|
||||||
cdev_alloc
|
|
||||||
cdev_del
|
|
||||||
device_destroy
|
|
||||||
fasync_helper
|
|
||||||
hvc_alloc
|
|
||||||
hvc_instantiate
|
|
||||||
hvc_kick
|
|
||||||
hvc_poll
|
|
||||||
hvc_remove
|
|
||||||
__hvc_resize
|
|
||||||
kill_fasync
|
|
||||||
kobject_uevent
|
|
||||||
pipe_lock
|
|
||||||
pipe_unlock
|
|
||||||
__register_chrdev
|
|
||||||
__splice_from_pipe
|
|
||||||
unlock_page
|
|
||||||
__unregister_chrdev
|
|
||||||
wait_for_completion
|
|
||||||
|
|
||||||
# required by virtio_mmio.ko
|
# required by virtio_mmio.ko
|
||||||
device_for_each_child
|
device_for_each_child
|
||||||
device_register
|
device_register
|
||||||
memparse
|
memparse
|
||||||
|
register_virtio_device
|
||||||
|
synchronize_irq
|
||||||
|
unregister_virtio_device
|
||||||
|
virtio_config_changed
|
||||||
|
virtio_device_freeze
|
||||||
|
virtio_device_restore
|
||||||
|
virtqueue_get_avail_addr
|
||||||
|
virtqueue_get_desc_addr
|
||||||
|
virtqueue_get_used_addr
|
||||||
|
vring_create_virtqueue
|
||||||
|
vring_del_virtqueue
|
||||||
|
vring_interrupt
|
||||||
|
vring_notification_data
|
||||||
|
vring_transport_features
|
||||||
|
|
||||||
# required by virtio_net.ko
|
# required by virtio_net.ko
|
||||||
bpf_dispatcher_xdp_func
|
bpf_dispatcher_xdp_func
|
||||||
|
@ -1347,6 +1257,7 @@
|
||||||
ethtool_sprintf
|
ethtool_sprintf
|
||||||
ethtool_virtdev_set_link_ksettings
|
ethtool_virtdev_set_link_ksettings
|
||||||
flow_keys_basic_dissector
|
flow_keys_basic_dissector
|
||||||
|
__folio_put
|
||||||
jiffies_to_usecs
|
jiffies_to_usecs
|
||||||
__napi_alloc_skb
|
__napi_alloc_skb
|
||||||
napi_consume_skb
|
napi_consume_skb
|
||||||
|
@ -1359,7 +1270,10 @@
|
||||||
__netif_set_xps_queue
|
__netif_set_xps_queue
|
||||||
netif_tx_lock
|
netif_tx_lock
|
||||||
netif_tx_unlock
|
netif_tx_unlock
|
||||||
|
nr_cpu_ids
|
||||||
__num_online_cpus
|
__num_online_cpus
|
||||||
|
page_pinner_inited
|
||||||
|
__page_pinner_put_page
|
||||||
sched_clock
|
sched_clock
|
||||||
skb_coalesce_rx_frag
|
skb_coalesce_rx_frag
|
||||||
__skb_flow_dissect
|
__skb_flow_dissect
|
||||||
|
@ -1394,27 +1308,9 @@
|
||||||
xdp_rxq_info_unreg
|
xdp_rxq_info_unreg
|
||||||
xdp_warn
|
xdp_warn
|
||||||
|
|
||||||
# required by virtio_pci.ko
|
|
||||||
__irq_apply_affinity_hint
|
|
||||||
pci_alloc_irq_vectors_affinity
|
|
||||||
pci_device_is_present
|
|
||||||
pci_disable_sriov
|
|
||||||
pci_enable_sriov
|
|
||||||
pci_find_ext_capability
|
|
||||||
pci_free_irq_vectors
|
|
||||||
pci_irq_get_affinity
|
|
||||||
pci_irq_vector
|
|
||||||
pci_read_config_word
|
|
||||||
pci_set_master
|
|
||||||
pci_vfs_assigned
|
|
||||||
|
|
||||||
# required by virtio_pci_legacy_dev.ko
|
# required by virtio_pci_legacy_dev.ko
|
||||||
pci_iomap
|
pci_iomap
|
||||||
|
pci_iounmap
|
||||||
# required by virtio_pci_modern_dev.ko
|
|
||||||
pci_iomap_range
|
|
||||||
pci_release_selected_regions
|
|
||||||
pci_request_selected_regions
|
|
||||||
|
|
||||||
# required by virtio_pmem.ko
|
# required by virtio_pmem.ko
|
||||||
nvdimm_bus_register
|
nvdimm_bus_register
|
||||||
|
@ -1440,6 +1336,16 @@
|
||||||
snd_pcm_set_ops
|
snd_pcm_set_ops
|
||||||
wait_for_completion_interruptible_timeout
|
wait_for_completion_interruptible_timeout
|
||||||
|
|
||||||
|
# required by virtual-cpufreq.ko
|
||||||
|
arch_freq_scale
|
||||||
|
cpufreq_freq_transition_begin
|
||||||
|
cpufreq_freq_transition_end
|
||||||
|
cpufreq_frequency_table_verify
|
||||||
|
cpufreq_get_hw_max_freq
|
||||||
|
get_cpu_device
|
||||||
|
topology_clear_scale_freq_source
|
||||||
|
topology_set_scale_freq_source
|
||||||
|
|
||||||
# required by vkms.ko
|
# required by vkms.ko
|
||||||
__devm_drm_dev_alloc
|
__devm_drm_dev_alloc
|
||||||
devres_open_group
|
devres_open_group
|
||||||
|
@ -1483,8 +1389,127 @@
|
||||||
drm_writeback_queue_job
|
drm_writeback_queue_job
|
||||||
drm_writeback_signal_completion
|
drm_writeback_signal_completion
|
||||||
|
|
||||||
# required by vmw_vsock_virtio_transport.ko
|
# preserved by --additions-only
|
||||||
|
adjust_managed_page_count
|
||||||
|
all_vm_events
|
||||||
|
balloon_mops
|
||||||
|
balloon_page_alloc
|
||||||
|
balloon_page_dequeue
|
||||||
|
balloon_page_enqueue
|
||||||
|
blk_execute_rq
|
||||||
|
__blk_mq_alloc_disk
|
||||||
|
blk_mq_alloc_request
|
||||||
|
blk_mq_alloc_tag_set
|
||||||
|
blk_mq_complete_request
|
||||||
|
blk_mq_complete_request_remote
|
||||||
|
blk_mq_end_request
|
||||||
|
blk_mq_end_request_batch
|
||||||
|
blk_mq_free_request
|
||||||
|
blk_mq_free_tag_set
|
||||||
|
blk_mq_freeze_queue
|
||||||
|
blk_mq_map_queues
|
||||||
|
blk_mq_quiesce_queue
|
||||||
|
blk_mq_requeue_request
|
||||||
|
blk_mq_start_request
|
||||||
|
blk_mq_start_stopped_hw_queues
|
||||||
|
blk_mq_stop_hw_queue
|
||||||
|
blk_mq_unfreeze_queue
|
||||||
|
blk_mq_unquiesce_queue
|
||||||
|
blk_mq_virtio_map_queues
|
||||||
|
blk_queue_alignment_offset
|
||||||
|
blk_queue_chunk_sectors
|
||||||
|
blk_queue_flag_set
|
||||||
|
blk_queue_io_min
|
||||||
|
blk_queue_io_opt
|
||||||
|
blk_queue_logical_block_size
|
||||||
|
blk_queue_max_discard_sectors
|
||||||
|
blk_queue_max_discard_segments
|
||||||
|
blk_queue_max_hw_sectors
|
||||||
|
blk_queue_max_secure_erase_sectors
|
||||||
|
blk_queue_max_segments
|
||||||
|
blk_queue_max_segment_size
|
||||||
|
blk_queue_max_write_zeroes_sectors
|
||||||
|
blk_queue_max_zone_append_sectors
|
||||||
|
blk_queue_physical_block_size
|
||||||
|
blk_queue_write_cache
|
||||||
|
blk_revalidate_disk_zones
|
||||||
|
blk_rq_map_kern
|
||||||
|
__blk_rq_map_sg
|
||||||
|
blk_status_to_errno
|
||||||
|
cdev_add
|
||||||
|
cdev_alloc
|
||||||
|
cdev_del
|
||||||
|
__ClearPageMovable
|
||||||
|
cpufreq_cpu_get
|
||||||
|
cpufreq_cpu_put
|
||||||
|
cpu_scale
|
||||||
|
del_gendisk
|
||||||
|
device_add_disk
|
||||||
|
device_destroy
|
||||||
|
dev_pm_opp_free_cpufreq_table
|
||||||
|
dev_pm_opp_get_opp_count
|
||||||
|
dev_pm_opp_init_cpufreq_table
|
||||||
|
dev_pm_opp_of_add_table
|
||||||
|
disk_set_zoned
|
||||||
|
fasync_helper
|
||||||
|
get_device
|
||||||
|
hvc_alloc
|
||||||
|
hvc_instantiate
|
||||||
|
hvc_kick
|
||||||
|
hvc_poll
|
||||||
|
hvc_remove
|
||||||
|
__hvc_resize
|
||||||
|
init_on_free
|
||||||
|
__irq_apply_affinity_hint
|
||||||
|
kill_fasync
|
||||||
|
kobject_uevent
|
||||||
|
mutex_trylock
|
||||||
|
page_relinquish
|
||||||
|
page_reporting_register
|
||||||
|
page_reporting_unregister
|
||||||
|
page_shift_compat
|
||||||
|
page_shift_compat_enabled
|
||||||
|
pci_alloc_irq_vectors_affinity
|
||||||
|
pci_device_is_present
|
||||||
|
pci_disable_sriov
|
||||||
|
pci_enable_sriov
|
||||||
|
pci_find_capability
|
||||||
|
pci_find_ext_capability
|
||||||
|
pci_find_next_capability
|
||||||
|
pci_free_irq_vectors
|
||||||
|
pci_irq_get_affinity
|
||||||
|
pci_irq_vector
|
||||||
|
pci_read_config_dword
|
||||||
|
pci_read_config_word
|
||||||
|
pci_set_master
|
||||||
|
pci_vfs_assigned
|
||||||
|
pipe_lock
|
||||||
|
pipe_unlock
|
||||||
|
post_page_relinquish_tlb_inv
|
||||||
|
put_disk
|
||||||
|
__register_blkdev
|
||||||
|
__register_chrdev
|
||||||
|
register_oom_notifier
|
||||||
|
register_shrinker
|
||||||
|
set_capacity_and_notify
|
||||||
|
set_disk_ro
|
||||||
|
__SetPageMovable
|
||||||
|
sg_alloc_table_chained
|
||||||
|
sg_free_table_chained
|
||||||
|
si_mem_available
|
||||||
|
si_meminfo
|
||||||
sk_error_report
|
sk_error_report
|
||||||
|
__splice_from_pipe
|
||||||
|
string_get_size
|
||||||
|
__sysfs_match_string
|
||||||
|
topology_update_thermal_pressure
|
||||||
|
unlock_page
|
||||||
|
unregister_blkdev
|
||||||
|
__unregister_chrdev
|
||||||
|
unregister_oom_notifier
|
||||||
|
unregister_shrinker
|
||||||
|
virtio_break_device
|
||||||
|
virtio_max_dma_size
|
||||||
virtio_transport_connect
|
virtio_transport_connect
|
||||||
virtio_transport_deliver_tap_pkt
|
virtio_transport_deliver_tap_pkt
|
||||||
virtio_transport_destruct
|
virtio_transport_destruct
|
||||||
|
@ -1520,12 +1545,29 @@
|
||||||
virtio_transport_stream_has_space
|
virtio_transport_stream_has_space
|
||||||
virtio_transport_stream_is_active
|
virtio_transport_stream_is_active
|
||||||
virtio_transport_stream_rcvhiwat
|
virtio_transport_stream_rcvhiwat
|
||||||
|
virtqueue_disable_dma_api_for_buffers
|
||||||
|
__vmalloc
|
||||||
|
vm_event_states
|
||||||
|
vm_node_stat
|
||||||
|
vp_modern_config_vector
|
||||||
|
vp_modern_generation
|
||||||
|
vp_modern_get_features
|
||||||
|
vp_modern_get_num_queues
|
||||||
|
vp_modern_get_queue_enable
|
||||||
|
vp_modern_get_queue_reset
|
||||||
|
vp_modern_get_queue_size
|
||||||
|
vp_modern_get_status
|
||||||
|
vp_modern_map_vq_notify
|
||||||
|
vp_modern_probe
|
||||||
|
vp_modern_queue_address
|
||||||
|
vp_modern_queue_vector
|
||||||
|
vp_modern_remove
|
||||||
|
vp_modern_set_features
|
||||||
|
vp_modern_set_queue_enable
|
||||||
|
vp_modern_set_queue_reset
|
||||||
|
vp_modern_set_queue_size
|
||||||
|
vp_modern_set_status
|
||||||
vsock_core_register
|
vsock_core_register
|
||||||
vsock_core_unregister
|
vsock_core_unregister
|
||||||
vsock_for_each_connected_socket
|
vsock_for_each_connected_socket
|
||||||
|
wait_for_completion
|
||||||
# preserved by --additions-only
|
|
||||||
blk_mq_quiesce_queue
|
|
||||||
blk_mq_unquiesce_queue
|
|
||||||
page_shift_compat
|
|
||||||
page_shift_compat_enabled
|
|
||||||
|
|
|
@ -150,10 +150,12 @@
|
||||||
__traceiter_android_vh_lock_folio_drop_mmap_start
|
__traceiter_android_vh_lock_folio_drop_mmap_start
|
||||||
__traceiter_android_vh_look_around
|
__traceiter_android_vh_look_around
|
||||||
__traceiter_android_vh_look_around_migrate_folio
|
__traceiter_android_vh_look_around_migrate_folio
|
||||||
|
__traceiter_android_vh_lruvec_add_folio
|
||||||
|
__traceiter_android_vh_lruvec_del_folio
|
||||||
__traceiter_android_vh_mmap_region
|
__traceiter_android_vh_mmap_region
|
||||||
__traceiter_android_vh_mutex_init
|
__traceiter_android_vh_mutex_init
|
||||||
__traceiter_android_vh_mutex_unlock_slowpath
|
__traceiter_android_vh_mutex_unlock_slowpath
|
||||||
__traceiter_android_vh_mutex_unlock_slowpath_before_wakeq
|
__traceiter_android_vh_mutex_unlock_slowpath_bf_wakeq
|
||||||
__traceiter_android_vh_mutex_wait_finish
|
__traceiter_android_vh_mutex_wait_finish
|
||||||
__traceiter_android_vh_mutex_wait_start
|
__traceiter_android_vh_mutex_wait_start
|
||||||
__traceiter_android_vh_oom_swapmem_gather_finish
|
__traceiter_android_vh_oom_swapmem_gather_finish
|
||||||
|
@ -177,6 +179,7 @@
|
||||||
__traceiter_android_vh_scheduler_tick
|
__traceiter_android_vh_scheduler_tick
|
||||||
__traceiter_android_vh_sd_init_unmap_multi_segment
|
__traceiter_android_vh_sd_init_unmap_multi_segment
|
||||||
__traceiter_android_vh_sd_setup_unmap_multi_segment
|
__traceiter_android_vh_sd_setup_unmap_multi_segment
|
||||||
|
__traceiter_android_vh_send_signal_locked
|
||||||
__traceiter_android_vh_shmem_swapin_folio
|
__traceiter_android_vh_shmem_swapin_folio
|
||||||
__traceiter_android_vh_should_alloc_pages_retry
|
__traceiter_android_vh_should_alloc_pages_retry
|
||||||
__traceiter_android_vh_shrink_folio_list
|
__traceiter_android_vh_shrink_folio_list
|
||||||
|
@ -276,10 +279,12 @@
|
||||||
__tracepoint_android_vh_lock_folio_drop_mmap_start
|
__tracepoint_android_vh_lock_folio_drop_mmap_start
|
||||||
__tracepoint_android_vh_look_around
|
__tracepoint_android_vh_look_around
|
||||||
__tracepoint_android_vh_look_around_migrate_folio
|
__tracepoint_android_vh_look_around_migrate_folio
|
||||||
|
__tracepoint_android_vh_lruvec_add_folio
|
||||||
|
__tracepoint_android_vh_lruvec_del_folio
|
||||||
__tracepoint_android_vh_mmap_region
|
__tracepoint_android_vh_mmap_region
|
||||||
__tracepoint_android_vh_mutex_init
|
__tracepoint_android_vh_mutex_init
|
||||||
__tracepoint_android_vh_mutex_unlock_slowpath
|
__tracepoint_android_vh_mutex_unlock_slowpath
|
||||||
__tracepoint_android_vh_mutex_unlock_slowpath_before_wakeq
|
__tracepoint_android_vh_mutex_unlock_slowpath_bf_wakeq
|
||||||
__tracepoint_android_vh_mutex_wait_finish
|
__tracepoint_android_vh_mutex_wait_finish
|
||||||
__tracepoint_android_vh_mutex_wait_start
|
__tracepoint_android_vh_mutex_wait_start
|
||||||
__tracepoint_android_vh_oom_swapmem_gather_finish
|
__tracepoint_android_vh_oom_swapmem_gather_finish
|
||||||
|
@ -303,6 +308,7 @@
|
||||||
__tracepoint_android_vh_scheduler_tick
|
__tracepoint_android_vh_scheduler_tick
|
||||||
__tracepoint_android_vh_sd_init_unmap_multi_segment
|
__tracepoint_android_vh_sd_init_unmap_multi_segment
|
||||||
__tracepoint_android_vh_sd_setup_unmap_multi_segment
|
__tracepoint_android_vh_sd_setup_unmap_multi_segment
|
||||||
|
__tracepoint_android_vh_send_signal_locked
|
||||||
__tracepoint_android_vh_shmem_swapin_folio
|
__tracepoint_android_vh_shmem_swapin_folio
|
||||||
__tracepoint_android_vh_should_alloc_pages_retry
|
__tracepoint_android_vh_should_alloc_pages_retry
|
||||||
__tracepoint_android_vh_shrink_folio_list
|
__tracepoint_android_vh_shrink_folio_list
|
||||||
|
@ -340,3 +346,4 @@
|
||||||
unlock_buffer
|
unlock_buffer
|
||||||
__wait_on_buffer
|
__wait_on_buffer
|
||||||
zs_lookup_class_index
|
zs_lookup_class_index
|
||||||
|
utf8_data_table_new
|
||||||
|
|
|
@ -71,8 +71,15 @@
|
||||||
blk_mq_quiesce_tagset
|
blk_mq_quiesce_tagset
|
||||||
blk_mq_unquiesce_tagset
|
blk_mq_unquiesce_tagset
|
||||||
memblock_free
|
memblock_free
|
||||||
|
__mem_cgroup_charge
|
||||||
|
__mem_cgroup_uncharge
|
||||||
|
__mod_memcg_lruvec_state
|
||||||
|
unpack_shadow
|
||||||
|
bucket_order
|
||||||
mem_cgroup_move_account
|
mem_cgroup_move_account
|
||||||
sum_mthp_stat
|
sum_mthp_stat
|
||||||
|
all_pcp_disable
|
||||||
|
all_pcp_enable
|
||||||
__traceiter_android_vh_anon_vma_name_recog
|
__traceiter_android_vh_anon_vma_name_recog
|
||||||
__traceiter_android_vh_restore_mm_flags
|
__traceiter_android_vh_restore_mm_flags
|
||||||
__traceiter_android_vh_update_vma_flags
|
__traceiter_android_vh_update_vma_flags
|
||||||
|
@ -89,12 +96,28 @@
|
||||||
__tracepoint_android_vh_customize_thp_pcp_order
|
__tracepoint_android_vh_customize_thp_pcp_order
|
||||||
__traceiter_android_vh_customize_thp_gfp_orders
|
__traceiter_android_vh_customize_thp_gfp_orders
|
||||||
__tracepoint_android_vh_customize_thp_gfp_orders
|
__tracepoint_android_vh_customize_thp_gfp_orders
|
||||||
|
__traceiter_android_vh_customize_pmd_gfp_bypass
|
||||||
|
__tracepoint_android_vh_customize_pmd_gfp_bypass
|
||||||
|
__traceiter_android_vh_refault_filemap_add_folio
|
||||||
|
__tracepoint_android_vh_refault_filemap_add_folio
|
||||||
__traceiter_android_vh_mem_cgroup_charge
|
__traceiter_android_vh_mem_cgroup_charge
|
||||||
__traceiter_android_vh_filemap_add_folio
|
__traceiter_android_vh_filemap_add_folio
|
||||||
__traceiter_android_vh_shrink_node
|
__traceiter_android_vh_shrink_node
|
||||||
__tracepoint_android_vh_mem_cgroup_charge
|
__tracepoint_android_vh_mem_cgroup_charge
|
||||||
__tracepoint_android_vh_filemap_add_folio
|
__tracepoint_android_vh_filemap_add_folio
|
||||||
__tracepoint_android_vh_shrink_node
|
__tracepoint_android_vh_shrink_node
|
||||||
|
__tracepoint_cma_alloc_start
|
||||||
|
__tracepoint_cma_alloc_busy_retry
|
||||||
|
__tracepoint_cma_alloc_finish
|
||||||
|
__tracepoint_cma_release
|
||||||
|
__traceiter_cma_alloc_start
|
||||||
|
__traceiter_cma_alloc_busy_retry
|
||||||
|
__traceiter_cma_alloc_finish
|
||||||
|
__traceiter_cma_release
|
||||||
|
__traceiter_android_vh_dma_buf_release
|
||||||
|
__tracepoint_android_vh_dma_buf_release
|
||||||
|
mmc_set_blocklen
|
||||||
|
nr_free_buffer_pages
|
||||||
|
|
||||||
#required by metis.ko module
|
#required by metis.ko module
|
||||||
__traceiter_android_vh_rwsem_read_wait_start
|
__traceiter_android_vh_rwsem_read_wait_start
|
||||||
|
@ -132,6 +155,14 @@
|
||||||
__traceiter_android_rvh_fiq_dump
|
__traceiter_android_rvh_fiq_dump
|
||||||
__tracepoint_android_rvh_fiq_dump
|
__tracepoint_android_rvh_fiq_dump
|
||||||
|
|
||||||
|
# required by kmod_protect.ko
|
||||||
|
__traceiter_android_vh_free_mod_mem
|
||||||
|
__traceiter_android_vh_set_mod_perm_after_init
|
||||||
|
__traceiter_android_vh_set_mod_perm_before_init
|
||||||
|
__tracepoint_android_vh_free_mod_mem
|
||||||
|
__tracepoint_android_vh_set_mod_perm_after_init
|
||||||
|
__tracepoint_android_vh_set_mod_perm_before_init
|
||||||
|
|
||||||
#required by mi_sched.ko
|
#required by mi_sched.ko
|
||||||
__traceiter_android_vh_scheduler_tick
|
__traceiter_android_vh_scheduler_tick
|
||||||
__traceiter_android_vh_free_user
|
__traceiter_android_vh_free_user
|
||||||
|
@ -391,6 +422,20 @@
|
||||||
__tracepoint_android_vh_psi_event
|
__tracepoint_android_vh_psi_event
|
||||||
__tracepoint_android_vh_psi_group
|
__tracepoint_android_vh_psi_group
|
||||||
|
|
||||||
|
#required by io_monitor.ko
|
||||||
|
__tracepoint_f2fs_gc_begin
|
||||||
|
__tracepoint_f2fs_gc_end
|
||||||
|
__tracepoint_f2fs_write_checkpoint
|
||||||
|
__tracepoint_f2fs_sync_file_enter
|
||||||
|
__tracepoint_f2fs_sync_file_exit
|
||||||
|
__tracepoint_ufshcd_command
|
||||||
|
__traceiter_f2fs_gc_begin
|
||||||
|
__traceiter_f2fs_gc_end
|
||||||
|
__traceiter_f2fs_write_checkpoint
|
||||||
|
__traceiter_f2fs_sync_file_enter
|
||||||
|
__traceiter_f2fs_sync_file_exit
|
||||||
|
__traceiter_ufshcd_command
|
||||||
|
|
||||||
#required by zram.ko module
|
#required by zram.ko module
|
||||||
__blk_alloc_disk
|
__blk_alloc_disk
|
||||||
bio_end_io_acct_remapped
|
bio_end_io_acct_remapped
|
||||||
|
@ -438,3 +483,33 @@ __tracepoint_android_vh_do_folio_trylock
|
||||||
reclaim_pages
|
reclaim_pages
|
||||||
__tracepoint_android_vh_alloc_flags_cma_adjust
|
__tracepoint_android_vh_alloc_flags_cma_adjust
|
||||||
__traceiter_android_vh_alloc_flags_cma_adjust
|
__traceiter_android_vh_alloc_flags_cma_adjust
|
||||||
|
|
||||||
|
# required by xr-qi.ko
|
||||||
|
__tracepoint_android_vh_futex_wait_queue_start
|
||||||
|
__traceiter_android_vh_futex_wait_queue_start
|
||||||
|
|
||||||
|
# required by zsmalloc.ko
|
||||||
|
__traceiter_android_vh_zs_shrinker_adjust
|
||||||
|
__traceiter_android_vh_zs_shrinker_bypass
|
||||||
|
__tracepoint_android_vh_zs_shrinker_adjust
|
||||||
|
__tracepoint_android_vh_zs_shrinker_bypass
|
||||||
|
|
||||||
|
# required by msm_drm.ko
|
||||||
|
pwm_apply_might_sleep
|
||||||
|
|
||||||
|
# required by mi_buffer_io_reclaim ko
|
||||||
|
shrink_inactive_list
|
||||||
|
__tracepoint_android_vh_copy_page_to_user
|
||||||
|
__traceiter_android_vh_copy_page_to_user
|
||||||
|
__tracepoint_android_vh_copy_page_from_user
|
||||||
|
__traceiter_android_vh_copy_page_from_user
|
||||||
|
__tracepoint_android_vh_destroy_inode
|
||||||
|
__traceiter_android_vh_destroy_inode
|
||||||
|
|
||||||
|
# required by gzvm.ko
|
||||||
|
__traceiter_android_vh_gzvm_destroy_vm_post_process
|
||||||
|
__tracepoint_android_vh_gzvm_destroy_vm_post_process
|
||||||
|
__traceiter_android_vh_gzvm_handle_demand_page_pre
|
||||||
|
__traceiter_android_vh_gzvm_handle_demand_page_post
|
||||||
|
__tracepoint_android_vh_gzvm_handle_demand_page_pre
|
||||||
|
__tracepoint_android_vh_gzvm_handle_demand_page_post
|
||||||
|
|
|
@ -1,64 +0,0 @@
|
||||||
arch/arm64/geniezone/gzvm.ko
|
|
||||||
drivers/bluetooth/btbcm.ko
|
|
||||||
drivers/bluetooth/btqca.ko
|
|
||||||
drivers/bluetooth/btsdio.ko
|
|
||||||
drivers/bluetooth/hci_uart.ko
|
|
||||||
drivers/net/can/dev/can-dev.ko
|
|
||||||
drivers/net/can/slcan/slcan.ko
|
|
||||||
drivers/net/can/vcan.ko
|
|
||||||
drivers/net/macsec.ko
|
|
||||||
drivers/net/mii.ko
|
|
||||||
drivers/net/ppp/bsd_comp.ko
|
|
||||||
drivers/net/ppp/ppp_deflate.ko
|
|
||||||
drivers/net/ppp/ppp_generic.ko
|
|
||||||
drivers/net/ppp/ppp_mppe.ko
|
|
||||||
drivers/net/ppp/pppox.ko
|
|
||||||
drivers/net/ppp/pptp.ko
|
|
||||||
drivers/net/slip/slhc.ko
|
|
||||||
drivers/net/usb/aqc111.ko
|
|
||||||
drivers/net/usb/asix.ko
|
|
||||||
drivers/net/usb/ax88179_178a.ko
|
|
||||||
drivers/net/usb/cdc_eem.ko
|
|
||||||
drivers/net/usb/cdc_ether.ko
|
|
||||||
drivers/net/usb/cdc_ncm.ko
|
|
||||||
drivers/net/usb/r8152.ko
|
|
||||||
drivers/net/usb/r8153_ecm.ko
|
|
||||||
drivers/net/usb/rtl8150.ko
|
|
||||||
drivers/net/usb/usbnet.ko
|
|
||||||
drivers/net/wwan/wwan.ko
|
|
||||||
drivers/pps/pps_core.ko
|
|
||||||
drivers/ptp/ptp.ko
|
|
||||||
drivers/ptp/ptp_kvm.ko
|
|
||||||
drivers/usb/class/cdc-acm.ko
|
|
||||||
drivers/usb/mon/usbmon.ko
|
|
||||||
drivers/usb/serial/ftdi_sio.ko
|
|
||||||
drivers/usb/serial/usbserial.ko
|
|
||||||
lib/crypto/libarc4.ko
|
|
||||||
net/6lowpan/6lowpan.ko
|
|
||||||
net/6lowpan/nhc_dest.ko
|
|
||||||
net/6lowpan/nhc_fragment.ko
|
|
||||||
net/6lowpan/nhc_hop.ko
|
|
||||||
net/6lowpan/nhc_ipv6.ko
|
|
||||||
net/6lowpan/nhc_mobility.ko
|
|
||||||
net/6lowpan/nhc_routing.ko
|
|
||||||
net/6lowpan/nhc_udp.ko
|
|
||||||
net/8021q/8021q.ko
|
|
||||||
net/9p/9pnet.ko
|
|
||||||
net/9p/9pnet_fd.ko
|
|
||||||
net/bluetooth/bluetooth.ko
|
|
||||||
net/bluetooth/hidp/hidp.ko
|
|
||||||
net/bluetooth/rfcomm/rfcomm.ko
|
|
||||||
net/can/can.ko
|
|
||||||
net/can/can-bcm.ko
|
|
||||||
net/can/can-gw.ko
|
|
||||||
net/can/can-raw.ko
|
|
||||||
net/ieee802154/6lowpan/ieee802154_6lowpan.ko
|
|
||||||
net/ieee802154/ieee802154.ko
|
|
||||||
net/ieee802154/ieee802154_socket.ko
|
|
||||||
net/l2tp/l2tp_core.ko
|
|
||||||
net/l2tp/l2tp_ppp.ko
|
|
||||||
net/mac802154/mac802154.ko
|
|
||||||
net/nfc/nfc.ko
|
|
||||||
net/rfkill/rfkill.ko
|
|
||||||
net/tipc/diag.ko
|
|
||||||
net/tipc/tipc.ko
|
|
|
@ -77,7 +77,7 @@
|
||||||
};
|
};
|
||||||
|
|
||||||
&hdmi {
|
&hdmi {
|
||||||
hpd-gpios = <&expgpio 1 GPIO_ACTIVE_LOW>;
|
hpd-gpios = <&expgpio 0 GPIO_ACTIVE_LOW>;
|
||||||
power-domains = <&power RPI_POWER_DOMAIN_HDMI>;
|
power-domains = <&power RPI_POWER_DOMAIN_HDMI>;
|
||||||
status = "okay";
|
status = "okay";
|
||||||
};
|
};
|
||||||
|
|
|
@ -10,7 +10,7 @@
|
||||||
#
|
#
|
||||||
# Copyright (C) 1995-2001 by Russell King
|
# Copyright (C) 1995-2001 by Russell King
|
||||||
|
|
||||||
LDFLAGS_vmlinux :=--no-undefined -X
|
LDFLAGS_vmlinux :=--no-undefined -X --pic-veneer
|
||||||
|
|
||||||
ifeq ($(CONFIG_RELOCATABLE), y)
|
ifeq ($(CONFIG_RELOCATABLE), y)
|
||||||
# Pass --no-apply-dynamic-relocs to restore pre-binutils-2.27 behaviour
|
# Pass --no-apply-dynamic-relocs to restore pre-binutils-2.27 behaviour
|
||||||
|
|
|
@ -69,3 +69,8 @@
|
||||||
&uart1 {
|
&uart1 {
|
||||||
/delete-node/ bluetooth;
|
/delete-node/ bluetooth;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/* Disable uart3 which conflicts with the mute pin of 8mic board */
|
||||||
|
&uart3 {
|
||||||
|
status = "disabled";
|
||||||
|
};
|
||||||
|
|
|
@ -7,3 +7,7 @@
|
||||||
&usdhc1 {
|
&usdhc1 {
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
&uart3 {
|
||||||
|
status = "ok";
|
||||||
|
};
|
||||||
|
|
|
@ -69,3 +69,8 @@
|
||||||
&uart1 {
|
&uart1 {
|
||||||
/delete-node/ bluetooth;
|
/delete-node/ bluetooth;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/* Disable uart3 which conflicts with the mute pin of 8mic board */
|
||||||
|
&uart3 {
|
||||||
|
status = "disabled";
|
||||||
|
};
|
||||||
|
|
|
@ -26,7 +26,6 @@
|
||||||
model = "wm8962-audio";
|
model = "wm8962-audio";
|
||||||
audio-cpu = <&sai1>;
|
audio-cpu = <&sai1>;
|
||||||
audio-codec = <&wm8962>;
|
audio-codec = <&wm8962>;
|
||||||
hp-det-gpio = <&lsio_gpio0 31 GPIO_ACTIVE_HIGH>;
|
|
||||||
audio-routing =
|
audio-routing =
|
||||||
"Headphone Jack", "HPOUTL",
|
"Headphone Jack", "HPOUTL",
|
||||||
"Headphone Jack", "HPOUTR",
|
"Headphone Jack", "HPOUTR",
|
||||||
|
|
|
@ -66,8 +66,34 @@
|
||||||
ftrace-size = <0x00020000>;
|
ftrace-size = <0x00020000>;
|
||||||
pmsg-size = <0x00020000>;
|
pmsg-size = <0x00020000>;
|
||||||
};
|
};
|
||||||
|
secure_region: secure {
|
||||||
|
compatible = "imx-secure-ion-pool";
|
||||||
|
reg = <0x0 0xE0000000 0 0x10000000>;
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
&lpuart1 {
|
&lpuart1 {
|
||||||
/delete-node/ bluetooth;
|
/delete-node/ bluetooth;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
&dc0_dpr1_channel1 {
|
||||||
|
trusty;
|
||||||
|
};
|
||||||
|
&dc0_dpr1_channel2 {
|
||||||
|
trusty;
|
||||||
|
};
|
||||||
|
&dc0_dpr1_channel3 {
|
||||||
|
trusty;
|
||||||
|
};
|
||||||
|
&dc0_dpr2_channel1 {
|
||||||
|
trusty;
|
||||||
|
};
|
||||||
|
&dc0_dpr2_channel2 {
|
||||||
|
trusty;
|
||||||
|
};
|
||||||
|
&dc0_dpr2_channel3 {
|
||||||
|
trusty;
|
||||||
|
};
|
||||||
|
&dpu1 {
|
||||||
|
trusty;
|
||||||
|
};
|
||||||
|
|
|
@ -88,8 +88,8 @@
|
||||||
#size-cells = <2>;
|
#size-cells = <2>;
|
||||||
ranges;
|
ranges;
|
||||||
|
|
||||||
decoder_boot: decoder-boot@84000000 {
|
decoder_boot: decoder-boot@96000000 {
|
||||||
reg = <0 0x84000000 0 0x2000000>;
|
reg = <0 0x96000000 0 0x2000000>;
|
||||||
no-map;
|
no-map;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -98,8 +98,8 @@
|
||||||
no-map;
|
no-map;
|
||||||
};
|
};
|
||||||
|
|
||||||
decoder_rpc: decoder-rpc@92000000 {
|
decoder_rpc: decoder-rpc@a4000000 {
|
||||||
reg = <0 0x92000000 0 0x100000>;
|
reg = <0 0xa4000000 0 0x100000>;
|
||||||
no-map;
|
no-map;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -137,6 +137,7 @@ CONFIG_DAMON_VADDR=y
|
||||||
CONFIG_DAMON_SYSFS=y
|
CONFIG_DAMON_SYSFS=y
|
||||||
CONFIG_NET=y
|
CONFIG_NET=y
|
||||||
CONFIG_PACKET=y
|
CONFIG_PACKET=y
|
||||||
|
CONFIG_TLS=m
|
||||||
CONFIG_XFRM_USER=y
|
CONFIG_XFRM_USER=y
|
||||||
CONFIG_XFRM_INTERFACE=y
|
CONFIG_XFRM_INTERFACE=y
|
||||||
CONFIG_XFRM_MIGRATE=y
|
CONFIG_XFRM_MIGRATE=y
|
||||||
|
@ -526,6 +527,7 @@ CONFIG_USB_ANNOUNCE_NEW_DEVICES=y
|
||||||
CONFIG_USB_OTG=y
|
CONFIG_USB_OTG=y
|
||||||
CONFIG_USB_MON=m
|
CONFIG_USB_MON=m
|
||||||
CONFIG_USB_XHCI_HCD=y
|
CONFIG_USB_XHCI_HCD=y
|
||||||
|
CONFIG_USB_XHCI_SIDEBAND=y
|
||||||
CONFIG_USB_EHCI_HCD=y
|
CONFIG_USB_EHCI_HCD=y
|
||||||
CONFIG_USB_EHCI_ROOT_HUB_TT=y
|
CONFIG_USB_EHCI_ROOT_HUB_TT=y
|
||||||
CONFIG_USB_EHCI_HCD_PLATFORM=y
|
CONFIG_USB_EHCI_HCD_PLATFORM=y
|
||||||
|
@ -590,7 +592,6 @@ CONFIG_GUNYAH=y
|
||||||
CONFIG_GUNYAH_IRQFD=y
|
CONFIG_GUNYAH_IRQFD=y
|
||||||
CONFIG_GUNYAH_IOEVENTFD=y
|
CONFIG_GUNYAH_IOEVENTFD=y
|
||||||
CONFIG_VIRTIO_PCI=m
|
CONFIG_VIRTIO_PCI=m
|
||||||
# CONFIG_VIRTIO_PCI_LEGACY is not set
|
|
||||||
CONFIG_VIRTIO_BALLOON=m
|
CONFIG_VIRTIO_BALLOON=m
|
||||||
CONFIG_VHOST_VSOCK=y
|
CONFIG_VHOST_VSOCK=y
|
||||||
CONFIG_STAGING=y
|
CONFIG_STAGING=y
|
||||||
|
|
|
@ -81,15 +81,24 @@ int gzvm_arch_inform_exit(u16 vm_id)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int gzvm_arch_probe(void)
|
int gzvm_arch_probe(struct gzvm_version drv_version,
|
||||||
|
struct gzvm_version *hyp_version)
|
||||||
{
|
{
|
||||||
struct arm_smccc_res res;
|
struct arm_smccc_res res;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
ret = gzvm_hypcall_wrapper(MT_HVC_GZVM_PROBE, 0, 0, 0, 0, 0, 0, 0, &res);
|
ret = gzvm_hypcall_wrapper(MT_HVC_GZVM_PROBE,
|
||||||
|
drv_version.major,
|
||||||
|
drv_version.minor,
|
||||||
|
drv_version.sub,
|
||||||
|
0, 0, 0, 0, &res);
|
||||||
if (ret)
|
if (ret)
|
||||||
return -ENXIO;
|
return -ENXIO;
|
||||||
|
|
||||||
|
hyp_version->major = (u32)res.a1;
|
||||||
|
hyp_version->minor = (u32)res.a2;
|
||||||
|
hyp_version->sub = res.a3;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -166,12 +175,18 @@ int gzvm_arch_create_vm(unsigned long vm_type)
|
||||||
return ret ? ret : res.a1;
|
return ret ? ret : res.a1;
|
||||||
}
|
}
|
||||||
|
|
||||||
int gzvm_arch_destroy_vm(u16 vm_id)
|
int gzvm_arch_destroy_vm(u16 vm_id, u64 destroy_page_gran)
|
||||||
{
|
{
|
||||||
struct arm_smccc_res res;
|
struct arm_smccc_res res;
|
||||||
|
int ret;
|
||||||
|
|
||||||
return gzvm_hypcall_wrapper(MT_HVC_GZVM_DESTROY_VM, vm_id, 0, 0, 0, 0,
|
do {
|
||||||
0, 0, &res);
|
ret = gzvm_hypcall_wrapper(MT_HVC_GZVM_DESTROY_VM, vm_id,
|
||||||
|
destroy_page_gran, 0, 0,
|
||||||
|
0, 0, 0, &res);
|
||||||
|
} while (ret == -EAGAIN);
|
||||||
|
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
int gzvm_arch_memregion_purpose(struct gzvm *gzvm,
|
int gzvm_arch_memregion_purpose(struct gzvm *gzvm,
|
||||||
|
@ -203,6 +218,50 @@ static int gzvm_vm_arch_enable_cap(struct gzvm *gzvm,
|
||||||
res);
|
res);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int gzvm_arch_enable_cap(struct gzvm_enable_cap *cap,
|
||||||
|
struct arm_smccc_res *res)
|
||||||
|
{
|
||||||
|
return gzvm_hypcall_wrapper(MT_HVC_GZVM_ENABLE_CAP, 0,
|
||||||
|
cap->cap, cap->args[0], cap->args[1],
|
||||||
|
cap->args[2], cap->args[3], cap->args[4],
|
||||||
|
res);
|
||||||
|
}
|
||||||
|
|
||||||
|
int gzvm_arch_query_hyp_batch_pages(struct gzvm_enable_cap *cap,
|
||||||
|
void __user *argp)
|
||||||
|
{
|
||||||
|
struct arm_smccc_res res = {0};
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
ret = gzvm_arch_enable_cap(cap, &res);
|
||||||
|
|
||||||
|
if (ret)
|
||||||
|
return ret;
|
||||||
|
|
||||||
|
if (res.a1 == 0 ||
|
||||||
|
GZVM_BLOCK_BASED_DEMAND_PAGE_SIZE % (PAGE_SIZE * res.a1) != 0)
|
||||||
|
return -EFAULT;
|
||||||
|
|
||||||
|
cap->args[0] = res.a1;
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
int gzvm_arch_query_destroy_batch_pages(struct gzvm_enable_cap *cap,
|
||||||
|
void __user *argp)
|
||||||
|
{
|
||||||
|
struct arm_smccc_res res = {0};
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
ret = gzvm_arch_enable_cap(cap, &res);
|
||||||
|
/* destroy page batch size should be power of 2 */
|
||||||
|
if (ret || ((res.a1 & (res.a1 - 1)) != 0))
|
||||||
|
return -EINVAL;
|
||||||
|
|
||||||
|
cap->args[0] = res.a1;
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* gzvm_vm_ioctl_get_pvmfw_size() - Get pvmfw size from hypervisor, return
|
* gzvm_vm_ioctl_get_pvmfw_size() - Get pvmfw size from hypervisor, return
|
||||||
* in x1, and return to userspace in args
|
* in x1, and return to userspace in args
|
||||||
|
|
|
@ -232,6 +232,8 @@ struct kvm_pinned_page {
|
||||||
u16 pins;
|
u16 pins;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#define KVM_DUMMY_PPAGE ((struct kvm_pinned_page *)-1)
|
||||||
|
|
||||||
typedef unsigned int pkvm_handle_t;
|
typedef unsigned int pkvm_handle_t;
|
||||||
|
|
||||||
struct kvm_protected_vm {
|
struct kvm_protected_vm {
|
||||||
|
|
|
@ -10,11 +10,9 @@
|
||||||
#include <asm/insn.h>
|
#include <asm/insn.h>
|
||||||
#include <asm/probes.h>
|
#include <asm/probes.h>
|
||||||
|
|
||||||
#define MAX_UINSN_BYTES AARCH64_INSN_SIZE
|
|
||||||
|
|
||||||
#define UPROBE_SWBP_INSN cpu_to_le32(BRK64_OPCODE_UPROBES)
|
#define UPROBE_SWBP_INSN cpu_to_le32(BRK64_OPCODE_UPROBES)
|
||||||
#define UPROBE_SWBP_INSN_SIZE AARCH64_INSN_SIZE
|
#define UPROBE_SWBP_INSN_SIZE AARCH64_INSN_SIZE
|
||||||
#define UPROBE_XOL_SLOT_BYTES MAX_UINSN_BYTES
|
#define UPROBE_XOL_SLOT_BYTES AARCH64_INSN_SIZE
|
||||||
|
|
||||||
typedef __le32 uprobe_opcode_t;
|
typedef __le32 uprobe_opcode_t;
|
||||||
|
|
||||||
|
@ -23,8 +21,8 @@ struct arch_uprobe_task {
|
||||||
|
|
||||||
struct arch_uprobe {
|
struct arch_uprobe {
|
||||||
union {
|
union {
|
||||||
u8 insn[MAX_UINSN_BYTES];
|
__le32 insn;
|
||||||
u8 ixol[MAX_UINSN_BYTES];
|
__le32 ixol;
|
||||||
};
|
};
|
||||||
struct arch_probe_insn api;
|
struct arch_probe_insn api;
|
||||||
bool simulate;
|
bool simulate;
|
||||||
|
|
|
@ -99,10 +99,6 @@ arm_probe_decode_insn(probe_opcode_t insn, struct arch_probe_insn *api)
|
||||||
aarch64_insn_is_blr(insn) ||
|
aarch64_insn_is_blr(insn) ||
|
||||||
aarch64_insn_is_ret(insn)) {
|
aarch64_insn_is_ret(insn)) {
|
||||||
api->handler = simulate_br_blr_ret;
|
api->handler = simulate_br_blr_ret;
|
||||||
} else if (aarch64_insn_is_ldr_lit(insn)) {
|
|
||||||
api->handler = simulate_ldr_literal;
|
|
||||||
} else if (aarch64_insn_is_ldrsw_lit(insn)) {
|
|
||||||
api->handler = simulate_ldrsw_literal;
|
|
||||||
} else {
|
} else {
|
||||||
/*
|
/*
|
||||||
* Instruction cannot be stepped out-of-line and we don't
|
* Instruction cannot be stepped out-of-line and we don't
|
||||||
|
@ -140,6 +136,17 @@ arm_kprobe_decode_insn(kprobe_opcode_t *addr, struct arch_specific_insn *asi)
|
||||||
probe_opcode_t insn = le32_to_cpu(*addr);
|
probe_opcode_t insn = le32_to_cpu(*addr);
|
||||||
probe_opcode_t *scan_end = NULL;
|
probe_opcode_t *scan_end = NULL;
|
||||||
unsigned long size = 0, offset = 0;
|
unsigned long size = 0, offset = 0;
|
||||||
|
struct arch_probe_insn *api = &asi->api;
|
||||||
|
|
||||||
|
if (aarch64_insn_is_ldr_lit(insn)) {
|
||||||
|
api->handler = simulate_ldr_literal;
|
||||||
|
decoded = INSN_GOOD_NO_SLOT;
|
||||||
|
} else if (aarch64_insn_is_ldrsw_lit(insn)) {
|
||||||
|
api->handler = simulate_ldrsw_literal;
|
||||||
|
decoded = INSN_GOOD_NO_SLOT;
|
||||||
|
} else {
|
||||||
|
decoded = arm_probe_decode_insn(insn, &asi->api);
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* If there's a symbol defined in front of and near enough to
|
* If there's a symbol defined in front of and near enough to
|
||||||
|
@ -157,7 +164,6 @@ arm_kprobe_decode_insn(kprobe_opcode_t *addr, struct arch_specific_insn *asi)
|
||||||
else
|
else
|
||||||
scan_end = addr - MAX_ATOMIC_CONTEXT_SIZE;
|
scan_end = addr - MAX_ATOMIC_CONTEXT_SIZE;
|
||||||
}
|
}
|
||||||
decoded = arm_probe_decode_insn(insn, &asi->api);
|
|
||||||
|
|
||||||
if (decoded != INSN_REJECTED && scan_end)
|
if (decoded != INSN_REJECTED && scan_end)
|
||||||
if (is_probed_address_atomic(addr - 1, scan_end))
|
if (is_probed_address_atomic(addr - 1, scan_end))
|
||||||
|
|
|
@ -171,17 +171,15 @@ simulate_tbz_tbnz(u32 opcode, long addr, struct pt_regs *regs)
|
||||||
void __kprobes
|
void __kprobes
|
||||||
simulate_ldr_literal(u32 opcode, long addr, struct pt_regs *regs)
|
simulate_ldr_literal(u32 opcode, long addr, struct pt_regs *regs)
|
||||||
{
|
{
|
||||||
u64 *load_addr;
|
unsigned long load_addr;
|
||||||
int xn = opcode & 0x1f;
|
int xn = opcode & 0x1f;
|
||||||
int disp;
|
|
||||||
|
|
||||||
disp = ldr_displacement(opcode);
|
load_addr = addr + ldr_displacement(opcode);
|
||||||
load_addr = (u64 *) (addr + disp);
|
|
||||||
|
|
||||||
if (opcode & (1 << 30)) /* x0-x30 */
|
if (opcode & (1 << 30)) /* x0-x30 */
|
||||||
set_x_reg(regs, xn, *load_addr);
|
set_x_reg(regs, xn, READ_ONCE(*(u64 *)load_addr));
|
||||||
else /* w0-w30 */
|
else /* w0-w30 */
|
||||||
set_w_reg(regs, xn, *load_addr);
|
set_w_reg(regs, xn, READ_ONCE(*(u32 *)load_addr));
|
||||||
|
|
||||||
instruction_pointer_set(regs, instruction_pointer(regs) + 4);
|
instruction_pointer_set(regs, instruction_pointer(regs) + 4);
|
||||||
}
|
}
|
||||||
|
@ -189,14 +187,12 @@ simulate_ldr_literal(u32 opcode, long addr, struct pt_regs *regs)
|
||||||
void __kprobes
|
void __kprobes
|
||||||
simulate_ldrsw_literal(u32 opcode, long addr, struct pt_regs *regs)
|
simulate_ldrsw_literal(u32 opcode, long addr, struct pt_regs *regs)
|
||||||
{
|
{
|
||||||
s32 *load_addr;
|
unsigned long load_addr;
|
||||||
int xn = opcode & 0x1f;
|
int xn = opcode & 0x1f;
|
||||||
int disp;
|
|
||||||
|
|
||||||
disp = ldr_displacement(opcode);
|
load_addr = addr + ldr_displacement(opcode);
|
||||||
load_addr = (s32 *) (addr + disp);
|
|
||||||
|
|
||||||
set_x_reg(regs, xn, *load_addr);
|
set_x_reg(regs, xn, READ_ONCE(*(s32 *)load_addr));
|
||||||
|
|
||||||
instruction_pointer_set(regs, instruction_pointer(regs) + 4);
|
instruction_pointer_set(regs, instruction_pointer(regs) + 4);
|
||||||
}
|
}
|
||||||
|
|
|
@ -42,7 +42,7 @@ int arch_uprobe_analyze_insn(struct arch_uprobe *auprobe, struct mm_struct *mm,
|
||||||
else if (!IS_ALIGNED(addr, AARCH64_INSN_SIZE))
|
else if (!IS_ALIGNED(addr, AARCH64_INSN_SIZE))
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
insn = *(probe_opcode_t *)(&auprobe->insn[0]);
|
insn = le32_to_cpu(auprobe->insn);
|
||||||
|
|
||||||
switch (arm_probe_decode_insn(insn, &auprobe->api)) {
|
switch (arm_probe_decode_insn(insn, &auprobe->api)) {
|
||||||
case INSN_REJECTED:
|
case INSN_REJECTED:
|
||||||
|
@ -108,7 +108,7 @@ bool arch_uprobe_skip_sstep(struct arch_uprobe *auprobe, struct pt_regs *regs)
|
||||||
if (!auprobe->simulate)
|
if (!auprobe->simulate)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
insn = *(probe_opcode_t *)(&auprobe->insn[0]);
|
insn = le32_to_cpu(auprobe->insn);
|
||||||
addr = instruction_pointer(regs);
|
addr = instruction_pointer(regs);
|
||||||
|
|
||||||
if (auprobe->api.handler)
|
if (auprobe->api.handler)
|
||||||
|
|
|
@ -798,9 +798,15 @@ done:
|
||||||
int hyp_alloc_refill(struct kvm_hyp_memcache *host_mc)
|
int hyp_alloc_refill(struct kvm_hyp_memcache *host_mc)
|
||||||
{
|
{
|
||||||
struct kvm_hyp_memcache *alloc_mc = this_cpu_ptr(&hyp_allocator_mc);
|
struct kvm_hyp_memcache *alloc_mc = this_cpu_ptr(&hyp_allocator_mc);
|
||||||
|
int ret;
|
||||||
|
struct hyp_allocator *allocator = &hyp_allocator;
|
||||||
|
|
||||||
return refill_memcache(alloc_mc, host_mc->nr_pages + alloc_mc->nr_pages,
|
hyp_spin_lock(&allocator->lock);
|
||||||
host_mc);
|
ret = refill_memcache(alloc_mc, host_mc->nr_pages + alloc_mc->nr_pages,
|
||||||
|
host_mc);
|
||||||
|
hyp_spin_unlock(&allocator->lock);
|
||||||
|
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
int hyp_alloc_init(size_t size)
|
int hyp_alloc_init(size_t size)
|
||||||
|
|
|
@ -158,22 +158,16 @@ static void prepare_host_vtcr(void)
|
||||||
static int prepopulate_host_stage2(void)
|
static int prepopulate_host_stage2(void)
|
||||||
{
|
{
|
||||||
struct memblock_region *reg;
|
struct memblock_region *reg;
|
||||||
u64 addr = 0;
|
int i, ret = 0;
|
||||||
int i, ret;
|
|
||||||
|
|
||||||
for (i = 0; i < hyp_memblock_nr; i++) {
|
for (i = 0; i < hyp_memblock_nr; i++) {
|
||||||
reg = &hyp_memory[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);
|
ret = host_stage2_idmap_locked(reg->base, reg->size, PKVM_HOST_MEM_PROT, false);
|
||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
addr = reg->base + reg->size;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return host_stage2_idmap_locked(addr, BIT(host_mmu.pgt.ia_bits) - addr,
|
return ret;
|
||||||
PKVM_HOST_MMIO_PROT, false);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int kvm_host_prepare_stage2(void *pgt_pool_base)
|
int kvm_host_prepare_stage2(void *pgt_pool_base)
|
||||||
|
@ -1209,9 +1203,9 @@ static int host_ack_donation(u64 addr,
|
||||||
|
|
||||||
static int host_ack_unshare(const struct pkvm_checked_mem_transition *checked_tx)
|
static int host_ack_unshare(const struct pkvm_checked_mem_transition *checked_tx)
|
||||||
{
|
{
|
||||||
return __host_ack_transition(checked_tx->completer_addr,
|
return __host_check_page_state_range(checked_tx->completer_addr,
|
||||||
checked_tx->nr_pages * PAGE_SIZE,
|
checked_tx->nr_pages * PAGE_SIZE,
|
||||||
checked_tx->tx, PKVM_PAGE_SHARED_BORROWED);
|
PKVM_PAGE_SHARED_BORROWED);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int host_complete_share(const struct pkvm_checked_mem_transition *checked_tx,
|
static int host_complete_share(const struct pkvm_checked_mem_transition *checked_tx,
|
||||||
|
@ -1325,13 +1319,9 @@ static int hyp_ack_share(const struct pkvm_checked_mem_transition *checked_tx,
|
||||||
|
|
||||||
static int hyp_ack_unshare(const struct pkvm_checked_mem_transition *checked_tx)
|
static int hyp_ack_unshare(const struct pkvm_checked_mem_transition *checked_tx)
|
||||||
{
|
{
|
||||||
const struct pkvm_mem_transition *tx = checked_tx->tx;
|
|
||||||
u64 size = checked_tx->nr_pages * PAGE_SIZE;
|
u64 size = checked_tx->nr_pages * PAGE_SIZE;
|
||||||
u64 addr = checked_tx->completer_addr;
|
u64 addr = checked_tx->completer_addr;
|
||||||
|
|
||||||
if (__hyp_ack_skip_pgtable_check(tx))
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
return __hyp_check_page_state_range(addr, size,
|
return __hyp_check_page_state_range(addr, size,
|
||||||
PKVM_PAGE_SHARED_BORROWED);
|
PKVM_PAGE_SHARED_BORROWED);
|
||||||
}
|
}
|
||||||
|
@ -2832,14 +2822,7 @@ void destroy_hyp_vm_pgt(struct pkvm_hyp_vm *vm)
|
||||||
|
|
||||||
void drain_hyp_pool(struct pkvm_hyp_vm *vm, struct kvm_hyp_memcache *mc)
|
void drain_hyp_pool(struct pkvm_hyp_vm *vm, struct kvm_hyp_memcache *mc)
|
||||||
{
|
{
|
||||||
void *addr = hyp_alloc_pages(&vm->pool, 0);
|
WARN_ON(reclaim_hyp_pool(&vm->pool, mc, INT_MAX) != -ENOMEM);
|
||||||
|
|
||||||
while (addr) {
|
|
||||||
hyp_page_ref_dec(hyp_virt_to_page(addr));
|
|
||||||
push_hyp_memcache(mc, addr, hyp_virt_to_phys, 0);
|
|
||||||
WARN_ON(__pkvm_hyp_donate_host(hyp_virt_to_pfn(addr), 1));
|
|
||||||
addr = hyp_alloc_pages(&vm->pool, 0);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int __pkvm_host_reclaim_page(struct pkvm_hyp_vm *vm, u64 pfn, u64 ipa, u8 order)
|
int __pkvm_host_reclaim_page(struct pkvm_hyp_vm *vm, u64 pfn, u64 ipa, u8 order)
|
||||||
|
|
|
@ -620,18 +620,31 @@ int refill_hyp_pool(struct hyp_pool *pool, struct kvm_hyp_memcache *host_mc)
|
||||||
int reclaim_hyp_pool(struct hyp_pool *pool, struct kvm_hyp_memcache *host_mc,
|
int reclaim_hyp_pool(struct hyp_pool *pool, struct kvm_hyp_memcache *host_mc,
|
||||||
int nr_pages)
|
int nr_pages)
|
||||||
{
|
{
|
||||||
void *p;
|
|
||||||
struct hyp_page *page;
|
struct hyp_page *page;
|
||||||
|
u8 order;
|
||||||
|
void *p;
|
||||||
|
|
||||||
while (nr_pages > 0) {
|
while (nr_pages > 0) {
|
||||||
p = hyp_alloc_pages(pool, 0);
|
p = hyp_alloc_pages(pool, 0);
|
||||||
if (!p)
|
if (!p)
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
page = hyp_virt_to_page(p);
|
page = hyp_virt_to_page(p);
|
||||||
nr_pages -= (1 << page->order);
|
order = page->order;
|
||||||
push_hyp_memcache(host_mc, p, hyp_virt_to_phys, page->order);
|
nr_pages -= (1 << order);
|
||||||
WARN_ON(__pkvm_hyp_donate_host(hyp_virt_to_pfn(p), 1 << page->order));
|
|
||||||
memset(page, 0, sizeof(struct hyp_page));
|
/*
|
||||||
|
* For a compound page all the tail pages should normally
|
||||||
|
* have page->order == HYP_NO_ORDER which would need to be
|
||||||
|
* cleared one by one. But in this instance, the order 0
|
||||||
|
* allocation above can only return an _external_ compound
|
||||||
|
* page which is in fact ignored by the buddy logic, and the
|
||||||
|
* tail pages are never touched.
|
||||||
|
*/
|
||||||
|
page->order = 0;
|
||||||
|
hyp_page_ref_dec(page);
|
||||||
|
|
||||||
|
push_hyp_memcache(host_mc, p, hyp_virt_to_phys, order);
|
||||||
|
WARN_ON(__pkvm_hyp_donate_host(hyp_virt_to_pfn(p), 1 << order));
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
|
@ -326,6 +326,9 @@ static int pkvm_unmap_range(struct kvm *kvm, u64 start, u64 end)
|
||||||
|
|
||||||
mt_for_each(&kvm->arch.pkvm.pinned_pages, entry, index, end - 1) {
|
mt_for_each(&kvm->arch.pkvm.pinned_pages, entry, index, end - 1) {
|
||||||
struct kvm_pinned_page *ppage = entry;
|
struct kvm_pinned_page *ppage = entry;
|
||||||
|
|
||||||
|
if (ppage == KVM_DUMMY_PPAGE)
|
||||||
|
continue;
|
||||||
ret = pkvm_unmap_guest(kvm, ppage);
|
ret = pkvm_unmap_guest(kvm, ppage);
|
||||||
if (ret)
|
if (ret)
|
||||||
break;
|
break;
|
||||||
|
@ -425,6 +428,8 @@ static void pkvm_stage2_flush(struct kvm *kvm)
|
||||||
mt_for_each(&kvm->arch.pkvm.pinned_pages, entry, index, ULONG_MAX) {
|
mt_for_each(&kvm->arch.pkvm.pinned_pages, entry, index, ULONG_MAX) {
|
||||||
struct kvm_pinned_page *ppage = entry;
|
struct kvm_pinned_page *ppage = entry;
|
||||||
|
|
||||||
|
if (ppage == KVM_DUMMY_PPAGE)
|
||||||
|
continue;
|
||||||
__clean_dcache_guest_page(page_address(ppage->page), PAGE_SIZE);
|
__clean_dcache_guest_page(page_address(ppage->page), PAGE_SIZE);
|
||||||
cond_resched_rwlock_write(&kvm->mmu_lock);
|
cond_resched_rwlock_write(&kvm->mmu_lock);
|
||||||
}
|
}
|
||||||
|
@ -1284,7 +1289,11 @@ static int pkvm_wp_range(struct kvm *kvm, u64 start, u64 end)
|
||||||
|
|
||||||
mt_for_each(&kvm->arch.pkvm.pinned_pages, entry, index, end - 1) {
|
mt_for_each(&kvm->arch.pkvm.pinned_pages, entry, index, end - 1) {
|
||||||
struct kvm_pinned_page *ppage = entry;
|
struct kvm_pinned_page *ppage = entry;
|
||||||
int ret = pkvm_call_hyp_nvhe_ppage(ppage, __pkvm_wrprotect_call,
|
int ret;
|
||||||
|
|
||||||
|
if (ppage == KVM_DUMMY_PPAGE)
|
||||||
|
continue;
|
||||||
|
ret = pkvm_call_hyp_nvhe_ppage(ppage, __pkvm_wrprotect_call,
|
||||||
kvm, false);
|
kvm, false);
|
||||||
|
|
||||||
if (ret)
|
if (ret)
|
||||||
|
@ -1635,27 +1644,22 @@ find_ppage_or_above(struct kvm *kvm, phys_addr_t ipa)
|
||||||
unsigned long index = ipa;
|
unsigned long index = ipa;
|
||||||
void *entry;
|
void *entry;
|
||||||
|
|
||||||
mt_for_each(&kvm->arch.pkvm.pinned_pages, entry, index, ULONG_MAX)
|
mt_for_each(&kvm->arch.pkvm.pinned_pages, entry, index, ULONG_MAX) {
|
||||||
|
if (entry == KVM_DUMMY_PPAGE)
|
||||||
|
continue;
|
||||||
return entry;
|
return entry;
|
||||||
|
}
|
||||||
|
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int insert_ppage(struct kvm *kvm, struct kvm_pinned_page *ppage)
|
|
||||||
{
|
|
||||||
size_t size = PAGE_SIZE << ppage->order;
|
|
||||||
unsigned long start = ppage->ipa;
|
|
||||||
unsigned long end = start + size - 1;
|
|
||||||
|
|
||||||
return mtree_insert_range(&kvm->arch.pkvm.pinned_pages, start, end,
|
|
||||||
ppage, GFP_KERNEL);
|
|
||||||
}
|
|
||||||
|
|
||||||
static struct kvm_pinned_page *find_ppage(struct kvm *kvm, u64 ipa)
|
static struct kvm_pinned_page *find_ppage(struct kvm *kvm, u64 ipa)
|
||||||
{
|
{
|
||||||
|
struct kvm_pinned_page *ppage;
|
||||||
unsigned long index = ipa;
|
unsigned long index = ipa;
|
||||||
|
|
||||||
return mt_find(&kvm->arch.pkvm.pinned_pages, &index, ipa + PAGE_SIZE - 1);
|
ppage = mt_find(&kvm->arch.pkvm.pinned_pages, &index, ipa + PAGE_SIZE - 1);
|
||||||
|
return ppage == KVM_DUMMY_PPAGE ? NULL : ppage;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int __pkvm_relax_perms_call(u64 pfn, u64 gfn, u8 order, void *args)
|
static int __pkvm_relax_perms_call(u64 pfn, u64 gfn, u8 order, void *args)
|
||||||
|
@ -1707,10 +1711,11 @@ static int pkvm_mem_abort(struct kvm_vcpu *vcpu, phys_addr_t *fault_ipa,
|
||||||
{
|
{
|
||||||
unsigned int flags = FOLL_HWPOISON | FOLL_LONGTERM | FOLL_WRITE;
|
unsigned int flags = FOLL_HWPOISON | FOLL_LONGTERM | FOLL_WRITE;
|
||||||
struct kvm_hyp_memcache *hyp_memcache = &vcpu->arch.stage2_mc;
|
struct kvm_hyp_memcache *hyp_memcache = &vcpu->arch.stage2_mc;
|
||||||
unsigned long index, pmd_offset, page_size;
|
unsigned long index, pmd_offset, page_size, end;
|
||||||
struct mm_struct *mm = current->mm;
|
struct mm_struct *mm = current->mm;
|
||||||
struct kvm_pinned_page *ppage;
|
struct kvm_pinned_page *ppage;
|
||||||
struct kvm *kvm = vcpu->kvm;
|
struct kvm *kvm = vcpu->kvm;
|
||||||
|
struct maple_tree *mt = &kvm->arch.pkvm.pinned_pages;
|
||||||
int ret, nr_pages;
|
int ret, nr_pages;
|
||||||
struct page *page;
|
struct page *page;
|
||||||
u64 pfn;
|
u64 pfn;
|
||||||
|
@ -1765,53 +1770,60 @@ static int pkvm_mem_abort(struct kvm_vcpu *vcpu, phys_addr_t *fault_ipa,
|
||||||
fault_ipa);
|
fault_ipa);
|
||||||
page = pfn_to_page(pfn);
|
page = pfn_to_page(pfn);
|
||||||
|
|
||||||
|
retry:
|
||||||
if (size)
|
if (size)
|
||||||
*size = page_size;
|
*size = page_size;
|
||||||
|
|
||||||
retry:
|
|
||||||
ret = account_locked_vm(mm, page_size >> PAGE_SHIFT, true);
|
ret = account_locked_vm(mm, page_size >> PAGE_SHIFT, true);
|
||||||
if (ret)
|
if (ret)
|
||||||
goto unpin;
|
goto unpin;
|
||||||
|
|
||||||
write_lock(&kvm->mmu_lock);
|
index = *fault_ipa;
|
||||||
|
end = index + page_size - 1;
|
||||||
|
ppage->page = page;
|
||||||
|
ppage->ipa = *fault_ipa;
|
||||||
|
ppage->order = get_order(page_size);
|
||||||
|
ppage->pins = 1 << ppage->order;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* If we already have a mapping in the middle of the THP, we have no
|
* If we already have a mapping in the middle of the THP, we have no
|
||||||
* other choice than enforcing PAGE_SIZE for pkvm_host_map_guest() to
|
* other choice than enforcing PAGE_SIZE for pkvm_host_map_guest() to
|
||||||
* succeed.
|
* succeed.
|
||||||
*/
|
*/
|
||||||
index = *fault_ipa;
|
if (page_size > PAGE_SIZE && mt_find(mt, &index, end)) {
|
||||||
if (page_size > PAGE_SIZE &&
|
|
||||||
mt_find(&kvm->arch.pkvm.pinned_pages, &index, index + page_size - 1)) {
|
|
||||||
write_unlock(&kvm->mmu_lock);
|
|
||||||
*fault_ipa += pmd_offset;
|
*fault_ipa += pmd_offset;
|
||||||
pfn += pmd_offset >> PAGE_SHIFT;
|
pfn += pmd_offset >> PAGE_SHIFT;
|
||||||
page = pfn_to_page(pfn);
|
page = pfn_to_page(pfn);
|
||||||
page_size = PAGE_SIZE;
|
|
||||||
account_locked_vm(mm, page_size >> PAGE_SHIFT, false);
|
account_locked_vm(mm, page_size >> PAGE_SHIFT, false);
|
||||||
|
page_size = PAGE_SIZE;
|
||||||
goto retry;
|
goto retry;
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = pkvm_host_map_guest(pfn, *fault_ipa >> PAGE_SHIFT,
|
/* Reserve space in the mtree */
|
||||||
page_size >> PAGE_SHIFT, KVM_PGTABLE_PROT_R);
|
ret = mtree_insert_range(mt, index, end, KVM_DUMMY_PPAGE, GFP_KERNEL);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
if (ret == -EAGAIN)
|
if (ret == -EEXIST)
|
||||||
ret = 0;
|
ret = 0;
|
||||||
|
|
||||||
goto dec_account;
|
goto dec_account;
|
||||||
}
|
}
|
||||||
|
|
||||||
ppage->page = page;
|
write_lock(&kvm->mmu_lock);
|
||||||
ppage->ipa = *fault_ipa;
|
ret = pkvm_host_map_guest(pfn, *fault_ipa >> PAGE_SHIFT,
|
||||||
ppage->order = get_order(page_size);
|
page_size >> PAGE_SHIFT, KVM_PGTABLE_PROT_R);
|
||||||
ppage->pins = 1 << ppage->order;
|
if (ret) {
|
||||||
WARN_ON(insert_ppage(kvm, ppage));
|
if (WARN_ON(ret == -EAGAIN))
|
||||||
|
ret = 0;
|
||||||
|
|
||||||
|
goto err_unlock;
|
||||||
|
}
|
||||||
|
WARN_ON(mtree_store_range(mt, index, end, ppage, GFP_ATOMIC));
|
||||||
write_unlock(&kvm->mmu_lock);
|
write_unlock(&kvm->mmu_lock);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
dec_account:
|
err_unlock:
|
||||||
write_unlock(&kvm->mmu_lock);
|
write_unlock(&kvm->mmu_lock);
|
||||||
|
dec_account:
|
||||||
account_locked_vm(mm, page_size >> PAGE_SHIFT, false);
|
account_locked_vm(mm, page_size >> PAGE_SHIFT, false);
|
||||||
unpin:
|
unpin:
|
||||||
unpin_user_pages(&page, 1);
|
unpin_user_pages(&page, 1);
|
||||||
|
@ -1842,7 +1854,7 @@ int pkvm_mem_abort_range(struct kvm_vcpu *vcpu, phys_addr_t fault_ipa, size_t si
|
||||||
ppage = find_ppage_or_above(vcpu->kvm, fault_ipa);
|
ppage = find_ppage_or_above(vcpu->kvm, fault_ipa);
|
||||||
|
|
||||||
while (fault_ipa < ipa_end) {
|
while (fault_ipa < ipa_end) {
|
||||||
if (ppage && ppage->ipa == fault_ipa) {
|
if (ppage && ppage != KVM_DUMMY_PPAGE && ppage->ipa == fault_ipa) {
|
||||||
page_size = PAGE_SIZE << ppage->order;
|
page_size = PAGE_SIZE << ppage->order;
|
||||||
ppage = mt_next(&vcpu->kvm->arch.pkvm.pinned_pages,
|
ppage = mt_next(&vcpu->kvm->arch.pkvm.pinned_pages,
|
||||||
ppage->ipa, ULONG_MAX);
|
ppage->ipa, ULONG_MAX);
|
||||||
|
|
|
@ -330,6 +330,8 @@ static void __pkvm_destroy_hyp_vm(struct kvm *host_kvm)
|
||||||
WARN_ON(kvm_call_hyp_nvhe(__pkvm_start_teardown_vm, host_kvm->arch.pkvm.handle));
|
WARN_ON(kvm_call_hyp_nvhe(__pkvm_start_teardown_vm, host_kvm->arch.pkvm.handle));
|
||||||
|
|
||||||
mt_for_each(&host_kvm->arch.pkvm.pinned_pages, ppage, ipa, ULONG_MAX) {
|
mt_for_each(&host_kvm->arch.pkvm.pinned_pages, ppage, ipa, ULONG_MAX) {
|
||||||
|
if (WARN_ON(ppage == KVM_DUMMY_PPAGE))
|
||||||
|
continue;
|
||||||
WARN_ON(pkvm_call_hyp_nvhe_ppage(ppage,
|
WARN_ON(pkvm_call_hyp_nvhe_ppage(ppage,
|
||||||
__reclaim_dying_guest_page_call,
|
__reclaim_dying_guest_page_call,
|
||||||
host_kvm, true));
|
host_kvm, true));
|
||||||
|
@ -539,7 +541,7 @@ void pkvm_host_reclaim_page(struct kvm *host_kvm, phys_addr_t ipa)
|
||||||
write_lock(&host_kvm->mmu_lock);
|
write_lock(&host_kvm->mmu_lock);
|
||||||
ppage = mt_find(&host_kvm->arch.pkvm.pinned_pages, &index,
|
ppage = mt_find(&host_kvm->arch.pkvm.pinned_pages, &index,
|
||||||
index + PAGE_SIZE - 1);
|
index + PAGE_SIZE - 1);
|
||||||
if (ppage) {
|
if (ppage && ppage != KVM_DUMMY_PPAGE) {
|
||||||
if (ppage->pins)
|
if (ppage->pins)
|
||||||
ppage->pins--;
|
ppage->pins--;
|
||||||
else
|
else
|
||||||
|
|
|
@ -293,13 +293,15 @@ unsigned long stack_top(void)
|
||||||
{
|
{
|
||||||
unsigned long top = TASK_SIZE & PAGE_MASK;
|
unsigned long top = TASK_SIZE & PAGE_MASK;
|
||||||
|
|
||||||
/* Space for the VDSO & data page */
|
if (current->thread.vdso) {
|
||||||
top -= PAGE_ALIGN(current->thread.vdso->size);
|
/* Space for the VDSO & data page */
|
||||||
top -= VVAR_SIZE;
|
top -= PAGE_ALIGN(current->thread.vdso->size);
|
||||||
|
top -= VVAR_SIZE;
|
||||||
|
|
||||||
/* Space to randomize the VDSO base */
|
/* Space to randomize the VDSO base */
|
||||||
if (current->flags & PF_RANDOMIZE)
|
if (current->flags & PF_RANDOMIZE)
|
||||||
top -= VDSO_RANDOMIZE_SIZE;
|
top -= VDSO_RANDOMIZE_SIZE;
|
||||||
|
}
|
||||||
|
|
||||||
return top;
|
return top;
|
||||||
}
|
}
|
||||||
|
|
|
@ -225,6 +225,7 @@ struct pci_bus *pci_acpi_scan_root(struct acpi_pci_root *root)
|
||||||
if (bus) {
|
if (bus) {
|
||||||
memcpy(bus->sysdata, info->cfg, sizeof(struct pci_config_window));
|
memcpy(bus->sysdata, info->cfg, sizeof(struct pci_config_window));
|
||||||
kfree(info);
|
kfree(info);
|
||||||
|
kfree(root_ops);
|
||||||
} else {
|
} else {
|
||||||
struct pci_bus *child;
|
struct pci_bus *child;
|
||||||
|
|
||||||
|
|
|
@ -24,7 +24,6 @@ CONFIG_PS3_VRAM=m
|
||||||
CONFIG_PS3_LPM=m
|
CONFIG_PS3_LPM=m
|
||||||
# CONFIG_PPC_OF_BOOT_TRAMPOLINE is not set
|
# CONFIG_PPC_OF_BOOT_TRAMPOLINE is not set
|
||||||
CONFIG_KEXEC=y
|
CONFIG_KEXEC=y
|
||||||
# CONFIG_PPC64_BIG_ENDIAN_ELF_ABI_V2 is not set
|
|
||||||
CONFIG_PPC_4K_PAGES=y
|
CONFIG_PPC_4K_PAGES=y
|
||||||
CONFIG_SCHED_SMT=y
|
CONFIG_SCHED_SMT=y
|
||||||
CONFIG_PM=y
|
CONFIG_PM=y
|
||||||
|
|
|
@ -327,6 +327,8 @@ static inline int sbi_remote_fence_i(const struct cpumask *cpu_mask) { return -1
|
||||||
static inline void sbi_init(void) {}
|
static inline void sbi_init(void) {}
|
||||||
#endif /* CONFIG_RISCV_SBI */
|
#endif /* CONFIG_RISCV_SBI */
|
||||||
|
|
||||||
|
unsigned long riscv_get_mvendorid(void);
|
||||||
|
unsigned long riscv_get_marchid(void);
|
||||||
unsigned long riscv_cached_mvendorid(unsigned int cpu_id);
|
unsigned long riscv_cached_mvendorid(unsigned int cpu_id);
|
||||||
unsigned long riscv_cached_marchid(unsigned int cpu_id);
|
unsigned long riscv_cached_marchid(unsigned int cpu_id);
|
||||||
unsigned long riscv_cached_mimpid(unsigned int cpu_id);
|
unsigned long riscv_cached_mimpid(unsigned int cpu_id);
|
||||||
|
|
|
@ -7,7 +7,7 @@
|
||||||
#ifdef CONFIG_64BIT
|
#ifdef CONFIG_64BIT
|
||||||
#define MAX_PHYSMEM_BITS 56
|
#define MAX_PHYSMEM_BITS 56
|
||||||
#else
|
#else
|
||||||
#define MAX_PHYSMEM_BITS 34
|
#define MAX_PHYSMEM_BITS 32
|
||||||
#endif /* CONFIG_64BIT */
|
#endif /* CONFIG_64BIT */
|
||||||
#define SECTION_SIZE_BITS 27
|
#define SECTION_SIZE_BITS 27
|
||||||
#endif /* CONFIG_SPARSEMEM */
|
#endif /* CONFIG_SPARSEMEM */
|
||||||
|
|
|
@ -33,7 +33,6 @@
|
||||||
|
|
||||||
#define THREAD_SHIFT (PAGE_SHIFT + THREAD_SIZE_ORDER)
|
#define THREAD_SHIFT (PAGE_SHIFT + THREAD_SIZE_ORDER)
|
||||||
#define OVERFLOW_STACK_SIZE SZ_4K
|
#define OVERFLOW_STACK_SIZE SZ_4K
|
||||||
#define SHADOW_OVERFLOW_STACK_SIZE (1024)
|
|
||||||
|
|
||||||
#define IRQ_STACK_SIZE THREAD_SIZE
|
#define IRQ_STACK_SIZE THREAD_SIZE
|
||||||
|
|
||||||
|
|
|
@ -139,6 +139,34 @@ int riscv_of_parent_hartid(struct device_node *node, unsigned long *hartid)
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
unsigned long __init riscv_get_marchid(void)
|
||||||
|
{
|
||||||
|
struct riscv_cpuinfo *ci = this_cpu_ptr(&riscv_cpuinfo);
|
||||||
|
|
||||||
|
#if IS_ENABLED(CONFIG_RISCV_SBI)
|
||||||
|
ci->marchid = sbi_spec_is_0_1() ? 0 : sbi_get_marchid();
|
||||||
|
#elif IS_ENABLED(CONFIG_RISCV_M_MODE)
|
||||||
|
ci->marchid = csr_read(CSR_MARCHID);
|
||||||
|
#else
|
||||||
|
ci->marchid = 0;
|
||||||
|
#endif
|
||||||
|
return ci->marchid;
|
||||||
|
}
|
||||||
|
|
||||||
|
unsigned long __init riscv_get_mvendorid(void)
|
||||||
|
{
|
||||||
|
struct riscv_cpuinfo *ci = this_cpu_ptr(&riscv_cpuinfo);
|
||||||
|
|
||||||
|
#if IS_ENABLED(CONFIG_RISCV_SBI)
|
||||||
|
ci->mvendorid = sbi_spec_is_0_1() ? 0 : sbi_get_mvendorid();
|
||||||
|
#elif IS_ENABLED(CONFIG_RISCV_M_MODE)
|
||||||
|
ci->mvendorid = csr_read(CSR_MVENDORID);
|
||||||
|
#else
|
||||||
|
ci->mvendorid = 0;
|
||||||
|
#endif
|
||||||
|
return ci->mvendorid;
|
||||||
|
}
|
||||||
|
|
||||||
DEFINE_PER_CPU(struct riscv_cpuinfo, riscv_cpuinfo);
|
DEFINE_PER_CPU(struct riscv_cpuinfo, riscv_cpuinfo);
|
||||||
|
|
||||||
unsigned long riscv_cached_mvendorid(unsigned int cpu_id)
|
unsigned long riscv_cached_mvendorid(unsigned int cpu_id)
|
||||||
|
@ -170,12 +198,16 @@ static int riscv_cpuinfo_starting(unsigned int cpu)
|
||||||
struct riscv_cpuinfo *ci = this_cpu_ptr(&riscv_cpuinfo);
|
struct riscv_cpuinfo *ci = this_cpu_ptr(&riscv_cpuinfo);
|
||||||
|
|
||||||
#if IS_ENABLED(CONFIG_RISCV_SBI)
|
#if IS_ENABLED(CONFIG_RISCV_SBI)
|
||||||
ci->mvendorid = sbi_spec_is_0_1() ? 0 : sbi_get_mvendorid();
|
if (!ci->mvendorid)
|
||||||
ci->marchid = sbi_spec_is_0_1() ? 0 : sbi_get_marchid();
|
ci->mvendorid = sbi_spec_is_0_1() ? 0 : sbi_get_mvendorid();
|
||||||
|
if (!ci->marchid)
|
||||||
|
ci->marchid = sbi_spec_is_0_1() ? 0 : sbi_get_marchid();
|
||||||
ci->mimpid = sbi_spec_is_0_1() ? 0 : sbi_get_mimpid();
|
ci->mimpid = sbi_spec_is_0_1() ? 0 : sbi_get_mimpid();
|
||||||
#elif IS_ENABLED(CONFIG_RISCV_M_MODE)
|
#elif IS_ENABLED(CONFIG_RISCV_M_MODE)
|
||||||
ci->mvendorid = csr_read(CSR_MVENDORID);
|
if (!ci->mvendorid)
|
||||||
ci->marchid = csr_read(CSR_MARCHID);
|
ci->mvendorid = csr_read(CSR_MVENDORID);
|
||||||
|
if (!ci->marchid)
|
||||||
|
ci->marchid = csr_read(CSR_MARCHID);
|
||||||
ci->mimpid = csr_read(CSR_MIMPID);
|
ci->mimpid = csr_read(CSR_MIMPID);
|
||||||
#else
|
#else
|
||||||
ci->mvendorid = 0;
|
ci->mvendorid = 0;
|
||||||
|
|
|
@ -482,6 +482,8 @@ static void __init riscv_fill_hwcap_from_isa_string(unsigned long *isa2hwcap)
|
||||||
struct acpi_table_header *rhct;
|
struct acpi_table_header *rhct;
|
||||||
acpi_status status;
|
acpi_status status;
|
||||||
unsigned int cpu;
|
unsigned int cpu;
|
||||||
|
u64 boot_vendorid;
|
||||||
|
u64 boot_archid;
|
||||||
|
|
||||||
if (!acpi_disabled) {
|
if (!acpi_disabled) {
|
||||||
status = acpi_get_table(ACPI_SIG_RHCT, 0, &rhct);
|
status = acpi_get_table(ACPI_SIG_RHCT, 0, &rhct);
|
||||||
|
@ -489,6 +491,9 @@ static void __init riscv_fill_hwcap_from_isa_string(unsigned long *isa2hwcap)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
boot_vendorid = riscv_get_mvendorid();
|
||||||
|
boot_archid = riscv_get_marchid();
|
||||||
|
|
||||||
for_each_possible_cpu(cpu) {
|
for_each_possible_cpu(cpu) {
|
||||||
struct riscv_isainfo *isainfo = &hart_isa[cpu];
|
struct riscv_isainfo *isainfo = &hart_isa[cpu];
|
||||||
unsigned long this_hwcap = 0;
|
unsigned long this_hwcap = 0;
|
||||||
|
@ -536,8 +541,7 @@ static void __init riscv_fill_hwcap_from_isa_string(unsigned long *isa2hwcap)
|
||||||
* CPU cores with the ratified spec will contain non-zero
|
* CPU cores with the ratified spec will contain non-zero
|
||||||
* marchid.
|
* marchid.
|
||||||
*/
|
*/
|
||||||
if (acpi_disabled && riscv_cached_mvendorid(cpu) == THEAD_VENDOR_ID &&
|
if (acpi_disabled && boot_vendorid == THEAD_VENDOR_ID && boot_archid == 0x0) {
|
||||||
riscv_cached_marchid(cpu) == 0x0) {
|
|
||||||
this_hwcap &= ~isa2hwcap[RISCV_ISA_EXT_v];
|
this_hwcap &= ~isa2hwcap[RISCV_ISA_EXT_v];
|
||||||
clear_bit(RISCV_ISA_EXT_v, isainfo->isa);
|
clear_bit(RISCV_ISA_EXT_v, isainfo->isa);
|
||||||
}
|
}
|
||||||
|
|
|
@ -444,6 +444,12 @@ int arch_kexec_apply_relocations_add(struct purgatory_info *pi,
|
||||||
*(u32 *)loc = CLEAN_IMM(CJTYPE, *(u32 *)loc) |
|
*(u32 *)loc = CLEAN_IMM(CJTYPE, *(u32 *)loc) |
|
||||||
ENCODE_CJTYPE_IMM(val - addr);
|
ENCODE_CJTYPE_IMM(val - addr);
|
||||||
break;
|
break;
|
||||||
|
case R_RISCV_ADD16:
|
||||||
|
*(u16 *)loc += val;
|
||||||
|
break;
|
||||||
|
case R_RISCV_SUB16:
|
||||||
|
*(u16 *)loc -= val;
|
||||||
|
break;
|
||||||
case R_RISCV_ADD32:
|
case R_RISCV_ADD32:
|
||||||
*(u32 *)loc += val;
|
*(u32 *)loc += val;
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -228,8 +228,8 @@ SYM_CODE_START(ret_from_fork)
|
||||||
jalr s0
|
jalr s0
|
||||||
1:
|
1:
|
||||||
move a0, sp /* pt_regs */
|
move a0, sp /* pt_regs */
|
||||||
la ra, ret_from_exception
|
call syscall_exit_to_user_mode
|
||||||
tail syscall_exit_to_user_mode
|
j ret_from_exception
|
||||||
SYM_CODE_END(ret_from_fork)
|
SYM_CODE_END(ret_from_fork)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -555,8 +555,8 @@ static void emit_atomic(u8 rd, u8 rs, s16 off, s32 imm, bool is64,
|
||||||
rv_lr_w(r0, 0, rd, 0, 0), ctx);
|
rv_lr_w(r0, 0, rd, 0, 0), ctx);
|
||||||
jmp_offset = ninsns_rvoff(8);
|
jmp_offset = ninsns_rvoff(8);
|
||||||
emit(rv_bne(RV_REG_T2, r0, jmp_offset >> 1), ctx);
|
emit(rv_bne(RV_REG_T2, r0, jmp_offset >> 1), ctx);
|
||||||
emit(is64 ? rv_sc_d(RV_REG_T3, rs, rd, 0, 0) :
|
emit(is64 ? rv_sc_d(RV_REG_T3, rs, rd, 0, 1) :
|
||||||
rv_sc_w(RV_REG_T3, rs, rd, 0, 0), ctx);
|
rv_sc_w(RV_REG_T3, rs, rd, 0, 1), ctx);
|
||||||
jmp_offset = ninsns_rvoff(-6);
|
jmp_offset = ninsns_rvoff(-6);
|
||||||
emit(rv_bne(RV_REG_T3, 0, jmp_offset >> 1), ctx);
|
emit(rv_bne(RV_REG_T3, 0, jmp_offset >> 1), ctx);
|
||||||
emit(rv_fence(0x3, 0x3), ctx);
|
emit(rv_fence(0x3, 0x3), ctx);
|
||||||
|
|
|
@ -60,8 +60,10 @@ static inline int test_facility(unsigned long nr)
|
||||||
unsigned long facilities_als[] = { FACILITIES_ALS };
|
unsigned long facilities_als[] = { FACILITIES_ALS };
|
||||||
|
|
||||||
if (__builtin_constant_p(nr) && nr < sizeof(facilities_als) * 8) {
|
if (__builtin_constant_p(nr) && nr < sizeof(facilities_als) * 8) {
|
||||||
if (__test_facility(nr, &facilities_als))
|
if (__test_facility(nr, &facilities_als)) {
|
||||||
return 1;
|
if (!__is_defined(__DECOMPRESSOR))
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return __test_facility(nr, &stfle_fac_list);
|
return __test_facility(nr, &stfle_fac_list);
|
||||||
}
|
}
|
||||||
|
|
|
@ -16,8 +16,10 @@
|
||||||
#include <asm/pci_io.h>
|
#include <asm/pci_io.h>
|
||||||
|
|
||||||
#define xlate_dev_mem_ptr xlate_dev_mem_ptr
|
#define xlate_dev_mem_ptr xlate_dev_mem_ptr
|
||||||
|
#define kc_xlate_dev_mem_ptr xlate_dev_mem_ptr
|
||||||
void *xlate_dev_mem_ptr(phys_addr_t phys);
|
void *xlate_dev_mem_ptr(phys_addr_t phys);
|
||||||
#define unxlate_dev_mem_ptr unxlate_dev_mem_ptr
|
#define unxlate_dev_mem_ptr unxlate_dev_mem_ptr
|
||||||
|
#define kc_unxlate_dev_mem_ptr unxlate_dev_mem_ptr
|
||||||
void unxlate_dev_mem_ptr(phys_addr_t phys, void *addr);
|
void unxlate_dev_mem_ptr(phys_addr_t phys, void *addr);
|
||||||
|
|
||||||
#define IO_SPACE_LIMIT 0
|
#define IO_SPACE_LIMIT 0
|
||||||
|
|
|
@ -73,6 +73,7 @@ struct perf_sf_sde_regs {
|
||||||
#define SAMPLE_FREQ_MODE(hwc) (SAMPL_FLAGS(hwc) & PERF_CPUM_SF_FREQ_MODE)
|
#define SAMPLE_FREQ_MODE(hwc) (SAMPL_FLAGS(hwc) & PERF_CPUM_SF_FREQ_MODE)
|
||||||
|
|
||||||
#define perf_arch_fetch_caller_regs(regs, __ip) do { \
|
#define perf_arch_fetch_caller_regs(regs, __ip) do { \
|
||||||
|
(regs)->psw.mask = 0; \
|
||||||
(regs)->psw.addr = (__ip); \
|
(regs)->psw.addr = (__ip); \
|
||||||
(regs)->gprs[15] = (unsigned long)__builtin_frame_address(0) - \
|
(regs)->gprs[15] = (unsigned long)__builtin_frame_address(0) - \
|
||||||
offsetof(struct stack_frame, back_chain); \
|
offsetof(struct stack_frame, back_chain); \
|
||||||
|
|
|
@ -1463,7 +1463,7 @@ static int aux_output_begin(struct perf_output_handle *handle,
|
||||||
unsigned long range, i, range_scan, idx, head, base, offset;
|
unsigned long range, i, range_scan, idx, head, base, offset;
|
||||||
struct hws_trailer_entry *te;
|
struct hws_trailer_entry *te;
|
||||||
|
|
||||||
if (WARN_ON_ONCE(handle->head & ~PAGE_MASK))
|
if (handle->head & ~PAGE_MASK)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
aux->head = handle->head >> PAGE_SHIFT;
|
aux->head = handle->head >> PAGE_SHIFT;
|
||||||
|
@ -1642,7 +1642,7 @@ static void hw_collect_aux(struct cpu_hw_sf *cpuhw)
|
||||||
unsigned long num_sdb;
|
unsigned long num_sdb;
|
||||||
|
|
||||||
aux = perf_get_aux(handle);
|
aux = perf_get_aux(handle);
|
||||||
if (WARN_ON_ONCE(!aux))
|
if (!aux)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
/* Inform user space new data arrived */
|
/* Inform user space new data arrived */
|
||||||
|
@ -1661,7 +1661,7 @@ static void hw_collect_aux(struct cpu_hw_sf *cpuhw)
|
||||||
num_sdb);
|
num_sdb);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (WARN_ON_ONCE(!aux))
|
if (!aux)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
/* Update head and alert_mark to new position */
|
/* Update head and alert_mark to new position */
|
||||||
|
@ -1896,12 +1896,8 @@ static void cpumsf_pmu_start(struct perf_event *event, int flags)
|
||||||
{
|
{
|
||||||
struct cpu_hw_sf *cpuhw = this_cpu_ptr(&cpu_hw_sf);
|
struct cpu_hw_sf *cpuhw = this_cpu_ptr(&cpu_hw_sf);
|
||||||
|
|
||||||
if (WARN_ON_ONCE(!(event->hw.state & PERF_HES_STOPPED)))
|
if (!(event->hw.state & PERF_HES_STOPPED))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (flags & PERF_EF_RELOAD)
|
|
||||||
WARN_ON_ONCE(!(event->hw.state & PERF_HES_UPTODATE));
|
|
||||||
|
|
||||||
perf_pmu_disable(event->pmu);
|
perf_pmu_disable(event->pmu);
|
||||||
event->hw.state = 0;
|
event->hw.state = 0;
|
||||||
cpuhw->lsctl.cs = 1;
|
cpuhw->lsctl.cs = 1;
|
||||||
|
|
|
@ -77,7 +77,7 @@ static int __diag_page_ref_service(struct kvm_vcpu *vcpu)
|
||||||
vcpu->stat.instruction_diagnose_258++;
|
vcpu->stat.instruction_diagnose_258++;
|
||||||
if (vcpu->run->s.regs.gprs[rx] & 7)
|
if (vcpu->run->s.regs.gprs[rx] & 7)
|
||||||
return kvm_s390_inject_program_int(vcpu, PGM_SPECIFICATION);
|
return kvm_s390_inject_program_int(vcpu, PGM_SPECIFICATION);
|
||||||
rc = read_guest(vcpu, vcpu->run->s.regs.gprs[rx], rx, &parm, sizeof(parm));
|
rc = read_guest_real(vcpu, vcpu->run->s.regs.gprs[rx], &parm, sizeof(parm));
|
||||||
if (rc)
|
if (rc)
|
||||||
return kvm_s390_inject_prog_cond(vcpu, rc);
|
return kvm_s390_inject_prog_cond(vcpu, rc);
|
||||||
if (parm.parm_version != 2 || parm.parm_len < 5 || parm.code != 0x258)
|
if (parm.parm_version != 2 || parm.parm_len < 5 || parm.code != 0x258)
|
||||||
|
|
|
@ -1001,6 +1001,8 @@ static int access_guest_page(struct kvm *kvm, enum gacc_mode mode, gpa_t gpa,
|
||||||
const gfn_t gfn = gpa_to_gfn(gpa);
|
const gfn_t gfn = gpa_to_gfn(gpa);
|
||||||
int rc;
|
int rc;
|
||||||
|
|
||||||
|
if (!gfn_to_memslot(kvm, gfn))
|
||||||
|
return PGM_ADDRESSING;
|
||||||
if (mode == GACC_STORE)
|
if (mode == GACC_STORE)
|
||||||
rc = kvm_write_guest_page(kvm, gfn, data, offset, len);
|
rc = kvm_write_guest_page(kvm, gfn, data, offset, len);
|
||||||
else
|
else
|
||||||
|
@ -1158,6 +1160,8 @@ int access_guest_real(struct kvm_vcpu *vcpu, unsigned long gra,
|
||||||
gra += fragment_len;
|
gra += fragment_len;
|
||||||
data += fragment_len;
|
data += fragment_len;
|
||||||
}
|
}
|
||||||
|
if (rc > 0)
|
||||||
|
vcpu->arch.pgm.code = rc;
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -405,11 +405,12 @@ int read_guest_abs(struct kvm_vcpu *vcpu, unsigned long gpa, void *data,
|
||||||
* @len: number of bytes to copy
|
* @len: number of bytes to copy
|
||||||
*
|
*
|
||||||
* Copy @len bytes from @data (kernel space) to @gra (guest real address).
|
* Copy @len bytes from @data (kernel space) to @gra (guest real address).
|
||||||
* It is up to the caller to ensure that the entire guest memory range is
|
|
||||||
* valid memory before calling this function.
|
|
||||||
* Guest low address and key protection are not checked.
|
* Guest low address and key protection are not checked.
|
||||||
*
|
*
|
||||||
* Returns zero on success or -EFAULT on error.
|
* Returns zero on success, -EFAULT when copying from @data failed, or
|
||||||
|
* PGM_ADRESSING in case @gra is outside a memslot. In this case, pgm check info
|
||||||
|
* is also stored to allow injecting into the guest (if applicable) using
|
||||||
|
* kvm_s390_inject_prog_cond().
|
||||||
*
|
*
|
||||||
* If an error occurs data may have been copied partially to guest memory.
|
* If an error occurs data may have been copied partially to guest memory.
|
||||||
*/
|
*/
|
||||||
|
@ -428,11 +429,12 @@ int write_guest_real(struct kvm_vcpu *vcpu, unsigned long gra, void *data,
|
||||||
* @len: number of bytes to copy
|
* @len: number of bytes to copy
|
||||||
*
|
*
|
||||||
* Copy @len bytes from @gra (guest real address) to @data (kernel space).
|
* Copy @len bytes from @gra (guest real address) to @data (kernel space).
|
||||||
* It is up to the caller to ensure that the entire guest memory range is
|
|
||||||
* valid memory before calling this function.
|
|
||||||
* Guest key protection is not checked.
|
* Guest key protection is not checked.
|
||||||
*
|
*
|
||||||
* Returns zero on success or -EFAULT on error.
|
* Returns zero on success, -EFAULT when copying to @data failed, or
|
||||||
|
* PGM_ADRESSING in case @gra is outside a memslot. In this case, pgm check info
|
||||||
|
* is also stored to allow injecting into the guest (if applicable) using
|
||||||
|
* kvm_s390_inject_prog_cond().
|
||||||
*
|
*
|
||||||
* If an error occurs data may have been copied partially to kernel space.
|
* If an error occurs data may have been copied partially to kernel space.
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -95,11 +95,12 @@ static long cmm_alloc_pages(long nr, long *counter,
|
||||||
(*counter)++;
|
(*counter)++;
|
||||||
spin_unlock(&cmm_lock);
|
spin_unlock(&cmm_lock);
|
||||||
nr--;
|
nr--;
|
||||||
|
cond_resched();
|
||||||
}
|
}
|
||||||
return nr;
|
return nr;
|
||||||
}
|
}
|
||||||
|
|
||||||
static long cmm_free_pages(long nr, long *counter, struct cmm_page_array **list)
|
static long __cmm_free_pages(long nr, long *counter, struct cmm_page_array **list)
|
||||||
{
|
{
|
||||||
struct cmm_page_array *pa;
|
struct cmm_page_array *pa;
|
||||||
unsigned long addr;
|
unsigned long addr;
|
||||||
|
@ -123,6 +124,21 @@ static long cmm_free_pages(long nr, long *counter, struct cmm_page_array **list)
|
||||||
return nr;
|
return nr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static long cmm_free_pages(long nr, long *counter, struct cmm_page_array **list)
|
||||||
|
{
|
||||||
|
long inc = 0;
|
||||||
|
|
||||||
|
while (nr) {
|
||||||
|
inc = min(256L, nr);
|
||||||
|
nr -= inc;
|
||||||
|
inc = __cmm_free_pages(inc, counter, list);
|
||||||
|
if (inc)
|
||||||
|
break;
|
||||||
|
cond_resched();
|
||||||
|
}
|
||||||
|
return nr + inc;
|
||||||
|
}
|
||||||
|
|
||||||
static int cmm_oom_notify(struct notifier_block *self,
|
static int cmm_oom_notify(struct notifier_block *self,
|
||||||
unsigned long dummy, void *parm)
|
unsigned long dummy, void *parm)
|
||||||
{
|
{
|
||||||
|
|
|
@ -272,18 +272,19 @@ static void __zpci_event_error(struct zpci_ccdf_err *ccdf)
|
||||||
goto no_pdev;
|
goto no_pdev;
|
||||||
|
|
||||||
switch (ccdf->pec) {
|
switch (ccdf->pec) {
|
||||||
case 0x003a: /* Service Action or Error Recovery Successful */
|
case 0x002a: /* Error event concerns FMB */
|
||||||
|
case 0x002b:
|
||||||
|
case 0x002c:
|
||||||
|
break;
|
||||||
|
case 0x0040: /* Service Action or Error Recovery Failed */
|
||||||
|
case 0x003b:
|
||||||
|
zpci_event_io_failure(pdev, pci_channel_io_perm_failure);
|
||||||
|
break;
|
||||||
|
default: /* PCI function left in the error state attempt to recover */
|
||||||
ers_res = zpci_event_attempt_error_recovery(pdev);
|
ers_res = zpci_event_attempt_error_recovery(pdev);
|
||||||
if (ers_res != PCI_ERS_RESULT_RECOVERED)
|
if (ers_res != PCI_ERS_RESULT_RECOVERED)
|
||||||
zpci_event_io_failure(pdev, pci_channel_io_perm_failure);
|
zpci_event_io_failure(pdev, pci_channel_io_perm_failure);
|
||||||
break;
|
break;
|
||||||
default:
|
|
||||||
/*
|
|
||||||
* Mark as frozen not permanently failed because the device
|
|
||||||
* could be subsequently recovered by the platform.
|
|
||||||
*/
|
|
||||||
zpci_event_io_failure(pdev, pci_channel_io_frozen);
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
pci_dev_put(pdev);
|
pci_dev_put(pdev);
|
||||||
no_pdev:
|
no_pdev:
|
||||||
|
|
|
@ -128,6 +128,7 @@ CONFIG_DAMON_VADDR=y
|
||||||
CONFIG_DAMON_SYSFS=y
|
CONFIG_DAMON_SYSFS=y
|
||||||
CONFIG_NET=y
|
CONFIG_NET=y
|
||||||
CONFIG_PACKET=y
|
CONFIG_PACKET=y
|
||||||
|
CONFIG_TLS=m
|
||||||
CONFIG_XFRM_USER=y
|
CONFIG_XFRM_USER=y
|
||||||
CONFIG_XFRM_INTERFACE=y
|
CONFIG_XFRM_INTERFACE=y
|
||||||
CONFIG_XFRM_MIGRATE=y
|
CONFIG_XFRM_MIGRATE=y
|
||||||
|
@ -483,6 +484,7 @@ CONFIG_USB_HIDDEV=y
|
||||||
CONFIG_USB_ANNOUNCE_NEW_DEVICES=y
|
CONFIG_USB_ANNOUNCE_NEW_DEVICES=y
|
||||||
CONFIG_USB_MON=m
|
CONFIG_USB_MON=m
|
||||||
CONFIG_USB_XHCI_HCD=y
|
CONFIG_USB_XHCI_HCD=y
|
||||||
|
CONFIG_USB_XHCI_SIDEBAND=y
|
||||||
CONFIG_USB_EHCI_HCD=y
|
CONFIG_USB_EHCI_HCD=y
|
||||||
CONFIG_USB_EHCI_ROOT_HUB_TT=y
|
CONFIG_USB_EHCI_ROOT_HUB_TT=y
|
||||||
CONFIG_USB_EHCI_HCD_PLATFORM=y
|
CONFIG_USB_EHCI_HCD_PLATFORM=y
|
||||||
|
@ -538,7 +540,6 @@ CONFIG_DMABUF_HEAPS_DEFERRED_FREE=y
|
||||||
CONFIG_DMABUF_HEAPS_PAGE_POOL=y
|
CONFIG_DMABUF_HEAPS_PAGE_POOL=y
|
||||||
CONFIG_UIO=y
|
CONFIG_UIO=y
|
||||||
CONFIG_VIRTIO_PCI=m
|
CONFIG_VIRTIO_PCI=m
|
||||||
# CONFIG_VIRTIO_PCI_LEGACY is not set
|
|
||||||
CONFIG_VIRTIO_BALLOON=m
|
CONFIG_VIRTIO_BALLOON=m
|
||||||
CONFIG_VHOST_VSOCK=y
|
CONFIG_VHOST_VSOCK=y
|
||||||
CONFIG_STAGING=y
|
CONFIG_STAGING=y
|
||||||
|
|
|
@ -9,8 +9,8 @@
|
||||||
{
|
{
|
||||||
"path": "system/netd"
|
"path": "system/netd"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"presubmit": [
|
"presubmit": [
|
||||||
{
|
{
|
||||||
"name": "CtsAppEnumerationTestCases",
|
"name": "CtsAppEnumerationTestCases",
|
||||||
"options": [
|
"options": [
|
||||||
|
@ -289,6 +289,15 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "vts_kernel_net_tests"
|
"name": "vts_kernel_net_tests"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "binderLibTest"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "CtsLibcoreTestCases"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "CtsUsbTests"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
|
@ -9,6 +9,8 @@
|
||||||
#include <asm/unwind_hints.h>
|
#include <asm/unwind_hints.h>
|
||||||
#include <asm/segment.h>
|
#include <asm/segment.h>
|
||||||
#include <asm/cache.h>
|
#include <asm/cache.h>
|
||||||
|
#include <asm/cpufeatures.h>
|
||||||
|
#include <asm/nospec-branch.h>
|
||||||
|
|
||||||
.pushsection .noinstr.text, "ax"
|
.pushsection .noinstr.text, "ax"
|
||||||
|
|
||||||
|
@ -17,6 +19,9 @@ SYM_FUNC_START(entry_ibpb)
|
||||||
movl $PRED_CMD_IBPB, %eax
|
movl $PRED_CMD_IBPB, %eax
|
||||||
xorl %edx, %edx
|
xorl %edx, %edx
|
||||||
wrmsr
|
wrmsr
|
||||||
|
|
||||||
|
/* Make sure IBPB clears return stack preductions too. */
|
||||||
|
FILL_RETURN_BUFFER %rax, RSB_CLEAR_LOOPS, X86_BUG_IBPB_NO_RET
|
||||||
RET
|
RET
|
||||||
SYM_FUNC_END(entry_ibpb)
|
SYM_FUNC_END(entry_ibpb)
|
||||||
/* For KVM */
|
/* For KVM */
|
||||||
|
|
|
@ -875,6 +875,8 @@ SYM_FUNC_START(entry_SYSENTER_32)
|
||||||
|
|
||||||
/* Now ready to switch the cr3 */
|
/* Now ready to switch the cr3 */
|
||||||
SWITCH_TO_USER_CR3 scratch_reg=%eax
|
SWITCH_TO_USER_CR3 scratch_reg=%eax
|
||||||
|
/* Clobbers ZF */
|
||||||
|
CLEAR_CPU_BUFFERS
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Restore all flags except IF. (We restore IF separately because
|
* Restore all flags except IF. (We restore IF separately because
|
||||||
|
@ -885,7 +887,6 @@ SYM_FUNC_START(entry_SYSENTER_32)
|
||||||
BUG_IF_WRONG_CR3 no_user_check=1
|
BUG_IF_WRONG_CR3 no_user_check=1
|
||||||
popfl
|
popfl
|
||||||
popl %eax
|
popl %eax
|
||||||
CLEAR_CPU_BUFFERS
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Return back to the vDSO, which will pop ecx and edx.
|
* Return back to the vDSO, which will pop ecx and edx.
|
||||||
|
@ -1148,7 +1149,6 @@ SYM_CODE_START(asm_exc_nmi)
|
||||||
|
|
||||||
/* Not on SYSENTER stack. */
|
/* Not on SYSENTER stack. */
|
||||||
call exc_nmi
|
call exc_nmi
|
||||||
CLEAR_CPU_BUFFERS
|
|
||||||
jmp .Lnmi_return
|
jmp .Lnmi_return
|
||||||
|
|
||||||
.Lnmi_from_sysenter_stack:
|
.Lnmi_from_sysenter_stack:
|
||||||
|
@ -1169,6 +1169,7 @@ SYM_CODE_START(asm_exc_nmi)
|
||||||
|
|
||||||
CHECK_AND_APPLY_ESPFIX
|
CHECK_AND_APPLY_ESPFIX
|
||||||
RESTORE_ALL_NMI cr3_reg=%edi pop=4
|
RESTORE_ALL_NMI cr3_reg=%edi pop=4
|
||||||
|
CLEAR_CPU_BUFFERS
|
||||||
jmp .Lirq_return
|
jmp .Lirq_return
|
||||||
|
|
||||||
#ifdef CONFIG_X86_ESPFIX32
|
#ifdef CONFIG_X86_ESPFIX32
|
||||||
|
@ -1210,6 +1211,7 @@ SYM_CODE_START(asm_exc_nmi)
|
||||||
* 1 - orig_ax
|
* 1 - orig_ax
|
||||||
*/
|
*/
|
||||||
lss (1+5+6)*4(%esp), %esp # back to espfix stack
|
lss (1+5+6)*4(%esp), %esp # back to espfix stack
|
||||||
|
CLEAR_CPU_BUFFERS
|
||||||
jmp .Lirq_return
|
jmp .Lirq_return
|
||||||
#endif
|
#endif
|
||||||
SYM_CODE_END(asm_exc_nmi)
|
SYM_CODE_END(asm_exc_nmi)
|
||||||
|
|
|
@ -298,6 +298,30 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "VtsBootconfigTest"
|
"name": "VtsBootconfigTest"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "binderDriverInterfaceTest"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "binderLibTest"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "binderSafeInterfaceTest"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "memunreachable_binder_test"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "VtsHalBluetoothAudioTargetTest"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "CtsBionicTestCases"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "CtsLibcoreTestCases"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "CtsUsbTests"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
|
@ -216,7 +216,7 @@
|
||||||
#define X86_FEATURE_SPEC_STORE_BYPASS_DISABLE ( 7*32+23) /* "" Disable Speculative Store Bypass. */
|
#define X86_FEATURE_SPEC_STORE_BYPASS_DISABLE ( 7*32+23) /* "" Disable Speculative Store Bypass. */
|
||||||
#define X86_FEATURE_LS_CFG_SSBD ( 7*32+24) /* "" AMD SSBD implementation via LS_CFG MSR */
|
#define X86_FEATURE_LS_CFG_SSBD ( 7*32+24) /* "" AMD SSBD implementation via LS_CFG MSR */
|
||||||
#define X86_FEATURE_IBRS ( 7*32+25) /* Indirect Branch Restricted Speculation */
|
#define X86_FEATURE_IBRS ( 7*32+25) /* Indirect Branch Restricted Speculation */
|
||||||
#define X86_FEATURE_IBPB ( 7*32+26) /* Indirect Branch Prediction Barrier */
|
#define X86_FEATURE_IBPB ( 7*32+26) /* "ibpb" Indirect Branch Prediction Barrier without a guaranteed RSB flush */
|
||||||
#define X86_FEATURE_STIBP ( 7*32+27) /* Single Thread Indirect Branch Predictors */
|
#define X86_FEATURE_STIBP ( 7*32+27) /* Single Thread Indirect Branch Predictors */
|
||||||
#define X86_FEATURE_ZEN ( 7*32+28) /* "" Generic flag for all Zen and newer */
|
#define X86_FEATURE_ZEN ( 7*32+28) /* "" Generic flag for all Zen and newer */
|
||||||
#define X86_FEATURE_L1TF_PTEINV ( 7*32+29) /* "" L1TF workaround PTE inversion */
|
#define X86_FEATURE_L1TF_PTEINV ( 7*32+29) /* "" L1TF workaround PTE inversion */
|
||||||
|
@ -347,6 +347,7 @@
|
||||||
#define X86_FEATURE_CPPC (13*32+27) /* Collaborative Processor Performance Control */
|
#define X86_FEATURE_CPPC (13*32+27) /* Collaborative Processor Performance Control */
|
||||||
#define X86_FEATURE_AMD_PSFD (13*32+28) /* "" Predictive Store Forwarding Disable */
|
#define X86_FEATURE_AMD_PSFD (13*32+28) /* "" Predictive Store Forwarding Disable */
|
||||||
#define X86_FEATURE_BTC_NO (13*32+29) /* "" Not vulnerable to Branch Type Confusion */
|
#define X86_FEATURE_BTC_NO (13*32+29) /* "" Not vulnerable to Branch Type Confusion */
|
||||||
|
#define X86_FEATURE_AMD_IBPB_RET (13*32+30) /* "" IBPB clears return address predictor */
|
||||||
#define X86_FEATURE_BRS (13*32+31) /* Branch Sampling available */
|
#define X86_FEATURE_BRS (13*32+31) /* Branch Sampling available */
|
||||||
|
|
||||||
/* Thermal and Power Management Leaf, CPUID level 0x00000006 (EAX), word 14 */
|
/* Thermal and Power Management Leaf, CPUID level 0x00000006 (EAX), word 14 */
|
||||||
|
@ -516,4 +517,5 @@
|
||||||
#define X86_BUG_DIV0 X86_BUG(1*32 + 1) /* AMD DIV0 speculation bug */
|
#define X86_BUG_DIV0 X86_BUG(1*32 + 1) /* AMD DIV0 speculation bug */
|
||||||
#define X86_BUG_RFDS X86_BUG(1*32 + 2) /* CPU is vulnerable to Register File Data Sampling */
|
#define X86_BUG_RFDS X86_BUG(1*32 + 2) /* CPU is vulnerable to Register File Data Sampling */
|
||||||
#define X86_BUG_BHI X86_BUG(1*32 + 3) /* CPU is affected by Branch History Injection */
|
#define X86_BUG_BHI X86_BUG(1*32 + 3) /* CPU is affected by Branch History Injection */
|
||||||
|
#define X86_BUG_IBPB_NO_RET X86_BUG(1*32 + 4) /* "ibpb_no_ret" IBPB omits return target predictions */
|
||||||
#endif /* _ASM_X86_CPUFEATURES_H */
|
#endif /* _ASM_X86_CPUFEATURES_H */
|
||||||
|
|
|
@ -332,7 +332,16 @@
|
||||||
* Note: Only the memory operand variant of VERW clears the CPU buffers.
|
* Note: Only the memory operand variant of VERW clears the CPU buffers.
|
||||||
*/
|
*/
|
||||||
.macro CLEAR_CPU_BUFFERS
|
.macro CLEAR_CPU_BUFFERS
|
||||||
ALTERNATIVE "", __stringify(verw _ASM_RIP(mds_verw_sel)), X86_FEATURE_CLEAR_CPU_BUF
|
#ifdef CONFIG_X86_64
|
||||||
|
ALTERNATIVE "", "verw mds_verw_sel(%rip)", X86_FEATURE_CLEAR_CPU_BUF
|
||||||
|
#else
|
||||||
|
/*
|
||||||
|
* In 32bit mode, the memory operand must be a %cs reference. The data
|
||||||
|
* segments may not be usable (vm86 mode), and the stack segment may not
|
||||||
|
* be flat (ESPFIX32).
|
||||||
|
*/
|
||||||
|
ALTERNATIVE "", "verw %cs:mds_verw_sel", X86_FEATURE_CLEAR_CPU_BUF
|
||||||
|
#endif
|
||||||
.endm
|
.endm
|
||||||
|
|
||||||
#ifdef CONFIG_X86_64
|
#ifdef CONFIG_X86_64
|
||||||
|
|
|
@ -26,6 +26,7 @@
|
||||||
#define PCI_DEVICE_ID_AMD_19H_M70H_ROOT 0x14e8
|
#define PCI_DEVICE_ID_AMD_19H_M70H_ROOT 0x14e8
|
||||||
#define PCI_DEVICE_ID_AMD_1AH_M00H_ROOT 0x153a
|
#define PCI_DEVICE_ID_AMD_1AH_M00H_ROOT 0x153a
|
||||||
#define PCI_DEVICE_ID_AMD_1AH_M20H_ROOT 0x1507
|
#define PCI_DEVICE_ID_AMD_1AH_M20H_ROOT 0x1507
|
||||||
|
#define PCI_DEVICE_ID_AMD_1AH_M60H_ROOT 0x1122
|
||||||
#define PCI_DEVICE_ID_AMD_MI200_ROOT 0x14bb
|
#define PCI_DEVICE_ID_AMD_MI200_ROOT 0x14bb
|
||||||
|
|
||||||
#define PCI_DEVICE_ID_AMD_17H_DF_F4 0x1464
|
#define PCI_DEVICE_ID_AMD_17H_DF_F4 0x1464
|
||||||
|
@ -61,6 +62,7 @@ static const struct pci_device_id amd_root_ids[] = {
|
||||||
{ PCI_DEVICE(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_19H_M70H_ROOT) },
|
{ PCI_DEVICE(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_19H_M70H_ROOT) },
|
||||||
{ PCI_DEVICE(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_1AH_M00H_ROOT) },
|
{ PCI_DEVICE(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_1AH_M00H_ROOT) },
|
||||||
{ PCI_DEVICE(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_1AH_M20H_ROOT) },
|
{ PCI_DEVICE(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_1AH_M20H_ROOT) },
|
||||||
|
{ PCI_DEVICE(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_1AH_M60H_ROOT) },
|
||||||
{ PCI_DEVICE(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_MI200_ROOT) },
|
{ PCI_DEVICE(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_MI200_ROOT) },
|
||||||
{}
|
{}
|
||||||
};
|
};
|
||||||
|
@ -92,6 +94,8 @@ static const struct pci_device_id amd_nb_misc_ids[] = {
|
||||||
{ PCI_DEVICE(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_19H_M78H_DF_F3) },
|
{ PCI_DEVICE(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_19H_M78H_DF_F3) },
|
||||||
{ PCI_DEVICE(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_1AH_M00H_DF_F3) },
|
{ PCI_DEVICE(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_1AH_M00H_DF_F3) },
|
||||||
{ PCI_DEVICE(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_1AH_M20H_DF_F3) },
|
{ PCI_DEVICE(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_1AH_M20H_DF_F3) },
|
||||||
|
{ PCI_DEVICE(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_1AH_M60H_DF_F3) },
|
||||||
|
{ PCI_DEVICE(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_1AH_M70H_DF_F3) },
|
||||||
{ PCI_DEVICE(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_MI200_DF_F3) },
|
{ PCI_DEVICE(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_MI200_DF_F3) },
|
||||||
{}
|
{}
|
||||||
};
|
};
|
||||||
|
|
|
@ -473,7 +473,19 @@ static int lapic_timer_shutdown(struct clock_event_device *evt)
|
||||||
v = apic_read(APIC_LVTT);
|
v = apic_read(APIC_LVTT);
|
||||||
v |= (APIC_LVT_MASKED | LOCAL_TIMER_VECTOR);
|
v |= (APIC_LVT_MASKED | LOCAL_TIMER_VECTOR);
|
||||||
apic_write(APIC_LVTT, v);
|
apic_write(APIC_LVTT, v);
|
||||||
apic_write(APIC_TMICT, 0);
|
|
||||||
|
/*
|
||||||
|
* Setting APIC_LVT_MASKED (above) should be enough to tell
|
||||||
|
* the hardware that this timer will never fire. But AMD
|
||||||
|
* erratum 411 and some Intel CPU behavior circa 2024 say
|
||||||
|
* otherwise. Time for belt and suspenders programming: mask
|
||||||
|
* the timer _and_ zero the counter registers:
|
||||||
|
*/
|
||||||
|
if (v & APIC_LVT_TIMER_TSCDEADLINE)
|
||||||
|
wrmsrl(MSR_IA32_TSC_DEADLINE, 0);
|
||||||
|
else
|
||||||
|
apic_write(APIC_TMICT, 0);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1374,7 +1374,8 @@ void amd_check_microcode(void)
|
||||||
if (boot_cpu_data.x86_vendor != X86_VENDOR_AMD)
|
if (boot_cpu_data.x86_vendor != X86_VENDOR_AMD)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
on_each_cpu(zenbleed_check_cpu, NULL, 1);
|
if (cpu_feature_enabled(X86_FEATURE_ZEN2))
|
||||||
|
on_each_cpu(zenbleed_check_cpu, NULL, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -1113,8 +1113,25 @@ do_cmd_auto:
|
||||||
|
|
||||||
case RETBLEED_MITIGATION_IBPB:
|
case RETBLEED_MITIGATION_IBPB:
|
||||||
setup_force_cpu_cap(X86_FEATURE_ENTRY_IBPB);
|
setup_force_cpu_cap(X86_FEATURE_ENTRY_IBPB);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* IBPB on entry already obviates the need for
|
||||||
|
* software-based untraining so clear those in case some
|
||||||
|
* other mitigation like SRSO has selected them.
|
||||||
|
*/
|
||||||
|
setup_clear_cpu_cap(X86_FEATURE_UNRET);
|
||||||
|
setup_clear_cpu_cap(X86_FEATURE_RETHUNK);
|
||||||
|
|
||||||
setup_force_cpu_cap(X86_FEATURE_IBPB_ON_VMEXIT);
|
setup_force_cpu_cap(X86_FEATURE_IBPB_ON_VMEXIT);
|
||||||
mitigate_smt = true;
|
mitigate_smt = true;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* There is no need for RSB filling: entry_ibpb() ensures
|
||||||
|
* all predictions, including the RSB, are invalidated,
|
||||||
|
* regardless of IBPB implementation.
|
||||||
|
*/
|
||||||
|
setup_clear_cpu_cap(X86_FEATURE_RSB_VMEXIT);
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case RETBLEED_MITIGATION_STUFF:
|
case RETBLEED_MITIGATION_STUFF:
|
||||||
|
@ -2610,6 +2627,14 @@ static void __init srso_select_mitigation(void)
|
||||||
if (has_microcode) {
|
if (has_microcode) {
|
||||||
setup_force_cpu_cap(X86_FEATURE_ENTRY_IBPB);
|
setup_force_cpu_cap(X86_FEATURE_ENTRY_IBPB);
|
||||||
srso_mitigation = SRSO_MITIGATION_IBPB;
|
srso_mitigation = SRSO_MITIGATION_IBPB;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* IBPB on entry already obviates the need for
|
||||||
|
* software-based untraining so clear those in case some
|
||||||
|
* other mitigation like Retbleed has selected them.
|
||||||
|
*/
|
||||||
|
setup_clear_cpu_cap(X86_FEATURE_UNRET);
|
||||||
|
setup_clear_cpu_cap(X86_FEATURE_RETHUNK);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
pr_err("WARNING: kernel not compiled with CPU_IBPB_ENTRY.\n");
|
pr_err("WARNING: kernel not compiled with CPU_IBPB_ENTRY.\n");
|
||||||
|
@ -2622,6 +2647,13 @@ static void __init srso_select_mitigation(void)
|
||||||
if (!boot_cpu_has(X86_FEATURE_ENTRY_IBPB) && has_microcode) {
|
if (!boot_cpu_has(X86_FEATURE_ENTRY_IBPB) && has_microcode) {
|
||||||
setup_force_cpu_cap(X86_FEATURE_IBPB_ON_VMEXIT);
|
setup_force_cpu_cap(X86_FEATURE_IBPB_ON_VMEXIT);
|
||||||
srso_mitigation = SRSO_MITIGATION_IBPB_ON_VMEXIT;
|
srso_mitigation = SRSO_MITIGATION_IBPB_ON_VMEXIT;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* There is no need for RSB filling: entry_ibpb() ensures
|
||||||
|
* all predictions, including the RSB, are invalidated,
|
||||||
|
* regardless of IBPB implementation.
|
||||||
|
*/
|
||||||
|
setup_clear_cpu_cap(X86_FEATURE_RSB_VMEXIT);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
pr_err("WARNING: kernel not compiled with CPU_SRSO.\n");
|
pr_err("WARNING: kernel not compiled with CPU_SRSO.\n");
|
||||||
|
|
|
@ -1483,6 +1483,9 @@ static void __init cpu_set_bug_bits(struct cpuinfo_x86 *c)
|
||||||
boot_cpu_has(X86_FEATURE_HYPERVISOR)))
|
boot_cpu_has(X86_FEATURE_HYPERVISOR)))
|
||||||
setup_force_cpu_bug(X86_BUG_BHI);
|
setup_force_cpu_bug(X86_BUG_BHI);
|
||||||
|
|
||||||
|
if (cpu_has(c, X86_FEATURE_AMD_IBPB) && !cpu_has(c, X86_FEATURE_AMD_IBPB_RET))
|
||||||
|
setup_force_cpu_bug(X86_BUG_IBPB_NO_RET);
|
||||||
|
|
||||||
if (cpu_matches(cpu_vuln_whitelist, NO_MELTDOWN))
|
if (cpu_matches(cpu_vuln_whitelist, NO_MELTDOWN))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
|
|
@ -193,7 +193,7 @@ static inline bool rdt_get_mb_table(struct rdt_resource *r)
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool __get_mem_config_intel(struct rdt_resource *r)
|
static __init bool __get_mem_config_intel(struct rdt_resource *r)
|
||||||
{
|
{
|
||||||
struct rdt_hw_resource *hw_res = resctrl_to_arch_res(r);
|
struct rdt_hw_resource *hw_res = resctrl_to_arch_res(r);
|
||||||
union cpuid_0x10_3_eax eax;
|
union cpuid_0x10_3_eax eax;
|
||||||
|
@ -227,7 +227,7 @@ static bool __get_mem_config_intel(struct rdt_resource *r)
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool __rdt_get_mem_config_amd(struct rdt_resource *r)
|
static __init bool __rdt_get_mem_config_amd(struct rdt_resource *r)
|
||||||
{
|
{
|
||||||
struct rdt_hw_resource *hw_res = resctrl_to_arch_res(r);
|
struct rdt_hw_resource *hw_res = resctrl_to_arch_res(r);
|
||||||
u32 eax, ebx, ecx, edx, subleaf;
|
u32 eax, ebx, ecx, edx, subleaf;
|
||||||
|
|
|
@ -27,10 +27,10 @@
|
||||||
* hardware. The allocated bandwidth percentage is rounded to the next
|
* hardware. The allocated bandwidth percentage is rounded to the next
|
||||||
* control step available on the hardware.
|
* control step available on the hardware.
|
||||||
*/
|
*/
|
||||||
static bool bw_validate(char *buf, unsigned long *data, struct rdt_resource *r)
|
static bool bw_validate(char *buf, u32 *data, struct rdt_resource *r)
|
||||||
{
|
{
|
||||||
unsigned long bw;
|
|
||||||
int ret;
|
int ret;
|
||||||
|
u32 bw;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Only linear delay values is supported for current Intel SKUs.
|
* Only linear delay values is supported for current Intel SKUs.
|
||||||
|
@ -40,16 +40,21 @@ static bool bw_validate(char *buf, unsigned long *data, struct rdt_resource *r)
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = kstrtoul(buf, 10, &bw);
|
ret = kstrtou32(buf, 10, &bw);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
rdt_last_cmd_printf("Non-decimal digit in MB value %s\n", buf);
|
rdt_last_cmd_printf("Invalid MB value %s\n", buf);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((bw < r->membw.min_bw || bw > r->default_ctrl) &&
|
/* Nothing else to do if software controller is enabled. */
|
||||||
!is_mba_sc(r)) {
|
if (is_mba_sc(r)) {
|
||||||
rdt_last_cmd_printf("MB value %ld out of range [%d,%d]\n", bw,
|
*data = bw;
|
||||||
r->membw.min_bw, r->default_ctrl);
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (bw < r->membw.min_bw || bw > r->default_ctrl) {
|
||||||
|
rdt_last_cmd_printf("MB value %u out of range [%d,%d]\n",
|
||||||
|
bw, r->membw.min_bw, r->default_ctrl);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -63,7 +68,7 @@ int parse_bw(struct rdt_parse_data *data, struct resctrl_schema *s,
|
||||||
struct resctrl_staged_config *cfg;
|
struct resctrl_staged_config *cfg;
|
||||||
u32 closid = data->rdtgrp->closid;
|
u32 closid = data->rdtgrp->closid;
|
||||||
struct rdt_resource *r = s->res;
|
struct rdt_resource *r = s->res;
|
||||||
unsigned long bw_val;
|
u32 bw_val;
|
||||||
|
|
||||||
cfg = &d->staged_config[s->conf_type];
|
cfg = &d->staged_config[s->conf_type];
|
||||||
if (cfg->have_new_ctrl) {
|
if (cfg->have_new_ctrl) {
|
||||||
|
|
|
@ -298,6 +298,30 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "VtsBootconfigTest"
|
"name": "VtsBootconfigTest"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "binderDriverInterfaceTest"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "binderLibTest"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "binderSafeInterfaceTest"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "memunreachable_binder_test"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "VtsHalBluetoothAudioTargetTest"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "CtsBionicTestCases"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "CtsLibcoreTestCases"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "CtsUsbTests"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
|
@ -58,6 +58,56 @@ static bool is_imm8(int value)
|
||||||
return value <= 127 && value >= -128;
|
return value <= 127 && value >= -128;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Let us limit the positive offset to be <= 123.
|
||||||
|
* This is to ensure eventual jit convergence For the following patterns:
|
||||||
|
* ...
|
||||||
|
* pass4, final_proglen=4391:
|
||||||
|
* ...
|
||||||
|
* 20e: 48 85 ff test rdi,rdi
|
||||||
|
* 211: 74 7d je 0x290
|
||||||
|
* 213: 48 8b 77 00 mov rsi,QWORD PTR [rdi+0x0]
|
||||||
|
* ...
|
||||||
|
* 289: 48 85 ff test rdi,rdi
|
||||||
|
* 28c: 74 17 je 0x2a5
|
||||||
|
* 28e: e9 7f ff ff ff jmp 0x212
|
||||||
|
* 293: bf 03 00 00 00 mov edi,0x3
|
||||||
|
* Note that insn at 0x211 is 2-byte cond jump insn for offset 0x7d (-125)
|
||||||
|
* and insn at 0x28e is 5-byte jmp insn with offset -129.
|
||||||
|
*
|
||||||
|
* pass5, final_proglen=4392:
|
||||||
|
* ...
|
||||||
|
* 20e: 48 85 ff test rdi,rdi
|
||||||
|
* 211: 0f 84 80 00 00 00 je 0x297
|
||||||
|
* 217: 48 8b 77 00 mov rsi,QWORD PTR [rdi+0x0]
|
||||||
|
* ...
|
||||||
|
* 28d: 48 85 ff test rdi,rdi
|
||||||
|
* 290: 74 1a je 0x2ac
|
||||||
|
* 292: eb 84 jmp 0x218
|
||||||
|
* 294: bf 03 00 00 00 mov edi,0x3
|
||||||
|
* Note that insn at 0x211 is 6-byte cond jump insn now since its offset
|
||||||
|
* becomes 0x80 based on previous round (0x293 - 0x213 = 0x80).
|
||||||
|
* At the same time, insn at 0x292 is a 2-byte insn since its offset is
|
||||||
|
* -124.
|
||||||
|
*
|
||||||
|
* pass6 will repeat the same code as in pass4 and this will prevent
|
||||||
|
* eventual convergence.
|
||||||
|
*
|
||||||
|
* To fix this issue, we need to break je (2->6 bytes) <-> jmp (5->2 bytes)
|
||||||
|
* cycle in the above. In the above example je offset <= 0x7c should work.
|
||||||
|
*
|
||||||
|
* For other cases, je <-> je needs offset <= 0x7b to avoid no convergence
|
||||||
|
* issue. For jmp <-> je and jmp <-> jmp cases, jmp offset <= 0x7c should
|
||||||
|
* avoid no convergence issue.
|
||||||
|
*
|
||||||
|
* Overall, let us limit the positive offset for 8bit cond/uncond jmp insn
|
||||||
|
* to maximum 123 (0x7b). This way, the jit pass can eventually converge.
|
||||||
|
*/
|
||||||
|
static bool is_imm8_jmp_offset(int value)
|
||||||
|
{
|
||||||
|
return value <= 123 && value >= -128;
|
||||||
|
}
|
||||||
|
|
||||||
static bool is_simm32(s64 value)
|
static bool is_simm32(s64 value)
|
||||||
{
|
{
|
||||||
return value == (s64)(s32)value;
|
return value == (s64)(s32)value;
|
||||||
|
@ -1774,7 +1824,7 @@ emit_cond_jmp: /* Convert BPF opcode to x86 */
|
||||||
return -EFAULT;
|
return -EFAULT;
|
||||||
}
|
}
|
||||||
jmp_offset = addrs[i + insn->off] - addrs[i];
|
jmp_offset = addrs[i + insn->off] - addrs[i];
|
||||||
if (is_imm8(jmp_offset)) {
|
if (is_imm8_jmp_offset(jmp_offset)) {
|
||||||
if (jmp_padding) {
|
if (jmp_padding) {
|
||||||
/* To keep the jmp_offset valid, the extra bytes are
|
/* To keep the jmp_offset valid, the extra bytes are
|
||||||
* padded before the jump insn, so we subtract the
|
* padded before the jump insn, so we subtract the
|
||||||
|
@ -1856,7 +1906,7 @@ emit_cond_jmp: /* Convert BPF opcode to x86 */
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
emit_jmp:
|
emit_jmp:
|
||||||
if (is_imm8(jmp_offset)) {
|
if (is_imm8_jmp_offset(jmp_offset)) {
|
||||||
if (jmp_padding) {
|
if (jmp_padding) {
|
||||||
/* To avoid breaking jmp_offset, the extra bytes
|
/* To avoid breaking jmp_offset, the extra bytes
|
||||||
* are padded before the actual jmp insn, so
|
* are padded before the actual jmp insn, so
|
||||||
|
|
|
@ -306,6 +306,30 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "VtsBootconfigTest"
|
"name": "VtsBootconfigTest"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "binderDriverInterfaceTest"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "binderLibTest"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "binderSafeInterfaceTest"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "memunreachable_binder_test"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "VtsHalBluetoothAudioTargetTest"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "CtsBionicTestCases"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "CtsLibcoreTestCases"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "CtsUsbTests"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
|
@ -219,8 +219,8 @@ static int rq_qos_wake_function(struct wait_queue_entry *curr,
|
||||||
|
|
||||||
data->got_token = true;
|
data->got_token = true;
|
||||||
smp_wmb();
|
smp_wmb();
|
||||||
list_del_init(&curr->entry);
|
|
||||||
wake_up_process(data->task);
|
wake_up_process(data->task);
|
||||||
|
list_del_init_careful(&curr->entry);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -253,6 +253,8 @@ static int part_uevent(const struct device *dev, struct kobj_uevent_env *env)
|
||||||
add_uevent_var(env, "PARTN=%u", part->bd_partno);
|
add_uevent_var(env, "PARTN=%u", part->bd_partno);
|
||||||
if (part->bd_meta_info && part->bd_meta_info->volname[0])
|
if (part->bd_meta_info && part->bd_meta_info->volname[0])
|
||||||
add_uevent_var(env, "PARTNAME=%s", part->bd_meta_info->volname);
|
add_uevent_var(env, "PARTNAME=%s", part->bd_meta_info->volname);
|
||||||
|
if (part->bd_meta_info && part->bd_meta_info->uuid[0])
|
||||||
|
add_uevent_var(env, "PARTUUID=%s", part->bd_meta_info->uuid);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -496,7 +496,7 @@ static int encode_addr_size_pairs(struct dma_xfer *xfer, struct wrapper_list *wr
|
||||||
nents = sgt->nents;
|
nents = sgt->nents;
|
||||||
nents_dma = nents;
|
nents_dma = nents;
|
||||||
*size = QAIC_MANAGE_EXT_MSG_LENGTH - msg_hdr_len - sizeof(**out_trans);
|
*size = QAIC_MANAGE_EXT_MSG_LENGTH - msg_hdr_len - sizeof(**out_trans);
|
||||||
for_each_sgtable_sg(sgt, sg, i) {
|
for_each_sgtable_dma_sg(sgt, sg, i) {
|
||||||
*size -= sizeof(*asp);
|
*size -= sizeof(*asp);
|
||||||
/* Save 1K for possible follow-up transactions. */
|
/* Save 1K for possible follow-up transactions. */
|
||||||
if (*size < SZ_1K) {
|
if (*size < SZ_1K) {
|
||||||
|
|
|
@ -177,7 +177,7 @@ static int clone_range_of_sgt_for_slice(struct qaic_device *qdev, struct sg_tabl
|
||||||
nents = 0;
|
nents = 0;
|
||||||
|
|
||||||
size = size ? size : PAGE_SIZE;
|
size = size ? size : PAGE_SIZE;
|
||||||
for (sg = sgt_in->sgl; sg; sg = sg_next(sg)) {
|
for_each_sgtable_dma_sg(sgt_in, sg, j) {
|
||||||
len = sg_dma_len(sg);
|
len = sg_dma_len(sg);
|
||||||
|
|
||||||
if (!len)
|
if (!len)
|
||||||
|
@ -214,7 +214,7 @@ static int clone_range_of_sgt_for_slice(struct qaic_device *qdev, struct sg_tabl
|
||||||
|
|
||||||
/* copy relevant sg node and fix page and length */
|
/* copy relevant sg node and fix page and length */
|
||||||
sgn = sgf;
|
sgn = sgf;
|
||||||
for_each_sgtable_sg(sgt, sg, j) {
|
for_each_sgtable_dma_sg(sgt, sg, j) {
|
||||||
memcpy(sg, sgn, sizeof(*sg));
|
memcpy(sg, sgn, sizeof(*sg));
|
||||||
if (sgn == sgf) {
|
if (sgn == sgf) {
|
||||||
sg_dma_address(sg) += offf;
|
sg_dma_address(sg) += offf;
|
||||||
|
@ -294,7 +294,7 @@ static int encode_reqs(struct qaic_device *qdev, struct bo_slice *slice,
|
||||||
* fence.
|
* fence.
|
||||||
*/
|
*/
|
||||||
dev_addr = req->dev_addr;
|
dev_addr = req->dev_addr;
|
||||||
for_each_sgtable_sg(slice->sgt, sg, i) {
|
for_each_sgtable_dma_sg(slice->sgt, sg, i) {
|
||||||
slice->reqs[i].cmd = cmd;
|
slice->reqs[i].cmd = cmd;
|
||||||
slice->reqs[i].src_addr = cpu_to_le64(slice->dir == DMA_TO_DEVICE ?
|
slice->reqs[i].src_addr = cpu_to_le64(slice->dir == DMA_TO_DEVICE ?
|
||||||
sg_dma_address(sg) : dev_addr);
|
sg_dma_address(sg) : dev_addr);
|
||||||
|
|
|
@ -298,6 +298,30 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "VtsBootconfigTest"
|
"name": "VtsBootconfigTest"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "binderDriverInterfaceTest"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "binderLibTest"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "binderSafeInterfaceTest"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "memunreachable_binder_test"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "VtsHalBluetoothAudioTargetTest"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "CtsBionicTestCases"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "CtsLibcoreTestCases"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "CtsUsbTests"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
|
@ -1404,6 +1404,10 @@ static void binder_cleanup_ref_olocked(struct binder_ref *ref)
|
||||||
binder_dequeue_work(ref->proc, &ref->death->work);
|
binder_dequeue_work(ref->proc, &ref->death->work);
|
||||||
binder_stats_deleted(BINDER_STAT_DEATH);
|
binder_stats_deleted(BINDER_STAT_DEATH);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (ref->freeze)
|
||||||
|
binder_dequeue_work(ref->proc, &ref->freeze->work);
|
||||||
|
|
||||||
binder_stats_deleted(BINDER_STAT_REF);
|
binder_stats_deleted(BINDER_STAT_REF);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4072,7 +4076,6 @@ binder_request_freeze_notification(struct binder_proc *proc,
|
||||||
{
|
{
|
||||||
struct binder_ref_freeze *freeze;
|
struct binder_ref_freeze *freeze;
|
||||||
struct binder_ref *ref;
|
struct binder_ref *ref;
|
||||||
bool is_frozen;
|
|
||||||
|
|
||||||
freeze = kzalloc(sizeof(*freeze), GFP_KERNEL);
|
freeze = kzalloc(sizeof(*freeze), GFP_KERNEL);
|
||||||
if (!freeze)
|
if (!freeze)
|
||||||
|
@ -4088,31 +4091,30 @@ binder_request_freeze_notification(struct binder_proc *proc,
|
||||||
}
|
}
|
||||||
|
|
||||||
binder_node_lock(ref->node);
|
binder_node_lock(ref->node);
|
||||||
|
if (ref->freeze) {
|
||||||
if (ref->freeze || !ref->node->proc) {
|
binder_user_error("%d:%d BC_REQUEST_FREEZE_NOTIFICATION already set\n",
|
||||||
binder_user_error("%d:%d invalid BC_REQUEST_FREEZE_NOTIFICATION %s\n",
|
proc->pid, thread->pid);
|
||||||
proc->pid, thread->pid,
|
|
||||||
ref->freeze ? "already set" : "dead node");
|
|
||||||
binder_node_unlock(ref->node);
|
binder_node_unlock(ref->node);
|
||||||
binder_proc_unlock(proc);
|
binder_proc_unlock(proc);
|
||||||
kfree(freeze);
|
kfree(freeze);
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
binder_inner_proc_lock(ref->node->proc);
|
|
||||||
is_frozen = ref->node->proc->is_frozen;
|
|
||||||
binder_inner_proc_unlock(ref->node->proc);
|
|
||||||
|
|
||||||
INIT_LIST_HEAD(&freeze->work.entry);
|
INIT_LIST_HEAD(&freeze->work.entry);
|
||||||
freeze->cookie = handle_cookie->cookie;
|
freeze->cookie = handle_cookie->cookie;
|
||||||
freeze->work.type = BINDER_WORK_FROZEN_BINDER;
|
freeze->work.type = BINDER_WORK_FROZEN_BINDER;
|
||||||
freeze->is_frozen = is_frozen;
|
|
||||||
|
|
||||||
ref->freeze = freeze;
|
ref->freeze = freeze;
|
||||||
|
|
||||||
binder_inner_proc_lock(proc);
|
if (ref->node->proc) {
|
||||||
binder_enqueue_work_ilocked(&ref->freeze->work, &proc->todo);
|
binder_inner_proc_lock(ref->node->proc);
|
||||||
binder_wakeup_proc_ilocked(proc);
|
freeze->is_frozen = ref->node->proc->is_frozen;
|
||||||
binder_inner_proc_unlock(proc);
|
binder_inner_proc_unlock(ref->node->proc);
|
||||||
|
|
||||||
|
binder_inner_proc_lock(proc);
|
||||||
|
binder_enqueue_work_ilocked(&freeze->work, &proc->todo);
|
||||||
|
binder_wakeup_proc_ilocked(proc);
|
||||||
|
binder_inner_proc_unlock(proc);
|
||||||
|
}
|
||||||
|
|
||||||
binder_node_unlock(ref->node);
|
binder_node_unlock(ref->node);
|
||||||
binder_proc_unlock(proc);
|
binder_proc_unlock(proc);
|
||||||
|
@ -5392,6 +5394,15 @@ static void binder_release_work(struct binder_proc *proc,
|
||||||
} break;
|
} break;
|
||||||
case BINDER_WORK_NODE:
|
case BINDER_WORK_NODE:
|
||||||
break;
|
break;
|
||||||
|
case BINDER_WORK_CLEAR_FREEZE_NOTIFICATION: {
|
||||||
|
struct binder_ref_freeze *freeze;
|
||||||
|
|
||||||
|
freeze = container_of(w, struct binder_ref_freeze, work);
|
||||||
|
binder_debug(BINDER_DEBUG_DEAD_TRANSACTION,
|
||||||
|
"undelivered freeze notification, %016llx\n",
|
||||||
|
(u64)freeze->cookie);
|
||||||
|
kfree(freeze);
|
||||||
|
} break;
|
||||||
default:
|
default:
|
||||||
pr_err("unexpected work type, %d, not freed\n",
|
pr_err("unexpected work type, %d, not freed\n",
|
||||||
wtype);
|
wtype);
|
||||||
|
@ -5804,6 +5815,7 @@ static bool binder_txns_pending_ilocked(struct binder_proc *proc)
|
||||||
|
|
||||||
static void binder_add_freeze_work(struct binder_proc *proc, bool is_frozen)
|
static void binder_add_freeze_work(struct binder_proc *proc, bool is_frozen)
|
||||||
{
|
{
|
||||||
|
struct binder_node *prev = NULL;
|
||||||
struct rb_node *n;
|
struct rb_node *n;
|
||||||
struct binder_ref *ref;
|
struct binder_ref *ref;
|
||||||
|
|
||||||
|
@ -5812,7 +5824,10 @@ static void binder_add_freeze_work(struct binder_proc *proc, bool is_frozen)
|
||||||
struct binder_node *node;
|
struct binder_node *node;
|
||||||
|
|
||||||
node = rb_entry(n, struct binder_node, rb_node);
|
node = rb_entry(n, struct binder_node, rb_node);
|
||||||
|
binder_inc_node_tmpref_ilocked(node);
|
||||||
binder_inner_proc_unlock(proc);
|
binder_inner_proc_unlock(proc);
|
||||||
|
if (prev)
|
||||||
|
binder_put_node(prev);
|
||||||
binder_node_lock(node);
|
binder_node_lock(node);
|
||||||
hlist_for_each_entry(ref, &node->refs, node_entry) {
|
hlist_for_each_entry(ref, &node->refs, node_entry) {
|
||||||
/*
|
/*
|
||||||
|
@ -5838,10 +5853,15 @@ static void binder_add_freeze_work(struct binder_proc *proc, bool is_frozen)
|
||||||
}
|
}
|
||||||
binder_inner_proc_unlock(ref->proc);
|
binder_inner_proc_unlock(ref->proc);
|
||||||
}
|
}
|
||||||
|
prev = node;
|
||||||
binder_node_unlock(node);
|
binder_node_unlock(node);
|
||||||
binder_inner_proc_lock(proc);
|
binder_inner_proc_lock(proc);
|
||||||
|
if (proc->is_dead)
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
binder_inner_proc_unlock(proc);
|
binder_inner_proc_unlock(proc);
|
||||||
|
if (prev)
|
||||||
|
binder_put_node(prev);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int binder_ioctl_freeze(struct binder_freeze_info *info,
|
static int binder_ioctl_freeze(struct binder_freeze_info *info,
|
||||||
|
@ -6526,6 +6546,7 @@ static void binder_deferred_release(struct binder_proc *proc)
|
||||||
if (special_list)
|
if (special_list)
|
||||||
binder_release_work(proc, special_list);
|
binder_release_work(proc, special_list);
|
||||||
binder_release_work(proc, &proc->delivered_death);
|
binder_release_work(proc, &proc->delivered_death);
|
||||||
|
binder_release_work(proc, &proc_wrapper(proc)->delivered_freeze);
|
||||||
|
|
||||||
binder_debug(BINDER_DEBUG_OPEN_CLOSE,
|
binder_debug(BINDER_DEBUG_OPEN_CLOSE,
|
||||||
"%s: %d threads %d, nodes %d (ref %d), refs %d, active transactions %d\n",
|
"%s: %d threads %d, nodes %d (ref %d), refs %d, active transactions %d\n",
|
||||||
|
@ -6660,6 +6681,12 @@ static void print_binder_work_ilocked(struct seq_file *m,
|
||||||
case BINDER_WORK_CLEAR_DEATH_NOTIFICATION:
|
case BINDER_WORK_CLEAR_DEATH_NOTIFICATION:
|
||||||
seq_printf(m, "%shas cleared death notification\n", prefix);
|
seq_printf(m, "%shas cleared death notification\n", prefix);
|
||||||
break;
|
break;
|
||||||
|
case BINDER_WORK_FROZEN_BINDER:
|
||||||
|
seq_printf(m, "%shas frozen binder\n", prefix);
|
||||||
|
break;
|
||||||
|
case BINDER_WORK_CLEAR_FREEZE_NOTIFICATION:
|
||||||
|
seq_printf(m, "%shas cleared freeze notification\n", prefix);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
seq_printf(m, "%sunknown work: type %d\n", prefix, w->type);
|
seq_printf(m, "%sunknown work: type %d\n", prefix, w->type);
|
||||||
break;
|
break;
|
||||||
|
@ -6809,6 +6836,10 @@ static void print_binder_proc(struct seq_file *m,
|
||||||
seq_puts(m, " has delivered dead binder\n");
|
seq_puts(m, " has delivered dead binder\n");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
list_for_each_entry(w, &proc_wrapper(proc)->delivered_freeze, entry) {
|
||||||
|
seq_puts(m, " has delivered freeze binder\n");
|
||||||
|
break;
|
||||||
|
}
|
||||||
binder_inner_proc_unlock(proc);
|
binder_inner_proc_unlock(proc);
|
||||||
if (!print_all && m->count == header_pos)
|
if (!print_all && m->count == header_pos)
|
||||||
m->count = start_pos;
|
m->count = start_pos;
|
||||||
|
|
|
@ -37,6 +37,7 @@
|
||||||
#include <trace/hooks/lz4_decompress.h>
|
#include <trace/hooks/lz4_decompress.h>
|
||||||
#include <trace/hooks/avc.h>
|
#include <trace/hooks/avc.h>
|
||||||
#include <trace/hooks/creds.h>
|
#include <trace/hooks/creds.h>
|
||||||
|
#include <trace/hooks/module.h>
|
||||||
#include <trace/hooks/selinux.h>
|
#include <trace/hooks/selinux.h>
|
||||||
#include <trace/hooks/syscall_check.h>
|
#include <trace/hooks/syscall_check.h>
|
||||||
#include <trace/hooks/gic.h>
|
#include <trace/hooks/gic.h>
|
||||||
|
@ -79,6 +80,7 @@
|
||||||
#include <trace/hooks/fsnotify.h>
|
#include <trace/hooks/fsnotify.h>
|
||||||
#include <trace/hooks/perf.h>
|
#include <trace/hooks/perf.h>
|
||||||
#include <trace/hooks/dmabuf.h>
|
#include <trace/hooks/dmabuf.h>
|
||||||
|
#include <trace/hooks/xhci.h>
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Export tracepoints that act as a bare tracehook (ie: have no trace event
|
* Export tracepoints that act as a bare tracehook (ie: have no trace event
|
||||||
|
@ -219,6 +221,9 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_record_mutex_lock_starttime);
|
||||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_record_rtmutex_lock_starttime);
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_record_rtmutex_lock_starttime);
|
||||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_record_rwsem_lock_starttime);
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_record_rwsem_lock_starttime);
|
||||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_record_pcpu_rwsem_starttime);
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_record_pcpu_rwsem_starttime);
|
||||||
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_free_mod_mem);
|
||||||
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_set_mod_perm_after_init);
|
||||||
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_set_mod_perm_before_init);
|
||||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_selinux_is_initialized);
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_selinux_is_initialized);
|
||||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_shmem_get_folio);
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_shmem_get_folio);
|
||||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_shmem_mod_shmem);
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_shmem_mod_shmem);
|
||||||
|
@ -273,15 +278,19 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_futex_wait_end);
|
||||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_futex_wake_traverse_plist);
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_futex_wake_traverse_plist);
|
||||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_futex_wake_this);
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_futex_wake_this);
|
||||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_futex_wake_up_q_finish);
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_futex_wake_up_q_finish);
|
||||||
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_futex_wait_queue_start);
|
||||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_ctl_dirty_rate);
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_ctl_dirty_rate);
|
||||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_sha256);
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_sha256);
|
||||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_aes_expandkey);
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_aes_expandkey);
|
||||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_aes_encrypt);
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_aes_encrypt);
|
||||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_aes_decrypt);
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_aes_decrypt);
|
||||||
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_mmc_resume);
|
||||||
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_mmc_suspend);
|
||||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_mmc_update_mmc_queue);
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_mmc_update_mmc_queue);
|
||||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_rwsem_downgrade_wake_finish);
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_rwsem_downgrade_wake_finish);
|
||||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_rwsem_wake_finish);
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_rwsem_wake_finish);
|
||||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_meminfo_proc_show);
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_meminfo_proc_show);
|
||||||
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_meminfo_proc_show);
|
||||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_exit_mm);
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_exit_mm);
|
||||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_show_mem);
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_show_mem);
|
||||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_print_slabinfo_header);
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_print_slabinfo_header);
|
||||||
|
@ -304,7 +313,7 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_gzvm_handle_demand_page_post);
|
||||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_gzvm_destroy_vm_post_process);
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_gzvm_destroy_vm_post_process);
|
||||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_alter_mutex_list_add);
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_alter_mutex_list_add);
|
||||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_mutex_unlock_slowpath);
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_mutex_unlock_slowpath);
|
||||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_mutex_unlock_slowpath_before_wakeq);
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_mutex_unlock_slowpath_bf_wakeq);
|
||||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_save_track_hash);
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_save_track_hash);
|
||||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_should_fault_around);
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_should_fault_around);
|
||||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_mem_cgroup_charge);
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_mem_cgroup_charge);
|
||||||
|
@ -322,6 +331,10 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_binder_reply);
|
||||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_binder_trans);
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_binder_trans);
|
||||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_binder_wait_for_work);
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_binder_wait_for_work);
|
||||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_alloc_flags_cma_adjust);
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_alloc_flags_cma_adjust);
|
||||||
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_mapping_shrinkable);
|
||||||
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_madvise_pageout_begin);
|
||||||
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_madvise_pageout_end);
|
||||||
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_reclaim_folio_list);
|
||||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_exit_signal_whether_wake);
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_exit_signal_whether_wake);
|
||||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_exit_check);
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_exit_check);
|
||||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_freeze_whether_wake);
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_freeze_whether_wake);
|
||||||
|
@ -381,6 +394,8 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_tcp_clean_rtx_queue);
|
||||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_tcp_rcv_synack);
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_tcp_rcv_synack);
|
||||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_udp_unicast_rcv_skb);
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_udp_unicast_rcv_skb);
|
||||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_udp6_unicast_rcv_skb);
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_udp6_unicast_rcv_skb);
|
||||||
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_tcp_rcv_established_fast_path);
|
||||||
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_tcp_rcv_established_slow_path);
|
||||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_try_to_unmap_one);
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_try_to_unmap_one);
|
||||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_record_rwsem_reader_owned);
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_record_rwsem_reader_owned);
|
||||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_clear_rwsem_reader_owned);
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_clear_rwsem_reader_owned);
|
||||||
|
@ -456,6 +471,8 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_filemap_add_folio);
|
||||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_lock_folio_drop_mmap_start);
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_lock_folio_drop_mmap_start);
|
||||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_lock_folio_drop_mmap_end);
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_lock_folio_drop_mmap_end);
|
||||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_filemap_update_page);
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_filemap_update_page);
|
||||||
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_lruvec_add_folio);
|
||||||
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_lruvec_del_folio);
|
||||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_update_page_mapcount);
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_update_page_mapcount);
|
||||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_add_page_to_lrulist);
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_add_page_to_lrulist);
|
||||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_del_page_from_lrulist);
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_del_page_from_lrulist);
|
||||||
|
@ -481,6 +498,9 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_read_lazy_flag);
|
||||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_set_tsk_need_resched_lazy);
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_set_tsk_need_resched_lazy);
|
||||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_usb_dev_suspend);
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_usb_dev_suspend);
|
||||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_usb_dev_resume);
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_usb_dev_resume);
|
||||||
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_usb_new_device_added);
|
||||||
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_xhci_suspend);
|
||||||
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_xhci_resume);
|
||||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_bd_link_disk_holder);
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_bd_link_disk_holder);
|
||||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_do_new_mount_fc);
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_do_new_mount_fc);
|
||||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_blk_fill_rwbs);
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_blk_fill_rwbs);
|
||||||
|
@ -508,6 +528,9 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_perf_rotate_context);
|
||||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_process_madvise_bypass);
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_process_madvise_bypass);
|
||||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_free_pages_prepare_bypass);
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_free_pages_prepare_bypass);
|
||||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_free_pages_ok_bypass);
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_free_pages_ok_bypass);
|
||||||
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_free_pages_prepare_init);
|
||||||
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_post_alloc_hook);
|
||||||
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_check_new_page);
|
||||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_split_large_folio_bypass);
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_split_large_folio_bypass);
|
||||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_madvise_pageout_return_error);
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_madvise_pageout_return_error);
|
||||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_process_madvise_return_error);
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_process_madvise_return_error);
|
||||||
|
@ -568,11 +591,12 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_ogki_udp6_unicast_rcv_skb);
|
||||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_ogki_kmem_cache_create_usercopy);
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_ogki_kmem_cache_create_usercopy);
|
||||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_customize_thp_pcp_order);
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_customize_thp_pcp_order);
|
||||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_customize_thp_gfp_orders);
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_customize_thp_gfp_orders);
|
||||||
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_customize_pmd_gfp_bypass);
|
||||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_init_adjust_zone_wmark);
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_init_adjust_zone_wmark);
|
||||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_cma_alloc_retry);
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_cma_alloc_retry);
|
||||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_ksys_umount);
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_ksys_umount);
|
||||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_do_group_exit);
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_do_group_exit);
|
||||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_suitable_migration_target_bypass);
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_migration_target_bypass);
|
||||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_shrink_node_memcgs);
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_shrink_node_memcgs);
|
||||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_swap_writepage);
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_swap_writepage);
|
||||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_dpm_wait_start);
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_dpm_wait_start);
|
||||||
|
@ -583,7 +607,18 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_flush_wq_wait_start);
|
||||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_flush_wq_wait_finish);
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_flush_wq_wait_finish);
|
||||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_flush_work_wait_start);
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_flush_work_wait_start);
|
||||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_flush_work_wait_finish);
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_flush_work_wait_finish);
|
||||||
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_refault_filemap_add_folio);
|
||||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_direct_reclaim_begin);
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_direct_reclaim_begin);
|
||||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_direct_reclaim_end);
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_direct_reclaim_end);
|
||||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_wq_queue_work);
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_wq_queue_work);
|
||||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_wq_wake_idle_worker);
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_wq_wake_idle_worker);
|
||||||
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_dma_buf_release);
|
||||||
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_send_signal_locked);
|
||||||
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_copy_page_to_user);
|
||||||
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_copy_page_from_user);
|
||||||
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_destroy_inode);
|
||||||
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_rmqueue);
|
||||||
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_filemap_get_folio);
|
||||||
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_mm_compaction_begin);
|
||||||
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_mm_compaction_end);
|
||||||
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_do_read_fault);
|
||||||
|
|
|
@ -667,6 +667,87 @@ static int mobile_lpm_policy = -1;
|
||||||
module_param(mobile_lpm_policy, int, 0644);
|
module_param(mobile_lpm_policy, int, 0644);
|
||||||
MODULE_PARM_DESC(mobile_lpm_policy, "Default LPM policy for mobile chipsets");
|
MODULE_PARM_DESC(mobile_lpm_policy, "Default LPM policy for mobile chipsets");
|
||||||
|
|
||||||
|
static char *ahci_mask_port_map;
|
||||||
|
module_param_named(mask_port_map, ahci_mask_port_map, charp, 0444);
|
||||||
|
MODULE_PARM_DESC(mask_port_map,
|
||||||
|
"32-bits port map masks to ignore controllers ports. "
|
||||||
|
"Valid values are: "
|
||||||
|
"\"<mask>\" to apply the same mask to all AHCI controller "
|
||||||
|
"devices, and \"<pci_dev>=<mask>,<pci_dev>=<mask>,...\" to "
|
||||||
|
"specify different masks for the controllers specified, "
|
||||||
|
"where <pci_dev> is the PCI ID of an AHCI controller in the "
|
||||||
|
"form \"domain:bus:dev.func\"");
|
||||||
|
|
||||||
|
static void ahci_apply_port_map_mask(struct device *dev,
|
||||||
|
struct ahci_host_priv *hpriv, char *mask_s)
|
||||||
|
{
|
||||||
|
unsigned int mask;
|
||||||
|
|
||||||
|
if (kstrtouint(mask_s, 0, &mask)) {
|
||||||
|
dev_err(dev, "Invalid port map mask\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
hpriv->mask_port_map = mask;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void ahci_get_port_map_mask(struct device *dev,
|
||||||
|
struct ahci_host_priv *hpriv)
|
||||||
|
{
|
||||||
|
char *param, *end, *str, *mask_s;
|
||||||
|
char *name;
|
||||||
|
|
||||||
|
if (!strlen(ahci_mask_port_map))
|
||||||
|
return;
|
||||||
|
|
||||||
|
str = kstrdup(ahci_mask_port_map, GFP_KERNEL);
|
||||||
|
if (!str)
|
||||||
|
return;
|
||||||
|
|
||||||
|
/* Handle single mask case */
|
||||||
|
if (!strchr(str, '=')) {
|
||||||
|
ahci_apply_port_map_mask(dev, hpriv, str);
|
||||||
|
goto free;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Mask list case: parse the parameter to apply the mask only if
|
||||||
|
* the device name matches.
|
||||||
|
*/
|
||||||
|
param = str;
|
||||||
|
end = param + strlen(param);
|
||||||
|
while (param && param < end && *param) {
|
||||||
|
name = param;
|
||||||
|
param = strchr(name, '=');
|
||||||
|
if (!param)
|
||||||
|
break;
|
||||||
|
|
||||||
|
*param = '\0';
|
||||||
|
param++;
|
||||||
|
if (param >= end)
|
||||||
|
break;
|
||||||
|
|
||||||
|
if (strcmp(dev_name(dev), name) != 0) {
|
||||||
|
param = strchr(param, ',');
|
||||||
|
if (param)
|
||||||
|
param++;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
mask_s = param;
|
||||||
|
param = strchr(mask_s, ',');
|
||||||
|
if (param) {
|
||||||
|
*param = '\0';
|
||||||
|
param++;
|
||||||
|
}
|
||||||
|
|
||||||
|
ahci_apply_port_map_mask(dev, hpriv, mask_s);
|
||||||
|
}
|
||||||
|
|
||||||
|
free:
|
||||||
|
kfree(str);
|
||||||
|
}
|
||||||
|
|
||||||
static void ahci_pci_save_initial_config(struct pci_dev *pdev,
|
static void ahci_pci_save_initial_config(struct pci_dev *pdev,
|
||||||
struct ahci_host_priv *hpriv)
|
struct ahci_host_priv *hpriv)
|
||||||
{
|
{
|
||||||
|
@ -689,6 +770,10 @@ static void ahci_pci_save_initial_config(struct pci_dev *pdev,
|
||||||
"Disabling your PATA port. Use the boot option 'ahci.marvell_enable=0' to avoid this.\n");
|
"Disabling your PATA port. Use the boot option 'ahci.marvell_enable=0' to avoid this.\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Handle port map masks passed as module parameter. */
|
||||||
|
if (ahci_mask_port_map)
|
||||||
|
ahci_get_port_map_mask(&pdev->dev, hpriv);
|
||||||
|
|
||||||
ahci_save_initial_config(&pdev->dev, hpriv);
|
ahci_save_initial_config(&pdev->dev, hpriv);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user