diff --git a/.gitignore b/.gitignore index 0bbae167bf93e..d1a8ab3f98aaf 100644 --- a/.gitignore +++ b/.gitignore @@ -135,7 +135,6 @@ GTAGS # id-utils files ID -*.orig *~ \#*# diff --git a/BUILD.bazel b/BUILD.bazel index 9a5947de47f21..35acfef1e60c3 100644 --- a/BUILD.bazel +++ b/BUILD.bazel @@ -27,7 +27,12 @@ load( "merged_kernel_uapi_headers", ) 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", +) package( default_visibility = [ @@ -93,11 +98,20 @@ 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( name = "aarch64_additional_kmi_symbol_lists", srcs = [ # keep sorted "android/abi_gki_aarch64_amlogic", + "android/abi_gki_aarch64_asr", "android/abi_gki_aarch64_asus", "android/abi_gki_aarch64_db845c", "android/abi_gki_aarch64_exynos", @@ -106,11 +120,14 @@ filegroup( "android/abi_gki_aarch64_galaxy", "android/abi_gki_aarch64_honor", "android/abi_gki_aarch64_imx", + "android/abi_gki_aarch64_kunit", "android/abi_gki_aarch64_lenovo", "android/abi_gki_aarch64_mtk", + "android/abi_gki_aarch64_mtktv", "android/abi_gki_aarch64_nothing", "android/abi_gki_aarch64_oplus", "android/abi_gki_aarch64_pixel", + "android/abi_gki_aarch64_pixel_watch", "android/abi_gki_aarch64_qcom", "android/abi_gki_aarch64_sunxi", "android/abi_gki_aarch64_tcl", @@ -131,7 +148,7 @@ define_common_kernels(target_configs = { "additional_kmi_symbol_lists": [":aarch64_additional_kmi_symbol_lists"], "trim_nonlisted_kmi": True, "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"), "make_goals": _GKI_AARCH64_MAKE_GOALS, "ddk_headers_archive": ":kernel_aarch64_ddk_headers_archive", @@ -141,10 +158,19 @@ define_common_kernels(target_configs = { ], }, "kernel_aarch64_16k": { - "kmi_symbol_list_strict_mode": False, + "kmi_symbol_list_strict_mode": True, + "kmi_symbol_list": "android/abi_gki_aarch64", + "additional_kmi_symbol_lists": [":aarch64_additional_kmi_symbol_lists"], + "trim_nonlisted_kmi": True, + "protected_exports_list": "android/abi_gki_protected_exports_aarch64", + "protected_modules_list": ":gki_aarch64_protected_modules", "module_implicit_outs": get_gki_modules_list("arm64") + get_kunit_modules_list("arm64"), "make_goals": _GKI_AARCH64_MAKE_GOALS, - "extra_dist": [":test_mappings_zip"], + "ddk_headers_archive": ":kernel_aarch64_ddk_headers_archive", + "extra_dist": [ + ":test_mappings_zip", + ":tests_zip_arm64", + ], }, "kernel_x86_64": { "kmi_symbol_list_strict_mode": False, @@ -176,6 +202,34 @@ kernel_build( ], ) +kernel_build( + name = "kernel_aarch64_microdroid_16k", + srcs = ["//common:kernel_aarch64_sources"], + outs = [ + "Image", + "System.map", + "modules.builtin", + "modules.builtin.modinfo", + "vmlinux", + "vmlinux.symvers", + ], + build_config = "build.config.microdroid.aarch64", + make_goals = [ + "Image", + ], + page_size = "16k", +) + +copy_to_dist_dir( + name = "kernel_aarch64_microdroid_16k_dist", + data = [ + ":kernel_aarch64_microdroid_16k", + ], + dist_dir = "out/kernel_aarch64_microdroid_16k/dist", + flat = True, + log = "info", +) + copy_to_dist_dir( name = "kernel_aarch64_microdroid_dist", data = [ @@ -873,6 +927,14 @@ ddk_headers( visibility = ["//visibility:public"], ) +ddk_headers_archive( + name = "kernel_x86_64_ddk_headers_archive", + srcs = [ + "all_headers_x86_64", + ], + visibility = ["//visibility:private"], +) + # Implementation details for DDK headers. The targets below cannot be directly # depended on by DDK modules. @@ -1022,25 +1084,25 @@ _KSELFTEST_COPTS = [ config_setting( name = "x86_64", - values = {"platforms": "//build/kernel/kleaf/impl:android_x86_64"}, + values = {"platforms": str(package_relative_label("//build/kernel/kleaf/impl:android_x86_64"))}, visibility = ["//visibility:private"], ) config_setting( name = "i386", - values = {"platforms": "//build/kernel/kleaf/impl:android_i386"}, + values = {"platforms": str(package_relative_label("//build/kernel/kleaf/impl:android_i386"))}, visibility = ["//visibility:private"], ) config_setting( name = "arm64", - values = {"platforms": "//build/kernel/kleaf/impl:android_arm64"}, + values = {"platforms": str(package_relative_label("//build/kernel/kleaf/impl:android_arm64"))}, visibility = ["//visibility:private"], ) config_setting( name = "arm", - values = {"platforms": "//build/kernel/kleaf/impl:android_arm"}, + values = {"platforms": str(package_relative_label("//build/kernel/kleaf/impl:android_arm"))}, visibility = ["//visibility:private"], ) diff --git a/Documentation/ABI/testing/sysfs-bus-iio-filter-admv8818 b/Documentation/ABI/testing/sysfs-bus-iio-filter-admv8818 index 31dbb390573ff..c431f0a13cf50 100644 --- a/Documentation/ABI/testing/sysfs-bus-iio-filter-admv8818 +++ b/Documentation/ABI/testing/sysfs-bus-iio-filter-admv8818 @@ -3,7 +3,7 @@ KernelVersion: Contact: linux-iio@vger.kernel.org Description: Reading this returns the valid values that can be written to the - on_altvoltage0_mode attribute: + filter_mode attribute: - auto -> Adjust bandpass filter to track changes in input clock rate. - manual -> disable/unregister the clock rate notifier / input clock tracking. diff --git a/Documentation/ABI/testing/sysfs-driver-ufs b/Documentation/ABI/testing/sysfs-driver-ufs index 0c7efaf62de0c..5b19bef5aa3d4 100644 --- a/Documentation/ABI/testing/sysfs-driver-ufs +++ b/Documentation/ABI/testing/sysfs-driver-ufs @@ -920,14 +920,16 @@ Description: This file shows whether the configuration descriptor is locked. What: /sys/bus/platform/drivers/ufshcd/*/attributes/max_number_of_rtt What: /sys/bus/platform/devices/*.ufs/attributes/max_number_of_rtt -Date: February 2018 -Contact: Stanislav Nijnikov +Date: May 2024 +Contact: Avri Altman Description: This file provides the maximum current number of - outstanding RTTs in device that is allowed. The full - information about the attribute could be found at - UFS specifications 2.1. + outstanding RTTs in device that is allowed. bMaxNumOfRTT is a + read-write persistent attribute and is equal to two after device + manufacturing. It shall not be set to a value greater than + bDeviceRTTCap value, and it may be set only when the hw queues are + empty. - The file is read only. + The file is read write. What: /sys/bus/platform/drivers/ufshcd/*/attributes/exception_event_control What: /sys/bus/platform/devices/*.ufs/attributes/exception_event_control @@ -1223,6 +1225,55 @@ Description: This file shows the total latency (in micro seconds) of write The file is read only. +What: /sys/bus/platform/drivers/ufshcd/*/power_info/lane +What: /sys/bus/platform/devices/*.ufs/power_info/lane +Date: September 2023 +Contact: Can Guo +Description: This file shows how many lanes are enabled on the UFS link, + i.e., an output 2 means UFS link is operating with 2 lanes. + + The file is read only. + +What: /sys/bus/platform/drivers/ufshcd/*/power_info/mode +What: /sys/bus/platform/devices/*.ufs/power_info/mode +Date: September 2023 +Contact: Can Guo +Description: This file shows the PA power mode of UFS. + + The file is read only. + +What: /sys/bus/platform/drivers/ufshcd/*/power_info/rate +What: /sys/bus/platform/devices/*.ufs/power_info/rate +Date: September 2023 +Contact: Can Guo +Description: This file shows the speed rate of UFS link. + + The file is read only. + +What: /sys/bus/platform/drivers/ufshcd/*/power_info/gear +What: /sys/bus/platform/devices/*.ufs/power_info/gear +Date: September 2023 +Contact: Can Guo +Description: This file shows the gear of UFS link. + + The file is read only. + +What: /sys/bus/platform/drivers/ufshcd/*/power_info/dev_pm +What: /sys/bus/platform/devices/*.ufs/power_info/dev_pm +Date: September 2023 +Contact: Can Guo +Description: This file shows the UFS device power mode. + + The file is read only. + +What: /sys/bus/platform/drivers/ufshcd/*/power_info/link_state +What: /sys/bus/platform/devices/*.ufs/power_info/link_state +Date: September 2023 +Contact: Can Guo +Description: This file shows the state of UFS link. + + The file is read only. + What: /sys/bus/platform/drivers/ufshcd/*/device_descriptor/wb_presv_us_en What: /sys/bus/platform/devices/*.ufs/device_descriptor/wb_presv_us_en Date: June 2020 diff --git a/Documentation/ABI/testing/sysfs-fs-f2fs b/Documentation/ABI/testing/sysfs-fs-f2fs index ddc5c4dd322e4..4b0b78051fedb 100644 --- a/Documentation/ABI/testing/sysfs-fs-f2fs +++ b/Documentation/ABI/testing/sysfs-fs-f2fs @@ -579,6 +579,12 @@ Description: When ATGC is on, it controls age threshold to bypass GCing young candidates whose age is not beyond the threshold, by default it was initialized as 604800 seconds (equals to 7 days). +What: /sys/fs/f2fs//atgc_enabled +Date: Feb 2024 +Contact: "Jinbao Liu" +Description: It represents whether ATGC is on or off. The value is 1 which + indicates that ATGC is on, and 0 indicates that it is off. + What: /sys/fs/f2fs//gc_reclaimed_segments Date: July 2021 Contact: "Daeho Jeong" @@ -763,3 +769,53 @@ Date: November 2023 Contact: "Chao Yu" Description: It controls to enable/disable IO aware feature for background discard. By default, the value is 1 which indicates IO aware is on. + +What: /sys/fs/f2fs//blkzone_alloc_policy +Date: July 2024 +Contact: "Yuanhong Liao" +Description: The zone UFS we are currently using consists of two parts: + conventional zones and sequential zones. It can be used to control which part + to prioritize for writes, with a default value of 0. + + ======================== ========================================= + value description + blkzone_alloc_policy = 0 Prioritize writing to sequential zones + blkzone_alloc_policy = 1 Only allow writing to sequential zones + blkzone_alloc_policy = 2 Prioritize writing to conventional zones + ======================== ========================================= + +What: /sys/fs/f2fs//migration_window_granularity +Date: September 2024 +Contact: "Daeho Jeong" +Description: Controls migration window granularity of garbage collection on large + section. it can control the scanning window granularity for GC migration + in a unit of segment, while migration_granularity controls the number + of segments which can be migrated at the same turn. + +What: /sys/fs/f2fs//reserved_segments +Date: September 2024 +Contact: "Daeho Jeong" +Description: In order to fine tune GC behavior, we can control the number of + reserved segments. + +What: /sys/fs/f2fs//gc_no_zoned_gc_percent +Date: September 2024 +Contact: "Daeho Jeong" +Description: If the percentage of free sections over total sections is above this + number, F2FS do not garbage collection for zoned devices through the + background GC thread. the default number is "60". + +What: /sys/fs/f2fs//gc_boost_zoned_gc_percent +Date: September 2024 +Contact: "Daeho Jeong" +Description: If the percentage of free sections over total sections is under this + number, F2FS boosts garbage collection for zoned devices through the + background GC thread. the default number is "25". + +What: /sys/fs/f2fs//gc_valid_thresh_ratio +Date: September 2024 +Contact: "Daeho Jeong" +Description: It controls the valid block ratio threshold not to trigger excessive GC + 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 + exceeding the ratio. diff --git a/Documentation/admin-guide/kernel-parameters.txt b/Documentation/admin-guide/kernel-parameters.txt index 5faec33386313..3973c035ca313 100644 --- a/Documentation/admin-guide/kernel-parameters.txt +++ b/Documentation/admin-guide/kernel-parameters.txt @@ -1565,12 +1565,28 @@ The above will cause the "foo" tracing instance to trigger a snapshot at the end of boot up. - ftrace_dump_on_oops[=orig_cpu] + ftrace_dump_on_oops[=2(orig_cpu) | =][, | + ,=2(orig_cpu)] [FTRACE] will dump the trace buffers on oops. - If no parameter is passed, ftrace will dump - buffers of all CPUs, but if you pass orig_cpu, it will - dump only the buffer of the CPU that triggered the - oops. + If no parameter is passed, ftrace will dump global + buffers of all CPUs, if you pass 2 or orig_cpu, it + will dump only the buffer of the CPU that triggered + the oops, or the specific instance will be dumped if + its name is passed. Multiple instance dump is also + supported, and instances are separated by commas. Each + instance supports only dump on CPU that triggered the + oops by passing 2 or orig_cpu to it. + + ftrace_dump_on_oops=foo=orig_cpu + + The above will dump only the buffer of "foo" instance + on CPU that triggered the oops. + + ftrace_dump_on_oops,foo,bar=orig_cpu + + The above will dump global buffer on all CPUs, the + buffer of "foo" instance on all CPUs and the buffer + of "bar" instance on CPU that triggered the oops. ftrace_filter=[function-list] [FTRACE] Limit the functions traced by the function @@ -4669,6 +4685,16 @@ printk.time= Show timing data prefixed to each printk message line Format: (1/Y/y=enable, 0/N/n=disable) + proc_mem.force_override= [KNL] + Format: {always | ptrace | never} + Traditionally /proc/pid/mem allows memory permissions to be + overridden without restrictions. This option may be set to + restrict that. Can be one of: + - 'always': traditional behavior always allows mem overrides. + - 'ptrace': only allow mem overrides for active ptracers. + - 'never': never allow mem overrides. + If not specified, default is the CONFIG_PROC_MEM_* choice. + processor.max_cstate= [HW,ACPI] Limit processor to maximum C-state max_cstate=9 overrides any DMI blacklist limit. diff --git a/Documentation/admin-guide/mm/transhuge.rst b/Documentation/admin-guide/mm/transhuge.rst index 9ca1f3a7f5bbb..c667be8062765 100644 --- a/Documentation/admin-guide/mm/transhuge.rst +++ b/Documentation/admin-guide/mm/transhuge.rst @@ -343,10 +343,6 @@ also applies to the regions registered in khugepaged. Monitoring usage ================ -.. note:: - Currently the below counters only record events relating to - PMD-sized THP. Events relating to other THP sizes are not included. - The number of PMD-sized anonymous transparent huge pages currently used by the system is available by reading the AnonHugePages field in ``/proc/meminfo``. To identify what applications are using PMD-sized anonymous transparent huge @@ -475,6 +471,21 @@ swpout_fallback Usually because failed to allocate some continuous swap space for the huge page. +split + is incremented every time a huge page is successfully split into + smaller orders. This can happen for a variety of reasons but a + common reason is that a huge page is old and is being reclaimed. + +split_failed + is incremented if kernel fails to split huge + page. This can happen if the page was pinned by somebody. + +split_deferred + is incremented when a huge page is put onto split queue. + This happens when a huge page is partially unmapped and splitting + it would free up some memory. Pages on split queue are going to + be split under memory pressure, if splitting is possible. + As the system ages, allocating huge pages may be expensive as the system uses memory compaction to copy data around memory to free a huge page for use. There are some counters in ``/proc/vmstat`` to help diff --git a/Documentation/admin-guide/sysctl/kernel.rst b/Documentation/admin-guide/sysctl/kernel.rst index cf33de56da27d..86546f51c0f59 100644 --- a/Documentation/admin-guide/sysctl/kernel.rst +++ b/Documentation/admin-guide/sysctl/kernel.rst @@ -296,12 +296,30 @@ kernel panic). This will output the contents of the ftrace buffers to the console. This is very useful for capturing traces that lead to crashes and outputting them to a serial console. -= =================================================== -0 Disabled (default). -1 Dump buffers of all CPUs. -2 Dump the buffer of the CPU that triggered the oops. -= =================================================== - +======================= =========================================== +0 Disabled (default). +1 Dump buffers of all CPUs. +2(orig_cpu) Dump the buffer of the CPU that triggered the + oops. + Dump the specific instance buffer on all CPUs. +=2(orig_cpu) Dump the specific instance buffer on the CPU + that triggered the oops. +======================= =========================================== + +Multiple instance dump is also supported, and instances are separated +by commas. If global buffer also needs to be dumped, please specify +the dump mode (1/2/orig_cpu) first for global buffer. + +So for example to dump "foo" and "bar" instance buffer on all CPUs, +user can:: + + echo "foo,bar" > /proc/sys/kernel/ftrace_dump_on_oops + +To dump global buffer and "foo" instance buffer on all +CPUs along with the "bar" instance buffer on CPU that triggered the +oops, user can:: + + echo "1,foo,bar=2" > /proc/sys/kernel/ftrace_dump_on_oops ftrace_enabled, stack_tracer_enabled ==================================== diff --git a/Documentation/arch/arm64/silicon-errata.rst b/Documentation/arch/arm64/silicon-errata.rst index 357d6cb98161f..3cf806733083c 100644 --- a/Documentation/arch/arm64/silicon-errata.rst +++ b/Documentation/arch/arm64/silicon-errata.rst @@ -54,6 +54,8 @@ stable kernels. +----------------+-----------------+-----------------+-----------------------------+ | Ampere | AmpereOne | AC03_CPU_38 | AMPERE_ERRATUM_AC03_CPU_38 | +----------------+-----------------+-----------------+-----------------------------+ +| Ampere | AmpereOne AC04 | AC04_CPU_10 | AMPERE_ERRATUM_AC03_CPU_38 | ++----------------+-----------------+-----------------+-----------------------------+ +----------------+-----------------+-----------------+-----------------------------+ | ARM | Cortex-A510 | #2457168 | ARM64_ERRATUM_2457168 | +----------------+-----------------+-----------------+-----------------------------+ @@ -139,6 +141,8 @@ stable kernels. +----------------+-----------------+-----------------+-----------------------------+ | ARM | Cortex-A715 | #2645198 | ARM64_ERRATUM_2645198 | +----------------+-----------------+-----------------+-----------------------------+ +| ARM | Cortex-A715 | #3456084 | ARM64_ERRATUM_3194386 | ++----------------+-----------------+-----------------+-----------------------------+ | ARM | Cortex-A720 | #3456091 | ARM64_ERRATUM_3194386 | +----------------+-----------------+-----------------+-----------------------------+ | ARM | Cortex-A725 | #3456106 | ARM64_ERRATUM_3194386 | @@ -175,6 +179,8 @@ stable kernels. +----------------+-----------------+-----------------+-----------------------------+ | ARM | Neoverse-N2 | #3324339 | ARM64_ERRATUM_3194386 | +----------------+-----------------+-----------------+-----------------------------+ +| ARM | Neoverse-N3 | #3456111 | ARM64_ERRATUM_3194386 | ++----------------+-----------------+-----------------+-----------------------------+ | ARM | Neoverse-V1 | #3324341 | ARM64_ERRATUM_3194386 | +----------------+-----------------+-----------------+-----------------------------+ | ARM | Neoverse-V2 | #3324336 | ARM64_ERRATUM_3194386 | @@ -278,3 +284,5 @@ stable kernels. +----------------+-----------------+-----------------+-----------------------------+ | Microsoft | Azure Cobalt 100| #2253138 | ARM64_ERRATUM_2253138 | +----------------+-----------------+-----------------+-----------------------------+ +| Microsoft | Azure Cobalt 100| #3324339 | ARM64_ERRATUM_3194386 | ++----------------+-----------------+-----------------+-----------------------------+ diff --git a/Documentation/dev-tools/kselftest.rst b/Documentation/dev-tools/kselftest.rst index deede972f2547..3ae1b3677d7f3 100644 --- a/Documentation/dev-tools/kselftest.rst +++ b/Documentation/dev-tools/kselftest.rst @@ -255,9 +255,21 @@ Contributing new tests (details) TEST_PROGS_EXTENDED, TEST_GEN_PROGS_EXTENDED mean it is the executable which is not tested by default. + TEST_FILES, TEST_GEN_FILES mean it is the file which is used by 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 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 diff --git a/Documentation/device-mapper/dm-bow.txt b/Documentation/device-mapper/dm-bow.txt new file mode 100644 index 0000000000000..e3fc4d22e0f40 --- /dev/null +++ b/Documentation/device-mapper/dm-bow.txt @@ -0,0 +1,99 @@ +dm_bow (backup on write) +======================== + +dm_bow is a device mapper driver that uses the free space on a device to back up +data that is overwritten. The changes can then be committed by a simple state +change, or rolled back by removing the dm_bow device and running a command line +utility over the underlying device. + +dm_bow has three states, set by writing ‘1’ or ‘2’ to /sys/block/dm-?/bow/state. +It is only possible to go from state 0 (initial state) to state 1, and then from +state 1 to state 2. + +State 0: dm_bow collects all trims to the device and assumes that these mark +free space on the overlying file system that can be safely used. Typically the +mount code would create the dm_bow device, mount the file system, call the +FITRIM ioctl on the file system then switch to state 1. These trims are not +propagated to the underlying device. + +State 1: All writes to the device cause the underlying data to be backed up to +the free (trimmed) area as needed in such a way as they can be restored. +However, the writes, with one exception, then happen exactly as they would +without dm_bow, so the device is always in a good final state. The exception is +that sector 0 is used to keep a log of the latest changes, both to indicate that +we are in this state and to allow rollback. See below for all details. If there +isn't enough free space, writes are failed with -ENOSPC. + +State 2: The transition to state 2 triggers replacing the special sector 0 with +the normal sector 0, and the freeing of all state information. dm_bow then +becomes a pass-through driver, allowing the device to continue to be used with +minimal performance impact. + +Usage +===== +dm-bow takes one command line parameter, the name of the underlying device. + +dm-bow will typically be used in the following way. dm-bow will be loaded with a +suitable underlying device and the resultant device will be mounted. A file +system trim will be issued via the FITRIM ioctl, then the device will be +switched to state 1. The file system will now be used as normal. At some point, +the changes can either be committed by switching to state 2, or rolled back by +unmounting the file system, removing the dm-bow device and running the command +line utility. Note that rebooting the device will be equivalent to unmounting +and removing, but the command line utility must still be run + +Details of operation in state 1 +=============================== + +dm_bow maintains a type for all sectors. A sector can be any of: + +SECTOR0 +SECTOR0_CURRENT +UNCHANGED +FREE +CHANGED +BACKUP + +SECTOR0 is the first sector on the device, and is used to hold the log of +changes. This is the one exception. + +SECTOR0_CURRENT is a sector picked from the FREE sectors, and is where reads and +writes from the true sector zero are redirected to. Note that like any backup +sector, if the sector is written to directly, it must be moved again. + +UNCHANGED means that the sector has not been changed since we entered state 1. +Thus if it is written to or trimmed, the contents must first be backed up. + +FREE means that the sector was trimmed in state 0 and has not yet been written +to or used for backup. On being written to, a FREE sector is changed to CHANGED. + +CHANGED means that the sector has been modified, and can be further modified +without further backup. + +BACKUP means that this is a free sector being used as a backup. On being written +to, the contents must first be backed up again. + +All backup operations are logged to the first sector. The log sector has the +format: +-------------------------------------------------------- +| Magic | Count | Sequence | Log entry | Log entry | … +-------------------------------------------------------- + +Magic is a magic number. Count is the number of log entries. Sequence is 0 +initially. A log entry is + +----------------------------------- +| Source | Dest | Size | Checksum | +----------------------------------- + +When SECTOR0 is full, the log sector is backed up and another empty log sector +created with sequence number one higher. The first entry in any log entry with +sequence > 0 therefore must be the log of the backing up of the previous log +sector. Note that sequence is not strictly needed, but is a useful sanity check +and potentially limits the time spent trying to restore a corrupted snapshot. + +On entering state 1, dm_bow has a list of free sectors. All other sectors are +unchanged. Sector0_current is selected from the free sectors and the contents of +sector 0 are copied there. The sector 0 is backed up, which triggers the first +log entry to be written. + diff --git a/Documentation/devicetree/bindings/connector/usb-connector.yaml b/Documentation/devicetree/bindings/connector/usb-connector.yaml index 7c8a3e8430d30..eebe99352dab8 100644 --- a/Documentation/devicetree/bindings/connector/usb-connector.yaml +++ b/Documentation/devicetree/bindings/connector/usb-connector.yaml @@ -231,6 +231,36 @@ properties: SNK_READY for non-pd link. 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 + dependencies: sink-vdos-v1: [ sink-vdos ] sink-vdos: [ sink-vdos-v1 ] @@ -316,7 +346,7 @@ examples: }; # 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 typec: ptn5110 { @@ -329,6 +359,9 @@ examples: sink-pdos = ; op-sink-microwatt = <10000000>; + sink-wait-cap-time-ms = <465>; + ps-source-off-time-ms = <835>; + cc-debounce-time-ms = <101>; }; }; diff --git a/Documentation/devicetree/bindings/cpufreq/qemu,virtual-cpufreq.yaml b/Documentation/devicetree/bindings/cpufreq/qemu,virtual-cpufreq.yaml new file mode 100644 index 0000000000000..018d98bcdc826 --- /dev/null +++ b/Documentation/devicetree/bindings/cpufreq/qemu,virtual-cpufreq.yaml @@ -0,0 +1,48 @@ +# SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause +%YAML 1.2 +--- +$id: http://devicetree.org/schemas/cpufreq/qemu,virtual-cpufreq.yaml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + +title: Virtual CPUFreq + +maintainers: + - David Dai + - Saravana Kannan + +description: + Virtual CPUFreq is a virtualized driver in guest kernels that sends performance + selection of its vCPUs as a hint to the host through MMIO regions. Each vCPU + is associated with a performance domain which can be shared with other vCPUs. + Each performance domain has its own set of registers for performance controls. + +properties: + compatible: + const: qemu,virtual-cpufreq + + reg: + maxItems: 1 + description: + Address and size of region containing performance controls for each of the + performance domains. Regions for each performance domain is placed + contiguously and contain registers for controlling DVFS(Dynamic Frequency + and Voltage) characteristics. The size of the region is proportional to + total number of performance domains. + +required: + - compatible + - reg + +additionalProperties: false + +examples: + - | + soc { + #address-cells = <1>; + #size-cells = <1>; + + cpufreq@1040000 { + compatible = "qemu,virtual-cpufreq"; + reg = <0x1040000 0x2000>; + }; + }; diff --git a/Documentation/devicetree/bindings/firmware/arm,scmi.yaml b/Documentation/devicetree/bindings/firmware/arm,scmi.yaml index a17b31d257f4f..5a42937defc86 100644 --- a/Documentation/devicetree/bindings/firmware/arm,scmi.yaml +++ b/Documentation/devicetree/bindings/firmware/arm,scmi.yaml @@ -118,6 +118,13 @@ properties: atomic mode of operation, even if requested. default: 0 + max-rx-timeout-ms: + description: + An optional time value, expressed in milliseconds, representing the + transport maximum timeout value for the receive channel. The value should + be a non-zero value if set. + minimum: 1 + arm,smc-id: $ref: /schemas/types.yaml#/definitions/uint32 description: diff --git a/Documentation/devicetree/bindings/iio/magnetometer/asahi-kasei,ak8975.yaml b/Documentation/devicetree/bindings/iio/magnetometer/asahi-kasei,ak8975.yaml index 9790f75fc669e..fe5145d3b73cf 100644 --- a/Documentation/devicetree/bindings/iio/magnetometer/asahi-kasei,ak8975.yaml +++ b/Documentation/devicetree/bindings/iio/magnetometer/asahi-kasei,ak8975.yaml @@ -23,7 +23,6 @@ properties: - ak8963 - ak09911 - ak09912 - - ak09916 deprecated: true reg: diff --git a/Documentation/devicetree/bindings/net/xlnx,axi-ethernet.yaml b/Documentation/devicetree/bindings/net/xlnx,axi-ethernet.yaml index 1d33d80af11c3..652d696bc9e90 100644 --- a/Documentation/devicetree/bindings/net/xlnx,axi-ethernet.yaml +++ b/Documentation/devicetree/bindings/net/xlnx,axi-ethernet.yaml @@ -34,6 +34,7 @@ properties: and length of the AXI DMA controller IO space, unless axistream-connected is specified, in which case the reg attribute of the node referenced by it is used. + minItems: 1 maxItems: 2 interrupts: @@ -165,7 +166,7 @@ examples: clock-names = "s_axi_lite_clk", "axis_clk", "ref_clk", "mgt_clk"; clocks = <&axi_clk>, <&axi_clk>, <&pl_enet_ref_clk>, <&mgt_clk>; phy-mode = "mii"; - reg = <0x00 0x40000000 0x00 0x40000>; + reg = <0x40000000 0x40000>; xlnx,rxcsum = <0x2>; xlnx,rxmem = <0x800>; xlnx,txcsum = <0x2>; diff --git a/Documentation/devicetree/bindings/spi/spi-nxp-fspi.yaml b/Documentation/devicetree/bindings/spi/spi-nxp-fspi.yaml index 7fd5911454800..902db92da8320 100644 --- a/Documentation/devicetree/bindings/spi/spi-nxp-fspi.yaml +++ b/Documentation/devicetree/bindings/spi/spi-nxp-fspi.yaml @@ -15,12 +15,19 @@ allOf: properties: compatible: - enum: - - nxp,imx8dxl-fspi - - nxp,imx8mm-fspi - - nxp,imx8mp-fspi - - nxp,imx8qxp-fspi - - nxp,lx2160a-fspi + oneOf: + - enum: + - nxp,imx8dxl-fspi + - nxp,imx8mm-fspi + - nxp,imx8mp-fspi + - nxp,imx8qxp-fspi + - nxp,imx8ulp-fspi + - nxp,lx2160a-fspi + - items: + - enum: + - nxp,imx93-fspi + - nxp,imx95-fspi + - const: nxp,imx8mm-fspi reg: items: diff --git a/Documentation/driver-api/ipmi.rst b/Documentation/driver-api/ipmi.rst index e224e47b6b094..dfa021eacd63c 100644 --- a/Documentation/driver-api/ipmi.rst +++ b/Documentation/driver-api/ipmi.rst @@ -540,7 +540,7 @@ at module load time (for a module) with:: alerts_broken The addresses are normal I2C addresses. The adapter is the string -name of the adapter, as shown in /sys/class/i2c-adapter/i2c-/name. +name of the adapter, as shown in /sys/bus/i2c/devices/i2c-/name. It is *NOT* i2c- itself. Also, the comparison is done ignoring spaces, so if the name is "This is an I2C chip" you can say adapter_name=ThisisanI2cchip. This is because it's hard to pass in diff --git a/Documentation/filesystems/f2fs.rst b/Documentation/filesystems/f2fs.rst index 68a0885fb5e69..fb7d2ee022bc0 100644 --- a/Documentation/filesystems/f2fs.rst +++ b/Documentation/filesystems/f2fs.rst @@ -943,3 +943,47 @@ NVMe Zoned Namespace devices can start before the zone-capacity and span across zone-capacity boundary. Such spanning segments are also considered as usable segments. All blocks 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. + + + +# 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. diff --git a/Documentation/trace/postprocess/trace-vmscan-postprocess.pl b/Documentation/trace/postprocess/trace-vmscan-postprocess.pl index e24c009789a09..048dc0dbce645 100644 --- a/Documentation/trace/postprocess/trace-vmscan-postprocess.pl +++ b/Documentation/trace/postprocess/trace-vmscan-postprocess.pl @@ -107,14 +107,14 @@ sub sigint_handler { ); # Defaults for dynamically discovered regex's -my $regex_direct_begin_default = 'order=([0-9]*) may_writepage=([0-9]*) gfp_flags=([A-Z_|]*)'; +my $regex_direct_begin_default = 'order=([0-9]*) gfp_flags=([A-Z_|]*)'; my $regex_direct_end_default = 'nr_reclaimed=([0-9]*)'; my $regex_kswapd_wake_default = 'nid=([0-9]*) order=([0-9]*)'; my $regex_kswapd_sleep_default = 'nid=([0-9]*)'; -my $regex_wakeup_kswapd_default = 'nid=([0-9]*) zid=([0-9]*) order=([0-9]*) gfp_flags=([A-Z_|]*)'; -my $regex_lru_isolate_default = 'isolate_mode=([0-9]*) classzone_idx=([0-9]*) order=([0-9]*) nr_requested=([0-9]*) nr_scanned=([0-9]*) nr_skipped=([0-9]*) nr_taken=([0-9]*) lru=([a-z_]*)'; +my $regex_wakeup_kswapd_default = 'nid=([0-9]*) order=([0-9]*) gfp_flags=([A-Z_|]*)'; +my $regex_lru_isolate_default = 'classzone=([0-9]*) order=([0-9]*) nr_requested=([0-9]*) nr_scanned=([0-9]*) nr_skipped=([0-9]*) nr_taken=([0-9]*) lru=([a-z_]*)'; my $regex_lru_shrink_inactive_default = 'nid=([0-9]*) nr_scanned=([0-9]*) nr_reclaimed=([0-9]*) nr_dirty=([0-9]*) nr_writeback=([0-9]*) nr_congested=([0-9]*) nr_immediate=([0-9]*) nr_activate_anon=([0-9]*) nr_activate_file=([0-9]*) nr_ref_keep=([0-9]*) nr_unmap_fail=([0-9]*) priority=([0-9]*) flags=([A-Z_|]*)'; -my $regex_lru_shrink_active_default = 'lru=([A-Z_]*) nr_scanned=([0-9]*) nr_rotated=([0-9]*) priority=([0-9]*)'; +my $regex_lru_shrink_active_default = 'lru=([A-Z_]*) nr_taken=([0-9]*) nr_active=([0-9]*) nr_deactivated=([0-9]*) nr_referenced=([0-9]*) priority=([0-9]*) flags=([A-Z_|]*)' ; my $regex_writepage_default = 'page=([0-9a-f]*) pfn=([0-9]*) flags=([A-Z_|]*)'; # Dyanically discovered regex @@ -184,8 +184,7 @@ sub generate_traceevent_regex { $regex_direct_begin = generate_traceevent_regex( "vmscan/mm_vmscan_direct_reclaim_begin", $regex_direct_begin_default, - "order", "may_writepage", - "gfp_flags"); + "order", "gfp_flags"); $regex_direct_end = generate_traceevent_regex( "vmscan/mm_vmscan_direct_reclaim_end", $regex_direct_end_default, @@ -201,11 +200,11 @@ sub generate_traceevent_regex { $regex_wakeup_kswapd = generate_traceevent_regex( "vmscan/mm_vmscan_wakeup_kswapd", $regex_wakeup_kswapd_default, - "nid", "zid", "order", "gfp_flags"); + "nid", "order", "gfp_flags"); $regex_lru_isolate = generate_traceevent_regex( "vmscan/mm_vmscan_lru_isolate", $regex_lru_isolate_default, - "isolate_mode", "classzone_idx", "order", + "classzone", "order", "nr_requested", "nr_scanned", "nr_skipped", "nr_taken", "lru"); $regex_lru_shrink_inactive = generate_traceevent_regex( @@ -218,11 +217,10 @@ sub generate_traceevent_regex { $regex_lru_shrink_active = generate_traceevent_regex( "vmscan/mm_vmscan_lru_shrink_active", $regex_lru_shrink_active_default, - "nid", "zid", - "lru", - "nr_scanned", "nr_rotated", "priority"); + "nid", "nr_taken", "nr_active", "nr_deactivated", "nr_referenced", + "priority", "flags"); $regex_writepage = generate_traceevent_regex( - "vmscan/mm_vmscan_writepage", + "vmscan/mm_vmscan_write_folio", $regex_writepage_default, "page", "pfn", "flags"); @@ -371,7 +369,7 @@ sub process_events { print " $regex_wakeup_kswapd\n"; next; } - my $order = $3; + my $order = $2; $perprocesspid{$process_pid}->{MM_VMSCAN_WAKEUP_KSWAPD_PERORDER}[$order]++; } elsif ($tracepoint eq "mm_vmscan_lru_isolate") { $details = $6; @@ -381,18 +379,14 @@ sub process_events { print " $regex_lru_isolate/o\n"; next; } - my $isolate_mode = $1; - my $nr_scanned = $5; - my $file = $8; - - # To closer match vmstat scanning statistics, only count isolate_both - # and isolate_inactive as scanning. isolate_active is rotation - # isolate_inactive == 1 - # isolate_active == 2 - # isolate_both == 3 - if ($isolate_mode != 2) { + my $nr_scanned = $4; + my $lru = $7; + + # To closer match vmstat scanning statistics, only count + # inactive lru as scanning + if ($lru =~ /inactive_/) { $perprocesspid{$process_pid}->{HIGH_NR_SCANNED} += $nr_scanned; - if ($file =~ /_file/) { + if ($lru =~ /_file/) { $perprocesspid{$process_pid}->{HIGH_NR_FILE_SCANNED} += $nr_scanned; } else { $perprocesspid{$process_pid}->{HIGH_NR_ANON_SCANNED} += $nr_scanned; diff --git a/Documentation/virt/kvm/locking.rst b/Documentation/virt/kvm/locking.rst index 3a034db5e55f8..887d9d2fed492 100644 --- a/Documentation/virt/kvm/locking.rst +++ b/Documentation/virt/kvm/locking.rst @@ -9,7 +9,7 @@ KVM Lock Overview The acquisition orders for mutexes are as follows: -- cpus_read_lock() is taken outside kvm_lock +- cpus_read_lock() is taken outside kvm_lock and kvm_usage_lock - kvm->lock is taken outside vcpu->mutex @@ -24,6 +24,13 @@ The acquisition orders for mutexes are as follows: are taken on the waiting side when modifying memslots, so MMU notifiers must not take either kvm->slots_lock or kvm->slots_arch_lock. +cpus_read_lock() vs kvm_lock: + +- Taking cpus_read_lock() outside of kvm_lock is problematic, despite that + being the official ordering, as it is quite easy to unknowingly trigger + cpus_read_lock() while holding kvm_lock. Use caution when walking vm_list, + e.g. avoid complex operations when possible. + For SRCU: - ``synchronize_srcu(&kvm->srcu)`` is called inside critical sections @@ -228,10 +235,17 @@ time it will be set using the Dirty tracking mechanism described above. :Type: mutex :Arch: any :Protects: - vm_list - - kvm_usage_count + +``kvm_usage_lock`` +^^^^^^^^^^^^^^^^^^ + +:Type: mutex +:Arch: any +:Protects: - kvm_usage_count - hardware virtualization enable/disable -:Comment: KVM also disables CPU hotplug via cpus_read_lock() during - enable/disable. +:Comment: Exists because using kvm_lock leads to deadlock (see earlier comment + on cpus_read_lock() vs kvm_lock). Note, KVM also disables CPU hotplug via + cpus_read_lock() when enabling/disabling virtualization. ``kvm->mn_invalidate_lock`` ^^^^^^^^^^^^^^^^^^^^^^^^^^^ @@ -291,11 +305,12 @@ time it will be set using the Dirty tracking mechanism described above. wakeup. ``vendor_module_lock`` -^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^ :Type: mutex :Arch: x86 :Protects: loading a vendor module (kvm_amd or kvm_intel) -:Comment: Exists because using kvm_lock leads to deadlock. cpu_hotplug_lock is - taken outside of kvm_lock, e.g. in KVM's CPU online/offline callbacks, and - many operations need to take cpu_hotplug_lock when loading a vendor module, - e.g. updating static calls. +:Comment: Exists because using kvm_lock leads to deadlock. kvm_lock is taken + in notifiers, e.g. __kvmclock_cpufreq_notifier(), that may be invoked while + cpu_hotplug_lock is held, e.g. from cpufreq_boost_trigger_state(), and many + operations need to take cpu_hotplug_lock when loading a vendor module, e.g. + updating static calls. diff --git a/MAINTAINERS b/MAINTAINERS index 90f45b47525a2..1383b9b43a7c1 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -13740,7 +13740,7 @@ M: Mathieu Desnoyers M: "Paul E. McKenney" L: linux-kernel@vger.kernel.org S: Supported -F: arch/powerpc/include/asm/membarrier.h +F: arch/*/include/asm/membarrier.h F: include/uapi/linux/membarrier.h F: kernel/sched/membarrier.c diff --git a/Makefile b/Makefile index e2381e02a8c26..6f829da7c207d 100644 --- a/Makefile +++ b/Makefile @@ -1,9 +1,9 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 6 PATCHLEVEL = 6 -SUBLEVEL = 50 +SUBLEVEL = 58 EXTRAVERSION = -NAME = Hurr durr I'ma ninja sloth +NAME = Pinguïn Aangedreven # *DOCUMENTATION* # To see a list of typical targets execute "make help" diff --git a/android/abi_gki_aarch64.stg b/android/abi_gki_aarch64.stg index 9894eee27790b..3194a2c4fb6ae 100644 --- a/android/abi_gki_aarch64.stg +++ b/android/abi_gki_aarch64.stg @@ -13,6 +13,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0x2a5b8aea } +pointer_reference { + id: 0x000a9d21 + kind: POINTER + pointee_type_id: 0x2a6a9218 +} pointer_reference { id: 0x000f0722 kind: POINTER @@ -198,6 +203,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0x28e34a3d } +pointer_reference { + id: 0x00abf683 + kind: POINTER + pointee_type_id: 0x28ef3c91 +} pointer_reference { id: 0x00b7947f kind: POINTER @@ -683,6 +693,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0x23734d18 } +pointer_reference { + id: 0x024ed5a8 + kind: POINTER + pointee_type_id: 0x237bb03f +} pointer_reference { id: 0x02578e46 kind: POINTER @@ -1518,6 +1533,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0x3f00a88b } +pointer_reference { + id: 0x055bedb1 + kind: POINTER + pointee_type_id: 0x3f2f5059 +} pointer_reference { id: 0x055e0c0c kind: POINTER @@ -1863,6 +1883,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0x305f514b } +pointer_reference { + id: 0x06893898 + kind: POINTER + pointee_type_id: 0x306404fe +} pointer_reference { id: 0x06901f39 kind: POINTER @@ -2648,6 +2673,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0x0fc94b61 } +pointer_reference { + id: 0x09653b4f + kind: POINTER + pointee_type_id: 0x0fd40ba2 +} pointer_reference { id: 0x09793771 kind: POINTER @@ -2893,11 +2923,6 @@ pointer_reference { kind: POINTER pointee_type_id: 0x039e2476 } -pointer_reference { - id: 0x0a7a1263 - kind: POINTER - pointee_type_id: 0x03a8af11 -} pointer_reference { id: 0x0a812782 kind: POINTER @@ -3258,6 +3283,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0x043f79eb } +pointer_reference { + id: 0x0ba7798f + kind: POINTER + pointee_type_id: 0x04dd00a1 +} pointer_reference { id: 0x0baf61c0 kind: POINTER @@ -3733,6 +3763,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0x1b77cf3e } +pointer_reference { + id: 0x0c5168e8 + kind: POINTER + pointee_type_id: 0x1b05453e +} pointer_reference { id: 0x0c55d62d kind: POINTER @@ -4313,6 +4348,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0x19165aaa } +pointer_reference { + id: 0x0cd5bff8 + kind: POINTER + pointee_type_id: 0x1916197d +} pointer_reference { id: 0x0cd75860 kind: POINTER @@ -4733,6 +4773,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0x1efa64b6 } +pointer_reference { + id: 0x0d301752 + kind: POINTER + pointee_type_id: 0x1e80bbd4 +} pointer_reference { id: 0x0d3022ff kind: POINTER @@ -5558,6 +5603,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0x1c9bef72 } +pointer_reference { + id: 0x0db9de68 + kind: POINTER + pointee_type_id: 0x1ca79f3c +} pointer_reference { id: 0x0db9efe5 kind: POINTER @@ -5598,6 +5648,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0x1d520d5f } +pointer_reference { + id: 0x0dc6d22d + kind: POINTER + pointee_type_id: 0x1d5bae2a +} pointer_reference { id: 0x0dc70534 kind: POINTER @@ -5613,6 +5668,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0x1d6861ce } +pointer_reference { + id: 0x0dcbeae6 + kind: POINTER + pointee_type_id: 0x1d6f4d07 +} pointer_reference { id: 0x0dcc3894 kind: POINTER @@ -5798,6 +5858,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0x1dae4ad4 } +pointer_reference { + id: 0x0dfd7a00 + kind: POINTER + pointee_type_id: 0x1db50e9d +} pointer_reference { id: 0x0dfe7d1f kind: POINTER @@ -6993,6 +7058,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0x11a8cf1e } +pointer_reference { + id: 0x0efb2e7d + kind: POINTER + pointee_type_id: 0x11ac5f6b +} pointer_reference { id: 0x0efbdbdb kind: POINTER @@ -7398,6 +7468,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0x175195e4 } +pointer_reference { + id: 0x0f47e4fb + kind: POINTER + pointee_type_id: 0x175f7573 +} pointer_reference { id: 0x0f48bbc7 kind: POINTER @@ -7428,6 +7503,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0x177f3bf9 } +pointer_reference { + id: 0x0f50ecbc + kind: POINTER + pointee_type_id: 0x1703546d +} pointer_reference { id: 0x0f514133 kind: POINTER @@ -8573,6 +8653,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0x6255e5da } +pointer_reference { + id: 0x12191e2a + kind: POINTER + pointee_type_id: 0x62249e35 +} pointer_reference { id: 0x12209d55 kind: POINTER @@ -8918,6 +9003,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0x655ce63a } +pointer_reference { + id: 0x13cf76cc + kind: POINTER + pointee_type_id: 0x657d3daf +} pointer_reference { id: 0x13e7e035 kind: POINTER @@ -9068,6 +9158,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0x78ef929d } +pointer_reference { + id: 0x14b3256c + kind: POINTER + pointee_type_id: 0x788c732d +} pointer_reference { id: 0x14b9453b kind: POINTER @@ -9538,11 +9633,21 @@ pointer_reference { kind: POINTER pointee_type_id: 0x766d3238 } +pointer_reference { + id: 0x170c0a0f + kind: POINTER + pointee_type_id: 0x7670cea2 +} pointer_reference { id: 0x1710671e kind: POINTER pointee_type_id: 0x76017ae6 } +pointer_reference { + id: 0x17175c07 + kind: POINTER + pointee_type_id: 0x761d9683 +} pointer_reference { id: 0x171be96c kind: POINTER @@ -9588,6 +9693,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0x7706b10e } +pointer_reference { + id: 0x17528ded + kind: POINTER + pointee_type_id: 0x770ad128 +} pointer_reference { id: 0x17535b44 kind: POINTER @@ -10453,6 +10563,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0x411e05ea } +pointer_reference { + id: 0x1adc1e47 + kind: POINTER + pointee_type_id: 0x41309f82 +} pointer_reference { id: 0x1ae38c59 kind: POINTER @@ -11398,6 +11513,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0x534abe77 } +pointer_reference { + id: 0x1e4a76e0 + kind: POINTER + pointee_type_id: 0x53693d1c +} pointer_reference { id: 0x1e4bcad9 kind: POINTER @@ -11678,6 +11798,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0x57c0b49d } +pointer_reference { + id: 0x1f602b00 + kind: POINTER + pointee_type_id: 0x57c04a9d +} pointer_reference { id: 0x1f663182 kind: POINTER @@ -12338,6 +12463,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0xa26304f7 } +pointer_reference { + id: 0x2210e338 + kind: POINTER + pointee_type_id: 0xa2036a7c +} pointer_reference { id: 0x2215f16e kind: POINTER @@ -12363,6 +12493,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0xa22b5357 } +pointer_reference { + id: 0x2229a93f + kind: POINTER + pointee_type_id: 0xa2e64262 +} pointer_reference { id: 0x2230f0e3 kind: POINTER @@ -13413,6 +13548,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0xb1261013 } +pointer_reference { + id: 0x26dba3a7 + kind: POINTER + pointee_type_id: 0xb12e6800 +} pointer_reference { id: 0x26df7325 kind: POINTER @@ -13553,6 +13693,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0xb48403d5 } +pointer_reference { + id: 0x27b172c0 + kind: POINTER + pointee_type_id: 0xb4852d9d +} pointer_reference { id: 0x27b5ed37 kind: POINTER @@ -13733,6 +13878,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0x88c7ff3b } +pointer_reference { + id: 0x28a3a74b + kind: POINTER + pointee_type_id: 0x88ce7bb2 +} pointer_reference { id: 0x28ac1164 kind: POINTER @@ -14228,6 +14378,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0x83a72d08 } +pointer_reference { + id: 0x2a886524 + kind: POINTER + pointee_type_id: 0x8061720d +} pointer_reference { id: 0x2a9c54b1 kind: POINTER @@ -18653,6 +18808,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0x9c35c17d } +pointer_reference { + id: 0x2d9ee704 + kind: POINTER + pointee_type_id: 0x9c3b7a8f +} pointer_reference { id: 0x2da08d6d kind: POINTER @@ -20608,6 +20768,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0x9398dfdf } +pointer_reference { + id: 0x2e763bfd + kind: POINTER + pointee_type_id: 0x93980968 +} pointer_reference { id: 0x2e766833 kind: POINTER @@ -21598,6 +21763,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0x91d8367b } +pointer_reference { + id: 0x2ee74fa2 + kind: POINTER + pointee_type_id: 0x91ddd814 +} pointer_reference { id: 0x2ee76b64 kind: POINTER @@ -23628,6 +23798,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0xeb2226c1 } +pointer_reference { + id: 0x305baabf + kind: POINTER + pointee_type_id: 0xeb2e4c63 +} pointer_reference { id: 0x30600191 kind: POINTER @@ -23638,6 +23813,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0xebcda24f } +pointer_reference { + id: 0x306404fe + kind: POINTER + pointee_type_id: 0xebd0f567 +} pointer_reference { id: 0x3064f970 kind: POINTER @@ -23908,6 +24088,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0xe9bc54d7 } +pointer_reference { + id: 0x30ff3abd + kind: POINTER + pointee_type_id: 0xe9bc0c6b +} pointer_reference { id: 0x3104c07e kind: POINTER @@ -23973,6 +24158,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0xeee127c5 } +pointer_reference { + id: 0x312910e3 + kind: POINTER + pointee_type_id: 0xeee4a512 +} pointer_reference { id: 0x31295d27 kind: POINTER @@ -24003,6 +24193,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0xee8aaaa0 } +pointer_reference { + id: 0x31344499 + kind: POINTER + pointee_type_id: 0xee91f4fa +} pointer_reference { id: 0x313780ff kind: POINTER @@ -24548,6 +24743,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0xe038416b } +pointer_reference { + id: 0x329f41d7 + kind: POINTER + pointee_type_id: 0xe03de1c1 +} pointer_reference { id: 0x329f8670 kind: POINTER @@ -24613,6 +24813,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0xe095cad8 } +pointer_reference { + id: 0x32ba5d4d + kind: POINTER + pointee_type_id: 0xe0a993ab +} pointer_reference { id: 0x32bb7cf5 kind: POINTER @@ -25393,6 +25598,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0xfaeafe16 } +pointer_reference { + id: 0x342cf104 + kind: POINTER + pointee_type_id: 0xfaf3228c +} pointer_reference { id: 0x34334e6d kind: POINTER @@ -25728,6 +25938,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0xf94439ee } +pointer_reference { + id: 0x34c5f150 + kind: POINTER + pointee_type_id: 0xf95723df +} pointer_reference { id: 0x34c92288 kind: POINTER @@ -25908,6 +26123,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0xfe227c33 } +pointer_reference { + id: 0x351c0ee4 + kind: POINTER + pointee_type_id: 0xfe30dd0e +} pointer_reference { id: 0x351ca0f0 kind: POINTER @@ -26328,6 +26548,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0xfdc42b0e } +pointer_reference { + id: 0x35e1bdb7 + kind: POINTER + pointee_type_id: 0xfdc61042 +} pointer_reference { id: 0x35e708c2 kind: POINTER @@ -27213,6 +27438,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0xf419f1fe } +pointer_reference { + id: 0x3799b32f + kind: POINTER + pointee_type_id: 0xf4262a21 +} pointer_reference { id: 0x379acd09 kind: POINTER @@ -27243,6 +27473,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0xf4e28fb7 } +pointer_reference { + id: 0x37b47468 + kind: POINTER + pointee_type_id: 0xf491373d +} pointer_reference { id: 0x37b4f743 kind: POINTER @@ -27263,6 +27498,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0xf543e34b } +pointer_reference { + id: 0x37c27971 + kind: POINTER + pointee_type_id: 0xf5490358 +} pointer_reference { id: 0x37c32df2 kind: POINTER @@ -27318,6 +27558,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0xf52b12b6 } +pointer_reference { + id: 0x37dc7251 + kind: POINTER + pointee_type_id: 0xf5312fdb +} pointer_reference { id: 0x37dd86d6 kind: POINTER @@ -27368,6 +27613,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0xf5f7a771 } +pointer_reference { + id: 0x37ef0e97 + kind: POINTER + pointee_type_id: 0xf5fcdcc2 +} pointer_reference { id: 0x37f227e9 kind: POINTER @@ -27468,6 +27718,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0xca7029d8 } +pointer_reference { + id: 0x381020ff + kind: POINTER + pointee_type_id: 0xca006561 +} pointer_reference { id: 0x3812c788 kind: POINTER @@ -27633,11 +27888,21 @@ pointer_reference { kind: POINTER pointee_type_id: 0xcbc3299e } +pointer_reference { + id: 0x3861082a + kind: POINTER + pointee_type_id: 0xcbc4c636 +} pointer_reference { id: 0x3861403d kind: POINTER pointee_type_id: 0xcbc5e66b } +pointer_reference { + id: 0x3863a91c + kind: POINTER + pointee_type_id: 0xcbce42ed +} pointer_reference { id: 0x38680569 kind: POINTER @@ -28033,6 +28298,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0xce9dd989 } +pointer_reference { + id: 0x393f044a + kind: POINTER + pointee_type_id: 0xcebcf7b7 +} pointer_reference { id: 0x3944cc8a kind: POINTER @@ -28443,6 +28713,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0xc344f897 } +pointer_reference { + id: 0x3a413768 + kind: POINTER + pointee_type_id: 0xc3443b3c +} pointer_reference { id: 0x3a42306c kind: POINTER @@ -28643,6 +28918,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0xc09d4dab } +pointer_reference { + id: 0x3ab8abe5 + kind: POINTER + pointee_type_id: 0xc0a24909 +} pointer_reference { id: 0x3aba8aa9 kind: POINTER @@ -28728,6 +29008,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0xc18f1240 } +pointer_reference { + id: 0x3af48668 + kind: POINTER + pointee_type_id: 0xc192ff3f +} pointer_reference { id: 0x3aff5796 kind: POINTER @@ -29398,6 +29683,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0xdb0cb193 } +pointer_reference { + id: 0x3c534f6c + kind: POINTER + pointee_type_id: 0xdb0ddb2f +} pointer_reference { id: 0x3c5396d4 kind: POINTER @@ -29513,6 +29803,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0xd865d5b5 } +pointer_reference { + id: 0x3c89d7ea + kind: POINTER + pointee_type_id: 0xd867b934 +} pointer_reference { id: 0x3c8cb790 kind: POINTER @@ -29768,6 +30063,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0xdf713fb7 } +pointer_reference { + id: 0x3d512162 + kind: POINTER + pointee_type_id: 0xdf046314 +} pointer_reference { id: 0x3d5133eb kind: POINTER @@ -30178,6 +30478,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0xdda3059a } +pointer_reference { + id: 0x3df9bbb6 + kind: POINTER + pointee_type_id: 0xdda60846 +} pointer_reference { id: 0x3dfac2ad kind: POINTER @@ -30298,6 +30603,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0xd2f770f8 } +pointer_reference { + id: 0x3e2f17bb + kind: POINTER + pointee_type_id: 0xd2fcb870 +} pointer_reference { id: 0x3e2fe44b kind: POINTER @@ -30668,6 +30978,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0xd1a6fed8 } +pointer_reference { + id: 0x3f015031 + kind: POINTER + pointee_type_id: 0xd645a65a +} pointer_reference { id: 0x3f0185ef kind: POINTER @@ -31003,11 +31318,21 @@ pointer_reference { kind: POINTER pointee_type_id: 0xd5fadd76 } +pointer_reference { + id: 0x3ff6cc61 + kind: POINTER + pointee_type_id: 0xd59bd71b +} pointer_reference { id: 0x3ffd24b9 kind: POINTER pointee_type_id: 0xd5b4747a } +typedef { + id: 0xa2036a7c + name: "BYTE" + referred_type_id: 0x43e910ce +} typedef { id: 0x84ef9574 name: "Byte" @@ -31038,6 +31363,331 @@ typedef { name: "Elf64_Xword" referred_type_id: 0xedf277ba } +typedef { + id: 0x018a788e + name: "FSE_CTable" + referred_type_id: 0x4585663f +} +typedef { + id: 0x8ef3720c + name: "FSE_repeat" + referred_type_id: 0x65ab978c +} +typedef { + id: 0x839083cc + name: "HUF_CElt" + referred_type_id: 0xf435685e +} +typedef { + id: 0x5f54ae52 + name: "HUF_DTable" + referred_type_id: 0xe03de1c1 +} +typedef { + id: 0x19c445fa + name: "HUF_repeat" + referred_type_id: 0x668736f3 +} +typedef { + id: 0x9362c2f7 + name: "SeqCollector" + referred_type_id: 0x35d6b2a8 +} +typedef { + id: 0xd867b934 + name: "U16" + referred_type_id: 0xb3a3e4db +} +typedef { + id: 0xe03de1c1 + name: "U32" + referred_type_id: 0x1c3dbe5a +} +typedef { + id: 0x7ba71cda + name: "U64" + referred_type_id: 0x1c898f28 +} +typedef { + id: 0x91c5a92d + name: "ZSTD_CCtx" + referred_type_id: 0xf44d0c06 +} +typedef { + id: 0xfaf67466 + name: "ZSTD_CCtx_params" + referred_type_id: 0xe4508c71 +} +typedef { + id: 0xca006561 + name: "ZSTD_CDict" + referred_type_id: 0x7050ea6c +} +typedef { + id: 0xd36c0f70 + name: "ZSTD_DCtx" + referred_type_id: 0xfccfd3da +} +typedef { + id: 0xdf046314 + name: "ZSTD_DDict" + referred_type_id: 0x4a086f19 +} +typedef { + id: 0x7670cea2 + name: "ZSTD_DDictHashSet" + referred_type_id: 0x3b9fe3c1 +} +typedef { + id: 0x52f83184 + name: "ZSTD_OptPrice_e" + referred_type_id: 0x7e4fc4f5 +} +typedef { + id: 0xf95723df + name: "ZSTD_Sequence" + referred_type_id: 0x3ea49399 +} +typedef { + id: 0x07e68113 + name: "ZSTD_allocFunction" + referred_type_id: 0x1e4a76e0 +} +typedef { + id: 0xc880072e + name: "ZSTD_blockSplitCtx" + referred_type_id: 0x286ef23f +} +typedef { + id: 0x5679afad + name: "ZSTD_blockState_t" + referred_type_id: 0x2b2f5cc5 +} +typedef { + id: 0x02135bb7 + name: "ZSTD_bufferMode_e" + referred_type_id: 0x68dd9da2 +} +typedef { + id: 0x7503b1a7 + name: "ZSTD_buffered_policy_e" + referred_type_id: 0x639d7597 +} +typedef { + id: 0xc5d40180 + name: "ZSTD_cStreamStage" + referred_type_id: 0x5a65e5f7 +} +typedef { + id: 0x04dd00a1 + name: "ZSTD_compressedBlockState_t" + referred_type_id: 0x23442f91 +} +typedef { + id: 0xeeb6e146 + name: "ZSTD_compressionParameters" + referred_type_id: 0x068dfa4d +} +typedef { + id: 0x1e7da911 + name: "ZSTD_compressionStage_e" + referred_type_id: 0x75b4b3e3 +} +typedef { + id: 0x57313a72 + name: "ZSTD_customMem" + referred_type_id: 0x04a45409 +} +typedef { + id: 0xf11ce43a + name: "ZSTD_cwksp" + referred_type_id: 0x2914b97f +} +typedef { + id: 0x7f751148 + name: "ZSTD_cwksp_alloc_phase_e" + referred_type_id: 0x5e397b32 +} +typedef { + id: 0x1f9df97f + name: "ZSTD_cwksp_static_alloc_e" + referred_type_id: 0x654bc149 +} +typedef { + id: 0x7b93905f + name: "ZSTD_dStage" + referred_type_id: 0x56f8b6c6 +} +typedef { + id: 0x586204f1 + name: "ZSTD_dStreamStage" + referred_type_id: 0x537bda40 +} +typedef { + id: 0xaba86b6c + name: "ZSTD_dictAttachPref_e" + referred_type_id: 0x6c283893 +} +typedef { + id: 0xee71dc12 + name: "ZSTD_dictContentType_e" + referred_type_id: 0x4bee8f0c +} +typedef { + id: 0xea9852f4 + name: "ZSTD_dictUses_e" + referred_type_id: 0x7087a20e +} +typedef { + id: 0x7d8a60f2 + name: "ZSTD_entropyCTablesMetadata_t" + referred_type_id: 0x013ffd42 +} +typedef { + id: 0xf2e1f826 + name: "ZSTD_entropyCTables_t" + referred_type_id: 0x23d5fe5b +} +typedef { + id: 0x6e25ba6b + name: "ZSTD_entropyDTables_t" + referred_type_id: 0x3bac696f +} +typedef { + id: 0x4bfba8f6 + name: "ZSTD_forceIgnoreChecksum_e" + referred_type_id: 0x4ab18d85 +} +typedef { + id: 0x567db47c + name: "ZSTD_format_e" + referred_type_id: 0x4bc1ebe4 +} +typedef { + id: 0xcbedab99 + name: "ZSTD_frameHeader" + referred_type_id: 0x0fa12bbc +} +typedef { + id: 0x6b30d6d2 + name: "ZSTD_frameParameters" + referred_type_id: 0x16bccc8b +} +typedef { + id: 0xea9664dd + name: "ZSTD_frameType_e" + referred_type_id: 0x7180fcef +} +typedef { + id: 0x6662bc09 + name: "ZSTD_freeFunction" + referred_type_id: 0x0f2546f5 +} +typedef { + id: 0xd867ba9e + name: "ZSTD_fseCTablesMetadata_t" + referred_type_id: 0x2d556433 +} +typedef { + id: 0xa87681c2 + name: "ZSTD_fseCTables_t" + referred_type_id: 0x0f81c877 +} +typedef { + id: 0xeef6673d + name: "ZSTD_hufCTablesMetadata_t" + referred_type_id: 0x286453e8 +} +typedef { + id: 0x93f687e3 + name: "ZSTD_hufCTables_t" + referred_type_id: 0x0d816424 +} +typedef { + id: 0x9a08bd99 + name: "ZSTD_inBuffer" + referred_type_id: 0xd7309b2f +} +typedef { + id: 0xe33a2cf1 + name: "ZSTD_litLocation_e" + referred_type_id: 0x520b4b38 +} +typedef { + id: 0xc2c58cfe + name: "ZSTD_localDict" + referred_type_id: 0x04f29774 +} +typedef { + id: 0x7f6cf1f8 + name: "ZSTD_longLengthType_e" + referred_type_id: 0x671d33fa +} +typedef { + id: 0x1c70da37 + name: "ZSTD_matchState_t" + referred_type_id: 0x03877e6b +} +typedef { + id: 0x237bb03f + name: "ZSTD_match_t" + referred_type_id: 0x3a8f3cdf +} +typedef { + id: 0xfe30dd0e + name: "ZSTD_optimal_t" + referred_type_id: 0x28527001 +} +typedef { + id: 0x460a983e + name: "ZSTD_outBuffer" + referred_type_id: 0x7fd1d386 +} +typedef { + id: 0xedf771b8 + name: "ZSTD_paramSwitch_e" + referred_type_id: 0x4244a103 +} +typedef { + id: 0xc17a1042 + name: "ZSTD_parameters" + referred_type_id: 0x130c2f2d +} +typedef { + id: 0x0365de47 + name: "ZSTD_prefixDict" + referred_type_id: 0xe5689103 +} +typedef { + id: 0x152f6b10 + name: "ZSTD_refMultipleDDicts_e" + referred_type_id: 0x6fb44aa8 +} +typedef { + id: 0x9b8b3cb9 + name: "ZSTD_seqSymbol" + referred_type_id: 0x00696898 +} +typedef { + id: 0xe8b716c1 + name: "ZSTD_sequenceFormat_e" + referred_type_id: 0x552bf5f8 +} +typedef { + id: 0x4fd7c5a2 + name: "ZSTD_strategy" + referred_type_id: 0x7485fe2c +} +typedef { + id: 0xc3443b3c + name: "ZSTD_threadPool" + referred_type_id: 0x0325d3e5 +} +typedef { + id: 0x983802c3 + name: "ZSTD_window_t" + referred_type_id: 0x3c449d3f +} typedef { id: 0xaaee57c0 name: "__addrpair" @@ -31403,6 +32053,11 @@ typedef { name: "blk_opf_t" referred_type_id: 0xe62ebf07 } +typedef { + id: 0x1684c624 + name: "blk_plug_cb_fn" + referred_type_id: 0x0c5168e8 +} typedef { id: 0x3cc4e4dd name: "blk_qc_t" @@ -31468,6 +32123,11 @@ typedef { name: "blkcnt_t" referred_type_id: 0x92233392 } +typedef { + id: 0xb24ef977 + name: "blockType_e" + referred_type_id: 0x666f0f1c +} typedef { id: 0x6d7f5ff6 name: "bool" @@ -32233,6 +32893,26 @@ typedef { name: "kuid_t" referred_type_id: 0x0b817a1b } +typedef { + id: 0xa2e64262 + name: "kunit_action_t" + referred_type_id: 0x16b708df +} +typedef { + id: 0x84ba5f13 + name: "kunit_resource_free_t" + referred_type_id: 0x0db9de68 +} +typedef { + id: 0x791c4097 + name: "kunit_resource_init_t" + referred_type_id: 0x2ee74fa2 +} +typedef { + id: 0x615717a0 + name: "kunit_resource_match_t" + referred_type_id: 0x3799b32f +} typedef { id: 0xd9ed81e9 name: "kunit_try_catch_func_t" @@ -32263,6 +32943,26 @@ typedef { name: "kvm_pteref_t" referred_type_id: 0x11281698 } +typedef { + id: 0xd2fcb870 + name: "ldmEntry_t" + referred_type_id: 0x3e99d26f +} +typedef { + id: 0xa7346686 + name: "ldmMatchCandidate_t" + referred_type_id: 0x086f0af0 +} +typedef { + id: 0x3a035222 + name: "ldmParams_t" + referred_type_id: 0x3edccedf +} +typedef { + id: 0x456f6a31 + name: "ldmState_t" + referred_type_id: 0x1c64cc7b +} typedef { id: 0x87d0a514 name: "list_cmp_func_t" @@ -32423,6 +33123,11 @@ typedef { name: "old_time32_t" referred_type_id: 0xd41e888f } +typedef { + id: 0x1e7e42f3 + name: "optState_t" + referred_type_id: 0x22fb3d9c +} typedef { id: 0x58545d97 name: "p4d_t" @@ -32478,6 +33183,11 @@ typedef { name: "pfn_t" referred_type_id: 0x0b8d77a1 } +typedef { + id: 0x28ef3c91 + name: "pg_data_t" + referred_type_id: 0x264eeece +} typedef { id: 0xaf12ea2c name: "pgd_t" @@ -32618,6 +33328,16 @@ typedef { name: "qsize_t" referred_type_id: 0x39470e64 } +typedef { + id: 0x0fd40ba2 + name: "rawSeq" + referred_type_id: 0x3e8dd4eb +} +typedef { + id: 0xa563bbea + name: "rawSeqStore_t" + referred_type_id: 0x26e08250 +} typedef { id: 0x9e4d5bdd name: "raw_hdlc_proto" @@ -32853,6 +33573,16 @@ typedef { name: "sector_t" referred_type_id: 0x92233392 } +typedef { + id: 0x657d3daf + name: "seqDef" + referred_type_id: 0x297dc0e5 +} +typedef { + id: 0xd04212d3 + name: "seqStore_t" + referred_type_id: 0x267ad445 +} typedef { id: 0xb55a3dee name: "seqcount_raw_spinlock_t" @@ -33063,6 +33793,11 @@ typedef { name: "swp_entry_t" referred_type_id: 0x0ba52234 } +typedef { + id: 0x6cb740e3 + name: "symbolEncodingType_e" + referred_type_id: 0x464f7249 +} typedef { id: 0x3839574b name: "sync_serial_settings" @@ -33433,6 +34168,26 @@ typedef { name: "z_streamp" referred_type_id: 0x3aac87ab } +typedef { + id: 0x8061720d + name: "zstd_cctx" + referred_type_id: 0x91c5a92d +} +typedef { + id: 0x760c4a75 + name: "zstd_compression_parameters" + referred_type_id: 0xeeb6e146 +} +typedef { + id: 0xb12e6800 + name: "zstd_dctx" + referred_type_id: 0xd36c0f70 +} +typedef { + id: 0xa7b4c582 + name: "zstd_parameters" + referred_type_id: 0xc17a1042 +} qualified { id: 0x837627e4 qualifier: VOLATILE @@ -33488,6 +34243,11 @@ qualified { qualifier: CONST qualified_type_id: 0x7203d36f } +qualified { + id: 0xc0a24909 + qualifier: CONST + qualified_type_id: 0x72ce92ac +} qualified { id: 0xc0aacc3a qualifier: CONST @@ -33518,6 +34278,11 @@ qualified { qualifier: CONST qualified_type_id: 0x7670fa09 } +qualified { + id: 0xc192ff3f + qualifier: CONST + qualified_type_id: 0x760c4a75 +} qualified { id: 0xc1bdb8c5 qualifier: CONST @@ -33928,6 +34693,11 @@ qualified { qualifier: CONST qualified_type_id: 0x53a55dfd } +qualified { + id: 0xc9099682 + qualifier: CONST + qualified_type_id: 0x5461ec82 +} qualified { id: 0xc93afee2 qualifier: CONST @@ -34103,6 +34873,11 @@ qualified { qualifier: CONST qualified_type_id: 0x5e857614 } +qualified { + id: 0xcbc4c636 + qualifier: CONST + qualified_type_id: 0x5f54ae52 +} qualified { id: 0xcbc5e66b qualifier: CONST @@ -34693,6 +35468,11 @@ qualified { qualifier: CONST qualified_type_id: 0x25232774 } +qualified { + id: 0xd59bd71b + qualifier: CONST + qualified_type_id: 0x2628eae6 +} qualified { id: 0xd5b4747a qualifier: CONST @@ -34758,6 +35538,11 @@ qualified { qualifier: CONST qualified_type_id: 0x2ba676fa } +qualified { + id: 0xd700b6f9 + qualifier: CONST + qualified_type_id: 0x2c456d6d +} qualified { id: 0xd7024b8e qualifier: CONST @@ -34988,6 +35773,11 @@ qualified { qualifier: CONST qualified_type_id: 0x1c7570c6 } +qualified { + id: 0xdb0ddb2f + qualifier: CONST + qualified_type_id: 0x1c70da37 +} qualified { id: 0xdb0f5d6b qualifier: CONST @@ -35193,6 +35983,11 @@ qualified { qualifier: CONST qualified_type_id: 0x063a1f8b } +qualified { + id: 0xdda60846 + qualifier: CONST + qualified_type_id: 0x06df9791 +} qualified { id: 0xddcf6bc2 qualifier: CONST @@ -35363,6 +36158,11 @@ qualified { qualifier: CONST qualified_type_id: 0xf2109de8 } +qualified { + id: 0xe0a993ab + qualifier: CONST + qualified_type_id: 0xf2e1f826 +} qualified { id: 0xe0b568e1 qualifier: CONST @@ -35998,6 +36798,11 @@ qualified { qualifier: CONST qualified_type_id: 0xdf713fb7 } +qualified { + id: 0xebd0f567 + qualifier: CONST + qualified_type_id: 0xdf046314 +} qualified { id: 0xebd3035e qualifier: CONST @@ -36188,6 +36993,11 @@ qualified { qualifier: CONST qualified_type_id: 0xc9a82d21 } +qualified { + id: 0xee91f4fa + qualifier: CONST + qualified_type_id: 0xca006561 +} qualified { id: 0xee9ee560 qualifier: CONST @@ -36443,6 +37253,11 @@ qualified { qualifier: CONST qualified_type_id: 0xa19fd9aa } +qualified { + id: 0xf491373d + qualifier: CONST + qualified_type_id: 0xa2036a7c +} qualified { id: 0xf4a306a1 qualifier: CONST @@ -36478,6 +37293,11 @@ qualified { qualifier: CONST qualified_type_id: 0xa4ebfc51 } +qualified { + id: 0xf5490358 + qualifier: CONST + qualified_type_id: 0xa563bbea +} qualified { id: 0xf54c5154 qualifier: CONST @@ -36548,6 +37368,11 @@ qualified { qualifier: CONST qualified_type_id: 0xa7992b4c } +qualified { + id: 0xf5fcdcc2 + qualifier: CONST + qualified_type_id: 0xa7b4c582 +} qualified { id: 0xf60e3859 qualifier: CONST @@ -36828,6 +37653,11 @@ qualified { qualifier: CONST qualified_type_id: 0x9b1c2c87 } +qualified { + id: 0xfaf3228c + qualifier: CONST + qualified_type_id: 0x9b8b3cb9 +} qualified { id: 0xfb0e7776 qualifier: CONST @@ -37236,6 +38066,11 @@ array { number_of_elements: 56 element_type_id: 0x384f7d7c } +array { + id: 0x01b2208d + number_of_elements: 65568 + element_type_id: 0xa2036a7c +} array { id: 0x01e90d51 number_of_elements: 64 @@ -37286,6 +38121,11 @@ array { number_of_elements: 64 element_type_id: 0xd87f78a5 } +array { + id: 0x066e6455 + number_of_elements: 128 + element_type_id: 0xa2036a7c +} array { id: 0x06ed5af3 number_of_elements: 3 @@ -37356,6 +38196,11 @@ array { number_of_elements: 20 element_type_id: 0x6720d32f } +array { + id: 0x0ea65d80 + number_of_elements: 64 + element_type_id: 0xf435685e +} array { id: 0x0f3cf07d number_of_elements: 3 @@ -37511,6 +38356,11 @@ array { number_of_elements: 3 element_type_id: 0x2208f89a } +array { + id: 0x1a661e36 + number_of_elements: 64 + element_type_id: 0xa7346686 +} array { id: 0x1a801a17 number_of_elements: 29 @@ -37716,6 +38566,11 @@ array { number_of_elements: 128 element_type_id: 0x11c404ba } +array { + id: 0x2aca8d44 + number_of_elements: 3 + element_type_id: 0xe03de1c1 +} array { id: 0x2b4e5af5 number_of_elements: 3 @@ -37826,6 +38681,11 @@ array { number_of_elements: 3 element_type_id: 0x92233392 } +array { + id: 0x36be520c + number_of_elements: 18 + element_type_id: 0xa2036a7c +} array { id: 0x37470e8a number_of_elements: 30 @@ -37891,11 +38751,21 @@ array { number_of_elements: 3 element_type_id: 0xb914bfab } +array { + id: 0x3dadfdcd + number_of_elements: 196 + element_type_id: 0xe03de1c1 +} array { id: 0x3db8d8c8 number_of_elements: 64 element_type_id: 0x384f7d7c } +array { + id: 0x3dc0bcf8 + number_of_elements: 329 + element_type_id: 0x018a788e +} array { id: 0x3dfac40e number_of_elements: 64 @@ -37931,6 +38801,11 @@ array { number_of_elements: 128 element_type_id: 0x4585663f } +array { + id: 0x3fe0f5e5 + number_of_elements: 193 + element_type_id: 0x018a788e +} array { id: 0x4050ae51 number_of_elements: 2 @@ -38276,6 +39151,11 @@ array { number_of_elements: 32 element_type_id: 0x1a216aaf } +array { + id: 0x5290c18b + number_of_elements: 257 + element_type_id: 0x839083cc +} array { id: 0x52f90395 number_of_elements: 2 @@ -38311,6 +39191,11 @@ array { number_of_elements: 2 element_type_id: 0xe276adef } +array { + id: 0x54962e56 + number_of_elements: 257 + element_type_id: 0x9b8b3cb9 +} array { id: 0x54a3a89f number_of_elements: 32 @@ -38361,6 +39246,11 @@ array { number_of_elements: 2 element_type_id: 0xe8034002 } +array { + id: 0x575de213 + number_of_elements: 363 + element_type_id: 0x018a788e +} array { id: 0x576c156c number_of_elements: 16 @@ -39201,6 +40091,16 @@ array { number_of_elements: 4 element_type_id: 0x1a8b45a0 } +array { + id: 0x8b22066c + number_of_elements: 31 + element_type_id: 0x1c8d675d +} +array { + id: 0x8b6f70d0 + number_of_elements: 4 + element_type_id: 0x1c898f28 +} array { id: 0x8bda1c0f number_of_elements: 6 @@ -39246,11 +40146,21 @@ array { number_of_elements: 4 element_type_id: 0x04fd619c } +array { + id: 0x8d8091e6 + number_of_elements: 640 + element_type_id: 0xe03de1c1 +} array { id: 0x8dcc9654 number_of_elements: 4 element_type_id: 0x0606153b } +array { + id: 0x8e2cfab5 + number_of_elements: 4097 + element_type_id: 0x5f54ae52 +} array { id: 0x8e7b8b93 number_of_elements: 4096 @@ -39471,6 +40381,11 @@ array { number_of_elements: 4 element_type_id: 0xb02b353a } +array { + id: 0xa09c4479 + number_of_elements: 133 + element_type_id: 0xa2036a7c +} array { id: 0xa0b4fda8 number_of_elements: 4 @@ -39776,6 +40691,11 @@ array { number_of_elements: 6 element_type_id: 0x60ca2c23 } +array { + id: 0xb9bf4900 + number_of_elements: 157 + element_type_id: 0xe03de1c1 +} array { id: 0xb9c7723b number_of_elements: 4 @@ -40285,6 +41205,16 @@ array { id: 0xdc2b0406 element_type_id: 0x604a2bda } +array { + id: 0xdc31f062 + number_of_elements: 8 + element_type_id: 0xe03de1c1 +} +array { + id: 0xdcaa8f50 + number_of_elements: 513 + element_type_id: 0x9b8b3cb9 +} array { id: 0xdd0e2ef7 number_of_elements: 5 @@ -40920,6 +41850,10 @@ member { id: 0x23e47945 type_id: 0x00bf9506 } +member { + id: 0x23e7eda8 + type_id: 0x00b1c6b3 +} member { id: 0x23eda52b type_id: 0x0098e4bc @@ -41271,6 +42205,10 @@ member { id: 0x2d71506c type_id: 0x3aeb31a3 } +member { + id: 0x2d8fb06b + type_id: 0x3910b1bc +} member { id: 0x2d9a297e type_id: 0x3946d5eb @@ -41324,6 +42262,10 @@ member { id: 0x2ef635de type_id: 0x34f6a768 } +member { + id: 0x2f1819a7 + type_id: 0x334e168e +} member { id: 0x2f71fc30 type_id: 0x32e980d1 @@ -41384,6 +42326,11 @@ member { type_id: 0x4fff3cac offset: 96 } +member { + id: 0x3036aec8 + type_id: 0x4ff4d296 + offset: 3584 +} member { id: 0x303da1de type_id: 0x4fd8e877 @@ -41591,6 +42538,11 @@ member { id: 0x32814327 type_id: 0x452b7c8e } +member { + id: 0x3293400e + type_id: 0x45635409 + offset: 3520 +} member { id: 0x32a3f754 type_id: 0x45a18b4d @@ -41948,6 +42900,11 @@ member { id: 0x34a127e7 type_id: 0x5daaef8e } +member { + id: 0x34a2a2dc + type_id: 0x5da4f9cd + offset: 256 +} member { id: 0x34a3e933 type_id: 0x5da1f3d6 @@ -43090,6 +44047,11 @@ member { type_id: 0x6720d32f offset: 576 } +member { + id: 0x57f6e5ec + name: "CTable" + type_id: 0x5290c18b +} member { id: 0xa49bcaed name: "CarrierSenseErrors" @@ -43162,6 +44124,12 @@ member { type_id: 0x92233392 offset: 1024 } +member { + id: 0x6c3e5929 + name: "HUFptr" + type_id: 0x3861082a + offset: 192 +} member { id: 0xc31a401f name: "InOctetsDecrypted" @@ -43292,6 +44260,16 @@ member { type_id: 0x92233392 offset: 1216 } +member { + id: 0x8ffa6faf + name: "LLTable" + type_id: 0xdcaa8f50 +} +member { + id: 0xb4394e6d + name: "LLTptr" + type_id: 0x342cf104 +} member { id: 0x029c2afc name: "LateCollisions" @@ -43344,6 +44322,18 @@ member { type_id: 0x92233392 offset: 320 } +member { + id: 0x7c3b62f2 + name: "MLTable" + type_id: 0xdcaa8f50 + offset: 49280 +} +member { + id: 0x501e3f82 + name: "MLTptr" + type_id: 0x342cf104 + offset: 64 +} member { id: 0x0784653e name: "MaxPower" @@ -43368,6 +44358,18 @@ member { type_id: 0x92233392 offset: 128 } +member { + id: 0xfaa589d9 + name: "OFTable" + type_id: 0x54962e56 + offset: 32832 +} +member { + id: 0xae5bb8e4 + name: "OFTptr" + type_id: 0x342cf104 + offset: 128 +} member { id: 0xfabdd592 name: "OctetsReceivedOK" @@ -47321,6 +48323,12 @@ member { name: "advertising" type_id: 0x607419c2 } +member { + id: 0x9f16e345 + name: "advertising" + type_id: 0x6720d32f + offset: 32 +} member { id: 0x69f9ba62 name: "advertising_eee" @@ -47932,6 +48940,12 @@ member { type_id: 0x33756485 offset: 320 } +member { + id: 0x45ecb8fc + name: "alloc" + type_id: 0x000a9d21 + offset: 1600 +} member { id: 0x45f145e7 name: "alloc" @@ -47949,6 +48963,18 @@ member { type_id: 0x1fe7f40f offset: 64 } +member { + id: 0x43b81a7a + name: "allocFailed" + type_id: 0xa2036a7c + offset: 384 +} +member { + id: 0xf545c70b + name: "allocStart" + type_id: 0x18bd6530 + offset: 320 +} member { id: 0x21677719 name: "alloc_contig" @@ -47961,6 +48987,11 @@ member { type_id: 0x914dbfdc offset: 48 } +member { + id: 0xe88a78ff + name: "alloc_ctx" + type_id: 0x1f602b00 +} member { id: 0xfd639076 name: "alloc_desc_sz" @@ -50240,6 +51271,11 @@ member { type_id: 0x92233392 offset: 2560 } +member { + id: 0xac894956 + name: "android_kabi_reserved3" + type_id: 0x92233392 +} member { id: 0xac894975 name: "android_kabi_reserved3" @@ -51504,6 +52540,12 @@ member { type_id: 0x4585663f offset: 448 } +member { + id: 0xa29f8db8 + name: "appliedParams" + type_id: 0xfaf67466 + offset: 1536 +} member { id: 0x8e5f864b name: "apply" @@ -52927,6 +53969,12 @@ member { name: "attach" type_id: 0x0f3d78fb } +member { + id: 0x4f8c8b1f + name: "attachDictPref" + type_id: 0xaba86b6c + offset: 544 +} member { id: 0x2aea5254 name: "attach_bpf_fd" @@ -53268,6 +54316,11 @@ member { type_id: 0x19ce8000 offset: 640 } +member { + id: 0x2ae4a5b7 + name: "attr_set" + type_id: 0xb94739b9 +} member { id: 0xef73e87f name: "attr_update" @@ -54459,6 +55512,12 @@ member { type_id: 0xb3e7bac9 offset: 64 } +member { + id: 0x3d2adc24 + name: "bType" + type_id: 0xb24ef977 + offset: 239872 +} member { id: 0x4cea40ec name: "bU1devExitLat" @@ -55079,6 +56138,11 @@ member { name: "base" type_id: 0x3b0d08ae } +member { + id: 0x85e2db57 + name: "base" + type_id: 0x3835dcc0 +} member { id: 0x85e99dbc name: "base" @@ -55090,6 +56154,12 @@ member { name: "base" type_id: 0x36493e7d } +member { + id: 0x85ed5e1e + name: "base" + type_id: 0x37b47468 + offset: 64 +} member { id: 0x85f3d17c name: "base" @@ -55102,6 +56172,11 @@ member { type_id: 0x293b162f offset: 256 } +member { + id: 0x85f3d59d + name: "base" + type_id: 0x293b162f +} member { id: 0x85f3de85 name: "base" @@ -55123,6 +56198,12 @@ member { name: "base" type_id: 0x271bd1e1 } +member { + id: 0x1bc44f4f + name: "baseValue" + type_id: 0xe03de1c1 + offset: 32 +} member { id: 0xf93eb8d5 name: "base_addr" @@ -56986,6 +58067,36 @@ member { name: "block" type_id: 0xc9082b19 } +member { + id: 0x52000926 + name: "blockDelimiters" + type_id: 0xe8b716c1 + offset: 1056 +} +member { + id: 0xbdcf6c62 + name: "blockSize" + type_id: 0xf435685e + offset: 4992 +} +member { + id: 0xf0ca1475 + name: "blockSizeMax" + type_id: 0x4585663f + offset: 128 +} +member { + id: 0x9baa09ed + name: "blockSplitCtx" + type_id: 0xc880072e + offset: 28480 +} +member { + id: 0xc7623cc5 + name: "blockState" + type_id: 0x5679afad + offset: 24512 +} member { id: 0x921eb8de name: "block_attributes" @@ -57284,6 +58395,12 @@ member { name: "bmap" type_id: 0x064d6086 } +member { + id: 0x7cf0bb43 + name: "bmi2" + type_id: 0x6720d32f + offset: 64 +} member { id: 0x1a5538db name: "bmp" @@ -58340,12 +59457,30 @@ member { type_id: 0x0258f96e offset: 8128 } +member { + id: 0xc0d83387 + name: "bucket" + type_id: 0x3e2f17bb + offset: 128 +} member { id: 0xc0fef600 name: "bucket" type_id: 0x18e7b37e offset: 64 } +member { + id: 0x5059408a + name: "bucketOffsets" + type_id: 0x2210e338 + offset: 448 +} +member { + id: 0xdaea1090 + name: "bucketSizeLog" + type_id: 0xe03de1c1 + offset: 64 +} member { id: 0x2180a015 name: "bucket_id" @@ -58904,6 +60039,12 @@ member { type_id: 0x6d7f5ff6 offset: 7144 } +member { + id: 0xec9ac921 + name: "bufferedPolicy" + type_id: 0x7503b1a7 + offset: 26944 +} member { id: 0xb6a70840 name: "bufferram" @@ -60162,6 +61303,29 @@ member { type_id: 0x89717197 offset: 8416 } +member { + id: 0x2deaf434 + name: "cParams" + type_id: 0xeeb6e146 +} +member { + id: 0x2deaf5ea + name: "cParams" + type_id: 0xeeb6e146 + offset: 1920 +} +member { + id: 0x2deaf90f + name: "cParams" + type_id: 0xeeb6e146 + offset: 32 +} +member { + id: 0xb63fc6f0 + name: "cParamsChanged" + type_id: 0x6720d32f + offset: 32 +} member { id: 0xe03ef75b name: "c_cc" @@ -60716,6 +61880,11 @@ member { type_id: 0x39470e64 offset: 1088 } +member { + id: 0xf7205a4d + name: "calg" + type_id: 0x68c4dafa +} member { id: 0xf74d75aa name: "calg" @@ -60812,6 +61981,12 @@ member { name: "callback" type_id: 0x0ed1d747 } +member { + id: 0x56f376f1 + name: "callback" + type_id: 0x1684c624 + offset: 128 +} member { id: 0x3b021d6c name: "callback_data" @@ -61217,6 +62392,12 @@ member { type_id: 0x92233392 offset: 448 } +member { + id: 0x8fa8cc5b + name: "cancelling" + type_id: 0x6720d32f + offset: 448 +} member { id: 0xe33acf96 name: "cant_recv_wakeups" @@ -61555,6 +62736,12 @@ member { type_id: 0xd0b3a203 offset: 9024 } +member { + id: 0xa7eab976 + name: "capacity" + type_id: 0xf435685e + offset: 256 +} member { id: 0xa7f37e69 name: "capacity" @@ -62197,6 +63384,18 @@ member { type_id: 0x0dc35132 offset: 64 } +member { + id: 0x34c2f79e + name: "cdict" + type_id: 0x381020ff + offset: 256 +} +member { + id: 0x34cbd8ad + name: "cdict" + type_id: 0x31344499 + offset: 28224 +} member { id: 0xc83a4c67 name: "cdl_enable" @@ -62713,6 +63912,18 @@ member { type_id: 0x1d0a537d offset: 1664 } +member { + id: 0x5ece371f + name: "chainLog" + type_id: 0x4585663f + offset: 32 +} +member { + id: 0x4bc073a3 + name: "chainTable" + type_id: 0x329f41d7 + offset: 896 +} member { id: 0x722c6700 name: "chain_index" @@ -63397,6 +64608,30 @@ member { type_id: 0x295c7202 offset: 1016 } +member { + id: 0x2abbf01c + name: "checksum" + type_id: 0xe03de1c1 + offset: 96 +} +member { + id: 0x2abbf4a4 + name: "checksum" + type_id: 0xe03de1c1 + offset: 32 +} +member { + id: 0x691ba5d3 + name: "checksumFlag" + type_id: 0x4585663f + offset: 256 +} +member { + id: 0x69390df6 + name: "checksumFlag" + type_id: 0x6720d32f + offset: 32 +} member { id: 0x85f5483d name: "chg_cur" @@ -66112,6 +67347,11 @@ member { type_id: 0x914dbfdc offset: 928 } +member { + id: 0xb6fda2c9 + name: "collectSequences" + type_id: 0x6720d32f +} member { id: 0x48c91cfd name: "collection" @@ -66549,6 +67789,12 @@ member { type_id: 0xd3c80119 offset: 640 } +member { + id: 0x6405c35b + name: "common" + type_id: 0x1adc1e47 + offset: 64 +} member { id: 0x6429e162 name: "common" @@ -67204,6 +68450,12 @@ member { type_id: 0x0baa70a7 offset: 864 } +member { + id: 0x796a0d2b + name: "compress" + type_id: 0x2d9ee704 + offset: 128 +} member { id: 0x799f58aa name: "compress" @@ -67251,6 +68503,12 @@ member { type_id: 0xe8034002 offset: 928 } +member { + id: 0x73c7d7ac + name: "compressionLevel" + type_id: 0x6720d32f + offset: 352 +} member { id: 0xd5a82d64 name: "compression_level" @@ -67455,6 +68713,12 @@ member { type_id: 0x2d883003 offset: 1728 } +member { + id: 0xba1fc391 + name: "config_generation" + type_id: 0xb3e7bac9 + offset: 168 +} member { id: 0xa02c1275 name: "config_init" @@ -68069,6 +69333,12 @@ member { type_id: 0xf435685e offset: 192 } +member { + id: 0xcce78d2f + name: "consumedSrcSize" + type_id: 0xd5df6730 + offset: 5120 +} member { id: 0x115d1b31 name: "consumer" @@ -68177,6 +69447,11 @@ member { type_id: 0xc93e017b offset: 192 } +member { + id: 0x3b2be20f + name: "contentSizeFlag" + type_id: 0x6720d32f +} member { id: 0xa368c7af name: "content_protection" @@ -69155,6 +70430,12 @@ member { name: "count" type_id: 0x92233392 } +member { + id: 0x65b77d65 + name: "count" + type_id: 0x92233392 + offset: 384 +} member { id: 0x65c3717b name: "count" @@ -71947,6 +73228,12 @@ member { type_id: 0x082be49e offset: 640 } +member { + id: 0x06716b72 + name: "currSeqStore" + type_id: 0xd04212d3 + offset: 1920 +} member { id: 0xe5b23071 name: "curr_clip" @@ -72155,6 +73442,35 @@ member { type_id: 0x6720d32f offset: 1344 } +member { + id: 0x73668a85 + name: "customAlloc" + type_id: 0x07e68113 +} +member { + id: 0x464628e3 + name: "customFree" + type_id: 0x6662bc09 + offset: 64 +} +member { + id: 0x4680267d + name: "customMem" + type_id: 0x57313a72 + offset: 1216 +} +member { + id: 0x46802880 + name: "customMem" + type_id: 0x57313a72 + offset: 240896 +} +member { + id: 0x46802999 + name: "customMem" + type_id: 0x57313a72 + offset: 5888 +} member { id: 0x91afab90 name: "custom_attr_group" @@ -74116,6 +75432,12 @@ member { type_id: 0x295c7202 offset: 112 } +member { + id: 0xef2014c6 + name: "dbs_data" + type_id: 0x3863a91c + offset: 1280 +} member { id: 0x6afdae54 name: "dbuf" @@ -74327,6 +75649,47 @@ member { type_id: 0x249959de offset: 19264 } +member { + id: 0x200f159f + name: "ddict" + type_id: 0x306404fe + offset: 241344 +} +member { + id: 0x4dae3f4b + name: "ddictIsCold" + type_id: 0x6720d32f + offset: 241440 +} +member { + id: 0x9f20773d + name: "ddictLocal" + type_id: 0x3d512162 + offset: 241280 +} +member { + id: 0x5f4c0297 + name: "ddictPtrCount" + type_id: 0xf435685e + offset: 128 +} +member { + id: 0x8fe1343f + name: "ddictPtrTable" + type_id: 0x06893898 +} +member { + id: 0x2ff71978 + name: "ddictPtrTableSize" + type_id: 0xf435685e + offset: 64 +} +member { + id: 0x1c2b70c8 + name: "ddictSet" + type_id: 0x170c0a0f + offset: 241536 +} member { id: 0x6ac8a1eb name: "deactivate" @@ -74968,6 +76331,18 @@ member { name: "decode_vbi_line" type_id: 0x2de44294 } +member { + id: 0x75f9c2dd + name: "decodedSize" + type_id: 0x7ba71cda + offset: 239808 +} +member { + id: 0x7543ba54 + name: "decompress" + type_id: 0x2d9ee704 + offset: 192 +} member { id: 0x70f86078 name: "decrypt" @@ -74980,6 +76355,12 @@ member { type_id: 0x2c316317 offset: 128 } +member { + id: 0xd14976e8 + name: "dedicatedDictSearch" + type_id: 0x6720d32f + offset: 992 +} member { id: 0xea1d0dbf name: "def" @@ -76986,6 +78367,12 @@ member { type_id: 0x2d620fe2 offset: 768 } +member { + id: 0x6b5e641b + name: "deterministicRefPrefix" + type_id: 0x6720d32f + offset: 1184 +} member { id: 0xce00a18a name: "dev" @@ -77108,6 +78495,12 @@ member { type_id: 0x32a623d7 offset: 960 } +member { + id: 0xce0b4ca0 + name: "dev" + type_id: 0x32a623d7 + offset: 192 +} member { id: 0xce0b4dab name: "dev" @@ -78192,6 +79585,12 @@ member { name: "device" type_id: 0x11c404ba } +member { + id: 0xea2a9c62 + name: "device" + type_id: 0x18bd6530 + offset: 128 +} member { id: 0xea2f40e7 name: "device" @@ -78375,6 +79774,17 @@ member { type_id: 0x6d7f5ff6 offset: 384 } +member { + id: 0xc47b3e49 + name: "device_feature" + type_id: 0x0baa70a7 + offset: 32 +} +member { + id: 0xd95da316 + name: "device_feature_select" + type_id: 0x0baa70a7 +} member { id: 0x17ccff09 name: "device_free" @@ -78422,6 +79832,12 @@ member { type_id: 0x6720d32f offset: 64 } +member { + id: 0x815f321e + name: "device_id_check" + type_id: 0x2cee6908 + offset: 704 +} member { id: 0x45ad335c name: "device_ids" @@ -78456,6 +79872,12 @@ member { type_id: 0x0d13aee6 offset: 2816 } +member { + id: 0x3a4ec330 + name: "device_len" + type_id: 0xf435685e + offset: 448 +} member { id: 0x9eb98b20 name: "device_life_time_est_typ_a" @@ -78665,6 +80087,12 @@ member { type_id: 0x6720d32f offset: 2560 } +member { + id: 0x20b6c745 + name: "device_status" + type_id: 0xb3e7bac9 + offset: 160 +} member { id: 0x05cc8744 name: "device_synchronize" @@ -79133,6 +80561,100 @@ member { type_id: 0xfc0e1dbd offset: 10048 } +member { + id: 0x15e2e39d + name: "dict" + type_id: 0x391f15ea + offset: 64 +} +member { + id: 0x15e2e77c + name: "dict" + type_id: 0x391f15ea +} +member { + id: 0x12dc8916 + name: "dictBase" + type_id: 0x37b47468 + offset: 128 +} +member { + id: 0x726ef231 + name: "dictBuffer" + type_id: 0x18bd6530 +} +member { + id: 0x916608c0 + name: "dictContentSize" + type_id: 0xf435685e + offset: 4416 +} +member { + id: 0x98d356bd + name: "dictContentType" + type_id: 0xee71dc12 + offset: 128 +} +member { + id: 0x98d357b6 + name: "dictContentType" + type_id: 0xee71dc12 + offset: 192 +} +member { + id: 0x548eced0 + name: "dictEnd" + type_id: 0x391f15ea + offset: 239296 +} +member { + id: 0x792af2d8 + name: "dictID" + type_id: 0x4585663f + offset: 224 +} +member { + id: 0x798f4b1d + name: "dictID" + type_id: 0xe03de1c1 + offset: 241408 +} +member { + id: 0x798f4f8e + name: "dictID" + type_id: 0xe03de1c1 + offset: 4352 +} +member { + id: 0xccb90f8f + name: "dictLimit" + type_id: 0xe03de1c1 + offset: 192 +} +member { + id: 0xa8f0e40c + name: "dictMatchState" + type_id: 0x3c534f6c + offset: 1856 +} +member { + id: 0x5ef7409d + name: "dictSize" + type_id: 0xf435685e + offset: 128 +} +member { + id: 0x5ef74dbe + name: "dictSize" + type_id: 0xf435685e + offset: 64 +} +member { + id: 0x6c568bb1 + name: "dictUses" + type_id: 0xea9852f4 + offset: 241472 +} member { id: 0x74ab0220 name: "die_revision" @@ -80886,6 +82408,12 @@ member { type_id: 0x92233392 offset: 576 } +member { + id: 0x4db0775f + name: "dma_mask" + type_id: 0x92233392 + offset: 768 +} member { id: 0x4db07a79 name: "dma_mask" @@ -82778,6 +84306,11 @@ member { type_id: 0x1259e377 offset: 192 } +member { + id: 0xbbe91447 + name: "dst" + type_id: 0x18bd6530 +} member { id: 0xbbf78102 name: "dst" @@ -84791,6 +86324,17 @@ member { type_id: 0x0cd0a3a7 offset: 512 } +member { + id: 0xbeca763e + name: "enableDedicatedDictSearch" + type_id: 0x6720d32f + offset: 960 +} +member { + id: 0x9a65905e + name: "enableLdm" + type_id: 0xedf771b8 +} member { id: 0x19ee64bf name: "enable_advmon_interleave_scan" @@ -86053,12 +87597,35 @@ member { type_id: 0xe62ebf07 offset: 32 } +member { + id: 0xec6fd68f + name: "entropy" + type_id: 0x6e25ba6b + offset: 256 +} member { id: 0xec780fc8 name: "entropy" type_id: 0x79fb914f offset: 320 } +member { + id: 0xecf31266 + name: "entropy" + type_id: 0xf2e1f826 +} +member { + id: 0x96605633 + name: "entropyMetadata" + type_id: 0x7d8a60f2 + offset: 9472 +} +member { + id: 0x9142f069 + name: "entropyWorkspace" + type_id: 0x329f41d7 + offset: 26880 +} member { id: 0x4d1def0c name: "entry" @@ -86533,6 +88100,12 @@ member { name: "epr" type_id: 0x197ee30b } +member { + id: 0x4560eebd + name: "eps" + type_id: 0x8b22066c + offset: 128 +} member { id: 0x4571d9d3 name: "eps" @@ -88041,6 +89614,12 @@ member { type_id: 0x0c27c566 offset: 2240 } +member { + id: 0x0d2d31b0 + name: "exit" + type_id: 0x0d301752 + offset: 1792 +} member { id: 0x0d2e75d7 name: "exit" @@ -88350,6 +89929,30 @@ member { type_id: 0xc9082b19 offset: 32 } +member { + id: 0xcff08be5 + name: "expected" + type_id: 0xf435685e + offset: 239360 +} +member { + id: 0x546aa8f5 + name: "expectedInBuffer" + type_id: 0x9a08bd99 + offset: 27648 +} +member { + id: 0xdfafd2f4 + name: "expectedOutBuffer" + type_id: 0x460a983e + offset: 242368 +} +member { + id: 0x6ecb1610 + name: "expectedOutBufferSize" + type_id: 0xf435685e + offset: 27840 +} member { id: 0x95115c54 name: "expected_attach_type" @@ -88822,6 +90425,12 @@ member { name: "extent" type_id: 0xddb93ca3 } +member { + id: 0x073a9077 + name: "externSeqStore" + type_id: 0xa563bbea + offset: 24192 +} member { id: 0x46e927d7 name: "external" @@ -89013,6 +90622,24 @@ member { name: "fE" type_id: 0x4585663f } +member { + id: 0x6b5bed82 + name: "fParams" + type_id: 0x6b30d6d2 + offset: 224 +} +member { + id: 0x6b5bee0d + name: "fParams" + type_id: 0x6b30d6d2 + offset: 256 +} +member { + id: 0x6bfb3eac + name: "fParams" + type_id: 0xcbedab99 + offset: 239424 +} member { id: 0x3094987c name: "f_bavail" @@ -92418,6 +94045,12 @@ member { name: "first" type_id: 0x18f9f5e3 } +member { + id: 0x9639d988 + name: "firstHalfSeqStore" + type_id: 0xd04212d3 + offset: 640 +} member { id: 0x8e3a4376 name: "first_insn_idx" @@ -95046,6 +96679,24 @@ member { type_id: 0x0dad77a5 offset: 192 } +member { + id: 0x311068d5 + name: "forceIgnoreChecksum" + type_id: 0x4bfba8f6 + offset: 240736 +} +member { + id: 0xf1788758 + name: "forceNonContiguous" + type_id: 0xe03de1c1 + offset: 960 +} +member { + id: 0x6a99477a + name: "forceWindow" + type_id: 0x6720d32f + offset: 384 +} member { id: 0xe3f745b6 name: "force_alloc" @@ -95077,6 +96728,13 @@ member { type_id: 0x6d7f5ff6 offset: 560 } +member { + id: 0x5c082ca7 + name: "force_media" + type_id: 0x4585663f + offset: 129 + bitsize: 1 +} member { id: 0x4f817797 name: "force_mld_version" @@ -95155,6 +96813,17 @@ member { type_id: 0x0f67b75e offset: 960 } +member { + id: 0x08012386 + name: "format" + type_id: 0x567db47c + offset: 240704 +} +member { + id: 0x08012e1a + name: "format" + type_id: 0x567db47c +} member { id: 0x081f58c5 name: "format" @@ -95727,6 +97396,23 @@ member { type_id: 0xc9082b19 offset: 64 } +member { + id: 0x5f5a29f4 + name: "frameContentSize" + type_id: 0xd5df6730 +} +member { + id: 0x1d7944d3 + name: "frameEnded" + type_id: 0xe03de1c1 + offset: 27616 +} +member { + id: 0x8cd83645 + name: "frameType" + type_id: 0xea9664dd + offset: 160 +} member { id: 0x02bdbb97 name: "frame_bits" @@ -95936,6 +97622,12 @@ member { offset: 320 bitsize: 1 } +member { + id: 0xfe26bb4e + name: "free" + type_id: 0x84ba5f13 + offset: 128 +} member { id: 0xfe834548 name: "free" @@ -96074,6 +97766,12 @@ member { name: "free" type_id: 0x0db22504 } +member { + id: 0xfeafc015 + name: "free" + type_id: 0x0dcbeae6 + offset: 1664 +} member { id: 0xfeaff378 name: "free" @@ -96145,6 +97843,12 @@ member { type_id: 0x99caa0ae offset: 64 } +member { + id: 0xca5fdeb2 + name: "free_ctx" + type_id: 0x0efb2e7d + offset: 64 +} member { id: 0xcd8f303f name: "free_dev" @@ -96912,6 +98616,36 @@ member { type_id: 0x32ec08f2 offset: 448 } +member { + id: 0xa36ba6f2 + name: "fse" + type_id: 0xa87681c2 + offset: 16512 +} +member { + id: 0x7a15a4fa + name: "fseEntropy" + type_id: 0xe03de1c1 + offset: 239968 +} +member { + id: 0x60002d72 + name: "fseMetadata" + type_id: 0xd867ba9e + offset: 1152 +} +member { + id: 0x643c2871 + name: "fseTablesBuffer" + type_id: 0xa09c4479 + offset: 96 +} +member { + id: 0x59aa2ab1 + name: "fseTablesSize" + type_id: 0xf435685e + offset: 1216 +} member { id: 0x62129fa1 name: "fsflags" @@ -97087,6 +98821,18 @@ member { name: "full64" type_id: 0x92233392 } +member { + id: 0xc09c49b3 + name: "fullSeqStoreChunk" + type_id: 0xd04212d3 +} +member { + id: 0x9034a01c + name: "full_duplex" + type_id: 0x4585663f + offset: 128 + bitsize: 1 +} member { id: 0x9c1851f6 name: "full_fds_bits" @@ -98072,6 +99818,12 @@ member { type_id: 0x224973b2 offset: 10048 } +member { + id: 0xd05bee08 + name: "gdbs_data" + type_id: 0x3863a91c + offset: 1472 +} member { id: 0xc0b7e746 name: "gdev" @@ -100609,6 +102361,23 @@ member { type_id: 0x30b52230 offset: 320 } +member { + id: 0xbf2d12a5 + name: "gov" + type_id: 0x3f015031 + offset: 1344 +} +member { + id: 0xbf2e3fb2 + name: "gov" + type_id: 0x3c26c400 +} +member { + id: 0x8b18c6d7 + name: "gov_dbs_update" + type_id: 0x393f044a + offset: 1536 +} member { id: 0xb047819b name: "governor" @@ -101482,6 +103251,18 @@ member { type_id: 0x2d873b56 offset: 71488 } +member { + id: 0x97ec73b1 + name: "guest_feature" + type_id: 0x0baa70a7 + offset: 96 +} +member { + id: 0x2215d0b7 + name: "guest_feature_select" + type_id: 0x0baa70a7 + offset: 64 +} member { id: 0xbdee7702 name: "guest_ipa" @@ -101510,6 +103291,11 @@ member { type_id: 0x044ba8c8 offset: 64 } +member { + id: 0xc0092974 + name: "hType" + type_id: 0x6cb740e3 +} member { id: 0xee26074a name: "h_dest" @@ -102423,6 +104209,12 @@ member { type_id: 0xe62ebf07 offset: 160 } +member { + id: 0x63deba8f + name: "hash" + type_id: 0xe03de1c1 + offset: 64 +} member { id: 0x63f7869f name: "hash" @@ -102440,6 +104232,54 @@ member { type_id: 0x02268d94 offset: 64 } +member { + id: 0x5b2bae23 + name: "hashCache" + type_id: 0xdc31f062 + offset: 512 +} +member { + id: 0xa7620f4c + name: "hashLog" + type_id: 0xe03de1c1 + offset: 32 +} +member { + id: 0xa7c7be11 + name: "hashLog" + type_id: 0x4585663f + offset: 64 +} +member { + id: 0x421ec1db + name: "hashLog3" + type_id: 0xe03de1c1 + offset: 384 +} +member { + id: 0xbe0d84d2 + name: "hashRateLog" + type_id: 0xe03de1c1 + offset: 128 +} +member { + id: 0x5a47bf67 + name: "hashTable" + type_id: 0x3e2f17bb + offset: 320 +} +member { + id: 0x5a4b0058 + name: "hashTable" + type_id: 0x329f41d7 + offset: 768 +} +member { + id: 0xad919854 + name: "hashTable3" + type_id: 0x329f41d7 + offset: 832 +} member { id: 0x13d572a1 name: "hash_alg" @@ -103332,6 +105172,24 @@ member { name: "header" type_id: 0xfb11ce60 } +member { + id: 0x863e4b4b + name: "headerBuffer" + type_id: 0x36be520c + offset: 767264 +} +member { + id: 0xcf6f6a1c + name: "headerSize" + type_id: 0xf435685e + offset: 240640 +} +member { + id: 0xcfded760 + name: "headerSize" + type_id: 0x4585663f + offset: 192 +} member { id: 0xd44b0645 name: "header_bit_size" @@ -104440,6 +106298,16 @@ member { type_id: 0x6720d32f offset: 2688 } +member { + id: 0x64171333 + name: "host_stage2_disable_lazy_pte" + type_id: 0x24401166 +} +member { + id: 0x4e45f6b9 + name: "host_stage2_enable_lazy_pte" + type_id: 0x24401166 +} member { id: 0x4c5d85c5 name: "host_stage2_get_leaf" @@ -104496,6 +106364,12 @@ member { type_id: 0x03913382 offset: 1280 } +member { + id: 0x838059e6 + name: "hostageByte" + type_id: 0xe03de1c1 + offset: 242240 +} member { id: 0x337e081c name: "hostdata" @@ -105143,6 +107017,34 @@ member { type_id: 0x4585663f offset: 416 } +member { + id: 0xee4581a6 + name: "huf" + type_id: 0x93f687e3 +} +member { + id: 0x294259bd + name: "hufDesBuffer" + type_id: 0x066e6455 + offset: 32 +} +member { + id: 0x37e0c767 + name: "hufDesSize" + type_id: 0xf435685e + offset: 1088 +} +member { + id: 0x652ee64b + name: "hufMetadata" + type_id: 0xeef6673d +} +member { + id: 0xcced8a56 + name: "hufTable" + type_id: 0x8e2cfab5 + offset: 82112 +} member { id: 0x6c787e02 name: "huge_fault" @@ -107695,6 +109597,12 @@ member { type_id: 0xc3693b57 offset: 7616 } +member { + id: 0xccec4558 + name: "id" + type_id: 0xc3693b57 + offset: 608 +} member { id: 0xccf852d0 name: "id" @@ -108128,6 +110036,12 @@ member { type_id: 0x4585663f offset: 192 } +member { + id: 0x3bb616b6 + name: "idle_periods" + type_id: 0x4585663f + offset: 1504 +} member { id: 0x86080473 name: "idle_slots" @@ -108933,6 +110847,12 @@ member { offset: 9548 bitsize: 1 } +member { + id: 0xeb82ce95 + name: "ignore_nice_load" + type_id: 0x4585663f + offset: 1472 +} member { id: 0x2a1caddd name: "ignore_outgoing" @@ -109326,6 +111246,60 @@ member { name: "in6_u" type_id: 0x7df31ddc } +member { + id: 0x6fe6eabf + name: "inBuff" + type_id: 0x0483e6f8 + offset: 241664 +} +member { + id: 0x6fe6ecc3 + name: "inBuff" + type_id: 0x0483e6f8 + offset: 27008 +} +member { + id: 0x60842018 + name: "inBuffPos" + type_id: 0xf435685e + offset: 27200 +} +member { + id: 0x226396f4 + name: "inBuffSize" + type_id: 0xf435685e + offset: 27072 +} +member { + id: 0x22639f20 + name: "inBuffSize" + type_id: 0xf435685e + offset: 241728 +} +member { + id: 0x53ac3784 + name: "inBuffTarget" + type_id: 0xf435685e + offset: 27264 +} +member { + id: 0x907b51f2 + name: "inBufferMode" + type_id: 0x02135bb7 + offset: 992 +} +member { + id: 0x75ccff1e + name: "inPos" + type_id: 0xf435685e + offset: 241792 +} +member { + id: 0x40c0340e + name: "inToCompress" + type_id: 0xf435685e + offset: 27136 +} member { id: 0x2e6facb4 name: "in_ack_event" @@ -110410,6 +112384,12 @@ member { type_id: 0x2e66ff23 offset: 64 } +member { + id: 0x1ac4b43b + name: "init" + type_id: 0x2e763bfd + offset: 1728 +} member { id: 0x1ac4f14b name: "init" @@ -111059,6 +113039,12 @@ member { name: "initialized" type_id: 0x6d7f5ff6 } +member { + id: 0xd568c2b2 + name: "initialized" + type_id: 0x6720d32f + offset: 6496 +} member { id: 0xd568ceef name: "initialized" @@ -112601,6 +114587,12 @@ member { type_id: 0xe62ebf07 offset: 64 } +member { + id: 0xfe460429 + name: "io_is_busy" + type_id: 0x4585663f + offset: 1600 +} member { id: 0xa8db7330 name: "io_mem_free" @@ -113974,6 +115966,12 @@ member { offset: 355 bitsize: 1 } +member { + id: 0x5dd91f3e + name: "ir" + type_id: 0x0e88ae5c + offset: 2112 +} member { id: 0x5def1bf7 name: "ir" @@ -114670,6 +116668,12 @@ member { type_id: 0x6d7f5ff6 offset: 6904 } +member { + id: 0xed01f566 + name: "irq_work" + type_id: 0xb95bf932 + offset: 640 +} member { id: 0xdfe72b60 name: "irq_write_msi_msg" @@ -114728,6 +116732,18 @@ member { type_id: 0x1f3c8679 offset: 11456 } +member { + id: 0x145559c6 + name: "isFirstBlock" + type_id: 0x6720d32f + offset: 6464 +} +member { + id: 0x55db514e + name: "isStatic" + type_id: 0x1f9df97f + offset: 480 +} member { id: 0x5ab15455 name: "is_64" @@ -115425,6 +117441,12 @@ member { offset: 8653 bitsize: 1 } +member { + id: 0x70e54a35 + name: "is_shared" + type_id: 0x6d7f5ff6 + offset: 1536 +} member { id: 0xfd81edd7 name: "is_signed" @@ -115727,6 +117749,12 @@ member { type_id: 0xac0d3a85 offset: 640 } +member { + id: 0xd3c71d2e + name: "isr" + type_id: 0x00c72527 + offset: 320 +} member { id: 0x3c46e3dc name: "issue" @@ -116226,6 +118254,12 @@ member { type_id: 0xc9082b19 offset: 110688 } +member { + id: 0x073b7679 + name: "jobSize" + type_id: 0xf435685e + offset: 640 +} member { id: 0xca07ed31 name: "job_abort" @@ -117309,6 +119343,12 @@ member { type_id: 0xa1319a08 offset: 5376 } +member { + id: 0x84231c09 + name: "kobj_type" + type_id: 0x8ffe5e7d + offset: 832 +} member { id: 0x6b5fea63 name: "kobj_unregister" @@ -117971,6 +120011,12 @@ member { type_id: 0x92233392 offset: 384 } +member { + id: 0xbddde122 + name: "lastCountSize" + type_id: 0xf435685e + offset: 1280 +} member { id: 0x46917fc8 name: "last_ack" @@ -118460,6 +120506,12 @@ member { type_id: 0x054f691a offset: 1088 } +member { + id: 0xa444a488 + name: "last_sample_time" + type_id: 0x92233392 + offset: 448 +} member { id: 0x6f1eca43 name: "last_scancode" @@ -118986,6 +121038,30 @@ member { type_id: 0x290e4f04 offset: 384 } +member { + id: 0xe6a8fb05 + name: "ldmParams" + type_id: 0x3a035222 + offset: 768 +} +member { + id: 0x103c788d + name: "ldmSeqStore" + type_id: 0x37c27971 + offset: 2176 +} +member { + id: 0x771fd023 + name: "ldmSequences" + type_id: 0x09653b4f + offset: 24064 +} +member { + id: 0x6cce8763 + name: "ldmState" + type_id: 0x456f6a31 + offset: 7168 +} member { id: 0x3c8efc4d name: "le_accept_list" @@ -119760,6 +121836,12 @@ member { type_id: 0xe62ebf07 offset: 64 } +member { + id: 0xb8e5e58c + name: "len" + type_id: 0xe03de1c1 + offset: 32 +} member { id: 0xb8e823c0 name: "len" @@ -120254,6 +122336,12 @@ member { name: "lh" type_id: 0xd3c80119 } +member { + id: 0xeae2e7ff + name: "lhSize" + type_id: 0xf435685e + offset: 242176 +} member { id: 0xc23ae739 name: "lhash2" @@ -121456,6 +123544,143 @@ member { type_id: 0x0e87d57a offset: 960 } +member { + id: 0x03c74a5b + name: "lit" + type_id: 0x2210e338 + offset: 192 +} +member { + id: 0xd167c0a5 + name: "litBuffer" + type_id: 0x2210e338 + offset: 242560 +} +member { + id: 0x0b8bed37 + name: "litBufferEnd" + type_id: 0x37b47468 + offset: 242624 +} +member { + id: 0x647b5cd7 + name: "litBufferLocation" + type_id: 0xe33a2cf1 + offset: 242688 +} +member { + id: 0x21ffee06 + name: "litEntropy" + type_id: 0xe03de1c1 + offset: 239936 +} +member { + id: 0xf17886d2 + name: "litExtraBuffer" + type_id: 0x01b2208d + offset: 242720 +} +member { + id: 0xea98a8c3 + name: "litFreq" + type_id: 0x1bf16028 +} +member { + id: 0x7a157850 + name: "litLength" + type_id: 0xd867b934 + offset: 32 +} +member { + id: 0x7a2d2208 + name: "litLength" + type_id: 0xe03de1c1 + offset: 32 +} +member { + id: 0x7a889a8f + name: "litLength" + type_id: 0x4585663f + offset: 32 +} +member { + id: 0xc5a177ed + name: "litLengthFreq" + type_id: 0x1bf16028 + offset: 64 +} +member { + id: 0xa358b05b + name: "litLengthSum" + type_id: 0xe03de1c1 + offset: 416 +} +member { + id: 0xde41c854 + name: "litLengthSumBasePrice" + type_id: 0xe03de1c1 + offset: 544 +} +member { + id: 0xf0490dcd + name: "litPtr" + type_id: 0x37b47468 + offset: 240832 +} +member { + id: 0x560a0111 + name: "litSize" + type_id: 0xf435685e + offset: 241088 +} +member { + id: 0x79d2abf0 + name: "litStart" + type_id: 0x2210e338 + offset: 128 +} +member { + id: 0xbe44256e + name: "litSum" + type_id: 0xe03de1c1 + offset: 384 +} +member { + id: 0xde2cd712 + name: "litSumBasePrice" + type_id: 0xe03de1c1 + offset: 512 +} +member { + id: 0xf2c3d437 + name: "literalCompressionMode" + type_id: 0xedf771b8 + offset: 576 +} +member { + id: 0xf2c3d5eb + name: "literalCompressionMode" + type_id: 0xedf771b8 + offset: 768 +} +member { + id: 0x85fdbd64 + name: "litlen" + type_id: 0xe03de1c1 + offset: 96 +} +member { + id: 0x8bae645e + name: "litlengthCTable" + type_id: 0x3dc0bcf8 + offset: 17792 +} +member { + id: 0x561bb077 + name: "litlength_repeatMode" + type_id: 0x8ef3720c + offset: 28384 +} member { id: 0xb4f1f19e name: "little_endian" @@ -121486,6 +123711,17 @@ member { type_id: 0xc9082b19 offset: 128 } +member { + id: 0x02319fdc + name: "llCode" + type_id: 0x2210e338 + offset: 256 +} +member { + id: 0xd4f6a60e + name: "llType" + type_id: 0x6cb740e3 +} member { id: 0xde899392 name: "ll_driver" @@ -121775,6 +124011,18 @@ member { type_id: 0x384f7d7c offset: 1080 } +member { + id: 0xce7d30ba + name: "loadedDictEnd" + type_id: 0xe03de1c1 + offset: 320 +} +member { + id: 0xce7d36ef + name: "loadedDictEnd" + type_id: 0xe03de1c1 + offset: 384 +} member { id: 0x256fc591 name: "loader" @@ -121799,6 +124047,12 @@ member { type_id: 0x0c577b6c offset: 576 } +member { + id: 0xddb417f2 + name: "localDict" + type_id: 0xc2c58cfe + offset: 27904 +} member { id: 0x74508206 name: "local_addr" @@ -123046,6 +125300,18 @@ member { type_id: 0xe90b32b7 offset: 18176 } +member { + id: 0x304bda54 + name: "longLengthPos" + type_id: 0xe03de1c1 + offset: 608 +} +member { + id: 0x11e329ba + name: "longLengthType" + type_id: 0x7f6cf1f8 + offset: 576 +} member { id: 0x7575eb94 name: "long_name" @@ -123326,6 +125592,12 @@ member { type_id: 0x0d364e53 offset: 64 } +member { + id: 0xced54d54 + name: "lowLimit" + type_id: 0xe03de1c1 + offset: 224 +} member { id: 0x2ffe4a12 name: "low_ino" @@ -124536,6 +126808,12 @@ member { type_id: 0x7abd5475 offset: 448 } +member { + id: 0x8d9e156c + name: "map" + type_id: 0x686d198e + offset: 128 +} member { id: 0x8dbdb056 name: "map" @@ -126093,6 +128371,54 @@ member { name: "match" type_id: 0xcb7b9bee } +member { + id: 0x9cfd71c5 + name: "matchCandidates" + type_id: 0x1a661e36 + offset: 4608 +} +member { + id: 0x8c60ea2d + name: "matchLength" + type_id: 0x4585663f + offset: 64 +} +member { + id: 0x8cc552aa + name: "matchLength" + type_id: 0xe03de1c1 + offset: 64 +} +member { + id: 0xec344c76 + name: "matchLengthFreq" + type_id: 0x1bf16028 + offset: 128 +} +member { + id: 0xf1e0bd44 + name: "matchLengthSum" + type_id: 0xe03de1c1 + offset: 448 +} +member { + id: 0xdb61bd71 + name: "matchLengthSumBasePrice" + type_id: 0xe03de1c1 + offset: 576 +} +member { + id: 0x261eff3f + name: "matchState" + type_id: 0x1c70da37 + offset: 128 +} +member { + id: 0xe423f3ca + name: "matchTable" + type_id: 0x024ed5a8 + offset: 256 +} member { id: 0xb97cb3d1 name: "match_driver" @@ -126180,6 +128506,18 @@ member { name: "matchinfo" type_id: 0x391f15ea } +member { + id: 0x44a9de46 + name: "matchlengthCTable" + type_id: 0x575de213 + offset: 6176 +} +member { + id: 0xe2a9b545 + name: "matchlength_repeatMode" + type_id: 0x8ef3720c + offset: 28352 +} member { id: 0xa1e580a1 name: "matchsize" @@ -126303,6 +128641,36 @@ member { type_id: 0x33756485 offset: 448 } +member { + id: 0x31e521b5 + name: "maxNbLdmSequences" + type_id: 0xf435685e + offset: 24128 +} +member { + id: 0xf68fe2c5 + name: "maxNbLit" + type_id: 0xf435685e + offset: 512 +} +member { + id: 0x77cb6f61 + name: "maxNbSeq" + type_id: 0xf435685e + offset: 448 +} +member { + id: 0xe628fbc5 + name: "maxSequences" + type_id: 0xf435685e + offset: 192 +} +member { + id: 0xeebaee51 + name: "maxWindowSize" + type_id: 0xf435685e + offset: 241856 +} member { id: 0xa067c94f name: "max_VF_buses" @@ -129300,12 +131668,24 @@ member { type_id: 0x50930294 offset: 17216 } +member { + id: 0x8da29d66 + name: "mdio_read" + type_id: 0x2ebb318f + offset: 256 +} member { id: 0xe2b8944e name: "mdio_support" type_id: 0xb3e7bac9 offset: 96 } +member { + id: 0x2fb1c3e7 + name: "mdio_write" + type_id: 0x0dfd7a00 + offset: 320 +} member { id: 0x64615c20 name: "mdiodrv" @@ -129597,6 +131977,12 @@ member { type_id: 0xff7222f6 offset: 192 } +member { + id: 0xbb589b27 + name: "mem64" + type_id: 0x8b6f70d0 + offset: 320 +} member { id: 0xeaa4a738 name: "mem_blk" @@ -130040,6 +132426,12 @@ member { type_id: 0x1ed6200d offset: 1984 } +member { + id: 0x747620e4 + name: "memsize" + type_id: 0x1c3dbe5a + offset: 576 +} member { id: 0x4f1355bb name: "memslots" @@ -130577,6 +132969,18 @@ member { type_id: 0x4585663f offset: 224 } +member { + id: 0x27aaccd1 + name: "minMatch" + type_id: 0x4585663f + offset: 128 +} +member { + id: 0xabbac934 + name: "minMatchLength" + type_id: 0xe03de1c1 + offset: 96 +} member { id: 0xaa4f7dd4 name: "min_align" @@ -131550,6 +133954,24 @@ member { type_id: 0x165ded06 offset: 1344 } +member { + id: 0x89fcf52d + name: "mlBase" + type_id: 0xd867b934 + offset: 48 +} +member { + id: 0xacfc3c5d + name: "mlCode" + type_id: 0x2210e338 + offset: 320 +} +member { + id: 0x7ac6df65 + name: "mlType" + type_id: 0x6cb740e3 + offset: 64 +} member { id: 0x456eb44b name: "ml_priv" @@ -131580,6 +134002,12 @@ member { type_id: 0x0faae5b1 offset: 416 } +member { + id: 0x7fa82be4 + name: "mlen" + type_id: 0xe03de1c1 + offset: 64 +} member { id: 0xda32aefe name: "mlock" @@ -132914,6 +135342,12 @@ member { type_id: 0xd3c80119 offset: 5184 } +member { + id: 0x5ec01d30 + name: "modern_bars" + type_id: 0x6720d32f + offset: 576 +} member { id: 0x840364bd name: "modes" @@ -134164,6 +136598,12 @@ member { offset: 3 bitsize: 1 } +member { + id: 0xff0492f7 + name: "msix_config" + type_id: 0x9bd401b6 + offset: 128 +} member { id: 0x45f8d1ce name: "msix_count" @@ -134590,6 +137030,12 @@ member { type_id: 0xa7c362b0 offset: 2688 } +member { + id: 0xad89869d + name: "mutex" + type_id: 0xa7c362b0 + offset: 2176 +} member { id: 0xad8987e3 name: "mutex" @@ -136088,6 +138534,30 @@ member { type_id: 0x449a775b offset: 8192 } +member { + id: 0x179b58a3 + name: "nbAdditionalBits" + type_id: 0xa2036a7c + offset: 16 +} +member { + id: 0xd9cafbff + name: "nbBits" + type_id: 0xa2036a7c + offset: 24 +} +member { + id: 0x83255b44 + name: "nbOverflowCorrections" + type_id: 0xe03de1c1 + offset: 256 +} +member { + id: 0xb0b85598 + name: "nbWorkers" + type_id: 0x6720d32f + offset: 608 +} member { id: 0x428b2b8d name: "nb_max" @@ -137993,6 +140463,34 @@ member { type_id: 0x0cef4974 offset: 320 } +member { + id: 0x5a930e05 + name: "nextCBlock" + type_id: 0x0ba7798f + offset: 64 +} +member { + id: 0x9f0a1499 + name: "nextSeqStore" + type_id: 0xd04212d3 + offset: 2560 +} +member { + id: 0x902698df + name: "nextSrc" + type_id: 0x37b47468 +} +member { + id: 0x6003f387 + name: "nextState" + type_id: 0xd867b934 +} +member { + id: 0x1570bb99 + name: "nextToUpdate" + type_id: 0xe03de1c1 + offset: 352 +} member { id: 0x7b6ac82c name: "next_addr" @@ -138838,6 +141336,18 @@ member { type_id: 0xc9082b19 offset: 64 } +member { + id: 0xfa429294 + name: "noDictIDFlag" + type_id: 0x6720d32f + offset: 64 +} +member { + id: 0x02d1e0b7 + name: "noForwardProgress" + type_id: 0x6720d32f + offset: 242272 +} member { id: 0xb017a442 name: "no_64bit_msi" @@ -139399,6 +141909,12 @@ member { type_id: 0xd3c80119 offset: 832 } +member { + id: 0x0fa6c604 + name: "node" + type_id: 0xd3c80119 + offset: 256 +} member { id: 0x0fa6c639 name: "node" @@ -140031,6 +142547,12 @@ member { type_id: 0x0f2f95e7 offset: 55232 } +member { + id: 0x56f94a47 + name: "notify" + type_id: 0x0f47e4fb + offset: 192 +} member { id: 0x56fb4c94 name: "notify" @@ -140043,6 +142565,12 @@ member { type_id: 0x0da2fec2 offset: 448 } +member { + id: 0x523703dc + name: "notify_base" + type_id: 0x18bd6530 + offset: 192 +} member { id: 0x7b726eae name: "notify_buffer_size" @@ -140067,6 +142595,12 @@ member { type_id: 0x6720d32f offset: 800 } +member { + id: 0x8f9077d2 + name: "notify_data" + type_id: 0x18bd6530 + offset: 128 +} member { id: 0x8f907869 name: "notify_data" @@ -140085,6 +142619,18 @@ member { type_id: 0x60af483b offset: 11008 } +member { + id: 0x196648bf + name: "notify_len" + type_id: 0xf435685e + offset: 384 +} +member { + id: 0xcdb60d26 + name: "notify_map_cap" + type_id: 0x6720d32f + offset: 512 +} member { id: 0x34ab3a58 name: "notify_method" @@ -140097,6 +142643,12 @@ member { type_id: 0x3a534a58 offset: 192 } +member { + id: 0xafcd98a5 + name: "notify_offset_multiplier" + type_id: 0xc9082b19 + offset: 544 +} member { id: 0x3c7f33fc name: "notify_on_block" @@ -140109,6 +142661,12 @@ member { type_id: 0x306ea2b8 offset: 384 } +member { + id: 0x79e5f28d + name: "notify_pa" + type_id: 0x9565759f + offset: 256 +} member { id: 0x6bb79305 name: "notify_poll_in" @@ -142906,6 +145464,12 @@ member { type_id: 0x4585663f offset: 1184 } +member { + id: 0x81dafbbb + name: "num_queues" + type_id: 0x9bd401b6 + offset: 144 +} member { id: 0x1f2f13a4 name: "num_ranges" @@ -143792,6 +146356,12 @@ member { type_id: 0x18bd6530 offset: 192 } +member { + id: 0xbf09b1f9 + name: "objectEnd" + type_id: 0x18bd6530 + offset: 128 +} member { id: 0xd8c8a14c name: "object_idr" @@ -143978,6 +146548,18 @@ member { type_id: 0x3fac1d22 offset: 512 } +member { + id: 0x67a97c3f + name: "ofCode" + type_id: 0x2210e338 + offset: 384 +} +member { + id: 0x125f0d3a + name: "ofType" + type_id: 0x6cb740e3 + offset: 32 +} member { id: 0xb3bb33a4 name: "of_base" @@ -144247,6 +146829,17 @@ member { type_id: 0xc9082b19 offset: 32 } +member { + id: 0x8b3505f5 + name: "off" + type_id: 0xe03de1c1 +} +member { + id: 0x8b3508ce + name: "off" + type_id: 0xe03de1c1 + offset: 32 +} member { id: 0x8b38ca63 name: "off" @@ -144258,6 +146851,29 @@ member { type_id: 0x007e8ce4 offset: 16 } +member { + id: 0x2fa85e77 + name: "offBase" + type_id: 0xe03de1c1 +} +member { + id: 0x9e84637c + name: "offCodeFreq" + type_id: 0x1bf16028 + offset: 192 +} +member { + id: 0x3d2b3fdf + name: "offCodeSum" + type_id: 0xe03de1c1 + offset: 480 +} +member { + id: 0x1cf5cc4c + name: "offCodeSumBasePrice" + type_id: 0xe03de1c1 + offset: 608 +} member { id: 0x085373b2 name: "off_on_delay" @@ -144277,6 +146893,17 @@ member { type_id: 0x4585663f offset: 704 } +member { + id: 0x5ff2109c + name: "offcodeCTable" + type_id: 0x3fe0f5e5 +} +member { + id: 0x5d0dee4a + name: "offcode_repeatMode" + type_id: 0x8ef3720c + offset: 28320 +} member { id: 0x3addfc63 name: "offdev" @@ -144645,6 +147272,11 @@ member { type_id: 0xe62ebf07 offset: 32 } +member { + id: 0x9bfce125 + name: "offset" + type_id: 0xe03de1c1 +} member { id: 0x9bff77f6 name: "offset" @@ -145215,6 +147847,12 @@ member { type_id: 0x0032ce36 offset: 7616 } +member { + id: 0x8fe420e4 + name: "opaque" + type_id: 0x18bd6530 + offset: 128 +} member { id: 0x8fe42b1b name: "opaque" @@ -146429,6 +149067,12 @@ member { type_id: 0x00cc5f1f offset: 64 } +member { + id: 0xf6545785 + name: "opt" + type_id: 0x1e7e42f3 + offset: 1024 +} member { id: 0xf6548174 name: "opt" @@ -147029,6 +149673,66 @@ member { type_id: 0x0e2680c2 offset: 1920 } +member { + id: 0xa3a930b3 + name: "outBuff" + type_id: 0x0483e6f8 + offset: 27328 +} +member { + id: 0xa3a93849 + name: "outBuff" + type_id: 0x0483e6f8 + offset: 241920 +} +member { + id: 0xfeddd644 + name: "outBuffContentSize" + type_id: 0xf435685e + offset: 27456 +} +member { + id: 0xf0efeb94 + name: "outBuffFlushedSize" + type_id: 0xf435685e + offset: 27520 +} +member { + id: 0x7faaa7a8 + name: "outBuffSize" + type_id: 0xf435685e + offset: 241984 +} +member { + id: 0x7faaa812 + name: "outBuffSize" + type_id: 0xf435685e + offset: 27392 +} +member { + id: 0x2a97c1ae + name: "outBufferMode" + type_id: 0x02135bb7 + offset: 242304 +} +member { + id: 0x2a97c2ae + name: "outBufferMode" + type_id: 0x02135bb7 + offset: 1024 +} +member { + id: 0x92c69e89 + name: "outEnd" + type_id: 0xf435685e + offset: 242112 +} +member { + id: 0x7df4b00e + name: "outStart" + type_id: 0xf435685e + offset: 242048 +} member { id: 0xc077ad8d name: "out_batch" @@ -147362,6 +150066,12 @@ member { type_id: 0x03a4acbb offset: 192 } +member { + id: 0xaa964bee + name: "overlapLog" + type_id: 0x6720d32f + offset: 704 +} member { id: 0x02ff46d2 name: "overlimits" @@ -147451,6 +150161,12 @@ member { type_id: 0x92233392 offset: 64 } +member { + id: 0x6fffd1d0 + name: "oversizedDuration" + type_id: 0xf435685e + offset: 767424 +} member { id: 0x2b2449ce name: "overutilized" @@ -149787,6 +152503,12 @@ member { type_id: 0x6d7f5ff6 offset: 512 } +member { + id: 0xc5666d22 + name: "partitions" + type_id: 0x3dadfdcd + offset: 3200 +} member { id: 0xdaa0963a name: "partner" @@ -150206,6 +152928,11 @@ member { type_id: 0x1ffe936a offset: 64 } +member { + id: 0x2d364a2a + name: "pci_dev" + type_id: 0x11e6864c +} member { id: 0x60c1edba name: "pci_epf" @@ -152100,6 +154827,12 @@ member { type_id: 0x4585663f offset: 44992 } +member { + id: 0x39f70fa5 + name: "phase" + type_id: 0x7f751148 + offset: 448 +} member { id: 0x8ecc8cf1 name: "phase_uf" @@ -152154,6 +154887,11 @@ member { type_id: 0xc2aafbc8 offset: 48 } +member { + id: 0xad6edd33 + name: "phy_id" + type_id: 0x6720d32f +} member { id: 0xadc0f29b name: "phy_id" @@ -152166,12 +154904,23 @@ member { type_id: 0xc9082b19 offset: 8384 } +member { + id: 0xade1fea0 + name: "phy_id" + type_id: 0xe8034002 +} member { id: 0xd64be311 name: "phy_id_mask" type_id: 0xc9082b19 offset: 1600 } +member { + id: 0xd6e5c6b0 + name: "phy_id_mask" + type_id: 0x6720d32f + offset: 64 +} member { id: 0x6ffc750f name: "phy_ignore_ta_mask" @@ -153679,6 +156428,12 @@ member { type_id: 0xc9082b19 offset: 18688 } +member { + id: 0x5bdf820f + name: "pledgedSrcSizePlusOne" + type_id: 0xd5df6730 + offset: 5056 +} member { id: 0xacd4ccce name: "plen" @@ -154812,6 +157567,12 @@ member { type_id: 0x17c909bc offset: 1728 } +member { + id: 0xdeba800a + name: "pool" + type_id: 0x3a413768 + offset: 6080 +} member { id: 0x3772a386 name: "pool_data" @@ -155489,6 +158250,18 @@ member { type_id: 0x6720d32f offset: 192 } +member { + id: 0x265024df + name: "pos" + type_id: 0xf435685e + offset: 128 +} +member { + id: 0x265029fc + name: "pos" + type_id: 0xf435685e + offset: 64 +} member { id: 0x26693333 name: "pos" @@ -155529,6 +158302,12 @@ member { name: "pos" type_id: 0x6720d32f } +member { + id: 0x20acbe4b + name: "posInSequence" + type_id: 0xf435685e + offset: 128 +} member { id: 0x908201b0 name: "position" @@ -156737,6 +159516,18 @@ member { name: "prefix" type_id: 0x3e10b518 } +member { + id: 0xa7fefdee + name: "prefixDict" + type_id: 0x0365de47 + offset: 28288 +} +member { + id: 0x5e21364d + name: "prefixStart" + type_id: 0x391f15ea + offset: 239168 +} member { id: 0x2165da89 name: "prefix_len" @@ -157102,6 +159893,11 @@ member { type_id: 0x3e6239e1 offset: 64 } +member { + id: 0xcd56d56a + name: "prevCBlock" + type_id: 0x0ba7798f +} member { id: 0x0003d871 name: "prev_count" @@ -157275,6 +160071,12 @@ member { type_id: 0x11c404ba offset: 1152 } +member { + id: 0x15591d3d + name: "previousDstEnd" + type_id: 0x391f15ea + offset: 239104 +} member { id: 0xc908872c name: "previous_freq" @@ -157293,6 +160095,23 @@ member { name: "pri_to_cpu" type_id: 0x0772f61b } +member { + id: 0xc073994f + name: "price" + type_id: 0x6720d32f +} +member { + id: 0x8ccba0aa + name: "priceTable" + type_id: 0x351c0ee4 + offset: 320 +} +member { + id: 0x349965a4 + name: "priceType" + type_id: 0x52f83184 + offset: 640 +} member { id: 0xacb061a5 name: "primary" @@ -158991,6 +161810,12 @@ member { type_id: 0x2e0f9112 offset: 192 } +member { + id: 0x3e770b46 + name: "processedCSize" + type_id: 0x7ba71cda + offset: 239744 +} member { id: 0xdaab89c5 name: "procname" @@ -159026,6 +161851,12 @@ member { type_id: 0xea2d574d offset: 32 } +member { + id: 0x8cc0018d + name: "producedCSize" + type_id: 0xd5df6730 + offset: 5184 +} member { id: 0x6c53e55d name: "producer" @@ -161650,6 +164481,18 @@ member { type_id: 0x2d32eaff offset: 320 } +member { + id: 0xacf8a4d7 + name: "queue_avail_hi" + type_id: 0x0baa70a7 + offset: 352 +} +member { + id: 0x22f308b7 + name: "queue_avail_lo" + type_id: 0x0baa70a7 + offset: 320 +} member { id: 0x0568678e name: "queue_ctx" @@ -161692,6 +164535,18 @@ member { type_id: 0x0f677ef9 offset: 512 } +member { + id: 0x46fda583 + name: "queue_desc_hi" + type_id: 0x0baa70a7 + offset: 288 +} +member { + id: 0xccb15a57 + name: "queue_desc_lo" + type_id: 0x0baa70a7 + offset: 256 +} member { id: 0xa9229c13 name: "queue_empty" @@ -161704,6 +164559,12 @@ member { type_id: 0x92233392 offset: 256 } +member { + id: 0x0ec52ad2 + name: "queue_enable" + type_id: 0x9bd401b6 + offset: 224 +} member { id: 0xe2023fd6 name: "queue_flags" @@ -161758,6 +164619,18 @@ member { type_id: 0xe8034002 offset: 992 } +member { + id: 0x4ff19e6a + name: "queue_msix_vector" + type_id: 0x9bd401b6 + offset: 208 +} +member { + id: 0x02805e25 + name: "queue_notify_off" + type_id: 0x9bd401b6 + offset: 240 +} member { id: 0x88db3018 name: "queue_num" @@ -161793,11 +164666,23 @@ member { type_id: 0x0e65265f offset: 128 } +member { + id: 0xf9147078 + name: "queue_select" + type_id: 0x9bd401b6 + offset: 176 +} member { id: 0x3af18ebc name: "queue_setup" type_id: 0x2c4285f7 } +member { + id: 0x1051be22 + name: "queue_size" + type_id: 0x9bd401b6 + offset: 192 +} member { id: 0x645fc1ac name: "queue_stopped" @@ -161809,6 +164694,18 @@ member { name: "queue_sz" type_id: 0xf435685e } +member { + id: 0x995fb916 + name: "queue_used_hi" + type_id: 0x0baa70a7 + offset: 416 +} +member { + id: 0x1eafa16a + name: "queue_used_lo" + type_id: 0x0baa70a7 + offset: 384 +} member { id: 0x52c10ec0 name: "queue_xmit" @@ -162772,6 +165669,12 @@ member { type_id: 0x4585663f offset: 160 } +member { + id: 0xe9d2a54b + name: "rate_mult" + type_id: 0x4585663f + offset: 1472 +} member { id: 0x3d9c680e name: "rate_node_del" @@ -165460,6 +168363,12 @@ member { type_id: 0xa722c13e offset: 32 } +member { + id: 0xd9dec80b + name: "refMultipleDDicts" + type_id: 0x152f6b10 + offset: 241600 +} member { id: 0x93ca7d80 name: "ref_clk" @@ -165883,6 +168792,12 @@ member { type_id: 0x6f1daf87 offset: 544 } +member { + id: 0x05ec0c9b + name: "refcount" + type_id: 0x6f1daf87 + offset: 192 +} member { id: 0x05ec0d90 name: "refcount" @@ -166260,6 +169175,18 @@ member { type_id: 0x0fb82403 offset: 3008 } +member { + id: 0x5b0ec69f + name: "reg_num" + type_id: 0xe8034002 + offset: 16 +} +member { + id: 0x386b59a8 + name: "reg_num_mask" + type_id: 0x6720d32f + offset: 96 +} member { id: 0x83dea94b name: "reg_offset" @@ -167869,6 +170796,30 @@ member { type_id: 0xc9082b19 offset: 14720 } +member { + id: 0x52bf463e + name: "rep" + type_id: 0x2aca8d44 + offset: 128 +} +member { + id: 0x52bf48c6 + name: "rep" + type_id: 0x2aca8d44 + offset: 213216 +} +member { + id: 0x52bf4ec6 + name: "rep" + type_id: 0x2aca8d44 + offset: 44928 +} +member { + id: 0x52d00994 + name: "rep" + type_id: 0x4585663f + offset: 96 +} member { id: 0x52e0ed5f name: "rep" @@ -167900,6 +170851,12 @@ member { type_id: 0xe62ebf07 offset: 256 } +member { + id: 0x42661200 + name: "repeatMode" + type_id: 0x19c445fa + offset: 16448 +} member { id: 0x8b2e8815 name: "repeat_key" @@ -168606,6 +171563,12 @@ member { type_id: 0x2f0329e2 offset: 384 } +member { + id: 0x527156f3 + name: "requestedParams" + type_id: 0xfaf67466 + offset: 128 +} member { id: 0x7b0048be name: "requested_threads" @@ -171559,6 +174522,12 @@ member { type_id: 0xc9082b19 offset: 192 } +member { + id: 0x675ef59b + name: "rleSize" + type_id: 0xf435685e + offset: 241152 +} member { id: 0xef0151a4 name: "rlim" @@ -172051,6 +175020,12 @@ member { type_id: 0x2ae16f9b offset: 512 } +member { + id: 0x7e3fe576 + name: "rowHashLog" + type_id: 0xe03de1c1 + offset: 416 +} member { id: 0x9974ea67 name: "row_height_minus1" @@ -172624,6 +175599,12 @@ member { type_id: 0x6a240418 offset: 32 } +member { + id: 0x77214c23 + name: "rsyncable" + type_id: 0x6720d32f + offset: 736 +} member { id: 0x4fb9e2cc name: "rt" @@ -175458,6 +178439,12 @@ member { type_id: 0x4585663f offset: 704 } +member { + id: 0x73f4b0b4 + name: "sample_delay_ns" + type_id: 0x2e0f9112 + offset: 512 +} member { id: 0xa3b36710 name: "sample_flags" @@ -175569,6 +178556,18 @@ member { type_id: 0xe62ebf07 offset: 64 } +member { + id: 0x11ed2432 + name: "sampling_down_factor" + type_id: 0x4585663f + offset: 1536 +} +member { + id: 0xf64611c2 + name: "sampling_rate" + type_id: 0x4585663f + offset: 1504 +} member { id: 0xf6e5b6dd name: "sampling_rate" @@ -177068,6 +180067,12 @@ member { type_id: 0x4585663f offset: 32 } +member { + id: 0x0d9fc4e5 + name: "searchLog" + type_id: 0x4585663f + offset: 96 +} member { id: 0xf32eb68b name: "search_high" @@ -177168,6 +180173,12 @@ member { type_id: 0x295c7202 offset: 48 } +member { + id: 0xabfd519b + name: "secondHalfSeqStore" + type_id: 0xd04212d3 + offset: 1280 +} member { id: 0xcae5ab59 name: "second_chroma_qp_index_offset" @@ -177998,6 +181009,11 @@ member { type_id: 0xffa4c057 offset: 896 } +member { + id: 0xfa156a71 + name: "seq" + type_id: 0x09653b4f +} member { id: 0xfa1fb6ba name: "seq" @@ -178137,6 +181153,30 @@ member { type_id: 0xe276adef offset: 32 } +member { + id: 0x556778f1 + name: "seqCollector" + type_id: 0x9362c2f7 + offset: 6208 +} +member { + id: 0xbcfc5a69 + name: "seqIndex" + type_id: 0xf435685e + offset: 128 +} +member { + id: 0x16c71db5 + name: "seqStart" + type_id: 0x34c5f150 + offset: 64 +} +member { + id: 0xea5da736 + name: "seqStore" + type_id: 0xd04212d3 + offset: 6528 +} member { id: 0x87634c04 name: "seq_file" @@ -178361,6 +181401,17 @@ member { type_id: 0x7584e7da offset: 240 } +member { + id: 0x65849304 + name: "sequences" + type_id: 0x13cf76cc + offset: 64 +} +member { + id: 0xf83fbf3b + name: "sequencesStart" + type_id: 0x13cf76cc +} member { id: 0x27263415 name: "serdev" @@ -181209,6 +184260,12 @@ member { type_id: 0x6d7f5ff6 offset: 872 } +member { + id: 0x1a2cfce7 + name: "should_kfree" + type_id: 0x6d7f5ff6 + offset: 384 +} member { id: 0x0a527a1a name: "show" @@ -181722,16 +184779,16 @@ member { type_id: 0xc9082b19 } member { - id: 0x37c4126e + id: 0x37c2bb5d name: "sideband" - type_id: 0x0a7a1263 - offset: 1152 + type_id: 0x0cd5bff8 + offset: 38336 } member { - id: 0x37c414f0 + id: 0x37c2bdc3 name: "sideband" - type_id: 0x0a7a1263 - offset: 38336 + type_id: 0x0cd5bff8 + offset: 1152 } member { id: 0x71a9d2d2 @@ -182009,6 +185066,12 @@ member { type_id: 0x5d8155a5 offset: 45312 } +member { + id: 0xc711f856 + name: "simpleApiParams" + type_id: 0xfaf67466 + offset: 2944 +} member { id: 0x3efa0771 name: "simple_422" @@ -185367,12 +188430,23 @@ member { type_id: 0x0f07cf2c offset: 1408 } +member { + id: 0x406ecc6d + name: "split" + type_id: 0x37b47468 +} member { id: 0x509ad375 name: "split" type_id: 0x295c7202 bitsize: 1 } +member { + id: 0x8611dbc4 + name: "splitIndices" + type_id: 0x0ea65d80 + offset: 512 +} member { id: 0x94e23a69 name: "split_ops" @@ -185748,6 +188822,11 @@ member { type_id: 0xf313e71a offset: 256 } +member { + id: 0x440f7510 + name: "src" + type_id: 0x391f15ea +} member { id: 0x4427a288 name: "src" @@ -185837,6 +188916,12 @@ member { type_id: 0xc9082b19 offset: 7872 } +member { + id: 0x8a717ef8 + name: "srcSizeHint" + type_id: 0x6720d32f + offset: 512 +} member { id: 0xd2778ee7 name: "src_addr" @@ -186693,6 +189778,17 @@ member { type_id: 0x48218c07 offset: 2432 } +member { + id: 0x59b8803f + name: "stage" + type_id: 0x1e7da911 +} +member { + id: 0x59dd6bd3 + name: "stage" + type_id: 0x7b93905f + offset: 239904 +} member { id: 0xa1b65ada name: "stage2_mc" @@ -186793,6 +189889,12 @@ member { type_id: 0x0f988369 offset: 448 } +member { + id: 0x46159782 + name: "start" + type_id: 0x0eafcf90 + offset: 1856 +} member { id: 0x4615f29e name: "start" @@ -188173,6 +191275,18 @@ member { type_id: 0x2ceb7df5 offset: 832 } +member { + id: 0x17b3f422 + name: "staticSize" + type_id: 0xf435685e + offset: 6144 +} +member { + id: 0x17b3fed2 + name: "staticSize" + type_id: 0xf435685e + offset: 241216 +} member { id: 0x0c2a2533 name: "static_addr" @@ -189312,6 +192426,12 @@ member { type_id: 0x09a1684b offset: 320 } +member { + id: 0xc8989784 + name: "strategy" + type_id: 0x4fd7c5a2 + offset: 192 +} member { id: 0xc01f41e7 name: "stream" @@ -189394,6 +192514,18 @@ member { type_id: 0xc9082b19 offset: 32 } +member { + id: 0x7f0b2856 + name: "streamStage" + type_id: 0xc5d40180 + offset: 27584 +} +member { + id: 0x7f969969 + name: "streamStage" + type_id: 0x586204f1 + offset: 241632 +} member { id: 0xf293b35f name: "stream_allow" @@ -190608,6 +193740,13 @@ member { type_id: 0x352b5569 offset: 384 } +member { + id: 0xa91c3239 + name: "supports_gmii" + type_id: 0x4585663f + offset: 130 + bitsize: 1 +} member { id: 0x07459d54 name: "supports_multi_frame" @@ -191523,6 +194662,12 @@ member { type_id: 0xe6d2b814 offset: 1664 } +member { + id: 0x49ba8bd8 + name: "symbolCosts" + type_id: 0x32ba5d4d + offset: 704 +} member { id: 0x47f7d183 name: "symbol_duration" @@ -193208,6 +196353,18 @@ member { name: "table" type_id: 0x1d33485a } +member { + id: 0x5cce5f02 + name: "tableEnd" + type_id: 0x18bd6530 + offset: 192 +} +member { + id: 0x56a634cd + name: "tableValidEnd" + type_id: 0x18bd6530 + offset: 256 +} member { id: 0x7e00079e name: "table_count" @@ -193308,6 +196465,12 @@ member { type_id: 0x6720d32f offset: 256 } +member { + id: 0xf66a8138 + name: "tagTable" + type_id: 0x3c89d7ea + offset: 448 +} member { id: 0xb3d26038 name: "tag_alloc_policy" @@ -193674,6 +196837,18 @@ member { name: "target" type_id: 0x78ea2ea9 } +member { + id: 0x34b0d181 + name: "targetCBlockSize" + type_id: 0xf435685e + offset: 448 +} +member { + id: 0x263d72fa + name: "targetLength" + type_id: 0x4585663f + offset: 160 +} member { id: 0xa84c5abd name: "target_abort" @@ -197376,6 +200551,11 @@ member { type_id: 0x3fa31951 offset: 128 } +member { + id: 0xae5434ed + name: "total_len" + type_id: 0x1c898f28 +} member { id: 0xaebc880a name: "total_len" @@ -199294,6 +202474,12 @@ member { type_id: 0x32af5236 offset: 64 } +member { + id: 0xe0ac849f + name: "tuners" + type_id: 0x18bd6530 + offset: 1408 +} member { id: 0xf9365f78 name: "tuning_count" @@ -203986,6 +207172,12 @@ member { type_id: 0x33756485 offset: 2304 } +member { + id: 0x70716d55 + name: "up_threshold" + type_id: 0x4585663f + offset: 1568 +} member { id: 0xd6886f0b name: "update" @@ -204123,6 +207315,12 @@ member { type_id: 0x2c434a70 offset: 448 } +member { + id: 0x5ec30cf4 + name: "update_mutex" + type_id: 0xa7c362b0 + offset: 64 +} member { id: 0x40ac767e name: "update_plane" @@ -204909,6 +208107,18 @@ member { name: "use" type_id: 0xa722c13e } +member { + id: 0x2667e354 + name: "useBlockSplitter" + type_id: 0xedf771b8 + offset: 1120 +} +member { + id: 0x022f5d58 + name: "useRowMatchFinder" + type_id: 0xedf771b8 + offset: 1152 +} member { id: 0x74903dfa name: "use_10_for_ms" @@ -206286,17 +209496,41 @@ member { name: "v1" type_id: 0x6d0d4c04 } +member { + id: 0x544ee751 + name: "v1" + type_id: 0x1c898f28 + offset: 64 +} member { id: 0x987fa9b5 name: "v2" type_id: 0xe10a7e38 } +member { + id: 0x98822386 + name: "v2" + type_id: 0x1c898f28 + offset: 128 +} member { id: 0x76466478 name: "v2_groups_user_writable" type_id: 0x6d7f5ff6 offset: 96 } +member { + id: 0xdaceb289 + name: "v3" + type_id: 0x1c898f28 + offset: 192 +} +member { + id: 0x190d1102 + name: "v4" + type_id: 0x1c898f28 + offset: 256 +} member { id: 0x195445f8 name: "v4" @@ -206618,6 +209852,18 @@ member { type_id: 0xbbd6353d offset: 832 } +member { + id: 0xdf4f7b1b + name: "val_in" + type_id: 0xe8034002 + offset: 32 +} +member { + id: 0xc7438034 + name: "val_out" + type_id: 0xe8034002 + offset: 48 +} member { id: 0xe2ab09c2 name: "valid" @@ -206746,6 +209992,18 @@ member { name: "validate" type_id: 0x0de2370a } +member { + id: 0x96463e67 + name: "validateChecksum" + type_id: 0xe03de1c1 + offset: 240768 +} +member { + id: 0xf4df9d7e + name: "validateSequences" + type_id: 0x6720d32f + offset: 1088 +} member { id: 0x0d93a039 name: "validate_device" @@ -207166,6 +210424,12 @@ member { type_id: 0x0610b875 offset: 3072 } +member { + id: 0x2ab87e79 + name: "vblank" + type_id: 0x0610b875 + offset: 320 +} member { id: 0x058ab903 name: "vblank_disable_immediate" @@ -207348,6 +210612,12 @@ member { name: "vdev" type_id: 0x242fbc95 } +member { + id: 0xebd4d4b4 + name: "vdev" + type_id: 0x242fbc95 + offset: 64 +} member { id: 0xebd9c964 name: "vdev" @@ -208953,6 +212223,12 @@ member { name: "virtual" type_id: 0x18bd6530 } +member { + id: 0xda0ff87c + name: "virtualStart" + type_id: 0x391f15ea + offset: 239232 +} member { id: 0x666c6855 name: "visible" @@ -211367,12 +214643,34 @@ member { name: "window" type_id: 0xbb548821 } +member { + id: 0x1078ab10 + name: "window" + type_id: 0x983802c3 +} member { id: 0x10a51295 name: "window" type_id: 0x4585663f offset: 64 } +member { + id: 0x7b7d26c0 + name: "windowLog" + type_id: 0xe03de1c1 + offset: 160 +} +member { + id: 0x7bd893a7 + name: "windowLog" + type_id: 0x4585663f +} +member { + id: 0x6f642f92 + name: "windowSize" + type_id: 0xd5df6730 + offset: 64 +} member { id: 0x98ad753d name: "window_clamp" @@ -211705,6 +215003,12 @@ member { type_id: 0x1f3c8679 offset: 512 } +member { + id: 0xd6e66d11 + name: "work" + type_id: 0x1f3c8679 + offset: 896 +} member { id: 0xd6e66e75 name: "work" @@ -211753,12 +215057,24 @@ member { type_id: 0x6720d32f offset: 1984 } +member { + id: 0x5894f298 + name: "work_count" + type_id: 0x74d29cf1 + offset: 576 +} member { id: 0x4bd8dff1 name: "work_flags" type_id: 0x33756485 offset: 192 } +member { + id: 0x98b9a598 + name: "work_in_progress" + type_id: 0x6d7f5ff6 + offset: 1544 +} member { id: 0x44ded5a9 name: "work_irq_change" @@ -211938,12 +215254,47 @@ member { type_id: 0x18db1c77 offset: 13888 } +member { + id: 0xc57ca714 + name: "workspace" + type_id: 0x18bd6530 +} member { id: 0xc57cac0c name: "workspace" type_id: 0x18bd6530 offset: 512 } +member { + id: 0xc5950653 + name: "workspace" + type_id: 0xf11ce43a + offset: 4480 +} +member { + id: 0xc5ddab13 + name: "workspace" + type_id: 0xb9bf4900 + offset: 213312 +} +member { + id: 0xc5e991ab + name: "workspace" + type_id: 0x8d8091e6 + offset: 218592 +} +member { + id: 0x9feed009 + name: "workspaceEnd" + type_id: 0x18bd6530 + offset: 64 +} +member { + id: 0xad8e7035 + name: "workspaceOversizedDuration" + type_id: 0x6720d32f + offset: 416 +} member { id: 0x15b05608 name: "wounded" @@ -213558,6 +216909,11 @@ member { type_id: 0x1285100d offset: 512 } +member { + id: 0x4f5aac7d + name: "xhci" + type_id: 0x1285100d +} member { id: 0x4f771184 name: "xhci" @@ -213866,6 +217222,18 @@ member { type_id: 0x6720d32f offset: 384 } +member { + id: 0x7ae8d1f8 + name: "xxhState" + type_id: 0xed0c1514 + offset: 240000 +} +member { + id: 0x7ae8d4a3 + name: "xxhState" + type_id: 0xed0c1514 + offset: 5248 +} member { id: 0xff142554 name: "y" @@ -214352,6 +217720,17 @@ struct_union { member_id: 0x24c024d3 } } +struct_union { + id: 0x00696898 + kind: STRUCT + definition { + bytesize: 8 + member_id: 0x6003f387 + member_id: 0x179b58a3 + member_id: 0xd9cafbff + member_id: 0x1bc44f4f + } +} struct_union { id: 0x0098e4bc kind: STRUCT @@ -214364,6 +217743,14 @@ struct_union { member_id: 0x317e66e0 } } +struct_union { + id: 0x00b1c6b3 + kind: STRUCT + definition { + bytesize: 8 + member_id: 0x637609a2 + } +} struct_union { id: 0x00b57da4 kind: STRUCT @@ -214418,6 +217805,15 @@ struct_union { member_id: 0x8d3c6bdd } } +struct_union { + id: 0x013ffd42 + kind: STRUCT + definition { + bytesize: 312 + member_id: 0x652ee64b + member_id: 0x60002d72 + } +} struct_union { id: 0x015e6d97 kind: STRUCT @@ -214615,6 +218011,16 @@ struct_union { member_id: 0x4bf9b0b2 } } +struct_union { + id: 0x04a45409 + kind: STRUCT + definition { + bytesize: 24 + member_id: 0x73668a85 + member_id: 0x464628e3 + member_id: 0x8fe420e4 + } +} struct_union { id: 0x04d2ff93 kind: STRUCT @@ -214651,6 +218057,18 @@ struct_union { member_id: 0x7203ed5f } } +struct_union { + id: 0x04f29774 + kind: STRUCT + definition { + bytesize: 40 + member_id: 0x726ef231 + member_id: 0x15e2e39d + member_id: 0x5ef7409d + member_id: 0x98d357b6 + member_id: 0x34c2f79e + } +} struct_union { id: 0x0524ca4e kind: STRUCT @@ -214824,6 +218242,20 @@ struct_union { member_id: 0x40d10a15 } } +struct_union { + id: 0x068dfa4d + kind: STRUCT + definition { + bytesize: 28 + member_id: 0x7bd893a7 + member_id: 0x5ece371f + member_id: 0xa7c7be11 + member_id: 0x0d9fc4e5 + member_id: 0x27aaccd1 + member_id: 0x263d72fa + member_id: 0xc8989784 + } +} struct_union { id: 0x06b074d3 kind: STRUCT @@ -214922,6 +218354,17 @@ struct_union { member_id: 0x2d82ccd6 } } +struct_union { + id: 0x086f0af0 + kind: STRUCT + definition { + bytesize: 24 + member_id: 0x406ecc6d + member_id: 0x63deba8f + member_id: 0x2abbf01c + member_id: 0xc0d83387 + } +} struct_union { id: 0x08c660f0 kind: STRUCT @@ -215383,6 +218826,15 @@ struct_union { member_id: 0xfdc1a7ec } } +struct_union { + id: 0x0d816424 + kind: STRUCT + definition { + bytesize: 2064 + member_id: 0x57f6e5ec + member_id: 0x42661200 + } +} struct_union { id: 0x0dcb7fb1 kind: STRUCT @@ -215673,6 +219125,33 @@ struct_union { member_id: 0x1e9935be } } +struct_union { + id: 0x0f81c877 + kind: STRUCT + definition { + bytesize: 3552 + member_id: 0x5ff2109c + member_id: 0x44a9de46 + member_id: 0x8bae645e + member_id: 0x5d0dee4a + member_id: 0xe2a9b545 + member_id: 0x561bb077 + } +} +struct_union { + id: 0x0fa12bbc + kind: STRUCT + definition { + bytesize: 40 + member_id: 0x5f5a29f4 + member_id: 0x6f642f92 + member_id: 0xf0ca1475 + member_id: 0x8cd83645 + member_id: 0xcfded760 + member_id: 0x792af2d8 + member_id: 0x691ba5d3 + } +} struct_union { id: 0x0fe17a60 kind: STRUCT @@ -216010,6 +219489,15 @@ struct_union { member_id: 0x3c63eeb5 } } +struct_union { + id: 0x130c2f2d + kind: STRUCT + definition { + bytesize: 40 + member_id: 0x2deaf434 + member_id: 0x6b5bed82 + } +} struct_union { id: 0x130fee63 kind: STRUCT @@ -216510,6 +219998,16 @@ struct_union { member_id: 0x7c9e0569 } } +struct_union { + id: 0x16bccc8b + kind: STRUCT + definition { + bytesize: 12 + member_id: 0x3b2be20f + member_id: 0x69390df6 + member_id: 0xfa429294 + } +} struct_union { id: 0x16bd7b7f kind: STRUCT @@ -216955,6 +220453,19 @@ struct_union { member_id: 0xd3ff70d7 } } +struct_union { + id: 0x1c64cc7b + kind: STRUCT + definition { + bytesize: 2112 + member_id: 0x1078ab10 + member_id: 0x5a47bf67 + member_id: 0xce7d36ef + member_id: 0x5059408a + member_id: 0x8611dbc4 + member_id: 0x9cfd71c5 + } +} struct_union { id: 0x1cac6f1f kind: STRUCT @@ -217314,6 +220825,30 @@ struct_union { member_id: 0x0a453636 } } +struct_union { + id: 0x22fb3d9c + kind: STRUCT + definition { + bytesize: 104 + member_id: 0xea98a8c3 + member_id: 0xc5a177ed + member_id: 0xec344c76 + member_id: 0x9e84637c + member_id: 0xe423f3ca + member_id: 0x8ccba0aa + member_id: 0xbe44256e + member_id: 0xa358b05b + member_id: 0xf1e0bd44 + member_id: 0x3d2b3fdf + member_id: 0xde2cd712 + member_id: 0xde41c854 + member_id: 0xdb61bd71 + member_id: 0x1cf5cc4c + member_id: 0x349965a4 + member_id: 0x49ba8bd8 + member_id: 0xf2c3d5eb + } +} struct_union { id: 0x230a7397 kind: STRUCT @@ -217323,6 +220858,15 @@ struct_union { member_id: 0x566e6aad } } +struct_union { + id: 0x23442f91 + kind: STRUCT + definition { + bytesize: 5632 + member_id: 0xecf31266 + member_id: 0x52bf4ec6 + } +} struct_union { id: 0x234d9a32 kind: STRUCT @@ -217341,6 +220885,15 @@ struct_union { member_id: 0xcf559a09 } } +struct_union { + id: 0x23d5fe5b + kind: STRUCT + definition { + bytesize: 5616 + member_id: 0xee4581a6 + member_id: 0xa36ba6f2 + } +} struct_union { id: 0x23df18eb kind: STRUCT @@ -217523,6 +221076,24 @@ struct_union { member_id: 0xcbedee18 } } +struct_union { + id: 0x267ad445 + kind: STRUCT + definition { + bytesize: 80 + member_id: 0xf83fbf3b + member_id: 0x65849304 + member_id: 0x79d2abf0 + member_id: 0x03c74a5b + member_id: 0x02319fdc + member_id: 0xacfc3c5d + member_id: 0x67a97c3f + member_id: 0x77cb6f61 + member_id: 0xf68fe2c5 + member_id: 0x11e329ba + member_id: 0x304bda54 + } +} struct_union { id: 0x269c0575 kind: STRUCT @@ -217532,6 +221103,18 @@ struct_union { member_id: 0x86d928a7 } } +struct_union { + id: 0x26e08250 + kind: STRUCT + definition { + bytesize: 40 + member_id: 0xfa156a71 + member_id: 0x265029fc + member_id: 0x20acbe4b + member_id: 0xd98a21d3 + member_id: 0xa7eab976 + } +} struct_union { id: 0x26eb875a kind: STRUCT @@ -217675,6 +221258,28 @@ struct_union { member_id: 0x9683f73d } } +struct_union { + id: 0x28527001 + kind: STRUCT + definition { + bytesize: 28 + member_id: 0xc073994f + member_id: 0x8b3508ce + member_id: 0x7fa82be4 + member_id: 0x85fdbd64 + member_id: 0x52bf463e + } +} +struct_union { + id: 0x286453e8 + kind: STRUCT + definition { + bytesize: 144 + member_id: 0xc0092974 + member_id: 0x294259bd + member_id: 0x37e0c767 + } +} struct_union { id: 0x286a95aa kind: STRUCT @@ -217685,6 +221290,20 @@ struct_union { member_id: 0xeda56411 } } +struct_union { + id: 0x286ef23f + kind: STRUCT + definition { + bytesize: 1496 + member_id: 0xc09c49b3 + member_id: 0x9639d988 + member_id: 0xabfd519b + member_id: 0x06716b72 + member_id: 0x9f0a1499 + member_id: 0xc5666d22 + member_id: 0x96605633 + } +} struct_union { id: 0x2880e524 kind: STRUCT @@ -217699,6 +221318,23 @@ struct_union { member_id: 0x9062658a } } +struct_union { + id: 0x2914b97f + kind: STRUCT + definition { + bytesize: 64 + member_id: 0xc57ca714 + member_id: 0x9feed009 + member_id: 0xbf09b1f9 + member_id: 0x5cce5f02 + member_id: 0x56a634cd + member_id: 0xf545c70b + member_id: 0x43b81a7a + member_id: 0xad8e7035 + member_id: 0x39f70fa5 + member_id: 0x55db514e + } +} struct_union { id: 0x29723727 kind: STRUCT @@ -217748,6 +221384,16 @@ struct_union { member_id: 0x03e839a0 } } +struct_union { + id: 0x2b2f5cc5 + kind: STRUCT + definition { + bytesize: 296 + member_id: 0xcd56d56a + member_id: 0x5a930e05 + member_id: 0x261eff3f + } +} struct_union { id: 0x2b398725 kind: STRUCT @@ -217892,6 +221538,19 @@ struct_union { member_id: 0x5a9199d6 } } +struct_union { + id: 0x2d556433 + kind: STRUCT + definition { + bytesize: 168 + member_id: 0xd4f6a60e + member_id: 0x125f0d3a + member_id: 0x7ac6df65 + member_id: 0x643c2871 + member_id: 0x59aa2ab1 + member_id: 0xbddde122 + } +} struct_union { id: 0x2d57d375 kind: STRUCT @@ -218215,6 +221874,14 @@ struct_union { member_id: 0x0bbd01bc } } +struct_union { + id: 0x334e168e + kind: STRUCT + definition { + bytesize: 8 + member_id: 0xac894956 + } +} struct_union { id: 0x337e48e0 kind: STRUCT @@ -218379,6 +222046,17 @@ struct_union { member_id: 0xa3eadf0a } } +struct_union { + id: 0x35d6b2a8 + kind: STRUCT + definition { + bytesize: 32 + member_id: 0xb6fda2c9 + member_id: 0x16c71db5 + member_id: 0xbcfc5a69 + member_id: 0xe628fbc5 + } +} struct_union { id: 0x36592664 kind: STRUCT @@ -218566,6 +222244,14 @@ struct_union { member_id: 0x282acc7e } } +struct_union { + id: 0x3910b1bc + kind: STRUCT + definition { + bytesize: 384 + member_id: 0x85f3d59d + } +} struct_union { id: 0x391f3c9e kind: STRUCT @@ -218679,6 +222365,15 @@ struct_union { member_id: 0xbec140a3 } } +struct_union { + id: 0x3a8f3cdf + kind: STRUCT + definition { + bytesize: 8 + member_id: 0x8b3505f5 + member_id: 0xb8e5e58c + } +} struct_union { id: 0x3a9c9162 kind: STRUCT @@ -218777,6 +222472,29 @@ struct_union { member_id: 0x8fa57542 } } +struct_union { + id: 0x3b9fe3c1 + kind: STRUCT + definition { + bytesize: 24 + member_id: 0x8fe1343f + member_id: 0x2ff71978 + member_id: 0x5f4c0297 + } +} +struct_union { + id: 0x3bac696f + kind: STRUCT + definition { + bytesize: 27292 + member_id: 0x8ffa6faf + member_id: 0xfaa589d9 + member_id: 0x7c3b62f2 + member_id: 0xcced8a56 + member_id: 0x52bf48c6 + member_id: 0xc5ddab13 + } +} struct_union { id: 0x3bf747f0 kind: STRUCT @@ -218796,6 +222514,19 @@ struct_union { member_id: 0x64b75781 } } +struct_union { + id: 0x3c449d3f + kind: STRUCT + definition { + bytesize: 40 + member_id: 0x902698df + member_id: 0x85ed5e1e + member_id: 0x12dc8916 + member_id: 0xccb90f8f + member_id: 0xced54d54 + member_id: 0x83255b44 + } +} struct_union { id: 0x3c5324e7 kind: STRUCT @@ -218925,6 +222656,25 @@ struct_union { member_id: 0x75b365a3 } } +struct_union { + id: 0x3e8dd4eb + kind: STRUCT + definition { + bytesize: 12 + member_id: 0x9bfce125 + member_id: 0x7a2d2208 + member_id: 0x8cc552aa + } +} +struct_union { + id: 0x3e99d26f + kind: STRUCT + definition { + bytesize: 8 + member_id: 0x9bfce125 + member_id: 0x2abbf4a4 + } +} struct_union { id: 0x3ea35fa7 kind: STRUCT @@ -218935,6 +222685,17 @@ struct_union { member_id: 0x54860550 } } +struct_union { + id: 0x3ea49399 + kind: STRUCT + definition { + bytesize: 16 + member_id: 0x9b5959a2 + member_id: 0x7a889a8f + member_id: 0x8c60ea2d + member_id: 0x52d00994 + } +} struct_union { id: 0x3ec2433c kind: STRUCT @@ -218979,6 +222740,19 @@ struct_union { member_id: 0x890eb38b } } +struct_union { + id: 0x3edccedf + kind: STRUCT + definition { + bytesize: 24 + member_id: 0x9a65905e + member_id: 0xa7620f4c + member_id: 0xdaea1090 + member_id: 0xabbac934 + member_id: 0xbe0d84d2 + member_id: 0x7b7d26c0 + } +} struct_union { id: 0x3eeed082 kind: STRUCT @@ -219422,6 +223196,16 @@ struct_union { member_id: 0x2380a48f } } +struct_union { + id: 0x45635409 + kind: UNION + definition { + bytesize: 8 + member_id: 0x4e45f6b9 + member_id: 0x23e7eda8 + member_id: 0x36752b74 + } +} struct_union { id: 0x458861c9 kind: UNION @@ -220016,6 +223800,16 @@ struct_union { member_id: 0x179bf477 } } +struct_union { + id: 0x4ff4d296 + kind: UNION + definition { + bytesize: 8 + member_id: 0x64171333 + member_id: 0x2f1819a7 + member_id: 0x36752b74 + } +} struct_union { id: 0x4fff3cac kind: UNION @@ -220831,6 +224625,15 @@ struct_union { member_id: 0x2d6cb85c } } +struct_union { + id: 0x5da4f9cd + kind: UNION + definition { + bytesize: 384 + member_id: 0x2d8fb06b + member_id: 0xf7205a4d + } +} struct_union { id: 0x5daaef8e kind: UNION @@ -223066,6 +226869,11 @@ struct_union { member_id: 0xf076633c } } +struct_union { + id: 0x0325d3e5 + kind: STRUCT + name: "POOL_ctx_s" +} struct_union { id: 0x90759a8b kind: STRUCT @@ -223234,6 +227042,220 @@ struct_union { member_id: 0x337e081c } } +struct_union { + id: 0xe4508c71 + kind: STRUCT + name: "ZSTD_CCtx_params_s" + definition { + bytesize: 176 + member_id: 0x08012e1a + member_id: 0x2deaf90f + member_id: 0x6b5bee0d + member_id: 0x73c7d7ac + member_id: 0x6a99477a + member_id: 0x34b0d181 + member_id: 0x8a717ef8 + member_id: 0x4f8c8b1f + member_id: 0xf2c3d437 + member_id: 0xb0b85598 + member_id: 0x073b7679 + member_id: 0xaa964bee + member_id: 0x77214c23 + member_id: 0xe6a8fb05 + member_id: 0xbeca763e + member_id: 0x907b51f2 + member_id: 0x2a97c2ae + member_id: 0x52000926 + member_id: 0xf4df9d7e + member_id: 0x2667e354 + member_id: 0x022f5d58 + member_id: 0x6b5e641b + member_id: 0x4680267d + } +} +struct_union { + id: 0xf44d0c06 + kind: STRUCT + name: "ZSTD_CCtx_s" + definition { + bytesize: 5056 + member_id: 0x59b8803f + member_id: 0xb63fc6f0 + member_id: 0x7cf0bb43 + member_id: 0x527156f3 + member_id: 0xa29f8db8 + member_id: 0xc711f856 + member_id: 0x798f4f8e + member_id: 0x916608c0 + member_id: 0xc5950653 + member_id: 0xbdcf6c62 + member_id: 0x5bdf820f + member_id: 0xcce78d2f + member_id: 0x8cc0018d + member_id: 0x7ae8d4a3 + member_id: 0x46802999 + member_id: 0xdeba800a + member_id: 0x17b3f422 + member_id: 0x556778f1 + member_id: 0x145559c6 + member_id: 0xd568c2b2 + member_id: 0xea5da736 + member_id: 0x6cce8763 + member_id: 0x771fd023 + member_id: 0x31e521b5 + member_id: 0x073a9077 + member_id: 0xc7623cc5 + member_id: 0x9142f069 + member_id: 0xec9ac921 + member_id: 0x6fe6ecc3 + member_id: 0x226396f4 + member_id: 0x40c0340e + member_id: 0x60842018 + member_id: 0x53ac3784 + member_id: 0xa3a930b3 + member_id: 0x7faaa812 + member_id: 0xfeddd644 + member_id: 0xf0efeb94 + member_id: 0x7f0b2856 + member_id: 0x1d7944d3 + member_id: 0x546aa8f5 + member_id: 0x6ecb1610 + member_id: 0xddb417f2 + member_id: 0x34cbd8ad + member_id: 0xa7fefdee + member_id: 0x9baa09ed + } +} +struct_union { + id: 0x7050ea6c + kind: STRUCT + name: "ZSTD_CDict_s" +} +struct_union { + id: 0xfccfd3da + kind: STRUCT + name: "ZSTD_DCtx_s" + definition { + bytesize: 95936 + member_id: 0xb4394e6d + member_id: 0x501e3f82 + member_id: 0xae5bb8e4 + member_id: 0x6c3e5929 + member_id: 0xec6fd68f + member_id: 0xc5e991ab + member_id: 0x15591d3d + member_id: 0x5e21364d + member_id: 0xda0ff87c + member_id: 0x548eced0 + member_id: 0xcff08be5 + member_id: 0x6bfb3eac + member_id: 0x3e770b46 + member_id: 0x75f9c2dd + member_id: 0x3d2adc24 + member_id: 0x59dd6bd3 + member_id: 0x21ffee06 + member_id: 0x7a15a4fa + member_id: 0x7ae8d1f8 + member_id: 0xcf6f6a1c + member_id: 0x08012386 + member_id: 0x311068d5 + member_id: 0x96463e67 + member_id: 0xf0490dcd + member_id: 0x46802880 + member_id: 0x560a0111 + member_id: 0x675ef59b + member_id: 0x17b3fed2 + member_id: 0x9f20773d + member_id: 0x200f159f + member_id: 0x798f4b1d + member_id: 0x4dae3f4b + member_id: 0x6c568bb1 + member_id: 0x1c2b70c8 + member_id: 0xd9dec80b + member_id: 0x7f969969 + member_id: 0x6fe6eabf + member_id: 0x22639f20 + member_id: 0x75ccff1e + member_id: 0xeebaee51 + member_id: 0xa3a93849 + member_id: 0x7faaa7a8 + member_id: 0x7df4b00e + member_id: 0x92c69e89 + member_id: 0xeae2e7ff + member_id: 0x838059e6 + member_id: 0x02d1e0b7 + member_id: 0x2a97c1ae + member_id: 0xdfafd2f4 + member_id: 0xd167c0a5 + member_id: 0x0b8bed37 + member_id: 0x647b5cd7 + member_id: 0xf17886d2 + member_id: 0x863e4b4b + member_id: 0x6fffd1d0 + } +} +struct_union { + id: 0x4a086f19 + kind: STRUCT + name: "ZSTD_DDict_s" +} +struct_union { + id: 0xd7309b2f + kind: STRUCT + name: "ZSTD_inBuffer_s" + definition { + bytesize: 24 + member_id: 0x440f7510 + member_id: 0xd98a2dfb + member_id: 0x265024df + } +} +struct_union { + id: 0x03877e6b + kind: STRUCT + name: "ZSTD_matchState_t" + definition { + bytesize: 280 + member_id: 0x1078ab10 + member_id: 0xce7d30ba + member_id: 0x1570bb99 + member_id: 0x421ec1db + member_id: 0x7e3fe576 + member_id: 0xf66a8138 + member_id: 0x5b2bae23 + member_id: 0x5a4b0058 + member_id: 0xad919854 + member_id: 0x4bc073a3 + member_id: 0xf1788758 + member_id: 0xd14976e8 + member_id: 0xf6545785 + member_id: 0xa8f0e40c + member_id: 0x2deaf5ea + member_id: 0x103c788d + } +} +struct_union { + id: 0x7fd1d386 + kind: STRUCT + name: "ZSTD_outBuffer_s" + definition { + bytesize: 24 + member_id: 0xbbe91447 + member_id: 0xd98a2dfb + member_id: 0x265024df + } +} +struct_union { + id: 0xe5689103 + kind: STRUCT + name: "ZSTD_prefixDict_s" + definition { + bytesize: 24 + member_id: 0x15e2e77c + member_id: 0x5ef74dbe + member_id: 0x98d356bd + } +} struct_union { id: 0xac1494ba kind: STRUCT @@ -225274,6 +229296,17 @@ struct_union { member_id: 0xa06fe161 } } +struct_union { + id: 0x88ce7bb2 + kind: STRUCT + name: "blk_plug_cb" + definition { + bytesize: 32 + member_id: 0x7c00ef52 + member_id: 0x56f376f1 + member_id: 0xff8a91c0 + } +} struct_union { id: 0x54a4079a kind: STRUCT @@ -228093,6 +232126,15 @@ struct_union { member_id: 0xf05f0ba9 } } +struct_union { + id: 0x68c4dafa + kind: STRUCT + name: "comp_alg_common" + definition { + bytesize: 384 + member_id: 0x85f3d59d + } +} struct_union { id: 0x32c940eb kind: STRUCT @@ -229093,6 +233135,15 @@ struct_union { member_id: 0x8597be7c } } +struct_union { + id: 0x3f2f5059 + kind: STRUCT + name: "crypto_scomp" + definition { + bytesize: 32 + member_id: 0x8597be7c + } +} struct_union { id: 0x75a847f0 kind: STRUCT @@ -229374,6 +233425,39 @@ struct_union { kind: STRUCT name: "dax_device" } +struct_union { + id: 0xcbce42ed + kind: STRUCT + name: "dbs_data" + definition { + bytesize: 208 + member_id: 0x2ae4a5b7 + member_id: 0xbf2d12a5 + member_id: 0xe0ac849f + member_id: 0xeb82ce95 + member_id: 0xf64611c2 + member_id: 0x11ed2432 + member_id: 0x70716d55 + member_id: 0xfe460429 + } +} +struct_union { + id: 0xd645a65a + kind: STRUCT + name: "dbs_governor" + definition { + bytesize: 240 + member_id: 0xbf2e3fb2 + member_id: 0x84231c09 + member_id: 0xd05bee08 + member_id: 0x8b18c6d7 + member_id: 0x45ecb8fc + member_id: 0xfeafc015 + member_id: 0x1ac4b43b + member_id: 0x0d2d31b0 + member_id: 0x46159782 + } +} struct_union { id: 0x2f823c0e kind: STRUCT @@ -233832,6 +237916,19 @@ struct_union { member_id: 0xf00bd56d } } +struct_union { + id: 0xeb2e4c63 + kind: STRUCT + name: "drm_vblank_work" + definition { + bytesize: 80 + member_id: 0x85e2db57 + member_id: 0x2ab87e79 + member_id: 0x65b77d65 + member_id: 0x8fa8cc5b + member_id: 0x0fa6cdb7 + } +} struct_union { id: 0x5547943d kind: STRUCT @@ -238888,6 +242985,11 @@ struct_union { member_id: 0x4ad3016e } } +struct_union { + id: 0xeee4a512 + kind: STRUCT + name: "gzvm" +} struct_union { id: 0xa183eb2c kind: STRUCT @@ -247236,6 +251338,21 @@ struct_union { member_id: 0xbfb9c035 } } +struct_union { + id: 0xe9bc0c6b + kind: STRUCT + name: "kunit_resource" + definition { + bytesize: 64 + member_id: 0xff8a9909 + member_id: 0x0de57809 + member_id: 0xfe26bb4e + member_id: 0x05ec0c9b + member_id: 0x0fa6c604 + member_id: 0x1a2cfce7 + member_id: 0x2d081245 + } +} struct_union { id: 0xb2e34d06 kind: STRUCT @@ -249179,6 +253296,17 @@ struct_union { member_id: 0x97fb3277 } } +struct_union { + id: 0xb4852d9d + kind: STRUCT + name: "media_entity_notify" + definition { + bytesize: 32 + member_id: 0x7c00ef52 + member_id: 0x8f9077d2 + member_id: 0x56f94a47 + } +} struct_union { id: 0x6d52e181 kind: STRUCT @@ -249661,6 +253789,36 @@ struct_union { member_id: 0x3bc101ea } } +struct_union { + id: 0x62249e35 + kind: STRUCT + name: "mii_if_info" + definition { + bytesize: 48 + member_id: 0xad6edd33 + member_id: 0x9f16e345 + member_id: 0xd6e5c6b0 + member_id: 0x386b59a8 + member_id: 0x9034a01c + member_id: 0x5c082ca7 + member_id: 0xa91c3239 + member_id: 0xce0b4ca0 + member_id: 0x8da29d66 + member_id: 0x2fb1c3e7 + } +} +struct_union { + id: 0xfdc61042 + kind: STRUCT + name: "mii_ioctl_data" + definition { + bytesize: 8 + member_id: 0xade1fea0 + member_id: 0x5b0ec69f + member_id: 0xdf4f7b1b + member_id: 0xc7438034 + } +} struct_union { id: 0x0e1ea6e1 kind: STRUCT @@ -255793,8 +259951,8 @@ struct_union { member_id: 0x0e5ac226 member_id: 0x0c6030af member_id: 0x30a9cfe3 - member_id: 0x637600aa - member_id: 0xac894f3f + member_id: 0x3293400e + member_id: 0x3036aec8 member_id: 0xe0f63cd3 member_id: 0x22369471 member_id: 0x667752ee @@ -256125,6 +260283,27 @@ struct_union { member_id: 0x20a07181 } } +struct_union { + id: 0xf5312fdb + kind: STRUCT + name: "policy_dbs_info" + definition { + bytesize: 200 + member_id: 0x60e88f7d + member_id: 0x5ec30cf4 + member_id: 0xa444a488 + member_id: 0x73f4b0b4 + member_id: 0x5894f298 + member_id: 0xed01f566 + member_id: 0xd6e66d11 + member_id: 0xef2014c6 + member_id: 0x7c00e5d1 + member_id: 0xe9d2a54b + member_id: 0x3bb616b6 + member_id: 0x70e54a35 + member_id: 0x98b9a598 + } +} struct_union { id: 0x9146342b kind: STRUCT @@ -258036,6 +262215,16 @@ struct_union { member_id: 0x2d1fec2e } } +struct_union { + id: 0x788c732d + kind: STRUCT + name: "rc_map_list" + definition { + bytesize: 56 + member_id: 0x7c00ef52 + member_id: 0x8d9e156c + } +} struct_union { id: 0xed49aaad kind: STRUCT @@ -261199,6 +265388,19 @@ struct_union { member_id: 0x87a2e798 } } +struct_union { + id: 0x770ad128 + kind: STRUCT + name: "scomp_alg" + definition { + bytesize: 416 + member_id: 0xe88a78ff + member_id: 0xca5fdeb2 + member_id: 0x796a0d2b + member_id: 0x7543ba54 + member_id: 0x34a2a2dc + } +} struct_union { id: 0xd412973b kind: STRUCT @@ -262010,6 +266212,17 @@ struct_union { member_id: 0x46d7c905 } } +struct_union { + id: 0x297dc0e5 + kind: STRUCT + name: "seqDef_s" + definition { + bytesize: 8 + member_id: 0x2fa85e77 + member_id: 0x7a157850 + member_id: 0x89fcf52d + } +} struct_union { id: 0x33eb3ac5 kind: STRUCT @@ -276702,6 +280915,55 @@ struct_union { member_id: 0xfa2232ae } } +struct_union { + id: 0x41309f82 + kind: STRUCT + name: "virtio_pci_common_cfg" + definition { + bytesize: 56 + member_id: 0xd95da316 + member_id: 0xc47b3e49 + member_id: 0x2215d0b7 + member_id: 0x97ec73b1 + member_id: 0xff0492f7 + member_id: 0x81dafbbb + member_id: 0x20b6c745 + member_id: 0xba1fc391 + member_id: 0xf9147078 + member_id: 0x1051be22 + member_id: 0x4ff19e6a + member_id: 0x0ec52ad2 + member_id: 0x02805e25 + member_id: 0xccb15a57 + member_id: 0x46fda583 + member_id: 0x22f308b7 + member_id: 0xacf8a4d7 + member_id: 0x1eafa16a + member_id: 0x995fb916 + } +} +struct_union { + id: 0x761d9683 + kind: STRUCT + name: "virtio_pci_modern_device" + definition { + bytesize: 104 + member_id: 0x2d364a2a + member_id: 0x6405c35b + member_id: 0xea2a9c62 + member_id: 0x523703dc + member_id: 0x79e5f28d + member_id: 0xd3c71d2e + member_id: 0x196648bf + member_id: 0x3a4ec330 + member_id: 0xcdb60d26 + member_id: 0xafcd98a5 + member_id: 0x5ec01d30 + member_id: 0xccec4558 + member_id: 0x815f321e + member_id: 0x4db0775f + } +} struct_union { id: 0x863aeeaf kind: STRUCT @@ -278921,9 +283183,17 @@ struct_union { } } struct_union { - id: 0x03a8af11 + id: 0x1916197d kind: STRUCT name: "xhci_sideband" + definition { + bytesize: 320 + member_id: 0x4f5aac7d + member_id: 0xebd4d4b4 + member_id: 0x4560eebd + member_id: 0x5dd91f3e + member_id: 0xad89869d + } } struct_union { id: 0x051dcd31 @@ -279004,7 +283274,7 @@ struct_union { member_id: 0x2d5bfa55 member_id: 0x94facea2 member_id: 0x9b75f88d - member_id: 0x37c414f0 + member_id: 0x37c2bb5d } } struct_union { @@ -279029,7 +283299,7 @@ struct_union { member_id: 0x07daf4d5 member_id: 0x19f52f20 member_id: 0x0482303b - member_id: 0x37c4126e + member_id: 0x37c2bdc3 } } struct_union { @@ -279229,6 +283499,21 @@ struct_union { member_id: 0x9e5f1e4b } } +struct_union { + id: 0xed0c1514 + kind: STRUCT + name: "xxh64_state" + definition { + bytesize: 80 + member_id: 0xae5434ed + member_id: 0x544ee751 + member_id: 0x98822386 + member_id: 0xdaceb289 + member_id: 0x190d1102 + member_id: 0xbb589b27 + member_id: 0x747620e4 + } +} struct_union { id: 0x01c06930 kind: STRUCT @@ -279355,6 +283640,87 @@ enumeration { } } } +enumeration { + id: 0x4244a103 + definition { + underlying_type_id: 0x4585663f + enumerator { + name: "ZSTD_ps_auto" + } + enumerator { + name: "ZSTD_ps_enable" + value: 1 + } + enumerator { + name: "ZSTD_ps_disable" + value: 2 + } + } +} +enumeration { + id: 0x464f7249 + definition { + underlying_type_id: 0x4585663f + enumerator { + name: "set_basic" + } + enumerator { + name: "set_rle" + value: 1 + } + enumerator { + name: "set_compressed" + value: 2 + } + enumerator { + name: "set_repeat" + value: 3 + } + } +} +enumeration { + id: 0x4ab18d85 + definition { + underlying_type_id: 0x4585663f + enumerator { + name: "ZSTD_d_validateChecksum" + } + enumerator { + name: "ZSTD_d_ignoreChecksum" + value: 1 + } + } +} +enumeration { + id: 0x4bc1ebe4 + definition { + underlying_type_id: 0x4585663f + enumerator { + name: "ZSTD_f_zstd1" + } + enumerator { + name: "ZSTD_f_zstd1_magicless" + value: 1 + } + } +} +enumeration { + id: 0x4bee8f0c + definition { + underlying_type_id: 0x4585663f + enumerator { + name: "ZSTD_dct_auto" + } + enumerator { + name: "ZSTD_dct_rawContent" + value: 1 + } + enumerator { + name: "ZSTD_dct_fullDict" + value: 2 + } + } +} enumeration { id: 0x4f34306c definition { @@ -279405,6 +283771,23 @@ enumeration { } } } +enumeration { + id: 0x520b4b38 + definition { + underlying_type_id: 0x4585663f + enumerator { + name: "ZSTD_not_in_dst" + } + enumerator { + name: "ZSTD_in_dst" + value: 1 + } + enumerator { + name: "ZSTD_split" + value: 2 + } + } +} enumeration { id: 0x531194dd definition { @@ -279427,6 +283810,31 @@ enumeration { } } } +enumeration { + id: 0x537bda40 + definition { + underlying_type_id: 0x4585663f + enumerator { + name: "zdss_init" + } + enumerator { + name: "zdss_loadHeader" + value: 1 + } + enumerator { + name: "zdss_read" + value: 2 + } + enumerator { + name: "zdss_load" + value: 3 + } + enumerator { + name: "zdss_flush" + value: 4 + } + } +} enumeration { id: 0x53d434a6 definition { @@ -279469,6 +283877,90 @@ enumeration { } } } +enumeration { + id: 0x552bf5f8 + definition { + underlying_type_id: 0x4585663f + enumerator { + name: "ZSTD_sf_noBlockDelimiters" + } + enumerator { + name: "ZSTD_sf_explicitBlockDelimiters" + value: 1 + } + } +} +enumeration { + id: 0x56f8b6c6 + definition { + underlying_type_id: 0x4585663f + enumerator { + name: "ZSTDds_getFrameHeaderSize" + } + enumerator { + name: "ZSTDds_decodeFrameHeader" + value: 1 + } + enumerator { + name: "ZSTDds_decodeBlockHeader" + value: 2 + } + enumerator { + name: "ZSTDds_decompressBlock" + value: 3 + } + enumerator { + name: "ZSTDds_decompressLastBlock" + value: 4 + } + enumerator { + name: "ZSTDds_checkChecksum" + value: 5 + } + enumerator { + name: "ZSTDds_decodeSkippableHeader" + value: 6 + } + enumerator { + name: "ZSTDds_skipFrame" + value: 7 + } + } +} +enumeration { + id: 0x5a65e5f7 + definition { + underlying_type_id: 0x4585663f + enumerator { + name: "zcss_init" + } + enumerator { + name: "zcss_load" + value: 1 + } + enumerator { + name: "zcss_flush" + value: 2 + } + } +} +enumeration { + id: 0x5e397b32 + definition { + underlying_type_id: 0x4585663f + enumerator { + name: "ZSTD_cwksp_alloc_objects" + } + enumerator { + name: "ZSTD_cwksp_alloc_buffers" + value: 1 + } + enumerator { + name: "ZSTD_cwksp_alloc_aligned" + value: 2 + } + } +} enumeration { id: 0x5fc6ae59 definition { @@ -279482,6 +283974,19 @@ enumeration { } } } +enumeration { + id: 0x639d7597 + definition { + underlying_type_id: 0x4585663f + enumerator { + name: "ZSTDb_not_buffered" + } + enumerator { + name: "ZSTDb_buffered" + value: 1 + } + } +} enumeration { id: 0x64e053ad definition { @@ -279495,6 +284000,125 @@ enumeration { } } } +enumeration { + id: 0x654bc149 + definition { + underlying_type_id: 0x4585663f + enumerator { + name: "ZSTD_cwksp_dynamic_alloc" + } + enumerator { + name: "ZSTD_cwksp_static_alloc" + value: 1 + } + } +} +enumeration { + id: 0x65ab978c + definition { + underlying_type_id: 0x4585663f + enumerator { + name: "FSE_repeat_none" + } + enumerator { + name: "FSE_repeat_check" + value: 1 + } + enumerator { + name: "FSE_repeat_valid" + value: 2 + } + } +} +enumeration { + id: 0x666f0f1c + definition { + underlying_type_id: 0x4585663f + enumerator { + name: "bt_raw" + } + enumerator { + name: "bt_rle" + value: 1 + } + enumerator { + name: "bt_compressed" + value: 2 + } + enumerator { + name: "bt_reserved" + value: 3 + } + } +} +enumeration { + id: 0x668736f3 + definition { + underlying_type_id: 0x4585663f + enumerator { + name: "HUF_repeat_none" + } + enumerator { + name: "HUF_repeat_check" + value: 1 + } + enumerator { + name: "HUF_repeat_valid" + value: 2 + } + } +} +enumeration { + id: 0x671d33fa + definition { + underlying_type_id: 0x4585663f + enumerator { + name: "ZSTD_llt_none" + } + enumerator { + name: "ZSTD_llt_literalLength" + value: 1 + } + enumerator { + name: "ZSTD_llt_matchLength" + value: 2 + } + } +} +enumeration { + id: 0x68dd9da2 + definition { + underlying_type_id: 0x4585663f + enumerator { + name: "ZSTD_bm_buffered" + } + enumerator { + name: "ZSTD_bm_stable" + value: 1 + } + } +} +enumeration { + id: 0x6c283893 + definition { + underlying_type_id: 0x4585663f + enumerator { + name: "ZSTD_dictDefaultAttach" + } + enumerator { + name: "ZSTD_dictForceAttach" + value: 1 + } + enumerator { + name: "ZSTD_dictForceCopy" + value: 2 + } + enumerator { + name: "ZSTD_dictForceLoad" + value: 3 + } + } +} enumeration { id: 0x6e2e34cb definition { @@ -279559,6 +284183,91 @@ enumeration { } } } +enumeration { + id: 0x6fb44aa8 + definition { + underlying_type_id: 0x4585663f + enumerator { + name: "ZSTD_rmd_refSingleDDict" + } + enumerator { + name: "ZSTD_rmd_refMultipleDDicts" + value: 1 + } + } +} +enumeration { + id: 0x7087a20e + definition { + underlying_type_id: 0x6720d32f + enumerator { + name: "ZSTD_use_indefinitely" + value: -1 + } + enumerator { + name: "ZSTD_dont_use" + } + enumerator { + name: "ZSTD_use_once" + value: 1 + } + } +} +enumeration { + id: 0x7180fcef + definition { + underlying_type_id: 0x4585663f + enumerator { + name: "ZSTD_frame" + } + enumerator { + name: "ZSTD_skippableFrame" + value: 1 + } + } +} +enumeration { + id: 0x7485fe2c + definition { + underlying_type_id: 0x4585663f + enumerator { + name: "ZSTD_fast" + value: 1 + } + enumerator { + name: "ZSTD_dfast" + value: 2 + } + enumerator { + name: "ZSTD_greedy" + value: 3 + } + enumerator { + name: "ZSTD_lazy" + value: 4 + } + enumerator { + name: "ZSTD_lazy2" + value: 5 + } + enumerator { + name: "ZSTD_btlazy2" + value: 6 + } + enumerator { + name: "ZSTD_btopt" + value: 7 + } + enumerator { + name: "ZSTD_btultra" + value: 8 + } + enumerator { + name: "ZSTD_btultra2" + value: 9 + } + } +} enumeration { id: 0x753f7205 definition { @@ -279576,6 +284285,27 @@ enumeration { } } } +enumeration { + id: 0x75b4b3e3 + definition { + underlying_type_id: 0x4585663f + enumerator { + name: "ZSTDcs_created" + } + enumerator { + name: "ZSTDcs_init" + value: 1 + } + enumerator { + name: "ZSTDcs_ongoing" + value: 2 + } + enumerator { + name: "ZSTDcs_ending" + value: 3 + } + } +} enumeration { id: 0x772e934b definition { @@ -279734,6 +284464,19 @@ enumeration { } } } +enumeration { + id: 0x7e4fc4f5 + definition { + underlying_type_id: 0x4585663f + enumerator { + name: "zop_dynamic" + } + enumerator { + name: "zop_predef" + value: 1 + } + } +} enumeration { id: 0x09f65231 name: "OID" @@ -280180,6 +284923,94 @@ enumeration { } } } +enumeration { + id: 0x503181cf + name: "android_debug_per_cpu_symbol" + definition { + underlying_type_id: 0x4585663f + enumerator { + name: "ADS_IRQ_STACK_PTR" + } + enumerator { + name: "ADS_DEBUG_PER_CPU_END" + value: 1 + } + } +} +enumeration { + id: 0x705ce9b7 + name: "android_debug_symbol" + definition { + underlying_type_id: 0x4585663f + enumerator { + name: "ADS_PER_CPU_START" + } + enumerator { + name: "ADS_PER_CPU_END" + value: 1 + } + enumerator { + name: "ADS_TEXT" + value: 2 + } + enumerator { + name: "ADS_SEND" + value: 3 + } + enumerator { + name: "ADS_MEM_BLOCK" + value: 4 + } + enumerator { + name: "ADS_INIT_MM" + value: 5 + } + enumerator { + name: "ADS_ITERATE_SUPERS" + value: 6 + } + enumerator { + name: "ADS_DROP_SLAB" + value: 7 + } + enumerator { + name: "ADS_FREE_PAGES" + value: 8 + } + enumerator { + name: "ADS_COMPACT_PAGES" + value: 9 + } + enumerator { + name: "ADS_SHOW_MEM" + value: 10 + } + enumerator { + name: "ADS_TOTAL_CMA" + value: 11 + } + enumerator { + name: "ADS_SLAB_CACHES" + value: 12 + } + enumerator { + name: "ADS_SLAB_MUTEX" + value: 13 + } + enumerator { + name: "ADS_START_RO_AFTER_INIT" + value: 14 + } + enumerator { + name: "ADS_END_RO_AFTER_INIT" + value: 15 + } + enumerator { + name: "ADS_END" + value: 16 + } + } +} enumeration { id: 0x635e163e name: "arch_timer_erratum_match_type" @@ -280472,6 +285303,14 @@ enumeration { name: "BINDER_WORK_CLEAR_DEATH_NOTIFICATION" value: 9 } + enumerator { + name: "BINDER_WORK_FROZEN_BINDER" + value: 10 + } + enumerator { + name: "BINDER_WORK_CLEAR_FREEZE_NOTIFICATION" + value: 11 + } } } enumeration { @@ -286781,6 +291620,28 @@ enumeration { } } } +enumeration { + id: 0x9fe5c5a6 + name: "ftrace_dump_mode" + definition { + underlying_type_id: 0x4585663f + enumerator { + name: "DUMP_NONE" + } + enumerator { + name: "DUMP_ALL" + value: 1 + } + enumerator { + name: "DUMP_ORIG" + value: 2 + } + enumerator { + name: "DUMP_PARAM" + value: 3 + } + } +} enumeration { id: 0x42ebe6bd name: "geni_se_xfer_mode" @@ -290141,6 +295002,20 @@ enumeration { } } } +enumeration { + id: 0xf01a263d + name: "lockdep_ok" + definition { + underlying_type_id: 0x4585663f + enumerator { + name: "LOCKDEP_STILL_OK" + } + enumerator { + name: "LOCKDEP_NOW_UNRELIABLE" + value: 1 + } + } +} enumeration { id: 0x0d164218 name: "lru_list" @@ -290297,6 +295172,45 @@ enumeration { } } } +enumeration { + id: 0x5461ec82 + name: "memcg_stat_item" + definition { + underlying_type_id: 0x4585663f + enumerator { + name: "MEMCG_SWAP" + value: 42 + } + enumerator { + name: "MEMCG_SOCK" + value: 43 + } + enumerator { + name: "MEMCG_PERCPU_B" + value: 44 + } + enumerator { + name: "MEMCG_VMALLOC" + value: 45 + } + enumerator { + name: "MEMCG_KMEM" + value: 46 + } + enumerator { + name: "MEMCG_ZSWAP_B" + value: 47 + } + enumerator { + name: "MEMCG_ZSWAPPED" + value: 48 + } + enumerator { + name: "MEMCG_NR_STAT" + value: 49 + } + } +} enumeration { id: 0x3843f4e3 name: "memory_type" @@ -290546,6 +295460,48 @@ enumeration { } } } +enumeration { + id: 0x6d69c879 + name: "mthp_stat_item" + definition { + underlying_type_id: 0x4585663f + enumerator { + name: "MTHP_STAT_ANON_FAULT_ALLOC" + } + enumerator { + name: "MTHP_STAT_ANON_FAULT_FALLBACK" + value: 1 + } + enumerator { + name: "MTHP_STAT_ANON_FAULT_FALLBACK_CHARGE" + value: 2 + } + enumerator { + name: "MTHP_STAT_SWPOUT" + value: 3 + } + enumerator { + name: "MTHP_STAT_SWPOUT_FALLBACK" + value: 4 + } + enumerator { + name: "MTHP_STAT_SPLIT" + value: 5 + } + enumerator { + name: "MTHP_STAT_SPLIT_FAILED" + value: 6 + } + enumerator { + name: "MTHP_STAT_SPLIT_DEFERRED" + value: 7 + } + enumerator { + name: "__MTHP_STAT_COUNT" + value: 8 + } + } +} enumeration { id: 0xa13cd7c6 name: "net_device_path_type" @@ -296777,6 +301733,28 @@ enumeration { } } } +enumeration { + id: 0x013168b1 + name: "vb2_memory" + definition { + underlying_type_id: 0x4585663f + enumerator { + name: "VB2_MEMORY_UNKNOWN" + } + enumerator { + name: "VB2_MEMORY_MMAP" + value: 1 + } + enumerator { + name: "VB2_MEMORY_USERPTR" + value: 2 + } + enumerator { + name: "VB2_MEMORY_DMABUF" + value: 4 + } + } +} enumeration { id: 0x39e70eca name: "vdso_clock_mode" @@ -297459,6 +302437,12 @@ function { parameter_id: 0x3747dc62 parameter_id: 0xf435685e } +function { + id: 0x02396084 + return_type_id: 0x48b5725f + parameter_id: 0x4585663f + parameter_id: 0xf01a263d +} function { id: 0x023bf562 return_type_id: 0x37edd07b @@ -297562,6 +302546,12 @@ function { return_type_id: 0xe2774cab parameter_id: 0x24d65b62 } +function { + id: 0x045dbf47 + return_type_id: 0x914dbfdc + parameter_id: 0x1cce8023 + parameter_id: 0x914dbfdc +} function { id: 0x04a35d6c return_type_id: 0x914dbfdc @@ -297575,6 +302565,11 @@ function { parameter_id: 0x11e6864c parameter_id: 0x6720d32f } +function { + id: 0x04eefeb1 + return_type_id: 0x914dbfdc + parameter_id: 0x17175c07 +} function { id: 0x04f6f5bf return_type_id: 0x34656ca7 @@ -297606,6 +302601,13 @@ function { parameter_id: 0xc9082b19 parameter_id: 0xc9082b19 } +function { + id: 0x068f9b21 + return_type_id: 0x914dbfdc + parameter_id: 0x17175c07 + parameter_id: 0x914dbfdc + parameter_id: 0x914dbfdc +} function { id: 0x06a584d3 return_type_id: 0x9565759f @@ -297615,6 +302617,12 @@ function { parameter_id: 0x9565759f parameter_id: 0x9565759f } +function { + id: 0x06abc84e + return_type_id: 0x914dbfdc + parameter_id: 0x17175c07 + parameter_id: 0x914dbfdc +} function { id: 0x071b4d09 return_type_id: 0x27fc8652 @@ -298512,6 +303520,14 @@ function { parameter_id: 0x0258f96e parameter_id: 0x1fc34bc2 } +function { + id: 0x1075e2ed + return_type_id: 0x48b5725f + parameter_id: 0x060cf413 + parameter_id: 0x52a8f1d9 + parameter_id: 0x92233392 + parameter_id: 0x295c7202 +} function { id: 0x10776911 return_type_id: 0x48b5725f @@ -298904,6 +303920,12 @@ function { parameter_id: 0xd0b3a203 parameter_id: 0xd0b3a203 } +function { + id: 0x10e61e10 + return_type_id: 0x48b5725f + parameter_id: 0x0258f96e + parameter_id: 0x3a1c763b +} function { id: 0x10e93841 return_type_id: 0x48b5725f @@ -299309,6 +304331,13 @@ function { parameter_id: 0x3b461cc8 parameter_id: 0x346c7967 } +function { + id: 0x1169a07b + return_type_id: 0x48b5725f + parameter_id: 0x0483e6f8 + parameter_id: 0x3e10b518 + parameter_id: 0xa52a0930 +} function { id: 0x117081d5 return_type_id: 0x48b5725f @@ -299458,6 +304487,12 @@ function { return_type_id: 0x48b5725f parameter_id: 0x04ca9246 } +function { + id: 0x11ac5f6b + return_type_id: 0x48b5725f + parameter_id: 0x055bedb1 + parameter_id: 0x18bd6530 +} function { id: 0x11af89f2 return_type_id: 0x48b5725f @@ -299566,6 +304601,12 @@ function { return_type_id: 0x48b5725f parameter_id: 0x0562c566 } +function { + id: 0x11c25218 + return_type_id: 0x48b5725f + parameter_id: 0x031a031e + parameter_id: 0x6720d32f +} function { id: 0x11c36c13 return_type_id: 0x48b5725f @@ -300581,6 +305622,12 @@ function { return_type_id: 0x48b5725f parameter_id: 0x0effc5a1 } +function { + id: 0x132e9f28 + return_type_id: 0x48b5725f + parameter_id: 0x0f50ecbc + parameter_id: 0x18bd6530 +} function { id: 0x13309e7e return_type_id: 0x48b5725f @@ -300685,6 +305732,11 @@ function { parameter_id: 0x293f2663 parameter_id: 0x3da0a8e3 } +function { + id: 0x134c6abc + return_type_id: 0x48b5725f + parameter_id: 0x0f50ecbc +} function { id: 0x134e648c return_type_id: 0x48b5725f @@ -300998,6 +306050,11 @@ function { parameter_id: 0x6720d32f parameter_id: 0x064d6086 } +function { + id: 0x13ad3e6d + return_type_id: 0x48b5725f + parameter_id: 0x0cd5bff8 +} function { id: 0x13af966b return_type_id: 0x48b5725f @@ -301542,6 +306599,12 @@ function { parameter_id: 0x1d44326e parameter_id: 0x054f691a } +function { + id: 0x147ac3d5 + return_type_id: 0x48b5725f + parameter_id: 0x12191e2a + parameter_id: 0x19357319 +} function { id: 0x147c9fd8 return_type_id: 0x48b5725f @@ -302060,6 +307123,11 @@ function { return_type_id: 0x48b5725f parameter_id: 0x17535b44 } +function { + id: 0x154cf2e8 + return_type_id: 0x48b5725f + parameter_id: 0x17528ded +} function { id: 0x154da6ed return_type_id: 0x48b5725f @@ -302100,6 +307168,11 @@ function { parameter_id: 0x117e2995 parameter_id: 0x6720d32f } +function { + id: 0x155d8692 + return_type_id: 0x48b5725f + parameter_id: 0x17175c07 +} function { id: 0x156275ac return_type_id: 0x48b5725f @@ -302264,6 +307337,12 @@ function { parameter_id: 0x4585663f parameter_id: 0x6720d32f } +function { + id: 0x158e731b + return_type_id: 0x48b5725f + parameter_id: 0x16239d0c + parameter_id: 0x27b172c0 +} function { id: 0x158f9726 return_type_id: 0x48b5725f @@ -302335,6 +307414,11 @@ function { return_type_id: 0x48b5725f parameter_id: 0x14abdd00 } +function { + id: 0x15b498c8 + return_type_id: 0x48b5725f + parameter_id: 0x14b3256c +} function { id: 0x15b600dd return_type_id: 0x48b5725f @@ -302434,6 +307518,12 @@ function { parameter_id: 0x4585663f parameter_id: 0x18bd6530 } +function { + id: 0x15f8f75a + return_type_id: 0x48b5725f + parameter_id: 0x17175c07 + parameter_id: 0x295c7202 +} function { id: 0x15f8fb52 return_type_id: 0x48b5725f @@ -303330,6 +308420,13 @@ function { parameter_id: 0x21069feb parameter_id: 0x38040a6c } +function { + id: 0x1703efba + return_type_id: 0x48b5725f + parameter_id: 0x17175c07 + parameter_id: 0x914dbfdc + parameter_id: 0x6d7f5ff6 +} function { id: 0x1704d655 return_type_id: 0x48b5725f @@ -303360,6 +308457,18 @@ function { parameter_id: 0x1eb602cd parameter_id: 0x0858434c } +function { + id: 0x17150a5c + return_type_id: 0x48b5725f + parameter_id: 0x17175c07 + parameter_id: 0x92233392 +} +function { + id: 0x1718b06d + return_type_id: 0x48b5725f + parameter_id: 0x17175c07 + parameter_id: 0x914dbfdc +} function { id: 0x171a00e6 return_type_id: 0x48b5725f @@ -303378,6 +308487,13 @@ function { parameter_id: 0x09626b7f parameter_id: 0x6d7f5ff6 } +function { + id: 0x171e5a9d + return_type_id: 0x48b5725f + parameter_id: 0x1eb602cd + parameter_id: 0x0858434c + parameter_id: 0x2baac173 +} function { id: 0x17256acc return_type_id: 0x48b5725f @@ -303391,6 +308507,13 @@ function { parameter_id: 0x1f73dead parameter_id: 0x189b551a } +function { + id: 0x172b2da0 + return_type_id: 0x48b5725f + parameter_id: 0x1a8d1bcb + parameter_id: 0x4585663f + parameter_id: 0x18bd6530 +} function { id: 0x172b8b93 return_type_id: 0x48b5725f @@ -303487,6 +308610,13 @@ function { return_type_id: 0x48b5725f parameter_id: 0x1e93567a } +function { + id: 0x173ce302 + return_type_id: 0x48b5725f + parameter_id: 0x17175c07 + parameter_id: 0x914dbfdc + parameter_id: 0x914dbfdc +} function { id: 0x173d26e5 return_type_id: 0x48b5725f @@ -303517,6 +308647,15 @@ function { parameter_id: 0x1d19a9d5 parameter_id: 0x38fa32ef } +function { + id: 0x173e54a5 + return_type_id: 0x48b5725f + parameter_id: 0x17175c07 + parameter_id: 0x914dbfdc + parameter_id: 0x92233392 + parameter_id: 0x92233392 + parameter_id: 0x92233392 +} function { id: 0x17477bce return_type_id: 0x48b5725f @@ -303555,6 +308694,12 @@ function { parameter_id: 0x1977e57b parameter_id: 0x6720d32f } +function { + id: 0x175f7573 + return_type_id: 0x48b5725f + parameter_id: 0x1e9745d3 + parameter_id: 0x18bd6530 +} function { id: 0x17620981 return_type_id: 0x48b5725f @@ -305158,6 +310303,19 @@ function { parameter_id: 0x33756485 parameter_id: 0x33756485 } +function { + id: 0x1a1c0fef + return_type_id: 0x48b5725f + parameter_id: 0x291e8a5b + parameter_id: 0x30ff3abd +} +function { + id: 0x1a269128 + return_type_id: 0x48b5725f + parameter_id: 0x291e8a5b + parameter_id: 0x3e10b518 + parameter_id: 0x0483e6f8 +} function { id: 0x1a27e882 return_type_id: 0x48b5725f @@ -305186,6 +310344,12 @@ function { parameter_id: 0x2cc0f57b parameter_id: 0x6720d32f } +function { + id: 0x1a3b8f52 + return_type_id: 0x48b5725f + parameter_id: 0x291e8a5b + parameter_id: 0x391f15ea +} function { id: 0x1a405f2d return_type_id: 0x48b5725f @@ -305202,6 +310366,13 @@ function { parameter_id: 0x2d9d2fbb parameter_id: 0x6d7f5ff6 } +function { + id: 0x1a517af8 + return_type_id: 0x48b5725f + parameter_id: 0x291e8a5b + parameter_id: 0x2229a93f + parameter_id: 0x18bd6530 +} function { id: 0x1a51b8d5 return_type_id: 0x48b5725f @@ -305504,12 +310675,25 @@ function { parameter_id: 0x2ef43f67 parameter_id: 0x6720d32f } +function { + id: 0x1abb29c8 + return_type_id: 0x48b5725f + parameter_id: 0x291e8a5b + parameter_id: 0x18bd6530 + parameter_id: 0x18bd6530 +} function { id: 0x1abb72c6 return_type_id: 0x48b5725f parameter_id: 0x2efe8065 parameter_id: 0x6720d32f } +function { + id: 0x1abd0691 + return_type_id: 0x48b5725f + parameter_id: 0x291e8a5b + parameter_id: 0x18bd6530 +} function { id: 0x1abe4d2a return_type_id: 0x48b5725f @@ -305651,6 +310835,12 @@ function { return_type_id: 0x48b5725f parameter_id: 0x2e60a6b2 } +function { + id: 0x1b05453e + return_type_id: 0x48b5725f + parameter_id: 0x28a3a74b + parameter_id: 0x6d7f5ff6 +} function { id: 0x1b0758a9 return_type_id: 0x48b5725f @@ -306552,6 +311742,13 @@ function { parameter_id: 0x31b5a66f parameter_id: 0x2c8e1aaa } +function { + id: 0x1c48693a + return_type_id: 0x48b5725f + parameter_id: 0x305baabf + parameter_id: 0x315b7e01 + parameter_id: 0x0efff92a +} function { id: 0x1c487847 return_type_id: 0x48b5725f @@ -306807,6 +312004,11 @@ function { parameter_id: 0x33756485 parameter_id: 0x33756485 } +function { + id: 0x1c8ebb3c + return_type_id: 0x48b5725f + parameter_id: 0x305baabf +} function { id: 0x1c93cad8 return_type_id: 0x48b5725f @@ -306865,6 +312067,11 @@ function { parameter_id: 0x274194ac parameter_id: 0x2e18f543 } +function { + id: 0x1ca79f3c + return_type_id: 0x48b5725f + parameter_id: 0x30ff3abd +} function { id: 0x1cab6a11 return_type_id: 0x48b5725f @@ -307119,6 +312326,13 @@ function { return_type_id: 0x48b5725f parameter_id: 0x31fa879c } +function { + id: 0x1cea6976 + return_type_id: 0x48b5725f + parameter_id: 0x33df40aa + parameter_id: 0x21590b1d + parameter_id: 0x02338c35 +} function { id: 0x1cea7cc2 return_type_id: 0x48b5725f @@ -307218,6 +312432,13 @@ function { parameter_id: 0x330db442 parameter_id: 0x4585663f } +function { + id: 0x1d04d3fd + return_type_id: 0xd5cc9c9a + parameter_id: 0x24c1f7c9 + parameter_id: 0x3e10b518 + parameter_id: 0xf435685e +} function { id: 0x1d096019 return_type_id: 0x48b5725f @@ -307532,6 +312753,11 @@ function { parameter_id: 0x3564a5a2 parameter_id: 0x2b79f509 } +function { + id: 0x1d6f4d07 + return_type_id: 0x48b5725f + parameter_id: 0x37dc7251 +} function { id: 0x1d7004cd return_type_id: 0x48b5725f @@ -307715,6 +312941,14 @@ function { parameter_id: 0x13580d6c parameter_id: 0x13580d6c } +function { + id: 0x1db50e9d + return_type_id: 0x48b5725f + parameter_id: 0x32a623d7 + parameter_id: 0x6720d32f + parameter_id: 0x6720d32f + parameter_id: 0x6720d32f +} function { id: 0x1db8b9d1 return_type_id: 0x48b5725f @@ -308500,6 +313734,11 @@ function { return_type_id: 0x48b5725f parameter_id: 0x3860f3c0 } +function { + id: 0x1e80bbd4 + return_type_id: 0x48b5725f + parameter_id: 0x3863a91c +} function { id: 0x1e82fda2 return_type_id: 0x48b5725f @@ -309112,6 +314351,11 @@ function { parameter_id: 0xc9082b19 parameter_id: 0x3545954a } +function { + id: 0x1f3d2f88 + return_type_id: 0x07f2af49 + parameter_id: 0x3e10b518 +} function { id: 0x1f3dbc29 return_type_id: 0x48b5725f @@ -309398,6 +314642,11 @@ function { parameter_id: 0x3e10b518 parameter_id: 0x0bb0c019 } +function { + id: 0x1f821b4c + return_type_id: 0x48b5725f + parameter_id: 0x3c692b7e +} function { id: 0x1f835b6f return_type_id: 0x48b5725f @@ -309422,6 +314671,11 @@ function { parameter_id: 0xf435685e parameter_id: 0xc9082b19 } +function { + id: 0x1f861b55 + return_type_id: 0x48b5725f + parameter_id: 0x3c792b1b +} function { id: 0x1f8f4ad5 return_type_id: 0xd5cc9c9a @@ -310103,6 +315357,12 @@ function { parameter_id: 0x25ffeea5 parameter_id: 0x0258f96e } +function { + id: 0x29d15eb9 + return_type_id: 0x33756485 + parameter_id: 0x6720d32f + parameter_id: 0x6d69c879 +} function { id: 0x29da83bb return_type_id: 0x042af17e @@ -310144,6 +315404,10 @@ function { return_type_id: 0x48b5725f parameter_id: 0xeb0f6de6 } +function { + id: 0x2a6a9218 + return_type_id: 0x37dc7251 +} function { id: 0x2a7bc89a return_type_id: 0x2b8f13b3 @@ -310940,6 +316204,11 @@ function { parameter_id: 0x3fa672fd parameter_id: 0x0490bb4a } +function { + id: 0x36c501fb + return_type_id: 0x33756485 + parameter_id: 0x1da732a0 +} function { id: 0x36cad8bb return_type_id: 0x23f09c34 @@ -310991,6 +316260,17 @@ function { parameter_id: 0x33756485 parameter_id: 0x33756485 } +function { + id: 0x376120fa + return_type_id: 0x48b5725f + parameter_id: 0x9fe5c5a6 +} +function { + id: 0x3766a595 + return_type_id: 0x33756485 + parameter_id: 0x1d5bae2a + parameter_id: 0x6720d32f +} function { id: 0x37677261 return_type_id: 0x33756485 @@ -311541,6 +316821,11 @@ function { parameter_id: 0x0258f96e parameter_id: 0xf435685e } +function { + id: 0x403dfc63 + return_type_id: 0xc9082b19 + parameter_id: 0x17175c07 +} function { id: 0x4058e56a return_type_id: 0x18bd6530 @@ -311660,6 +316945,11 @@ function { parameter_id: 0x21003da7 parameter_id: 0x2ef43f67 } +function { + id: 0x429ad182 + return_type_id: 0x18bd6530 + parameter_id: 0x503181cf +} function { id: 0x42a927f9 return_type_id: 0xc9082b19 @@ -311937,6 +317227,11 @@ function { return_type_id: 0x04b193cc parameter_id: 0x29459f81 } +function { + id: 0x48d77e8c + return_type_id: 0x04ca9246 + parameter_id: 0x019e2530 +} function { id: 0x48da335f return_type_id: 0x1ce51dde @@ -312004,6 +317299,11 @@ function { parameter_id: 0x397d00ab parameter_id: 0x6720d32f } +function { + id: 0x4a818b9c + return_type_id: 0x18bd6530 + parameter_id: 0x705ce9b7 +} function { id: 0x4abfefa4 return_type_id: 0x0cbf60eb @@ -312291,6 +317591,13 @@ function { parameter_id: 0x6720d32f parameter_id: 0xf435685e } +function { + id: 0x511da256 + return_type_id: 0x18bd6530 + parameter_id: 0x17175c07 + parameter_id: 0x914dbfdc + parameter_id: 0x2fc964c0 +} function { id: 0x511dadc3 return_type_id: 0x92233392 @@ -312376,6 +317683,11 @@ function { return_type_id: 0x0cf3d8fe parameter_id: 0x18bd6530 } +function { + id: 0x521e044a + return_type_id: 0x92233392 + parameter_id: 0x17175c07 +} function { id: 0x5221a908 return_type_id: 0x2511a6f5 @@ -312435,6 +317747,12 @@ function { id: 0x534abe77 return_type_id: 0x295c7202 } +function { + id: 0x53693d1c + return_type_id: 0x18bd6530 + parameter_id: 0x18bd6530 + parameter_id: 0xf435685e +} function { id: 0x5373932e return_type_id: 0x18bd6530 @@ -312718,6 +318036,11 @@ function { return_type_id: 0x1cce8023 parameter_id: 0x6720d32f } +function { + id: 0x568f6976 + return_type_id: 0x295c7202 + parameter_id: 0x17175c07 +} function { id: 0x5696b1f1 return_type_id: 0x18bd6530 @@ -312857,6 +318180,11 @@ function { id: 0x57af7a85 return_type_id: 0x391f15ea } +function { + id: 0x57c04a9d + return_type_id: 0x18bd6530 + parameter_id: 0x055bedb1 +} function { id: 0x57c0b49d return_type_id: 0x18bd6530 @@ -313591,6 +318919,13 @@ function { parameter_id: 0x379d63b0 parameter_id: 0x379d63b0 } +function { + id: 0x5dfb031c + return_type_id: 0x18bd6530 + parameter_id: 0x2678c091 + parameter_id: 0xb3a3e4db + parameter_id: 0xf435685e +} function { id: 0x5dfc9d27 return_type_id: 0x2170d06d @@ -313645,6 +318980,11 @@ function { parameter_id: 0x239187d3 parameter_id: 0x33756485 } +function { + id: 0x5ec21b78 + return_type_id: 0x0cd5bff8 + parameter_id: 0x0d7ce7cc +} function { id: 0x5ed273d9 return_type_id: 0x18bd6530 @@ -313971,6 +319311,13 @@ function { parameter_id: 0x380c33d1 parameter_id: 0x054f691a } +function { + id: 0x66cc4765 + return_type_id: 0x28a3a74b + parameter_id: 0x1684c624 + parameter_id: 0x18bd6530 + parameter_id: 0x6720d32f +} function { id: 0x66e18f45 return_type_id: 0x2c8c423d @@ -314035,6 +319382,11 @@ function { parameter_id: 0xf435685e parameter_id: 0xf1a6dfed } +function { + id: 0x6887ae6a + return_type_id: 0xe4d0195f + parameter_id: 0x2628eae6 +} function { id: 0x68d26f6c return_type_id: 0x0130219f @@ -315361,6 +320713,13 @@ function { parameter_id: 0x6720d32f parameter_id: 0x344f6972 } +function { + id: 0x849f5fc7 + return_type_id: 0x6720d32f + parameter_id: 0x6720d32f + parameter_id: 0x36d55eab + parameter_id: 0x33756485 +} function { id: 0x84a3dd6c return_type_id: 0x6720d32f @@ -316257,6 +321616,19 @@ function { parameter_id: 0x36194830 parameter_id: 0x026525e9 } +function { + id: 0x900f3b82 + return_type_id: 0x6720d32f + parameter_id: 0x3ab8abe5 + parameter_id: 0xc9082b19 + parameter_id: 0x1e9745d3 + parameter_id: 0x914dbfdc + parameter_id: 0xc9082b19 + parameter_id: 0x1e9745d3 + parameter_id: 0x914dbfdc + parameter_id: 0xc9082b19 + parameter_id: 0x6d7f5ff6 +} function { id: 0x900fa5a8 return_type_id: 0x6720d32f @@ -316539,6 +321911,15 @@ function { parameter_id: 0x1df06cce parameter_id: 0x379d63b0 } +function { + id: 0x9044872a + return_type_id: 0x6720d32f + parameter_id: 0x384c5795 + parameter_id: 0xf435685e + parameter_id: 0x1df06cce + parameter_id: 0x379d63b0 + parameter_id: 0x18bd6530 +} function { id: 0x90451752 return_type_id: 0x6720d32f @@ -316917,6 +322298,11 @@ function { parameter_id: 0x4585663f parameter_id: 0x3e10b518 } +function { + id: 0x90953240 + return_type_id: 0x6720d32f + parameter_id: 0x345745bd +} function { id: 0x9095a736 return_type_id: 0x6720d32f @@ -317306,6 +322692,15 @@ function { parameter_id: 0x4585663f parameter_id: 0x33756485 } +function { + id: 0x90fb7755 + return_type_id: 0x6720d32f + parameter_id: 0x33f8b54b + parameter_id: 0x6720d32f + parameter_id: 0x6720d32f + parameter_id: 0x3e10b518 + parameter_id: 0x2849a9bf +} function { id: 0x90fb83a9 return_type_id: 0x6720d32f @@ -318326,6 +323721,14 @@ function { parameter_id: 0x0d51ba49 parameter_id: 0x0d51ba49 } +function { + id: 0x9182c85e + return_type_id: 0x6720d32f + parameter_id: 0x33756485 + parameter_id: 0x33756485 + parameter_id: 0x4585663f + parameter_id: 0xf1a6dfed +} function { id: 0x9183d422 return_type_id: 0x6720d32f @@ -318520,6 +323923,14 @@ function { parameter_id: 0x6720d32f parameter_id: 0x0ef35c55 } +function { + id: 0x919f745e + return_type_id: 0x6720d32f + parameter_id: 0x33756485 + parameter_id: 0x33756485 + parameter_id: 0x33756485 + parameter_id: 0xf1a6dfed +} function { id: 0x919f7f11 return_type_id: 0x6720d32f @@ -318553,6 +323964,12 @@ function { parameter_id: 0x3c07fb40 parameter_id: 0xc9082b19 } +function { + id: 0x91a5f8da + return_type_id: 0x6720d32f + parameter_id: 0x33756485 + parameter_id: 0x3e10b518 +} function { id: 0x91a610ef return_type_id: 0x6720d32f @@ -319075,6 +324492,12 @@ function { return_type_id: 0x6720d32f parameter_id: 0x3176a085 } +function { + id: 0x91ddd814 + return_type_id: 0x6720d32f + parameter_id: 0x30ff3abd + parameter_id: 0x18bd6530 +} function { id: 0x91e06d89 return_type_id: 0x6720d32f @@ -319203,6 +324626,14 @@ function { parameter_id: 0x3e10b518 parameter_id: 0x6720d32f } +function { + id: 0x91ea79c3 + return_type_id: 0x6720d32f + parameter_id: 0x322c8c4b + parameter_id: 0x3e10b518 + parameter_id: 0x6720d32f + parameter_id: 0x0cc78943 +} function { id: 0x91eb6447 return_type_id: 0x6720d32f @@ -320331,6 +325762,14 @@ function { return_type_id: 0x6720d32f parameter_id: 0x3c6aba87 } +function { + id: 0x929b7b33 + return_type_id: 0x6720d32f + parameter_id: 0x3c5396d4 + parameter_id: 0x0258f96e + parameter_id: 0x18bd6530 + parameter_id: 0x0c45539b +} function { id: 0x929b931d return_type_id: 0x3e10b518 @@ -320732,6 +326171,12 @@ function { parameter_id: 0x6720d32f parameter_id: 0x914dbfdc } +function { + id: 0x92ea4d80 + return_type_id: 0xa7b4c582 + parameter_id: 0x6720d32f + parameter_id: 0xd5df6730 +} function { id: 0x92eba1f9 return_type_id: 0x6720d32f @@ -321595,6 +327040,11 @@ function { parameter_id: 0xc9082b19 parameter_id: 0xc9082b19 } +function { + id: 0x93980968 + return_type_id: 0x6720d32f + parameter_id: 0x3863a91c +} function { id: 0x9398dfdf return_type_id: 0x6720d32f @@ -321649,6 +327099,13 @@ function { parameter_id: 0x4585663f parameter_id: 0x0b27dc43 } +function { + id: 0x93a06f16 + return_type_id: 0x6720d32f + parameter_id: 0x39a4e83f + parameter_id: 0x13580d6c + parameter_id: 0x13580d6c +} function { id: 0x93a1d54d return_type_id: 0x6720d32f @@ -321756,6 +327213,13 @@ function { parameter_id: 0x3b04bead parameter_id: 0x21003da7 } +function { + id: 0x93c5da99 + return_type_id: 0x6720d32f + parameter_id: 0x305baabf + parameter_id: 0x92233392 + parameter_id: 0x6d7f5ff6 +} function { id: 0x93c6821c return_type_id: 0x6720d32f @@ -321860,6 +327324,12 @@ function { parameter_id: 0x3ada60b4 parameter_id: 0x358ff5b7 } +function { + id: 0x93e1d37b + return_type_id: 0x6720d32f + parameter_id: 0x3ff6cc61 + parameter_id: 0x6720d32f +} function { id: 0x93e3d44d return_type_id: 0x6720d32f @@ -322494,6 +327964,14 @@ function { parameter_id: 0x323908e0 parameter_id: 0x6d7f5ff6 } +function { + id: 0x946e09ce + return_type_id: 0x6720d32f + parameter_id: 0x2170d06d + parameter_id: 0x6d7f5ff6 + parameter_id: 0x1d5bae2a + parameter_id: 0x1d5bae2a +} function { id: 0x946e6c80 return_type_id: 0x6720d32f @@ -323759,6 +329237,15 @@ function { parameter_id: 0x21069feb parameter_id: 0xf017819f } +function { + id: 0x9602dbff + return_type_id: 0x6720d32f + parameter_id: 0x291e8a5b + parameter_id: 0x791c4097 + parameter_id: 0x84ba5f13 + parameter_id: 0x30ff3abd + parameter_id: 0x18bd6530 +} function { id: 0x96092c51 return_type_id: 0x6720d32f @@ -323917,6 +329404,13 @@ function { parameter_id: 0x2c6f4dd1 parameter_id: 0x368487be } +function { + id: 0x964432be + return_type_id: 0x6720d32f + parameter_id: 0x291e8a5b + parameter_id: 0x615717a0 + parameter_id: 0x18bd6530 +} function { id: 0x964692d8 return_type_id: 0x3e10b518 @@ -324064,6 +329558,13 @@ function { parameter_id: 0x2dab4556 parameter_id: 0x1a1563a0 } +function { + id: 0x968564ac + return_type_id: 0x6720d32f + parameter_id: 0x2f73da3b + parameter_id: 0x391f15ea + parameter_id: 0xf435685e +} function { id: 0x9686c4d1 return_type_id: 0x6720d32f @@ -324817,6 +330318,14 @@ function { parameter_id: 0x6720d32f parameter_id: 0x379d63b0 } +function { + id: 0x976ee581 + return_type_id: 0x6720d32f + parameter_id: 0x2dab4556 + parameter_id: 0x6720d32f + parameter_id: 0x6720d32f + parameter_id: 0x6720d32f +} function { id: 0x977041a6 return_type_id: 0x6720d32f @@ -324921,6 +330430,12 @@ function { parameter_id: 0x2efe8065 parameter_id: 0x6720d32f } +function { + id: 0x97a52d07 + return_type_id: 0x6720d32f + parameter_id: 0x2ba06eea + parameter_id: 0x33756485 +} function { id: 0x97a9f709 return_type_id: 0xf435685e @@ -325067,6 +330582,13 @@ function { parameter_id: 0x2bd57104 parameter_id: 0x2393cd3a } +function { + id: 0x97fd990e + return_type_id: 0x6720d32f + parameter_id: 0x291e8a5b + parameter_id: 0x0f3dfb90 + parameter_id: 0x18bd6530 +} function { id: 0x98006d18 return_type_id: 0x6720d32f @@ -325400,6 +330922,11 @@ function { parameter_id: 0x94937349 parameter_id: 0x18bd6530 } +function { + id: 0x9845342e + return_type_id: 0x6720d32f + parameter_id: 0x17175c07 +} function { id: 0x98458118 return_type_id: 0x6720d32f @@ -325494,6 +331021,11 @@ function { return_type_id: 0x6720d32f parameter_id: 0x17535b44 } +function { + id: 0x98544054 + return_type_id: 0x6720d32f + parameter_id: 0x17528ded +} function { id: 0x98558c5c return_type_id: 0x6720d32f @@ -325658,6 +331190,13 @@ function { parameter_id: 0x0b30ee00 parameter_id: 0x2cacacc0 } +function { + id: 0x986fdd44 + return_type_id: 0x6720d32f + parameter_id: 0x18bd6530 + parameter_id: 0xf1a6dfed + parameter_id: 0x1bf16028 +} function { id: 0x987085c9 return_type_id: 0x6720d32f @@ -326043,6 +331582,11 @@ function { id: 0x98aacbd0 return_type_id: 0x0de4c6b1 } +function { + id: 0x98ac2a74 + return_type_id: 0x6720d32f + parameter_id: 0x14b3256c +} function { id: 0x98aeb261 return_type_id: 0x6720d32f @@ -326415,6 +331959,11 @@ function { parameter_id: 0x391f15ea parameter_id: 0x6720d32f } +function { + id: 0x9906a4a5 + return_type_id: 0x6720d32f + parameter_id: 0x12191e2a +} function { id: 0x99087fcf return_type_id: 0x6720d32f @@ -326457,6 +332006,13 @@ function { parameter_id: 0x6720d32f parameter_id: 0x064d6086 } +function { + id: 0x99115f3b + return_type_id: 0x6720d32f + parameter_id: 0x116785ed + parameter_id: 0x3232d45e + parameter_id: 0x0258f96e +} function { id: 0x991258f9 return_type_id: 0x6720d32f @@ -326509,6 +332065,13 @@ function { parameter_id: 0x11e6864c parameter_id: 0x3b845f97 } +function { + id: 0x9917b3ef + return_type_id: 0x6720d32f + parameter_id: 0x1e9745d3 + parameter_id: 0xc9082b19 + parameter_id: 0x5a8462fa +} function { id: 0x991a5468 return_type_id: 0x6720d32f @@ -326989,6 +332552,11 @@ function { return_type_id: 0x6720d32f parameter_id: 0x100a15ee } +function { + id: 0x9982e8c8 + return_type_id: 0xf435685e + parameter_id: 0x3af48668 +} function { id: 0x99853e95 return_type_id: 0x6720d32f @@ -327213,6 +332781,13 @@ function { parameter_id: 0x1aeeade4 parameter_id: 0x29c4a9fa } +function { + id: 0x99b8eaeb + return_type_id: 0x6720d32f + parameter_id: 0x116785ed + parameter_id: 0x1e0822f2 + parameter_id: 0x6720d32f +} function { id: 0x99b9a6b1 return_type_id: 0x6720d32f @@ -327315,6 +332890,14 @@ function { parameter_id: 0x1e62d0f5 parameter_id: 0xf435685e } +function { + id: 0x99c885a2 + return_type_id: 0x6720d32f + parameter_id: 0x12191e2a + parameter_id: 0x35e1bdb7 + parameter_id: 0x6720d32f + parameter_id: 0x1bf16028 +} function { id: 0x99ccb18c return_type_id: 0x6720d32f @@ -327424,6 +333007,12 @@ function { parameter_id: 0x1e870478 parameter_id: 0xf017819f } +function { + id: 0x99e350e4 + return_type_id: 0x6720d32f + parameter_id: 0x12191e2a + parameter_id: 0x397d1060 +} function { id: 0x99e3af09 return_type_id: 0x6720d32f @@ -327586,6 +333175,12 @@ function { parameter_id: 0x1148ae81 parameter_id: 0x0b27dc43 } +function { + id: 0x9a0002d1 + return_type_id: 0x6720d32f + parameter_id: 0x17175c07 + parameter_id: 0x914dbfdc +} function { id: 0x9a00b669 return_type_id: 0x6720d32f @@ -327930,6 +333525,14 @@ function { parameter_id: 0x01222f7d parameter_id: 0x6d7f5ff6 } +function { + id: 0x9a330a54 + return_type_id: 0x6720d32f + parameter_id: 0x1a8d1bcb + parameter_id: 0x4585663f + parameter_id: 0x18bd6530 + parameter_id: 0x25520d15 +} function { id: 0x9a33296b return_type_id: 0x6720d32f @@ -328013,6 +333616,15 @@ function { parameter_id: 0x11e6864c parameter_id: 0xf017819f } +function { + id: 0x9a3b72b7 + return_type_id: 0x6720d32f + parameter_id: 0x18bd6530 + parameter_id: 0x6720d32f + parameter_id: 0x2208f89a + parameter_id: 0x33756485 + parameter_id: 0x11cfee5a +} function { id: 0x9a3bbebc return_type_id: 0x6720d32f @@ -328808,6 +334420,13 @@ function { parameter_id: 0x6720d32f parameter_id: 0x6720d32f } +function { + id: 0x9abddc00 + return_type_id: 0x6720d32f + parameter_id: 0x18bd6530 + parameter_id: 0x4585663f + parameter_id: 0x11cfee5a +} function { id: 0x9abe486f return_type_id: 0x6720d32f @@ -329284,6 +334903,13 @@ function { parameter_id: 0x2e029f76 parameter_id: 0x13580d6c } +function { + id: 0x9b13aa4d + return_type_id: 0x6720d32f + parameter_id: 0x18bd6530 + parameter_id: 0x2e18f543 + parameter_id: 0x11cfee5a +} function { id: 0x9b144a97 return_type_id: 0x6720d32f @@ -329562,6 +335188,13 @@ function { parameter_id: 0x1aee9939 parameter_id: 0x04f728c1 } +function { + id: 0x9b290896 + return_type_id: 0x6720d32f + parameter_id: 0x18bd6530 + parameter_id: 0x2170d06d + parameter_id: 0x0dc6d22d +} function { id: 0x9b299206 return_type_id: 0x6720d32f @@ -329657,6 +335290,13 @@ function { parameter_id: 0x06440279 parameter_id: 0xc9082b19 } +function { + id: 0x9b2f7851 + return_type_id: 0x6720d32f + parameter_id: 0x18bd6530 + parameter_id: 0x2f73da3b + parameter_id: 0xf435685e +} function { id: 0x9b2ff6e6 return_type_id: 0x6720d32f @@ -329744,6 +335384,14 @@ function { parameter_id: 0x293f1ae3 parameter_id: 0xf435685e } +function { + id: 0x9b366ee3 + return_type_id: 0x6720d32f + parameter_id: 0x1a8d1bcb + parameter_id: 0x013168b1 + parameter_id: 0x4585663f + parameter_id: 0x1bf16028 +} function { id: 0x9b37fa13 return_type_id: 0x6720d32f @@ -329879,6 +335527,13 @@ function { parameter_id: 0x18ea6ae3 parameter_id: 0x3ee42466 } +function { + id: 0x9b420e77 + return_type_id: 0x6720d32f + parameter_id: 0x14b9453b + parameter_id: 0xf435685e + parameter_id: 0xf1a6dfed +} function { id: 0x9b4219a6 return_type_id: 0x6720d32f @@ -330080,6 +335735,14 @@ function { parameter_id: 0x18bd6530 parameter_id: 0x39182992 } +function { + id: 0x9b4bfaf9 + return_type_id: 0x6720d32f + parameter_id: 0x1a8d1bcb + parameter_id: 0x1bf16028 + parameter_id: 0x18bd6530 + parameter_id: 0x6d7f5ff6 +} function { id: 0x9b4c2000 return_type_id: 0x6720d32f @@ -330232,6 +335895,12 @@ function { parameter_id: 0x4585663f parameter_id: 0x4585663f } +function { + id: 0x9b51e812 + return_type_id: 0x6720d32f + parameter_id: 0x18bd6530 + parameter_id: 0x3f949c69 +} function { id: 0x9b520f2d return_type_id: 0x6720d32f @@ -330395,6 +336064,12 @@ function { parameter_id: 0x18bd6530 parameter_id: 0x3e10b518 } +function { + id: 0x9b585c8d + return_type_id: 0x6720d32f + parameter_id: 0x18bd6530 + parameter_id: 0x3df9bbb6 +} function { id: 0x9b5888dd return_type_id: 0x6720d32f @@ -330487,6 +336162,14 @@ function { parameter_id: 0x30e68a3c parameter_id: 0xfc0e1dbd } +function { + id: 0x9b5eb7d7 + return_type_id: 0x6720d32f + parameter_id: 0x18bd6530 + parameter_id: 0x38d23361 + parameter_id: 0x4585663f + parameter_id: 0xc9082b19 +} function { id: 0x9b5ee6f1 return_type_id: 0x6720d32f @@ -330550,6 +336233,12 @@ function { parameter_id: 0x18bd6530 parameter_id: 0x33756485 } +function { + id: 0x9b629efc + return_type_id: 0x6720d32f + parameter_id: 0x18bd6530 + parameter_id: 0x334927f6 +} function { id: 0x9b634f08 return_type_id: 0x6720d32f @@ -330756,6 +336445,12 @@ function { parameter_id: 0x3e10b518 parameter_id: 0xf435685e } +function { + id: 0x9b6b1e20 + return_type_id: 0x6720d32f + parameter_id: 0x18bd6530 + parameter_id: 0x312910e3 +} function { id: 0x9b6b31b5 return_type_id: 0xf435685e @@ -330872,6 +336567,16 @@ function { parameter_id: 0x1dce0fdd parameter_id: 0x6720d32f } +function { + id: 0x9b70b934 + return_type_id: 0x6720d32f + parameter_id: 0x18bd6530 + parameter_id: 0x312910e3 + parameter_id: 0x6720d32f + parameter_id: 0x92233392 + parameter_id: 0x92233392 + parameter_id: 0xc9082b19 +} function { id: 0x9b70ef80 return_type_id: 0x6720d32f @@ -331147,6 +336852,16 @@ function { parameter_id: 0x14b9453b parameter_id: 0xf435685e } +function { + id: 0x9b7ea2d3 + return_type_id: 0x6720d32f + parameter_id: 0x1a8d1bcb + parameter_id: 0x13580d6c + parameter_id: 0x4585663f + parameter_id: 0x4585663f + parameter_id: 0x4585663f + parameter_id: 0x4585663f +} function { id: 0x9b7ebe53 return_type_id: 0x6720d32f @@ -331236,6 +336951,29 @@ function { parameter_id: 0x1bf16028 parameter_id: 0x29f042bf } +function { + id: 0x9b860319 + return_type_id: 0x6720d32f + parameter_id: 0x18bd6530 + parameter_id: 0x0a747547 + parameter_id: 0x00be4281 + parameter_id: 0x11cfee5a +} +function { + id: 0x9b8629f4 + return_type_id: 0x6720d32f + parameter_id: 0x18bd6530 + parameter_id: 0x09427c40 + parameter_id: 0x33756485 + parameter_id: 0x11cfee5a +} +function { + id: 0x9b86643e + return_type_id: 0x6720d32f + parameter_id: 0x18bd6530 + parameter_id: 0x0a134144 + parameter_id: 0x064d6086 +} function { id: 0x9b8743c4 return_type_id: 0x6720d32f @@ -331524,6 +337262,15 @@ function { parameter_id: 0x18bd6530 parameter_id: 0x0d5f1839 } +function { + id: 0x9b9ae18e + return_type_id: 0x6720d32f + parameter_id: 0x18bd6530 + parameter_id: 0x0d5f1839 + parameter_id: 0x0483e6f8 + parameter_id: 0x4585663f + parameter_id: 0x4585663f +} function { id: 0x9b9bd882 return_type_id: 0x6720d32f @@ -331571,6 +337318,13 @@ function { parameter_id: 0x18bd6530 parameter_id: 0x0c93cbc1 } +function { + id: 0x9b9e9fff + return_type_id: 0x6720d32f + parameter_id: 0x18bd6530 + parameter_id: 0x0d7ce7cc + parameter_id: 0x13580d6c +} function { id: 0x9b9ef31d return_type_id: 0x6720d32f @@ -331627,6 +337381,13 @@ function { return_type_id: 0x6720d32f parameter_id: 0x188b9e81 } +function { + id: 0x9ba20f85 + return_type_id: 0x6720d32f + parameter_id: 0x18bd6530 + parameter_id: 0x0258f96e + parameter_id: 0x13580d6c +} function { id: 0x9ba25f4a return_type_id: 0x6720d32f @@ -331655,6 +337416,13 @@ function { parameter_id: 0x24373219 parameter_id: 0x1c3dbe5a } +function { + id: 0x9ba2be49 + return_type_id: 0x6720d32f + parameter_id: 0x18bd6530 + parameter_id: 0x0a63398f + parameter_id: 0x92233392 +} function { id: 0x9ba2dbe7 return_type_id: 0x6720d32f @@ -331675,6 +337443,15 @@ function { parameter_id: 0x09d25c5b parameter_id: 0x07f5d8a3 } +function { + id: 0x9ba346af + return_type_id: 0x6720d32f + parameter_id: 0x1b55a8f2 + parameter_id: 0x3e10b518 + parameter_id: 0x3e75499e + parameter_id: 0x4585663f + parameter_id: 0x18bd6530 +} function { id: 0x9ba39408 return_type_id: 0x6720d32f @@ -331724,6 +337501,13 @@ function { parameter_id: 0x06835e9c parameter_id: 0x4585663f } +function { + id: 0x9ba4eebd + return_type_id: 0x6720d32f + parameter_id: 0x18bd6530 + parameter_id: 0x026525e9 + parameter_id: 0x0b012462 +} function { id: 0x9ba51920 return_type_id: 0x6720d32f @@ -331760,6 +337544,12 @@ function { parameter_id: 0x33756485 parameter_id: 0x18bd6530 } +function { + id: 0x9ba6d986 + return_type_id: 0x6720d32f + parameter_id: 0x18bd6530 + parameter_id: 0x0258f96e +} function { id: 0x9ba70913 return_type_id: 0x6720d32f @@ -331861,6 +337651,13 @@ function { parameter_id: 0x6720d32f parameter_id: 0x6720d32f } +function { + id: 0x9baa4352 + return_type_id: 0x6720d32f + parameter_id: 0x18bd6530 + parameter_id: 0x00abf683 + parameter_id: 0x1d5bae2a +} function { id: 0x9baa8508 return_type_id: 0x6720d32f @@ -331969,6 +337766,13 @@ function { return_type_id: 0x6720d32f parameter_id: 0x18bd6530 } +function { + id: 0x9bb0dfd9 + return_type_id: 0x6720d32f + parameter_id: 0x18bd6530 + parameter_id: 0x06835e9c + parameter_id: 0x15a30023 +} function { id: 0x9bb12429 return_type_id: 0x6720d32f @@ -332099,6 +337903,13 @@ function { parameter_id: 0x064d6086 parameter_id: 0x064d6086 } +function { + id: 0x9bb72f36 + return_type_id: 0x6720d32f + parameter_id: 0x18bd6530 + parameter_id: 0x064d6086 + parameter_id: 0x06835e9c +} function { id: 0x9bb7d1e6 return_type_id: 0x6720d32f @@ -332511,6 +338322,14 @@ function { parameter_id: 0x1a8d1bcb parameter_id: 0x1a8d1bcb } +function { + id: 0x9bc35bd0 + return_type_id: 0x6720d32f + parameter_id: 0x18bd6530 + parameter_id: 0x1d5bae2a + parameter_id: 0x6720d32f + parameter_id: 0x11cfee5a +} function { id: 0x9bc3617d return_type_id: 0x6720d32f @@ -332554,6 +338373,13 @@ function { parameter_id: 0x18bd6530 parameter_id: 0x716d7970 } +function { + id: 0x9bc52d71 + return_type_id: 0x6720d32f + parameter_id: 0x18bd6530 + parameter_id: 0x1b8590a8 + parameter_id: 0x120540d1 +} function { id: 0x9bc5dfda return_type_id: 0x6720d32f @@ -332575,6 +338401,20 @@ function { parameter_id: 0x188b9e81 parameter_id: 0x19118777 } +function { + id: 0x9bc6b348 + return_type_id: 0x6720d32f + parameter_id: 0x18bd6530 + parameter_id: 0x1582ab06 + parameter_id: 0xfc0e1dbd +} +function { + id: 0x9bc6be8a + return_type_id: 0x6720d32f + parameter_id: 0x18bd6530 + parameter_id: 0x1b5dc4bf + parameter_id: 0x11cfee5a +} function { id: 0x9bc757bb return_type_id: 0x6720d32f @@ -332634,6 +338474,14 @@ function { parameter_id: 0x7be80061 parameter_id: 0x4585663f } +function { + id: 0x9bca672a + return_type_id: 0x6720d32f + parameter_id: 0x18bd6530 + parameter_id: 0x18db1c77 + parameter_id: 0x1bf16028 + parameter_id: 0x13580d6c +} function { id: 0x9bca793f return_type_id: 0x6720d32f @@ -332678,6 +338526,12 @@ function { parameter_id: 0x6720d32f parameter_id: 0x11cfee5a } +function { + id: 0x9bccd612 + return_type_id: 0x6720d32f + parameter_id: 0x18bd6530 + parameter_id: 0x18db1c77 +} function { id: 0x9bcd4bf2 return_type_id: 0x6720d32f @@ -333188,6 +339042,13 @@ function { parameter_id: 0x18bd6530 parameter_id: 0x1dce0fdd } +function { + id: 0x9bd88b02 + return_type_id: 0x6720d32f + parameter_id: 0x18bd6530 + parameter_id: 0x1d19a9d5 + parameter_id: 0x0d5f1839 +} function { id: 0x9bd88c03 return_type_id: 0x6720d32f @@ -333495,6 +339356,13 @@ function { parameter_id: 0x0017d728 parameter_id: 0x66f6fc33 } +function { + id: 0x9bdea720 + return_type_id: 0x6720d32f + parameter_id: 0x18bd6530 + parameter_id: 0x1d5bae2a + parameter_id: 0x11cfee5a +} function { id: 0x9bdf0ac7 return_type_id: 0x6720d32f @@ -333709,6 +339577,14 @@ function { parameter_id: 0x18bd6530 parameter_id: 0x1013df15 } +function { + id: 0x9bf1212e + return_type_id: 0x6720d32f + parameter_id: 0x18bd6530 + parameter_id: 0x1582ab06 + parameter_id: 0x2170d06d + parameter_id: 0x33756485 +} function { id: 0x9bf18f52 return_type_id: 0x6720d32f @@ -334210,6 +340086,16 @@ function { parameter_id: 0x3e10b518 parameter_id: 0x18bd6530 } +function { + id: 0x9c3b7a8f + return_type_id: 0x6720d32f + parameter_id: 0x055bedb1 + parameter_id: 0x3f0185ef + parameter_id: 0x4585663f + parameter_id: 0x00c72527 + parameter_id: 0x1bf16028 + parameter_id: 0x18bd6530 +} function { id: 0x9c3e4be2 return_type_id: 0x6720d32f @@ -334929,11 +340815,25 @@ function { parameter_id: 0x060cf413 parameter_id: 0x2e18f543 } +function { + id: 0x9cbc8dea + return_type_id: 0x6720d32f + parameter_id: 0x07f2af49 + parameter_id: 0x33756485 + parameter_id: 0x3e10b518 + parameter_id: 0xa52a0930 +} function { id: 0x9cbd1bd9 return_type_id: 0x3e146274 parameter_id: 0x3fa672fd } +function { + id: 0x9cbe9fe5 + return_type_id: 0x6720d32f + parameter_id: 0x060cf413 + parameter_id: 0x2f5073a5 +} function { id: 0x9cc0eb8f return_type_id: 0x6720d32f @@ -335697,6 +341597,12 @@ function { parameter_id: 0x366f4294 parameter_id: 0x052d8c89 } +function { + id: 0x9d285d26 + return_type_id: 0x6720d32f + parameter_id: 0x0258f96e + parameter_id: 0x0fa01494 +} function { id: 0x9d2c14da return_type_id: 0x6720d32f @@ -336906,6 +342812,16 @@ function { parameter_id: 0x11a649c9 parameter_id: 0x4585663f } +function { + id: 0x9dc2f17b + return_type_id: 0xf435685e + parameter_id: 0x2a886524 + parameter_id: 0x18bd6530 + parameter_id: 0xf435685e + parameter_id: 0x391f15ea + parameter_id: 0xf435685e + parameter_id: 0x37ef0e97 +} function { id: 0x9dc4a276 return_type_id: 0x6720d32f @@ -338549,6 +344465,11 @@ function { parameter_id: 0x1b8590a8 parameter_id: 0x6720d32f } +function { + id: 0x9eb5f3eb + return_type_id: 0xf435685e + parameter_id: 0x2628eae6 +} function { id: 0x9eb724d7 return_type_id: 0x6720d32f @@ -338583,6 +344504,12 @@ function { parameter_id: 0x0e2feee3 parameter_id: 0x2c0e0dce } +function { + id: 0x9ebbeb61 + return_type_id: 0x6720d32f + parameter_id: 0x0cd5bff8 + parameter_id: 0x0399ec3e +} function { id: 0x9ebc14d6 return_type_id: 0x6720d32f @@ -338743,6 +344670,15 @@ function { parameter_id: 0x26ee682a parameter_id: 0x6720d32f } +function { + id: 0x9ed60004 + return_type_id: 0xf435685e + parameter_id: 0x26dba3a7 + parameter_id: 0x18bd6530 + parameter_id: 0xf435685e + parameter_id: 0x391f15ea + parameter_id: 0xf435685e +} function { id: 0x9ed68372 return_type_id: 0x6720d32f @@ -339166,6 +345102,14 @@ function { parameter_id: 0x0a1edf98 parameter_id: 0x0a1edf98 } +function { + id: 0x9f317254 + return_type_id: 0x6720d32f + parameter_id: 0x0cd5bff8 + parameter_id: 0x6720d32f + parameter_id: 0x6720d32f + parameter_id: 0x6d7f5ff6 +} function { id: 0x9f34fd43 return_type_id: 0x6720d32f @@ -340466,6 +346410,12 @@ function { parameter_id: 0x25653b02 parameter_id: 0x0d10073d } +function { + id: 0xa2878209 + return_type_id: 0x0258f96e + parameter_id: 0x3e10b518 + parameter_id: 0x0b27dc43 +} function { id: 0xa28a8fc1 return_type_id: 0x0e2680c2 @@ -340996,6 +346946,13 @@ function { return_type_id: 0xf419f1fe parameter_id: 0x11c404ba } +function { + id: 0xac6cacda + return_type_id: 0x0258f96e + parameter_id: 0x0483e6f8 + parameter_id: 0x18bd6530 + parameter_id: 0x06433852 +} function { id: 0xac8d9251 return_type_id: 0x0642705a @@ -341235,6 +347192,11 @@ function { parameter_id: 0x3b04bead parameter_id: 0x358ff5b7 } +function { + id: 0xb145a9a1 + return_type_id: 0x06835e9c + parameter_id: 0x33756485 +} function { id: 0xb166862a return_type_id: 0x399c459b @@ -341274,6 +347236,16 @@ function { return_type_id: 0x06835e9c parameter_id: 0x391f15ea } +function { + id: 0xb3ee572b + return_type_id: 0x1a2c7f0e + parameter_id: 0x0258f96e + parameter_id: 0xc9082b19 + parameter_id: 0xf435685e + parameter_id: 0xc9082b19 + parameter_id: 0x3e10b518 + parameter_id: 0xa52a0930 +} function { id: 0xb3eff14b return_type_id: 0x067c4b9a @@ -341959,6 +347931,12 @@ function { return_type_id: 0x4585663f parameter_id: 0x31fa879c } +function { + id: 0xc2d4304a + return_type_id: 0x4585663f + parameter_id: 0x34656ca7 + parameter_id: 0x4585663f +} function { id: 0xc2e99087 return_type_id: 0x0ab9fa4c @@ -342111,6 +348089,11 @@ function { parameter_id: 0x2e029f76 parameter_id: 0x1d19a9d5 } +function { + id: 0xc5642af6 + return_type_id: 0x4585663f + parameter_id: 0x2efd5036 +} function { id: 0xc564dee2 return_type_id: 0x4585663f @@ -342202,6 +348185,12 @@ function { parameter_id: 0x3e10b518 parameter_id: 0x6720d32f } +function { + id: 0xc772fd1b + return_type_id: 0x4585663f + parameter_id: 0x2628eae6 + parameter_id: 0x08ee566e +} function { id: 0xc7812729 return_type_id: 0x4585663f @@ -342330,6 +348319,16 @@ function { parameter_id: 0x4585663f parameter_id: 0x4585663f } +function { + id: 0xc9a5aa04 + return_type_id: 0x3e75499e + parameter_id: 0xc9082b19 +} +function { + id: 0xc9e8def3 + return_type_id: 0x4585663f + parameter_id: 0x1cce8023 +} function { id: 0xc9f4f8be return_type_id: 0x4585663f @@ -342932,6 +348931,11 @@ function { parameter_id: 0x3e10b518 parameter_id: 0x18bd6530 } +function { + id: 0xdb365209 + return_type_id: 0x030b9acf + parameter_id: 0x11c404ba +} function { id: 0xdb53d61f return_type_id: 0x3f095459 @@ -343519,6 +349523,12 @@ function { parameter_id: 0x18bd6530 parameter_id: 0x00d82b18 } +function { + id: 0xea297877 + return_type_id: 0x2a886524 + parameter_id: 0x18bd6530 + parameter_id: 0xf435685e +} function { id: 0xea4685f2 return_type_id: 0x32c156ea @@ -344084,6 +350094,11 @@ function { parameter_id: 0x3176a085 parameter_id: 0x1d5935e7 } +function { + id: 0xf2b2b1ab + return_type_id: 0x6d7f5ff6 + parameter_id: 0x305baabf +} function { id: 0xf2b9b89c return_type_id: 0x26e55184 @@ -344289,6 +350304,11 @@ function { parameter_id: 0x31fa879c parameter_id: 0x4585663f } +function { + id: 0xf3d624ec + return_type_id: 0x4585663f + parameter_id: 0xf435685e +} function { id: 0xf3dba0e1 return_type_id: 0x6d7f5ff6 @@ -344316,6 +350336,13 @@ function { return_type_id: 0x32a623d7 parameter_id: 0x3e10b518 } +function { + id: 0xf4262a21 + return_type_id: 0x6d7f5ff6 + parameter_id: 0x291e8a5b + parameter_id: 0x30ff3abd + parameter_id: 0x18bd6530 +} function { id: 0xf44fff9f return_type_id: 0x6d7f5ff6 @@ -344760,6 +350787,12 @@ function { return_type_id: 0x3a9fa744 parameter_id: 0x32caaf24 } +function { + id: 0xf924bafa + return_type_id: 0x6d7f5ff6 + parameter_id: 0x17175c07 + parameter_id: 0x914dbfdc +} function { id: 0xf938bd88 return_type_id: 0x6d7f5ff6 @@ -344841,6 +350874,12 @@ function { parameter_id: 0x3e909b01 parameter_id: 0x33756485 } +function { + id: 0xfa672d54 + return_type_id: 0x26dba3a7 + parameter_id: 0x18bd6530 + parameter_id: 0xf435685e +} function { id: 0xfab273f5 return_type_id: 0x6d7f5ff6 @@ -345146,6 +351185,12 @@ function { parameter_id: 0x4585663f parameter_id: 0x3842259a } +function { + id: 0xfdd8415b + return_type_id: 0x6d7f5ff6 + parameter_id: 0x09a83f1c + parameter_id: 0x4585663f +} function { id: 0xfddd6aa8 return_type_id: 0x6d7f5ff6 @@ -345400,6 +351445,24 @@ function { return_type_id: 0x6d7f5ff6 parameter_id: 0x0562c566 } +elf_symbol { + id: 0x698a526c + name: "ANDROID_GKI_memcg_stat_item" + is_defined: true + symbol_type: OBJECT + crc: 0x7a01e9f7 + type_id: 0xc9099682 + full_name: "ANDROID_GKI_memcg_stat_item" +} +elf_symbol { + id: 0x4203f861 + name: "ANDROID_GKI_node_stat_item" + is_defined: true + symbol_type: OBJECT + crc: 0xc122a9b3 + type_id: 0xd700b6f9 + full_name: "ANDROID_GKI_node_stat_item" +} elf_symbol { id: 0xd5cb4002 name: "ANDROID_GKI_struct_dwc3" @@ -347430,6 +353493,24 @@ elf_symbol { type_id: 0x1adff305 full_name: "__kunit_abort" } +elf_symbol { + id: 0x9a951407 + name: "__kunit_activate_static_stub" + is_defined: true + symbol_type: FUNCTION + crc: 0xe45759b7 + type_id: 0x1abb29c8 + full_name: "__kunit_activate_static_stub" +} +elf_symbol { + id: 0x418d6ad6 + name: "__kunit_add_resource" + is_defined: true + symbol_type: FUNCTION + crc: 0x27575b3b + type_id: 0x9602dbff + full_name: "__kunit_add_resource" +} elf_symbol { id: 0x0a5cc8aa name: "__kunit_do_failed_assertion" @@ -347439,6 +353520,24 @@ elf_symbol { type_id: 0x1a1815c7 full_name: "__kunit_do_failed_assertion" } +elf_symbol { + id: 0x1f30cacd + name: "__kunit_test_suites_exit" + is_defined: true + symbol_type: FUNCTION + crc: 0xb1f131a7 + type_id: 0x11c25218 + full_name: "__kunit_test_suites_exit" +} +elf_symbol { + id: 0xede9ef5f + name: "__kunit_test_suites_init" + is_defined: true + symbol_type: FUNCTION + crc: 0xf70b719a + type_id: 0x93e1d37b + full_name: "__kunit_test_suites_init" +} elf_symbol { id: 0x67989f5a name: "__list_add_valid_or_report" @@ -347996,6 +354095,15 @@ elf_symbol { type_id: 0x919cb2c5 full_name: "__pkvm_topup_hyp_alloc_mgt" } +elf_symbol { + id: 0x42bef347 + name: "__pkvm_topup_hyp_alloc_mgt_gfp" + is_defined: true + symbol_type: FUNCTION + crc: 0x75f95ba7 + type_id: 0x919f745e + full_name: "__pkvm_topup_hyp_alloc_mgt_gfp" +} elf_symbol { id: 0x430bd907 name: "__platform_driver_probe" @@ -348339,6 +354447,15 @@ elf_symbol { type_id: 0x96bbe934 full_name: "__rht_bucket_nested" } +elf_symbol { + id: 0xd5276fa4 + name: "__root_device_register" + is_defined: true + symbol_type: FUNCTION + crc: 0xde80d506 + type_id: 0xa2878209 + full_name: "__root_device_register" +} elf_symbol { id: 0x98379aaf name: "__rt_mutex_init" @@ -348862,6 +354979,15 @@ elf_symbol { type_id: 0x918cb258 full_name: "__trace_bprintk" } +elf_symbol { + id: 0x46adfea4 + name: "__trace_bputs" + is_defined: true + symbol_type: FUNCTION + crc: 0xb1e25684 + type_id: 0x91a5f8da + full_name: "__trace_bputs" +} elf_symbol { id: 0x233d8b34 name: "__trace_puts" @@ -348916,6 +355042,15 @@ elf_symbol { type_id: 0x9bc8472e full_name: "__traceiter_android_rvh_alloc_and_link_pwqs" } +elf_symbol { + id: 0xef79dd4d + name: "__traceiter_android_rvh_alloc_workqueue" + is_defined: true + symbol_type: FUNCTION + crc: 0xc0d90a3b + type_id: 0x9bca672a + full_name: "__traceiter_android_rvh_alloc_workqueue" +} elf_symbol { id: 0x0b48afa1 name: "__traceiter_android_rvh_arm64_serror_panic" @@ -349168,6 +355303,15 @@ elf_symbol { type_id: 0x9b5be873 full_name: "__traceiter_android_rvh_die_kernel_fault" } +elf_symbol { + id: 0xaed18130 + name: "__traceiter_android_rvh_dma_buf_stats_teardown" + is_defined: true + symbol_type: FUNCTION + crc: 0x8d429a3c + type_id: 0x9bc6be8a + full_name: "__traceiter_android_rvh_dma_buf_stats_teardown" +} elf_symbol { id: 0x40034e11 name: "__traceiter_android_rvh_do_el1_bti" @@ -349276,6 +355420,15 @@ elf_symbol { type_id: 0x9b427bba full_name: "__traceiter_android_rvh_exit_creds" } +elf_symbol { + id: 0x35765b66 + name: "__traceiter_android_rvh_f2fs_down_read" + is_defined: true + symbol_type: FUNCTION + crc: 0xc9b4beea + type_id: 0x9b860319 + full_name: "__traceiter_android_rvh_f2fs_down_read" +} elf_symbol { id: 0xf94ce10d name: "__traceiter_android_rvh_find_busiest_group" @@ -349474,6 +355627,24 @@ elf_symbol { type_id: 0x9bc253cf full_name: "__traceiter_android_rvh_is_cpu_allowed" } +elf_symbol { + id: 0x7fcabbe6 + name: "__traceiter_android_rvh_ksys_umount" + is_defined: true + symbol_type: FUNCTION + crc: 0x34f7fac0 + type_id: 0x9ba47dcc + full_name: "__traceiter_android_rvh_ksys_umount" +} +elf_symbol { + id: 0x3444c3ba + name: "__traceiter_android_rvh_logbuf" + is_defined: true + symbol_type: FUNCTION + crc: 0x3613a672 + type_id: 0x9b50addb + full_name: "__traceiter_android_rvh_logbuf" +} elf_symbol { id: 0x1ea5d323 name: "__traceiter_android_rvh_migrate_queued_task" @@ -350437,6 +356608,15 @@ elf_symbol { type_id: 0x9b730ea8 full_name: "__traceiter_android_vh_alloc_contig_range_not_isolated" } +elf_symbol { + id: 0x666f7184 + name: "__traceiter_android_vh_alloc_flags_cma_adjust" + is_defined: true + symbol_type: FUNCTION + crc: 0x5ad2b656 + type_id: 0x986fdd44 + full_name: "__traceiter_android_vh_alloc_flags_cma_adjust" +} elf_symbol { id: 0xd0b4a794 name: "__traceiter_android_vh_alloc_oem_binder_struct" @@ -350833,6 +357013,24 @@ elf_symbol { type_id: 0x9bacd4a1 full_name: "__traceiter_android_vh_blk_fill_rwbs" } +elf_symbol { + id: 0x47b414fe + name: "__traceiter_android_vh_blk_mq_delay_run_hw_queue" + is_defined: true + symbol_type: FUNCTION + crc: 0x302a52d6 + type_id: 0x9a3b72b7 + full_name: "__traceiter_android_vh_blk_mq_delay_run_hw_queue" +} +elf_symbol { + id: 0x4ae900a4 + name: "__traceiter_android_vh_blk_mq_kick_requeue_list" + is_defined: true + symbol_type: FUNCTION + crc: 0x99d57750 + type_id: 0x9b8629f4 + full_name: "__traceiter_android_vh_blk_mq_kick_requeue_list" +} elf_symbol { id: 0xe479b209 name: "__traceiter_android_vh_build_sched_domains" @@ -350968,6 +357166,15 @@ elf_symbol { type_id: 0x9bad4369 full_name: "__traceiter_android_vh_clear_rwsem_writer_owned" } +elf_symbol { + id: 0x9cbc7813 + name: "__traceiter_android_vh_cma_alloc_retry" + is_defined: true + symbol_type: FUNCTION + crc: 0x1921ac58 + type_id: 0x9bb963fb + full_name: "__traceiter_android_vh_cma_alloc_retry" +} elf_symbol { id: 0x478c1248 name: "__traceiter_android_vh_cma_alloc_set_max_retries" @@ -351202,6 +357409,24 @@ elf_symbol { type_id: 0x9b3112ac full_name: "__traceiter_android_vh_del_page_from_lrulist" } +elf_symbol { + id: 0x17df4128 + name: "__traceiter_android_vh_direct_reclaim_begin" + is_defined: true + symbol_type: FUNCTION + crc: 0xcedb9e1a + type_id: 0x9be2da56 + full_name: "__traceiter_android_vh_direct_reclaim_begin" +} +elf_symbol { + id: 0x5db6a094 + name: "__traceiter_android_vh_direct_reclaim_end" + is_defined: true + symbol_type: FUNCTION + crc: 0x47bf6c00 + type_id: 0x9a33392f + full_name: "__traceiter_android_vh_direct_reclaim_end" +} elf_symbol { id: 0x0bf2f5bb name: "__traceiter_android_vh_disable_thermal_cooling_stats" @@ -351274,6 +357499,15 @@ elf_symbol { type_id: 0x9a35263f full_name: "__traceiter_android_vh_do_futex" } +elf_symbol { + id: 0xb5020a7f + name: "__traceiter_android_vh_do_group_exit" + is_defined: true + symbol_type: FUNCTION + crc: 0x87f2aec7 + type_id: 0x9bdbdcc4 + full_name: "__traceiter_android_vh_do_group_exit" +} elf_symbol { id: 0x707cf8c6 name: "__traceiter_android_vh_do_new_mount_fc" @@ -351346,6 +357580,24 @@ elf_symbol { type_id: 0x9b2a7922 full_name: "__traceiter_android_vh_do_wp_page" } +elf_symbol { + id: 0xdd171ab0 + name: "__traceiter_android_vh_dpm_wait_finish" + is_defined: true + symbol_type: FUNCTION + crc: 0xf6226fc9 + type_id: 0x9ba6d986 + full_name: "__traceiter_android_vh_dpm_wait_finish" +} +elf_symbol { + id: 0x515cade3 + name: "__traceiter_android_vh_dpm_wait_start" + is_defined: true + symbol_type: FUNCTION + crc: 0x5a8a688f + type_id: 0x9ba6d986 + full_name: "__traceiter_android_vh_dpm_wait_start" +} elf_symbol { id: 0xf80eb64b name: "__traceiter_android_vh_drain_all_pages_bypass" @@ -351436,6 +357688,15 @@ elf_symbol { type_id: 0x9bc796bb full_name: "__traceiter_android_vh_f2fs_file_open" } +elf_symbol { + id: 0xcb0a2c01 + name: "__traceiter_android_vh_f2fs_improve_priority" + is_defined: true + symbol_type: FUNCTION + crc: 0xb827a3cb + type_id: 0x9bdf4df8 + full_name: "__traceiter_android_vh_f2fs_improve_priority" +} elf_symbol { id: 0x377d134d name: "__traceiter_android_vh_f2fs_ra_op_flags" @@ -351445,6 +357706,15 @@ elf_symbol { type_id: 0x9bf7484d full_name: "__traceiter_android_vh_f2fs_ra_op_flags" } +elf_symbol { + id: 0x905272e6 + name: "__traceiter_android_vh_f2fs_restore_priority" + is_defined: true + symbol_type: FUNCTION + crc: 0x2ae668ab + type_id: 0x9bc214f0 + full_name: "__traceiter_android_vh_f2fs_restore_priority" +} elf_symbol { id: 0x93a4717b name: "__traceiter_android_vh_file_is_tiny_bypass" @@ -351454,6 +357724,15 @@ elf_symbol { type_id: 0x9a1e34e7 full_name: "__traceiter_android_vh_file_is_tiny_bypass" } +elf_symbol { + id: 0x6091a763 + name: "__traceiter_android_vh_filemap_add_folio" + is_defined: true + symbol_type: FUNCTION + crc: 0x53e64195 + type_id: 0x9bf1212e + full_name: "__traceiter_android_vh_filemap_add_folio" +} elf_symbol { id: 0x19fc04e0 name: "__traceiter_android_vh_filemap_fault_end" @@ -351499,6 +357778,42 @@ elf_symbol { type_id: 0x9bf18f52 full_name: "__traceiter_android_vh_filemap_update_page" } +elf_symbol { + id: 0x1b65e021 + name: "__traceiter_android_vh_flush_work_wait_finish" + is_defined: true + symbol_type: FUNCTION + crc: 0xf424a833 + type_id: 0x9b9ac603 + full_name: "__traceiter_android_vh_flush_work_wait_finish" +} +elf_symbol { + id: 0xd44631ef + name: "__traceiter_android_vh_flush_work_wait_start" + is_defined: true + symbol_type: FUNCTION + crc: 0xa3200b4e + type_id: 0x9b9ac603 + full_name: "__traceiter_android_vh_flush_work_wait_start" +} +elf_symbol { + id: 0xf110e9f6 + name: "__traceiter_android_vh_flush_wq_wait_finish" + is_defined: true + symbol_type: FUNCTION + crc: 0x18e3e4e3 + type_id: 0x9bccd612 + full_name: "__traceiter_android_vh_flush_wq_wait_finish" +} +elf_symbol { + id: 0x5f626e29 + name: "__traceiter_android_vh_flush_wq_wait_start" + is_defined: true + symbol_type: FUNCTION + crc: 0xcc0e4dfb + type_id: 0x9bccd612 + full_name: "__traceiter_android_vh_flush_wq_wait_start" +} elf_symbol { id: 0x1fca37bf name: "__traceiter_android_vh_folio_trylock_clear" @@ -351517,6 +357832,15 @@ elf_symbol { type_id: 0x9b2a7922 full_name: "__traceiter_android_vh_folio_trylock_set" } +elf_symbol { + id: 0xa51a0f0c + name: "__traceiter_android_vh_free_mod_mem" + is_defined: true + symbol_type: FUNCTION + crc: 0x01ea0a17 + type_id: 0x9b585c8d + full_name: "__traceiter_android_vh_free_mod_mem" +} elf_symbol { id: 0x9e91661b name: "__traceiter_android_vh_free_oem_binder_struct" @@ -351688,6 +358012,15 @@ elf_symbol { type_id: 0x9a8bedf1 full_name: "__traceiter_android_vh_futex_wait_end" } +elf_symbol { + id: 0x036eff0c + name: "__traceiter_android_vh_futex_wait_queue_start" + is_defined: true + symbol_type: FUNCTION + crc: 0x0b618679 + type_id: 0x9b5eb7d7 + full_name: "__traceiter_android_vh_futex_wait_queue_start" +} elf_symbol { id: 0x4f81fc38 name: "__traceiter_android_vh_futex_wait_start" @@ -351742,6 +358075,33 @@ elf_symbol { type_id: 0x9ab83ca3 full_name: "__traceiter_android_vh_get_page_wmark" } +elf_symbol { + id: 0x0c91a472 + name: "__traceiter_android_vh_gzvm_destroy_vm_post_process" + is_defined: true + symbol_type: FUNCTION + crc: 0xd7cca37c + type_id: 0x9b6b1e20 + full_name: "__traceiter_android_vh_gzvm_destroy_vm_post_process" +} +elf_symbol { + id: 0xd402982f + name: "__traceiter_android_vh_gzvm_handle_demand_page_post" + is_defined: true + symbol_type: FUNCTION + crc: 0xf01dda31 + type_id: 0x9b70b934 + full_name: "__traceiter_android_vh_gzvm_handle_demand_page_post" +} +elf_symbol { + id: 0xe9a19bff + name: "__traceiter_android_vh_gzvm_handle_demand_page_pre" + is_defined: true + symbol_type: FUNCTION + crc: 0x6516707a + type_id: 0x9b70b934 + full_name: "__traceiter_android_vh_gzvm_handle_demand_page_pre" +} elf_symbol { id: 0x47a1ebbd name: "__traceiter_android_vh_gzvm_vcpu_exit_reason" @@ -351778,6 +358138,15 @@ elf_symbol { type_id: 0x9bd71efe full_name: "__traceiter_android_vh_inet_csk_clone_lock" } +elf_symbol { + id: 0xa8439430 + name: "__traceiter_android_vh_init_adjust_zone_wmark" + is_defined: true + symbol_type: FUNCTION + crc: 0x4b8b75ae + type_id: 0x9ba2be49 + full_name: "__traceiter_android_vh_init_adjust_zone_wmark" +} elf_symbol { id: 0x2b3e4b23 name: "__traceiter_android_vh_inode_lru_isolate" @@ -352030,6 +358399,15 @@ elf_symbol { type_id: 0x9bdad4db full_name: "__traceiter_android_vh_mem_cgroup_alloc" } +elf_symbol { + id: 0x44892f77 + name: "__traceiter_android_vh_mem_cgroup_charge" + is_defined: true + symbol_type: FUNCTION + crc: 0x336a6e91 + type_id: 0x9b290896 + full_name: "__traceiter_android_vh_mem_cgroup_charge" +} elf_symbol { id: 0x27757c9a name: "__traceiter_android_vh_mem_cgroup_css_offline" @@ -352084,6 +358462,24 @@ elf_symbol { type_id: 0x9bb62df9 full_name: "__traceiter_android_vh_meminfo_proc_show" } +elf_symbol { + id: 0x105350cb + name: "__traceiter_android_vh_mglru_should_abort_scan" + is_defined: true + symbol_type: FUNCTION + crc: 0x23dfd4d7 + type_id: 0x9b13aa4d + full_name: "__traceiter_android_vh_mglru_should_abort_scan" +} +elf_symbol { + id: 0x83742db6 + name: "__traceiter_android_vh_mglru_should_abort_scan_order" + is_defined: true + symbol_type: FUNCTION + crc: 0xe76b37b9 + type_id: 0x9abddc00 + full_name: "__traceiter_android_vh_mglru_should_abort_scan_order" +} elf_symbol { id: 0x9f58159a name: "__traceiter_android_vh_mm_direct_reclaim_enter" @@ -352102,6 +358498,15 @@ elf_symbol { type_id: 0x9b7ba7c5 full_name: "__traceiter_android_vh_mm_direct_reclaim_exit" } +elf_symbol { + id: 0x6f5c8275 + name: "__traceiter_android_vh_mm_kcompactd_cpu_online" + is_defined: true + symbol_type: FUNCTION + crc: 0x0e957ed4 + type_id: 0x9a33392f + full_name: "__traceiter_android_vh_mm_kcompactd_cpu_online" +} elf_symbol { id: 0xf182fb15 name: "__traceiter_android_vh_mm_may_oom_exit" @@ -352129,6 +358534,15 @@ elf_symbol { type_id: 0x9b77df43 full_name: "__traceiter_android_vh_mmc_sdio_pm_flag_set" } +elf_symbol { + id: 0xc168df93 + name: "__traceiter_android_vh_mmc_update_mmc_queue" + is_defined: true + symbol_type: FUNCTION + crc: 0x9999acd8 + type_id: 0x9ba4eebd + full_name: "__traceiter_android_vh_mmc_update_mmc_queue" +} elf_symbol { id: 0x5612c9d1 name: "__traceiter_android_vh_mmput" @@ -352201,6 +358615,15 @@ elf_symbol { type_id: 0x9b2239e7 full_name: "__traceiter_android_vh_mutex_unlock_slowpath" } +elf_symbol { + id: 0x6105c960 + name: "__traceiter_android_vh_mutex_unlock_slowpath_before_wakeq" + is_defined: true + symbol_type: FUNCTION + crc: 0x73d405f2 + type_id: 0x9b2239e7 + full_name: "__traceiter_android_vh_mutex_unlock_slowpath_before_wakeq" +} elf_symbol { id: 0xe17999f4 name: "__traceiter_android_vh_mutex_wait_finish" @@ -352264,6 +358687,15 @@ elf_symbol { type_id: 0x9bb963fb full_name: "__traceiter_android_vh_ogki_cma_alloc_retry" } +elf_symbol { + id: 0xe2695428 + name: "__traceiter_android_vh_ogki_f2fs_create" + is_defined: true + symbol_type: FUNCTION + crc: 0xbc2977b2 + type_id: 0x9bc52d71 + full_name: "__traceiter_android_vh_ogki_f2fs_create" +} elf_symbol { id: 0x2853afc7 name: "__traceiter_android_vh_ogki_f2fs_dsm" @@ -352282,6 +358714,15 @@ elf_symbol { type_id: 0x9b634f08 full_name: "__traceiter_android_vh_ogki_f2fs_dsm_get" } +elf_symbol { + id: 0xab5a83cd + name: "__traceiter_android_vh_ogki_f2fs_submit_write_page" + is_defined: true + symbol_type: FUNCTION + crc: 0x347c48f5 + type_id: 0x9bb0dfd9 + full_name: "__traceiter_android_vh_ogki_f2fs_submit_write_page" +} elf_symbol { id: 0xdf18f975 name: "__traceiter_android_vh_ogki_get_log_usertype" @@ -353038,6 +359479,33 @@ elf_symbol { type_id: 0x9b50c8eb full_name: "__traceiter_android_vh_sd_setup_unmap_multi_segment" } +elf_symbol { + id: 0xa3c925f8 + name: "__traceiter_android_vh_set_mod_perm_after_init" + is_defined: true + symbol_type: FUNCTION + crc: 0xbfda1e54 + type_id: 0x9b585c8d + full_name: "__traceiter_android_vh_set_mod_perm_after_init" +} +elf_symbol { + id: 0xdb84678c + name: "__traceiter_android_vh_set_mod_perm_before_init" + is_defined: true + symbol_type: FUNCTION + crc: 0x15d9df64 + type_id: 0x9b585c8d + full_name: "__traceiter_android_vh_set_mod_perm_before_init" +} +elf_symbol { + id: 0x0b48ad7a + name: "__traceiter_android_vh_set_task_comm" + is_defined: true + symbol_type: FUNCTION + crc: 0x01b7877e + type_id: 0x9bdbdcc4 + full_name: "__traceiter_android_vh_set_task_comm" +} elf_symbol { id: 0x874fcdb2 name: "__traceiter_android_vh_set_tsk_need_resched_lazy" @@ -353074,6 +359542,24 @@ elf_symbol { type_id: 0x9b42dae7 full_name: "__traceiter_android_vh_sha256" } +elf_symbol { + id: 0xb6a93669 + name: "__traceiter_android_vh_shmem_mod_shmem" + is_defined: true + symbol_type: FUNCTION + crc: 0xaccc7004 + type_id: 0x9bc6b348 + full_name: "__traceiter_android_vh_shmem_mod_shmem" +} +elf_symbol { + id: 0x7a1f2e3e + name: "__traceiter_android_vh_shmem_mod_swapped" + is_defined: true + symbol_type: FUNCTION + crc: 0x609c1108 + type_id: 0x9bc6b348 + full_name: "__traceiter_android_vh_shmem_mod_swapped" +} elf_symbol { id: 0x70e34072 name: "__traceiter_android_vh_shmem_swapin_folio" @@ -353110,6 +359596,15 @@ elf_symbol { type_id: 0x9b664ae7 full_name: "__traceiter_android_vh_should_fault_around" } +elf_symbol { + id: 0x2657a2e6 + name: "__traceiter_android_vh_should_memcg_bypass" + is_defined: true + symbol_type: FUNCTION + crc: 0x4bf5f50d + type_id: 0x9bc35bd0 + full_name: "__traceiter_android_vh_should_memcg_bypass" +} elf_symbol { id: 0xf3144cdc name: "__traceiter_android_vh_show_mapcount_pages" @@ -353182,6 +359677,24 @@ elf_symbol { type_id: 0x9b30973c full_name: "__traceiter_android_vh_shrink_folio_list" } +elf_symbol { + id: 0x6f5e0f48 + name: "__traceiter_android_vh_shrink_node" + is_defined: true + symbol_type: FUNCTION + crc: 0xa8a06681 + type_id: 0x9baa4352 + full_name: "__traceiter_android_vh_shrink_node" +} +elf_symbol { + id: 0x709279fd + name: "__traceiter_android_vh_shrink_node_memcgs" + is_defined: true + symbol_type: FUNCTION + crc: 0x2907a08b + type_id: 0x9bdea720 + full_name: "__traceiter_android_vh_shrink_node_memcgs" +} elf_symbol { id: 0xdfd06b97 name: "__traceiter_android_vh_shrink_slab_bypass" @@ -353209,6 +359722,15 @@ elf_symbol { type_id: 0x9bb71cb9 full_name: "__traceiter_android_vh_si_meminfo_adjust" } +elf_symbol { + id: 0x893b8004 + name: "__traceiter_android_vh_si_meminfo_adjust_shmem" + is_defined: true + symbol_type: FUNCTION + crc: 0xa6b69e0c + type_id: 0x9bb68fe1 + full_name: "__traceiter_android_vh_si_meminfo_adjust_shmem" +} elf_symbol { id: 0x56a5b453 name: "__traceiter_android_vh_sk_alloc" @@ -353299,6 +359821,24 @@ elf_symbol { type_id: 0x9be885da full_name: "__traceiter_android_vh_split_large_folio_bypass" } +elf_symbol { + id: 0xa61572f8 + name: "__traceiter_android_vh_suitable_migration_target_bypass" + is_defined: true + symbol_type: FUNCTION + crc: 0xdb869c27 + type_id: 0x9bb1c4e2 + full_name: "__traceiter_android_vh_suitable_migration_target_bypass" +} +elf_symbol { + id: 0xb993d4e0 + name: "__traceiter_android_vh_swap_writepage" + is_defined: true + symbol_type: FUNCTION + crc: 0xbcaf7bc5 + type_id: 0x9bb72f36 + full_name: "__traceiter_android_vh_swap_writepage" +} elf_symbol { id: 0x445e3749 name: "__traceiter_android_vh_swapmem_gather_add_bypass" @@ -353326,6 +359866,24 @@ elf_symbol { type_id: 0x9bc3617d full_name: "__traceiter_android_vh_swapmem_gather_init" } +elf_symbol { + id: 0x6786b230 + name: "__traceiter_android_vh_sync_irq_wait_finish" + is_defined: true + symbol_type: FUNCTION + crc: 0x567aaf56 + type_id: 0x9b629efc + full_name: "__traceiter_android_vh_sync_irq_wait_finish" +} +elf_symbol { + id: 0xf5d1380a + name: "__traceiter_android_vh_sync_irq_wait_start" + is_defined: true + symbol_type: FUNCTION + crc: 0xbfe53761 + type_id: 0x9b629efc + full_name: "__traceiter_android_vh_sync_irq_wait_start" +} elf_symbol { id: 0x58e7556b name: "__traceiter_android_vh_sync_txn_recvd" @@ -353389,6 +359947,24 @@ elf_symbol { type_id: 0x9bdaaaaa full_name: "__traceiter_android_vh_tcp_fastsyn" } +elf_symbol { + id: 0x44f0236d + name: "__traceiter_android_vh_tcp_rcv_established_fast_path" + is_defined: true + symbol_type: FUNCTION + crc: 0x7c575b4a + type_id: 0x9bdaaaaa + full_name: "__traceiter_android_vh_tcp_rcv_established_fast_path" +} +elf_symbol { + id: 0x9a86e4aa + name: "__traceiter_android_vh_tcp_rcv_established_slow_path" + is_defined: true + symbol_type: FUNCTION + crc: 0xe40b5879 + type_id: 0x9bdaaaaa + full_name: "__traceiter_android_vh_tcp_rcv_established_slow_path" +} elf_symbol { id: 0x710466ae name: "__traceiter_android_vh_tcp_rcv_synack" @@ -353488,6 +360064,24 @@ elf_symbol { type_id: 0x9b30f926 full_name: "__traceiter_android_vh_thermal_pm_notify_suspend" } +elf_symbol { + id: 0x3d1d57b0 + name: "__traceiter_android_vh_thp_vma_allowable_orders" + is_defined: true + symbol_type: FUNCTION + crc: 0xa09f568f + type_id: 0x9b86643e + full_name: "__traceiter_android_vh_thp_vma_allowable_orders" +} +elf_symbol { + id: 0xa00355c9 + name: "__traceiter_android_vh_throttle_direct_reclaim_bypass" + is_defined: true + symbol_type: FUNCTION + crc: 0x83afa317 + type_id: 0x9be885da + full_name: "__traceiter_android_vh_throttle_direct_reclaim_bypass" +} elf_symbol { id: 0xe334c57d name: "__traceiter_android_vh_tick_nohz_idle_stop_tick" @@ -353587,6 +360181,15 @@ elf_symbol { type_id: 0x9bd5ba29 full_name: "__traceiter_android_vh_uclamp_validate" } +elf_symbol { + id: 0xd184256d + name: "__traceiter_android_vh_udp6_unicast_rcv_skb" + is_defined: true + symbol_type: FUNCTION + crc: 0x1fa5cf10 + type_id: 0x9bbdd6cb + full_name: "__traceiter_android_vh_udp6_unicast_rcv_skb" +} elf_symbol { id: 0x14ef37c5 name: "__traceiter_android_vh_udp_enqueue_schedule_skb" @@ -353596,6 +360199,15 @@ elf_symbol { type_id: 0x9bdbf970 full_name: "__traceiter_android_vh_udp_enqueue_schedule_skb" } +elf_symbol { + id: 0xf5011322 + name: "__traceiter_android_vh_udp_unicast_rcv_skb" + is_defined: true + symbol_type: FUNCTION + crc: 0xf489189a + type_id: 0x9bbdd6cb + full_name: "__traceiter_android_vh_udp_unicast_rcv_skb" +} elf_symbol { id: 0x090c808f name: "__traceiter_android_vh_udp_v4_connect" @@ -353821,6 +360433,15 @@ elf_symbol { type_id: 0x9ba6017c full_name: "__traceiter_android_vh_usb_dev_resume" } +elf_symbol { + id: 0x74d43d1f + name: "__traceiter_android_vh_usb_new_device_added" + is_defined: true + symbol_type: FUNCTION + crc: 0x9913eebf + type_id: 0x9b9e9fff + full_name: "__traceiter_android_vh_usb_new_device_added" +} elf_symbol { id: 0x08824ed3 name: "__traceiter_android_vh_use_amu_fie" @@ -353884,6 +360505,42 @@ elf_symbol { type_id: 0x9a3fe476 full_name: "__traceiter_android_vh_wq_lockup_pool" } +elf_symbol { + id: 0xc71fde47 + name: "__traceiter_android_vh_wq_queue_work" + is_defined: true + symbol_type: FUNCTION + crc: 0x7031c580 + type_id: 0x9b9ae18e + full_name: "__traceiter_android_vh_wq_queue_work" +} +elf_symbol { + id: 0x62fba41c + name: "__traceiter_android_vh_wq_wake_idle_worker" + is_defined: true + symbol_type: FUNCTION + crc: 0x59e43bb1 + type_id: 0x9bd88b02 + full_name: "__traceiter_android_vh_wq_wake_idle_worker" +} +elf_symbol { + id: 0x3a6c45d6 + name: "__traceiter_android_vh_xhci_resume" + is_defined: true + symbol_type: FUNCTION + crc: 0x02b921eb + type_id: 0x9ba20f85 + full_name: "__traceiter_android_vh_xhci_resume" +} +elf_symbol { + id: 0x6a18c879 + name: "__traceiter_android_vh_xhci_suspend" + is_defined: true + symbol_type: FUNCTION + crc: 0x806ce048 + type_id: 0x9ba20f85 + full_name: "__traceiter_android_vh_xhci_suspend" +} elf_symbol { id: 0x18619e65 name: "__traceiter_android_vh_zs_shrinker_adjust" @@ -354478,6 +361135,15 @@ elf_symbol { type_id: 0x9bdbdcc4 full_name: "__traceiter_sched_waking" } +elf_symbol { + id: 0x36d71264 + name: "__traceiter_scsi_dispatch_cmd_start" + is_defined: true + symbol_type: FUNCTION + crc: 0xb590d0ca + type_id: 0x9b51e812 + full_name: "__traceiter_scsi_dispatch_cmd_start" +} elf_symbol { id: 0x8ce8e50d name: "__traceiter_sk_data_ready" @@ -354622,6 +361288,15 @@ elf_symbol { type_id: 0x18ccbd2c full_name: "__tracepoint_android_rvh_alloc_and_link_pwqs" } +elf_symbol { + id: 0x0b219d2b + name: "__tracepoint_android_rvh_alloc_workqueue" + is_defined: true + symbol_type: OBJECT + crc: 0xbae7d4d4 + type_id: 0x18ccbd2c + full_name: "__tracepoint_android_rvh_alloc_workqueue" +} elf_symbol { id: 0x748c1fd7 name: "__tracepoint_android_rvh_arm64_serror_panic" @@ -354874,6 +361549,15 @@ elf_symbol { type_id: 0x18ccbd2c full_name: "__tracepoint_android_rvh_die_kernel_fault" } +elf_symbol { + id: 0x95b8edae + name: "__tracepoint_android_rvh_dma_buf_stats_teardown" + is_defined: true + symbol_type: OBJECT + crc: 0x13a1d87a + type_id: 0x18ccbd2c + full_name: "__tracepoint_android_rvh_dma_buf_stats_teardown" +} elf_symbol { id: 0x25e320a3 name: "__tracepoint_android_rvh_do_el1_bti" @@ -354982,6 +361666,15 @@ elf_symbol { type_id: 0x18ccbd2c full_name: "__tracepoint_android_rvh_exit_creds" } +elf_symbol { + id: 0xb2a7c054 + name: "__tracepoint_android_rvh_f2fs_down_read" + is_defined: true + symbol_type: OBJECT + crc: 0x0c3b3cd0 + type_id: 0x18ccbd2c + full_name: "__tracepoint_android_rvh_f2fs_down_read" +} elf_symbol { id: 0xb05fc507 name: "__tracepoint_android_rvh_find_busiest_group" @@ -355180,6 +361873,24 @@ elf_symbol { type_id: 0x18ccbd2c full_name: "__tracepoint_android_rvh_is_cpu_allowed" } +elf_symbol { + id: 0x26d3bcc4 + name: "__tracepoint_android_rvh_ksys_umount" + is_defined: true + symbol_type: OBJECT + crc: 0xa7d39f15 + type_id: 0x18ccbd2c + full_name: "__tracepoint_android_rvh_ksys_umount" +} +elf_symbol { + id: 0x8efb0ca4 + name: "__tracepoint_android_rvh_logbuf" + is_defined: true + symbol_type: OBJECT + crc: 0x4e31587b + type_id: 0x18ccbd2c + full_name: "__tracepoint_android_rvh_logbuf" +} elf_symbol { id: 0x3cb4db49 name: "__tracepoint_android_rvh_migrate_queued_task" @@ -356143,6 +362854,15 @@ elf_symbol { type_id: 0x18ccbd2c full_name: "__tracepoint_android_vh_alloc_contig_range_not_isolated" } +elf_symbol { + id: 0x74cce3b2 + name: "__tracepoint_android_vh_alloc_flags_cma_adjust" + is_defined: true + symbol_type: OBJECT + crc: 0xc0ae8b39 + type_id: 0x18ccbd2c + full_name: "__tracepoint_android_vh_alloc_flags_cma_adjust" +} elf_symbol { id: 0xd7f9868e name: "__tracepoint_android_vh_alloc_oem_binder_struct" @@ -356539,6 +363259,24 @@ elf_symbol { type_id: 0x18ccbd2c full_name: "__tracepoint_android_vh_blk_fill_rwbs" } +elf_symbol { + id: 0xf458bc84 + name: "__tracepoint_android_vh_blk_mq_delay_run_hw_queue" + is_defined: true + symbol_type: OBJECT + crc: 0x8c43d6f7 + type_id: 0x18ccbd2c + full_name: "__tracepoint_android_vh_blk_mq_delay_run_hw_queue" +} +elf_symbol { + id: 0x002cab5a + name: "__tracepoint_android_vh_blk_mq_kick_requeue_list" + is_defined: true + symbol_type: OBJECT + crc: 0x52eea392 + type_id: 0x18ccbd2c + full_name: "__tracepoint_android_vh_blk_mq_kick_requeue_list" +} elf_symbol { id: 0x0d3c7607 name: "__tracepoint_android_vh_build_sched_domains" @@ -356674,6 +363412,15 @@ elf_symbol { type_id: 0x18ccbd2c full_name: "__tracepoint_android_vh_clear_rwsem_writer_owned" } +elf_symbol { + id: 0xaf598d05 + name: "__tracepoint_android_vh_cma_alloc_retry" + is_defined: true + symbol_type: OBJECT + crc: 0x1deca267 + type_id: 0x18ccbd2c + full_name: "__tracepoint_android_vh_cma_alloc_retry" +} elf_symbol { id: 0x0340e826 name: "__tracepoint_android_vh_cma_alloc_set_max_retries" @@ -356908,6 +363655,24 @@ elf_symbol { type_id: 0x18ccbd2c full_name: "__tracepoint_android_vh_del_page_from_lrulist" } +elf_symbol { + id: 0x749563a6 + name: "__tracepoint_android_vh_direct_reclaim_begin" + is_defined: true + symbol_type: OBJECT + crc: 0x0345ead2 + type_id: 0x18ccbd2c + full_name: "__tracepoint_android_vh_direct_reclaim_begin" +} +elf_symbol { + id: 0x694ad7a6 + name: "__tracepoint_android_vh_direct_reclaim_end" + is_defined: true + symbol_type: OBJECT + crc: 0x95f3b83d + type_id: 0x18ccbd2c + full_name: "__tracepoint_android_vh_direct_reclaim_end" +} elf_symbol { id: 0x1ddb60ad name: "__tracepoint_android_vh_disable_thermal_cooling_stats" @@ -356980,6 +363745,15 @@ elf_symbol { type_id: 0x18ccbd2c full_name: "__tracepoint_android_vh_do_futex" } +elf_symbol { + id: 0xa628b8f1 + name: "__tracepoint_android_vh_do_group_exit" + is_defined: true + symbol_type: OBJECT + crc: 0x7b1b563f + type_id: 0x18ccbd2c + full_name: "__tracepoint_android_vh_do_group_exit" +} elf_symbol { id: 0xb75a1654 name: "__tracepoint_android_vh_do_new_mount_fc" @@ -357052,6 +363826,24 @@ elf_symbol { type_id: 0x18ccbd2c full_name: "__tracepoint_android_vh_do_wp_page" } +elf_symbol { + id: 0x0ec5d99e + name: "__tracepoint_android_vh_dpm_wait_finish" + is_defined: true + symbol_type: OBJECT + crc: 0x9052afc6 + type_id: 0x18ccbd2c + full_name: "__tracepoint_android_vh_dpm_wait_finish" +} +elf_symbol { + id: 0xfe5b8eb1 + name: "__tracepoint_android_vh_dpm_wait_start" + is_defined: true + symbol_type: OBJECT + crc: 0xb7e6fcd8 + type_id: 0x18ccbd2c + full_name: "__tracepoint_android_vh_dpm_wait_start" +} elf_symbol { id: 0x8405c9a1 name: "__tracepoint_android_vh_drain_all_pages_bypass" @@ -357142,6 +363934,15 @@ elf_symbol { type_id: 0x18ccbd2c full_name: "__tracepoint_android_vh_f2fs_file_open" } +elf_symbol { + id: 0x34b6590b + name: "__tracepoint_android_vh_f2fs_improve_priority" + is_defined: true + symbol_type: OBJECT + crc: 0x7803936a + type_id: 0x18ccbd2c + full_name: "__tracepoint_android_vh_f2fs_improve_priority" +} elf_symbol { id: 0x26d15e93 name: "__tracepoint_android_vh_f2fs_ra_op_flags" @@ -357151,6 +363952,15 @@ elf_symbol { type_id: 0x18ccbd2c full_name: "__tracepoint_android_vh_f2fs_ra_op_flags" } +elf_symbol { + id: 0xbf5d713c + name: "__tracepoint_android_vh_f2fs_restore_priority" + is_defined: true + symbol_type: OBJECT + crc: 0x16bd98df + type_id: 0x18ccbd2c + full_name: "__tracepoint_android_vh_f2fs_restore_priority" +} elf_symbol { id: 0x50a83025 name: "__tracepoint_android_vh_file_is_tiny_bypass" @@ -357160,6 +363970,15 @@ elf_symbol { type_id: 0x18ccbd2c full_name: "__tracepoint_android_vh_file_is_tiny_bypass" } +elf_symbol { + id: 0x0c03d499 + name: "__tracepoint_android_vh_filemap_add_folio" + is_defined: true + symbol_type: OBJECT + crc: 0x2f405f91 + type_id: 0x18ccbd2c + full_name: "__tracepoint_android_vh_filemap_add_folio" +} elf_symbol { id: 0x197d6be2 name: "__tracepoint_android_vh_filemap_fault_end" @@ -357205,6 +364024,42 @@ elf_symbol { type_id: 0x18ccbd2c full_name: "__tracepoint_android_vh_filemap_update_page" } +elf_symbol { + id: 0x843cb07b + name: "__tracepoint_android_vh_flush_work_wait_finish" + is_defined: true + symbol_type: OBJECT + crc: 0x024d452f + type_id: 0x18ccbd2c + full_name: "__tracepoint_android_vh_flush_work_wait_finish" +} +elf_symbol { + id: 0xb548aa95 + name: "__tracepoint_android_vh_flush_work_wait_start" + is_defined: true + symbol_type: OBJECT + crc: 0x7a828e14 + type_id: 0x18ccbd2c + full_name: "__tracepoint_android_vh_flush_work_wait_start" +} +elf_symbol { + id: 0xbb05ffe8 + name: "__tracepoint_android_vh_flush_wq_wait_finish" + is_defined: true + symbol_type: OBJECT + crc: 0xaeae14af + type_id: 0x18ccbd2c + full_name: "__tracepoint_android_vh_flush_wq_wait_finish" +} +elf_symbol { + id: 0x0a50cb7b + name: "__tracepoint_android_vh_flush_wq_wait_start" + is_defined: true + symbol_type: OBJECT + crc: 0x252a4e3f + type_id: 0x18ccbd2c + full_name: "__tracepoint_android_vh_flush_wq_wait_start" +} elf_symbol { id: 0xa3ede5d5 name: "__tracepoint_android_vh_folio_trylock_clear" @@ -357223,6 +364078,15 @@ elf_symbol { type_id: 0x18ccbd2c full_name: "__tracepoint_android_vh_folio_trylock_set" } +elf_symbol { + id: 0x4f752d52 + name: "__tracepoint_android_vh_free_mod_mem" + is_defined: true + symbol_type: OBJECT + crc: 0xc971a9d0 + type_id: 0x18ccbd2c + full_name: "__tracepoint_android_vh_free_mod_mem" +} elf_symbol { id: 0x901d0e89 name: "__tracepoint_android_vh_free_oem_binder_struct" @@ -357394,6 +364258,15 @@ elf_symbol { type_id: 0x18ccbd2c full_name: "__tracepoint_android_vh_futex_wait_end" } +elf_symbol { + id: 0x03704d12 + name: "__tracepoint_android_vh_futex_wait_queue_start" + is_defined: true + symbol_type: OBJECT + crc: 0xa8d0f29b + type_id: 0x18ccbd2c + full_name: "__tracepoint_android_vh_futex_wait_queue_start" +} elf_symbol { id: 0x6d73379a name: "__tracepoint_android_vh_futex_wait_start" @@ -357448,6 +364321,33 @@ elf_symbol { type_id: 0x18ccbd2c full_name: "__tracepoint_android_vh_get_page_wmark" } +elf_symbol { + id: 0xbc4cf318 + name: "__tracepoint_android_vh_gzvm_destroy_vm_post_process" + is_defined: true + symbol_type: OBJECT + crc: 0xa6e88a50 + type_id: 0x18ccbd2c + full_name: "__tracepoint_android_vh_gzvm_destroy_vm_post_process" +} +elf_symbol { + id: 0x57a8695d + name: "__tracepoint_android_vh_gzvm_handle_demand_page_post" + is_defined: true + symbol_type: OBJECT + crc: 0x80c89fb0 + type_id: 0x18ccbd2c + full_name: "__tracepoint_android_vh_gzvm_handle_demand_page_post" +} +elf_symbol { + id: 0xfa173289 + name: "__tracepoint_android_vh_gzvm_handle_demand_page_pre" + is_defined: true + symbol_type: OBJECT + crc: 0x4960dddb + type_id: 0x18ccbd2c + full_name: "__tracepoint_android_vh_gzvm_handle_demand_page_pre" +} elf_symbol { id: 0x209f19bb name: "__tracepoint_android_vh_gzvm_vcpu_exit_reason" @@ -357484,6 +364384,15 @@ elf_symbol { type_id: 0x18ccbd2c full_name: "__tracepoint_android_vh_inet_csk_clone_lock" } +elf_symbol { + id: 0x4e88b2c2 + name: "__tracepoint_android_vh_init_adjust_zone_wmark" + is_defined: true + symbol_type: OBJECT + crc: 0x13e8ec0c + type_id: 0x18ccbd2c + full_name: "__tracepoint_android_vh_init_adjust_zone_wmark" +} elf_symbol { id: 0x52cc3d91 name: "__tracepoint_android_vh_inode_lru_isolate" @@ -357736,6 +364645,15 @@ elf_symbol { type_id: 0x18ccbd2c full_name: "__tracepoint_android_vh_mem_cgroup_alloc" } +elf_symbol { + id: 0x013b5969 + name: "__tracepoint_android_vh_mem_cgroup_charge" + is_defined: true + symbol_type: OBJECT + crc: 0x643cf3a6 + type_id: 0x18ccbd2c + full_name: "__tracepoint_android_vh_mem_cgroup_charge" +} elf_symbol { id: 0xe160b6f0 name: "__tracepoint_android_vh_mem_cgroup_css_offline" @@ -357790,6 +364708,24 @@ elf_symbol { type_id: 0x18ccbd2c full_name: "__tracepoint_android_vh_meminfo_proc_show" } +elf_symbol { + id: 0xca4f3601 + name: "__tracepoint_android_vh_mglru_should_abort_scan" + is_defined: true + symbol_type: OBJECT + crc: 0xfc074060 + type_id: 0x18ccbd2c + full_name: "__tracepoint_android_vh_mglru_should_abort_scan" +} +elf_symbol { + id: 0x420ef2d0 + name: "__tracepoint_android_vh_mglru_should_abort_scan_order" + is_defined: true + symbol_type: OBJECT + crc: 0xeae8520f + type_id: 0x18ccbd2c + full_name: "__tracepoint_android_vh_mglru_should_abort_scan_order" +} elf_symbol { id: 0xd333a65c name: "__tracepoint_android_vh_mm_direct_reclaim_enter" @@ -357808,6 +364744,15 @@ elf_symbol { type_id: 0x18ccbd2c full_name: "__tracepoint_android_vh_mm_direct_reclaim_exit" } +elf_symbol { + id: 0x0f593caf + name: "__tracepoint_android_vh_mm_kcompactd_cpu_online" + is_defined: true + symbol_type: OBJECT + crc: 0x7258a4a5 + type_id: 0x18ccbd2c + full_name: "__tracepoint_android_vh_mm_kcompactd_cpu_online" +} elf_symbol { id: 0x47bcd15f name: "__tracepoint_android_vh_mm_may_oom_exit" @@ -357835,6 +364780,15 @@ elf_symbol { type_id: 0x18ccbd2c full_name: "__tracepoint_android_vh_mmc_sdio_pm_flag_set" } +elf_symbol { + id: 0x3c1c2029 + name: "__tracepoint_android_vh_mmc_update_mmc_queue" + is_defined: true + symbol_type: OBJECT + crc: 0x9a3047d4 + type_id: 0x18ccbd2c + full_name: "__tracepoint_android_vh_mmc_update_mmc_queue" +} elf_symbol { id: 0x41c8d09b name: "__tracepoint_android_vh_mmput" @@ -357907,6 +364861,15 @@ elf_symbol { type_id: 0x18ccbd2c full_name: "__tracepoint_android_vh_mutex_unlock_slowpath" } +elf_symbol { + id: 0x5890e7da + name: "__tracepoint_android_vh_mutex_unlock_slowpath_before_wakeq" + is_defined: true + symbol_type: OBJECT + crc: 0x4fc5f337 + type_id: 0x18ccbd2c + full_name: "__tracepoint_android_vh_mutex_unlock_slowpath_before_wakeq" +} elf_symbol { id: 0x76e879b6 name: "__tracepoint_android_vh_mutex_wait_finish" @@ -357970,6 +364933,15 @@ elf_symbol { type_id: 0x18ccbd2c full_name: "__tracepoint_android_vh_ogki_cma_alloc_retry" } +elf_symbol { + id: 0xc286b1d6 + name: "__tracepoint_android_vh_ogki_f2fs_create" + is_defined: true + symbol_type: OBJECT + crc: 0xf5e3edac + type_id: 0x18ccbd2c + full_name: "__tracepoint_android_vh_ogki_f2fs_create" +} elf_symbol { id: 0xd4b0bfc9 name: "__tracepoint_android_vh_ogki_f2fs_dsm" @@ -357988,6 +364960,15 @@ elf_symbol { type_id: 0x18ccbd2c full_name: "__tracepoint_android_vh_ogki_f2fs_dsm_get" } +elf_symbol { + id: 0x6c9f1d93 + name: "__tracepoint_android_vh_ogki_f2fs_submit_write_page" + is_defined: true + symbol_type: OBJECT + crc: 0x2ab6dc04 + type_id: 0x18ccbd2c + full_name: "__tracepoint_android_vh_ogki_f2fs_submit_write_page" +} elf_symbol { id: 0xa9eb9293 name: "__tracepoint_android_vh_ogki_get_log_usertype" @@ -358744,6 +365725,33 @@ elf_symbol { type_id: 0x18ccbd2c full_name: "__tracepoint_android_vh_sd_setup_unmap_multi_segment" } +elf_symbol { + id: 0x3fb97a6a + name: "__tracepoint_android_vh_set_mod_perm_after_init" + is_defined: true + symbol_type: OBJECT + crc: 0x1ad0cf00 + type_id: 0x18ccbd2c + full_name: "__tracepoint_android_vh_set_mod_perm_after_init" +} +elf_symbol { + id: 0x6ccc064e + name: "__tracepoint_android_vh_set_mod_perm_before_init" + is_defined: true + symbol_type: OBJECT + crc: 0x44123a43 + type_id: 0x18ccbd2c + full_name: "__tracepoint_android_vh_set_mod_perm_before_init" +} +elf_symbol { + id: 0x1f07c260 + name: "__tracepoint_android_vh_set_task_comm" + is_defined: true + symbol_type: OBJECT + crc: 0xc50d6787 + type_id: 0x18ccbd2c + full_name: "__tracepoint_android_vh_set_task_comm" +} elf_symbol { id: 0xb6de2d88 name: "__tracepoint_android_vh_set_tsk_need_resched_lazy" @@ -358780,6 +365788,24 @@ elf_symbol { type_id: 0x18ccbd2c full_name: "__tracepoint_android_vh_sha256" } +elf_symbol { + id: 0x0d23f467 + name: "__tracepoint_android_vh_shmem_mod_shmem" + is_defined: true + symbol_type: OBJECT + crc: 0xeca0cc5e + type_id: 0x18ccbd2c + full_name: "__tracepoint_android_vh_shmem_mod_shmem" +} +elf_symbol { + id: 0x392adba0 + name: "__tracepoint_android_vh_shmem_mod_swapped" + is_defined: true + symbol_type: OBJECT + crc: 0xffb852a7 + type_id: 0x18ccbd2c + full_name: "__tracepoint_android_vh_shmem_mod_swapped" +} elf_symbol { id: 0x6ed615c4 name: "__tracepoint_android_vh_shmem_swapin_folio" @@ -358816,6 +365842,15 @@ elf_symbol { type_id: 0x18ccbd2c full_name: "__tracepoint_android_vh_should_fault_around" } +elf_symbol { + id: 0x9e76c2c4 + name: "__tracepoint_android_vh_should_memcg_bypass" + is_defined: true + symbol_type: OBJECT + crc: 0xca39937b + type_id: 0x18ccbd2c + full_name: "__tracepoint_android_vh_should_memcg_bypass" +} elf_symbol { id: 0x288e392e name: "__tracepoint_android_vh_show_mapcount_pages" @@ -358888,6 +365923,24 @@ elf_symbol { type_id: 0x18ccbd2c full_name: "__tracepoint_android_vh_shrink_folio_list" } +elf_symbol { + id: 0x1f2d6f1e + name: "__tracepoint_android_vh_shrink_node" + is_defined: true + symbol_type: OBJECT + crc: 0xc602ce1d + type_id: 0x18ccbd2c + full_name: "__tracepoint_android_vh_shrink_node" +} +elf_symbol { + id: 0x87db1583 + name: "__tracepoint_android_vh_shrink_node_memcgs" + is_defined: true + symbol_type: OBJECT + crc: 0x179068f1 + type_id: 0x18ccbd2c + full_name: "__tracepoint_android_vh_shrink_node_memcgs" +} elf_symbol { id: 0x3e70324d name: "__tracepoint_android_vh_shrink_slab_bypass" @@ -358915,6 +365968,15 @@ elf_symbol { type_id: 0x18ccbd2c full_name: "__tracepoint_android_vh_si_meminfo_adjust" } +elf_symbol { + id: 0xef1341da + name: "__tracepoint_android_vh_si_meminfo_adjust_shmem" + is_defined: true + symbol_type: OBJECT + crc: 0xb4e910d9 + type_id: 0x18ccbd2c + full_name: "__tracepoint_android_vh_si_meminfo_adjust_shmem" +} elf_symbol { id: 0x4aa5e229 name: "__tracepoint_android_vh_sk_alloc" @@ -359005,6 +366067,24 @@ elf_symbol { type_id: 0x18ccbd2c full_name: "__tracepoint_android_vh_split_large_folio_bypass" } +elf_symbol { + id: 0xdeb3106a + name: "__tracepoint_android_vh_suitable_migration_target_bypass" + is_defined: true + symbol_type: OBJECT + crc: 0x5eb049c5 + type_id: 0x18ccbd2c + full_name: "__tracepoint_android_vh_suitable_migration_target_bypass" +} +elf_symbol { + id: 0xd5f8f162 + name: "__tracepoint_android_vh_swap_writepage" + is_defined: true + symbol_type: OBJECT + crc: 0xa9a5b096 + type_id: 0x18ccbd2c + full_name: "__tracepoint_android_vh_swap_writepage" +} elf_symbol { id: 0x052557d7 name: "__tracepoint_android_vh_swapmem_gather_add_bypass" @@ -359032,6 +366112,24 @@ elf_symbol { type_id: 0x18ccbd2c full_name: "__tracepoint_android_vh_swapmem_gather_init" } +elf_symbol { + id: 0x8be19b5e + name: "__tracepoint_android_vh_sync_irq_wait_finish" + is_defined: true + symbol_type: OBJECT + crc: 0x00120f50 + type_id: 0x18ccbd2c + full_name: "__tracepoint_android_vh_sync_irq_wait_finish" +} +elf_symbol { + id: 0xcf9b99d4 + name: "__tracepoint_android_vh_sync_irq_wait_start" + is_defined: true + symbol_type: OBJECT + crc: 0x485bfbd7 + type_id: 0x18ccbd2c + full_name: "__tracepoint_android_vh_sync_irq_wait_start" +} elf_symbol { id: 0x39e68fed name: "__tracepoint_android_vh_sync_txn_recvd" @@ -359095,6 +366193,24 @@ elf_symbol { type_id: 0x18ccbd2c full_name: "__tracepoint_android_vh_tcp_fastsyn" } +elf_symbol { + id: 0x27e885eb + name: "__tracepoint_android_vh_tcp_rcv_established_fast_path" + is_defined: true + symbol_type: OBJECT + crc: 0x06ce124d + type_id: 0x18ccbd2c + full_name: "__tracepoint_android_vh_tcp_rcv_established_fast_path" +} +elf_symbol { + id: 0xc759ed80 + name: "__tracepoint_android_vh_tcp_rcv_established_slow_path" + is_defined: true + symbol_type: OBJECT + crc: 0x1961b41e + type_id: 0x18ccbd2c + full_name: "__tracepoint_android_vh_tcp_rcv_established_slow_path" +} elf_symbol { id: 0xb9e83388 name: "__tracepoint_android_vh_tcp_rcv_synack" @@ -359194,6 +366310,24 @@ elf_symbol { type_id: 0x18ccbd2c full_name: "__tracepoint_android_vh_thermal_pm_notify_suspend" } +elf_symbol { + id: 0xba33290e + name: "__tracepoint_android_vh_thp_vma_allowable_orders" + is_defined: true + symbol_type: OBJECT + crc: 0x3535aec3 + type_id: 0x18ccbd2c + full_name: "__tracepoint_android_vh_thp_vma_allowable_orders" +} +elf_symbol { + id: 0xd292bd77 + name: "__tracepoint_android_vh_throttle_direct_reclaim_bypass" + is_defined: true + symbol_type: OBJECT + crc: 0x4b4c892a + type_id: 0x18ccbd2c + full_name: "__tracepoint_android_vh_throttle_direct_reclaim_bypass" +} elf_symbol { id: 0xfcee39f3 name: "__tracepoint_android_vh_tick_nohz_idle_stop_tick" @@ -359293,6 +366427,15 @@ elf_symbol { type_id: 0x18ccbd2c full_name: "__tracepoint_android_vh_uclamp_validate" } +elf_symbol { + id: 0xb66d855b + name: "__tracepoint_android_vh_udp6_unicast_rcv_skb" + is_defined: true + symbol_type: OBJECT + crc: 0xf09c62d2 + type_id: 0x18ccbd2c + full_name: "__tracepoint_android_vh_udp6_unicast_rcv_skb" +} elf_symbol { id: 0x84f2b553 name: "__tracepoint_android_vh_udp_enqueue_schedule_skb" @@ -359302,6 +366445,15 @@ elf_symbol { type_id: 0x18ccbd2c full_name: "__tracepoint_android_vh_udp_enqueue_schedule_skb" } +elf_symbol { + id: 0x56950e3c + name: "__tracepoint_android_vh_udp_unicast_rcv_skb" + is_defined: true + symbol_type: OBJECT + crc: 0x11bfb7c8 + type_id: 0x18ccbd2c + full_name: "__tracepoint_android_vh_udp_unicast_rcv_skb" +} elf_symbol { id: 0x9d8ca961 name: "__tracepoint_android_vh_udp_v4_connect" @@ -359527,6 +366679,15 @@ elf_symbol { type_id: 0x18ccbd2c full_name: "__tracepoint_android_vh_usb_dev_resume" } +elf_symbol { + id: 0x51dcf351 + name: "__tracepoint_android_vh_usb_new_device_added" + is_defined: true + symbol_type: OBJECT + crc: 0x3f92ad8c + type_id: 0x18ccbd2c + full_name: "__tracepoint_android_vh_usb_new_device_added" +} elf_symbol { id: 0xe100c3ad name: "__tracepoint_android_vh_use_amu_fie" @@ -359590,6 +366751,42 @@ elf_symbol { type_id: 0x18ccbd2c full_name: "__tracepoint_android_vh_wq_lockup_pool" } +elf_symbol { + id: 0xcd2463fd + name: "__tracepoint_android_vh_wq_queue_work" + is_defined: true + symbol_type: OBJECT + crc: 0x4d8b0124 + type_id: 0x18ccbd2c + full_name: "__tracepoint_android_vh_wq_queue_work" +} +elf_symbol { + id: 0xf6c6715e + name: "__tracepoint_android_vh_wq_wake_idle_worker" + is_defined: true + symbol_type: OBJECT + crc: 0x1ad4072d + type_id: 0x18ccbd2c + full_name: "__tracepoint_android_vh_wq_wake_idle_worker" +} +elf_symbol { + id: 0x6cb1a35c + name: "__tracepoint_android_vh_xhci_resume" + is_defined: true + symbol_type: OBJECT + crc: 0x42baaa19 + type_id: 0x18ccbd2c + full_name: "__tracepoint_android_vh_xhci_resume" +} +elf_symbol { + id: 0xd0cbbcf3 + name: "__tracepoint_android_vh_xhci_suspend" + is_defined: true + symbol_type: OBJECT + crc: 0xdee46390 + type_id: 0x18ccbd2c + full_name: "__tracepoint_android_vh_xhci_suspend" +} elf_symbol { id: 0x85ad7f9f name: "__tracepoint_android_vh_zs_shrinker_adjust" @@ -360184,6 +367381,15 @@ elf_symbol { type_id: 0x18ccbd2c full_name: "__tracepoint_sched_waking" } +elf_symbol { + id: 0x6069ba16 + name: "__tracepoint_scsi_dispatch_cmd_start" + is_defined: true + symbol_type: OBJECT + crc: 0xb7224ab3 + type_id: 0x18ccbd2c + full_name: "__tracepoint_scsi_dispatch_cmd_start" +} elf_symbol { id: 0xf68d6127 name: "__tracepoint_sk_data_ready" @@ -361111,6 +368317,15 @@ elf_symbol { type_id: 0x1bf280c6 full_name: "_snd_pcm_hw_params_any" } +elf_symbol { + id: 0x132bfd7d + name: "_snd_pcm_lib_alloc_vmalloc_buffer" + is_defined: true + symbol_type: FUNCTION + crc: 0xbbbd8b54 + type_id: 0x9b420e77 + full_name: "_snd_pcm_lib_alloc_vmalloc_buffer" +} elf_symbol { id: 0x97b98e85 name: "_snd_pcm_stream_lock_irqsave" @@ -361210,6 +368425,15 @@ elf_symbol { type_id: 0x95bf15d7 full_name: "add_swap_extent" } +elf_symbol { + id: 0xa5dcf915 + name: "add_taint" + is_defined: true + symbol_type: FUNCTION + crc: 0x0eb6eb87 + type_id: 0x02396084 + full_name: "add_taint" +} elf_symbol { id: 0xf2768ed7 name: "add_timer" @@ -361480,6 +368704,15 @@ elf_symbol { type_id: 0x9093971b full_name: "alloc_chrdev_region" } +elf_symbol { + id: 0x962c959a + name: "alloc_contig_range" + is_defined: true + symbol_type: FUNCTION + crc: 0x73abb180 + type_id: 0x9182c85e + full_name: "alloc_contig_range" +} elf_symbol { id: 0xdeecf7a4 name: "alloc_etherdev_mqs" @@ -361606,6 +368839,35 @@ elf_symbol { type_id: 0x933f3b0e full_name: "amba_request_regions" } +elf_symbol { + id: 0xdc66fe63 + name: "android_create_function_device" + is_defined: true + symbol_type: FUNCTION + crc: 0xcdd93950 + type_id: 0xac6cacda + full_name: "android_create_function_device" +} +elf_symbol { + id: 0x5653e7da + name: "android_debug_per_cpu_symbol" + is_defined: true + symbol_type: FUNCTION + crc: 0x8ee3d8d9 + namespace: "MINIDUMP" + type_id: 0x429ad182 + full_name: "android_debug_per_cpu_symbol" +} +elf_symbol { + id: 0xffaebc56 + name: "android_debug_symbol" + is_defined: true + symbol_type: FUNCTION + crc: 0x468b1512 + namespace: "MINIDUMP" + type_id: 0x4a818b9c + full_name: "android_debug_symbol" +} elf_symbol { id: 0xd8dbec6e name: "android_rvh_probe_register" @@ -362305,6 +369567,15 @@ elf_symbol { type_id: 0xfc093226 full_name: "blk_bio_list_merge" } +elf_symbol { + id: 0x650319ec + name: "blk_check_plugged" + is_defined: true + symbol_type: FUNCTION + crc: 0xd27b25dd + type_id: 0x66cc4765 + full_name: "blk_check_plugged" +} elf_symbol { id: 0x4ffac461 name: "blk_crypto_keyslot_index" @@ -364815,6 +372086,24 @@ elf_symbol { type_id: 0x12217922 full_name: "clk_hw_unregister" } +elf_symbol { + id: 0xaf658aaf + name: "clk_hw_unregister_fixed_rate" + is_defined: true + symbol_type: FUNCTION + crc: 0x839fcf69 + type_id: 0x12217922 + full_name: "clk_hw_unregister_fixed_rate" +} +elf_symbol { + id: 0xc5b7a263 + name: "clk_hw_unregister_gate" + is_defined: true + symbol_type: FUNCTION + crc: 0x136c3048 + type_id: 0x12217922 + full_name: "clk_hw_unregister_gate" +} elf_symbol { id: 0xd2c17be4 name: "clk_is_match" @@ -365049,6 +372338,15 @@ elf_symbol { type_id: 0x9c5a5113 full_name: "clk_set_rate" } +elf_symbol { + id: 0x7c95444b + name: "clk_set_rate_exclusive" + is_defined: true + symbol_type: FUNCTION + crc: 0xc5604800 + type_id: 0x9c5a5113 + full_name: "clk_set_rate_exclusive" +} elf_symbol { id: 0x7fbd0d58 name: "clk_sync_state" @@ -365581,6 +372879,15 @@ elf_symbol { type_id: 0x9fc54954 full_name: "contpte_ptep_test_and_clear_young" } +elf_symbol { + id: 0x467808dd + name: "copy_from_iter_toio" + is_defined: true + symbol_type: FUNCTION + crc: 0xc5d36942 + type_id: 0x9b2f7851 + full_name: "copy_from_iter_toio" +} elf_symbol { id: 0x610edc84 name: "copy_from_kernel_nofault" @@ -365652,6 +372959,15 @@ elf_symbol { type_id: 0x12c79320 full_name: "copy_splice_read" } +elf_symbol { + id: 0xe4109521 + name: "copy_to_iter_fromio" + is_defined: true + symbol_type: FUNCTION + crc: 0xfa02eb95 + type_id: 0x968564ac + full_name: "copy_to_iter_fromio" +} elf_symbol { id: 0xd89255c2 name: "cpu_all_bits" @@ -365724,6 +373040,15 @@ elf_symbol { type_id: 0x2ae742de full_name: "cpu_irqtime" } +elf_symbol { + id: 0xdf9606b3 + name: "cpu_is_hotpluggable" + is_defined: true + symbol_type: FUNCTION + crc: 0x2ebe3135 + type_id: 0xefc5028b + full_name: "cpu_is_hotpluggable" +} elf_symbol { id: 0xd6ea4255 name: "cpu_latency_qos_add_request" @@ -365859,6 +373184,51 @@ elf_symbol { type_id: 0x10ffd8df full_name: "cpufreq_cpu_put" } +elf_symbol { + id: 0x84e3d2de + name: "cpufreq_dbs_governor_exit" + is_defined: true + symbol_type: FUNCTION + crc: 0x64658f85 + type_id: 0x10ffd8df + full_name: "cpufreq_dbs_governor_exit" +} +elf_symbol { + id: 0x0b134421 + name: "cpufreq_dbs_governor_init" + is_defined: true + symbol_type: FUNCTION + crc: 0x291e3cb3 + type_id: 0x9de76a63 + full_name: "cpufreq_dbs_governor_init" +} +elf_symbol { + id: 0x659b0e63 + name: "cpufreq_dbs_governor_limits" + is_defined: true + symbol_type: FUNCTION + crc: 0xfd94a6b2 + type_id: 0x10ffd8df + full_name: "cpufreq_dbs_governor_limits" +} +elf_symbol { + id: 0x86c85b12 + name: "cpufreq_dbs_governor_start" + is_defined: true + symbol_type: FUNCTION + crc: 0x44036499 + type_id: 0x9de76a63 + full_name: "cpufreq_dbs_governor_start" +} +elf_symbol { + id: 0x930f8d3c + name: "cpufreq_dbs_governor_stop" + is_defined: true + symbol_type: FUNCTION + crc: 0x3697613d + type_id: 0x10ffd8df + full_name: "cpufreq_dbs_governor_stop" +} elf_symbol { id: 0x28f60fc9 name: "cpufreq_disable_fast_switch" @@ -366360,6 +373730,15 @@ elf_symbol { type_id: 0x25b94d0a full_name: "crc_ccitt" } +elf_symbol { + id: 0x44303242 + name: "crc_ccitt_false" + is_defined: true + symbol_type: FUNCTION + crc: 0x0cc4b4b6 + type_id: 0x25b94d0a + full_name: "crc_ccitt_false" +} elf_symbol { id: 0xab0e3dee name: "crc_ccitt_table" @@ -366876,6 +374255,15 @@ elf_symbol { type_id: 0x9d555b15 full_name: "crypto_register_rngs" } +elf_symbol { + id: 0x82f7c84f + name: "crypto_register_scomp" + is_defined: true + symbol_type: FUNCTION + crc: 0xe126cc22 + type_id: 0x98544054 + full_name: "crypto_register_scomp" +} elf_symbol { id: 0x1e81ded9 name: "crypto_register_shash" @@ -367137,6 +374525,15 @@ elf_symbol { type_id: 0x104de9a9 full_name: "crypto_unregister_rngs" } +elf_symbol { + id: 0x98477208 + name: "crypto_unregister_scomp" + is_defined: true + symbol_type: FUNCTION + crc: 0x582adbd0 + type_id: 0x154cf2e8 + full_name: "crypto_unregister_scomp" +} elf_symbol { id: 0x6715c595 name: "crypto_unregister_shash" @@ -367504,6 +374901,15 @@ elf_symbol { type_id: 0x2545d8c8 full_name: "datagram_poll" } +elf_symbol { + id: 0xf1e399f5 + name: "dbs_update" + is_defined: true + symbol_type: FUNCTION + crc: 0x36a8cc39 + type_id: 0xcebcf7b7 + full_name: "dbs_update" +} elf_symbol { id: 0x02f83230 name: "deactivate_locked_super" @@ -370340,6 +377746,15 @@ elf_symbol { type_id: 0xc2e99087 full_name: "devm_hwspin_lock_request_specific" } +elf_symbol { + id: 0x3c5570b9 + name: "devm_hwspin_lock_unregister" + is_defined: true + symbol_type: FUNCTION + crc: 0xa9f4dcd9 + type_id: 0x9d285d26 + full_name: "devm_hwspin_lock_unregister" +} elf_symbol { id: 0xa29138c1 name: "devm_i2c_new_dummy_device" @@ -370637,6 +378052,15 @@ elf_symbol { type_id: 0x9435d177 full_name: "devm_nvmem_device_get" } +elf_symbol { + id: 0xe504a070 + name: "devm_nvmem_device_put" + is_defined: true + symbol_type: FUNCTION + crc: 0x53ca63ed + type_id: 0x10e61e10 + full_name: "devm_nvmem_device_put" +} elf_symbol { id: 0x47264dbb name: "devm_nvmem_register" @@ -371857,6 +379281,15 @@ elf_symbol { type_id: 0x9df2edfa full_name: "dma_fence_add_callback" } +elf_symbol { + id: 0x7ab07b7f + name: "dma_fence_allocate_private_stub" + is_defined: true + symbol_type: FUNCTION + crc: 0xba00daa2 + type_id: 0xdb365209 + full_name: "dma_fence_allocate_private_stub" +} elf_symbol { id: 0xe2ee283f name: "dma_fence_array_create" @@ -376753,6 +384186,42 @@ elf_symbol { type_id: 0x9257d91c full_name: "drm_vblank_init" } +elf_symbol { + id: 0x67c8f92b + name: "drm_vblank_work_cancel_sync" + is_defined: true + symbol_type: FUNCTION + crc: 0xbbaed775 + type_id: 0xf2b2b1ab + full_name: "drm_vblank_work_cancel_sync" +} +elf_symbol { + id: 0xc2c5f476 + name: "drm_vblank_work_flush" + is_defined: true + symbol_type: FUNCTION + crc: 0x60be16c1 + type_id: 0x1c8ebb3c + full_name: "drm_vblank_work_flush" +} +elf_symbol { + id: 0xf73ea9f7 + name: "drm_vblank_work_init" + is_defined: true + symbol_type: FUNCTION + crc: 0x7ebf6dae + type_id: 0x1c48693a + full_name: "drm_vblank_work_init" +} +elf_symbol { + id: 0xdc9144c7 + name: "drm_vblank_work_schedule" + is_defined: true + symbol_type: FUNCTION + crc: 0xd893966e + type_id: 0x93c5da99 + full_name: "drm_vblank_work_schedule" +} elf_symbol { id: 0x7993ff4e name: "drm_wait_one_vblank" @@ -376970,6 +384439,15 @@ elf_symbol { type_id: 0x10985193 full_name: "dump_stack" } +elf_symbol { + id: 0x652fbf96 + name: "dump_tasks" + is_defined: true + symbol_type: FUNCTION + crc: 0x4308a91f + type_id: 0x1f821b4c + full_name: "dump_tasks" +} elf_symbol { id: 0xe5d449a3 name: "dup_iter" @@ -378287,6 +385765,15 @@ elf_symbol { type_id: 0x9bf978b8 full_name: "finish_open" } +elf_symbol { + id: 0x599321e2 + name: "finish_rcuwait" + is_defined: true + symbol_type: FUNCTION + crc: 0x5affe5c5 + type_id: 0x1f861b55 + full_name: "finish_rcuwait" +} elf_symbol { id: 0xf882020f name: "finish_wait" @@ -379137,6 +386624,15 @@ elf_symbol { type_id: 0x161723fb full_name: "fsstack_copy_inode_size" } +elf_symbol { + id: 0x613adcb1 + name: "ftrace_dump" + is_defined: true + symbol_type: FUNCTION + crc: 0xaaa918c9 + type_id: 0x376120fa + full_name: "ftrace_dump" +} elf_symbol { id: 0x370e6f08 name: "full_name_hash" @@ -379816,6 +387312,15 @@ elf_symbol { type_id: 0x9ddefbf5 full_name: "generic_key_instantiate" } +elf_symbol { + id: 0x95a840b8 + name: "generic_mii_ioctl" + is_defined: true + symbol_type: FUNCTION + crc: 0x00f739ec + type_id: 0x99c885a2 + full_name: "generic_mii_ioctl" +} elf_symbol { id: 0x7f639ef1 name: "generic_perform_write" @@ -380376,6 +387881,15 @@ elf_symbol { type_id: 0x96a1bf82 full_name: "get_device_system_crosststamp" } +elf_symbol { + id: 0x7edda409 + name: "get_dup_sched_clock" + is_defined: true + symbol_type: FUNCTION + crc: 0x0805fd8c + type_id: 0x57dbd34b + full_name: "get_dup_sched_clock" +} elf_symbol { id: 0x00d00ad1 name: "get_each_object_track" @@ -380937,6 +388451,15 @@ elf_symbol { type_id: 0xc7128bee full_name: "gov_attr_set_put" } +elf_symbol { + id: 0xd915e343 + name: "gov_update_cpu_data" + is_defined: true + symbol_type: FUNCTION + crc: 0x0254adb5 + type_id: 0x1e80bbd4 + full_name: "gov_update_cpu_data" +} elf_symbol { id: 0x2b91f916 name: "governor_sysfs_ops" @@ -381198,6 +388721,15 @@ elf_symbol { type_id: 0x5f272d07 full_name: "gpiod_get" } +elf_symbol { + id: 0x94ca6698 + name: "gpiod_get_array_value" + is_defined: true + symbol_type: FUNCTION + crc: 0x7d8cfea5 + type_id: 0x8ce0e11d + full_name: "gpiod_get_array_value" +} elf_symbol { id: 0x80497778 name: "gpiod_get_direction" @@ -383672,6 +391204,15 @@ elf_symbol { type_id: 0x93a4b915 full_name: "iio_read_channel_raw" } +elf_symbol { + id: 0xbf4818d4 + name: "iio_read_channel_scale" + is_defined: true + symbol_type: FUNCTION + crc: 0x83b78e89 + type_id: 0x93a06f16 + full_name: "iio_read_channel_scale" +} elf_symbol { id: 0xb1548c88 name: "iio_read_const_attr" @@ -384579,6 +392120,15 @@ elf_symbol { type_id: 0x1393d7c4 full_name: "invalidate_bdev" } +elf_symbol { + id: 0x312d0c48 + name: "invalidate_bh_lrus" + is_defined: true + symbol_type: FUNCTION + crc: 0xf5a691cd + type_id: 0x10985193 + full_name: "invalidate_bh_lrus" +} elf_symbol { id: 0xae43d3d4 name: "invalidate_inode_buffers" @@ -385416,6 +392966,24 @@ elf_symbol { type_id: 0x3d278a00 full_name: "ipv6_stub" } +elf_symbol { + id: 0x5ba96acf + name: "ir_raw_event_handle" + is_defined: true + symbol_type: FUNCTION + crc: 0xd78681c6 + type_id: 0x111b6c97 + full_name: "ir_raw_event_handle" +} +elf_symbol { + id: 0xd15ab841 + name: "ir_raw_event_store" + is_defined: true + symbol_type: FUNCTION + crc: 0x5b784d63 + type_id: 0x9cbe9fe5 + full_name: "ir_raw_event_store" +} elf_symbol { id: 0x915bc321 name: "ir_raw_event_store_edge" @@ -386028,6 +393596,15 @@ elf_symbol { type_id: 0x19a9e069 full_name: "irq_work_sync" } +elf_symbol { + id: 0xa4421766 + name: "irqchip_fwnode_ops" + is_defined: true + symbol_type: OBJECT + crc: 0x354c596c + type_id: 0xe4207e6d + full_name: "irqchip_fwnode_ops" +} elf_symbol { id: 0x9ba08730 name: "is_ashmem_file" @@ -386293,6 +393870,15 @@ elf_symbol { type_id: 0x0286be66 full_name: "kasprintf" } +elf_symbol { + id: 0x132eb5f1 + name: "kblockd_mod_delayed_work_on" + is_defined: true + symbol_type: FUNCTION + crc: 0x5b309126 + type_id: 0x849f5fc7 + full_name: "kblockd_mod_delayed_work_on" +} elf_symbol { id: 0xbccf7511 name: "kern_mount" @@ -386898,6 +394484,15 @@ elf_symbol { type_id: 0x1b45f00a full_name: "kmem_cache_free" } +elf_symbol { + id: 0x7d2abcd7 + name: "kmem_cache_size" + is_defined: true + symbol_type: FUNCTION + crc: 0x01dcdb33 + type_id: 0xc5642af6 + full_name: "kmem_cache_size" +} elf_symbol { id: 0xc5292cdd name: "kmemdup" @@ -387753,6 +395348,33 @@ elf_symbol { type_id: 0x9916f8e5 full_name: "ktime_mono_to_any" } +elf_symbol { + id: 0x6b9f4e08 + name: "kunit_add_action" + is_defined: true + symbol_type: FUNCTION + crc: 0x5a310dec + type_id: 0x97fd990e + full_name: "kunit_add_action" +} +elf_symbol { + id: 0xddf84463 + name: "kunit_add_action_or_reset" + is_defined: true + symbol_type: FUNCTION + crc: 0xc4ac2824 + type_id: 0x97fd990e + full_name: "kunit_add_action_or_reset" +} +elf_symbol { + id: 0xbc821700 + name: "kunit_assert_prologue" + is_defined: true + symbol_type: FUNCTION + crc: 0x40fd87a5 + type_id: 0x1cea6976 + full_name: "kunit_assert_prologue" +} elf_symbol { id: 0x4026efa6 name: "kunit_binary_assert_format" @@ -387762,6 +395384,60 @@ elf_symbol { type_id: 0x1d09a9ef full_name: "kunit_binary_assert_format" } +elf_symbol { + id: 0x4f6edfe0 + name: "kunit_binary_ptr_assert_format" + is_defined: true + symbol_type: FUNCTION + crc: 0x28ed4641 + type_id: 0x1d09a9ef + full_name: "kunit_binary_ptr_assert_format" +} +elf_symbol { + id: 0x7c041f90 + name: "kunit_binary_str_assert_format" + is_defined: true + symbol_type: FUNCTION + crc: 0x2e63384a + type_id: 0x1d09a9ef + full_name: "kunit_binary_str_assert_format" +} +elf_symbol { + id: 0x47e5f38a + name: "kunit_cleanup" + is_defined: true + symbol_type: FUNCTION + crc: 0x72c0f9fc + type_id: 0x1adff305 + full_name: "kunit_cleanup" +} +elf_symbol { + id: 0xa41c284f + name: "kunit_deactivate_static_stub" + is_defined: true + symbol_type: FUNCTION + crc: 0x0871d8be + type_id: 0x1abd0691 + full_name: "kunit_deactivate_static_stub" +} +elf_symbol { + id: 0x310d0e78 + name: "kunit_destroy_resource" + is_defined: true + symbol_type: FUNCTION + crc: 0x4c8da5a4 + type_id: 0x964432be + full_name: "kunit_destroy_resource" +} +elf_symbol { + id: 0x9ab59e22 + name: "kunit_fail_assert_format" + is_defined: true + symbol_type: FUNCTION + crc: 0xdeb523ca + type_id: 0x1d09a9ef + full_name: "kunit_fail_assert_format" +} elf_symbol { id: 0xc1b901e4 name: "kunit_hooks" @@ -387771,6 +395447,24 @@ elf_symbol { type_id: 0x54eab2e4 full_name: "kunit_hooks" } +elf_symbol { + id: 0x32b14b11 + name: "kunit_init_test" + is_defined: true + symbol_type: FUNCTION + crc: 0xae791d04 + type_id: 0x1a269128 + full_name: "kunit_init_test" +} +elf_symbol { + id: 0xe23e4c93 + name: "kunit_kfree" + is_defined: true + symbol_type: FUNCTION + crc: 0xb98afc18 + type_id: 0x1a3b8f52 + full_name: "kunit_kfree" +} elf_symbol { id: 0xf2e6f907 name: "kunit_kmalloc_array" @@ -387780,6 +395474,24 @@ elf_symbol { type_id: 0x5f3f0d07 full_name: "kunit_kmalloc_array" } +elf_symbol { + id: 0x099b336e + name: "kunit_log_append" + is_defined: true + symbol_type: FUNCTION + crc: 0x82d70044 + type_id: 0x1169a07b + full_name: "kunit_log_append" +} +elf_symbol { + id: 0x938ddfe7 + name: "kunit_mem_assert_format" + is_defined: true + symbol_type: FUNCTION + crc: 0xe03fbd72 + type_id: 0x1d09a9ef + full_name: "kunit_mem_assert_format" +} elf_symbol { id: 0xb1bdece7 name: "kunit_ptr_not_err_assert_format" @@ -387789,6 +395501,42 @@ elf_symbol { type_id: 0x1d09a9ef full_name: "kunit_ptr_not_err_assert_format" } +elf_symbol { + id: 0x8b34fd8e + name: "kunit_release_action" + is_defined: true + symbol_type: FUNCTION + crc: 0x010cef3a + type_id: 0x1a517af8 + full_name: "kunit_release_action" +} +elf_symbol { + id: 0x363a15f6 + name: "kunit_remove_action" + is_defined: true + symbol_type: FUNCTION + crc: 0x8a7754d5 + type_id: 0x1a517af8 + full_name: "kunit_remove_action" +} +elf_symbol { + id: 0x81c0a916 + name: "kunit_remove_resource" + is_defined: true + symbol_type: FUNCTION + crc: 0xc68fed04 + type_id: 0x1a1c0fef + full_name: "kunit_remove_resource" +} +elf_symbol { + id: 0x7492950b + name: "kunit_run_tests" + is_defined: true + symbol_type: FUNCTION + crc: 0xaa6189fb + type_id: 0x940ad996 + full_name: "kunit_run_tests" +} elf_symbol { id: 0x6c9fdcbe name: "kunit_running" @@ -387798,6 +395546,60 @@ elf_symbol { type_id: 0x8e47c273 full_name: "kunit_running" } +elf_symbol { + id: 0xeecc1015 + name: "kunit_suite_has_succeeded" + is_defined: true + symbol_type: FUNCTION + crc: 0x036944c8 + type_id: 0x6887ae6a + full_name: "kunit_suite_has_succeeded" +} +elf_symbol { + id: 0x5b338158 + name: "kunit_suite_num_test_cases" + is_defined: true + symbol_type: FUNCTION + crc: 0x3e309b83 + type_id: 0x9eb5f3eb + full_name: "kunit_suite_num_test_cases" +} +elf_symbol { + id: 0x75a218bd + name: "kunit_test_case_num" + is_defined: true + symbol_type: FUNCTION + crc: 0x535247a1 + type_id: 0xc772fd1b + full_name: "kunit_test_case_num" +} +elf_symbol { + id: 0x3a33dc62 + name: "kunit_try_catch_run" + is_defined: true + symbol_type: FUNCTION + crc: 0xd3e33b91 + type_id: 0x132e9f28 + full_name: "kunit_try_catch_run" +} +elf_symbol { + id: 0x7e797d51 + name: "kunit_try_catch_throw" + is_defined: true + symbol_type: FUNCTION + crc: 0x0a829fcf + type_id: 0x134c6abc + full_name: "kunit_try_catch_throw" +} +elf_symbol { + id: 0x09144475 + name: "kunit_unary_assert_format" + is_defined: true + symbol_type: FUNCTION + crc: 0x95bd0e45 + type_id: 0x1d09a9ef + full_name: "kunit_unary_assert_format" +} elf_symbol { id: 0x3160ee82 name: "kvasprintf" @@ -388377,6 +396179,15 @@ elf_symbol { type_id: 0x33756485 full_name: "loops_per_jiffy" } +elf_symbol { + id: 0xb78a4a87 + name: "lzo1x_1_compress" + is_defined: true + symbol_type: FUNCTION + crc: 0x787c882b + type_id: 0x9044872a + full_name: "lzo1x_1_compress" +} elf_symbol { id: 0xc84a133c name: "lzo1x_decompress_safe" @@ -388849,6 +396660,15 @@ elf_symbol { type_id: 0x9865d601 full_name: "media_create_pad_link" } +elf_symbol { + id: 0x17f4ad44 + name: "media_create_pad_links" + is_defined: true + symbol_type: FUNCTION + crc: 0x34f280ce + type_id: 0x900f3b82 + full_name: "media_create_pad_links" +} elf_symbol { id: 0x9eddc572 name: "media_device_cleanup" @@ -388876,6 +396696,15 @@ elf_symbol { type_id: 0x9872597b full_name: "media_device_register_entity" } +elf_symbol { + id: 0x91a02e30 + name: "media_device_register_entity_notify" + is_defined: true + symbol_type: FUNCTION + crc: 0x46eded0d + type_id: 0x158e731b + full_name: "media_device_register_entity_notify" +} elf_symbol { id: 0x84271f20 name: "media_device_unregister" @@ -388957,6 +396786,15 @@ elf_symbol { type_id: 0x901c3c62 full_name: "media_entity_setup_link" } +elf_symbol { + id: 0x30d7ee78 + name: "media_get_pad_index" + is_defined: true + symbol_type: FUNCTION + crc: 0x60df3456 + type_id: 0x9917b3ef + full_name: "media_get_pad_index" +} elf_symbol { id: 0x84278a73 name: "media_graph_walk_cleanup" @@ -389065,6 +396903,15 @@ elf_symbol { type_id: 0x59f18b0b full_name: "mem_cgroup_from_id" } +elf_symbol { + id: 0xa9fabdf2 + name: "mem_cgroup_move_account" + is_defined: true + symbol_type: FUNCTION + crc: 0xb203cd2a + type_id: 0x946e09ce + full_name: "mem_cgroup_move_account" +} elf_symbol { id: 0x6da682ae name: "mem_cgroup_update_lru_size" @@ -389101,6 +396948,15 @@ elf_symbol { type_id: 0x01a85b76 full_name: "memblock_end_of_DRAM" } +elf_symbol { + id: 0x4fb91c54 + name: "memblock_free" + is_defined: true + symbol_type: FUNCTION + crc: 0xa6ecab47 + type_id: 0x1567dd7e + full_name: "memblock_free" +} elf_symbol { id: 0x73553ac1 name: "memcg_kmem_online_key" @@ -389110,6 +396966,15 @@ elf_symbol { type_id: 0x8e47c273 full_name: "memcg_kmem_online_key" } +elf_symbol { + id: 0x79d24533 + name: "memcg_page_state" + is_defined: true + symbol_type: FUNCTION + crc: 0x6c98e5c3 + type_id: 0x3766a595 + full_name: "memcg_page_state" +} elf_symbol { id: 0xbf158d63 name: "memcg_sockets_enabled_key" @@ -389358,6 +397223,15 @@ elf_symbol { binding: WEAK crc: 0xdcb764ad } +elf_symbol { + id: 0x3e836f55 + name: "memset16" + is_defined: true + symbol_type: FUNCTION + crc: 0x654449c3 + type_id: 0x5dfb031c + full_name: "memset16" +} elf_symbol { id: 0x4742ac18 name: "memset32" @@ -389457,6 +397331,33 @@ elf_symbol { type_id: 0x9aaabb4a full_name: "migrate_swap" } +elf_symbol { + id: 0x399512e2 + name: "mii_ethtool_get_link_ksettings" + is_defined: true + symbol_type: FUNCTION + crc: 0x70ae59eb + type_id: 0x147ac3d5 + full_name: "mii_ethtool_get_link_ksettings" +} +elf_symbol { + id: 0x69f7fc4b + name: "mii_ethtool_set_link_ksettings" + is_defined: true + symbol_type: FUNCTION + crc: 0x538ac9b2 + type_id: 0x99e350e4 + full_name: "mii_ethtool_set_link_ksettings" +} +elf_symbol { + id: 0x1579ecd2 + name: "mii_nway_restart" + is_defined: true + symbol_type: FUNCTION + crc: 0x5435b816 + type_id: 0x9906a4a5 + full_name: "mii_nway_restart" +} elf_symbol { id: 0xe4572a81 name: "mipi_dsi_attach" @@ -392056,6 +399957,15 @@ elf_symbol { type_id: 0x909c23c2 full_name: "of_cpu_node_to_id" } +elf_symbol { + id: 0x6d4a8012 + name: "of_cpufreq_cooling_register" + is_defined: true + symbol_type: FUNCTION + crc: 0xd9e904a3 + type_id: 0x48d77e8c + full_name: "of_cpufreq_cooling_register" +} elf_symbol { id: 0xa2a80692 name: "of_css" @@ -395084,6 +402994,15 @@ elf_symbol { type_id: 0x9af360d8 full_name: "perf_event_release_kernel" } +elf_symbol { + id: 0x152f2dc3 + name: "perf_event_sysfs_show" + is_defined: true + symbol_type: FUNCTION + crc: 0x550086f1 + type_id: 0x145d7056 + full_name: "perf_event_sysfs_show" +} elf_symbol { id: 0x793668af name: "perf_event_update_userpage" @@ -395183,6 +403102,15 @@ elf_symbol { type_id: 0x915dba0e full_name: "pfn_is_map_memory" } +elf_symbol { + id: 0x46cb13fb + name: "pfn_to_online_page" + is_defined: true + symbol_type: FUNCTION + crc: 0xdc6b93a2 + type_id: 0xb145a9a1 + full_name: "pfn_to_online_page" +} elf_symbol { id: 0x5fa10488 name: "phy_attached_info" @@ -396002,6 +403930,15 @@ elf_symbol { type_id: 0x9996cbde full_name: "phylink_get_eee_err" } +elf_symbol { + id: 0x04ada2db + name: "phylink_init_eee" + is_defined: true + symbol_type: FUNCTION + crc: 0xec02ebe0 + type_id: 0x982336a1 + full_name: "phylink_init_eee" +} elf_symbol { id: 0x60e18dd0 name: "phylink_limit_mac_speed" @@ -396290,6 +404227,15 @@ elf_symbol { type_id: 0x165d386a full_name: "pinctrl_add_gpio_range" } +elf_symbol { + id: 0xca368768 + name: "pinctrl_count_index_with_args" + is_defined: true + symbol_type: FUNCTION + crc: 0x7f3c3fb1 + type_id: 0x91f382e9 + full_name: "pinctrl_count_index_with_args" +} elf_symbol { id: 0x740c134e name: "pinctrl_dev_get_drvdata" @@ -396425,6 +404371,15 @@ elf_symbol { type_id: 0x89d1e10c full_name: "pinctrl_lookup_state" } +elf_symbol { + id: 0x90c471fd + name: "pinctrl_parse_index_with_args" + is_defined: true + symbol_type: FUNCTION + crc: 0xfbc035df + type_id: 0x91ea79c3 + full_name: "pinctrl_parse_index_with_args" +} elf_symbol { id: 0xecd5c994 name: "pinctrl_pm_select_default_state" @@ -396470,6 +404425,15 @@ elf_symbol { type_id: 0xe0acd7ca full_name: "pinctrl_register" } +elf_symbol { + id: 0xb2ceea74 + name: "pinctrl_register_and_init" + is_defined: true + symbol_type: FUNCTION + crc: 0x2b0fbdd8 + type_id: 0x929b7b33 + full_name: "pinctrl_register_and_init" +} elf_symbol { id: 0xa425fc80 name: "pinctrl_register_mappings" @@ -396560,6 +404524,15 @@ elf_symbol { type_id: 0x9b4d90bf full_name: "pinctrl_utils_reserve_map" } +elf_symbol { + id: 0x62c010b9 + name: "pinmux_generic_add_function" + is_defined: true + symbol_type: FUNCTION + crc: 0x62e2f906 + type_id: 0x9ba346af + full_name: "pinmux_generic_add_function" +} elf_symbol { id: 0x013abbf5 name: "pinmux_generic_get_function" @@ -396596,6 +404569,15 @@ elf_symbol { type_id: 0x95876807 full_name: "pinmux_generic_get_function_name" } +elf_symbol { + id: 0x948eca5b + name: "pinmux_generic_remove_function" + is_defined: true + symbol_type: FUNCTION + crc: 0xf0f32ccb + type_id: 0x9a439c8b + full_name: "pinmux_generic_remove_function" +} elf_symbol { id: 0x50cfaca0 name: "pipe_lock" @@ -397821,6 +405803,15 @@ elf_symbol { type_id: 0x91cb6689 full_name: "proc_dostring" } +elf_symbol { + id: 0x1c3e9f6b + name: "proc_douintvec" + is_defined: true + symbol_type: FUNCTION + crc: 0x28500e13 + type_id: 0x91cb6689 + full_name: "proc_douintvec" +} elf_symbol { id: 0x712f800b name: "proc_douintvec_minmax" @@ -398145,6 +406136,15 @@ elf_symbol { type_id: 0x9768f895 full_name: "ptp_clock_unregister" } +elf_symbol { + id: 0xa07a6e08 + name: "ptp_find_pin" + is_defined: true + symbol_type: FUNCTION + crc: 0xe7656a33 + type_id: 0x979ed47c + full_name: "ptp_find_pin" +} elf_symbol { id: 0x8cf796f6 name: "ptp_find_pin_unlocked" @@ -398163,6 +406163,15 @@ elf_symbol { type_id: 0x9587d027 full_name: "ptp_parse_header" } +elf_symbol { + id: 0x496c5195 + name: "ptp_schedule_worker" + is_defined: true + symbol_type: FUNCTION + crc: 0xb7b63ef6 + type_id: 0x97a52d07 + full_name: "ptp_schedule_worker" +} elf_symbol { id: 0x177fa0e0 name: "public_key_verify_signature" @@ -398316,6 +406325,15 @@ elf_symbol { type_id: 0x97889594 full_name: "pwm_adjust_config" } +elf_symbol { + id: 0xcd51319b + name: "pwm_apply_might_sleep" + is_defined: true + symbol_type: FUNCTION + crc: 0x7182b4a9 + type_id: 0x977feed8 + full_name: "pwm_apply_might_sleep" +} elf_symbol { id: 0x53ee2234 name: "pwm_apply_state" @@ -398775,6 +406793,33 @@ elf_symbol { type_id: 0x11085c29 full_name: "rb_replace_node" } +elf_symbol { + id: 0x2f505fb1 + name: "rc_keydown" + is_defined: true + symbol_type: FUNCTION + crc: 0x09489dea + type_id: 0x1075e2ed + full_name: "rc_keydown" +} +elf_symbol { + id: 0x44afa897 + name: "rc_map_register" + is_defined: true + symbol_type: FUNCTION + crc: 0xb960f15c + type_id: 0x98ac2a74 + full_name: "rc_map_register" +} +elf_symbol { + id: 0x449f96cf + name: "rc_map_unregister" + is_defined: true + symbol_type: FUNCTION + crc: 0x2ed90ced + type_id: 0x15b498c8 + full_name: "rc_map_unregister" +} elf_symbol { id: 0xdbf9c67a name: "rcu_barrier" @@ -398784,6 +406829,24 @@ elf_symbol { type_id: 0x10985193 full_name: "rcu_barrier" } +elf_symbol { + id: 0x5a1e8208 + name: "rcu_cpu_stall_suppress" + is_defined: true + symbol_type: OBJECT + crc: 0xb0747ed2 + type_id: 0x6720d32f + full_name: "rcu_cpu_stall_suppress" +} +elf_symbol { + id: 0xc67413f4 + name: "rcu_inkernel_boot_has_ended" + is_defined: true + symbol_type: FUNCTION + crc: 0x24da0093 + type_id: 0xfea45b04 + full_name: "rcu_inkernel_boot_has_ended" +} elf_symbol { id: 0x5b007949 name: "rcuref_get_slowpath" @@ -399027,6 +407090,15 @@ elf_symbol { type_id: 0x12f25e54 full_name: "regcache_mark_dirty" } +elf_symbol { + id: 0x60b782b4 + name: "regcache_reg_cached" + is_defined: true + symbol_type: FUNCTION + crc: 0xe11a0b76 + type_id: 0xfdd8415b + full_name: "regcache_reg_cached" +} elf_symbol { id: 0x38aaa220 name: "regcache_sync" @@ -399693,6 +407765,15 @@ elf_symbol { type_id: 0x9deb64a3 full_name: "regulator_count_voltages" } +elf_symbol { + id: 0x1e484088 + name: "regulator_desc_list_voltage_linear" + is_defined: true + symbol_type: FUNCTION + crc: 0x3b1414ec + type_id: 0x92f2a156 + full_name: "regulator_desc_list_voltage_linear" +} elf_symbol { id: 0x4cf1070c name: "regulator_desc_list_voltage_linear_range" @@ -399765,6 +407846,15 @@ elf_symbol { type_id: 0x9e19cd45 full_name: "regulator_get_bypass_regmap" } +elf_symbol { + id: 0x90e2334a + name: "regulator_get_current_limit" + is_defined: true + symbol_type: FUNCTION + crc: 0x73dc6f80 + type_id: 0x9deb64a3 + full_name: "regulator_get_current_limit" +} elf_symbol { id: 0xfd198070 name: "regulator_get_current_limit_regmap" @@ -399828,6 +407918,15 @@ elf_symbol { type_id: 0x9e5ef2fc full_name: "regulator_get_voltage_rdev" } +elf_symbol { + id: 0x22a5b64b + name: "regulator_get_voltage_sel_pickable_regmap" + is_defined: true + symbol_type: FUNCTION + crc: 0x087bae09 + type_id: 0x9e5ef2fc + full_name: "regulator_get_voltage_sel_pickable_regmap" +} elf_symbol { id: 0x117f1097 name: "regulator_get_voltage_sel_regmap" @@ -399891,6 +407990,15 @@ elf_symbol { type_id: 0x9f48e764 full_name: "regulator_list_voltage_linear_range" } +elf_symbol { + id: 0x6833e084 + name: "regulator_list_voltage_pickable_linear_range" + is_defined: true + symbol_type: FUNCTION + crc: 0x96e3ae41 + type_id: 0x9f48e764 + full_name: "regulator_list_voltage_pickable_linear_range" +} elf_symbol { id: 0x04d5663a name: "regulator_list_voltage_table" @@ -400044,6 +408152,15 @@ elf_symbol { type_id: 0x9c6e2fdb full_name: "regulator_set_voltage" } +elf_symbol { + id: 0x8af977a8 + name: "regulator_set_voltage_sel_pickable_regmap" + is_defined: true + symbol_type: FUNCTION + crc: 0x9f5e93b0 + type_id: 0x9f48e764 + full_name: "regulator_set_voltage_sel_pickable_regmap" +} elf_symbol { id: 0x0b03a904 name: "regulator_set_voltage_sel_regmap" @@ -400693,6 +408810,15 @@ elf_symbol { type_id: 0xfea45b04 full_name: "rng_is_initialized" } +elf_symbol { + id: 0x93ee7a0f + name: "root_device_unregister" + is_defined: true + symbol_type: FUNCTION + crc: 0x97cbc84e + type_id: 0x100e6fc8 + full_name: "root_device_unregister" +} elf_symbol { id: 0xbd83c333 name: "root_mem_cgroup" @@ -401053,6 +409179,15 @@ elf_symbol { type_id: 0x9c8b1b3d full_name: "rproc_of_parse_firmware" } +elf_symbol { + id: 0xe2bb51c7 + name: "rproc_of_resm_mem_entry_init" + is_defined: true + symbol_type: FUNCTION + crc: 0x66ba9201 + type_id: 0xb3ee572b + full_name: "rproc_of_resm_mem_entry_init" +} elf_symbol { id: 0x5e9d56ee name: "rproc_put" @@ -401413,6 +409548,15 @@ elf_symbol { type_id: 0x924a9b47 full_name: "runqueues" } +elf_symbol { + id: 0x570df167 + name: "sampling_rate_store" + is_defined: true + symbol_type: FUNCTION + crc: 0x412d08e1 + type_id: 0x1d04d3fd + full_name: "sampling_rate_store" +} elf_symbol { id: 0x84f045c2 name: "sb800_prefetch" @@ -402178,6 +410322,15 @@ elf_symbol { type_id: 0x1c822746 full_name: "sdhci_enable_clk" } +elf_symbol { + id: 0xe34ae949 + name: "sdhci_enable_sdio_irq" + is_defined: true + symbol_type: FUNCTION + crc: 0x129d5104 + type_id: 0x1c8280d3 + full_name: "sdhci_enable_sdio_irq" +} elf_symbol { id: 0x5ab300fb name: "sdhci_enable_v4_mode" @@ -402313,6 +410466,15 @@ elf_symbol { type_id: 0x93dfa305 full_name: "sdhci_runtime_suspend_host" } +elf_symbol { + id: 0x5fc5a856 + name: "sdhci_send_tuning" + is_defined: true + symbol_type: FUNCTION + crc: 0xc68f909b + type_id: 0x1de33115 + full_name: "sdhci_send_tuning" +} elf_symbol { id: 0xd2399e18 name: "sdhci_set_bus_width" @@ -402340,6 +410502,15 @@ elf_symbol { type_id: 0x1f835b6f full_name: "sdhci_set_power_noreg" } +elf_symbol { + id: 0x77dba918 + name: "sdhci_set_uhs_signaling" + is_defined: true + symbol_type: FUNCTION + crc: 0x300be302 + type_id: 0x1fd10421 + full_name: "sdhci_set_uhs_signaling" +} elf_symbol { id: 0x5cc4535c name: "sdhci_setup_host" @@ -403006,6 +411177,15 @@ elf_symbol { type_id: 0x1e70c9ff full_name: "serdev_device_write_flush" } +elf_symbol { + id: 0x98b882af + name: "serial8250_do_pm" + is_defined: true + symbol_type: FUNCTION + crc: 0x28e4b475 + type_id: 0x11b2c04d + full_name: "serial8250_do_pm" +} elf_symbol { id: 0x2bb7ad6a name: "serial8250_do_set_termios" @@ -403042,6 +411222,15 @@ elf_symbol { type_id: 0x56706cd5 full_name: "serial8250_get_port" } +elf_symbol { + id: 0x358696a1 + name: "serial8250_modem_status" + is_defined: true + symbol_type: FUNCTION + crc: 0x265168f6 + type_id: 0xc9e8def3 + full_name: "serial8250_modem_status" +} elf_symbol { id: 0x970aca32 name: "serial8250_register_8250_port" @@ -403078,6 +411267,24 @@ elf_symbol { type_id: 0x17abf19b full_name: "serial8250_rpm_put" } +elf_symbol { + id: 0x315ab1ad + name: "serial8250_rpm_put_tx" + is_defined: true + symbol_type: FUNCTION + crc: 0xec5e952b + type_id: 0x17abf19b + full_name: "serial8250_rpm_put_tx" +} +elf_symbol { + id: 0x974467ca + name: "serial8250_rx_chars" + is_defined: true + symbol_type: FUNCTION + crc: 0x008e0c99 + type_id: 0x045dbf47 + full_name: "serial8250_rx_chars" +} elf_symbol { id: 0x89ed643c name: "serial8250_suspend_port" @@ -403087,6 +411294,15 @@ elf_symbol { type_id: 0x09506558 full_name: "serial8250_suspend_port" } +elf_symbol { + id: 0xb00e1c68 + name: "serial8250_tx_chars" + is_defined: true + symbol_type: FUNCTION + crc: 0x44b995e6 + type_id: 0x17abf19b + full_name: "serial8250_tx_chars" +} elf_symbol { id: 0x620f0859 name: "serial8250_unregister_port" @@ -404764,6 +412980,15 @@ elf_symbol { type_id: 0x9b735e47 full_name: "snd_compr_stop_error" } +elf_symbol { + id: 0xd2c5f178 + name: "snd_compress_new" + is_defined: true + symbol_type: FUNCTION + crc: 0xec35b27f + type_id: 0x90fb7755 + full_name: "snd_compress_new" +} elf_symbol { id: 0x476ce3a0 name: "snd_ctl_add" @@ -405259,6 +413484,15 @@ elf_symbol { type_id: 0x98aeb261 full_name: "snd_pcm_lib_free_pages" } +elf_symbol { + id: 0x50044b1f + name: "snd_pcm_lib_free_vmalloc_buffer" + is_defined: true + symbol_type: FUNCTION + crc: 0x919e2148 + type_id: 0x98aeb261 + full_name: "snd_pcm_lib_free_vmalloc_buffer" +} elf_symbol { id: 0xcb6ed759 name: "snd_pcm_lib_ioctl" @@ -405412,6 +413646,15 @@ elf_symbol { type_id: 0x9b3e4950 full_name: "snd_soc_add_card_controls" } +elf_symbol { + id: 0xf19e02b6 + name: "snd_soc_add_component" + is_defined: true + symbol_type: FUNCTION + crc: 0x3af5c303 + type_id: 0x99b8eaeb + full_name: "snd_soc_add_component" +} elf_symbol { id: 0x0af8ff72 name: "snd_soc_add_component_controls" @@ -405592,6 +413835,15 @@ elf_symbol { type_id: 0x14e71014 full_name: "snd_soc_component_init_regmap" } +elf_symbol { + id: 0xd4ef4fce + name: "snd_soc_component_initialize" + is_defined: true + symbol_type: FUNCTION + crc: 0xe5a31250 + type_id: 0x99115f3b + full_name: "snd_soc_component_initialize" +} elf_symbol { id: 0x5bb4794d name: "snd_soc_component_notify_control" @@ -406609,6 +414861,15 @@ elf_symbol { type_id: 0x98508ee0 full_name: "snd_soc_set_runtime_hwparams" } +elf_symbol { + id: 0x3326710b + name: "snd_soc_tdm_params_to_bclk" + is_defined: true + symbol_type: FUNCTION + crc: 0x4fa1782d + type_id: 0x976ee581 + full_name: "snd_soc_tdm_params_to_bclk" +} elf_symbol { id: 0x93803c84 name: "snd_soc_tplg_component_load" @@ -407257,6 +415518,15 @@ elf_symbol { type_id: 0x155a3a09 full_name: "sort" } +elf_symbol { + id: 0x743e9912 + name: "spi_add_device" + is_defined: true + symbol_type: FUNCTION + crc: 0xfbfab9c0 + type_id: 0x9930cdbf + full_name: "spi_add_device" +} elf_symbol { id: 0x13b529c0 name: "spi_alloc_device" @@ -408133,6 +416403,15 @@ elf_symbol { type_id: 0x9d6a72fd full_name: "subsys_system_register" } +elf_symbol { + id: 0x4072acf3 + name: "sum_mthp_stat" + is_defined: true + symbol_type: FUNCTION + crc: 0xd18876bf + type_id: 0x29d15eb9 + full_name: "sum_mthp_stat" +} elf_symbol { id: 0xdf289104 name: "super_setup_bdi" @@ -409839,6 +418118,42 @@ elf_symbol { type_id: 0x1459aedb full_name: "touchscreen_report_pos" } +elf_symbol { + id: 0xa7da1ac2 + name: "trace_array_destroy" + is_defined: true + symbol_type: FUNCTION + crc: 0x331cd17d + type_id: 0x9c7c48fd + full_name: "trace_array_destroy" +} +elf_symbol { + id: 0xe2481840 + name: "trace_array_get_by_name" + is_defined: true + symbol_type: FUNCTION + crc: 0x99349eb9 + type_id: 0x1f3d2f88 + full_name: "trace_array_get_by_name" +} +elf_symbol { + id: 0x9fa2aa18 + name: "trace_array_init_printk" + is_defined: true + symbol_type: FUNCTION + crc: 0xcd0176a3 + type_id: 0x9c7c48fd + full_name: "trace_array_init_printk" +} +elf_symbol { + id: 0x49737cd5 + name: "trace_array_printk" + is_defined: true + symbol_type: FUNCTION + crc: 0xc4fae537 + type_id: 0x9cbc8dea + full_name: "trace_array_printk" +} elf_symbol { id: 0x86b2ecdf name: "trace_array_put" @@ -412768,6 +421083,15 @@ elf_symbol { type_id: 0x10985193 full_name: "usb_amd_quirk_pll_enable" } +elf_symbol { + id: 0x406267f4 + name: "usb_anchor_empty" + is_defined: true + symbol_type: FUNCTION + crc: 0x7e8d8619 + type_id: 0x90953240 + full_name: "usb_anchor_empty" +} elf_symbol { id: 0x73c499cf name: "usb_anchor_urb" @@ -414019,6 +422343,15 @@ elf_symbol { type_id: 0x9edfdadc full_name: "usb_reset_device" } +elf_symbol { + id: 0x80c1324b + name: "usb_reset_endpoint" + is_defined: true + symbol_type: FUNCTION + crc: 0x8d190329 + type_id: 0x12d17df8 + full_name: "usb_reset_endpoint" +} elf_symbol { id: 0xb61e8892 name: "usb_role_string" @@ -414055,6 +422388,15 @@ elf_symbol { type_id: 0x50ccb1a4 full_name: "usb_role_switch_get_drvdata" } +elf_symbol { + id: 0x9de82d32 + name: "usb_role_switch_get_role" + is_defined: true + symbol_type: FUNCTION + crc: 0xff42c374 + type_id: 0x92e1fcc5 + full_name: "usb_role_switch_get_role" +} elf_symbol { id: 0x09c05733 name: "usb_role_switch_put" @@ -414307,6 +422649,15 @@ elf_symbol { type_id: 0x10d459f4 full_name: "usb_unanchor_urb" } +elf_symbol { + id: 0x67c518ec + name: "usb_unlink_anchored_urbs" + is_defined: true + symbol_type: FUNCTION + crc: 0x933f75e0 + type_id: 0x1d8d80fc + full_name: "usb_unlink_anchored_urbs" +} elf_symbol { id: 0x0741c87d name: "usb_unlink_urb" @@ -414595,6 +422946,15 @@ elf_symbol { type_id: 0x8b00bfc7 full_name: "v4l2_ctrl_g_ctrl_int64" } +elf_symbol { + id: 0xcab5ad52 + name: "v4l2_ctrl_get_menu" + is_defined: true + symbol_type: FUNCTION + crc: 0x315de2cf + type_id: 0xc9a5aa04 + full_name: "v4l2_ctrl_get_menu" +} elf_symbol { id: 0xd811c59d name: "v4l2_ctrl_handler_free" @@ -414748,6 +423108,33 @@ elf_symbol { type_id: 0x912c9057 full_name: "v4l2_ctrl_subscribe_event" } +elf_symbol { + id: 0xacd6c6a5 + name: "v4l2_ctrl_type_op_equal" + is_defined: true + symbol_type: FUNCTION + crc: 0xe090e0fb + type_id: 0xf2f112a6 + full_name: "v4l2_ctrl_type_op_equal" +} +elf_symbol { + id: 0xcc09aff4 + name: "v4l2_ctrl_type_op_init" + is_defined: true + symbol_type: FUNCTION + crc: 0xd04a59f5 + type_id: 0x1f3c2ec8 + full_name: "v4l2_ctrl_type_op_init" +} +elf_symbol { + id: 0xc9069849 + name: "v4l2_ctrl_type_op_log" + is_defined: true + symbol_type: FUNCTION + crc: 0x9efe1751 + type_id: 0x1c155f01 + full_name: "v4l2_ctrl_type_op_log" +} elf_symbol { id: 0x426bca09 name: "v4l2_device_register" @@ -415036,6 +423423,15 @@ elf_symbol { type_id: 0x1ce56ba2 full_name: "v4l2_m2m_buf_copy_metadata" } +elf_symbol { + id: 0x75d8eadc + name: "v4l2_m2m_buf_done_and_job_finish" + is_defined: true + symbol_type: FUNCTION + crc: 0x0e8b2126 + type_id: 0x171e5a9d + full_name: "v4l2_m2m_buf_done_and_job_finish" +} elf_symbol { id: 0x31a465c5 name: "v4l2_m2m_buf_queue" @@ -415270,6 +423666,15 @@ elf_symbol { type_id: 0x1714b02d full_name: "v4l2_m2m_job_finish" } +elf_symbol { + id: 0x2877aa0d + name: "v4l2_m2m_last_buf" + is_defined: true + symbol_type: FUNCTION + crc: 0x083038b0 + type_id: 0x318cc368 + full_name: "v4l2_m2m_last_buf" +} elf_symbol { id: 0x1aa035d8 name: "v4l2_m2m_last_buffer_done" @@ -415648,6 +424053,96 @@ elf_symbol { type_id: 0xf5901b02 full_name: "vb2_common_vm_ops" } +elf_symbol { + id: 0xbb77b87a + name: "vb2_core_dqbuf" + is_defined: true + symbol_type: FUNCTION + crc: 0xc74c356b + type_id: 0x9b4bfaf9 + full_name: "vb2_core_dqbuf" +} +elf_symbol { + id: 0x82c6b209 + name: "vb2_core_expbuf" + is_defined: true + symbol_type: FUNCTION + crc: 0x1c85394a + type_id: 0x9b7ea2d3 + full_name: "vb2_core_expbuf" +} +elf_symbol { + id: 0x1d78865e + name: "vb2_core_poll" + is_defined: true + symbol_type: FUNCTION + crc: 0x5564fcfc + type_id: 0x25fe2d8e + full_name: "vb2_core_poll" +} +elf_symbol { + id: 0x324368a6 + name: "vb2_core_qbuf" + is_defined: true + symbol_type: FUNCTION + crc: 0x0ec39d40 + type_id: 0x9a330a54 + full_name: "vb2_core_qbuf" +} +elf_symbol { + id: 0xb1cbbab7 + name: "vb2_core_querybuf" + is_defined: true + symbol_type: FUNCTION + crc: 0x9fbb8bc9 + type_id: 0x172b2da0 + full_name: "vb2_core_querybuf" +} +elf_symbol { + id: 0x16dd1a3c + name: "vb2_core_queue_init" + is_defined: true + symbol_type: FUNCTION + crc: 0xb2c5117c + type_id: 0x9b23a5dd + full_name: "vb2_core_queue_init" +} +elf_symbol { + id: 0x53b35719 + name: "vb2_core_queue_release" + is_defined: true + symbol_type: FUNCTION + crc: 0x46e668ae + type_id: 0x163b1761 + full_name: "vb2_core_queue_release" +} +elf_symbol { + id: 0x48b1410d + name: "vb2_core_reqbufs" + is_defined: true + symbol_type: FUNCTION + crc: 0xa786e06c + type_id: 0x9b366ee3 + full_name: "vb2_core_reqbufs" +} +elf_symbol { + id: 0xccb0b2fb + name: "vb2_core_streamoff" + is_defined: true + symbol_type: FUNCTION + crc: 0x3fe334dc + type_id: 0x9a35b045 + full_name: "vb2_core_streamoff" +} +elf_symbol { + id: 0x1c01a8c0 + name: "vb2_core_streamon" + is_defined: true + symbol_type: FUNCTION + crc: 0x61b73b14 + type_id: 0x9a35b045 + full_name: "vb2_core_streamon" +} elf_symbol { id: 0xc2eed4fe name: "vb2_create_bufs" @@ -417312,6 +425807,15 @@ elf_symbol { type_id: 0x1fc98171 full_name: "vm_unmap_ram" } +elf_symbol { + id: 0xbbf42090 + name: "vm_unmapped_area" + is_defined: true + symbol_type: FUNCTION + crc: 0x064b9739 + type_id: 0x36c501fb + full_name: "vm_unmapped_area" +} elf_symbol { id: 0xca7f93d5 name: "vm_zone_stat" @@ -417420,6 +425924,168 @@ elf_symbol { type_id: 0xc07b6222 full_name: "vmf_insert_pfn_prot" } +elf_symbol { + id: 0x88564e4d + name: "vp_modern_config_vector" + is_defined: true + symbol_type: FUNCTION + crc: 0x33f38505 + type_id: 0x06abc84e + full_name: "vp_modern_config_vector" +} +elf_symbol { + id: 0x2a499fb6 + name: "vp_modern_generation" + is_defined: true + symbol_type: FUNCTION + crc: 0xb3ec762e + type_id: 0x403dfc63 + full_name: "vp_modern_generation" +} +elf_symbol { + id: 0x2f1d8bbe + name: "vp_modern_get_features" + is_defined: true + symbol_type: FUNCTION + crc: 0x2e8b2109 + type_id: 0x521e044a + full_name: "vp_modern_get_features" +} +elf_symbol { + id: 0x596906ec + name: "vp_modern_get_num_queues" + is_defined: true + symbol_type: FUNCTION + crc: 0xc40ef704 + type_id: 0x04eefeb1 + full_name: "vp_modern_get_num_queues" +} +elf_symbol { + id: 0x955848c3 + name: "vp_modern_get_queue_enable" + is_defined: true + symbol_type: FUNCTION + crc: 0x5a66e2d5 + type_id: 0xf924bafa + full_name: "vp_modern_get_queue_enable" +} +elf_symbol { + id: 0xee07b7fa + name: "vp_modern_get_queue_reset" + is_defined: true + symbol_type: FUNCTION + crc: 0xe5966fef + type_id: 0x9a0002d1 + full_name: "vp_modern_get_queue_reset" +} +elf_symbol { + id: 0x1a3d203d + name: "vp_modern_get_queue_size" + is_defined: true + symbol_type: FUNCTION + crc: 0x9924dd3f + type_id: 0x06abc84e + full_name: "vp_modern_get_queue_size" +} +elf_symbol { + id: 0x56fce5ba + name: "vp_modern_get_status" + is_defined: true + symbol_type: FUNCTION + crc: 0xfc0f151b + type_id: 0x568f6976 + full_name: "vp_modern_get_status" +} +elf_symbol { + id: 0xd04f99b1 + name: "vp_modern_map_vq_notify" + is_defined: true + symbol_type: FUNCTION + crc: 0x3825db82 + type_id: 0x511da256 + full_name: "vp_modern_map_vq_notify" +} +elf_symbol { + id: 0xeafb7c63 + name: "vp_modern_probe" + is_defined: true + symbol_type: FUNCTION + crc: 0x98d7f24d + type_id: 0x9845342e + full_name: "vp_modern_probe" +} +elf_symbol { + id: 0xb44552a3 + name: "vp_modern_queue_address" + is_defined: true + symbol_type: FUNCTION + crc: 0x8db13658 + type_id: 0x173e54a5 + full_name: "vp_modern_queue_address" +} +elf_symbol { + id: 0x0ce2fc25 + name: "vp_modern_queue_vector" + is_defined: true + symbol_type: FUNCTION + crc: 0x82d4019f + type_id: 0x068f9b21 + full_name: "vp_modern_queue_vector" +} +elf_symbol { + id: 0x4c8205e5 + name: "vp_modern_remove" + is_defined: true + symbol_type: FUNCTION + crc: 0x94a28339 + type_id: 0x155d8692 + full_name: "vp_modern_remove" +} +elf_symbol { + id: 0x3c8cb54f + name: "vp_modern_set_features" + is_defined: true + symbol_type: FUNCTION + crc: 0x52427473 + type_id: 0x17150a5c + full_name: "vp_modern_set_features" +} +elf_symbol { + id: 0xe8a36814 + name: "vp_modern_set_queue_enable" + is_defined: true + symbol_type: FUNCTION + crc: 0xd7fb4bca + type_id: 0x1703efba + full_name: "vp_modern_set_queue_enable" +} +elf_symbol { + id: 0x2154fc6f + name: "vp_modern_set_queue_reset" + is_defined: true + symbol_type: FUNCTION + crc: 0x43e950d1 + type_id: 0x1718b06d + full_name: "vp_modern_set_queue_reset" +} +elf_symbol { + id: 0xf5735630 + name: "vp_modern_set_queue_size" + is_defined: true + symbol_type: FUNCTION + crc: 0xfb6b3455 + type_id: 0x173ce302 + full_name: "vp_modern_set_queue_size" +} +elf_symbol { + id: 0xdf41f771 + name: "vp_modern_set_status" + is_defined: true + symbol_type: FUNCTION + crc: 0xb9f06889 + type_id: 0x15f8f75a + full_name: "vp_modern_set_status" +} elf_symbol { id: 0x61b986b8 name: "vprintk" @@ -418321,6 +426987,24 @@ elf_symbol { type_id: 0x62e6e159 full_name: "xfrm_stateonly_find" } +elf_symbol { + id: 0x994cfb6c + name: "xhci_add_endpoint" + is_defined: true + symbol_type: FUNCTION + crc: 0xbfa345f5 + type_id: 0x94ebfe13 + full_name: "xhci_add_endpoint" +} +elf_symbol { + id: 0x45b1aaf3 + name: "xhci_check_bandwidth" + is_defined: true + symbol_type: FUNCTION + crc: 0xa1e13186 + type_id: 0x94eb1868 + full_name: "xhci_check_bandwidth" +} elf_symbol { id: 0xafbe49ee name: "xhci_create_secondary_interrupter" @@ -418339,6 +427023,15 @@ elf_symbol { type_id: 0x9e22c8b8 full_name: "xhci_disable_interrupter" } +elf_symbol { + id: 0x2e259f09 + name: "xhci_drop_endpoint" + is_defined: true + symbol_type: FUNCTION + crc: 0x2dc1aecd + type_id: 0x94ebfe13 + full_name: "xhci_drop_endpoint" +} elf_symbol { id: 0xc6fdfac7 name: "xhci_enable_interrupter" @@ -418402,6 +427095,15 @@ elf_symbol { type_id: 0x19fc7bf2 full_name: "xhci_remove_secondary_interrupter" } +elf_symbol { + id: 0x5459398e + name: "xhci_reset_bandwidth" + is_defined: true + symbol_type: FUNCTION + crc: 0xddfd9bb1 + type_id: 0x19f3aad4 + full_name: "xhci_reset_bandwidth" +} elf_symbol { id: 0x4603c1d4 name: "xhci_resume" @@ -418429,6 +427131,60 @@ elf_symbol { type_id: 0x9d06e814 full_name: "xhci_set_interrupter_moderation" } +elf_symbol { + id: 0xe5204f2a + name: "xhci_sideband_add_endpoint" + is_defined: true + symbol_type: FUNCTION + crc: 0x5e87fdf2 + type_id: 0x9ebbeb61 + full_name: "xhci_sideband_add_endpoint" +} +elf_symbol { + id: 0xe8738bea + name: "xhci_sideband_create_interrupter" + is_defined: true + symbol_type: FUNCTION + crc: 0x06cdb379 + type_id: 0x9f317254 + full_name: "xhci_sideband_create_interrupter" +} +elf_symbol { + id: 0xb312c6b6 + name: "xhci_sideband_register" + is_defined: true + symbol_type: FUNCTION + crc: 0x83140b04 + type_id: 0x5ec21b78 + full_name: "xhci_sideband_register" +} +elf_symbol { + id: 0x4438c268 + name: "xhci_sideband_remove_endpoint" + is_defined: true + symbol_type: FUNCTION + crc: 0xfe6f64f9 + type_id: 0x9ebbeb61 + full_name: "xhci_sideband_remove_endpoint" +} +elf_symbol { + id: 0xf2371f33 + name: "xhci_sideband_remove_interrupter" + is_defined: true + symbol_type: FUNCTION + crc: 0xa9747771 + type_id: 0x13ad3e6d + full_name: "xhci_sideband_remove_interrupter" +} +elf_symbol { + id: 0xa7fc3cb3 + name: "xhci_sideband_unregister" + is_defined: true + symbol_type: FUNCTION + crc: 0xd6e54c5b + type_id: 0x13ad3e6d + full_name: "xhci_sideband_unregister" +} elf_symbol { id: 0x0e10ac76 name: "xhci_stop_endpoint_sync" @@ -418780,6 +427536,15 @@ elf_symbol { type_id: 0x9a26927b full_name: "zs_huge_class_size" } +elf_symbol { + id: 0x13df4c50 + name: "zs_lookup_class_index" + is_defined: true + symbol_type: FUNCTION + crc: 0x5957cddb + type_id: 0xc2d4304a + full_name: "zs_lookup_class_index" +} elf_symbol { id: 0x7e421214 name: "zs_malloc" @@ -418816,8 +427581,82 @@ elf_symbol { type_id: 0x1d4cdf28 full_name: "zs_unmap_object" } +elf_symbol { + id: 0x9c1e0c55 + name: "zstd_cctx_workspace_bound" + is_defined: true + symbol_type: FUNCTION + crc: 0xbe6a8c96 + type_id: 0x9982e8c8 + full_name: "zstd_cctx_workspace_bound" +} +elf_symbol { + id: 0x4ba0be41 + name: "zstd_compress_cctx" + is_defined: true + symbol_type: FUNCTION + crc: 0xf2628676 + type_id: 0x9dc2f17b + full_name: "zstd_compress_cctx" +} +elf_symbol { + id: 0xb2b54222 + name: "zstd_dctx_workspace_bound" + is_defined: true + symbol_type: FUNCTION + crc: 0x8c30bf67 + type_id: 0x973fc952 + full_name: "zstd_dctx_workspace_bound" +} +elf_symbol { + id: 0xb8699f23 + name: "zstd_decompress_dctx" + is_defined: true + symbol_type: FUNCTION + crc: 0xca1648d4 + type_id: 0x9ed60004 + full_name: "zstd_decompress_dctx" +} +elf_symbol { + id: 0x3542c796 + name: "zstd_get_params" + is_defined: true + symbol_type: FUNCTION + crc: 0x6315c42c + type_id: 0x92ea4d80 + full_name: "zstd_get_params" +} +elf_symbol { + id: 0xae02eaa9 + name: "zstd_init_cctx" + is_defined: true + symbol_type: FUNCTION + crc: 0x0a84b15d + type_id: 0xea297877 + full_name: "zstd_init_cctx" +} +elf_symbol { + id: 0x0d8da27c + name: "zstd_init_dctx" + is_defined: true + symbol_type: FUNCTION + crc: 0x3ae34aeb + type_id: 0xfa672d54 + full_name: "zstd_init_dctx" +} +elf_symbol { + id: 0x19c14ad0 + name: "zstd_is_error" + is_defined: true + symbol_type: FUNCTION + crc: 0xafc6c68e + type_id: 0xf3d624ec + full_name: "zstd_is_error" +} interface { id: 0x84ea5130 + symbol_id: 0x698a526c + symbol_id: 0x4203f861 symbol_id: 0xd5cb4002 symbol_id: 0x17a6dc14 symbol_id: 0x2dddbe52 @@ -419044,7 +427883,11 @@ interface { symbol_id: 0x87f1cde5 symbol_id: 0x2783e7a2 symbol_id: 0xb8010114 + symbol_id: 0x9a951407 + symbol_id: 0x418d6ad6 symbol_id: 0x0a5cc8aa + symbol_id: 0x1f30cacd + symbol_id: 0xede9ef5f symbol_id: 0x67989f5a symbol_id: 0xb538b098 symbol_id: 0x9f86f628 @@ -419107,6 +427950,7 @@ interface { symbol_id: 0xb35f76db symbol_id: 0xed5a2777 symbol_id: 0xeef3c2cd + symbol_id: 0x42bef347 symbol_id: 0x430bd907 symbol_id: 0x535df772 symbol_id: 0xafd4e12a @@ -419145,6 +427989,7 @@ interface { symbol_id: 0xf263b97f symbol_id: 0xa2452368 symbol_id: 0x2b453adc + symbol_id: 0xd5276fa4 symbol_id: 0x98379aaf symbol_id: 0xe8433122 symbol_id: 0x31b4eed9 @@ -419203,12 +428048,14 @@ interface { symbol_id: 0xf7de9a97 symbol_id: 0x4e8c8c45 symbol_id: 0x6356c7e1 + symbol_id: 0x46adfea4 symbol_id: 0x233d8b34 symbol_id: 0xa5905957 symbol_id: 0x17dfc6db symbol_id: 0xb42422d5 symbol_id: 0xb3d70eab symbol_id: 0x9ca1a40f + symbol_id: 0xef79dd4d symbol_id: 0x0b48afa1 symbol_id: 0xa927338c symbol_id: 0x6d4cc1a2 @@ -419237,6 +428084,7 @@ interface { symbol_id: 0x3e4ab4f6 symbol_id: 0xa0a77bb8 symbol_id: 0xa3b41867 + symbol_id: 0xaed18130 symbol_id: 0x40034e11 symbol_id: 0x6e62463e symbol_id: 0x1bf82dcd @@ -419249,6 +428097,7 @@ interface { symbol_id: 0xd5b05c65 symbol_id: 0xebecb2ce symbol_id: 0x6740fa4e + symbol_id: 0x35765b66 symbol_id: 0xf94ce10d symbol_id: 0x45d21f87 symbol_id: 0x83371e9e @@ -419271,6 +428120,8 @@ interface { symbol_id: 0xfc83b254 symbol_id: 0x7e99bc71 symbol_id: 0x7c212080 + symbol_id: 0x7fcabbe6 + symbol_id: 0x3444c3ba symbol_id: 0x1ea5d323 symbol_id: 0x0d22882d symbol_id: 0x0250206d @@ -419378,6 +428229,7 @@ interface { symbol_id: 0xa3ddabd2 symbol_id: 0xf78be1c5 symbol_id: 0xa6133b26 + symbol_id: 0x666f7184 symbol_id: 0xd0b4a794 symbol_id: 0x3e1edf55 symbol_id: 0x33f9278c @@ -419422,6 +428274,8 @@ interface { symbol_id: 0xcc2edef9 symbol_id: 0x61c82fb5 symbol_id: 0x6f2a9ca9 + symbol_id: 0x47b414fe + symbol_id: 0x4ae900a4 symbol_id: 0xe479b209 symbol_id: 0x02b646c9 symbol_id: 0xb083b981 @@ -419437,6 +428291,7 @@ interface { symbol_id: 0xef7737f8 symbol_id: 0xaed0a325 symbol_id: 0xc308efa9 + symbol_id: 0x9cbc7813 symbol_id: 0x478c1248 symbol_id: 0x9615636c symbol_id: 0xf3cb298b @@ -419463,6 +428318,8 @@ interface { symbol_id: 0xbb17692f symbol_id: 0xc8db6e69 symbol_id: 0x45f41f73 + symbol_id: 0x17df4128 + symbol_id: 0x5db6a094 symbol_id: 0x0bf2f5bb symbol_id: 0x5c382938 symbol_id: 0x94b48bb0 @@ -419471,6 +428328,7 @@ interface { symbol_id: 0x5e9ed424 symbol_id: 0xada127d2 symbol_id: 0xd593b3ef + symbol_id: 0xb5020a7f symbol_id: 0x707cf8c6 symbol_id: 0xea6452e1 symbol_id: 0x1cc3aec5 @@ -419479,6 +428337,8 @@ interface { symbol_id: 0x7c2d751f symbol_id: 0x9dbd7b92 symbol_id: 0x2576f1c7 + symbol_id: 0xdd171ab0 + symbol_id: 0x515cade3 symbol_id: 0xf80eb64b symbol_id: 0x42312ccc symbol_id: 0xf432d1c9 @@ -419489,15 +428349,23 @@ interface { symbol_id: 0x1f554c2a symbol_id: 0x343adff1 symbol_id: 0x9c6911fb + symbol_id: 0xcb0a2c01 symbol_id: 0x377d134d + symbol_id: 0x905272e6 symbol_id: 0x93a4717b + symbol_id: 0x6091a763 symbol_id: 0x19fc04e0 symbol_id: 0x734973d4 symbol_id: 0xb7d91f76 symbol_id: 0x158bf9d3 symbol_id: 0x0e217a5e + symbol_id: 0x1b65e021 + symbol_id: 0xd44631ef + symbol_id: 0xf110e9f6 + symbol_id: 0x5f626e29 symbol_id: 0x1fca37bf symbol_id: 0xe6702595 + symbol_id: 0xa51a0f0c symbol_id: 0x9e91661b symbol_id: 0xcbee3d67 symbol_id: 0x26a07b7d @@ -419517,16 +428385,21 @@ interface { symbol_id: 0x39120fb0 symbol_id: 0x494c2e7a symbol_id: 0x79670e34 + symbol_id: 0x036eff0c symbol_id: 0x4f81fc38 symbol_id: 0xff623c2f symbol_id: 0x7fef736f symbol_id: 0x9fe60f0c symbol_id: 0x30d4a091 symbol_id: 0x83b45f32 + symbol_id: 0x0c91a472 + symbol_id: 0xd402982f + symbol_id: 0xe9a19bff symbol_id: 0x47a1ebbd symbol_id: 0x2b2d07aa symbol_id: 0x2e323991 symbol_id: 0x3d32611b + symbol_id: 0xa8439430 symbol_id: 0x2b3e4b23 symbol_id: 0x7cd03d83 symbol_id: 0x4b67a5dc @@ -419555,17 +428428,22 @@ interface { symbol_id: 0x61ea12b8 symbol_id: 0x12e2e54d symbol_id: 0x1bfed9f9 + symbol_id: 0x44892f77 symbol_id: 0x27757c9a symbol_id: 0xb832c560 symbol_id: 0x96b60e0b symbol_id: 0x3431d426 symbol_id: 0x8c174a7d symbol_id: 0xea8ce2b0 + symbol_id: 0x105350cb + symbol_id: 0x83742db6 symbol_id: 0x9f58159a symbol_id: 0x29c67d40 + symbol_id: 0x6f5c8275 symbol_id: 0xf182fb15 symbol_id: 0xe44dacb1 symbol_id: 0xab76d6cc + symbol_id: 0xc168df93 symbol_id: 0x5612c9d1 symbol_id: 0xa77effd1 symbol_id: 0x306a6019 @@ -419574,6 +428452,7 @@ interface { symbol_id: 0x17b175ff symbol_id: 0x2a856841 symbol_id: 0x0b2ba11b + symbol_id: 0x6105c960 symbol_id: 0xe17999f4 symbol_id: 0x721b87b7 symbol_id: 0x1c5ab7ec @@ -419581,8 +428460,10 @@ interface { symbol_id: 0x056c5936 symbol_id: 0xd3e1b817 symbol_id: 0x08789d6e + symbol_id: 0xe2695428 symbol_id: 0x2853afc7 symbol_id: 0x910aba6d + symbol_id: 0xab5a83cd symbol_id: 0xdf18f975 symbol_id: 0xa86939b3 symbol_id: 0xfbaaa7e4 @@ -419667,14 +428548,20 @@ interface { symbol_id: 0xb841c45e symbol_id: 0xe3b923c8 symbol_id: 0x8a2c7656 + symbol_id: 0xa3c925f8 + symbol_id: 0xdb84678c + symbol_id: 0x0b48ad7a symbol_id: 0x874fcdb2 symbol_id: 0xaa3f6a65 symbol_id: 0xa2fe718f symbol_id: 0x98a943de + symbol_id: 0xb6a93669 + symbol_id: 0x7a1f2e3e symbol_id: 0x70e34072 symbol_id: 0x53263f73 symbol_id: 0xe828d15b symbol_id: 0xda8424a2 + symbol_id: 0x2657a2e6 symbol_id: 0xf3144cdc symbol_id: 0x4d31a413 symbol_id: 0xe7f6f975 @@ -419683,9 +428570,12 @@ interface { symbol_id: 0xd83423df symbol_id: 0x6d9f8b13 symbol_id: 0x21e28aab + symbol_id: 0x6f5e0f48 + symbol_id: 0x709279fd symbol_id: 0xdfd06b97 symbol_id: 0x69c3749b symbol_id: 0x3d0fc76c + symbol_id: 0x893b8004 symbol_id: 0x56a5b453 symbol_id: 0x215231a8 symbol_id: 0x9f96ac15 @@ -419696,9 +428586,13 @@ interface { symbol_id: 0xa082ad86 symbol_id: 0x57cb67b6 symbol_id: 0x7068c1fb + symbol_id: 0xa61572f8 + symbol_id: 0xb993d4e0 symbol_id: 0x445e3749 symbol_id: 0x3f14ea30 symbol_id: 0x64e397a9 + symbol_id: 0x6786b230 + symbol_id: 0xf5d1380a symbol_id: 0x58e7556b symbol_id: 0x2ecf85e9 symbol_id: 0x34a01a22 @@ -419706,6 +428600,8 @@ interface { symbol_id: 0xf376df6b symbol_id: 0xa578d54c symbol_id: 0x6f27c15e + symbol_id: 0x44f0236d + symbol_id: 0x9a86e4aa symbol_id: 0x710466ae symbol_id: 0x592647e4 symbol_id: 0x1e6f518c @@ -419717,6 +428613,8 @@ interface { symbol_id: 0x9c4fb9ab symbol_id: 0x48f0cf25 symbol_id: 0x40d428a7 + symbol_id: 0x3d1d57b0 + symbol_id: 0xa00355c9 symbol_id: 0xe334c57d symbol_id: 0xfeff2e7f symbol_id: 0xeac5f4dd @@ -419728,7 +428626,9 @@ interface { symbol_id: 0x39155e73 symbol_id: 0x3947ecb4 symbol_id: 0xaa213206 + symbol_id: 0xd184256d symbol_id: 0x14ef37c5 + symbol_id: 0xf5011322 symbol_id: 0x090c808f symbol_id: 0xd3c07c3e symbol_id: 0x861a22ce @@ -419754,6 +428654,7 @@ interface { symbol_id: 0xc2a5e712 symbol_id: 0x0266a7bc symbol_id: 0xd0e4682b + symbol_id: 0x74d43d1f symbol_id: 0x08824ed3 symbol_id: 0x297c974d symbol_id: 0xcbec9d66 @@ -419761,6 +428662,10 @@ interface { symbol_id: 0xd0d675d3 symbol_id: 0xb0bf7fd6 symbol_id: 0xae5e5469 + symbol_id: 0xc71fde47 + symbol_id: 0x62fba41c + symbol_id: 0x3a6c45d6 + symbol_id: 0x6a18c879 symbol_id: 0x18619e65 symbol_id: 0xc4d6f652 symbol_id: 0x6911084f @@ -419827,6 +428732,7 @@ interface { symbol_id: 0xf574f9d9 symbol_id: 0x8fa66546 symbol_id: 0x20097074 + symbol_id: 0x36d71264 symbol_id: 0x8ce8e50d symbol_id: 0x62a42e92 symbol_id: 0xa7ccbbf5 @@ -419843,6 +428749,7 @@ interface { symbol_id: 0x4b7a8fd7 symbol_id: 0xcd36f539 symbol_id: 0x33f0c37d + symbol_id: 0x0b219d2b symbol_id: 0x748c1fd7 symbol_id: 0xcb42202e symbol_id: 0xc9400cec @@ -419871,6 +428778,7 @@ interface { symbol_id: 0xaa8affb8 symbol_id: 0x5029bb46 symbol_id: 0x11f903b1 + symbol_id: 0x95b8edae symbol_id: 0x25e320a3 symbol_id: 0xcd81b300 symbol_id: 0x7a6ec3db @@ -419883,6 +428791,7 @@ interface { symbol_id: 0x395b2a73 symbol_id: 0x4a5c5988 symbol_id: 0xb71e231c + symbol_id: 0xb2a7c054 symbol_id: 0xb05fc507 symbol_id: 0xe0cf8a85 symbol_id: 0x60184478 @@ -419905,6 +428814,8 @@ interface { symbol_id: 0x4fd98142 symbol_id: 0x695c4baf symbol_id: 0x99d57c12 + symbol_id: 0x26d3bcc4 + symbol_id: 0x8efb0ca4 symbol_id: 0x3cb4db49 symbol_id: 0x62726c6f symbol_id: 0x37354e4f @@ -420012,6 +428923,7 @@ interface { symbol_id: 0x3a519484 symbol_id: 0x7ea1f05b symbol_id: 0xd85e5644 + symbol_id: 0x74cce3b2 symbol_id: 0xd7f9868e symbol_id: 0x83f9aaa7 symbol_id: 0x37776872 @@ -420056,6 +428968,8 @@ interface { symbol_id: 0xabc729f7 symbol_id: 0x75b174bb symbol_id: 0x0211d69f + symbol_id: 0xf458bc84 + symbol_id: 0x002cab5a symbol_id: 0x0d3c7607 symbol_id: 0xbf8faf2f symbol_id: 0xacf4923f @@ -420071,6 +428985,7 @@ interface { symbol_id: 0xca10f06e symbol_id: 0xbbfbc9db symbol_id: 0x36fc8313 + symbol_id: 0xaf598d05 symbol_id: 0x0340e826 symbol_id: 0x948bb626 symbol_id: 0xd7bdd001 @@ -420097,6 +429012,8 @@ interface { symbol_id: 0x869fd955 symbol_id: 0xaab0786f symbol_id: 0x5e32ebbd + symbol_id: 0x749563a6 + symbol_id: 0x694ad7a6 symbol_id: 0x1ddb60ad symbol_id: 0x0ae2ee16 symbol_id: 0x30442e2e @@ -420105,6 +429022,7 @@ interface { symbol_id: 0x325e746a symbol_id: 0x4db9ff7c symbol_id: 0x9fe99d05 + symbol_id: 0xa628b8f1 symbol_id: 0xb75a1654 symbol_id: 0xff7bbbff symbol_id: 0x82ce823f @@ -420113,6 +429031,8 @@ interface { symbol_id: 0xe8f0d031 symbol_id: 0xe2d7542c symbol_id: 0x15374b6d + symbol_id: 0x0ec5d99e + symbol_id: 0xfe5b8eb1 symbol_id: 0x8405c9a1 symbol_id: 0x988719fa symbol_id: 0x732a182b @@ -420123,15 +429043,23 @@ interface { symbol_id: 0x0d418d38 symbol_id: 0x2121385f symbol_id: 0x9ad783c1 + symbol_id: 0x34b6590b symbol_id: 0x26d15e93 + symbol_id: 0xbf5d713c symbol_id: 0x50a83025 + symbol_id: 0x0c03d499 symbol_id: 0x197d6be2 symbol_id: 0xdac9a862 symbol_id: 0xb34d9200 symbol_id: 0xf61927fd symbol_id: 0xa8c30e54 + symbol_id: 0x843cb07b + symbol_id: 0xb548aa95 + symbol_id: 0xbb05ffe8 + symbol_id: 0x0a50cb7b symbol_id: 0xa3ede5d5 symbol_id: 0x539bf337 + symbol_id: 0x4f752d52 symbol_id: 0x901d0e89 symbol_id: 0x770fd919 symbol_id: 0x9afee12f @@ -420151,16 +429079,21 @@ interface { symbol_id: 0x50b14cbe symbol_id: 0xef0379f8 symbol_id: 0x08e2cf92 + symbol_id: 0x03704d12 symbol_id: 0x6d73379a symbol_id: 0x0c310ebd symbol_id: 0x9b384a49 symbol_id: 0x828646be symbol_id: 0x46c8630b symbol_id: 0x4756cfec + symbol_id: 0xbc4cf318 + symbol_id: 0x57a8695d + symbol_id: 0xfa173289 symbol_id: 0x209f19bb symbol_id: 0x90e3616c symbol_id: 0xee2c17ff symbol_id: 0xdab6baf5 + symbol_id: 0x4e88b2c2 symbol_id: 0x52cc3d91 symbol_id: 0xba330301 symbol_id: 0xbbfc3b7e @@ -420189,17 +429122,22 @@ interface { symbol_id: 0x00a5fe5e symbol_id: 0xb57cc12f symbol_id: 0x6377ba8b + symbol_id: 0x013b5969 symbol_id: 0xe160b6f0 symbol_id: 0x37c5c41a symbol_id: 0x78341cfd symbol_id: 0xac62c748 symbol_id: 0xa2bd1edf symbol_id: 0xa5b4e5b2 + symbol_id: 0xca4f3601 + symbol_id: 0x420ef2d0 symbol_id: 0xd333a65c symbol_id: 0xddcff44a + symbol_id: 0x0f593caf symbol_id: 0x47bcd15f symbol_id: 0xb6da564f symbol_id: 0x0403b7c6 + symbol_id: 0x3c1c2029 symbol_id: 0x41c8d09b symbol_id: 0xe2ad11db symbol_id: 0x65023f2f @@ -420208,6 +429146,7 @@ interface { symbol_id: 0xecc3ea35 symbol_id: 0x2122908b symbol_id: 0x68d68809 + symbol_id: 0x5890e7da symbol_id: 0x76e879b6 symbol_id: 0xae5bbde9 symbol_id: 0x830fa786 @@ -420215,8 +429154,10 @@ interface { symbol_id: 0xcda04300 symbol_id: 0x508ff939 symbol_id: 0x0d872dfc + symbol_id: 0xc286b1d6 symbol_id: 0xd4b0bfc9 symbol_id: 0x4be59f2f + symbol_id: 0x6c9f1d93 symbol_id: 0xa9eb9293 symbol_id: 0x5363abe5 symbol_id: 0x90dcde6e @@ -420301,14 +429242,20 @@ interface { symbol_id: 0xff2bccb8 symbol_id: 0x5d163d02 symbol_id: 0x5294a07c + symbol_id: 0x3fb97a6a + symbol_id: 0x6ccc064e + symbol_id: 0x1f07c260 symbol_id: 0xb6de2d88 symbol_id: 0xd7ceb15f symbol_id: 0x923147c1 symbol_id: 0x5cfdecb8 + symbol_id: 0x0d23f467 + symbol_id: 0x392adba0 symbol_id: 0x6ed615c4 symbol_id: 0xd860c719 symbol_id: 0x5b6bc3a9 symbol_id: 0x88acddf0 + symbol_id: 0x9e76c2c4 symbol_id: 0x288e392e symbol_id: 0x823654f5 symbol_id: 0x42ad45a3 @@ -420317,9 +429264,12 @@ interface { symbol_id: 0xc62d5cd5 symbol_id: 0x8712dd01 symbol_id: 0xbd6dfce1 + symbol_id: 0x1f2d6f1e + symbol_id: 0x87db1583 symbol_id: 0x3e70324d symbol_id: 0xc8a7ac69 symbol_id: 0x5ef059ce + symbol_id: 0xef1341da symbol_id: 0x4aa5e229 symbol_id: 0xa5ebe436 symbol_id: 0x9ff9eb7b @@ -420330,9 +429280,13 @@ interface { symbol_id: 0x227ce62c symbol_id: 0xb11763a0 symbol_id: 0x02bb68bd + symbol_id: 0xdeb3106a + symbol_id: 0xd5f8f162 symbol_id: 0x052557d7 symbol_id: 0x6fb8113a symbol_id: 0xab09fdb7 + symbol_id: 0x8be19b5e + symbol_id: 0xcf9b99d4 symbol_id: 0x39e68fed symbol_id: 0xefb9e5a3 symbol_id: 0x3fe0157c @@ -420340,6 +429294,8 @@ interface { symbol_id: 0x4e038641 symbol_id: 0xcc46e666 symbol_id: 0xffc36f60 + symbol_id: 0x27e885eb + symbol_id: 0xc759ed80 symbol_id: 0xb9e83388 symbol_id: 0x3165f55a symbol_id: 0x50788372 @@ -420351,6 +429307,8 @@ interface { symbol_id: 0x1a59144d symbol_id: 0x4ef2c337 symbol_id: 0xafd4e4b1 + symbol_id: 0xba33290e + symbol_id: 0xd292bd77 symbol_id: 0xfcee39f3 symbol_id: 0x69721329 symbol_id: 0x0896a337 @@ -420362,7 +429320,9 @@ interface { symbol_id: 0x49b955bd symbol_id: 0xfe6b6962 symbol_id: 0xf09ef4d0 + symbol_id: 0xb66d855b symbol_id: 0x84f2b553 + symbol_id: 0x56950e3c symbol_id: 0x9d8ca961 symbol_id: 0xea8e457c symbol_id: 0xd14c5620 @@ -420388,6 +429348,7 @@ interface { symbol_id: 0x56b11d7c symbol_id: 0x7d0336a2 symbol_id: 0x990b2371 + symbol_id: 0x51dcf351 symbol_id: 0xe100c3ad symbol_id: 0x6440d1d7 symbol_id: 0x55476a7c @@ -420395,6 +429356,10 @@ interface { symbol_id: 0x4196f765 symbol_id: 0x42dbeb24 symbol_id: 0xa13f65ff + symbol_id: 0xcd2463fd + symbol_id: 0xf6c6715e + symbol_id: 0x6cb1a35c + symbol_id: 0xd0cbbcf3 symbol_id: 0x85ad7f9f symbol_id: 0x93f06708 symbol_id: 0xf57e8f65 @@ -420461,6 +429426,7 @@ interface { symbol_id: 0xf586b3bb symbol_id: 0x97e630b0 symbol_id: 0xa70e8cd2 + symbol_id: 0x6069ba16 symbol_id: 0xf68d6127 symbol_id: 0x9a65f074 symbol_id: 0x158cc323 @@ -420564,6 +429530,7 @@ interface { symbol_id: 0xeaaac8d4 symbol_id: 0x69bac57e symbol_id: 0xa5eaf571 + symbol_id: 0x132bfd7d symbol_id: 0x97b98e85 symbol_id: 0x7c570dc6 symbol_id: 0x993e379e @@ -420575,6 +429542,7 @@ interface { symbol_id: 0xf09e1ca4 symbol_id: 0xcef4ad72 symbol_id: 0x7951d828 + symbol_id: 0xa5dcf915 symbol_id: 0xf2768ed7 symbol_id: 0xfbeae533 symbol_id: 0x52066ae4 @@ -420605,6 +429573,7 @@ interface { symbol_id: 0xc453a761 symbol_id: 0xf86dd29a symbol_id: 0xc8c5af1c + symbol_id: 0x962c959a symbol_id: 0xdeecf7a4 symbol_id: 0xeba70df6 symbol_id: 0x9cff6ebf @@ -420619,6 +429588,9 @@ interface { symbol_id: 0x8480d9c1 symbol_id: 0xb7d7d836 symbol_id: 0xacb3d1d3 + symbol_id: 0xdc66fe63 + symbol_id: 0x5653e7da + symbol_id: 0xffaebc56 symbol_id: 0xd8dbec6e symbol_id: 0x95eaf556 symbol_id: 0xf2d017ff @@ -420697,6 +429669,7 @@ interface { symbol_id: 0xb5b2d835 symbol_id: 0x226328f4 symbol_id: 0x1516f6b7 + symbol_id: 0x650319ec symbol_id: 0x4ffac461 symbol_id: 0xad8bab96 symbol_id: 0x528ef002 @@ -420976,6 +429949,8 @@ interface { symbol_id: 0x76052ea8 symbol_id: 0x754e3185 symbol_id: 0x72598679 + symbol_id: 0xaf658aaf + symbol_id: 0xc5b7a263 symbol_id: 0xd2c17be4 symbol_id: 0x4dc800c1 symbol_id: 0xc5d5f65e @@ -421002,6 +429977,7 @@ interface { symbol_id: 0xa7901a1d symbol_id: 0x2b1e3d59 symbol_id: 0x495f0223 + symbol_id: 0x7c95444b symbol_id: 0x7fbd0d58 symbol_id: 0x06f2ea68 symbol_id: 0xc8e117f2 @@ -421061,6 +430037,7 @@ interface { symbol_id: 0xca337eb1 symbol_id: 0x9e7d8d76 symbol_id: 0xfda11a25 + symbol_id: 0x467808dd symbol_id: 0x610edc84 symbol_id: 0xa8fe8eb9 symbol_id: 0xd71898b4 @@ -421069,6 +430046,7 @@ interface { symbol_id: 0x9f1f7cee symbol_id: 0x5e964278 symbol_id: 0xc35ecc84 + symbol_id: 0xe4109521 symbol_id: 0xd89255c2 symbol_id: 0x962b6a68 symbol_id: 0xb8669175 @@ -421077,6 +430055,7 @@ interface { symbol_id: 0x33bbeca6 symbol_id: 0x4e0ae383 symbol_id: 0xfbce2cbb + symbol_id: 0xdf9606b3 symbol_id: 0xd6ea4255 symbol_id: 0xa3ab8c31 symbol_id: 0x8daa61e5 @@ -421092,6 +430071,11 @@ interface { symbol_id: 0x85c5ebd6 symbol_id: 0xf95c9d54 symbol_id: 0x7d541a30 + symbol_id: 0x84e3d2de + symbol_id: 0x0b134421 + symbol_id: 0x659b0e63 + symbol_id: 0x86c85b12 + symbol_id: 0x930f8d3c symbol_id: 0x28f60fc9 symbol_id: 0xd72ba404 symbol_id: 0x62250f4d @@ -421148,6 +430132,7 @@ interface { symbol_id: 0xec1b66f9 symbol_id: 0xac913841 symbol_id: 0x42676517 + symbol_id: 0x44303242 symbol_id: 0xab0e3dee symbol_id: 0xd5cc5ce2 symbol_id: 0xcd2564d1 @@ -421205,6 +430190,7 @@ interface { symbol_id: 0xf18d5670 symbol_id: 0xa79ba8cc symbol_id: 0x23b67585 + symbol_id: 0x82f7c84f symbol_id: 0x1e81ded9 symbol_id: 0x414b50db symbol_id: 0xfca661a6 @@ -421234,6 +430220,7 @@ interface { symbol_id: 0x883df740 symbol_id: 0xeb9b8f1f symbol_id: 0x4d669c6d + symbol_id: 0x98477208 symbol_id: 0x6715c595 symbol_id: 0xc4f46672 symbol_id: 0x9f75c77b @@ -421274,6 +430261,7 @@ interface { symbol_id: 0x5489a975 symbol_id: 0xd8f17b20 symbol_id: 0xf94e1278 + symbol_id: 0xf1e399f5 symbol_id: 0x02f83230 symbol_id: 0xd6386fd8 symbol_id: 0x36a5b3df @@ -421589,6 +430577,7 @@ interface { symbol_id: 0x753fb351 symbol_id: 0x40c3a63b symbol_id: 0xe896baa8 + symbol_id: 0x3c5570b9 symbol_id: 0xa29138c1 symbol_id: 0x35d98638 symbol_id: 0xb5428827 @@ -421622,6 +430611,7 @@ interface { symbol_id: 0x91f58d29 symbol_id: 0x7abe395b symbol_id: 0xa8b058e5 + symbol_id: 0xe504a070 symbol_id: 0x47264dbb symbol_id: 0x35094803 symbol_id: 0x5bc8c0f2 @@ -421755,6 +430745,7 @@ interface { symbol_id: 0x279bd3a7 symbol_id: 0x0e847130 symbol_id: 0xd13969dd + symbol_id: 0x7ab07b7f symbol_id: 0xe2ee283f symbol_id: 0xf5808a3e symbol_id: 0x2762abc3 @@ -422299,6 +431290,10 @@ interface { symbol_id: 0x83a57856 symbol_id: 0xb8f84f03 symbol_id: 0xad1fada2 + symbol_id: 0x67c8f92b + symbol_id: 0xc2c5f476 + symbol_id: 0xf73ea9f7 + symbol_id: 0xdc9144c7 symbol_id: 0x7993ff4e symbol_id: 0xd8f127ed symbol_id: 0x9a93a123 @@ -422323,6 +431318,7 @@ interface { symbol_id: 0xded28924 symbol_id: 0xcb93fb69 symbol_id: 0xe3421d56 + symbol_id: 0x652fbf96 symbol_id: 0xe5d449a3 symbol_id: 0xda364c85 symbol_id: 0x68e0756b @@ -422469,6 +431465,7 @@ interface { symbol_id: 0x40cf5b57 symbol_id: 0xdc38ff2a symbol_id: 0x557a4fc7 + symbol_id: 0x599321e2 symbol_id: 0xf882020f symbol_id: 0x2e62a121 symbol_id: 0x24954a6b @@ -422563,6 +431560,7 @@ interface { symbol_id: 0x28929e3b symbol_id: 0x17542476 symbol_id: 0xabbe28f4 + symbol_id: 0x613adcb1 symbol_id: 0x370e6f08 symbol_id: 0x16ccff22 symbol_id: 0x5df140db @@ -422638,6 +431636,7 @@ interface { symbol_id: 0x238e8343 symbol_id: 0x600f1fb4 symbol_id: 0xf85d118d + symbol_id: 0x95a840b8 symbol_id: 0x7f639ef1 symbol_id: 0x6bd69c06 symbol_id: 0x4c4073c3 @@ -422700,6 +431699,7 @@ interface { symbol_id: 0xd9d90ad6 symbol_id: 0xaf0c4e38 symbol_id: 0x08e235b1 + symbol_id: 0x7edda409 symbol_id: 0x00d00ad1 symbol_id: 0x4579b2cf symbol_id: 0xdb82735d @@ -422762,6 +431762,7 @@ interface { symbol_id: 0x64b49555 symbol_id: 0xbfc46f3e symbol_id: 0x53579c80 + symbol_id: 0xd915e343 symbol_id: 0x2b91f916 symbol_id: 0x2defacf0 symbol_id: 0x1808c84e @@ -422791,6 +431792,7 @@ interface { symbol_id: 0xad2ad56b symbol_id: 0xfc326378 symbol_id: 0x652eb3f5 + symbol_id: 0x94ca6698 symbol_id: 0x80497778 symbol_id: 0xaca51db1 symbol_id: 0x226f81df @@ -423065,6 +432067,7 @@ interface { symbol_id: 0xe0c6693f symbol_id: 0x4bda4ccf symbol_id: 0x350d9a11 + symbol_id: 0xbf4818d4 symbol_id: 0xb1548c88 symbol_id: 0x5ed0ce65 symbol_id: 0xfc17cb5d @@ -423165,6 +432168,7 @@ interface { symbol_id: 0xfe94820e symbol_id: 0xe7fc8dce symbol_id: 0x22167fe7 + symbol_id: 0x312d0c48 symbol_id: 0xae43d3d4 symbol_id: 0x431bb67c symbol_id: 0x38472bf4 @@ -423258,6 +432262,8 @@ interface { symbol_id: 0xd70b3ff0 symbol_id: 0x1f294d29 symbol_id: 0xc610fcd6 + symbol_id: 0x5ba96acf + symbol_id: 0xd15ab841 symbol_id: 0x915bc321 symbol_id: 0xbf9d3356 symbol_id: 0xd8989bc0 @@ -423326,6 +432332,7 @@ interface { symbol_id: 0xd1f69ecb symbol_id: 0xdbb90310 symbol_id: 0x3d2a104d + symbol_id: 0xa4421766 symbol_id: 0x9ba08730 symbol_id: 0x65d49acf symbol_id: 0x064a6e13 @@ -423355,6 +432362,7 @@ interface { symbol_id: 0x81dadb36 symbol_id: 0x9bfc3a5e symbol_id: 0xc750a072 + symbol_id: 0x132eb5f1 symbol_id: 0xbccf7511 symbol_id: 0xc29558ef symbol_id: 0x3b31be3d @@ -423422,6 +432430,7 @@ interface { symbol_id: 0xa5a4fafa symbol_id: 0xc37ba22c symbol_id: 0xbce770e6 + symbol_id: 0x7d2abcd7 symbol_id: 0xc5292cdd symbol_id: 0xdaa011df symbol_id: 0xeecf2614 @@ -423517,11 +432526,34 @@ interface { symbol_id: 0xbe2a589c symbol_id: 0xf03cc7d6 symbol_id: 0xeb1e647c + symbol_id: 0x6b9f4e08 + symbol_id: 0xddf84463 + symbol_id: 0xbc821700 symbol_id: 0x4026efa6 + symbol_id: 0x4f6edfe0 + symbol_id: 0x7c041f90 + symbol_id: 0x47e5f38a + symbol_id: 0xa41c284f + symbol_id: 0x310d0e78 + symbol_id: 0x9ab59e22 symbol_id: 0xc1b901e4 + symbol_id: 0x32b14b11 + symbol_id: 0xe23e4c93 symbol_id: 0xf2e6f907 + symbol_id: 0x099b336e + symbol_id: 0x938ddfe7 symbol_id: 0xb1bdece7 + symbol_id: 0x8b34fd8e + symbol_id: 0x363a15f6 + symbol_id: 0x81c0a916 + symbol_id: 0x7492950b symbol_id: 0x6c9fdcbe + symbol_id: 0xeecc1015 + symbol_id: 0x5b338158 + symbol_id: 0x75a218bd + symbol_id: 0x3a33dc62 + symbol_id: 0x7e797d51 + symbol_id: 0x09144475 symbol_id: 0x3160ee82 symbol_id: 0xbc9cd951 symbol_id: 0x15a3f41a @@ -423586,6 +432618,7 @@ interface { symbol_id: 0x3c2ed3a0 symbol_id: 0x7d6628ba symbol_id: 0x493ce9fc + symbol_id: 0xb78a4a87 symbol_id: 0xc84a133c symbol_id: 0x7bd17841 symbol_id: 0xf4530070 @@ -423638,9 +432671,11 @@ interface { symbol_id: 0x46caa64b symbol_id: 0x562d3f6f symbol_id: 0x57c27f6f + symbol_id: 0x17f4ad44 symbol_id: 0x9eddc572 symbol_id: 0xa54f3ef4 symbol_id: 0xe245d69b + symbol_id: 0x91a02e30 symbol_id: 0x84271f20 symbol_id: 0x9217871e symbol_id: 0xf60a5d60 @@ -423650,6 +432685,7 @@ interface { symbol_id: 0x3e285e2f symbol_id: 0xf5924d9f symbol_id: 0xda5dc517 + symbol_id: 0x30d7ee78 symbol_id: 0x84278a73 symbol_id: 0xf5327fe3 symbol_id: 0x92649662 @@ -423662,11 +432698,14 @@ interface { symbol_id: 0xa848deda symbol_id: 0x8eadb5fd symbol_id: 0x140f40dd + symbol_id: 0xa9fabdf2 symbol_id: 0x6da682ae symbol_id: 0x7f797603 symbol_id: 0x01e78001 symbol_id: 0x746374fa + symbol_id: 0x4fb91c54 symbol_id: 0x73553ac1 + symbol_id: 0x79d24533 symbol_id: 0xbf158d63 symbol_id: 0xaa97e158 symbol_id: 0x0b518e04 @@ -423695,6 +432734,7 @@ interface { symbol_id: 0x7ad45055 symbol_id: 0x67a278cb symbol_id: 0xd1412061 + symbol_id: 0x3e836f55 symbol_id: 0x4742ac18 symbol_id: 0x343d8d9d symbol_id: 0xabdeef21 @@ -423706,6 +432746,9 @@ interface { symbol_id: 0x1c9ded63 symbol_id: 0x89c6398f symbol_id: 0xbad16ab3 + symbol_id: 0x399512e2 + symbol_id: 0x69f7fc4b + symbol_id: 0x1579ecd2 symbol_id: 0xe4572a81 symbol_id: 0x07b15271 symbol_id: 0xe2d4d055 @@ -423994,6 +433037,7 @@ interface { symbol_id: 0x7f382772 symbol_id: 0x7a1b8063 symbol_id: 0x4636cb2f + symbol_id: 0x6d4a8012 symbol_id: 0xa2a80692 symbol_id: 0x306598a8 symbol_id: 0xccbb9f00 @@ -424330,6 +433374,7 @@ interface { symbol_id: 0x5cb257e7 symbol_id: 0x51dd09eb symbol_id: 0x243b376d + symbol_id: 0x152f2dc3 symbol_id: 0x793668af symbol_id: 0x1e384c7a symbol_id: 0x693c5568 @@ -424341,6 +433386,7 @@ interface { symbol_id: 0x018498a2 symbol_id: 0x1e700c22 symbol_id: 0xba681a1a + symbol_id: 0x46cb13fb symbol_id: 0x5fa10488 symbol_id: 0xf7731514 symbol_id: 0x9db95d0c @@ -424432,6 +433478,7 @@ interface { symbol_id: 0x2c092465 symbol_id: 0x161b2b54 symbol_id: 0x707a35cb + symbol_id: 0x04ada2db symbol_id: 0x60e18dd0 symbol_id: 0x1391d24c symbol_id: 0x5170316a @@ -424464,6 +433511,7 @@ interface { symbol_id: 0xf4679485 symbol_id: 0xd6e8532d symbol_id: 0x9df74c73 + symbol_id: 0xca368768 symbol_id: 0x740c134e symbol_id: 0xacd66e9e symbol_id: 0xf8bcc2db @@ -424479,11 +433527,13 @@ interface { symbol_id: 0x470ca027 symbol_id: 0x54a103db symbol_id: 0x173c6399 + symbol_id: 0x90c471fd symbol_id: 0xecd5c994 symbol_id: 0xf439020c symbol_id: 0xd1503081 symbol_id: 0x689f5b8d symbol_id: 0x287a4dba + symbol_id: 0xb2ceea74 symbol_id: 0xa425fc80 symbol_id: 0xba770aa5 symbol_id: 0x7c38f5dc @@ -424494,10 +433544,12 @@ interface { symbol_id: 0xe59b51ac symbol_id: 0x82feb89e symbol_id: 0x417866a8 + symbol_id: 0x62c010b9 symbol_id: 0x013abbf5 symbol_id: 0x9542ffda symbol_id: 0xb1ded749 symbol_id: 0xf131e6d4 + symbol_id: 0x948eca5b symbol_id: 0x50cfaca0 symbol_id: 0xf5634793 symbol_id: 0xac156dd0 @@ -424634,6 +433686,7 @@ interface { symbol_id: 0xfd020b9f symbol_id: 0x7c9e1a26 symbol_id: 0x499b7b9e + symbol_id: 0x1c3e9f6b symbol_id: 0x712f800b symbol_id: 0x37c95360 symbol_id: 0x7a8a2031 @@ -424670,8 +433723,10 @@ interface { symbol_id: 0x8becb370 symbol_id: 0x42a88d96 symbol_id: 0xb36e22d3 + symbol_id: 0xa07a6e08 symbol_id: 0x8cf796f6 symbol_id: 0x683db5bf + symbol_id: 0x496c5195 symbol_id: 0x177fa0e0 symbol_id: 0xd38a2f2a symbol_id: 0x11d4227b @@ -424689,6 +433744,7 @@ interface { symbol_id: 0x8dafa617 symbol_id: 0x6d6f722d symbol_id: 0x5ae13553 + symbol_id: 0xcd51319b symbol_id: 0x53ee2234 symbol_id: 0x9a5fd229 symbol_id: 0x97ae9712 @@ -424740,7 +433796,12 @@ interface { symbol_id: 0x829cc511 symbol_id: 0xd8d641e9 symbol_id: 0xf1e11c16 + symbol_id: 0x2f505fb1 + symbol_id: 0x44afa897 + symbol_id: 0x449f96cf symbol_id: 0xdbf9c67a + symbol_id: 0x5a1e8208 + symbol_id: 0xc67413f4 symbol_id: 0x5b007949 symbol_id: 0x854212b1 symbol_id: 0xd12105c9 @@ -424768,6 +433829,7 @@ interface { symbol_id: 0x0238e2a9 symbol_id: 0x7c26f0bc symbol_id: 0xb7ff4d92 + symbol_id: 0x60b782b4 symbol_id: 0x38aaa220 symbol_id: 0xb34d0634 symbol_id: 0xeab63d27 @@ -424842,6 +433904,7 @@ interface { symbol_id: 0xf2357f9f symbol_id: 0xc16e78d8 symbol_id: 0xabbc8603 + symbol_id: 0x1e484088 symbol_id: 0x4cf1070c symbol_id: 0x9e48588d symbol_id: 0x3945d02a @@ -424850,6 +433913,7 @@ interface { symbol_id: 0x7511baca symbol_id: 0x29553efc symbol_id: 0x0fbaa7b3 + symbol_id: 0x90e2334a symbol_id: 0xfd198070 symbol_id: 0x4a781b7f symbol_id: 0xc92def38 @@ -424857,6 +433921,7 @@ interface { symbol_id: 0x0118b55f symbol_id: 0x4e97a73b symbol_id: 0x62f86638 + symbol_id: 0x22a5b64b symbol_id: 0x117f1097 symbol_id: 0x8570255f symbol_id: 0x438146c4 @@ -424864,6 +433929,7 @@ interface { symbol_id: 0xd8377ddc symbol_id: 0xfbb2197e symbol_id: 0xb4fdfb1e + symbol_id: 0x6833e084 symbol_id: 0x04d5663a symbol_id: 0x5cf2f6f8 symbol_id: 0xa66866da @@ -424881,6 +433947,7 @@ interface { symbol_id: 0x1764380c symbol_id: 0xfb766d3e symbol_id: 0xc20a2c2c + symbol_id: 0x8af977a8 symbol_id: 0x0b03a904 symbol_id: 0x2bce772d symbol_id: 0x705777ef @@ -424953,6 +434020,7 @@ interface { symbol_id: 0x6af2dc93 symbol_id: 0x56f4af9c symbol_id: 0x42dfffbc + symbol_id: 0x93ee7a0f symbol_id: 0xbd83c333 symbol_id: 0x7d858174 symbol_id: 0x0e66eaf7 @@ -424993,6 +434061,7 @@ interface { symbol_id: 0x5ca3653a symbol_id: 0x5400f960 symbol_id: 0x4173a10e + symbol_id: 0xe2bb51c7 symbol_id: 0x5e9d56ee symbol_id: 0x999465c1 symbol_id: 0x74844b2a @@ -425033,6 +434102,7 @@ interface { symbol_id: 0xe74ce327 symbol_id: 0x35e3ce18 symbol_id: 0xb2a4fdfa + symbol_id: 0x570df167 symbol_id: 0x84f045c2 symbol_id: 0x75781cce symbol_id: 0xd3eab591 @@ -425118,6 +434188,7 @@ interface { symbol_id: 0xc4c7fcde symbol_id: 0x20d4dbb9 symbol_id: 0x6febaf59 + symbol_id: 0xe34ae949 symbol_id: 0x5ab300fb symbol_id: 0x33d40ef0 symbol_id: 0xeb6692c0 @@ -425133,9 +434204,11 @@ interface { symbol_id: 0xa6fc085f symbol_id: 0x4e595f64 symbol_id: 0xd94e8fae + symbol_id: 0x5fc5a856 symbol_id: 0xd2399e18 symbol_id: 0x92732196 symbol_id: 0xa6c906b5 + symbol_id: 0x77dba918 symbol_id: 0x5cc4535c symbol_id: 0x7d2c4acc symbol_id: 0xe58b64d6 @@ -425210,15 +434283,20 @@ interface { symbol_id: 0x3c71822d symbol_id: 0x6e10178a symbol_id: 0x5d6a93ff + symbol_id: 0x98b882af symbol_id: 0x2bb7ad6a symbol_id: 0x4bb58367 symbol_id: 0x63762e51 symbol_id: 0x3e462ca5 + symbol_id: 0x358696a1 symbol_id: 0x970aca32 symbol_id: 0x7e56f1cb symbol_id: 0xb28c2541 symbol_id: 0xf8889a4c + symbol_id: 0x315ab1ad + symbol_id: 0x974467ca symbol_id: 0x89ed643c + symbol_id: 0xb00e1c68 symbol_id: 0x620f0859 symbol_id: 0x4e412a59 symbol_id: 0xaf2bd97c @@ -425405,6 +434483,7 @@ interface { symbol_id: 0x50b069f6 symbol_id: 0x62b259b4 symbol_id: 0xa511d0ea + symbol_id: 0xd2c5f178 symbol_id: 0x476ce3a0 symbol_id: 0x83c5422c symbol_id: 0xff4bd5dc @@ -425460,6 +434539,7 @@ interface { symbol_id: 0x837a4a5d symbol_id: 0x10040745 symbol_id: 0x26db3306 + symbol_id: 0x50044b1f symbol_id: 0xcb6ed759 symbol_id: 0x62017cf8 symbol_id: 0x4fc4b51e @@ -425477,6 +434557,7 @@ interface { symbol_id: 0x28487b4a symbol_id: 0x1f5649eb symbol_id: 0x31ef5894 + symbol_id: 0xf19e02b6 symbol_id: 0x0af8ff72 symbol_id: 0xe3ec4d34 symbol_id: 0xf23ecd34 @@ -425497,6 +434578,7 @@ interface { symbol_id: 0x6cdfaabc symbol_id: 0x92cb0839 symbol_id: 0x3662091d + symbol_id: 0xd4ef4fce symbol_id: 0x5bb4794d symbol_id: 0xf31fbaa5 symbol_id: 0x8ba98f3d @@ -425610,6 +434692,7 @@ interface { symbol_id: 0x2673800e symbol_id: 0x04af389d symbol_id: 0x685b01fa + symbol_id: 0x3326710b symbol_id: 0x93803c84 symbol_id: 0x7c7f5167 symbol_id: 0xe5cef1d3 @@ -425682,6 +434765,7 @@ interface { symbol_id: 0xe86ce747 symbol_id: 0x85476106 symbol_id: 0x1780168b + symbol_id: 0x743e9912 symbol_id: 0x13b529c0 symbol_id: 0x55b4474a symbol_id: 0xe2eab328 @@ -425780,6 +434864,7 @@ interface { symbol_id: 0x5577d5a8 symbol_id: 0x0e1b0b82 symbol_id: 0xfb52ace2 + symbol_id: 0x4072acf3 symbol_id: 0xdf289104 symbol_id: 0x44e002a2 symbol_id: 0x2906b2b1 @@ -425969,6 +435054,10 @@ interface { symbol_id: 0xf7dfdad1 symbol_id: 0x47d78ddb symbol_id: 0x961122f4 + symbol_id: 0xa7da1ac2 + symbol_id: 0xe2481840 + symbol_id: 0x9fa2aa18 + symbol_id: 0x49737cd5 symbol_id: 0x86b2ecdf symbol_id: 0x00fb9c6d symbol_id: 0x0e209244 @@ -426294,6 +435383,7 @@ interface { symbol_id: 0x7da4e281 symbol_id: 0x811fc2f9 symbol_id: 0xaff7b9fa + symbol_id: 0x406267f4 symbol_id: 0x73c499cf symbol_id: 0x1e897b44 symbol_id: 0xdc4939d2 @@ -426433,10 +435523,12 @@ interface { symbol_id: 0x58937c87 symbol_id: 0xe3f9d54d symbol_id: 0xd80a0cec + symbol_id: 0x80c1324b symbol_id: 0xb61e8892 symbol_id: 0xd5bd73b9 symbol_id: 0x951bfee9 symbol_id: 0x55fbd705 + symbol_id: 0x9de82d32 symbol_id: 0x09c05733 symbol_id: 0xf104e451 symbol_id: 0x282288bb @@ -426465,6 +435557,7 @@ interface { symbol_id: 0x6fe64b22 symbol_id: 0x5d6fb7c5 symbol_id: 0x4eea2829 + symbol_id: 0x67c518ec symbol_id: 0x0741c87d symbol_id: 0x3bf4fac5 symbol_id: 0xcac8f190 @@ -426497,6 +435590,7 @@ interface { symbol_id: 0x218d39b6 symbol_id: 0xd71b366d symbol_id: 0xe2254576 + symbol_id: 0xcab5ad52 symbol_id: 0xd811c59d symbol_id: 0xd669e74b symbol_id: 0xc474068f @@ -426514,6 +435608,9 @@ interface { symbol_id: 0x5f83fb51 symbol_id: 0x06acb36e symbol_id: 0xc62e4949 + symbol_id: 0xacd6c6a5 + symbol_id: 0xcc09aff4 + symbol_id: 0xc9069849 symbol_id: 0x426bca09 symbol_id: 0xabdb2ade symbol_id: 0xdc3fca57 @@ -426546,6 +435643,7 @@ interface { symbol_id: 0x5e36dba6 symbol_id: 0x74ac302d symbol_id: 0xbca2a56b + symbol_id: 0x75d8eadc symbol_id: 0x31a465c5 symbol_id: 0x101dc375 symbol_id: 0xc60ea189 @@ -426572,6 +435670,7 @@ interface { symbol_id: 0xd34d4e91 symbol_id: 0x2e26a86b symbol_id: 0x143e338b + symbol_id: 0x2877aa0d symbol_id: 0x1aa035d8 symbol_id: 0xaf1caca5 symbol_id: 0xb4198f5a @@ -426614,6 +435713,16 @@ interface { symbol_id: 0x7733b651 symbol_id: 0x8e6a3c4a symbol_id: 0x3635e264 + symbol_id: 0xbb77b87a + symbol_id: 0x82c6b209 + symbol_id: 0x1d78865e + symbol_id: 0x324368a6 + symbol_id: 0xb1cbbab7 + symbol_id: 0x16dd1a3c + symbol_id: 0x53b35719 + symbol_id: 0x48b1410d + symbol_id: 0xccb0b2fb + symbol_id: 0x1c01a8c0 symbol_id: 0xc2eed4fe symbol_id: 0x7fb65c50 symbol_id: 0x61c086ce @@ -426798,6 +435907,7 @@ interface { symbol_id: 0x2570ceae symbol_id: 0xacc76406 symbol_id: 0xef2c49d1 + symbol_id: 0xbbf42090 symbol_id: 0xca7f93d5 symbol_id: 0x3c915fdb symbol_id: 0x8ffd0533 @@ -426810,6 +435920,24 @@ interface { symbol_id: 0xe4441605 symbol_id: 0x7d46f112 symbol_id: 0x67a74b01 + symbol_id: 0x88564e4d + symbol_id: 0x2a499fb6 + symbol_id: 0x2f1d8bbe + symbol_id: 0x596906ec + symbol_id: 0x955848c3 + symbol_id: 0xee07b7fa + symbol_id: 0x1a3d203d + symbol_id: 0x56fce5ba + symbol_id: 0xd04f99b1 + symbol_id: 0xeafb7c63 + symbol_id: 0xb44552a3 + symbol_id: 0x0ce2fc25 + symbol_id: 0x4c8205e5 + symbol_id: 0x3c8cb54f + symbol_id: 0xe8a36814 + symbol_id: 0x2154fc6f + symbol_id: 0xf5735630 + symbol_id: 0xdf41f771 symbol_id: 0x61b986b8 symbol_id: 0xd0fa04e7 symbol_id: 0x5c9f3e0e @@ -426910,8 +436038,11 @@ interface { symbol_id: 0x6b55b9d2 symbol_id: 0xeb912db7 symbol_id: 0x64876ecd + symbol_id: 0x994cfb6c + symbol_id: 0x45b1aaf3 symbol_id: 0xafbe49ee symbol_id: 0xfbeefa30 + symbol_id: 0x2e259f09 symbol_id: 0xc6fdfac7 symbol_id: 0xc46f1f1f symbol_id: 0xf30af7b3 @@ -426919,9 +436050,16 @@ interface { symbol_id: 0x71f2808e symbol_id: 0x246bf5fe symbol_id: 0x20c5a0da + symbol_id: 0x5459398e symbol_id: 0x4603c1d4 symbol_id: 0xcde37345 symbol_id: 0x1254acc7 + symbol_id: 0xe5204f2a + symbol_id: 0xe8738bea + symbol_id: 0xb312c6b6 + symbol_id: 0x4438c268 + symbol_id: 0xf2371f33 + symbol_id: 0xa7fc3cb3 symbol_id: 0x0e10ac76 symbol_id: 0xb834cd77 symbol_id: 0x23b2a72a @@ -426961,8 +436099,17 @@ interface { symbol_id: 0xc6638ed0 symbol_id: 0x3f0451e3 symbol_id: 0xc0f3c22d + symbol_id: 0x13df4c50 symbol_id: 0x7e421214 symbol_id: 0x867032c4 symbol_id: 0xefe9dc42 symbol_id: 0x5303ad4a + symbol_id: 0x9c1e0c55 + symbol_id: 0x4ba0be41 + symbol_id: 0xb2b54222 + symbol_id: 0xb8699f23 + symbol_id: 0x3542c796 + symbol_id: 0xae02eaa9 + symbol_id: 0x0d8da27c + symbol_id: 0x19c14ad0 } diff --git a/android/abi_gki_aarch64_amlogic b/android/abi_gki_aarch64_amlogic index 43d7f5ded1460..c7acd65602060 100644 --- a/android/abi_gki_aarch64_amlogic +++ b/android/abi_gki_aarch64_amlogic @@ -357,6 +357,7 @@ __devm_add_action devm_alloc_etherdev_mqs devm_blk_crypto_profile_init + devm_clk_bulk_get devm_clk_bulk_get_all devm_clk_get devm_clk_get_optional @@ -435,6 +436,7 @@ dev_pm_domain_attach_by_id dev_pm_domain_attach_by_name dev_pm_domain_detach + dev_pm_genpd_set_performance_state dev_pm_opp_find_freq_ceil dev_pm_opp_free_cpufreq_table dev_pm_opp_get_opp_count @@ -1200,6 +1202,7 @@ kset_unregister kstrdup kstrdup_const + kstrndup kstrtobool kstrtobool_from_user kstrtoint @@ -1463,6 +1466,7 @@ of_get_phy_mode of_get_property of_get_regulator_init_data + of_get_required_opp_performance_state of_graph_get_remote_node of_graph_get_remote_port_parent of_graph_is_present @@ -2075,6 +2079,7 @@ sock_release sock_wfree sort + spi_add_device __spi_alloc_controller spi_alloc_device spi_controller_resume @@ -2088,6 +2093,7 @@ __spi_register_driver spi_setup spi_sync + spi_unregister_device split_page sprintf sprint_symbol diff --git a/android/abi_gki_aarch64_asr b/android/abi_gki_aarch64_asr new file mode 100644 index 0000000000000..eadeaabdd1c84 --- /dev/null +++ b/android/abi_gki_aarch64_asr @@ -0,0 +1,66 @@ +[abi_symbol_list] + +# required by asr5803.ko + sdhci_enable_sdio_irq + +# required by asr_serial.ko + uart_get_divisor + uart_handle_cts_change + uart_handle_dcd_change + uart_insert_char + +# required by ehci-asr-ci.ko + ehci_init_driver + ehci_setup + +# required by phy-asr-ci-usb2.ko + usb_add_phy_dev + usb_remove_phy + +# required by pvrsrvkm.ko + call_rcu + devm_devfreq_remove_device + dev_pm_opp_remove + dma_fence_array_ops + dma_fence_enable_sw_signaling + idr_replace + kthread_freezable_should_stop + rcu_barrier + +# required by sdhci_asr.ko + sdhci_resume_host + sdhci_send_tuning + sdhci_set_clock + sdhci_set_uhs_signaling + sdhci_suspend_host + +# required by vh_sched.ko + __traceiter_android_vh_map_util_freq + __tracepoint_android_vh_map_util_freq + +# required by asr_drm.ko + clk_set_rate_exclusive + clk_rate_exclusive_put + +# required by mercury.ko + media_device_register_entity + media_device_unregister_entity + v4l2_ctrl_get_menu + v4l2_ctrl_type_op_equal + v4l2_ctrl_type_op_init + v4l2_ctrl_type_op_log + v4l2_m2m_buf_done_and_job_finish + v4l2_m2m_last_buf + +# required by jpu_heap.ko + kmem_cache_size + memset16 + +# required by dwc3.ko + extcon_find_edev_by_node + phy_pm_runtime_put_sync + usb_get_maximum_ssp_rate + +# required by xhci-asr.ko + extcon_find_edev_by_node + diff --git a/android/abi_gki_aarch64_db845c b/android/abi_gki_aarch64_db845c index 55af08f918d14..072c51d302f3b 100644 --- a/android/abi_gki_aarch64_db845c +++ b/android/abi_gki_aarch64_db845c @@ -582,6 +582,7 @@ prepare_to_wait_event print_hex_dump _printk + __pskb_copy_fclone pskb_expand_head __pskb_pull_tail put_device @@ -1971,6 +1972,7 @@ device_find_child # required by smem.ko + hwspin_lock_bust hwspin_lock_free hwspin_lock_request_specific __hwspin_lock_timeout diff --git a/android/abi_gki_aarch64_galaxy b/android/abi_gki_aarch64_galaxy index 61a5b1b19d9f4..0dd89e37a0bb7 100644 --- a/android/abi_gki_aarch64_galaxy +++ b/android/abi_gki_aarch64_galaxy @@ -73,26 +73,36 @@ __traceiter_android_rvh_do_el1_undef __traceiter_android_rvh_do_sea __traceiter_android_rvh_do_sp_pc_abort + __traceiter_android_rvh_ksys_umount __traceiter_android_rvh_panic_unhandled __traceiter_android_rvh_process_madvise_bypass __traceiter_android_rvh_report_bug __traceiter_android_rvh_try_alloc_pages __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_pages_slowpath_start __traceiter_android_vh_alloc_pages_slowpath_end __traceiter_android_vh_cache_show __traceiter_android_vh_cma_alloc_set_max_retries __traceiter_android_vh_cma_debug_show_areas + __traceiter_android_vh_direct_reclaim_begin + __traceiter_android_vh_direct_reclaim_end __traceiter_android_vh_dma_heap_buffer_alloc_start __traceiter_android_vh_dma_heap_buffer_alloc_end __traceiter_android_vh_dmabuf_page_pool_free_bypass __traceiter_android_vh_do_read_fault + __traceiter_android_vh_dpm_wait_finish + __traceiter_android_vh_dpm_wait_start __traceiter_android_vh_exit_mm __traceiter_android_vh_filemap_fault_start __traceiter_android_vh_filemap_fault_end __traceiter_android_vh_filemap_read __traceiter_android_vh_filemap_map_pages + __traceiter_android_vh_flush_work_wait_finish + __traceiter_android_vh_flush_work_wait_start + __traceiter_android_vh_flush_wq_wait_finish + __traceiter_android_vh_flush_wq_wait_start __traceiter_android_vh_free_pages_prepare_bypass __traceiter_android_vh_free_pages_ok_bypass __traceiter_android_vh_is_fpsimd_save @@ -103,6 +113,10 @@ __traceiter_android_vh_madvise_pageout_swap_entry __traceiter_android_vh_madvise_swapin_walk_pmd_entry __traceiter_android_vh_meminfo_proc_show + __traceiter_android_vh_mmc_update_mmc_queue + __traceiter_android_vh_si_meminfo_adjust_shmem + __traceiter_android_vh_shmem_mod_shmem + __traceiter_android_vh_shmem_mod_swapped __traceiter_android_vh_page_cache_readahead_start __traceiter_android_vh_page_cache_readahead_end __traceiter_android_vh_print_slabinfo_header @@ -117,15 +131,22 @@ __traceiter_android_vh_smaps_pte_entry __traceiter_android_vh_smaps_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_sync_irq_wait_finish + __traceiter_android_vh_sync_irq_wait_start __traceiter_android_vh_try_to_freeze_todo __traceiter_android_vh_try_to_freeze_todo_unfrozen __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_warn_alloc_tune_ratelimit __traceiter_android_vh_warn_alloc_show_mem_bypass __traceiter_android_vh_watchdog_timer_softlockup __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_bypass __traceiter_console @@ -141,26 +162,36 @@ __tracepoint_android_rvh_do_el1_undef __tracepoint_android_rvh_do_sea __tracepoint_android_rvh_do_sp_pc_abort + __tracepoint_android_rvh_ksys_umount __tracepoint_android_rvh_panic_unhandled __tracepoint_android_rvh_process_madvise_bypass __tracepoint_android_rvh_report_bug __tracepoint_android_rvh_try_alloc_pages __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_pages_slowpath_start __tracepoint_android_vh_alloc_pages_slowpath_end __tracepoint_android_vh_cache_show __tracepoint_android_vh_cma_alloc_set_max_retries __tracepoint_android_vh_cma_debug_show_areas + __tracepoint_android_vh_direct_reclaim_begin + __tracepoint_android_vh_direct_reclaim_end __tracepoint_android_vh_dma_heap_buffer_alloc_start __tracepoint_android_vh_dma_heap_buffer_alloc_end __tracepoint_android_vh_dmabuf_page_pool_free_bypass __tracepoint_android_vh_do_read_fault + __tracepoint_android_vh_dpm_wait_finish + __tracepoint_android_vh_dpm_wait_start __tracepoint_android_vh_exit_mm __tracepoint_android_vh_filemap_fault_start __tracepoint_android_vh_filemap_fault_end __tracepoint_android_vh_filemap_read __tracepoint_android_vh_filemap_map_pages + __tracepoint_android_vh_flush_work_wait_finish + __tracepoint_android_vh_flush_work_wait_start + __tracepoint_android_vh_flush_wq_wait_finish + __tracepoint_android_vh_flush_wq_wait_start __tracepoint_android_vh_free_pages_prepare_bypass __tracepoint_android_vh_free_pages_ok_bypass __tracepoint_android_vh_is_fpsimd_save @@ -171,6 +202,10 @@ __tracepoint_android_vh_madvise_pageout_swap_entry __tracepoint_android_vh_madvise_swapin_walk_pmd_entry __tracepoint_android_vh_meminfo_proc_show + __tracepoint_android_vh_mmc_update_mmc_queue + __tracepoint_android_vh_si_meminfo_adjust_shmem + __tracepoint_android_vh_shmem_mod_shmem + __tracepoint_android_vh_shmem_mod_swapped __tracepoint_android_vh_page_cache_readahead_start __tracepoint_android_vh_page_cache_readahead_end __tracepoint_android_vh_print_slabinfo_header @@ -186,14 +221,21 @@ __tracepoint_android_vh_smaps_swap_shared __tracepoint_android_vh_show_smap_swap_shared __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_start __tracepoint_android_vh_try_to_freeze_todo __tracepoint_android_vh_try_to_freeze_todo_unfrozen __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_warn_alloc_tune_ratelimit __tracepoint_android_vh_warn_alloc_show_mem_bypass __tracepoint_android_vh_watchdog_timer_softlockup __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_bypass __tracepoint_console @@ -204,3 +246,5 @@ __tracepoint_kfree_skb usb_set_device_state yield + regulator_get_current_limit + android_create_function_device diff --git a/android/abi_gki_aarch64_honor b/android/abi_gki_aarch64_honor index 52535b748fb7c..f841cc2119ff9 100644 --- a/android/abi_gki_aarch64_honor +++ b/android/abi_gki_aarch64_honor @@ -55,6 +55,8 @@ tty_unlock tty_set_ldisc tty_kclose + android_debug_per_cpu_symbol + android_debug_symbol __kfifo_len_r __traceiter_android_vh_killed_process __tracepoint_android_vh_killed_process @@ -94,6 +96,10 @@ __traceiter_android_vh_slab_free __traceiter_android_vh_should_fault_around __tracepoint_android_vh_should_fault_around + __traceiter_android_vh_mglru_should_abort_scan + __tracepoint_android_vh_mglru_should_abort_scan + __traceiter_android_vh_mglru_should_abort_scan_order + __tracepoint_android_vh_mglru_should_abort_scan_order __traceiter_android_vh_tcp_connect __tracepoint_android_vh_tcp_connect __traceiter_android_vh_tcp_write_timeout_estab_retrans @@ -104,6 +110,14 @@ __tracepoint_android_vh_tcp_clean_rtx_queue __traceiter_android_vh_tcp_rcv_synack __tracepoint_android_vh_tcp_rcv_synack + __traceiter_android_vh_udp_unicast_rcv_skb + __tracepoint_android_vh_udp_unicast_rcv_skb + __traceiter_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 __traceiter_android_vh_si_mem_available_adjust __tracepoint_android_vh_si_meminfo_adjust @@ -118,6 +132,8 @@ __tracepoint_android_vh_udp_v4_connect __traceiter_android_vh_udp_v6_connect __tracepoint_android_vh_udp_v6_connect + __traceiter_android_rvh_dma_buf_stats_teardown + __tracepoint_android_rvh_dma_buf_stats_teardown __traceiter_android_rvh_hw_protection_shutdown __tracepoint_android_rvh_hw_protection_shutdown __traceiter_android_rvh_bpf_int_jit_compile_ro @@ -138,11 +154,25 @@ __tracepoint_android_vh_sk_free __traceiter_android_vh_sk_clone_lock __tracepoint_android_vh_sk_clone_lock + __traceiter_android_rvh_f2fs_down_read + __tracepoint_android_rvh_f2fs_down_read + __traceiter_android_vh_f2fs_improve_priority + __tracepoint_android_vh_f2fs_improve_priority + __traceiter_android_vh_f2fs_restore_priority + __tracepoint_android_vh_f2fs_restore_priority + __traceiter_android_vh_cma_alloc_retry + __tracepoint_android_vh_cma_alloc_retry + __tracepoint_android_vh_should_memcg_bypass + __traceiter_android_vh_should_memcg_bypass __traceiter_android_rvh_ogki_vfree_bypass __traceiter_android_rvh_ogki_vmalloc_node_bypass __traceiter_android_vh_ogki_async_psi_bypass __traceiter_android_vh_ogki_f2fs_dsm __traceiter_android_vh_ogki_f2fs_dsm_get + __tracepoint_android_vh_ogki_f2fs_create + __traceiter_android_vh_ogki_f2fs_create + __tracepoint_android_vh_ogki_f2fs_submit_write_page + __traceiter_android_vh_ogki_f2fs_submit_write_page __traceiter_android_vh_ogki_check_vip_status __traceiter_android_vh_ogki_cma_alloc_retry __traceiter_android_vh_ogki_ufs_dsm @@ -154,6 +184,8 @@ __tracepoint_android_vh_ogki_check_vip_status __tracepoint_android_vh_ogki_cma_alloc_retry __tracepoint_android_vh_ogki_ufs_dsm + __tracepoint_scsi_dispatch_cmd_start + __traceiter_scsi_dispatch_cmd_start __traceiter_android_vh_ogki_tcp_srtt_estimator __tracepoint_android_vh_ogki_tcp_srtt_estimator __traceiter_android_vh_ogki_tcp_rcv_estab_fastpath @@ -206,3 +238,7 @@ __traceiter_android_vh_ogki_set_wifi_state_disconnect __traceiter_android_vh_ogki_kmem_cache_create_usercopy __tracepoint_android_vh_ogki_kmem_cache_create_usercopy + __traceiter_android_vh_wq_queue_work + __traceiter_android_vh_wq_wake_idle_worker + __tracepoint_android_vh_wq_queue_work + __tracepoint_android_vh_wq_wake_idle_worker diff --git a/android/abi_gki_aarch64_imx b/android/abi_gki_aarch64_imx index cf255a23848a2..d2e8e2b9b6bfd 100644 --- a/android/abi_gki_aarch64_imx +++ b/android/abi_gki_aarch64_imx @@ -122,6 +122,7 @@ class_find_device class_register class_unregister + cleanup_srcu_struct clear_page clk_bulk_disable clk_bulk_enable @@ -148,6 +149,7 @@ clk_hw_get_parent_by_index clk_hw_get_rate clk_hw_is_enabled + clk_hw_is_prepared clk_hw_register clk_hw_register_composite __clk_hw_register_divider @@ -412,6 +414,7 @@ devm_mipi_dsi_attach devm_mipi_dsi_device_register_full devm_nvmem_device_get + devm_nvmem_device_put devm_nvmem_register devm_of_clk_add_hw_provider devm_of_iomap @@ -436,6 +439,7 @@ devm_rc_allocate_device devm_rc_register_device devm_register_sys_off_handler + devm_regmap_add_irq_chip devm_regmap_field_alloc __devm_regmap_init __devm_regmap_init_i2c @@ -1249,6 +1253,7 @@ __kmalloc kmalloc_caches kmalloc_large + kmalloc_size_roundup kmalloc_trace kmem_cache_alloc kmem_cache_create @@ -1738,6 +1743,7 @@ phylink_fwnode_phy_connect phylink_generic_validate phylink_get_eee_err + phylink_init_eee phylink_limit_mac_speed phylink_mii_c22_pcs_an_restart phylink_mii_c22_pcs_config @@ -1904,6 +1910,7 @@ put_pid __put_task_struct put_unused_fd + pwm_apply_might_sleep pwm_apply_state pwmchip_add pwmchip_remove @@ -1988,6 +1995,7 @@ regmap_field_update_bits_base regmap_get_device __regmap_init_mmio_clk + regmap_irq_get_domain regmap_irq_get_virq regmap_multi_reg_write regmap_noinc_read @@ -2004,6 +2012,7 @@ regulator_bulk_enable regulator_bulk_free regulator_bulk_get + regulator_desc_list_voltage_linear regulator_desc_list_voltage_linear_range regulator_disable regulator_disable_regmap @@ -2011,11 +2020,13 @@ regulator_enable_regmap regulator_get_optional regulator_get_voltage + regulator_get_voltage_sel_pickable_regmap regulator_get_voltage_sel_regmap regulator_is_enabled regulator_is_enabled_regmap regulator_list_voltage_linear regulator_list_voltage_linear_range + regulator_list_voltage_pickable_linear_range regulator_list_voltage_table regulator_map_voltage_ascend regulator_put @@ -2023,6 +2034,7 @@ regulator_set_load regulator_set_ramp_delay_regmap regulator_set_voltage + regulator_set_voltage_sel_pickable_regmap regulator_set_voltage_sel_regmap regulator_set_voltage_time_sel release_firmware @@ -2167,6 +2179,8 @@ set_user_nice sg_alloc_table sg_alloc_table_from_pages_segment + sg_copy_from_buffer + sg_copy_to_buffer sget_dev sg_free_table sg_init_one @@ -2369,6 +2383,10 @@ spi_sync spi_unregister_controller sprintf + srcu_init_notifier_head + srcu_notifier_call_chain + srcu_notifier_chain_register + srcu_notifier_chain_unregister sscanf __stack_chk_fail static_key_count diff --git a/android/abi_gki_aarch64_kunit b/android/abi_gki_aarch64_kunit new file mode 100644 index 0000000000000..ba478b4e11e22 --- /dev/null +++ b/android/abi_gki_aarch64_kunit @@ -0,0 +1,38 @@ +[abi_symbol_list] +# required by drivers + kunit_hooks + kunit_running + +# required by tests + __kunit_abort + __kunit_activate_static_stub + kunit_add_action + kunit_add_action_or_reset + __kunit_add_resource + kunit_assert_prologue + kunit_binary_assert_format + kunit_binary_ptr_assert_format + kunit_binary_str_assert_format + kunit_cleanup + kunit_deactivate_static_stub + kunit_destroy_resource + __kunit_do_failed_assertion + kunit_fail_assert_format + kunit_init_test + kunit_kfree + kunit_kmalloc_array + kunit_log_append + kunit_mem_assert_format + kunit_ptr_not_err_assert_format + kunit_release_action + kunit_remove_action + kunit_remove_resource + kunit_run_tests + kunit_suite_has_succeeded + kunit_suite_num_test_cases + kunit_test_case_num + __kunit_test_suites_exit + __kunit_test_suites_init + kunit_try_catch_run + kunit_try_catch_throw + kunit_unary_assert_format diff --git a/android/abi_gki_aarch64_mtk b/android/abi_gki_aarch64_mtk index 0b480c4e05b94..275f60e8bec06 100644 --- a/android/abi_gki_aarch64_mtk +++ b/android/abi_gki_aarch64_mtk @@ -2232,6 +2232,8 @@ __pskb_pull_tail pskb_put ___pskb_trim + ptp_find_pin + ptp_schedule_worker put_cmsg __put_cred put_device @@ -2977,10 +2979,14 @@ __traceiter_android_vh_freq_qos_add_request __traceiter_android_vh_freq_qos_remove_request __traceiter_android_vh_freq_qos_update_request + __traceiter_android_vh_gzvm_destroy_vm_post_process + __traceiter_android_vh_gzvm_handle_demand_page_post + __traceiter_android_vh_gzvm_handle_demand_page_pre __traceiter_android_vh_gzvm_vcpu_exit_reason __traceiter_android_vh_iommu_iovad_alloc_iova __traceiter_android_vh_iommu_iovad_free_iova __traceiter_android_vh_is_fpsimd_save + __traceiter_android_vh_mmc_update_mmc_queue __traceiter_android_vh_mm_direct_reclaim_enter __traceiter_android_vh_mm_direct_reclaim_exit __traceiter_android_vh_mm_may_oom_exit @@ -3095,10 +3101,14 @@ __tracepoint_android_vh_freq_qos_add_request __tracepoint_android_vh_freq_qos_remove_request __tracepoint_android_vh_freq_qos_update_request + __tracepoint_android_vh_gzvm_destroy_vm_post_process + __tracepoint_android_vh_gzvm_handle_demand_page_post + __tracepoint_android_vh_gzvm_handle_demand_page_pre __tracepoint_android_vh_gzvm_vcpu_exit_reason __tracepoint_android_vh_iommu_iovad_alloc_iova __tracepoint_android_vh_iommu_iovad_free_iova __tracepoint_android_vh_is_fpsimd_save + __tracepoint_android_vh_mmc_update_mmc_queue __tracepoint_android_vh_mm_direct_reclaim_enter __tracepoint_android_vh_mm_direct_reclaim_exit __tracepoint_android_vh_mm_may_oom_exit @@ -3647,6 +3657,7 @@ vm_iomap_memory vm_map_ram vm_node_stat + vm_unmapped_area vm_unmap_ram vm_zone_stat vprintk diff --git a/android/abi_gki_aarch64_mtktv b/android/abi_gki_aarch64_mtktv new file mode 100644 index 0000000000000..3becc151e71a7 --- /dev/null +++ b/android/abi_gki_aarch64_mtktv @@ -0,0 +1,1854 @@ +[abi_symbol_list] + add_timer + add_uevent_var + add_wait_queue + add_wait_queue_exclusive + aes_encrypt + aes_expandkey + alloc_chrdev_region + alloc_contig_range + alloc_etherdev_mqs + alloc_netdev_mqs + __alloc_pages + alloc_pages_exact + __alloc_percpu + __alloc_skb + alloc_workqueue + alt_cb_patch_nops + anon_inode_getfd + anon_inode_getfile + __arch_copy_from_user + __arch_copy_to_user + arm64_use_ng_mappings + __arm_smccc_hvc + __arm_smccc_smc + atomic_notifier_chain_register + atomic_notifier_chain_unregister + autoremove_wake_function + backing_file_real_path + backlight_device_register + backlight_device_unregister + bcmp + bio_endio + bio_end_io_acct_remapped + bio_start_io_acct + __bitmap_clear + bitmap_find_free_region + bitmap_find_next_zero_area_off + bitmap_free + bitmap_from_arr32 + bitmap_parse + bitmap_print_to_pagebuf + bitmap_release_region + __bitmap_set + bitmap_to_arr32 + __bitmap_weight + bitmap_zalloc + bit_wait + __blk_alloc_disk + 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_write_zeroes_sectors + blk_queue_physical_block_size + blocking_notifier_call_chain + blocking_notifier_chain_register + blocking_notifier_chain_unregister + block_is_partially_uptodate + bpf_trace_run1 + bpf_trace_run2 + bpf_trace_run3 + bpf_trace_run4 + bpf_trace_run5 + bpf_trace_run6 + __bread_gfp + __brelse + buffer_migrate_folio + bus_find_device + bus_for_each_dev + bus_register + bus_register_notifier + bus_unregister + bus_unregister_notifier + cache_line_size + cancel_delayed_work + cancel_delayed_work_sync + cancel_work + cancel_work_sync + capable + cdev_add + cdev_alloc + cdev_del + cdev_device_add + cdev_device_del + cdev_init + cec_allocate_adapter + cec_delete_adapter + cec_received_msg_ts + cec_register_adapter + cec_transmit_attempt_done_ts + cec_transmit_done_ts + cec_unregister_adapter + __check_object_size + class_create + class_destroy + class_find_device + class_register + class_unregister + clear_inode + clear_page + __ClearPageMovable + clk_bulk_disable + clk_bulk_enable + clk_bulk_prepare + clk_bulk_put_all + clk_bulk_unprepare + clk_disable + clk_divider_ops + clk_enable + clk_gate_ops + clk_get + __clk_get_hw + __clk_get_name + clk_get_parent + clk_get_rate + clk_hw_get_flags + clk_hw_get_name + clk_hw_get_num_parents + clk_hw_get_parent + clk_hw_get_parent_by_index + clk_hw_get_rate + clk_hw_is_enabled + clk_hw_is_prepared + __clk_hw_register_fixed_rate + __clk_hw_register_gate + clk_hw_set_parent + clk_hw_unregister_fixed_rate + clk_hw_unregister_gate + __clk_is_enabled + clk_mux_ops + clk_prepare + clk_put + clk_register + clk_register_composite + clk_register_divider_table + clk_register_fixed_factor + clk_register_fixed_rate + clk_register_gate + clk_round_rate + clk_set_parent + clk_set_rate + clk_unprepare + cma_alloc + cma_for_each_area + cma_get_name + cma_release + compat_ptr_ioctl + complete + complete_all + completion_done + component_add + component_bind_all + component_del + component_master_add_with_match + component_match_add_release + component_unbind_all + console_printk + console_suspend_enabled + __const_udelay + consume_skb + contig_page_data + _copy_from_iter + copy_from_iter_toio + __copy_overflow + copy_to_iter_fromio + cpu_bit_bitmap + cpufreq_cpu_get_raw + cpufreq_dbs_governor_exit + cpufreq_dbs_governor_init + cpufreq_dbs_governor_limits + cpufreq_dbs_governor_start + cpufreq_dbs_governor_stop + __cpufreq_driver_target + cpufreq_generic_attr + cpufreq_generic_frequency_table_verify + cpufreq_register_driver + cpufreq_register_governor + cpufreq_table_index_unsorted + cpufreq_unregister_governor + cpufreq_update_policy + __cpuhp_remove_state + __cpuhp_setup_state + __cpuhp_state_add_instance + __cpuhp_state_remove_instance + cpu_number + __cpu_online_mask + __cpu_possible_mask + __cpu_present_mask + cpus_read_lock + cpus_read_unlock + crc16 + crc32_be + create_empty_buffers + crypto_alloc_base + crypto_alloc_kpp + crypto_alloc_shash + crypto_comp_compress + crypto_comp_decompress + crypto_destroy_tfm + crypto_ecdh_encode_key + crypto_ecdh_key_len + crypto_has_alg + __crypto_memneq + crypto_register_alg + crypto_req_done + crypto_shash_final + crypto_shash_setkey + crypto_shash_tfm_digest + crypto_shash_update + crypto_unregister_alg + _ctype + d_add + d_add_ci + datagram_poll + dbs_update + debugfs_attr_read + debugfs_attr_write + debugfs_create_blob + debugfs_create_bool + debugfs_create_devm_seqfile + debugfs_create_dir + debugfs_create_file + debugfs_create_regset32 + debugfs_create_symlink + debugfs_create_u16 + debugfs_create_u32 + debugfs_create_u64 + debugfs_create_u8 + debugfs_create_x32 + debugfs_remove + dec_zone_page_state + default_llseek + default_wake_function + delayed_work_timer_fn + del_gendisk + desc_to_gpio + destroy_workqueue + dev_addr_mod + _dev_alert + dev_coredumpv + _dev_crit + dev_driver_string + _dev_emerg + _dev_err + devfreq_add_governor + devfreq_get_devfreq_by_phandle + devfreq_monitor_resume + devfreq_monitor_start + devfreq_monitor_stop + devfreq_monitor_suspend + devfreq_recommended_opp + devfreq_remove_governor + devfreq_resume_device + devfreq_suspend_device + devfreq_update_interval + __dev_fwnode + device_add + device_add_disk + device_create + device_create_file + device_del + device_destroy + device_find_child + device_for_each_child + device_get_child_node_count + device_get_match_data + device_get_next_child_node + device_initialize + device_link_add + device_match_of_node + device_move + device_node_to_regmap + device_property_match_string + device_property_present + device_property_read_string + device_property_read_u32_array + device_register + device_remove_file + device_set_node + device_set_wakeup_capable + device_unregister + device_wakeup_disable + device_wakeup_enable + _dev_info + dev_kfree_skb_any_reason + dev_kfree_skb_irq_reason + devm_backlight_device_register + devm_clk_bulk_get_all + devm_clk_get + devm_clk_get_optional + devm_clk_put + devm_devfreq_add_device + devm_devfreq_register_notifier + devm_devfreq_remove_device + devm_devfreq_unregister_notifier + devm_extcon_dev_allocate + devm_extcon_dev_register + devm_extcon_register_notifier + devm_free_irq + devm_fwnode_gpiod_get_index + devm_gen_pool_create + devm_gpiochip_add_data_with_key + devm_gpiod_get + devm_gpiod_get_index + devm_gpiod_get_index_optional + devm_gpiod_get_optional + devm_gpio_request_one + devm_hwspin_lock_register + devm_hwspin_lock_unregister + devm_iio_channel_get + devm_iio_device_alloc + devm_input_allocate_device + devm_ioremap + devm_ioremap_resource + devm_ioremap_wc + devm_kasprintf + devm_kfree + devm_kmalloc + devm_kstrdup + devm_led_classdev_register_ext + devm_mbox_controller_register + devm_of_phy_get_by_index + __devm_of_phy_provider_register + devm_phy_create + devm_pinctrl_get + devm_pinctrl_put + devm_pwm_get + __devm_regmap_init_i2c + devm_regulator_get_optional + devm_regulator_register + devm_request_any_context_irq + __devm_request_region + devm_request_threaded_irq + devm_rtc_allocate_device + __devm_rtc_register_device + devm_snd_soc_register_card + devm_snd_soc_register_component + devm_spi_register_controller + devm_thermal_of_zone_register + _dev_notice + dev_pm_opp_clear_config + dev_pm_opp_find_freq_ceil + dev_pm_opp_get_freq_indexed + dev_pm_opp_get_opp_count + dev_pm_opp_get_opp_table + dev_pm_opp_get_voltage + dev_pm_opp_init_cpufreq_table + dev_pm_opp_of_add_table + dev_pm_opp_of_add_table_indexed + dev_pm_opp_of_cpumask_add_table + dev_pm_opp_of_cpumask_remove_table + dev_pm_opp_of_get_sharing_cpus + dev_pm_opp_of_remove_table + dev_pm_opp_put + dev_pm_opp_put_opp_table + dev_pm_opp_set_config + _dev_printk + dev_set_name + _dev_warn + disable_irq + disable_irq_nosync + disable_percpu_irq + dma_alloc_attrs + dma_alloc_pages + dma_buf_attach + dma_buf_begin_cpu_access + dma_buf_detach + dma_buf_end_cpu_access + dma_buf_export + dma_buf_fd + dma_buf_get + dma_buf_map_attachment + dma_buf_map_attachment_unlocked + dma_buf_mmap + dma_buf_put + dma_buf_unmap_attachment + dma_buf_unmap_attachment_unlocked + dma_buf_vmap + dma_buf_vmap_unlocked + dma_buf_vunmap + dma_buf_vunmap_unlocked + dma_contiguous_default_area + dma_fence_add_callback + dma_fence_array_create + dma_fence_array_ops + dma_fence_context_alloc + dma_fence_default_wait + dma_fence_free + dma_fence_get_status + dma_fence_init + dma_fence_release + dma_fence_remove_callback + dma_fence_signal + dma_fence_signal_locked + dma_free_attrs + dma_free_pages + dma_get_sgtable_attrs + dma_heap_add + dma_heap_buffer_alloc + dma_heap_bufferfd_alloc + dma_heap_find + dma_heap_get_dev + dma_heap_get_drvdata + dma_heap_get_name + dma_heap_put + d_make_root + dmam_alloc_attrs + dma_map_page_attrs + dma_map_sg_attrs + dma_map_sgtable + dmam_free_coherent + dma_mmap_attrs + dma_mmap_pages + dma_pool_alloc + dma_pool_create + dma_pool_destroy + dma_pool_free + dma_resv_add_fence + dma_resv_iter_first_unlocked + dma_resv_reserve_fences + dma_set_coherent_mask + dma_set_mask + dma_sync_sg_for_cpu + dma_sync_sg_for_device + dma_sync_single_for_cpu + dma_sync_single_for_device + dma_unmap_page_attrs + dma_unmap_sg_attrs + d_obtain_alias + do_trace_netlink_extack + do_wait_intr + down + downgrade_write + down_interruptible + down_read + down_timeout + down_trylock + down_write + drain_workqueue + driver_create_file + driver_unregister + drm_atomic_get_connector_state + drm_atomic_get_crtc_state + drm_atomic_get_new_private_obj_state + drm_atomic_get_old_private_obj_state + drm_atomic_get_private_obj_state + drm_atomic_helper_async_commit + drm_atomic_helper_check + drm_atomic_helper_check_plane_state + drm_atomic_helper_cleanup_planes + drm_atomic_helper_commit + drm_atomic_helper_commit_cleanup_done + drm_atomic_helper_commit_tail + drm_atomic_helper_connector_destroy_state + drm_atomic_helper_connector_duplicate_state + drm_atomic_helper_connector_reset + drm_atomic_helper_crtc_destroy_state + drm_atomic_helper_crtc_duplicate_state + drm_atomic_helper_crtc_reset + drm_atomic_helper_damage_iter_init + drm_atomic_helper_damage_iter_next + drm_atomic_helper_disable_plane + drm_atomic_helper_page_flip + __drm_atomic_helper_plane_destroy_state + __drm_atomic_helper_plane_duplicate_state + drm_atomic_helper_prepare_planes + __drm_atomic_helper_private_obj_duplicate_state + drm_atomic_helper_set_config + drm_atomic_helper_setup_commit + drm_atomic_helper_swap_state + drm_atomic_helper_update_plane + drm_atomic_helper_wait_for_dependencies + drm_atomic_helper_wait_for_fences + drm_atomic_private_obj_fini + drm_atomic_private_obj_init + drm_atomic_state_default_clear + __drm_atomic_state_free + drm_compat_ioctl + drm_connector_attach_encoder + drm_connector_cleanup + drm_connector_init + drm_connector_list_iter_begin + drm_connector_list_iter_end + drm_connector_list_iter_next + drm_connector_register + drm_connector_unregister + drm_crtc_add_crc_entry + drm_crtc_cleanup + __drm_crtc_commit_free + drm_crtc_commit_wait + drm_crtc_handle_vblank + drm_crtc_init_with_planes + drm_crtc_send_vblank_event + drm_crtc_vblank_off + drm_crtc_vblank_on + drm_crtc_wait_one_vblank + ___drm_dbg + __drm_debug + drm_dev_alloc + __drm_dev_dbg + drm_dev_printk + drm_dev_register + drm_display_mode_from_cea_vic + drm_display_mode_from_videomode + drm_edid_dup + drm_edid_duplicate + drm_edid_free + drm_edid_get_monitor_name + drm_edid_raw + drm_edid_read_ddc + drm_encoder_cleanup + drm_encoder_init + __drm_err + drm_format_info_block_height + drm_format_info_block_width + drm_framebuffer_init + drm_gem_create_mmap_offset + drm_gem_fb_create_handle + drm_gem_fb_destroy + drm_gem_fb_get_obj + drm_gem_handle_create + drm_gem_mmap + drm_gem_mmap_obj + drm_gem_object_free + drm_gem_object_init + drm_gem_object_lookup + drm_gem_object_release + drm_gem_plane_helper_prepare_fb + drm_gem_prime_fd_to_handle + drm_gem_prime_handle_to_fd + drm_gem_private_object_init + drm_gem_vm_close + drm_gem_vm_open + drm_get_format_info + drm_helper_mode_fill_fb_struct + drm_helper_probe_single_connector_modes + drm_ioctl + drm_kms_helper_hotplug_event + drmm_mode_config_init + drm_mode_config_cleanup + drm_mode_config_reset + drm_mode_create + drm_mode_crtc_set_gamma_size + drm_mode_object_find + drm_mode_object_put + drm_mode_probed_add + drm_modeset_lock + drm_modeset_lock_single_interruptible + drm_modeset_unlock + drm_object_attach_property + drm_object_property_set_value + drm_open + drm_panel_add + drm_panel_get_modes + drm_panel_init + drm_panel_prepare + drm_plane_cleanup + drm_plane_create_zpos_property + drm_poll + drm_prime_gem_destroy + drm_prime_get_contiguous_size + drm_printf + __drm_printfn_debug + drm_property_blob_get + drm_property_blob_put + drm_property_create + drm_property_create_blob + drm_property_create_enum + drm_property_create_range + drm_property_create_signed_range + drm_property_lookup_blob + drm_read + drm_release + drm_self_refresh_helper_update_avg_times + drm_universal_plane_init + drm_vblank_init + d_splice_alias + dump_stack + efi + enable_irq + enable_percpu_irq + end_buffer_read_sync + ether_setup + ethtool_convert_legacy_u32_to_link_mode + ethtool_convert_link_mode_to_legacy_u32 + ethtool_op_get_link + eth_type_trans + extcon_get_edev_by_phandle + extcon_get_state + extcon_set_state_sync + fasync_helper + fd_install + fget + filemap_splice_read + _find_first_bit + _find_first_zero_bit + _find_next_bit + _find_next_zero_bit + find_vma + find_vma_intersection + finish_wait + firmware_request_nowarn + flush_dcache_page + flush_delayed_work + flush_work + __flush_workqueue + __folio_lock + __folio_put + folio_wait_bit + follow_pfn + for_each_kernel_tracepoint + fput + frame_vector_to_pages + free_irq + free_netdev + __free_pages + free_pages + free_pages_exact + free_percpu + free_percpu_irq + freezer_active + freezing_slow_path + freq_qos_update_request + fsnotify + __fsnotify_parent + full_name_hash + fwnode_handle_put + fwnode_property_present + fwnode_property_read_string + fwnode_property_read_u32_array + fwnode_property_read_u8_array + generic_error_remove_page + generic_fh_to_dentry + generic_fh_to_parent + generic_file_llseek + generic_file_mmap + generic_file_open + generic_file_read_iter + generic_handle_irq + generic_mii_ioctl + generic_read_dir + gen_pool_add_owner + gen_pool_alloc_algo_owner + gen_pool_create + gen_pool_destroy + gen_pool_dma_alloc + gen_pool_first_fit_align + gen_pool_free_owner + gen_pool_virt_to_phys + __getblk_gfp + get_cpu_device + get_cpu_idle_time_us + get_device + __get_free_pages + get_random_bytes + get_random_u32 + __get_random_u32_below + __get_task_comm + get_unused_fd_flags + get_user_pages + get_user_pages_fast + get_zeroed_page + gov_update_cpu_data + gpiochip_generic_free + gpiochip_generic_request + gpiochip_get_data + gpiod_cansleep + gpiod_count + gpiod_direction_input + gpiod_direction_output + gpiod_direction_output_raw + gpiod_get_raw_value + gpiod_get_value + gpiod_get_value_cansleep + gpiod_is_active_low + gpiod_set_consumer_name + gpiod_set_debounce + gpiod_set_raw_value + gpiod_set_value + gpiod_set_value_cansleep + gpiod_to_irq + gpio_free + gpio_request + gpio_to_desc + handle_fasteoi_irq + handle_simple_irq + handle_sysrq + hex_dump_to_buffer + hrtimer_active + hrtimer_cancel + hrtimer_forward + hrtimer_init + hrtimer_start_range_ns + hrtimer_try_to_cancel + hwspin_lock_request_specific + __hwspin_lock_timeout + __hwspin_unlock + i2c_adapter_type + i2c_add_adapter + i2c_add_numbered_adapter + i2c_bus_type + i2c_del_adapter + i2c_del_driver + i2c_for_each_dev + i2c_get_adapter + i2c_get_dma_safe_msg_buf + i2c_new_client_device + i2c_put_adapter + i2c_put_dma_safe_msg_buf + i2c_register_driver + i2c_smbus_xfer + i2c_transfer + i2c_transfer_buffer_flags + i2c_unregister_device + i2c_verify_client + ida_alloc_range + ida_destroy + ida_free + idr_alloc + idr_destroy + idr_find + idr_for_each + idr_get_next + idr_remove + idr_replace + iget5_locked + igrab + ihold + iio_device_claim_direct_mode + __iio_device_register + iio_device_release_direct_mode + iio_device_unregister + iio_read_channel_processed + iio_read_channel_scale + inc_zone_page_state + in_egroup_p + init_net + __init_rwsem + __init_swait_queue_head + init_task + init_timer_key + init_uts_ns + init_wait_entry + __init_waitqueue_head + inode_init_once + input_allocate_device + input_close_device + input_event + input_free_device + input_open_device + input_register_device + input_register_handle + input_register_handler + input_set_capability + input_unregister_device + input_unregister_handle + __insert_inode_hash + invalidate_bh_lrus + iomem_resource + iommu_device_register + iommu_device_sysfs_add + iommu_device_sysfs_remove + iommu_device_unregister + iommu_fwspec_add_ids + iommu_fwspec_free + iommu_group_alloc + iommu_group_put + iommu_group_ref_get + ioremap_prot + io_schedule + iounmap + iov_iter_kvec + iov_iter_revert + iput + __irq_apply_affinity_hint + irq_check_status_bit + irq_chip_eoi_parent + irqchip_fwnode_ops + irq_chip_mask_parent + irq_chip_set_affinity_parent + irq_chip_set_type_parent + irq_chip_set_vcpu_affinity_parent + irq_chip_unmask_parent + irq_dispose_mapping + irq_domain_alloc_irqs_parent + irq_domain_create_hierarchy + irq_domain_free_irqs_common + irq_domain_set_hwirq_and_chip + irq_find_matching_fwspec + irq_get_irq_data + irq_modify_status + irq_of_parse_and_map + __irq_resolve_mapping + __irq_set_handler + irq_set_irq_wake + irq_to_desc + is_bad_inode + is_vmalloc_addr + jiffies + jiffies_64_to_clock_t + jiffies64_to_nsecs + jiffies_to_msecs + jiffies_to_usecs + kasan_flag_enabled + kasprintf + kernel_kobj + kernel_sigaction + kern_path + __kfifo_alloc + __kfifo_free + __kfifo_from_user + __kfifo_in + __kfifo_init + __kfifo_in_r + __kfifo_out + __kfifo_out_r + __kfifo_to_user + kfree + kfree_const + kfree_sensitive + kfree_skb_reason + kill_block_super + kimage_voffset + __kmalloc + kmalloc_caches + kmalloc_large + kmalloc_trace + kmem_cache_alloc + kmem_cache_alloc_lru + kmem_cache_create + kmem_cache_destroy + kmem_cache_free + kmemdup + kobject_create_and_add + kobject_del + kobject_init_and_add + kobject_put + kobject_uevent + kobject_uevent_env + krealloc + kstrdup + kstrdup_quotable_cmdline + kstrtobool + kstrtobool_from_user + kstrtoint + kstrtoll + kstrtou16 + kstrtou8 + kstrtouint + kstrtouint_from_user + kstrtoull + kthread_cancel_work_sync + kthread_create_on_node + kthread_flush_work + kthread_flush_worker + __kthread_init_worker + kthread_park + kthread_parkme + kthread_queue_work + kthread_should_park + kthread_should_stop + kthread_stop + kthread_unpark + kthread_worker_fn + ktime_get + ktime_get_mono_fast_ns + ktime_get_raw + ktime_get_raw_ts64 + ktime_get_real_seconds + ktime_get_real_ts64 + ktime_get_ts64 + ktime_get_with_offset + kvasprintf_const + kvfree + kvfree_call_rcu + kvmalloc_node + led_classdev_register_ext + led_classdev_unregister + led_init_default_state_get + __list_add_valid_or_report + __list_del_entry_valid_or_report + list_sort + load_nls + load_nls_default + __lock_buffer + lock_sock_nested + log_abnormal_wakeup_reason + log_post_read_mmio + log_post_write_mmio + log_read_mmio + log_write_mmio + lzo1x_1_compress + lzo1x_decompress_safe + make_bad_inode + mark_buffer_dirty + mas_empty_area_rev + mas_find + mbox_chan_received_data + mbox_request_channel + mbox_send_message + media_create_intf_link + media_create_pad_link + media_create_pad_links + media_device_init + __media_device_register + media_device_register_entity + media_device_register_entity_notify + media_device_unregister + media_device_unregister_entity + media_devnode_create + media_devnode_remove + media_entity_find_link + media_entity_pads_init + media_get_pad_index + media_pad_remote_pad_first + memchr + memchr_inv + memcmp + memcpy + memcpy_and_pad + __memcpy_fromio + __memcpy_toio + memdup_user + memmove + memory_read_from_buffer + memparse + memremap + mem_section + memset + memset64 + __memset_io + memstart_addr + memunmap + mfd_add_devices + mfd_remove_devices + mii_ethtool_get_link_ksettings + mii_ethtool_set_link_ksettings + mii_nway_restart + misc_deregister + misc_register + __mmap_lock_do_trace_acquire_returned + __mmap_lock_do_trace_released + __mmap_lock_do_trace_start_locking + mmc_add_host + mmc_alloc_host + mmc_cqe_request_done + mmc_free_host + mmc_of_parse + mmc_remove_host + mmc_request_done + mmc_wait_for_req + __mmdrop + mod_delayed_work_on + mod_node_page_state + mod_timer + __module_get + module_layout + module_put + mount_bdev + __msecs_to_jiffies + msleep + msleep_interruptible + __mutex_init + mutex_is_locked + mutex_lock + mutex_lock_interruptible + mutex_trylock + mutex_unlock + napi_complete_done + napi_disable + napi_enable + napi_gro_flush + napi_gro_receive + __napi_schedule + __napi_schedule_irqoff + napi_schedule_prep + __netdev_alloc_skb + netdev_err + netdev_info + netif_carrier_off + netif_carrier_on + netif_napi_add_weight + __netif_napi_del + netif_receive_skb + netif_rx + netif_tx_stop_all_queues + netif_tx_wake_queue + new_inode + __nla_parse + nla_put + nla_put_nohdr + nonseekable_open + noop_llseek + nr_cpu_ids + nr_swap_pages + nsecs_to_jiffies + ns_to_kernel_old_timeval + ns_to_timespec64 + __num_online_cpus + of_address_to_resource + of_clk_add_provider + of_clk_get + of_clk_get_from_provider + of_clk_src_onecell_get + of_count_phandle_with_args + of_cpufreq_cooling_register + of_device_get_match_data + of_device_is_available + of_device_is_compatible + of_dma_configure_id + of_dma_is_coherent + of_drm_find_panel + of_find_compatible_node + of_find_device_by_node + of_find_matching_node_and_match + of_find_node_by_name + of_find_node_by_type + of_find_node_opts_by_path + of_find_node_with_property + of_find_property + of_fwnode_ops + of_get_child_by_name + of_get_mac_address + of_get_named_gpio + of_get_next_available_child + of_get_next_child + of_get_next_parent + of_get_property + of_get_regulator_init_data + of_hwspin_lock_get_id + of_iomap + of_irq_find_parent + of_irq_get + of_machine_compatible_match + of_match_device + of_match_node + __of_parse_phandle_with_args + of_phandle_iterator_init + of_phandle_iterator_next + of_platform_depopulate + of_platform_populate + of_property_count_elems_of_size + of_property_match_string + of_property_read_string + of_property_read_string_helper + of_property_read_u32_index + of_property_read_u64 + of_property_read_variable_u16_array + of_property_read_variable_u32_array + of_property_read_variable_u64_array + of_property_read_variable_u8_array + of_prop_next_string + of_reserved_mem_device_init_by_idx + of_reserved_mem_device_release + of_reserved_mem_lookup + of_translate_address + out_of_line_wait_on_bit + overflowgid + overflowuid + pagecache_get_page + page_pinner_inited + __page_pinner_put_page + panic + panic_notifier_list + param_array_ops + param_get_int + param_ops_bool + param_ops_byte + param_ops_charp + param_ops_int + param_ops_short + param_ops_string + param_ops_uint + param_ops_ulong + param_ops_ushort + path_put + percpu_counter_add_batch + percpu_counter_batch + __per_cpu_offset + perf_event_sysfs_show + perf_pmu_migrate_context + perf_pmu_register + perf_pmu_unregister + perf_trace_buf_alloc + perf_trace_run_bpf_submit + pfn_is_map_memory + phy_exit + phy_init + phy_power_off + phy_power_on + phy_set_mode_ext + pid_task + pid_vnr + pinconf_generic_dump_config + pinctrl_count_index_with_args + pinctrl_dev_get_drvdata + pinctrl_enable + pinctrl_force_default + pinctrl_force_sleep + pinctrl_generic_add_group + pinctrl_generic_get_group_count + pinctrl_generic_get_group_name + pinctrl_generic_get_group_pins + pinctrl_generic_remove_group + pinctrl_lookup_state + pinctrl_parse_index_with_args + pinctrl_register_and_init + pinctrl_select_state + pinctrl_unregister + pinmux_generic_add_function + pinmux_generic_get_function + pinmux_generic_get_function_count + pinmux_generic_get_function_groups + pinmux_generic_get_function_name + pinmux_generic_remove_function + pin_user_pages_fast + pin_user_pages_remote + platform_bus_type + platform_device_add + platform_device_alloc + platform_device_del + platform_device_put + platform_device_register + platform_device_register_full + platform_device_unregister + __platform_driver_register + platform_driver_unregister + platform_find_device_by_driver + platform_get_irq + platform_get_irq_byname + platform_get_resource + platform_get_resource_byname + __platform_register_drivers + platform_unregister_drivers + __pm_relax + pm_relax + pm_runtime_allow + __pm_runtime_disable + pm_runtime_enable + pm_runtime_forbid + pm_runtime_force_resume + pm_runtime_force_suspend + __pm_runtime_idle + pm_runtime_no_callbacks + __pm_runtime_resume + __pm_runtime_set_status + __pm_runtime_suspend + __pm_stay_awake + pm_stay_awake + pm_wakeup_dev_event + pm_wakeup_ws_event + pm_wq + preempt_schedule + preempt_schedule_notrace + prepare_to_wait + prepare_to_wait_event + print_hex_dump + _printk + __printk_ratelimit + proc_create + proc_create_data + proc_create_seq_private + proc_create_single_data + proc_mkdir + proc_remove + proc_set_user + proto_register + proto_unregister + __pskb_copy_fclone + __pskb_pull_tail + put_cmsg + __put_cred + put_device + put_disk + put_pid + __put_task_struct + put_unused_fd + pwm_apply_state + pwmchip_add + pwmchip_remove + queue_delayed_work_on + queue_work_on + radix_tree_lookup + radix_tree_tagged + ___ratelimit + _raw_read_lock + _raw_read_lock_irqsave + _raw_read_unlock + _raw_read_unlock_irqrestore + _raw_spin_lock + _raw_spin_lock_bh + _raw_spin_lock_irq + _raw_spin_lock_irqsave + _raw_spin_trylock + _raw_spin_unlock + _raw_spin_unlock_bh + _raw_spin_unlock_irq + _raw_spin_unlock_irqrestore + _raw_write_lock + _raw_write_lock_bh + _raw_write_lock_irqsave + _raw_write_unlock + _raw_write_unlock_bh + _raw_write_unlock_irqrestore + rb_erase + rb_first + rb_insert_color + rb_next + rb_prev + rb_replace_node + rcu_barrier + __rcu_read_lock + __rcu_read_unlock + rdev_get_drvdata + read_cache_page + refcount_dec_and_mutex_lock + refcount_warn_saturate + __refrigerator + regcache_cache_bypass + regcache_cache_only + regcache_drop_region + regcache_mark_dirty + regcache_reg_cached + regcache_sync + __register_blkdev + __register_chrdev + register_chrdev_region + register_die_notifier + register_filesystem + register_inetaddr_notifier + register_netdev + register_netdevice_notifier + register_oom_notifier + register_pm_notifier + register_reboot_notifier + __register_rpmsg_driver + register_shrinker + register_syscore_ops + regmap_bulk_read + regmap_bulk_write + regmap_exit + __regmap_init + regmap_raw_read + regmap_raw_write + regmap_read + regmap_register_patch + regmap_update_bits_base + regmap_write + regulator_disable + regulator_enable + regulator_get + regulator_get_optional + regulator_get_voltage + regulator_is_enabled + regulator_put + regulator_set_mode + regulator_set_voltage + regulator_set_voltage_time + release_firmware + __release_region + release_sock + remap_pfn_range + remap_vmalloc_range + remove_proc_entry + remove_proc_subtree + remove_wait_queue + request_firmware + request_firmware_direct + request_firmware_nowait + __request_module + __request_percpu_irq + __request_region + request_threaded_irq + __root_device_register + root_device_unregister + rpmsg_create_channel + rpmsg_create_ept + rpmsg_register_device_override + rpmsg_release_channel + rpmsg_send + rpmsg_sendto + rpmsg_trysend + rproc_add + rproc_add_carveout + rproc_alloc + rproc_boot + rproc_da_to_va + rproc_del + rproc_free + rproc_mem_entry_init + rproc_of_resm_mem_entry_init + rproc_report_crash + rproc_shutdown + rproc_vq_interrupt + rtc_add_group + rtc_time64_to_tm + rtc_tm_to_time64 + rtc_update_irq + rtc_valid_tm + rtnl_is_locked + rtnl_lock + rtnl_unlock + sampling_rate_store + sb_min_blocksize + sb_set_blocksize + sched_clock + sched_set_fifo + sched_set_fifo_low + sched_set_normal + sched_setscheduler + sched_setscheduler_nocheck + schedule + schedule_hrtimeout + schedule_timeout + schedule_timeout_interruptible + scnprintf + sdio_claim_host + sdio_claim_irq + sdio_disable_func + sdio_enable_func + sdio_readb + sdio_readsb + sdio_register_driver + sdio_release_host + sdio_release_irq + sdio_unregister_driver + sdio_writeb + sdio_writesb + security_release_secctx + security_secid_to_secctx + security_sk_clone + security_sock_graft + send_sig + seq_hex_dump + seq_hlist_next + seq_hlist_start_head + seq_lseek + seq_open + seq_printf + seq_putc + seq_puts + seq_read + seq_release + seq_write + serial8250_do_pm + serial8250_do_set_termios + serial8250_do_shutdown + serial8250_do_startup + serial8250_get_port + serial8250_modem_status + serial8250_register_8250_port + serial8250_resume_port + serial8250_rpm_get + serial8250_rpm_put + serial8250_rpm_put_tx + serial8250_rx_chars + serial8250_suspend_port + serial8250_tx_chars + serial8250_unregister_port + set_capacity + set_capacity_and_notify + set_cpus_allowed_ptr + set_freezable + set_nlink + set_page_dirty_lock + __SetPageMovable + set_user_nice + sg_alloc_table + sg_alloc_table_from_pages_segment + sg_free_table + sg_init_one + sg_miter_next + sg_miter_start + sg_miter_stop + sg_nents + sg_nents_for_len + sg_next + __sg_page_iter_next + __sg_page_iter_start + simple_attr_open + simple_attr_release + simple_open + simple_read_from_buffer + simple_strtol + simple_strtoul + single_open + single_release + sk_alloc + skb_clone + skb_copy + skb_copy_bits + skb_copy_datagram_iter + skb_dequeue + skb_dequeue_tail + skb_free_datagram + skb_pull + skb_pull_data + skb_pull_rcsum + skb_push + skb_put + skb_queue_head + skb_queue_purge_reason + skb_queue_tail + skb_realloc_headroom + skb_recv_datagram + skb_trim + skb_unlink + sk_capable + sk_filter_trim_cap + sk_free + skip_spaces + snd_card_free + snd_card_new + snd_card_register + snd_compress_new + snd_ctl_add + snd_ctl_boolean_mono_info + snd_ctl_find_id + snd_ctl_new1 + snd_ctl_notify + snd_hwdep_new + snd_pcm_format_big_endian + snd_pcm_format_name + snd_pcm_format_physical_width + snd_pcm_format_width + snd_pcm_hw_constraint_list + _snd_pcm_hw_params_any + _snd_pcm_lib_alloc_vmalloc_buffer + snd_pcm_lib_free_vmalloc_buffer + snd_pcm_lib_ioctl + snd_pcm_new + snd_pcm_period_elapsed + snd_pcm_set_ops + snd_pcm_stop + _snd_pcm_stream_lock_irqsave + snd_pcm_stream_unlock_irqrestore + snd_soc_add_component + snd_soc_bytes_info_ext + snd_soc_bytes_tlv_callback + snd_soc_card_get_kcontrol + snd_soc_component_initialize + snd_soc_info_enum_double + snd_soc_info_volsw + snd_soc_of_parse_audio_routing + snd_soc_params_to_bclk + snd_soc_pm_ops + snd_soc_register_card + snd_soc_rtdcom_lookup + snd_soc_set_runtime_hwparams + snd_soc_tdm_params_to_bclk + snd_soc_tplg_component_load + snd_soc_tplg_component_remove + snd_soc_unregister_card + snd_soc_unregister_component + snprintf + sock_alloc_send_pskb + sock_gettstamp + sock_i_ino + sock_init_data + sock_i_uid + sock_no_accept + sock_no_connect + sock_no_listen + sock_no_mmap + sock_no_shutdown + sock_no_socketpair + __sock_queue_rcv_skb + sock_queue_rcv_skb_reason + __sock_recv_cmsgs + __sock_recv_timestamp + __sock_recv_wifi_status + sock_register + sock_unregister + __spi_alloc_controller + spi_finalize_current_message + spi_new_device + spi_register_controller + __spi_register_driver + spi_setup + spi_slave_abort + spi_sync + split_page + sprintf + srcu_init_notifier_head + srcu_notifier_call_chain + srcu_notifier_chain_register + srcu_notifier_chain_unregister + sscanf + __stack_chk_fail + static_key_disable + static_key_enable + static_key_slow_dec + static_key_slow_inc + stpcpy + strcasecmp + strcat + strchr + strcmp + strcpy + strcspn + stream_open + strim + strlcat + strlcpy + strlen + strncasecmp + strncat + strncmp + strncpy + strndup_user + strnlen + strnstr + strpbrk + strrchr + strscpy + strsep + strspn + strstr + submit_bh + suspend_set_ops + __sw_hweight32 + __sw_hweight64 + __sw_hweight8 + sync_blockdev + sync_dirty_buffer + sync_file_create + sync_file_get_fence + sync_filesystem + synchronize_irq + synchronize_net + synchronize_rcu + synchronize_srcu + syscon_node_to_regmap + sysfs_create_bin_file + sysfs_create_file_ns + sysfs_create_group + sysfs_create_groups + sysfs_emit + sysfs_emit_at + sysfs_merge_group + sysfs_notify + sysfs_remove_bin_file + sysfs_remove_file_ns + sysfs_remove_group + sysfs_remove_groups + sysfs_streq + sysfs_unmerge_group + sysfs_update_group + system_cpucaps + system_freezable_power_efficient_wq + system_highpri_wq + system_long_wq + system_power_efficient_wq + system_wq + __tasklet_hi_schedule + tasklet_init + tasklet_kill + __tasklet_schedule + tasklet_unlock_wait + thermal_cooling_device_unregister + thermal_of_cooling_device_register + thermal_zone_get_temp + thermal_zone_get_zone_by_name + time64_to_tm + timer_delete + timer_delete_sync + _totalram_pages + trace_array_destroy + trace_array_get_by_name + trace_array_init_printk + trace_array_printk + __trace_bprintk + __trace_bputs + trace_event_buffer_commit + trace_event_buffer_reserve + trace_event_printf + trace_event_raw_init + trace_event_reg + trace_handle_return + __traceiter_gpu_mem_total + __traceiter_mmap_lock_acquire_returned + __traceiter_mmap_lock_released + __traceiter_mmap_lock_start_locking + trace_output_call + __tracepoint_gpu_mem_total + __tracepoint_mmap_lock_acquire_returned + __tracepoint_mmap_lock_released + __tracepoint_mmap_lock_start_locking + tracepoint_probe_register + tracepoint_probe_unregister + tracepoint_srcu + trace_print_array_seq + trace_print_flags_seq + trace_print_symbols_seq + __trace_puts + trace_raw_output_prep + __trace_trigger_soft_disabled + truncate_inode_pages_final + try_module_get + __tty_alloc_driver + tty_driver_kref_put + tty_flip_buffer_push + __tty_insert_flip_string_flags + tty_port_close + tty_port_hangup + tty_port_init + tty_port_install + tty_port_open + tty_port_put + tty_port_register_device + tty_port_tty_hangup + tty_register_driver + tty_std_termios + tty_termios_baud_rate + tty_unregister_device + tty_unregister_driver + uart_write_wakeup + __udelay + unload_nls + unlock_buffer + unlock_new_inode + unlock_page + unmap_mapping_range + unpin_user_page + unpin_user_pages + unregister_blkdev + __unregister_chrdev + unregister_chrdev_region + unregister_die_notifier + unregister_filesystem + unregister_inetaddr_notifier + unregister_netdev + unregister_netdevice_notifier + unregister_oom_notifier + unregister_pm_notifier + unregister_reboot_notifier + unregister_rpmsg_driver + unregister_shrinker + up + update_devfreq + up_read + up_write + usb_add_gadget_udc + usb_add_hcd + usb_alloc_coherent + usb_alloc_urb + usb_anchor_empty + usb_anchor_urb + usb_autopm_get_interface + usb_autopm_put_interface + usb_bulk_msg + usb_bus_idr + usb_bus_idr_lock + usb_control_msg + usb_create_hcd + usb_create_shared_hcd + usb_debug_root + usb_del_gadget_udc + usb_deregister + usb_deregister_dev + usb_disabled + usb_driver_claim_interface + usb_driver_release_interface + usb_ep_set_halt + usb_ep_set_maxpacket_limit + usb_find_interface + usb_free_coherent + usb_free_urb + usb_gadget_giveback_request + usb_gadget_map_request + usb_gadget_set_state + usb_gadget_unmap_request + usb_get_dev + usb_get_dr_mode + usb_hcd_is_primary_hcd + usb_hcd_poll_rh_status + usb_ifnum_to_if + usb_interrupt_msg + usb_kill_anchored_urbs + usb_kill_urb + usb_lock_device_for_reset + usb_mon_deregister + usb_mon_register + usb_put_dev + usb_put_hcd + usb_register_dev + usb_register_driver + usb_register_notify + usb_remove_hcd + usb_reset_device + usb_reset_endpoint + usb_role_switch_get_drvdata + usb_role_switch_register + usb_role_switch_unregister + usb_set_interface + usb_speed_string + usb_string + usb_submit_urb + usb_unanchor_urb + usb_unlink_anchored_urbs + usb_unlink_urb + usb_unregister_notify + __usecs_to_jiffies + usleep_range_state + uuid_null + v4l2_ctrl_handler_free + v4l2_ctrl_handler_init_class + v4l2_ctrl_handler_setup + v4l2_ctrl_new_custom + v4l2_ctrl_new_std + v4l2_ctrl_new_std_menu + v4l2_ctrl_subscribe_event + v4l2_device_register + v4l2_device_register_subdev + v4l2_device_unregister + v4l2_device_unregister_subdev + v4l2_event_pending + v4l2_event_queue + v4l2_event_queue_fh + v4l2_event_subscribe + v4l2_event_unsubscribe + v4l2_fh_add + v4l2_fh_del + v4l2_fh_exit + v4l2_fh_init + v4l2_fh_is_singular + v4l2_m2m_buf_queue + v4l2_m2m_buf_remove + v4l2_m2m_ctx_init + v4l2_m2m_ctx_release + v4l2_m2m_dqbuf + v4l2_m2m_fop_mmap + v4l2_m2m_fop_poll + v4l2_m2m_get_vq + v4l2_m2m_init + v4l2_m2m_ioctl_create_bufs + v4l2_m2m_ioctl_dqbuf + v4l2_m2m_ioctl_expbuf + v4l2_m2m_ioctl_prepare_buf + v4l2_m2m_ioctl_qbuf + v4l2_m2m_ioctl_querybuf + v4l2_m2m_ioctl_reqbufs + v4l2_m2m_ioctl_streamoff + v4l2_m2m_ioctl_streamon + v4l2_m2m_job_finish + v4l2_m2m_next_buf + v4l2_m2m_qbuf + v4l2_m2m_querybuf + v4l2_m2m_release + v4l2_m2m_reqbufs + v4l2_m2m_streamoff + v4l2_m2m_streamon + v4l2_m2m_try_schedule + v4l2_src_change_event_subscribe + v4l2_subdev_init + v4l_bound_align_image + vb2_buffer_done + vb2_common_vm_ops + vb2_core_dqbuf + vb2_core_expbuf + vb2_core_poll + vb2_core_qbuf + vb2_core_querybuf + vb2_core_queue_init + vb2_core_queue_release + vb2_core_reqbufs + vb2_core_streamoff + vb2_core_streamon + vb2_create_framevec + vb2_destroy_framevec + vb2_dma_contig_memops + vb2_dma_sg_memops + vb2_mmap + vb2_ops_wait_finish + vb2_ops_wait_prepare + vb2_plane_cookie + vb2_plane_vaddr + vb2_queue_init + vb2_queue_release + vb2_streamoff + vb2_streamon + vfree + video_devdata + video_device_alloc + video_device_release + video_ioctl2 + videomode_from_timing + __video_register_device + video_unregister_device + __vmalloc + vmalloc + vmalloc_to_page + vmalloc_to_pfn + vmalloc_user + vmap + vmf_insert_pfn_prot + vm_get_page_prot + vm_map_pages + vm_map_ram + vm_unmap_ram + vm_zone_stat + vscnprintf + vsnprintf + vsprintf + vunmap + vzalloc + wait_for_completion + wait_for_completion_interruptible + wait_for_completion_interruptible_timeout + wait_for_completion_timeout + __wait_on_buffer + wait_woken + __wake_up + wake_up_bit + __wake_up_locked + wake_up_process + wakeup_source_add + wakeup_source_create + wakeup_source_destroy + wakeup_source_register + wakeup_source_remove + wakeup_source_unregister + __warn_printk + watchdog_init_timeout + watchdog_register_device + watchdog_set_restart_priority + watchdog_unregister_device + wireless_send_event + woken_wake_function + wrap_directory_iterator + ww_mutex_lock + ww_mutex_unlock + xhci_add_endpoint + xhci_check_bandwidth + xhci_drop_endpoint + xhci_gen_setup + xhci_get_endpoint_index + xhci_get_ep_ctx + xhci_init_driver + xhci_reset_bandwidth + xhci_resume + xhci_suspend + yield + zlib_deflate + zlib_deflateEnd + zlib_deflateInit2 + zlib_deflateReset + zlib_deflate_workspacesize + zlib_inflate + zlib_inflateIncomp + zlib_inflateInit2 + zlib_inflateReset + zlib_inflate_workspacesize diff --git a/android/abi_gki_aarch64_oplus b/android/abi_gki_aarch64_oplus index 302f58bf1919c..4353962185c23 100644 --- a/android/abi_gki_aarch64_oplus +++ b/android/abi_gki_aarch64_oplus @@ -86,6 +86,7 @@ lookup_one_len_unlocked mem_cgroup_from_id mem_cgroup_update_lru_size + memcg_page_state memory_cgrp_subsys memory_cgrp_subsys_enabled_key mipi_dsi_generic_write @@ -199,6 +200,7 @@ __traceiter_android_vh_alloc_oem_binder_struct __traceiter_android_vh_alloc_pages_failure_bypass __traceiter_android_vh_alloc_pages_reclaim_bypass + __traceiter_android_rvh_alloc_workqueue __traceiter_android_vh_alter_mutex_list_add __traceiter_android_vh_binder_alloc_new_buf_locked __traceiter_android_vh_binder_buffer_release @@ -345,6 +347,7 @@ __tracepoint_android_vh_alloc_oem_binder_struct __tracepoint_android_vh_alloc_pages_failure_bypass __tracepoint_android_vh_alloc_pages_reclaim_bypass + __tracepoint_android_rvh_alloc_workqueue __tracepoint_android_vh_alter_mutex_list_add __tracepoint_android_vh_binder_alloc_new_buf_locked __tracepoint_android_vh_binder_buffer_release @@ -519,3 +522,13 @@ xt_register_match xt_unregister_match zero_pfn + crypto_register_scomp + crypto_unregister_scomp + zstd_get_params + zstd_compress_cctx + zstd_is_error + zstd_decompress_dctx + zstd_cctx_workspace_bound + zstd_init_cctx + zstd_dctx_workspace_bound + zstd_init_dctx diff --git a/android/abi_gki_aarch64_pixel b/android/abi_gki_aarch64_pixel index 2350694533f66..910fc5d443a27 100644 --- a/android/abi_gki_aarch64_pixel +++ b/android/abi_gki_aarch64_pixel @@ -42,6 +42,7 @@ argv_split arm64_use_ng_mappings __arm_smccc_smc + __arm_smccc_sve_check async_schedule_node_domain async_synchronize_full_domain atomic_notifier_call_chain @@ -54,9 +55,19 @@ balance_push_callback bcmp bin2hex + __bio_add_page + bio_add_page + bio_alloc_bioset + bio_chain + bio_endio + bio_end_io_acct_remapped + bio_init + bio_put + bio_start_io_acct __bitmap_andnot __bitmap_clear __bitmap_equal + bitmap_find_free_region bitmap_find_next_zero_area_off bitmap_free bitmap_from_arr32 @@ -65,14 +76,27 @@ bitmap_parselist bitmap_parse_user bitmap_print_to_pagebuf + bitmap_release_region __bitmap_set bitmap_to_arr32 __bitmap_weight bitmap_zalloc + __blk_alloc_disk + blk_check_plugged + blkdev_get_by_dev + blkdev_put blk_execute_rq_nowait blk_get_queue blk_mq_free_request blk_put_queue + blk_queue_flag_clear + 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_write_zeroes_sectors + blk_queue_physical_block_size blk_queue_update_dma_alignment blk_rq_map_user_io blk_rq_unmap_user @@ -121,6 +145,7 @@ class_unregister cleancache_register_ops clear_page + __ClearPageMovable clk_disable clk_enable clk_get @@ -239,9 +264,12 @@ crypto_aead_setauthsize crypto_aead_setkey crypto_alloc_aead + crypto_alloc_base crypto_alloc_shash crypto_alloc_skcipher crypto_alloc_sync_skcipher + crypto_comp_compress + crypto_comp_decompress crypto_destroy_tfm __crypto_memneq crypto_req_done @@ -282,6 +310,7 @@ default_llseek deferred_free delayed_work_timer_fn + del_gendisk desc_to_gpio destroy_workqueue dev_addr_mod @@ -312,6 +341,7 @@ dev_get_by_index dev_get_by_name device_add + device_add_disk device_add_groups device_create device_create_file @@ -502,6 +532,7 @@ dma_direct_free dmaengine_unmap_put dma_fence_add_callback + dma_fence_allocate_private_stub dma_fence_array_ops dma_fence_context_alloc dma_fence_default_wait @@ -555,6 +586,7 @@ down_read_trylock down_trylock down_write + d_path dput drain_workqueue driver_for_each_device @@ -780,6 +812,7 @@ drop_reasons_unregister_subsys dump_backtrace dump_stack + dump_tasks dw_handle_msi_irq dw_pcie_find_capability dw_pcie_host_init @@ -814,6 +847,9 @@ __fdget fd_install fget + file_path + filp_close + filp_open_block _find_first_bit _find_first_zero_bit find_get_pid @@ -822,11 +858,14 @@ find_pid_ns find_task_by_vpid find_vma_intersection + find_vpid finish_wait firmware_request_nowarn + flush_dcache_page flush_delayed_work flush_work __flush_workqueue + __folio_lock __folio_put fortify_panic fput @@ -847,6 +886,7 @@ freq_qos_add_request freq_qos_remove_request freq_qos_update_request + fs_bio_set fsnotify __fsnotify_parent full_name_hash @@ -857,6 +897,7 @@ fwnode_property_present fwnode_property_read_string fwnode_property_read_u32_array + fwnode_typec_mux_get fwnode_typec_switch_get gcd generic_file_llseek @@ -894,6 +935,7 @@ get_sg_io_hdr __get_task_comm get_task_cred + get_task_mm get_thermal_instance get_unused_fd_flags get_user_pages @@ -1252,6 +1294,8 @@ kvfree kvfree_call_rcu kvmalloc_node + kvm_iommu_init_hyp + kvm_iommu_register_driver led_classdev_register_ext led_classdev_unregister led_init_default_state_get @@ -1269,12 +1313,14 @@ loops_per_jiffy mac_pton mas_empty_area_rev + mas_find max_load_balance_interval mbox_chan_received_data mbox_controller_register mbox_controller_unregister mbox_free_channel mbox_request_channel + mbox_request_channel_byname mbox_send_message memchr memchr_inv @@ -1295,6 +1341,7 @@ memremap mem_section memset + memset64 __memset_io memstart_addr memunmap @@ -1321,6 +1368,7 @@ __mmap_lock_do_trace_released __mmap_lock_do_trace_start_locking __mmdrop + mmput mod_delayed_work_on mod_timer __module_get @@ -1485,6 +1533,7 @@ param_array_ops param_get_int param_get_string + param_get_uint param_ops_bool param_ops_byte param_ops_charp @@ -1495,6 +1544,7 @@ param_ops_ulong param_set_copystring param_set_int + param_set_uint_minmax pci_alloc_irq_vectors pci_alloc_irq_vectors_affinity pci_assign_resource @@ -1576,8 +1626,10 @@ pktgen_xfrm_outer_mode_output pkvm_iommu_resume pkvm_iommu_suspend + __pkvm_load_el2_module __pkvm_topup_hyp_alloc __pkvm_topup_hyp_alloc_mgt + __pkvm_topup_hyp_alloc_mgt_gfp platform_bus_type platform_device_add platform_device_add_data @@ -1662,6 +1714,7 @@ push_cpu_stop __put_cred put_device + put_disk put_iova_domain __put_net put_pid @@ -1669,7 +1722,12 @@ __put_task_struct put_unused_fd put_vaddr_frames + pwm_apply_might_sleep pwm_apply_state + pwmchip_add + pwmchip_remove + pwm_get_chip_data + pwm_set_chip_data queue_delayed_work_on queue_work_on radix_tree_insert @@ -1728,6 +1786,7 @@ regcache_drop_region regcache_mark_dirty regcache_sync + __register_blkdev __register_chrdev register_chrdev_region register_console @@ -1787,6 +1846,7 @@ regulator_set_mode regulator_set_voltage regulator_set_voltage_sel_regmap + regulator_sync_voltage regulator_unregister release_firmware __release_region @@ -1883,11 +1943,14 @@ seq_release_private seq_vprintf seq_write + set_capacity + set_capacity_and_notify set_cpus_allowed_ptr set_freezable set_normalized_timespec64 set_page_dirty set_page_dirty_lock + __SetPageMovable set_task_cpu set_user_nice sg_alloc_table @@ -2099,12 +2162,15 @@ strsep strspn strstr + submit_bio + submit_bio_wait subsys_system_register suspend_set_ops __sw_hweight16 __sw_hweight32 __sw_hweight64 __sw_hweight8 + sync_blockdev sync_file_create sync_file_get_fence synchronize_irq @@ -2170,6 +2236,7 @@ teo_cpu_get_util_threshold teo_cpu_set_util_threshold thermal_cdev_update + thermal_cooling_device_register thermal_cooling_device_unregister thermal_of_cooling_device_register thermal_pressure @@ -2185,6 +2252,7 @@ thermal_zone_get_trip thermal_zone_get_zone_by_name thread_group_cputime_adjusted + tick_nohz_get_idle_calls_cpu time64_to_tm timer_delete timer_delete_sync @@ -2220,6 +2288,7 @@ __traceiter_android_rvh_remove_entity_load_avg __traceiter_android_rvh_rtmutex_prepare_setprio __traceiter_android_rvh_sched_newidle_balance + __traceiter_android_rvh_sched_setaffinity __traceiter_android_rvh_select_task_rq_fair __traceiter_android_rvh_select_task_rq_rt __traceiter_android_rvh_set_cpus_allowed_by_task @@ -2228,6 +2297,7 @@ __traceiter_android_rvh_set_task_cpu __traceiter_android_rvh_set_user_nice_locked __traceiter_android_rvh_tick_entry + __traceiter_android_rvh_try_to_wake_up_success __traceiter_android_rvh_uclamp_eff_get __traceiter_android_rvh_ufs_complete_init __traceiter_android_rvh_ufs_reprogram_all_keys @@ -2247,11 +2317,13 @@ __traceiter_android_vh_early_resume_begin __traceiter_android_vh_enable_thermal_genl_check __traceiter_android_vh_ipi_stop + __traceiter_android_vh_mm_kcompactd_cpu_online __traceiter_android_vh_prio_inheritance __traceiter_android_vh_prio_restore __traceiter_android_vh_resume_end __traceiter_android_vh_scheduler_tick __traceiter_android_vh_setscheduler_uclamp + __traceiter_android_vh_set_task_comm __traceiter_android_vh_si_meminfo_adjust __traceiter_android_vh_sysrq_crash __traceiter_android_vh_uclamp_validate @@ -2317,6 +2389,7 @@ __tracepoint_android_rvh_remove_entity_load_avg __tracepoint_android_rvh_rtmutex_prepare_setprio __tracepoint_android_rvh_sched_newidle_balance + __tracepoint_android_rvh_sched_setaffinity __tracepoint_android_rvh_select_task_rq_fair __tracepoint_android_rvh_select_task_rq_rt __tracepoint_android_rvh_set_cpus_allowed_by_task @@ -2325,6 +2398,7 @@ __tracepoint_android_rvh_set_task_cpu __tracepoint_android_rvh_set_user_nice_locked __tracepoint_android_rvh_tick_entry + __tracepoint_android_rvh_try_to_wake_up_success __tracepoint_android_rvh_uclamp_eff_get __tracepoint_android_rvh_ufs_complete_init __tracepoint_android_rvh_ufs_reprogram_all_keys @@ -2344,11 +2418,13 @@ __tracepoint_android_vh_early_resume_begin __tracepoint_android_vh_enable_thermal_genl_check __tracepoint_android_vh_ipi_stop + __tracepoint_android_vh_mm_kcompactd_cpu_online __tracepoint_android_vh_prio_inheritance __tracepoint_android_vh_prio_restore __tracepoint_android_vh_resume_end __tracepoint_android_vh_scheduler_tick __tracepoint_android_vh_setscheduler_uclamp + __tracepoint_android_vh_set_task_comm __tracepoint_android_vh_si_meminfo_adjust __tracepoint_android_vh_sysrq_crash __tracepoint_android_vh_uclamp_validate @@ -2406,6 +2482,7 @@ tty_port_tty_get typec_mux_get_drvdata typec_mux_register + typec_mux_set typec_switch_get_drvdata typec_switch_register typec_switch_set @@ -2438,8 +2515,10 @@ ufshcd_remove ufshcd_system_resume ufshcd_system_suspend + unlock_page unmap_mapping_range unpin_user_page + unregister_blkdev __unregister_chrdev unregister_chrdev_region unregister_inet6addr_notifier @@ -2583,6 +2662,8 @@ vmalloc_user vmap vmf_insert_pfn_prot + vm_node_stat + vm_unmapped_area vprintk vprintk_emit vring_del_virtqueue @@ -2638,4 +2719,20 @@ xhci_init_driver xhci_resume 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 + zs_compact + zs_create_pool + zs_destroy_pool + zs_free + zs_get_total_pages + zs_huge_class_size + zs_malloc + zs_map_object + zs_pool_stats + zs_unmap_object diff --git a/android/abi_gki_aarch64_pixel_watch b/android/abi_gki_aarch64_pixel_watch new file mode 100644 index 0000000000000..0d62d6a548c68 --- /dev/null +++ b/android/abi_gki_aarch64_pixel_watch @@ -0,0 +1,2407 @@ +[abi_symbol_list] + activate_task + add_cpu + add_device_randomness + add_taint + add_timer + add_uevent_var + add_wait_queue + adjust_managed_page_count + aes_encrypt + aes_expandkey + alarm_cancel + alarm_init + alarm_start_relative + alarmtimer_get_rtcdev + alarm_try_to_cancel + alloc_chrdev_region + alloc_etherdev_mqs + alloc_io_pgtable_ops + alloc_netdev_mqs + __alloc_pages + __alloc_percpu + __alloc_skb + alloc_skb_with_frags + alloc_workqueue + alt_cb_patch_nops + amba_bustype + amba_driver_register + amba_driver_unregister + android_rvh_probe_register + anon_inode_getfile + __arch_copy_from_user + __arch_copy_to_user + arch_freq_scale + arch_timer_read_counter + argv_free + argv_split + arm64_use_ng_mappings + __arm_smccc_smc + atomic_notifier_call_chain + atomic_notifier_chain_register + atomic_notifier_chain_unregister + autoremove_wake_function + available_idle_cpu + backlight_device_get_by_type + backlight_device_register + backlight_device_set_brightness + backlight_device_unregister + __balance_callbacks + balance_push_callback + bcmp + bitmap_allocate_region + __bitmap_clear + bitmap_find_next_zero_area_off + __bitmap_or + bitmap_print_to_pagebuf + bitmap_release_region + __bitmap_set + blocking_notifier_call_chain + blocking_notifier_chain_register + blocking_notifier_chain_unregister + bpf_trace_run1 + bpf_trace_run10 + bpf_trace_run11 + bpf_trace_run12 + bpf_trace_run2 + bpf_trace_run3 + bpf_trace_run4 + bpf_trace_run5 + bpf_trace_run6 + bpf_trace_run7 + bpf_trace_run8 + bpf_trace_run9 + build_skb + bus_find_device + bus_for_each_dev + bus_get_dev_root + bus_register + bus_register_notifier + bus_unregister + bus_unregister_notifier + cache_line_size + cancel_delayed_work + cancel_delayed_work_sync + cancel_work_sync + capable + cdev_add + cdev_alloc + cdev_del + cdev_device_add + cdev_device_del + cdev_init + cgroup_path_ns + cgroup_taskset_first + cgroup_taskset_next + __check_object_size + check_preempt_curr + check_zeroed_user + class_create + class_destroy + class_find_device + class_for_each_device + class_register + class_unregister + cleanup_srcu_struct + clear_page + clk_bulk_disable + clk_bulk_enable + clk_bulk_prepare + clk_bulk_unprepare + __clk_determine_rate + clk_disable + clk_enable + clk_fixed_factor_ops + clk_fixed_rate_ops + clk_get + __clk_get_hw + __clk_get_name + clk_get_parent + clk_get_rate + clk_hw_determine_rate_no_reparent + clk_hw_get_flags + clk_hw_get_name + clk_hw_get_num_parents + clk_hw_get_parent + clk_hw_get_parent_by_index + clk_hw_get_rate + clk_hw_get_rate_range + clk_hw_is_enabled + clk_hw_is_prepared + clk_hw_register + clk_hw_round_rate + clk_hw_unregister + __clk_is_enabled + __clk_mux_determine_rate_closest + clk_prepare + clk_put + clk_restore_context + clk_round_rate + clk_set_parent + clk_set_rate + clk_sync_state + clk_unprepare + close_fd + cma_alloc + cma_release + compat_ptr_ioctl + complete + complete_all + completion_done + component_add + component_bind_all + component_del + component_master_add_with_match + component_master_del + component_match_add_release + component_unbind_all + config_ep_by_speed + configfs_register_group + configfs_register_subsystem + configfs_unregister_group + configfs_unregister_subsystem + config_group_init + config_group_init_type_name + config_item_get + config_item_put + config_item_set_name + console_stop + console_suspend_enabled + __const_udelay + consume_skb + contig_page_data + __copy_overflow + __cpu_active_mask + cpu_all_bits + cpu_bit_bitmap + cpu_busy_with_softirqs + __cpu_dying_mask + cpufreq_cpu_get + cpufreq_cpu_get_raw + cpufreq_cpu_put + cpufreq_disable_fast_switch + cpufreq_driver_fast_switch + cpufreq_driver_resolve_freq + __cpufreq_driver_target + cpufreq_enable_boost_support + cpufreq_enable_fast_switch + cpufreq_freq_attr_scaling_available_freqs + cpufreq_freq_attr_scaling_boost_freqs + cpufreq_generic_frequency_table_verify + cpufreq_get_driver_data + cpufreq_quick_get + cpufreq_quick_get_max + cpufreq_register_driver + cpufreq_register_governor + cpufreq_unregister_driver + __cpuhp_remove_state + __cpuhp_setup_state + __cpuhp_setup_state_cpuslocked + cpuidle_governor_latency_req + cpuidle_register_governor + cpu_irqtime + cpu_latency_qos_add_request + cpu_latency_qos_remove_request + cpu_latency_qos_update_request + cpumask_any_and_distribute + cpu_number + __cpu_online_mask + cpu_pm_register_notifier + cpu_pm_unregister_notifier + __cpu_possible_mask + __cpu_present_mask + cpupri_find_fitness + cpu_scale + cpus_read_lock + cpus_read_unlock + cpu_subsys + cpu_topology + crc32_le + crc_ccitt_false + crypto_aead_encrypt + crypto_aead_setauthsize + crypto_aead_setkey + crypto_ahash_digest + crypto_ahash_setkey + crypto_alloc_aead + crypto_alloc_ahash + crypto_alloc_shash + crypto_alloc_skcipher + crypto_alloc_sync_skcipher + crypto_dequeue_request + crypto_destroy_tfm + crypto_enqueue_request + crypto_init_queue + crypto_register_aead + crypto_register_ahash + crypto_register_rng + crypto_register_rngs + crypto_register_skcipher + crypto_shash_digest + crypto_shash_final + crypto_shash_setkey + crypto_shash_update + crypto_skcipher_decrypt + crypto_skcipher_encrypt + crypto_skcipher_setkey + crypto_unregister_aead + crypto_unregister_ahash + crypto_unregister_rng + crypto_unregister_rngs + crypto_unregister_skcipher + css_next_child + csum_ipv6_magic + csum_partial + csum_tcpudp_nofold + _ctype + datagram_poll + deactivate_task + debugfs_attr_read + debugfs_attr_write + debugfs_create_atomic_t + debugfs_create_blob + debugfs_create_bool + debugfs_create_devm_seqfile + debugfs_create_dir + debugfs_create_file + debugfs_create_file_unsafe + debugfs_create_u16 + debugfs_create_u32 + debugfs_create_u64 + debugfs_create_u8 + debugfs_create_ulong + debugfs_create_x32 + debugfs_create_x64 + debugfs_create_x8 + debugfs_file_get + debugfs_file_put + debugfs_lookup + debugfs_remove + debugfs_rename + dec_node_page_state + default_llseek + deferred_free + delayed_work_timer_fn + destroy_workqueue + dev_addr_mod + dev_alloc_name + __dev_change_net_namespace + dev_close + dev_coredumpm + dev_coredumpv + _dev_crit + dev_driver_string + _dev_emerg + _dev_err + dev_err_probe + devfreq_add_device + devfreq_get_devfreq_by_node + devfreq_remove_device + devfreq_resume_device + devfreq_suspend_device + __dev_fwnode + __dev_get_by_index + dev_get_by_index + dev_get_by_name + dev_get_by_name_rcu + dev_get_regmap + dev_get_stats + device_add + device_add_groups + device_create + device_create_bin_file + device_create_file + device_create_with_groups + device_del + device_destroy + device_find_child + device_for_each_child + device_get_child_node_count + device_get_dma_attr + device_get_match_data + device_get_next_child_node + device_initialize + device_link_add + device_link_del + device_match_fwnode + device_match_name + device_property_present + device_property_read_string + device_property_read_u16_array + device_property_read_u32_array + device_register + device_remove_bin_file + device_remove_file + device_rename + device_set_wakeup_capable + device_set_wakeup_enable + device_show_int + device_store_int + device_unregister + device_wakeup_disable + device_wakeup_enable + _dev_info + dev_kfree_skb_any_reason + __devm_add_action + devm_bitmap_zalloc + devm_blk_crypto_profile_init + devm_clk_bulk_get + devm_clk_bulk_get_all + devm_clk_get + devm_clk_get_enabled + devm_clk_get_optional + devm_clk_get_optional_enabled + devm_clk_hw_register + devm_clk_put + devm_clk_register + devm_device_add_group + devm_extcon_dev_allocate + devm_extcon_dev_register + devm_extcon_dev_unregister + devm_extcon_register_notifier + devm_free_irq + devm_gen_pool_create + devm_gpiod_get + devm_gpiod_get_array + devm_gpiod_get_optional + devm_gpio_request + devm_gpio_request_one + devm_hwrng_register + devm_hwspin_lock_register + devm_iio_channel_get + devm_iio_device_alloc + __devm_iio_device_register + devm_input_allocate_device + devm_ioremap + devm_ioremap_resource + devm_ioremap_wc + devm_iounmap + devm_kasprintf + devm_kfree + devm_kmalloc + devm_kmemdup + devm_krealloc + devm_kstrdup + devm_kstrdup_const + devm_mbox_controller_register + devm_mfd_add_devices + devm_nvmem_cell_get + devm_nvmem_device_get + devm_nvmem_register + devm_of_clk_add_hw_provider + devm_of_icc_get + devm_of_platform_populate + devm_pinctrl_get + devm_pinctrl_put + devm_pinctrl_register + devm_platform_get_and_ioremap_resource + devm_platform_ioremap_resource + devm_power_supply_register + devm_pwm_get + devm_qcom_smem_state_get + devm_regmap_add_irq_chip + devm_regmap_del_irq_chip + devm_regmap_field_alloc + __devm_regmap_init + __devm_regmap_init_i2c + __devm_regmap_init_mmio_clk + __devm_regmap_init_spmi_ext + devm_regulator_bulk_get + devm_regulator_get + devm_regulator_get_exclusive + devm_regulator_get_optional + devm_regulator_put + devm_regulator_register + devm_regulator_register_notifier + devm_request_any_context_irq + __devm_request_region + devm_request_threaded_irq + __devm_reset_control_get + devm_reset_controller_register + devm_rtc_allocate_device + __devm_rtc_register_device + devm_snd_soc_register_card + devm_snd_soc_register_component + devm_tegra_memory_controller_get + devm_thermal_of_cooling_device_register + devm_thermal_of_zone_register + devm_usb_get_phy_by_node + _dev_notice + dev_pm_clear_wake_irq + dev_pm_domain_attach_by_name + dev_pm_domain_detach + dev_pm_genpd_add_notifier + dev_pm_genpd_remove_notifier + dev_pm_genpd_set_next_wakeup + dev_pm_genpd_set_performance_state + dev_pm_opp_add_dynamic + dev_pm_opp_adjust_voltage + dev_pm_opp_clear_config + dev_pm_opp_disable + dev_pm_opp_enable + dev_pm_opp_find_freq_ceil + dev_pm_opp_find_freq_exact + dev_pm_opp_find_freq_floor + dev_pm_opp_get_opp_count + dev_pm_opp_get_voltage + dev_pm_opp_of_add_table + dev_pm_opp_of_cpumask_remove_table + dev_pm_opp_of_find_icc_paths + dev_pm_opp_of_register_em + dev_pm_opp_of_remove_table + dev_pm_opp_put + dev_pm_opp_remove_all_dynamic + dev_pm_opp_set_config + dev_pm_opp_set_opp + dev_pm_opp_set_rate + dev_pm_opp_set_sharing_cpus + dev_pm_qos_add_notifier + dev_pm_qos_add_request + dev_pm_qos_remove_notifier + dev_pm_qos_remove_request + dev_pm_qos_update_request + dev_pm_set_wake_irq + dev_printk_emit + __dev_queue_xmit + devres_add + __devres_alloc_node + devres_free + devres_release + dev_set_name + dev_vprintk_emit + _dev_warn + disable_irq + disable_irq_nosync + disable_percpu_irq + divider_get_val + divider_recalc_rate + divider_ro_round_rate_parent + divider_round_rate_parent + dma_alloc_attrs + dma_alloc_pages + dma_async_device_register + dma_async_device_unregister + dma_async_tx_descriptor_init + dma_buf_attach + dma_buf_begin_cpu_access + dma_buf_begin_cpu_access_partial + dma_buf_detach + dma_buf_end_cpu_access + dma_buf_end_cpu_access_partial + dma_buf_export + dma_buf_fd + dma_buf_get + dma_buf_map_attachment_unlocked + dma_buf_put + dma_buf_unmap_attachment_unlocked + dma_buf_vmap_unlocked + dma_buf_vunmap_unlocked + dma_fence_add_callback + dma_fence_array_create + dma_fence_array_ops + dma_fence_chain_init + dma_fence_context_alloc + dma_fence_default_wait + dma_fence_enable_sw_signaling + dma_fence_free + dma_fence_get_status + dma_fence_init + dma_fence_release + dma_fence_remove_callback + dma_fence_signal + dma_fence_signal_locked + dma_fence_signal_timestamp_locked + dma_fence_wait_timeout + dma_free_attrs + dma_free_pages + dma_get_sgtable_attrs + dma_get_slave_channel + dma_heap_add + dma_heap_buffer_alloc + dma_heap_buffer_free + dma_heap_find + dma_heap_get_dev + dma_heap_get_drvdata + dma_heap_get_name + dmam_alloc_attrs + dma_map_page_attrs + dma_map_resource + dma_map_sg_attrs + dma_map_sgtable + dmam_free_coherent + dma_mmap_attrs + dma_release_channel + dma_request_chan + dma_resv_fini + dma_resv_get_singleton + dma_resv_init + dma_resv_wait_timeout + dma_set_coherent_mask + dma_set_mask + dma_sync_sg_for_cpu + dma_sync_sg_for_device + dma_sync_single_for_cpu + dma_sync_single_for_device + dma_unmap_page_attrs + dma_unmap_sg_attrs + do_trace_netlink_extack + double_rq_lock + do_wait_intr + down + down_interruptible + down_read + down_timeout + down_write + d_path + dput + drain_workqueue + driver_find_device + driver_register + driver_set_override + driver_unregister + drm_add_edid_modes + drm_atomic_bridge_chain_disable + drm_atomic_bridge_chain_enable + drm_atomic_bridge_chain_post_disable + drm_atomic_bridge_chain_pre_enable + drm_atomic_commit + drm_atomic_get_connector_state + drm_atomic_get_crtc_state + drm_atomic_get_plane_state + drm_atomic_helper_check + drm_atomic_helper_cleanup_planes + drm_atomic_helper_commit_duplicated_state + drm_atomic_helper_commit_hw_done + drm_atomic_helper_commit_modeset_disables + drm_atomic_helper_commit_modeset_enables + drm_atomic_helper_commit_planes + __drm_atomic_helper_connector_destroy_state + __drm_atomic_helper_connector_duplicate_state + __drm_atomic_helper_connector_reset + __drm_atomic_helper_crtc_destroy_state + __drm_atomic_helper_crtc_duplicate_state + drm_atomic_helper_dirtyfb + drm_atomic_helper_disable_plane + drm_atomic_helper_duplicate_state + drm_atomic_helper_page_flip + __drm_atomic_helper_plane_duplicate_state + drm_atomic_helper_prepare_planes + drm_atomic_helper_set_config + drm_atomic_helper_shutdown + drm_atomic_helper_swap_state + drm_atomic_helper_update_legacy_modeset_state + drm_atomic_helper_update_plane + drm_atomic_helper_wait_for_fences + drm_atomic_helper_wait_for_vblanks + drm_atomic_set_crtc_for_connector + drm_atomic_set_crtc_for_plane + drm_atomic_set_fb_for_plane + drm_atomic_set_mode_for_crtc + drm_atomic_state_alloc + drm_atomic_state_clear + drm_atomic_state_default_clear + drm_atomic_state_default_release + __drm_atomic_state_free + drm_atomic_state_init + drm_bridge_attach + drm_bridge_chain_mode_set + drm_client_init + drm_client_modeset_commit_locked + drm_client_register + drm_compat_ioctl + drm_connector_attach_encoder + drm_connector_cleanup + drm_connector_init + drm_connector_list_iter_begin + drm_connector_list_iter_end + drm_connector_list_iter_next + drm_connector_unregister + drm_connector_update_edid_property + drm_crtc_cleanup + drm_crtc_handle_vblank + drm_crtc_init_with_planes + drm_crtc_send_vblank_event + drm_crtc_set_max_vblank_count + drm_crtc_vblank_off + drm_crtc_vblank_on + drm_crtc_vblank_reset + drm_crtc_wait_one_vblank + ___drm_dbg + __drm_debug + drm_detect_hdmi_monitor + drm_dev_alloc + __drm_dev_dbg + drm_dev_printk + drm_dev_put + drm_dev_register + drm_dev_unregister + drm_encoder_cleanup + drm_encoder_init + __drm_err + drm_event_reserve_init_locked + drm_format_info + drm_framebuffer_init + drm_framebuffer_lookup + drm_gem_create_mmap_offset + drm_gem_fb_create_handle + drm_gem_fb_destroy + drm_gem_fb_get_obj + drm_gem_get_pages + drm_gem_handle_create + drm_gem_mmap + drm_gem_mmap_obj + drm_gem_object_free + drm_gem_object_init + drm_gem_object_lookup + drm_gem_object_release + drm_gem_private_object_init + drm_gem_put_pages + drm_gem_vm_close + drm_gem_vm_open + drm_get_edid + drm_get_format_info + drm_helper_mode_fill_fb_struct + drm_helper_probe_single_connector_modes + drm_ioctl + drm_is_current_master + drm_kms_helper_poll_disable + drm_kms_helper_poll_enable + drm_kms_helper_poll_fini + drm_kms_helper_poll_init + drm_mm_init + drm_mm_insert_node_in_range + drmm_mode_config_init + drm_mm_remove_node + drm_mm_takedown + drm_mode_config_cleanup + drm_mode_config_reset + drm_mode_copy + drm_mode_debug_printmodeline + drm_mode_duplicate + drm_mode_equal + drm_mode_match + drm_mode_object_find + drm_mode_object_get + drm_mode_object_put + drm_mode_probed_add + drm_modeset_acquire_fini + drm_modeset_acquire_init + drm_modeset_backoff + drm_mode_set_crtcinfo + drm_modeset_drop_locks + drm_modeset_lock + drm_modeset_lock_all_ctx + drm_mode_vrefresh + drm_object_attach_property + drm_object_property_set_value + drm_of_component_match_add + drm_open + drm_panel_add + drm_panel_init + drm_panel_remove + drm_plane_cleanup + drm_plane_create_rotation_property + drm_poll + drm_prime_gem_destroy + drm_prime_pages_to_sg + drm_printf + __drm_printfn_coredump + drm_property_blob_get + drm_property_blob_put + drm_property_create + drm_property_create_bitmask + drm_property_create_blob + drm_property_create_enum + drm_property_create_range + drm_property_lookup_blob + __drm_puts_coredump + drm_read + drm_release + drm_rotation_simplify + drm_send_event_locked + drm_set_preferred_mode + drm_universal_plane_init + drm_vblank_init + dst_release + dump_stack + __dynamic_dev_dbg + __dynamic_pr_debug + emergency_restart + enable_irq + enable_percpu_irq + ether_setup + eth_mac_addr + eth_type_trans + extcon_get_edev_by_phandle + extcon_get_edev_name + extcon_get_property + extcon_get_state + extcon_register_notifier + extcon_set_property + extcon_set_property_capability + extcon_set_state + extcon_set_state_sync + extcon_unregister_notifier + fd_install + fget + _find_first_bit + _find_first_zero_bit + _find_next_bit + _find_next_zero_bit + find_task_by_vpid + find_vma + find_vma_intersection + find_vpid + finish_wait + firmware_request_nowarn + flush_delayed_work + flush_work + __flush_workqueue + __folio_put + fortify_panic + fput + free_io_pgtable_ops + free_irq + free_netdev + __free_pages + free_pages + free_percpu + free_percpu_irq + freezer_active + freezing_slow_path + freq_qos_add_request + freq_qos_remove_request + freq_qos_update_request + full_name_hash + fwnode_find_reference + fwnode_get_name + fwnode_get_next_child_node + fwnode_handle_get + fwnode_handle_put + fwnode_property_present + fwnode_property_read_string + fwnode_property_read_u32_array + gcd + generic_device_group + generic_file_llseek + generic_handle_domain_irq + generic_handle_irq + geni_icc_disable + geni_icc_enable + geni_icc_get + geni_icc_set_bw + geni_se_clk_freq_match + geni_se_config_packing + geni_se_get_qup_hw_version + geni_se_init + geni_se_resources_off + geni_se_resources_on + geni_se_rx_dma_prep + geni_se_rx_dma_unprep + geni_se_select_mode + geni_se_tx_dma_prep + geni_se_tx_dma_unprep + genlmsg_multicast_allns + genlmsg_put + genl_register_family + genl_unregister_family + gen_pool_add_owner + gen_pool_alloc_algo_owner + gen_pool_avail + gen_pool_best_fit + gen_pool_create + gen_pool_destroy + gen_pool_first_fit_order_align + gen_pool_free_owner + gen_pool_has_addr + gen_pool_set_algo + gen_pool_size + gen_pool_virt_to_phys + getboottime64 + get_cpu_device + get_device + __get_free_pages + get_governor_parent_kobj + get_net_ns_by_fd + get_net_ns_by_pid + get_pid_task + get_random_bytes + get_random_u32 + __get_task_comm + get_task_mm + get_task_pid + get_unmapped_area + get_unused_fd_flags + get_user_ifreq + get_user_pages + get_zeroed_page + gov_attr_set_init + gov_attr_set_put + governor_sysfs_ops + gpiochip_add_data_with_key + gpiochip_add_pin_range + gpiochip_disable_irq + gpiochip_enable_irq + gpiochip_generic_free + gpiochip_generic_request + gpiochip_get_data + gpiochip_irq_relres + gpiochip_irq_reqres + gpiochip_line_is_valid + gpiochip_lock_as_irq + gpiochip_populate_parent_fwspec_fourcell + gpiochip_remove + gpiochip_unlock_as_irq + gpiod_direction_input + gpiod_direction_output + gpiod_direction_output_raw + gpiod_get_array_value + gpiod_get_optional + gpiod_get_raw_value + gpiod_get_raw_value_cansleep + gpiod_get_value + gpiod_set_raw_value + gpiod_set_value + gpiod_set_value_cansleep + gpiod_to_irq + gpio_free + gpio_request + gpio_request_one + gpio_to_desc + gro_cells_destroy + gro_cells_init + gro_cells_receive + handle_bad_irq + handle_edge_irq + handle_fasteoi_ack_irq + handle_fasteoi_irq + handle_level_irq + handle_nested_irq + handle_simple_irq + handle_sysrq + hashlen_string + hex2bin + hex_dump_to_buffer + hex_to_bin + housekeeping_cpumask + housekeeping_overridden + housekeeping_test_cpu + hrtimer_active + hrtimer_cancel + __hrtimer_get_remaining + hrtimer_init + hrtimer_start_range_ns + hrtimer_try_to_cancel + hwrng_register + hwrng_unregister + hwspin_lock_bust + hwspin_lock_free + hwspin_lock_request_specific + __hwspin_lock_timeout + __hwspin_unlock + i2c_adapter_type + i2c_add_adapter + i2c_bus_type + i2c_del_adapter + i2c_del_driver + i2c_find_device_by_fwnode + i2c_for_each_dev + i2c_get_adapter + i2c_get_dma_safe_msg_buf + i2c_put_adapter + i2c_put_dma_safe_msg_buf + i2c_register_driver + i2c_smbus_xfer + i2c_transfer + i2c_transfer_buffer_flags + i2c_verify_client + icc_link_create + icc_node_add + icc_node_create + icc_nodes_remove + icc_provider_deregister + icc_provider_init + icc_provider_register + icc_put + icc_set_bw + icc_set_tag + ida_alloc_range + ida_destroy + ida_free + idr_alloc + idr_alloc_cyclic + idr_alloc_u32 + idr_destroy + idr_find + idr_for_each + idr_get_next + idr_preload + idr_remove + idr_replace + iio_channel_get + iio_channel_release + iio_device_alloc + iio_device_free + __iio_device_register + iio_device_unregister + iio_read_channel_processed + iio_write_channel_raw + in4_pton + in6_pton + inc_node_page_state + in_egroup_p + inet_csk_get_port + init_dummy_netdev + init_iova_domain + init_net + __init_rwsem + init_srcu_struct + __init_swait_queue_head + init_task + init_timer_key + init_uts_ns + init_wait_entry + __init_waitqueue_head + input_allocate_device + input_close_device + input_event + input_ff_create + input_ff_destroy + input_free_device + input_mt_init_slots + input_mt_report_pointer_emulation + input_mt_report_slot_state + input_mt_sync_frame + input_open_device + input_register_device + input_register_handle + input_register_handler + input_set_abs_params + input_set_capability + input_set_timestamp + input_unregister_device + input_unregister_handle + input_unregister_handler + interval_tree_insert + interval_tree_iter_first + interval_tree_iter_next + interval_tree_remove + int_sqrt + iomem_resource + iommu_alloc_resv_region + iommu_attach_device + iommu_detach_device + iommu_device_register + iommu_device_sysfs_add + iommu_device_sysfs_remove + iommu_device_unregister + iommu_dma_get_resv_regions + iommu_domain_alloc + iommu_domain_free + iommu_fwspec_add_ids + iommu_fwspec_free + iommu_get_domain_for_dev + iommu_get_msi_cookie + iommu_group_for_each_dev + iommu_group_get + iommu_group_get_iommudata + iommu_group_put + iommu_group_ref_get + iommu_group_set_iommudata + iommu_iova_to_phys + iommu_map + iommu_map_sg + iommu_present + iommu_put_resv_regions + iommu_report_device_fault + iommu_set_fault_handler + iommu_set_pgtable_quirks + iommu_unmap + __ioread32_copy + ioremap_prot + iounmap + __iowrite32_copy + ip_compute_csum + ip_route_output_flow + __ipv6_addr_type + ipv6_ext_hdr + ipv6_skip_exthdr + ipv6_stub + __irq_apply_affinity_hint + irq_check_status_bit + irq_chip_ack_parent + irq_chip_disable_parent + irq_chip_enable_parent + irq_chip_mask_parent + irq_chip_set_affinity_parent + irq_chip_set_parent_state + irq_chip_set_type_parent + irq_chip_set_vcpu_affinity_parent + irq_chip_set_wake_parent + irq_chip_unmask_parent + irq_create_mapping_affinity + irq_dispose_mapping + __irq_domain_add + irq_domain_alloc_irqs_parent + irq_domain_create_hierarchy + irq_domain_disconnect_hierarchy + irq_domain_free_irqs_common + irq_domain_remove + irq_domain_set_hwirq_and_chip + irq_domain_set_info + irq_domain_update_bus_token + irq_domain_xlate_onecell + irq_domain_xlate_twocell + irq_find_matching_fwspec + irq_get_irqchip_state + irq_get_irq_data + irq_modify_status + irq_of_parse_and_map + __irq_resolve_mapping + irq_set_affinity_notifier + irq_set_chained_handler_and_data + irq_set_chip_and_handler_name + irq_set_chip_data + irq_set_irqchip_state + irq_set_irq_type + irq_set_irq_wake + irq_set_parent + irq_to_desc + irq_work_queue + irq_work_queue_on + irq_work_sync + is_vmalloc_addr + iterate_fd + jiffies + jiffies_64 + jiffies_to_msecs + jiffies_to_usecs + kasan_flag_enabled + kasprintf + kernel_bind + kernel_connect + kernel_getsockname + kernel_kobj + kernel_recvmsg + kernel_restart + kernel_sendmsg + kernfs_find_and_get_ns + kernfs_notify + kernfs_put + key_put + keyring_alloc + __kfifo_alloc + __kfifo_free + __kfifo_in + __kfifo_init + __kfifo_out + kfree + kfree_const + kfree_sensitive + kfree_skb_reason + kimage_vaddr + kimage_voffset + __kmalloc + kmalloc_caches + kmalloc_large + kmalloc_node_trace + kmalloc_size_roundup + kmalloc_trace + kmem_cache_alloc + kmem_cache_create + kmem_cache_create_usercopy + kmem_cache_destroy + kmem_cache_free + kmemdup + kmsg_dump_get_buffer + kmsg_dump_get_line + kmsg_dump_rewind + kobject_add + kobject_create_and_add + kobject_del + kobject_init + kobject_init_and_add + kobject_put + kobject_set_name + kobject_uevent + kobject_uevent_env + kobj_sysfs_ops + krealloc + ksize + ksoftirqd + kstat_irqs_usr + kstrdup + kstrdup_const + kstrdup_quotable_cmdline + kstrndup + kstrtobool + kstrtoint + kstrtoint_from_user + kstrtoll + kstrtos8 + kstrtos8_from_user + kstrtou16 + kstrtou16_from_user + kstrtou8 + kstrtou8_from_user + kstrtouint + kstrtouint_from_user + kstrtoull + kstrtoull_from_user + kthread_bind_mask + kthread_cancel_delayed_work_sync + kthread_cancel_work_sync + kthread_complete_and_exit + kthread_create_on_node + kthread_create_worker + kthread_delayed_work_timer_fn + kthread_destroy_worker + kthread_flush_work + kthread_flush_worker + __kthread_init_worker + kthread_mod_delayed_work + kthread_queue_delayed_work + kthread_queue_work + kthread_should_stop + kthread_stop + kthread_worker_fn + ktime_get + ktime_get_coarse_with_offset + ktime_get_mono_fast_ns + ktime_get_raw + ktime_get_real_seconds + ktime_get_real_ts64 + ktime_get_with_offset + kvasprintf_const + kvfree + kvfree_call_rcu + kvmalloc_node + __list_add_valid_or_report + __list_del_entry_valid_or_report + list_sort + llist_add_batch + llist_reverse_order + __local_bh_enable_ip + lock_sock_nested + log_post_read_mmio + log_post_write_mmio + log_read_mmio + log_write_mmio + mac_pton + mas_find + match_string + mbox_client_txdone + mbox_free_channel + mbox_request_channel + mbox_send_message + __memcat_p + memchr + memcmp + memcpy + __memcpy_fromio + __memcpy_toio + memdup_user + memdup_user_nul + memmove + memory_read_from_buffer + memparse + mempool_alloc + mempool_alloc_slab + mempool_create + mempool_destroy + mempool_free + mempool_free_slab + memremap + mem_section + memset + __memset_io + memstart_addr + memunmap + migrate_swap + __migrate_task + mipi_dsi_create_packet + mipi_dsi_dcs_set_tear_off + mipi_dsi_dcs_write + mipi_dsi_host_register + mipi_dsi_host_unregister + misc_deregister + misc_register + __mmap_lock_do_trace_acquire_returned + __mmap_lock_do_trace_released + __mmap_lock_do_trace_start_locking + mmc_cqe_request_done + mmc_detect_change + mmc_of_parse + mmc_regulator_get_supply + mmc_regulator_set_ocr + mmc_regulator_set_vqmmc + mmc_send_tuning + mmc_set_data_timeout + mmc_sw_reset + mmc_wait_for_req + mmput + mod_delayed_work_on + mod_node_page_state + mod_timer + mod_timer_pending + __module_get + module_layout + module_put + __msecs_to_jiffies + msi_domain_get_virq + msleep + msleep_interruptible + mtree_load + __mutex_init + mutex_is_locked + mutex_lock + mutex_lock_interruptible + mutex_trylock + mutex_unlock + napi_complete_done + napi_disable + napi_enable + napi_gro_flush + napi_gro_receive + __napi_schedule + napi_schedule_prep + neigh_destroy + neigh_resolve_output + __netdev_alloc_skb + netdev_core_stats_alloc + netdev_err + netdev_rx_handler_register + netdev_rx_handler_unregister + netdev_state_change + netdev_update_features + netif_carrier_off + netif_carrier_on + netif_device_attach + netif_device_detach + netif_napi_add_weight + __netif_napi_del + netif_receive_skb + netif_receive_skb_list + __netif_rx + netif_rx + netif_tx_lock + netif_tx_stop_all_queues + netif_tx_unlock + netif_tx_wake_queue + netlink_broadcast + __netlink_kernel_create + netlink_kernel_release + netlink_register_notifier + netlink_unicast + netlink_unregister_notifier + net_ns_type_operations + nla_append + nla_find + nla_memcpy + __nla_parse + nla_put + nla_put_64bit + nla_put_nohdr + nla_reserve + nla_reserve_64bit + __nla_validate + __nlmsg_put + nonseekable_open + noop_llseek + nr_cpu_ids + nr_ipi_get + nr_irqs + ns_capable + nsecs_to_jiffies + ns_to_timespec64 + __num_online_cpus + nvmem_cell_get + nvmem_cell_put + nvmem_cell_read + nvmem_cell_read_u32 + nvmem_cell_write + nvmem_device_put + nvmem_device_read + nvmem_device_write + of_address_to_resource + of_alias_from_compatible + of_alias_get_id + of_clk_add_hw_provider + of_clk_add_provider + of_clk_del_provider + of_clk_hw_simple_get + of_clk_src_onecell_get + of_clk_src_simple_get + of_count_phandle_with_args + of_cpu_device_node_get + of_cpu_node_to_id + of_device_get_match_data + of_device_is_available + of_device_is_compatible + of_device_uevent_modalias + of_dma_configure_id + of_dma_controller_free + of_dma_controller_register + of_dma_is_coherent + of_drm_find_bridge + of_drm_find_panel + of_find_compatible_node + of_find_device_by_node + of_find_matching_node_and_match + of_find_node_by_name + of_find_node_by_phandle + of_find_node_opts_by_path + of_find_node_with_property + of_find_property + of_fwnode_ops + of_genpd_add_provider_onecell + of_genpd_add_provider_simple + of_genpd_del_provider + __of_get_address + of_get_child_by_name + of_get_cpu_node + of_get_named_gpio + of_get_next_available_child + of_get_next_child + of_get_next_parent + of_get_parent + of_get_property + of_get_regulator_init_data + of_get_required_opp_performance_state + of_graph_get_next_endpoint + of_graph_get_port_parent + of_graph_get_remote_endpoint + of_graph_get_remote_node + of_graph_get_remote_port_parent + of_graph_is_present + of_graph_parse_endpoint + of_hwspin_lock_get_id + of_icc_get + of_icc_xlate_onecell + of_iomap + of_irq_find_parent + of_irq_get + of_irq_get_byname + of_match_device + of_match_node + of_n_addr_cells + of_node_name_eq + of_n_size_cells + __of_parse_phandle_with_args + of_phandle_iterator_init + of_phandle_iterator_next + of_platform_depopulate + of_platform_device_create + of_platform_device_destroy + of_platform_populate + of_property_count_elems_of_size + of_property_match_string + of_property_read_string + of_property_read_string_helper + of_property_read_u32_index + of_property_read_u64 + of_property_read_variable_u16_array + of_property_read_variable_u32_array + of_property_read_variable_u8_array + of_prop_next_string + of_prop_next_u32 + of_reserved_mem_device_init_by_idx + of_reserved_mem_device_release + of_reserved_mem_lookup + of_translate_address + overflowuid + page_pinner_inited + __page_pinner_put_page + panic + panic_notifier_list + panic_timeout + param_array_ops + param_get_int + param_get_string + param_ops_bool + param_ops_charp + param_ops_int + param_ops_string + param_ops_uint + param_ops_ullong + param_set_bool + param_set_copystring + param_set_int + pci_bus_type + pci_clear_master + pci_device_group + pci_disable_device + pci_enable_device + pci_read_config_dword + pci_read_config_word + pci_release_region + pci_request_region + pci_set_master + pci_write_config_dword + pci_write_config_word + __per_cpu_offset + perf_aux_output_begin + perf_aux_output_end + perf_aux_output_flag + perf_event_create_kernel_counter + perf_event_enable + perf_event_read_local + perf_event_read_value + perf_event_release_kernel + perf_get_aux + perf_pmu_register + perf_pmu_unregister + perf_report_aux_output_id + perf_trace_buf_alloc + perf_trace_run_bpf_submit + pfn_is_map_memory + pick_highest_pushable_task + pick_migrate_task + pid_nr_ns + pid_task + pinconf_generic_dt_node_to_map + pinctrl_dev_get_drvdata + pinctrl_force_default + pinctrl_force_sleep + pinctrl_lookup_state + pinctrl_pm_select_default_state + pinctrl_pm_select_sleep_state + pinctrl_select_state + pinctrl_utils_free_map + platform_bus_type + platform_device_add + platform_device_add_data + platform_device_alloc + platform_device_put + platform_device_register_full + platform_device_unregister + __platform_driver_register + platform_driver_unregister + platform_get_irq + platform_get_irq_byname + platform_get_irq_byname_optional + platform_get_irq_optional + platform_get_resource + platform_get_resource_byname + platform_irqchip_probe + platform_irq_count + platform_msi_domain_alloc_irqs + platform_msi_domain_free_irqs + pm_clk_add + pm_clk_create + pm_clk_destroy + pm_clk_resume + pm_clk_suspend + pm_generic_resume + pm_generic_suspend + pm_genpd_add_subdomain + pm_genpd_init + pm_genpd_remove + pm_genpd_remove_subdomain + pm_power_off + __pm_relax + pm_relax + pm_runtime_allow + pm_runtime_autosuspend_expiration + pm_runtime_barrier + __pm_runtime_disable + pm_runtime_enable + pm_runtime_forbid + pm_runtime_force_resume + pm_runtime_force_suspend + __pm_runtime_idle + pm_runtime_irq_safe + pm_runtime_no_callbacks + __pm_runtime_resume + pm_runtime_set_autosuspend_delay + __pm_runtime_set_status + __pm_runtime_suspend + __pm_runtime_use_autosuspend + __pm_stay_awake + pm_stay_awake + pm_suspend_target_state + pm_system_wakeup + pm_wakeup_dev_event + pm_wakeup_ws_event + policy_has_boost_freq + power_supply_changed + power_supply_get_by_name + power_supply_get_by_phandle_array + power_supply_get_drvdata + power_supply_get_property + power_supply_put + power_supply_reg_notifier + power_supply_set_property + power_supply_unreg_notifier + preempt_schedule + preempt_schedule_notrace + prepare_to_wait_event + print_hex_dump + _printk + _printk_deferred + proc_create + proc_create_data + proc_dointvec + proc_dointvec_minmax + proc_dostring + proc_douintvec_minmax + proc_mkdir + proto_register + proto_unregister + pskb_expand_head + __pskb_pull_tail + ___pskb_trim + put_device + put_iova_domain + __put_net + put_pid + __put_task_struct + put_unused_fd + put_user_ifreq + pwm_apply_might_sleep + qcom_smem_state_get + qcom_smem_state_register + qcom_smem_state_unregister + qcom_smem_state_update_bits + queue_delayed_work_on + queue_work_on + radix_tree_insert + radix_tree_iter_delete + radix_tree_lookup + radix_tree_next_chunk + ___ratelimit + rational_best_approximation + raw_notifier_call_chain + raw_notifier_chain_register + raw_notifier_chain_unregister + _raw_read_lock + _raw_read_lock_bh + _raw_read_lock_irq + _raw_read_lock_irqsave + _raw_read_unlock + _raw_read_unlock_bh + _raw_read_unlock_irq + _raw_read_unlock_irqrestore + _raw_spin_lock + _raw_spin_lock_bh + _raw_spin_lock_irq + _raw_spin_lock_irqsave + raw_spin_rq_lock_nested + raw_spin_rq_unlock + _raw_spin_trylock + _raw_spin_trylock_bh + _raw_spin_unlock + _raw_spin_unlock_bh + _raw_spin_unlock_irq + _raw_spin_unlock_irqrestore + _raw_write_lock + _raw_write_lock_bh + _raw_write_lock_irq + _raw_write_lock_irqsave + _raw_write_unlock + _raw_write_unlock_bh + _raw_write_unlock_irq + _raw_write_unlock_irqrestore + rb_erase + rb_first + rb_insert_color + rb_last + rb_next + rb_prev + __rcu_read_lock + __rcu_read_unlock + rdev_get_drvdata + reboot_mode + rebuild_sched_domains + refcount_dec_not_one + refcount_warn_saturate + regcache_cache_only + regcache_mark_dirty + regcache_sync + regcache_sync_region + __register_chrdev + register_chrdev_region + register_die_notifier + register_ftrace_export + register_inet6addr_notifier + register_inetaddr_notifier + register_kretprobe + register_netdev + register_netdevice + register_netdevice_notifier + register_netevent_notifier + register_pernet_device + register_pm_notifier + register_reboot_notifier + register_restart_handler + __register_rpmsg_driver + register_shrinker + register_syscore_ops + register_sysctl_sz + regmap_bulk_read + regmap_bulk_write + regmap_check_range_table + regmap_field_read + regmap_field_update_bits_base + __regmap_init + regmap_irq_get_virq + regmap_mmio_detach_clk + regmap_multi_reg_write + regmap_raw_read + regmap_raw_write + regmap_read + regmap_update_bits_base + regmap_write + regulator_allow_bypass + regulator_bulk_disable + regulator_bulk_enable + regulator_count_voltages + regulator_disable + regulator_enable + regulator_force_disable + regulator_get + regulator_get_mode + regulator_get_optional + regulator_get_voltage + regulator_get_voltage_rdev + regulator_is_enabled + regulator_is_supported_voltage + regulator_notifier_call_chain + regulator_put + regulator_register_notifier + regulator_set_current_limit + regulator_set_load + regulator_set_mode + regulator_set_voltage + regulator_unregister + regulator_unregister_notifier + release_firmware + release_sock + remap_pfn_range + remove_cpu + remove_proc_entry + remove_wait_queue + report_iommu_fault + request_firmware + request_firmware_direct + request_firmware_into_buf + request_firmware_nowait + __request_percpu_irq + request_threaded_irq + resched_curr + reset_control_assert + reset_control_deassert + reset_control_reset + return_address + rfkill_alloc + rfkill_blocked + rfkill_destroy + rfkill_init_sw_state + rfkill_register + rfkill_resume_polling + rfkill_set_hw_state_reason + rfkill_unregister + root_task_group + rpmsg_poll + rpmsg_register_device + rpmsg_register_device_override + rpmsg_send + rpmsg_trysend + rpmsg_unregister_device + rproc_add + rproc_add_subdev + rproc_alloc + rproc_boot + rproc_coredump + rproc_coredump_add_custom_segment + rproc_coredump_add_segment + rproc_coredump_cleanup + rproc_coredump_set_elf_info + rproc_del + rproc_free + rproc_get_by_child + rproc_get_by_phandle + rproc_put + rproc_remove_subdev + rproc_report_crash + rproc_set_firmware + rproc_shutdown + rtc_class_close + rtc_class_open + rtc_read_time + rtc_time64_to_tm + rtc_tm_to_time64 + rtc_update_irq + rtc_valid_tm + rtnl_is_locked + rtnl_link_register + rtnl_link_unregister + rtnl_lock + rtnl_trylock + rtnl_unicast + rtnl_unlock + runqueues + scatterwalk_ffwd + scatterwalk_map_and_copy + sched_clock + sched_feat_keys + sched_feat_names + sched_setattr + sched_set_fifo + sched_set_fifo_low + sched_set_normal + sched_setscheduler + sched_setscheduler_nocheck + sched_uclamp_used + schedule + schedule_timeout + schedule_timeout_interruptible + scnprintf + __sdhci_add_host + sdhci_add_host + sdhci_cleanup_host + sdhci_cqe_disable + sdhci_cqe_enable + sdhci_cqe_irq + sdhci_enable_clk + sdhci_get_property + sdhci_pltfm_free + sdhci_pltfm_init + sdhci_remove_host + sdhci_reset + sdhci_set_bus_width + sdhci_set_power_noreg + __sdhci_set_timeout + sdhci_setup_host + sdio_claim_host + sdio_disable_func + sdio_enable_func + sdio_f0_readb + sdio_f0_writeb + sdio_get_host_pm_caps + sdio_memcpy_fromio + sdio_memcpy_toio + sdio_readb + sdio_readl + sdio_readsb + sdio_readw + sdio_register_driver + sdio_release_host + sdio_set_block_size + sdio_set_host_pm_flags + sdio_unregister_driver + sdio_writeb + sdio_writel + sdio_writew + select_fallback_rq + send_sig_info + seq_hex_dump + seq_lseek + seq_open + seq_printf + seq_putc + seq_puts + seq_read + seq_release + seq_vprintf + seq_write + set_cpus_allowed_ptr + set_next_entity + set_normalized_timespec64 + set_page_dirty_lock + set_task_cpu + set_user_nice + sg_alloc_table + sg_alloc_table_from_pages_segment + sg_copy_from_buffer + sg_copy_to_buffer + sg_free_table + sg_init_one + sg_init_table + sg_miter_next + sg_miter_start + sg_miter_stop + sg_next + __sg_page_iter_dma_next + __sg_page_iter_next + __sg_page_iter_start + shmem_read_mapping_page_gfp + show_regs + si_meminfo + simple_attr_open + simple_attr_read + simple_attr_release + simple_attr_write + simple_open + simple_read_from_buffer + simple_strtol + simple_strtoll + simple_strtoul + simple_strtoull + simple_write_to_buffer + single_open + single_release + sk_alloc + skb_add_rx_frag + skb_append_pagefrags + skb_checksum + skb_clone + skb_coalesce_rx_frag + skb_copy + skb_copy_bits + skb_copy_datagram_from_iter + skb_copy_datagram_iter + skb_copy_expand + skb_dequeue + skb_free_datagram + __skb_gso_segment + __skb_pad + skb_pull + skb_push + skb_put + skb_queue_head + skb_queue_purge_reason + skb_queue_tail + skb_realloc_headroom + skb_recv_datagram + skb_set_owner_w + skb_store_bits + skb_trim + skb_unlink + sk_error_report + sk_free + skip_spaces + smp_call_function_single + smp_call_function_single_async + snd_info_create_card_entry + snd_info_create_module_entry + snd_info_free_entry + snd_info_register + snd_pcm_format_width + snd_soc_add_card_controls + snd_soc_add_component_controls + snd_soc_card_get_kcontrol + snd_soc_component_exit_regmap + snd_soc_component_init_regmap + snd_soc_component_read + snd_soc_component_update_bits + snd_soc_component_write + snd_soc_dai_get_channel_map + snd_soc_dai_set_channel_map + snd_soc_dapm_add_routes + snd_soc_dapm_disable_pin + snd_soc_dapm_force_enable_pin + snd_soc_dapm_get_enum_double + snd_soc_dapm_get_volsw + snd_soc_dapm_ignore_suspend + snd_soc_dapm_kcontrol_widget + snd_soc_dapm_mixer_update_power + snd_soc_dapm_mux_update_power + snd_soc_dapm_new_controls + snd_soc_dapm_new_widgets + snd_soc_dapm_put_enum_double + snd_soc_dapm_put_volsw + snd_soc_dapm_sync + snd_soc_get_enum_double + snd_soc_get_pcm_runtime + snd_soc_get_volsw + snd_soc_info_enum_double + snd_soc_info_volsw + snd_soc_lookup_component + snd_soc_of_parse_audio_routing + snd_soc_of_parse_card_name + snd_soc_pm_ops + snd_soc_put_enum_double + snd_soc_put_volsw + snd_soc_register_component + snd_soc_rtdcom_lookup + snd_soc_set_runtime_hwparams + snd_soc_unregister_card + snd_soc_unregister_component + snprintf + soc_device_register + soc_device_unregister + sock_alloc_send_pskb + __sock_create + sock_create_kern + sock_gettstamp + sock_init_data + sock_no_accept + sock_no_listen + sock_no_mmap + sock_no_socketpair + sock_queue_rcv_skb_reason + sock_register + sock_release + sock_setsockopt + sock_unregister + sock_wfree + sort + __spi_alloc_controller + spi_async + spi_bus_lock + spi_bus_type + spi_bus_unlock + spi_register_controller + __spi_register_driver + spi_setup + spi_sync + spi_sync_locked + spi_unregister_controller + spmi_controller_add + spmi_controller_alloc + spmi_controller_remove + spmi_device_from_of + __spmi_driver_register + sprintf + sprint_symbol + srcu_init_notifier_head + srcu_notifier_call_chain + srcu_notifier_chain_register + srcu_notifier_chain_unregister + __srcu_read_lock + __srcu_read_unlock + sscanf + __stack_chk_fail + static_key_disable + stop_machine + stop_one_cpu + stop_one_cpu_nowait + strcasecmp + strchr + strchrnul + strcmp + strcpy + strcspn + strim + strlcpy + strlen + strncasecmp + strnchr + strncmp + strncpy + strnlen + strnstr + strpbrk + strrchr + strscpy + strscpy_pad + strsep + strspn + strstr + __sw_hweight16 + __sw_hweight32 + __sw_hweight64 + __sw_hweight8 + sync_file_create + sync_file_get_fence + synchronize_irq + synchronize_net + synchronize_rcu + synchronize_srcu + syscon_node_to_regmap + syscon_regmap_lookup_by_phandle + sysctl_sched_features + sysctl_vals + sysfs_add_file_to_group + sysfs_add_link_to_group + sysfs_create_bin_file + sysfs_create_file_ns + sysfs_create_files + sysfs_create_group + sysfs_create_groups + sysfs_create_link + sysfs_emit + sysfs_emit_at + sysfs_notify + sysfs_remove_bin_file + sysfs_remove_file_from_group + sysfs_remove_file_ns + sysfs_remove_files + sysfs_remove_group + sysfs_remove_groups + sysfs_remove_link + sysfs_remove_link_from_group + sysfs_streq + sysrq_mask + system_32bit_el0_cpumask + system_cpucaps + system_freezable_wq + system_highpri_wq + system_long_wq + system_power_efficient_wq + system_state + system_unbound_wq + system_wq + sys_tz + task_active_pid_ns + __tasklet_hi_schedule + tasklet_init + tasklet_kill + __tasklet_schedule + tasklet_setup + tasklet_unlock_wait + tasklist_lock + __task_pid_nr_ns + __task_rq_lock + task_rq_lock + tegra_mc_probe_device + thermal_cdev_update + thermal_cooling_device_register + thermal_cooling_device_unregister + thermal_of_cooling_device_register + thermal_pressure + thermal_tripless_zone_device_register + thermal_zone_device_enable + thermal_zone_device_priv + thermal_zone_device_register_with_trips + thermal_zone_device_unregister + thermal_zone_device_update + thermal_zone_get_num_trips + thermal_zone_get_temp + __thermal_zone_get_trip + thermal_zone_get_trip + thermal_zone_get_zone_by_name + tick_nohz_get_sleep_length + timer_delete + timer_delete_sync + topology_clear_scale_freq_source + topology_update_done + topology_update_thermal_pressure + _totalram_pages + trace_array_put + __trace_bprintk + trace_event_buffer_commit + trace_event_buffer_reserve + trace_event_printf + trace_event_raw_init + trace_event_reg + trace_handle_return + __traceiter_android_rvh_account_irq + __traceiter_android_rvh_before_do_sched_yield + __traceiter_android_rvh_build_perf_domains + __traceiter_android_rvh_can_migrate_task + __traceiter_android_rvh_check_preempt_wakeup + __traceiter_android_rvh_cpu_capacity_show + __traceiter_android_rvh_cpu_cgroup_attach + __traceiter_android_rvh_cpu_cgroup_online + __traceiter_android_rvh_cpufreq_transition + __traceiter_android_rvh_dequeue_task + __traceiter_android_rvh_do_sched_yield + __traceiter_android_rvh_enqueue_task + __traceiter_android_rvh_find_busiest_queue + __traceiter_android_rvh_find_lowest_rq + __traceiter_android_rvh_flush_task + __traceiter_android_rvh_get_nohz_timer_target + __traceiter_android_rvh_iommu_alloc_insert_iova + __traceiter_android_rvh_iommu_iovad_init_alloc_algo + __traceiter_android_rvh_iommu_limit_align_shift + __traceiter_android_rvh_iommu_setup_dma_ops + __traceiter_android_rvh_is_cpu_allowed + __traceiter_android_rvh_new_task_stats + __traceiter_android_rvh_replace_next_task_fair + __traceiter_android_rvh_rto_next_cpu + __traceiter_android_rvh_sched_cpu_dying + __traceiter_android_rvh_sched_cpu_starting + __traceiter_android_rvh_sched_exec + __traceiter_android_rvh_sched_fork_init + __traceiter_android_rvh_sched_newidle_balance + __traceiter_android_rvh_sched_nohz_balancer_kick + __traceiter_android_rvh_schedule + __traceiter_android_rvh_select_task_rq_fair + __traceiter_android_rvh_select_task_rq_rt + __traceiter_android_rvh_set_cpus_allowed_by_task + __traceiter_android_rvh_set_task_cpu + __traceiter_android_rvh_show_max_freq + __traceiter_android_rvh_tick_entry + __traceiter_android_rvh_try_to_wake_up + __traceiter_android_rvh_ttwu_cond + __traceiter_android_rvh_update_cpu_capacity + __traceiter_android_rvh_update_misfit_status + __traceiter_android_rvh_update_thermal_stats + __traceiter_android_rvh_wake_up_new_task + __traceiter_android_vh_alter_mutex_list_add + __traceiter_android_vh_binder_restore_priority + __traceiter_android_vh_binder_set_priority + __traceiter_android_vh_cpu_idle_enter + __traceiter_android_vh_cpu_idle_exit + __traceiter_android_vh_cpuidle_psci_enter + __traceiter_android_vh_cpuidle_psci_exit + __traceiter_android_vh_ipi_stop + __traceiter_android_vh_jiffies_update + __traceiter_android_vh_printk_hotplug + __traceiter_android_vh_rproc_recovery + __traceiter_android_vh_rproc_recovery_set + __traceiter_android_vh_scheduler_tick + __traceiter_android_vh_show_resume_epoch_val + __traceiter_android_vh_show_suspend_epoch_val + __traceiter_android_vh_timer_calc_index + __traceiter_android_vh_update_topology_flags_workfn + __traceiter_cpu_frequency_limits + __traceiter_gpu_mem_total + __traceiter_ipi_entry + __traceiter_ipi_raise + __traceiter_mmap_lock_acquire_returned + __traceiter_mmap_lock_released + __traceiter_mmap_lock_start_locking + __traceiter_sched_overutilized_tp + __traceiter_sched_switch + __traceiter_sk_data_ready + __traceiter_suspend_resume + __tracepoint_android_rvh_account_irq + __tracepoint_android_rvh_before_do_sched_yield + __tracepoint_android_rvh_build_perf_domains + __tracepoint_android_rvh_can_migrate_task + __tracepoint_android_rvh_check_preempt_wakeup + __tracepoint_android_rvh_cpu_capacity_show + __tracepoint_android_rvh_cpu_cgroup_attach + __tracepoint_android_rvh_cpu_cgroup_online + __tracepoint_android_rvh_cpufreq_transition + __tracepoint_android_rvh_dequeue_task + __tracepoint_android_rvh_do_sched_yield + __tracepoint_android_rvh_enqueue_task + __tracepoint_android_rvh_find_busiest_queue + __tracepoint_android_rvh_find_lowest_rq + __tracepoint_android_rvh_flush_task + __tracepoint_android_rvh_get_nohz_timer_target + __tracepoint_android_rvh_iommu_alloc_insert_iova + __tracepoint_android_rvh_iommu_iovad_init_alloc_algo + __tracepoint_android_rvh_iommu_limit_align_shift + __tracepoint_android_rvh_iommu_setup_dma_ops + __tracepoint_android_rvh_is_cpu_allowed + __tracepoint_android_rvh_new_task_stats + __tracepoint_android_rvh_replace_next_task_fair + __tracepoint_android_rvh_rto_next_cpu + __tracepoint_android_rvh_sched_cpu_dying + __tracepoint_android_rvh_sched_cpu_starting + __tracepoint_android_rvh_sched_exec + __tracepoint_android_rvh_sched_fork_init + __tracepoint_android_rvh_sched_newidle_balance + __tracepoint_android_rvh_sched_nohz_balancer_kick + __tracepoint_android_rvh_schedule + __tracepoint_android_rvh_select_task_rq_fair + __tracepoint_android_rvh_select_task_rq_rt + __tracepoint_android_rvh_set_cpus_allowed_by_task + __tracepoint_android_rvh_set_task_cpu + __tracepoint_android_rvh_show_max_freq + __tracepoint_android_rvh_tick_entry + __tracepoint_android_rvh_try_to_wake_up + __tracepoint_android_rvh_ttwu_cond + __tracepoint_android_rvh_update_cpu_capacity + __tracepoint_android_rvh_update_misfit_status + __tracepoint_android_rvh_update_thermal_stats + __tracepoint_android_rvh_wake_up_new_task + __tracepoint_android_vh_alter_mutex_list_add + __tracepoint_android_vh_binder_restore_priority + __tracepoint_android_vh_binder_set_priority + __tracepoint_android_vh_cpu_idle_enter + __tracepoint_android_vh_cpu_idle_exit + __tracepoint_android_vh_cpuidle_psci_enter + __tracepoint_android_vh_cpuidle_psci_exit + __tracepoint_android_vh_ipi_stop + __tracepoint_android_vh_jiffies_update + __tracepoint_android_vh_printk_hotplug + __tracepoint_android_vh_rproc_recovery + __tracepoint_android_vh_rproc_recovery_set + __tracepoint_android_vh_scheduler_tick + __tracepoint_android_vh_show_resume_epoch_val + __tracepoint_android_vh_show_suspend_epoch_val + __tracepoint_android_vh_timer_calc_index + __tracepoint_android_vh_update_topology_flags_workfn + __tracepoint_cpu_frequency_limits + __tracepoint_gpu_mem_total + __tracepoint_ipi_entry + __tracepoint_ipi_raise + __tracepoint_mmap_lock_acquire_returned + __tracepoint_mmap_lock_released + __tracepoint_mmap_lock_start_locking + tracepoint_probe_register + tracepoint_probe_register_prio + tracepoint_probe_unregister + __tracepoint_sched_overutilized_tp + __tracepoint_sched_switch + __tracepoint_sk_data_ready + __tracepoint_suspend_resume + trace_print_array_seq + trace_print_flags_seq + trace_print_symbols_seq + trace_raw_output_prep + trace_seq_printf + trace_seq_putc + __trace_trigger_soft_disabled + tracing_off + try_module_get + try_wait_for_completion + tty_flip_buffer_push + __tty_insert_flip_string_flags + typec_register_partner + typec_register_port + typec_set_data_role + typec_set_pwr_role + typec_unregister_partner + uart_add_one_port + uart_get_baud_rate + uart_insert_char + uart_register_driver + uart_remove_one_port + uart_resume_port + uart_suspend_port + uart_try_toggle_sysrq + uart_unregister_driver + uart_update_timeout + uart_write_wakeup + uclamp_eff_value + __udelay + __uio_register_device + uio_unregister_device + __unregister_chrdev + unregister_chrdev_region + unregister_ftrace_export + unregister_inet6addr_notifier + unregister_inetaddr_notifier + unregister_kretprobe + unregister_netdev + unregister_netdevice_many + unregister_netdevice_notifier + unregister_netdevice_queue + unregister_netevent_notifier + unregister_pernet_device + unregister_pm_notifier + unregister_reboot_notifier + unregister_restart_handler + unregister_rpmsg_driver + unregister_shrinker + unregister_syscore_ops + unregister_sysctl_table + up + update_devfreq + update_rq_clock + up_read + up_write + usb_add_phy_dev + usb_assign_descriptors + usb_composite_setup_continue + usb_decode_ctrl + usb_ep_alloc_request + usb_ep_autoconfig + usb_ep_dequeue + usb_ep_disable + usb_ep_enable + usb_ep_free_request + usb_ep_queue + usb_ep_set_halt + usb_free_all_descriptors + usb_function_register + usb_function_unregister + usb_gadget_wakeup + usb_hcd_is_primary_hcd + usb_interface_id + usb_phy_set_charger_current + usb_put_function_instance + usb_register_notify + usb_remove_phy + usb_role_switch_find_by_fwnode + usb_role_switch_get_drvdata + usb_role_switch_register + usb_role_switch_set_role + usb_role_switch_unregister + usb_speed_string + usb_string_id + usb_unregister_notify + __usecs_to_jiffies + usleep_range_state + v4l2_ctrl_find + v4l2_ctrl_handler_free + v4l2_ctrl_handler_init_class + v4l2_ctrl_new_custom + v4l2_ctrl_new_std + v4l2_ctrl_new_std_menu + v4l2_device_register + v4l2_device_unregister + v4l2_event_dequeue + v4l2_event_pending + v4l2_event_queue_fh + v4l2_event_subscribe + v4l2_event_unsubscribe + v4l2_fh_add + v4l2_fh_del + v4l2_fh_exit + v4l2_fh_init + v4l2_s_ctrl + vb2_buffer_done + vb2_dqbuf + vb2_qbuf + vb2_queue_init + vb2_queue_release + vb2_reqbufs + vb2_streamoff + vb2_streamon + vchan_dma_desc_free_list + vchan_find_desc + vchan_init + vchan_tx_desc_free + vchan_tx_submit + verify_pkcs7_signature + vfree + video_devdata + video_ioctl2 + __video_register_device + video_unregister_device + vmalloc + vmalloc_to_page + vmalloc_to_pfn + vmap + vmemdup_user + vmf_insert_mixed + vmf_insert_pfn + vm_get_page_prot + vm_insert_page + vm_iomap_memory + vm_map_pages + vm_node_stat + vm_zone_stat + vprintk + vprintk_emit + vscnprintf + vsnprintf + vunmap + vzalloc + wait_for_completion + wait_for_completion_interruptible + wait_for_completion_interruptible_timeout + wait_for_completion_killable + wait_for_completion_timeout + wait_woken + __wake_up + wake_up_if_idle + __wake_up_locked + wake_up_process + wakeup_source_add + wakeup_source_register + wakeup_source_remove + wakeup_source_unregister + __wake_up_sync + __warn_printk + watchdog_init_timeout + watchdog_register_device + watchdog_unregister_device + wireless_nlevent_flush + wireless_send_event + woken_wake_function + work_busy + ww_mutex_lock + ww_mutex_trylock + ww_mutex_unlock + x509_load_certificate_list + __xa_alloc + __xa_alloc_cyclic + xa_destroy + xa_erase + xa_find + xa_find_after + __xa_insert + xa_load + xas_load + xa_store + xfrm_lookup + zap_vma_ptes diff --git a/android/abi_gki_aarch64_qcom b/android/abi_gki_aarch64_qcom index 354e3fda5bc9d..9e697b14586cb 100644 --- a/android/abi_gki_aarch64_qcom +++ b/android/abi_gki_aarch64_qcom @@ -48,6 +48,9 @@ __balance_callbacks balance_push_callback bcmp + bio_endio + bio_end_io_acct_remapped + bio_start_io_acct bitmap_allocate_region __bitmap_andnot __bitmap_clear @@ -58,11 +61,19 @@ bitmap_release_region __bitmap_set bitmap_zalloc + __blk_alloc_disk blk_execute_rq_nowait blk_get_queue blk_mq_free_request blk_mq_rq_cpu blk_put_queue + 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_write_zeroes_sectors + blk_queue_physical_block_size blk_rq_map_user_io blk_rq_unmap_user blocking_notifier_call_chain @@ -105,14 +116,17 @@ check_preempt_curr check_zeroed_user class_create + class_create_file_ns class_destroy class_find_device class_for_each_device class_interface_unregister class_register + class_remove_file_ns class_unregister cleanup_srcu_struct clear_page + __ClearPageMovable clk_bulk_disable clk_bulk_enable clk_bulk_prepare @@ -191,13 +205,22 @@ cpufreq_driver_fast_switch cpufreq_driver_resolve_freq __cpufreq_driver_target + cpufreq_enable_boost_support cpufreq_enable_fast_switch + cpufreq_freq_attr_scaling_available_freqs + cpufreq_freq_attr_scaling_boost_freqs + cpufreq_generic_frequency_table_verify + cpufreq_get_driver_data cpufreq_quick_get cpufreq_quick_get_max + cpufreq_register_driver cpufreq_register_governor + cpufreq_unregister_driver __cpuhp_remove_state __cpuhp_setup_state __cpuhp_setup_state_cpuslocked + __cpuhp_state_add_instance + __cpuhp_state_remove_instance cpuidle_governor_latency_req cpuidle_register_governor cpu_irqtime @@ -229,9 +252,13 @@ crypto_ahash_setkey crypto_alloc_aead crypto_alloc_ahash + crypto_alloc_base crypto_alloc_shash crypto_alloc_skcipher + crypto_comp_compress + crypto_comp_decompress crypto_destroy_tfm + crypto_has_alg __crypto_memneq crypto_register_aead crypto_register_rng @@ -269,9 +296,11 @@ debugfs_remove debugfs_rename dec_node_page_state + dec_zone_page_state default_llseek deferred_free delayed_work_timer_fn + del_gendisk destroy_workqueue dev_addr_mod dev_alloc_name @@ -294,6 +323,7 @@ dev_get_regmap dev_get_stats device_add + device_add_disk device_add_groups device_create device_create_file @@ -421,15 +451,25 @@ dev_pm_genpd_set_performance_state dev_pm_genpd_suspend dev_pm_opp_add_dynamic + dev_pm_opp_adjust_voltage dev_pm_opp_clear_config + dev_pm_opp_disable + dev_pm_opp_enable + dev_pm_opp_find_freq_ceil + dev_pm_opp_find_freq_exact dev_pm_opp_find_freq_floor dev_pm_opp_get_opp_count dev_pm_opp_of_add_table + dev_pm_opp_of_cpumask_remove_table dev_pm_opp_of_find_icc_paths + dev_pm_opp_of_register_em dev_pm_opp_of_remove_table dev_pm_opp_put + dev_pm_opp_remove_all_dynamic dev_pm_opp_set_config + dev_pm_opp_set_opp dev_pm_opp_set_rate + dev_pm_opp_set_sharing_cpus dev_pm_qos_add_notifier dev_pm_qos_add_request dev_pm_qos_remove_notifier @@ -633,15 +673,18 @@ _find_next_zero_bit find_task_by_vpid find_vpid + finish_rcuwait finish_wait firmware_request_nowarn flow_keys_dissector + flush_dcache_page flush_delayed_fput flush_delayed_work flush_work __flush_workqueue __folio_batch_release __folio_put + folio_wait_bit fortify_panic fput free_io_pgtable_ops @@ -845,6 +888,7 @@ iio_write_channel_raw in4_pton inc_node_page_state + inc_zone_page_state in_egroup_p __inet6_lookup_established inet_csk_get_port @@ -1106,6 +1150,7 @@ memmove memory_block_size_bytes memory_read_from_buffer + memparse mempool_alloc mempool_alloc_slab mempool_create @@ -1115,6 +1160,7 @@ memremap mem_section memset + memset64 __memset_io memstart_addr memunmap @@ -1323,6 +1369,7 @@ panic_notifier_list panic_timeout param_array_ops + param_get_bool param_get_int param_get_string param_get_uint @@ -1451,6 +1498,7 @@ pm_system_wakeup pm_wakeup_dev_event pm_wakeup_ws_event + policy_has_boost_freq powercap_register_control_type powercap_register_zone powercap_unregister_control_type @@ -1473,6 +1521,7 @@ proc_dointvec proc_dointvec_minmax proc_dostring + proc_douintvec proc_douintvec_minmax proc_set_user proto_register @@ -1481,6 +1530,7 @@ __pskb_pull_tail ___pskb_trim put_device + put_disk put_iova_domain __put_net put_sg_io_hdr @@ -1549,6 +1599,7 @@ refcount_warn_saturate regcache_mark_dirty regcache_sync + __register_blkdev __register_chrdev register_chrdev_region register_console @@ -1666,6 +1717,7 @@ rproc_report_crash rproc_set_firmware rproc_shutdown + rtc_add_group rtc_time64_to_tm rtc_tm_to_time64 rtc_update_irq @@ -1713,6 +1765,7 @@ sdhci_cqe_disable sdhci_cqe_enable sdhci_cqe_irq + sdhci_dumpregs sdhci_enable_clk sdhci_get_property sdhci_pltfm_free @@ -1733,7 +1786,10 @@ seq_read seq_release seq_vprintf + set_capacity + set_capacity_and_notify set_next_entity + __SetPageMovable set_task_cpu sg_alloc_table sg_alloc_table_from_pages_segment @@ -1873,6 +1929,7 @@ stop_one_cpu_nowait strcmp strcpy + strcspn strim strlen strncasecmp @@ -1893,6 +1950,7 @@ __sw_hweight32 __sw_hweight64 __sw_hweight8 + sync_blockdev synchronize_irq synchronize_net synchronize_rcu @@ -1905,12 +1963,14 @@ sysctl_vals sysfs_add_file_to_group sysfs_add_link_to_group + sysfs_create_bin_file sysfs_create_file_ns sysfs_create_group sysfs_create_link sysfs_emit sysfs_emit_at sysfs_notify + sysfs_remove_bin_file sysfs_remove_file_from_group sysfs_remove_file_ns sysfs_remove_group @@ -1986,6 +2046,7 @@ __traceiter_android_rvh_enqueue_task __traceiter_android_rvh_find_busiest_queue __traceiter_android_rvh_find_lowest_rq + __traceiter_android_rvh_find_new_ilb __traceiter_android_rvh_flush_task __traceiter_android_rvh_get_nohz_timer_target __traceiter_android_rvh_gic_v3_set_affinity @@ -2089,6 +2150,7 @@ __tracepoint_android_rvh_enqueue_task __tracepoint_android_rvh_find_busiest_queue __tracepoint_android_rvh_find_lowest_rq + __tracepoint_android_rvh_find_new_ilb __tracepoint_android_rvh_flush_task __tracepoint_android_rvh_get_nohz_timer_target __tracepoint_android_rvh_gic_v3_set_affinity @@ -2244,7 +2306,9 @@ ufshcd_uic_hibern8_exit __uio_register_device uio_unregister_device + unlock_page unpin_user_pages + unregister_blkdev __unregister_chrdev unregister_chrdev_region unregister_console @@ -2372,6 +2436,7 @@ __xa_alloc __xa_alloc_cyclic xa_destroy + __xa_erase xa_erase xa_find xa_find_after diff --git a/android/abi_gki_aarch64_sunxi b/android/abi_gki_aarch64_sunxi index 5ac70d62a1114..3036399e6e3fe 100644 --- a/android/abi_gki_aarch64_sunxi +++ b/android/abi_gki_aarch64_sunxi @@ -17,12 +17,18 @@ drm_mode_create_tv_properties_legacy drm_mode_legacy_fb_format drm_property_create_object + drm_vblank_work_init + drm_vblank_work_schedule + drm_vblank_work_cancel_sync + drm_vblank_work_flush hid_hw_request iio_map_array_register iio_map_array_unregister init_on_alloc ioport_resource irq_setup_alt_chip + ir_raw_event_store + ir_raw_event_handle kstrtos16 ktime_add_safe lookup_user_key @@ -51,6 +57,9 @@ stop_tty clk_hw_register_clkdev reset_control_status + rc_map_register + rc_map_unregister + rc_keydown gpiochip_line_is_irq drm_warn_on_modeset_not_all_locked __media_entity_setup_link @@ -61,6 +70,7 @@ v4l2_i2c_new_subdev vb2_dma_contig_set_max_seg_size usb_serial_port_softint + usb_role_switch_get_role ppp_channel_index ppp_input ppp_input_error diff --git a/android/abi_gki_aarch64_type_visibility b/android/abi_gki_aarch64_type_visibility index e700c6e36d0f1..ba3fb62a3efab 100644 --- a/android/abi_gki_aarch64_type_visibility +++ b/android/abi_gki_aarch64_type_visibility @@ -3,3 +3,5 @@ # for type visibility ANDROID_GKI_struct_dwc3 ANDROID_GKI_struct_kernel_all_info + ANDROID_GKI_node_stat_item + ANDROID_GKI_memcg_stat_item diff --git a/android/abi_gki_aarch64_unisoc b/android/abi_gki_aarch64_unisoc index 313f99bdad1dd..becd4ae3746d2 100644 --- a/android/abi_gki_aarch64_unisoc +++ b/android/abi_gki_aarch64_unisoc @@ -603,6 +603,12 @@ # required by sysdump.ko node_states +# required by torture.ko + cpu_is_hotpluggable + ftrace_dump + rcu_cpu_stall_suppress + rcu_inkernel_boot_has_ended + # required by ufs_sprd.ko __scsi_add_device scsi_test_unit_ready @@ -792,3 +798,4 @@ devfreq_cooling_em_register dev_pm_qos_read_value regcache_cache_only + vm_unmapped_area diff --git a/android/abi_gki_aarch64_virtual_device b/android/abi_gki_aarch64_virtual_device index 0fb04134e268c..95d33a340f3a7 100644 --- a/android/abi_gki_aarch64_virtual_device +++ b/android/abi_gki_aarch64_virtual_device @@ -26,8 +26,6 @@ cancel_delayed_work_sync cancel_work_sync __check_object_size - class_register - class_unregister clk_disable clk_enable clk_get_rate @@ -42,6 +40,7 @@ cpufreq_unregister_driver cpu_number __cpu_online_mask + __cpu_possible_mask crc32_le csum_partial debugfs_attr_read @@ -60,7 +59,6 @@ dev_close _dev_err __dev_get_by_index - device_create device_create_file device_remove_file device_set_wakeup_capable @@ -76,20 +74,17 @@ devm_kmalloc devm_platform_ioremap_resource devm_request_threaded_irq - _dev_notice _dev_printk __dev_queue_xmit devres_add __devres_alloc_node devres_free _dev_warn - dma_alloc_attrs dma_buf_export dma_fence_context_alloc dma_fence_init dma_fence_release dma_fence_signal_locked - dma_free_attrs dmam_alloc_attrs dma_set_coherent_mask dma_set_mask @@ -161,7 +156,6 @@ flush_delayed_work flush_work __flush_workqueue - __folio_put fortify_panic fput free_irq @@ -171,7 +165,6 @@ genlmsg_put genl_register_family genl_unregister_family - get_device __get_free_pages get_random_bytes get_unused_fd_flags @@ -226,6 +219,7 @@ kimage_voffset __kmalloc kmalloc_caches + kmalloc_large kmalloc_trace kmemdup kstrndup @@ -234,7 +228,6 @@ kthread_park kthread_should_stop kthread_stop - kthread_stop_put kthread_unpark ktime_get ktime_get_ts64 @@ -298,12 +291,9 @@ nla_put_64bit nonseekable_open noop_llseek - nr_cpu_ids of_device_is_compatible of_find_property of_property_read_variable_u32_array - page_pinner_inited - __page_pinner_put_page page_pool_alloc_frag page_pool_destroy page_pool_put_defragged_page @@ -313,17 +303,11 @@ param_ops_uint passthru_features_check pci_bus_type - pci_disable_device - pci_enable_device - pci_find_capability - pci_find_next_capability - pci_iounmap - pci_read_config_byte - pci_read_config_dword - __pci_register_driver + pci_iomap_range pci_release_region + pci_release_selected_regions pci_request_region - pci_unregister_driver + pci_request_selected_regions __per_cpu_offset perf_trace_buf_alloc perf_trace_run_bpf_submit @@ -366,7 +350,6 @@ register_netdevice register_netdevice_notifier register_pernet_device - register_virtio_device register_virtio_driver __regmap_init regmap_write @@ -385,10 +368,8 @@ schedule schedule_timeout scnprintf - seq_lseek seq_printf seq_puts - seq_read serio_close serio_interrupt serio_open @@ -408,8 +389,6 @@ simple_attr_release simple_open simple_read_from_buffer - single_open - single_release skb_add_rx_frag skb_clone skb_copy @@ -433,21 +412,17 @@ strcmp strcpy strlen + strncpy strnlen strscpy __sw_hweight16 __sw_hweight32 __sw_hweight8 sync_file_create - synchronize_irq synchronize_net synchronize_rcu - sysfs_create_group - sysfs_emit - sysfs_remove_group sysfs_remove_link system_cpucaps - system_freezable_wq system_wq __tasklet_schedule tasklet_setup @@ -466,7 +441,6 @@ unregister_netdevice_notifier unregister_netdevice_queue unregister_pernet_device - unregister_virtio_device unregister_virtio_driver up_write usb_add_hcd @@ -497,12 +471,21 @@ usb_unanchor_urb __usecs_to_jiffies 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 - virtio_break_device + video_devdata + video_ioctl2 + __video_register_device + video_unregister_device virtio_check_driver_offered_feature - virtio_config_changed - virtio_device_freeze - virtio_device_restore virtio_reset_device virtqueue_add_inbuf virtqueue_add_outbuf @@ -510,10 +493,7 @@ virtqueue_detach_unused_buf virtqueue_disable_cb virtqueue_enable_cb - virtqueue_get_avail_addr virtqueue_get_buf - virtqueue_get_desc_addr - virtqueue_get_used_addr virtqueue_get_vring_size virtqueue_is_broken virtqueue_kick @@ -522,11 +502,7 @@ vmalloc vmalloc_to_page vm_get_page_prot - vring_create_virtqueue - vring_del_virtqueue - vring_interrupt - vring_notification_data - vring_transport_features + vzalloc __wake_up wake_up_process __warn_printk @@ -538,22 +514,6 @@ clk_put 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 clk_round_rate devm_of_iomap @@ -644,6 +604,8 @@ bpf_trace_run11 bpf_trace_run7 bpf_trace_run8 + class_register + class_unregister _ctype debugfs_rename __dev_change_net_namespace @@ -698,9 +660,11 @@ regmap_read # required by drm_dma_helper.ko + dma_alloc_attrs dma_alloc_pages dma_buf_vmap_unlocked dma_buf_vunmap_unlocked + dma_free_attrs dma_free_pages dma_get_sgtable_attrs dma_mmap_attrs @@ -730,6 +694,11 @@ # required by goldfish_address_space.ko memremap memunmap + pci_disable_device + pci_enable_device + pci_read_config_byte + __pci_register_driver + pci_unregister_driver # required by goldfish_battery.ko power_supply_changed @@ -802,7 +771,6 @@ bitmap_free bitmap_zalloc call_rcu - __cpu_possible_mask crc32_be crypto_aead_decrypt crypto_aead_encrypt @@ -834,7 +802,6 @@ kernel_param_lock kernel_param_unlock kfree_skb_list_reason - kmalloc_large ktime_get_seconds netdev_set_default_ethtool_ops netif_receive_skb @@ -853,8 +820,8 @@ skb_ensure_writable __skb_get_hash __skb_gso_segment - strncpy __sw_hweight64 + system_freezable_wq tasklet_kill unregister_inet6addr_notifier unregister_inetaddr_notifier @@ -863,6 +830,7 @@ class_create class_destroy device_bind_driver + device_create device_release_driver dst_release genl_notify @@ -913,6 +881,10 @@ # required by mt76x02-lib.ko debugfs_create_bool __kfifo_init + seq_lseek + seq_read + single_open + single_release # required by mt76x02-usb.ko hrtimer_active @@ -975,6 +947,7 @@ device_link_add device_link_remove device_remove_groups + _dev_notice i2c_adapter_type i2c_bus_type i2c_client_type @@ -1036,6 +1009,30 @@ scmi_driver_register scmi_driver_unregister 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 dma_heap_add @@ -1063,25 +1060,11 @@ v4l2_ctrl_handler_setup v4l2_ctrl_new_custom v4l2_ctrl_subscribe_event - v4l2_device_register - v4l2_device_unregister - v4l2_event_pending v4l2_event_queue - v4l2_event_subscribe - v4l2_event_unsubscribe - v4l2_fh_add - v4l2_fh_del - v4l2_fh_exit - v4l2_fh_init v4l2_format_info - video_devdata video_device_alloc video_device_release - video_ioctl2 - __video_register_device - video_unregister_device vm_insert_page - vzalloc # required by vexpress-config.ko of_find_compatible_node @@ -1102,9 +1085,12 @@ kernel_sock_shutdown kstrtoint kstrtoll + kthread_stop_put platform_bus sockfd_lookup strchr + sysfs_create_group + sysfs_remove_group usb_speed_string # required by virt_wifi.ko @@ -1216,116 +1202,40 @@ ww_mutex_lock_interruptible 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 hwrng_register hwrng_unregister 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 device_for_each_child device_register 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 bpf_dispatcher_xdp_func @@ -1347,6 +1257,7 @@ ethtool_sprintf ethtool_virtdev_set_link_ksettings flow_keys_basic_dissector + __folio_put jiffies_to_usecs __napi_alloc_skb napi_consume_skb @@ -1359,7 +1270,10 @@ __netif_set_xps_queue netif_tx_lock netif_tx_unlock + nr_cpu_ids __num_online_cpus + page_pinner_inited + __page_pinner_put_page sched_clock skb_coalesce_rx_frag __skb_flow_dissect @@ -1394,27 +1308,9 @@ xdp_rxq_info_unreg 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 pci_iomap - -# required by virtio_pci_modern_dev.ko - pci_iomap_range - pci_release_selected_regions - pci_request_selected_regions + pci_iounmap # required by virtio_pmem.ko nvdimm_bus_register @@ -1440,6 +1336,16 @@ snd_pcm_set_ops 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 __devm_drm_dev_alloc devres_open_group @@ -1483,8 +1389,127 @@ drm_writeback_queue_job 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 + __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_deliver_tap_pkt virtio_transport_destruct @@ -1520,12 +1545,29 @@ virtio_transport_stream_has_space virtio_transport_stream_is_active 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_unregister vsock_for_each_connected_socket - -# preserved by --additions-only - blk_mq_quiesce_queue - blk_mq_unquiesce_queue - page_shift_compat - page_shift_compat_enabled + wait_for_completion diff --git a/android/abi_gki_aarch64_vivo b/android/abi_gki_aarch64_vivo index dcc23dfdc0520..db1c3365a0283 100644 --- a/android/abi_gki_aarch64_vivo +++ b/android/abi_gki_aarch64_vivo @@ -25,10 +25,12 @@ filp_close free_workqueue_attrs __getblk_gfp + get_dup_sched_clock gnet_stats_add_queue gnet_stats_copy_basic gnet_stats_copy_queue __irq_regs + kblockd_mod_delayed_work_on kernfs_path_from_node __kmalloc_node __lock_buffer @@ -38,6 +40,7 @@ noop_qdisc of_css pfifo_qdisc_ops + pfn_to_online_page proc_mkdir_mode profile_event_register profile_event_unregister @@ -115,6 +118,8 @@ __traceiter_android_vh_binder_special_task __traceiter_android_vh_binder_wait_for_work __traceiter_android_vh_blk_fill_rwbs + __traceiter_android_vh_blk_mq_delay_run_hw_queue + __traceiter_android_vh_blk_mq_kick_requeue_list __traceiter_android_vh_build_skb_around __traceiter_android_vh_cgroup_attach __traceiter_android_vh_check_folio_look_around_ref @@ -124,6 +129,7 @@ __traceiter_android_vh_configfs_uevent_work __traceiter_android_vh_count_workingset_refault __traceiter_android_vh_do_anonymous_page + __traceiter_android_vh_do_group_exit __traceiter_android_vh_do_new_mount_fc __traceiter_android_vh_do_swap_page __traceiter_android_vh_do_wp_page @@ -134,6 +140,7 @@ __traceiter_android_vh_free_task __traceiter_android_vh_free_unref_page_bypass __traceiter_android_vh_fuse_request_end + __traceiter_android_vh_init_adjust_zone_wmark __traceiter_android_vh_inode_lru_isolate __traceiter_android_vh_invalidate_mapping_pagevec __traceiter_android_vh_irqtime_account_process_tick @@ -145,6 +152,7 @@ __traceiter_android_vh_mmap_region __traceiter_android_vh_mutex_init __traceiter_android_vh_mutex_unlock_slowpath + __traceiter_android_vh_mutex_unlock_slowpath_before_wakeq __traceiter_android_vh_mutex_wait_finish __traceiter_android_vh_mutex_wait_start __traceiter_android_vh_oom_swapmem_gather_finish @@ -171,14 +179,17 @@ __traceiter_android_vh_shmem_swapin_folio __traceiter_android_vh_should_alloc_pages_retry __traceiter_android_vh_shrink_folio_list + __traceiter_android_vh_shrink_node_memcgs __traceiter_android_vh_sk_alloc __traceiter_android_vh_sk_free __traceiter_android_vh_swapmem_gather_add_bypass __traceiter_android_vh_swapmem_gather_finish __traceiter_android_vh_swapmem_gather_init + __traceiter_android_vh_swap_writepage __traceiter_android_vh_sync_txn_recvd __traceiter_android_vh_tcp_rtt_estimator __traceiter_android_vh_test_clear_look_around_ref + __traceiter_android_vh_throttle_direct_reclaim_bypass __traceiter_android_vh_try_to_unmap_one __traceiter_android_vh_tune_mmap_readaround __traceiter_android_vh_udp_enqueue_schedule_skb @@ -233,6 +244,8 @@ __tracepoint_android_vh_binder_special_task __tracepoint_android_vh_binder_wait_for_work __tracepoint_android_vh_blk_fill_rwbs + __tracepoint_android_vh_blk_mq_delay_run_hw_queue + __tracepoint_android_vh_blk_mq_kick_requeue_list __tracepoint_android_vh_build_skb_around __tracepoint_android_vh_cgroup_attach __tracepoint_android_vh_check_folio_look_around_ref @@ -242,6 +255,7 @@ __tracepoint_android_vh_configfs_uevent_work __tracepoint_android_vh_count_workingset_refault __tracepoint_android_vh_do_anonymous_page + __tracepoint_android_vh_do_group_exit __tracepoint_android_vh_do_new_mount_fc __tracepoint_android_vh_do_swap_page __tracepoint_android_vh_do_wp_page @@ -252,6 +266,7 @@ __tracepoint_android_vh_free_task __tracepoint_android_vh_free_unref_page_bypass __tracepoint_android_vh_fuse_request_end + __tracepoint_android_vh_init_adjust_zone_wmark __tracepoint_android_vh_inode_lru_isolate __tracepoint_android_vh_invalidate_mapping_pagevec __tracepoint_android_vh_irqtime_account_process_tick @@ -263,6 +278,7 @@ __tracepoint_android_vh_mmap_region __tracepoint_android_vh_mutex_init __tracepoint_android_vh_mutex_unlock_slowpath + __tracepoint_android_vh_mutex_unlock_slowpath_before_wakeq __tracepoint_android_vh_mutex_wait_finish __tracepoint_android_vh_mutex_wait_start __tracepoint_android_vh_oom_swapmem_gather_finish @@ -289,14 +305,17 @@ __tracepoint_android_vh_shmem_swapin_folio __tracepoint_android_vh_should_alloc_pages_retry __tracepoint_android_vh_shrink_folio_list + __tracepoint_android_vh_shrink_node_memcgs __tracepoint_android_vh_sk_alloc __tracepoint_android_vh_sk_free __tracepoint_android_vh_swapmem_gather_add_bypass __tracepoint_android_vh_swapmem_gather_finish __tracepoint_android_vh_swapmem_gather_init + __tracepoint_android_vh_swap_writepage __tracepoint_android_vh_sync_txn_recvd __tracepoint_android_vh_tcp_rtt_estimator __tracepoint_android_vh_test_clear_look_around_ref + __tracepoint_android_vh_throttle_direct_reclaim_bypass __tracepoint_android_vh_try_to_unmap_one __tracepoint_android_vh_tune_mmap_readaround __tracepoint_android_vh_udp_enqueue_schedule_skb @@ -319,3 +338,4 @@ ufshcd_query_descriptor_retry unlock_buffer __wait_on_buffer + zs_lookup_class_index diff --git a/android/abi_gki_aarch64_xiaomi b/android/abi_gki_aarch64_xiaomi index 77cc9c9e5c450..ab3717d5ff243 100644 --- a/android/abi_gki_aarch64_xiaomi +++ b/android/abi_gki_aarch64_xiaomi @@ -1,5 +1,7 @@ [abi_symbol_list] # commonly used symbols + __traceiter_android_rvh_logbuf + __tracepoint_android_rvh_logbuf __traceiter_android_vh_logbuf __tracepoint_android_vh_logbuf tracepoint_probe_register @@ -68,12 +70,17 @@ scsi_device_lookup blk_mq_quiesce_tagset blk_mq_unquiesce_tagset + memblock_free + mem_cgroup_move_account + sum_mthp_stat __traceiter_android_vh_anon_vma_name_recog __traceiter_android_vh_restore_mm_flags __traceiter_android_vh_update_vma_flags + __traceiter_android_vh_thp_vma_allowable_orders __tracepoint_android_vh_anon_vma_name_recog __tracepoint_android_vh_restore_mm_flags __tracepoint_android_vh_update_vma_flags + __tracepoint_android_vh_thp_vma_allowable_orders __traceiter_android_vh_madvise_cold_or_pageout_abort __traceiter_android_vh_compact_finished __tracepoint_android_vh_madvise_cold_or_pageout_abort @@ -82,6 +89,12 @@ __tracepoint_android_vh_customize_thp_pcp_order __traceiter_android_vh_customize_thp_gfp_orders __tracepoint_android_vh_customize_thp_gfp_orders + __traceiter_android_vh_mem_cgroup_charge + __traceiter_android_vh_filemap_add_folio + __traceiter_android_vh_shrink_node + __tracepoint_android_vh_mem_cgroup_charge + __tracepoint_android_vh_filemap_add_folio + __tracepoint_android_vh_shrink_node #required by metis.ko module __traceiter_android_vh_rwsem_read_wait_start @@ -119,6 +132,14 @@ __traceiter_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 __traceiter_android_vh_scheduler_tick __traceiter_android_vh_free_user @@ -423,3 +444,9 @@ __tracepoint_android_vh_get_folio_trylock_result __traceiter_android_vh_do_folio_trylock __tracepoint_android_vh_do_folio_trylock reclaim_pages +__tracepoint_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 diff --git a/android/abi_gki_protected_exports_aarch64 b/android/abi_gki_protected_exports_aarch64 index 963bec9a6e6ec..49ec6db79f6ed 100644 --- a/android/abi_gki_protected_exports_aarch64 +++ b/android/abi_gki_protected_exports_aarch64 @@ -5,7 +5,15 @@ __hci_cmd_sync_ev __hci_cmd_sync_sk __hci_cmd_sync_status __hci_cmd_sync_status_sk +__kunit_abort +__kunit_activate_static_stub +__kunit_add_resource +__kunit_do_failed_assertion +__kunit_test_suites_exit +__kunit_test_suites_init __nfc_alloc_vendor_cmd_reply_skb +__regmap_init_ram +__regmap_init_raw_ram __traceiter_9p_fid_ref __tracepoint_9p_fid_ref alloc_can_err_skb @@ -102,8 +110,16 @@ h4_recv_buf hci_alloc_dev_priv hci_cmd_sync hci_cmd_sync_cancel +hci_cmd_sync_cancel_entry hci_cmd_sync_cancel_sync +hci_cmd_sync_dequeue +hci_cmd_sync_dequeue_once +hci_cmd_sync_lookup_entry hci_cmd_sync_queue +hci_cmd_sync_queue_once +hci_cmd_sync_run +hci_cmd_sync_run_once +hci_cmd_sync_status hci_cmd_sync_submit hci_conn_check_secure hci_conn_security @@ -152,6 +168,32 @@ ieee802154_unregister_hw ieee802154_xmit_complete ieee802154_xmit_error ieee802154_xmit_hw_error +kunit_add_action +kunit_add_action_or_reset +kunit_assert_prologue +kunit_binary_assert_format +kunit_binary_ptr_assert_format +kunit_binary_str_assert_format +kunit_cleanup +kunit_deactivate_static_stub +kunit_destroy_resource +kunit_fail_assert_format +kunit_init_test +kunit_kfree +kunit_kmalloc_array +kunit_log_append +kunit_mem_assert_format +kunit_ptr_not_err_assert_format +kunit_release_action +kunit_remove_action +kunit_remove_resource +kunit_run_tests +kunit_suite_has_succeeded +kunit_suite_num_test_cases +kunit_test_case_num +kunit_try_catch_run +kunit_try_catch_throw +kunit_unary_assert_format l2cap_add_psm l2cap_chan_close l2cap_chan_connect @@ -416,6 +458,25 @@ v9fs_get_default_trans v9fs_get_trans_by_name v9fs_register_trans v9fs_unregister_trans +vp_modern_config_vector +vp_modern_generation +vp_modern_get_driver_features +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 wpan_phy_find wpan_phy_for_each wpan_phy_free @@ -429,4 +490,4 @@ wwan_port_txoff wwan_port_txon wwan_register_ops wwan_remove_port -wwan_unregister_ops \ No newline at end of file +wwan_unregister_ops diff --git a/android/gki_aarch64_protected_modules b/android/gki_aarch64_protected_modules deleted file mode 100644 index 0ec2e372641bd..0000000000000 --- a/android/gki_aarch64_protected_modules +++ /dev/null @@ -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 diff --git a/arch/arm/boot/dts/microchip/sam9x60.dtsi b/arch/arm/boot/dts/microchip/sam9x60.dtsi index 73d570a172690..1705c96f4221e 100644 --- a/arch/arm/boot/dts/microchip/sam9x60.dtsi +++ b/arch/arm/boot/dts/microchip/sam9x60.dtsi @@ -1312,7 +1312,7 @@ compatible = "microchip,sam9x60-rtt", "atmel,at91sam9260-rtt"; reg = <0xfffffe20 0x20>; interrupts = <1 IRQ_TYPE_LEVEL_HIGH 7>; - clocks = <&clk32k 0>; + clocks = <&clk32k 1>; }; pit: timer@fffffe40 { @@ -1338,7 +1338,7 @@ compatible = "microchip,sam9x60-rtc", "atmel,at91sam9x5-rtc"; reg = <0xfffffea8 0x100>; interrupts = <1 IRQ_TYPE_LEVEL_HIGH 7>; - clocks = <&clk32k 0>; + clocks = <&clk32k 1>; }; watchdog: watchdog@ffffff80 { diff --git a/arch/arm/boot/dts/microchip/sama7g5.dtsi b/arch/arm/boot/dts/microchip/sama7g5.dtsi index 269e0a3ca269c..7a95464bb78d8 100644 --- a/arch/arm/boot/dts/microchip/sama7g5.dtsi +++ b/arch/arm/boot/dts/microchip/sama7g5.dtsi @@ -272,7 +272,7 @@ compatible = "microchip,sama7g5-rtt", "microchip,sam9x60-rtt", "atmel,at91sam9260-rtt"; reg = <0xe001d020 0x30>; interrupts = ; - clocks = <&clk32k 0>; + clocks = <&clk32k 1>; }; clk32k: clock-controller@e001d050 { diff --git a/arch/arm/boot/dts/nxp/imx/imx6ul-geam.dts b/arch/arm/boot/dts/nxp/imx/imx6ul-geam.dts index 875ae699c5cb8..ce9f4c2267293 100644 --- a/arch/arm/boot/dts/nxp/imx/imx6ul-geam.dts +++ b/arch/arm/boot/dts/nxp/imx/imx6ul-geam.dts @@ -366,7 +366,7 @@ }; pinctrl_tsc: tscgrp { - fsl,pin = < + fsl,pins = < MX6UL_PAD_GPIO1_IO01__GPIO1_IO01 0xb0 MX6UL_PAD_GPIO1_IO02__GPIO1_IO02 0xb0 MX6UL_PAD_GPIO1_IO03__GPIO1_IO03 0xb0 diff --git a/arch/arm/boot/dts/nxp/imx/imx7d-zii-rmu2.dts b/arch/arm/boot/dts/nxp/imx/imx7d-zii-rmu2.dts index 521493342fe97..8f5566027c25a 100644 --- a/arch/arm/boot/dts/nxp/imx/imx7d-zii-rmu2.dts +++ b/arch/arm/boot/dts/nxp/imx/imx7d-zii-rmu2.dts @@ -350,7 +350,7 @@ &iomuxc_lpsr { pinctrl_enet1_phy_interrupt: enet1phyinterruptgrp { - fsl,phy = < + fsl,pins = < MX7D_PAD_LPSR_GPIO1_IO02__GPIO1_IO2 0x08 >; }; diff --git a/arch/arm/crypto/aes-ce-glue.c b/arch/arm/crypto/aes-ce-glue.c index b668c97663ec0..f5b66f4cf45d9 100644 --- a/arch/arm/crypto/aes-ce-glue.c +++ b/arch/arm/crypto/aes-ce-glue.c @@ -711,7 +711,7 @@ static int __init aes_init(void) algname = aes_algs[i].base.cra_name + 2; drvname = aes_algs[i].base.cra_driver_name + 2; basename = aes_algs[i].base.cra_driver_name; - simd = simd_skcipher_create_compat(algname, drvname, basename); + simd = simd_skcipher_create_compat(aes_algs + i, algname, drvname, basename); err = PTR_ERR(simd); if (IS_ERR(simd)) goto unregister_simds; diff --git a/arch/arm/crypto/aes-neonbs-glue.c b/arch/arm/crypto/aes-neonbs-glue.c index f00f042ef3570..0ca94b90bc4ec 100644 --- a/arch/arm/crypto/aes-neonbs-glue.c +++ b/arch/arm/crypto/aes-neonbs-glue.c @@ -539,7 +539,7 @@ static int __init aes_init(void) algname = aes_algs[i].base.cra_name + 2; drvname = aes_algs[i].base.cra_driver_name + 2; basename = aes_algs[i].base.cra_driver_name; - simd = simd_skcipher_create_compat(algname, drvname, basename); + simd = simd_skcipher_create_compat(aes_algs + i, algname, drvname, basename); err = PTR_ERR(simd); if (IS_ERR(simd)) goto unregister_simds; diff --git a/arch/arm/include/asm/pgtable.h b/arch/arm/include/asm/pgtable.h index 6f25eb9bafe49..be91e376df79e 100644 --- a/arch/arm/include/asm/pgtable.h +++ b/arch/arm/include/asm/pgtable.h @@ -151,6 +151,8 @@ extern pgprot_t phys_mem_access_prot(struct file *file, unsigned long pfn, extern pgd_t swapper_pg_dir[PTRS_PER_PGD]; +#define pgdp_get(pgpd) READ_ONCE(*pgdp) + #define pud_page(pud) pmd_page(__pmd(pud_val(pud))) #define pud_write(pud) pmd_write(__pmd(pud_val(pud))) diff --git a/arch/arm/mach-ep93xx/clock.c b/arch/arm/mach-ep93xx/clock.c index 85a496ddc6197..e9f72a529b508 100644 --- a/arch/arm/mach-ep93xx/clock.c +++ b/arch/arm/mach-ep93xx/clock.c @@ -359,7 +359,7 @@ static unsigned long ep93xx_div_recalc_rate(struct clk_hw *hw, u32 val = __raw_readl(psc->reg); u8 index = (val & psc->mask) >> psc->shift; - if (index > psc->num_div) + if (index >= psc->num_div) return 0; return DIV_ROUND_UP_ULL(parent_rate, psc->div[index]); diff --git a/arch/arm/mach-versatile/platsmp-realview.c b/arch/arm/mach-versatile/platsmp-realview.c index 5d363385c8019..059d796b26bc8 100644 --- a/arch/arm/mach-versatile/platsmp-realview.c +++ b/arch/arm/mach-versatile/platsmp-realview.c @@ -66,6 +66,7 @@ static void __init realview_smp_prepare_cpus(unsigned int max_cpus) return; } map = syscon_node_to_regmap(np); + of_node_put(np); if (IS_ERR(map)) { pr_err("PLATSMP: No syscon regmap\n"); return; diff --git a/arch/arm/vfp/vfpinstr.h b/arch/arm/vfp/vfpinstr.h index 3c7938fd40aad..32090b0fb250b 100644 --- a/arch/arm/vfp/vfpinstr.h +++ b/arch/arm/vfp/vfpinstr.h @@ -64,33 +64,37 @@ #ifdef CONFIG_AS_VFP_VMRS_FPINST -#define fmrx(_vfp_) ({ \ - u32 __v; \ - asm(".fpu vfpv2\n" \ - "vmrs %0, " #_vfp_ \ - : "=r" (__v) : : "cc"); \ - __v; \ - }) - -#define fmxr(_vfp_,_var_) \ - asm(".fpu vfpv2\n" \ - "vmsr " #_vfp_ ", %0" \ - : : "r" (_var_) : "cc") +#define fmrx(_vfp_) ({ \ + u32 __v; \ + asm volatile (".fpu vfpv2\n" \ + "vmrs %0, " #_vfp_ \ + : "=r" (__v) : : "cc"); \ + __v; \ +}) + +#define fmxr(_vfp_, _var_) ({ \ + asm volatile (".fpu vfpv2\n" \ + "vmsr " #_vfp_ ", %0" \ + : : "r" (_var_) : "cc"); \ +}) #else #define vfpreg(_vfp_) #_vfp_ -#define fmrx(_vfp_) ({ \ - u32 __v; \ - asm("mrc p10, 7, %0, " vfpreg(_vfp_) ", cr0, 0 @ fmrx %0, " #_vfp_ \ - : "=r" (__v) : : "cc"); \ - __v; \ - }) - -#define fmxr(_vfp_,_var_) \ - asm("mcr p10, 7, %0, " vfpreg(_vfp_) ", cr0, 0 @ fmxr " #_vfp_ ", %0" \ - : : "r" (_var_) : "cc") +#define fmrx(_vfp_) ({ \ + u32 __v; \ + asm volatile ("mrc p10, 7, %0, " vfpreg(_vfp_) "," \ + "cr0, 0 @ fmrx %0, " #_vfp_ \ + : "=r" (__v) : : "cc"); \ + __v; \ +}) + +#define fmxr(_vfp_, _var_) ({ \ + asm volatile ("mcr p10, 7, %0, " vfpreg(_vfp_) "," \ + "cr0, 0 @ fmxr " #_vfp_ ", %0" \ + : : "r" (_var_) : "cc"); \ +}) #endif diff --git a/arch/arm64/Kconfig b/arch/arm64/Kconfig index 6869d0a230d3d..ff0802ea8b9b4 100644 --- a/arch/arm64/Kconfig +++ b/arch/arm64/Kconfig @@ -194,7 +194,8 @@ config ARM64 select HAVE_DMA_CONTIGUOUS select HAVE_DYNAMIC_FTRACE select HAVE_DYNAMIC_FTRACE_WITH_ARGS \ - if $(cc-option,-fpatchable-function-entry=2) + if (GCC_SUPPORTS_DYNAMIC_FTRACE_WITH_ARGS || \ + CLANG_SUPPORTS_DYNAMIC_FTRACE_WITH_ARGS) select HAVE_DYNAMIC_FTRACE_WITH_DIRECT_CALLS \ if DYNAMIC_FTRACE_WITH_ARGS && DYNAMIC_FTRACE_WITH_CALL_OPS select HAVE_DYNAMIC_FTRACE_WITH_CALL_OPS \ @@ -266,12 +267,10 @@ config CLANG_SUPPORTS_DYNAMIC_FTRACE_WITH_ARGS def_bool CC_IS_CLANG # https://github.com/ClangBuiltLinux/linux/issues/1507 depends on AS_IS_GNU || (AS_IS_LLVM && (LD_IS_LLD || LD_VERSION >= 23600)) - select HAVE_DYNAMIC_FTRACE_WITH_ARGS config GCC_SUPPORTS_DYNAMIC_FTRACE_WITH_ARGS def_bool CC_IS_GCC depends on $(cc-option,-fpatchable-function-entry=2) - select HAVE_DYNAMIC_FTRACE_WITH_ARGS config 64BIT def_bool y @@ -424,7 +423,7 @@ config AMPERE_ERRATUM_AC03_CPU_38 default y help This option adds an alternative code sequence to work around Ampere - erratum AC03_CPU_38 on AmpereOne. + errata AC03_CPU_38 and AC04_CPU_10 on AmpereOne. The affected design reports FEAT_HAFDBS as not implemented in ID_AA64MMFR1_EL1.HAFDBS, but (V)TCR_ELx.{HA,HD} are not RES0 @@ -1084,6 +1083,7 @@ config ARM64_ERRATUM_3194386 * ARM Cortex-A78C erratum 3324346 * ARM Cortex-A78C erratum 3324347 * ARM Cortex-A710 erratam 3324338 + * ARM Cortex-A715 errartum 3456084 * ARM Cortex-A720 erratum 3456091 * ARM Cortex-A725 erratum 3456106 * ARM Cortex-X1 erratum 3324344 @@ -1094,6 +1094,7 @@ config ARM64_ERRATUM_3194386 * ARM Cortex-X925 erratum 3324334 * ARM Neoverse-N1 erratum 3324349 * ARM Neoverse N2 erratum 3324339 + * ARM Neoverse-N3 erratum 3456111 * ARM Neoverse-V1 erratum 3324341 * ARM Neoverse V2 erratum 3324336 * ARM Neoverse-V3 erratum 3312417 diff --git a/arch/arm64/boot/dts/exynos/exynos7885-jackpotlte.dts b/arch/arm64/boot/dts/exynos/exynos7885-jackpotlte.dts index 47a389d9ff7d7..9d74fa6bfed9f 100644 --- a/arch/arm64/boot/dts/exynos/exynos7885-jackpotlte.dts +++ b/arch/arm64/boot/dts/exynos/exynos7885-jackpotlte.dts @@ -32,7 +32,7 @@ device_type = "memory"; reg = <0x0 0x80000000 0x3da00000>, <0x0 0xc0000000 0x40000000>, - <0x8 0x80000000 0x40000000>; + <0x8 0x80000000 0x80000000>; }; gpio-keys { diff --git a/arch/arm64/boot/dts/mediatek/mt8186.dtsi b/arch/arm64/boot/dts/mediatek/mt8186.dtsi index 84ec6c1aa12b9..2c184f9e0fc39 100644 --- a/arch/arm64/boot/dts/mediatek/mt8186.dtsi +++ b/arch/arm64/boot/dts/mediatek/mt8186.dtsi @@ -731,7 +731,7 @@ opp-900000000-3 { opp-hz = /bits/ 64 <900000000>; opp-microvolt = <850000>; - opp-supported-hw = <0x8>; + opp-supported-hw = <0xcf>; }; opp-900000000-4 { @@ -743,13 +743,13 @@ opp-900000000-5 { opp-hz = /bits/ 64 <900000000>; opp-microvolt = <825000>; - opp-supported-hw = <0x30>; + opp-supported-hw = <0x20>; }; opp-950000000-3 { opp-hz = /bits/ 64 <950000000>; opp-microvolt = <900000>; - opp-supported-hw = <0x8>; + opp-supported-hw = <0xcf>; }; opp-950000000-4 { @@ -761,13 +761,13 @@ opp-950000000-5 { opp-hz = /bits/ 64 <950000000>; opp-microvolt = <850000>; - opp-supported-hw = <0x30>; + opp-supported-hw = <0x20>; }; opp-1000000000-3 { opp-hz = /bits/ 64 <1000000000>; opp-microvolt = <950000>; - opp-supported-hw = <0x8>; + opp-supported-hw = <0xcf>; }; opp-1000000000-4 { @@ -779,7 +779,7 @@ opp-1000000000-5 { opp-hz = /bits/ 64 <1000000000>; opp-microvolt = <875000>; - opp-supported-hw = <0x30>; + opp-supported-hw = <0x20>; }; }; diff --git a/arch/arm64/boot/dts/mediatek/mt8195-cherry.dtsi b/arch/arm64/boot/dts/mediatek/mt8195-cherry.dtsi index b78f408110bf7..34e18eb5d7f45 100644 --- a/arch/arm64/boot/dts/mediatek/mt8195-cherry.dtsi +++ b/arch/arm64/boot/dts/mediatek/mt8195-cherry.dtsi @@ -1312,6 +1312,7 @@ usb2-lpm-disable; vusb33-supply = <&mt6359_vusb_ldo_reg>; vbus-supply = <&usb_vbus>; + mediatek,u3p-dis-msk = <1>; }; #include diff --git a/arch/arm64/boot/dts/mediatek/mt8195.dtsi b/arch/arm64/boot/dts/mediatek/mt8195.dtsi index 20e6d90cc4118..d21ba00a5bd5d 100644 --- a/arch/arm64/boot/dts/mediatek/mt8195.dtsi +++ b/arch/arm64/boot/dts/mediatek/mt8195.dtsi @@ -2766,10 +2766,10 @@ compatible = "mediatek,mt8195-dp-intf"; reg = <0 0x1c015000 0 0x1000>; interrupts = ; - clocks = <&vdosys0 CLK_VDO0_DP_INTF0>, - <&vdosys0 CLK_VDO0_DP_INTF0_DP_INTF>, + clocks = <&vdosys0 CLK_VDO0_DP_INTF0_DP_INTF>, + <&vdosys0 CLK_VDO0_DP_INTF0>, <&apmixedsys CLK_APMIXED_TVDPLL1>; - clock-names = "engine", "pixel", "pll"; + clock-names = "pixel", "engine", "pll"; status = "disabled"; }; @@ -3036,10 +3036,10 @@ reg = <0 0x1c113000 0 0x1000>; interrupts = ; power-domains = <&spm MT8195_POWER_DOMAIN_VDOSYS1>; - clocks = <&vdosys1 CLK_VDO1_DP_INTF0_MM>, - <&vdosys1 CLK_VDO1_DPINTF>, + clocks = <&vdosys1 CLK_VDO1_DPINTF>, + <&vdosys1 CLK_VDO1_DP_INTF0_MM>, <&apmixedsys CLK_APMIXED_TVDPLL2>; - clock-names = "engine", "pixel", "pll"; + clock-names = "pixel", "engine", "pll"; status = "disabled"; }; diff --git a/arch/arm64/boot/dts/qcom/sa8775p.dtsi b/arch/arm64/boot/dts/qcom/sa8775p.dtsi index 44bea063aedba..f6766fa8df34d 100644 --- a/arch/arm64/boot/dts/qcom/sa8775p.dtsi +++ b/arch/arm64/boot/dts/qcom/sa8775p.dtsi @@ -1951,6 +1951,7 @@ reg = <0x0 0x15000000 0x0 0x100000>; #iommu-cells = <2>; #global-interrupts = <2>; + dma-coherent; interrupts = , , @@ -2089,6 +2090,7 @@ reg = <0x0 0x15200000 0x0 0x80000>; #iommu-cells = <2>; #global-interrupts = <2>; + dma-coherent; interrupts = , , diff --git a/arch/arm64/boot/dts/renesas/r9a07g043u.dtsi b/arch/arm64/boot/dts/renesas/r9a07g043u.dtsi index 4b72de43b71cc..71d51febabc1e 100644 --- a/arch/arm64/boot/dts/renesas/r9a07g043u.dtsi +++ b/arch/arm64/boot/dts/renesas/r9a07g043u.dtsi @@ -145,8 +145,8 @@ #interrupt-cells = <3>; #address-cells = <0>; interrupt-controller; - reg = <0x0 0x11900000 0 0x40000>, - <0x0 0x11940000 0 0x60000>; + reg = <0x0 0x11900000 0 0x20000>, + <0x0 0x11940000 0 0x40000>; interrupts = ; }; }; diff --git a/arch/arm64/boot/dts/renesas/r9a07g044.dtsi b/arch/arm64/boot/dts/renesas/r9a07g044.dtsi index a877738c30484..edc942c846395 100644 --- a/arch/arm64/boot/dts/renesas/r9a07g044.dtsi +++ b/arch/arm64/boot/dts/renesas/r9a07g044.dtsi @@ -997,8 +997,8 @@ #interrupt-cells = <3>; #address-cells = <0>; interrupt-controller; - reg = <0x0 0x11900000 0 0x40000>, - <0x0 0x11940000 0 0x60000>; + reg = <0x0 0x11900000 0 0x20000>, + <0x0 0x11940000 0 0x40000>; interrupts = ; }; diff --git a/arch/arm64/boot/dts/renesas/r9a07g054.dtsi b/arch/arm64/boot/dts/renesas/r9a07g054.dtsi index 3f01b096cfb71..d61f7894e55cd 100644 --- a/arch/arm64/boot/dts/renesas/r9a07g054.dtsi +++ b/arch/arm64/boot/dts/renesas/r9a07g054.dtsi @@ -1004,8 +1004,8 @@ #interrupt-cells = <3>; #address-cells = <0>; interrupt-controller; - reg = <0x0 0x11900000 0 0x40000>, - <0x0 0x11940000 0 0x60000>; + reg = <0x0 0x11900000 0 0x20000>, + <0x0 0x11940000 0 0x40000>; interrupts = ; }; diff --git a/arch/arm64/boot/dts/rockchip/rk3328-rock-pi-e.dts b/arch/arm64/boot/dts/rockchip/rk3328-rock-pi-e.dts index d9905a08c6ce8..66443d52cd34d 100644 --- a/arch/arm64/boot/dts/rockchip/rk3328-rock-pi-e.dts +++ b/arch/arm64/boot/dts/rockchip/rk3328-rock-pi-e.dts @@ -332,7 +332,7 @@ pmic { pmic_int_l: pmic-int-l { - rockchip,pins = <2 RK_PA6 RK_FUNC_GPIO &pcfg_pull_up>; + rockchip,pins = <0 RK_PA2 RK_FUNC_GPIO &pcfg_pull_up>; }; }; diff --git a/arch/arm64/boot/dts/rockchip/rk3399-pinebook-pro.dts b/arch/arm64/boot/dts/rockchip/rk3399-pinebook-pro.dts index 294eb2de263de..f5e124b235c83 100644 --- a/arch/arm64/boot/dts/rockchip/rk3399-pinebook-pro.dts +++ b/arch/arm64/boot/dts/rockchip/rk3399-pinebook-pro.dts @@ -32,12 +32,12 @@ backlight: edp-backlight { compatible = "pwm-backlight"; power-supply = <&vcc_12v>; - pwms = <&pwm0 0 740740 0>; + pwms = <&pwm0 0 125000 0>; }; bat: battery { compatible = "simple-battery"; - charge-full-design-microamp-hours = <9800000>; + charge-full-design-microamp-hours = <10000000>; voltage-max-design-microvolt = <4350000>; voltage-min-design-microvolt = <3000000>; }; diff --git a/arch/arm64/boot/dts/rockchip/rk3399-puma.dtsi b/arch/arm64/boot/dts/rockchip/rk3399-puma.dtsi index f2ca5d30d223c..aba2748fe54c7 100644 --- a/arch/arm64/boot/dts/rockchip/rk3399-puma.dtsi +++ b/arch/arm64/boot/dts/rockchip/rk3399-puma.dtsi @@ -119,6 +119,22 @@ drive-impedance-ohm = <33>; }; +&gpio3 { + /* + * The Qseven BIOS_DISABLE signal on the RK3399-Q7 keeps the on-module + * eMMC and SPI flash powered-down initially (in fact it keeps the + * reset signal asserted). BIOS_DISABLE_OVERRIDE pin allows to override + * that signal so that eMMC and SPI can be used regardless of the state + * of the signal. + */ + bios-disable-override-hog { + gpios = ; + gpio-hog; + line-name = "bios_disable_override"; + output-high; + }; +}; + &gmac { assigned-clocks = <&cru SCLK_RMII_SRC>; assigned-clock-parents = <&clkin_gmac>; @@ -374,6 +390,7 @@ &i2s0 { pinctrl-0 = <&i2s0_2ch_bus>; + pinctrl-1 = <&i2s0_2ch_bus_bclk_off>; rockchip,playback-channels = <2>; rockchip,capture-channels = <2>; status = "okay"; @@ -382,8 +399,8 @@ /* * As Q7 does not specify neither a global nor a RX clock for I2S these * signals are not used. Furthermore I2S0_LRCK_RX is used as GPIO. - * Therefore we have to redefine the i2s0_2ch_bus definition to prevent - * conflicts. + * Therefore we have to redefine the i2s0_2ch_bus and i2s0_2ch_bus_bclk_off + * definitions to prevent conflicts. */ &i2s0_2ch_bus { rockchip,pins = @@ -393,6 +410,14 @@ <3 RK_PD7 1 &pcfg_pull_none>; }; +&i2s0_2ch_bus_bclk_off { + rockchip,pins = + <3 RK_PD0 RK_FUNC_GPIO &pcfg_pull_none>, + <3 RK_PD2 1 &pcfg_pull_none>, + <3 RK_PD3 1 &pcfg_pull_none>, + <3 RK_PD7 1 &pcfg_pull_none>; +}; + &io_domains { status = "okay"; bt656-supply = <&vcc_1v8>; @@ -408,9 +433,14 @@ &pinctrl { pinctrl-names = "default"; - pinctrl-0 = <&q7_thermal_pin>; + pinctrl-0 = <&q7_thermal_pin &bios_disable_override_hog_pin>; gpios { + bios_disable_override_hog_pin: bios-disable-override-hog-pin { + rockchip,pins = + <3 RK_PD5 RK_FUNC_GPIO &pcfg_pull_down>; + }; + q7_thermal_pin: q7-thermal-pin { rockchip,pins = <0 RK_PA3 RK_FUNC_GPIO &pcfg_pull_up>; diff --git a/arch/arm64/boot/dts/rockchip/rk3568-odroid-m1.dts b/arch/arm64/boot/dts/rockchip/rk3568-odroid-m1.dts index a337f547caf53..6a02db4f073f2 100644 --- a/arch/arm64/boot/dts/rockchip/rk3568-odroid-m1.dts +++ b/arch/arm64/boot/dts/rockchip/rk3568-odroid-m1.dts @@ -13,7 +13,7 @@ / { model = "Hardkernel ODROID-M1"; - compatible = "rockchip,rk3568-odroid-m1", "rockchip,rk3568"; + compatible = "hardkernel,odroid-m1", "rockchip,rk3568"; aliases { ethernet0 = &gmac0; diff --git a/arch/arm64/boot/dts/ti/k3-j721e-beagleboneai64.dts b/arch/arm64/boot/dts/ti/k3-j721e-beagleboneai64.dts index 2f954729f3533..7897323376a5b 100644 --- a/arch/arm64/boot/dts/ti/k3-j721e-beagleboneai64.dts +++ b/arch/arm64/boot/dts/ti/k3-j721e-beagleboneai64.dts @@ -123,7 +123,7 @@ no-map; }; - c66_1_dma_memory_region: c66-dma-memory@a6000000 { + c66_0_dma_memory_region: c66-dma-memory@a6000000 { compatible = "shared-dma-pool"; reg = <0x00 0xa6000000 0x00 0x100000>; no-map; @@ -135,7 +135,7 @@ no-map; }; - c66_0_dma_memory_region: c66-dma-memory@a7000000 { + c66_1_dma_memory_region: c66-dma-memory@a7000000 { compatible = "shared-dma-pool"; reg = <0x00 0xa7000000 0x00 0x100000>; no-map; diff --git a/arch/arm64/boot/dts/ti/k3-j721e-sk.dts b/arch/arm64/boot/dts/ti/k3-j721e-sk.dts index 42fe8eee9ec8c..ccacb65683b5b 100644 --- a/arch/arm64/boot/dts/ti/k3-j721e-sk.dts +++ b/arch/arm64/boot/dts/ti/k3-j721e-sk.dts @@ -119,7 +119,7 @@ no-map; }; - c66_1_dma_memory_region: c66-dma-memory@a6000000 { + c66_0_dma_memory_region: c66-dma-memory@a6000000 { compatible = "shared-dma-pool"; reg = <0x00 0xa6000000 0x00 0x100000>; no-map; @@ -131,7 +131,7 @@ no-map; }; - c66_0_dma_memory_region: c66-dma-memory@a7000000 { + c66_1_dma_memory_region: c66-dma-memory@a7000000 { compatible = "shared-dma-pool"; reg = <0x00 0xa7000000 0x00 0x100000>; no-map; diff --git a/arch/arm64/configs/gki_defconfig b/arch/arm64/configs/gki_defconfig index e03b63f00968d..552905b4c488c 100644 --- a/arch/arm64/configs/gki_defconfig +++ b/arch/arm64/configs/gki_defconfig @@ -70,6 +70,7 @@ CONFIG_UNWIND_PATCH_PAC_INTO_SCS=y CONFIG_CMDLINE="console=ttynull stack_depot_disable=on cgroup_disable=pressure kasan.stacktrace=off kvm-arm.mode=protected bootconfig ioremap_guard" CONFIG_CMDLINE_EXTEND=y # CONFIG_DMI is not set +CONFIG_HIBERNATION=y CONFIG_PM_WAKELOCKS=y CONFIG_PM_WAKELOCKS_LIMIT=0 # CONFIG_PM_WAKELOCKS_GC is not set @@ -131,6 +132,9 @@ CONFIG_ANON_VMA_NAME=y CONFIG_USERFAULTFD=y CONFIG_LRU_GEN=y CONFIG_LRU_GEN_ENABLED=y +CONFIG_DAMON=y +CONFIG_DAMON_VADDR=y +CONFIG_DAMON_SYSFS=y CONFIG_NET=y CONFIG_PACKET=y CONFIG_XFRM_USER=y @@ -149,6 +153,11 @@ CONFIG_NET_IPVTI=y CONFIG_INET_ESP=y CONFIG_INET_UDP_DIAG=y CONFIG_INET_DIAG_DESTROY=y +CONFIG_TCP_CONG_ADVANCED=y +# CONFIG_TCP_CONG_BIC is not set +# CONFIG_TCP_CONG_WESTWOOD is not set +# CONFIG_TCP_CONG_HTCP is not set +CONFIG_TCP_CONG_BBR=y CONFIG_IPV6_ROUTER_PREF=y CONFIG_IPV6_ROUTE_INFO=y CONFIG_IPV6_OPTIMISTIC_DAD=y @@ -331,6 +340,7 @@ CONFIG_VCPU_STALL_DETECTOR=m CONFIG_SCSI=y # CONFIG_SCSI_PROC_FS is not set CONFIG_BLK_DEV_SD=y +CONFIG_SCSI_SCAN_ASYNC=y CONFIG_MD=y CONFIG_BLK_DEV_DM=y CONFIG_DM_CRYPT=y @@ -339,6 +349,7 @@ CONFIG_DM_SNAPSHOT=y CONFIG_DM_UEVENT=y CONFIG_DM_VERITY=y CONFIG_DM_VERITY_FEC=y +CONFIG_DM_BOW=y CONFIG_NETDEVICES=y CONFIG_DUMMY=y CONFIG_WIREGUARD=y @@ -515,6 +526,7 @@ CONFIG_USB_ANNOUNCE_NEW_DEVICES=y CONFIG_USB_OTG=y CONFIG_USB_MON=m CONFIG_USB_XHCI_HCD=y +CONFIG_USB_XHCI_SIDEBAND=y CONFIG_USB_EHCI_HCD=y CONFIG_USB_EHCI_ROOT_HUB_TT=y CONFIG_USB_EHCI_HCD_PLATFORM=y @@ -752,7 +764,6 @@ CONFIG_UBSAN_TRAP=y # CONFIG_UBSAN_ENUM is not set CONFIG_PAGE_OWNER=y CONFIG_PAGE_PINNER=y -CONFIG_DEBUG_STACK_USAGE=y CONFIG_DEBUG_MEMORY_INIT=y CONFIG_KASAN=y CONFIG_KASAN_HW_TAGS=y diff --git a/arch/arm64/include/asm/acpi.h b/arch/arm64/include/asm/acpi.h index 6792a1f83f2ad..a407f9cd549ed 100644 --- a/arch/arm64/include/asm/acpi.h +++ b/arch/arm64/include/asm/acpi.h @@ -119,6 +119,18 @@ static inline u32 get_acpi_id_for_cpu(unsigned int cpu) return acpi_cpu_get_madt_gicc(cpu)->uid; } +static inline int get_cpu_for_acpi_id(u32 uid) +{ + int cpu; + + for (cpu = 0; cpu < nr_cpu_ids; cpu++) + if (acpi_cpu_get_madt_gicc(cpu) && + uid == get_acpi_id_for_cpu(cpu)) + return cpu; + + return -EINVAL; +} + static inline void arch_fix_phys_package_id(int num, u32 slot) { } void __init acpi_init_cpus(void); int apei_claim_sea(struct pt_regs *regs); diff --git a/arch/arm64/include/asm/cputype.h b/arch/arm64/include/asm/cputype.h index 5fd7caea44193..488f8e7513495 100644 --- a/arch/arm64/include/asm/cputype.h +++ b/arch/arm64/include/asm/cputype.h @@ -94,6 +94,7 @@ #define ARM_CPU_PART_NEOVERSE_V3 0xD84 #define ARM_CPU_PART_CORTEX_X925 0xD85 #define ARM_CPU_PART_CORTEX_A725 0xD87 +#define ARM_CPU_PART_NEOVERSE_N3 0xD8E #define APM_CPU_PART_XGENE 0x000 #define APM_CPU_VAR_POTENZA 0x00 @@ -143,6 +144,7 @@ #define APPLE_CPU_PART_M2_AVALANCHE_MAX 0x039 #define AMPERE_CPU_PART_AMPERE1 0xAC3 +#define AMPERE_CPU_PART_AMPERE1A 0xAC4 #define MICROSOFT_CPU_PART_AZURE_COBALT_100 0xD49 /* Based on r0p0 of ARM Neoverse N2 */ @@ -175,6 +177,7 @@ #define MIDR_NEOVERSE_V3 MIDR_CPU_MODEL(ARM_CPU_IMP_ARM, ARM_CPU_PART_NEOVERSE_V3) #define MIDR_CORTEX_X925 MIDR_CPU_MODEL(ARM_CPU_IMP_ARM, ARM_CPU_PART_CORTEX_X925) #define MIDR_CORTEX_A725 MIDR_CPU_MODEL(ARM_CPU_IMP_ARM, ARM_CPU_PART_CORTEX_A725) +#define MIDR_NEOVERSE_N3 MIDR_CPU_MODEL(ARM_CPU_IMP_ARM, ARM_CPU_PART_NEOVERSE_N3) #define MIDR_THUNDERX MIDR_CPU_MODEL(ARM_CPU_IMP_CAVIUM, CAVIUM_CPU_PART_THUNDERX) #define MIDR_THUNDERX_81XX MIDR_CPU_MODEL(ARM_CPU_IMP_CAVIUM, CAVIUM_CPU_PART_THUNDERX_81XX) #define MIDR_THUNDERX_83XX MIDR_CPU_MODEL(ARM_CPU_IMP_CAVIUM, CAVIUM_CPU_PART_THUNDERX_83XX) @@ -212,6 +215,7 @@ #define MIDR_APPLE_M2_BLIZZARD_MAX MIDR_CPU_MODEL(ARM_CPU_IMP_APPLE, APPLE_CPU_PART_M2_BLIZZARD_MAX) #define MIDR_APPLE_M2_AVALANCHE_MAX MIDR_CPU_MODEL(ARM_CPU_IMP_APPLE, APPLE_CPU_PART_M2_AVALANCHE_MAX) #define MIDR_AMPERE1 MIDR_CPU_MODEL(ARM_CPU_IMP_AMPERE, AMPERE_CPU_PART_AMPERE1) +#define MIDR_AMPERE1A MIDR_CPU_MODEL(ARM_CPU_IMP_AMPERE, AMPERE_CPU_PART_AMPERE1A) #define MIDR_MICROSOFT_AZURE_COBALT_100 MIDR_CPU_MODEL(ARM_CPU_IMP_MICROSOFT, MICROSOFT_CPU_PART_AZURE_COBALT_100) /* Fujitsu Erratum 010001 affects A64FX 1.0 and 1.1, (v0r0 and v1r0) */ diff --git a/arch/arm64/include/asm/esr.h b/arch/arm64/include/asm/esr.h index 60f7b5ab1261c..5cdb1f77f9af9 100644 --- a/arch/arm64/include/asm/esr.h +++ b/arch/arm64/include/asm/esr.h @@ -10,63 +10,63 @@ #include #include -#define ESR_ELx_EC_UNKNOWN (0x00) -#define ESR_ELx_EC_WFx (0x01) +#define ESR_ELx_EC_UNKNOWN UL(0x00) +#define ESR_ELx_EC_WFx UL(0x01) /* Unallocated EC: 0x02 */ -#define ESR_ELx_EC_CP15_32 (0x03) -#define ESR_ELx_EC_CP15_64 (0x04) -#define ESR_ELx_EC_CP14_MR (0x05) -#define ESR_ELx_EC_CP14_LS (0x06) -#define ESR_ELx_EC_FP_ASIMD (0x07) -#define ESR_ELx_EC_CP10_ID (0x08) /* EL2 only */ -#define ESR_ELx_EC_PAC (0x09) /* EL2 and above */ +#define ESR_ELx_EC_CP15_32 UL(0x03) +#define ESR_ELx_EC_CP15_64 UL(0x04) +#define ESR_ELx_EC_CP14_MR UL(0x05) +#define ESR_ELx_EC_CP14_LS UL(0x06) +#define ESR_ELx_EC_FP_ASIMD UL(0x07) +#define ESR_ELx_EC_CP10_ID UL(0x08) /* EL2 only */ +#define ESR_ELx_EC_PAC UL(0x09) /* EL2 and above */ /* Unallocated EC: 0x0A - 0x0B */ -#define ESR_ELx_EC_CP14_64 (0x0C) -#define ESR_ELx_EC_BTI (0x0D) -#define ESR_ELx_EC_ILL (0x0E) +#define ESR_ELx_EC_CP14_64 UL(0x0C) +#define ESR_ELx_EC_BTI UL(0x0D) +#define ESR_ELx_EC_ILL UL(0x0E) /* Unallocated EC: 0x0F - 0x10 */ -#define ESR_ELx_EC_SVC32 (0x11) -#define ESR_ELx_EC_HVC32 (0x12) /* EL2 only */ -#define ESR_ELx_EC_SMC32 (0x13) /* EL2 and above */ +#define ESR_ELx_EC_SVC32 UL(0x11) +#define ESR_ELx_EC_HVC32 UL(0x12) /* EL2 only */ +#define ESR_ELx_EC_SMC32 UL(0x13) /* EL2 and above */ /* Unallocated EC: 0x14 */ -#define ESR_ELx_EC_SVC64 (0x15) -#define ESR_ELx_EC_HVC64 (0x16) /* EL2 and above */ -#define ESR_ELx_EC_SMC64 (0x17) /* EL2 and above */ -#define ESR_ELx_EC_SYS64 (0x18) -#define ESR_ELx_EC_SVE (0x19) -#define ESR_ELx_EC_ERET (0x1a) /* EL2 only */ +#define ESR_ELx_EC_SVC64 UL(0x15) +#define ESR_ELx_EC_HVC64 UL(0x16) /* EL2 and above */ +#define ESR_ELx_EC_SMC64 UL(0x17) /* EL2 and above */ +#define ESR_ELx_EC_SYS64 UL(0x18) +#define ESR_ELx_EC_SVE UL(0x19) +#define ESR_ELx_EC_ERET UL(0x1a) /* EL2 only */ /* Unallocated EC: 0x1B */ -#define ESR_ELx_EC_FPAC (0x1C) /* EL1 and above */ -#define ESR_ELx_EC_SME (0x1D) +#define ESR_ELx_EC_FPAC UL(0x1C) /* EL1 and above */ +#define ESR_ELx_EC_SME UL(0x1D) /* Unallocated EC: 0x1E */ -#define ESR_ELx_EC_IMP_DEF (0x1f) /* EL3 only */ -#define ESR_ELx_EC_IABT_LOW (0x20) -#define ESR_ELx_EC_IABT_CUR (0x21) -#define ESR_ELx_EC_PC_ALIGN (0x22) +#define ESR_ELx_EC_IMP_DEF UL(0x1f) /* EL3 only */ +#define ESR_ELx_EC_IABT_LOW UL(0x20) +#define ESR_ELx_EC_IABT_CUR UL(0x21) +#define ESR_ELx_EC_PC_ALIGN UL(0x22) /* Unallocated EC: 0x23 */ -#define ESR_ELx_EC_DABT_LOW (0x24) -#define ESR_ELx_EC_DABT_CUR (0x25) -#define ESR_ELx_EC_SP_ALIGN (0x26) -#define ESR_ELx_EC_MOPS (0x27) -#define ESR_ELx_EC_FP_EXC32 (0x28) +#define ESR_ELx_EC_DABT_LOW UL(0x24) +#define ESR_ELx_EC_DABT_CUR UL(0x25) +#define ESR_ELx_EC_SP_ALIGN UL(0x26) +#define ESR_ELx_EC_MOPS UL(0x27) +#define ESR_ELx_EC_FP_EXC32 UL(0x28) /* Unallocated EC: 0x29 - 0x2B */ -#define ESR_ELx_EC_FP_EXC64 (0x2C) +#define ESR_ELx_EC_FP_EXC64 UL(0x2C) /* Unallocated EC: 0x2D - 0x2E */ -#define ESR_ELx_EC_SERROR (0x2F) -#define ESR_ELx_EC_BREAKPT_LOW (0x30) -#define ESR_ELx_EC_BREAKPT_CUR (0x31) -#define ESR_ELx_EC_SOFTSTP_LOW (0x32) -#define ESR_ELx_EC_SOFTSTP_CUR (0x33) -#define ESR_ELx_EC_WATCHPT_LOW (0x34) -#define ESR_ELx_EC_WATCHPT_CUR (0x35) +#define ESR_ELx_EC_SERROR UL(0x2F) +#define ESR_ELx_EC_BREAKPT_LOW UL(0x30) +#define ESR_ELx_EC_BREAKPT_CUR UL(0x31) +#define ESR_ELx_EC_SOFTSTP_LOW UL(0x32) +#define ESR_ELx_EC_SOFTSTP_CUR UL(0x33) +#define ESR_ELx_EC_WATCHPT_LOW UL(0x34) +#define ESR_ELx_EC_WATCHPT_CUR UL(0x35) /* Unallocated EC: 0x36 - 0x37 */ -#define ESR_ELx_EC_BKPT32 (0x38) +#define ESR_ELx_EC_BKPT32 UL(0x38) /* Unallocated EC: 0x39 */ -#define ESR_ELx_EC_VECTOR32 (0x3A) /* EL2 only */ +#define ESR_ELx_EC_VECTOR32 UL(0x3A) /* EL2 only */ /* Unallocated EC: 0x3B */ -#define ESR_ELx_EC_BRK64 (0x3C) +#define ESR_ELx_EC_BRK64 UL(0x3C) /* Unallocated EC: 0x3D - 0x3F */ -#define ESR_ELx_EC_MAX (0x3F) +#define ESR_ELx_EC_MAX UL(0x3F) #define ESR_ELx_EC_SHIFT (26) #define ESR_ELx_EC_WIDTH (6) diff --git a/arch/arm64/include/asm/kvm_host.h b/arch/arm64/include/asm/kvm_host.h index e9983ad0521e7..8d71021d91d2d 100644 --- a/arch/arm64/include/asm/kvm_host.h +++ b/arch/arm64/include/asm/kvm_host.h @@ -154,6 +154,8 @@ static inline void __free_hyp_memcache(struct kvm_hyp_memcache *mc, void free_hyp_memcache(struct kvm_hyp_memcache *mc); int topup_hyp_memcache(struct kvm_hyp_memcache *mc, unsigned long min_pages, unsigned long order); +int topup_hyp_memcache_gfp(struct kvm_hyp_memcache *mc, unsigned long min_pages, + unsigned long order, gfp_t gfp); static inline void init_hyp_memcache(struct kvm_hyp_memcache *mc) { @@ -230,6 +232,8 @@ struct kvm_pinned_page { u16 pins; }; +#define KVM_DUMMY_PPAGE ((struct kvm_pinned_page *)-1) + typedef unsigned int pkvm_handle_t; struct kvm_protected_vm { @@ -1346,5 +1350,6 @@ int kvm_iommu_register_driver(struct kvm_iommu_driver *kern_ops); unsigned long __pkvm_reclaim_hyp_alloc_mgt(unsigned long nr_pages); int __pkvm_topup_hyp_alloc_mgt(unsigned long id, unsigned long nr_pages, unsigned long sz_alloc); - +int __pkvm_topup_hyp_alloc_mgt_gfp(unsigned long id, unsigned long nr_pages, + unsigned long sz_alloc, gfp_t gfp); #endif /* __ARM64_KVM_HOST_H__ */ diff --git a/arch/arm64/include/asm/kvm_pgtable.h b/arch/arm64/include/asm/kvm_pgtable.h index 5e780777969ce..4c521003ad22d 100644 --- a/arch/arm64/include/asm/kvm_pgtable.h +++ b/arch/arm64/include/asm/kvm_pgtable.h @@ -958,4 +958,28 @@ static inline int kvm_pgtable_stage2_snapshot(struct kvm_pgtable_snapshot *dest_ return -EPERM; } #endif /* CONFIG_NVHE_EL2_DEBUG */ + +/** + * kvm_pgtable_get_pages() - Raise the refcount for each entry and unmap them. + * + * @pgt: Page-table structure initialised by kvm_pgtable_*_init() + * or a similar initialiser. + * @addr: Input address for the start of the walk. + * @size: Size of the range. + * @mc: Cache of pre-allocated and zeroed memory from which to allocate + * page-table pages. + */ +int kvm_pgtable_stage2_get_pages(struct kvm_pgtable *pgt, u64 addr, u64 size, void *mc); + +/** + * kvm_pgtable_put_pages() - Drop the refcount for each entry. This is the + * opposite of kvm_pgtable_get_pages(). + * + * @pgt: Page-table structure initialised by kvm_pgtable_*_init() + * or a similar initialiser. + * @addr: Input address for the start of the walk. + * @size: Size of the range. + */ +int kvm_pgtable_stage2_put_pages(struct kvm_pgtable *pgt, u64 addr, u64 size); + #endif /* __ARM64_KVM_PGTABLE_H__ */ diff --git a/arch/arm64/include/asm/kvm_pkvm.h b/arch/arm64/include/asm/kvm_pkvm.h index ff5981d4de29a..1012a4813ccfa 100644 --- a/arch/arm64/include/asm/kvm_pkvm.h +++ b/arch/arm64/include/asm/kvm_pkvm.h @@ -236,7 +236,6 @@ void pkvm_host_reclaim_page(struct kvm *host_kvm, phys_addr_t ipa); #define PVM_ID_AA64ISAR2_ALLOW (\ ARM64_FEATURE_MASK(ID_AA64ISAR2_EL1_ATS1A) | \ ARM64_FEATURE_MASK(ID_AA64ISAR2_EL1_GPA3) | \ - ARM64_FEATURE_MASK(ID_AA64ISAR2_EL1_MOPS) | \ FIELD_PREP(ARM64_FEATURE_MASK(ID_AA64ISAR2_EL1_APA3), ID_AA64ISAR2_EL1_APA3_PAuth) \ ) diff --git a/arch/arm64/include/asm/kvm_pkvm_module.h b/arch/arm64/include/asm/kvm_pkvm_module.h index 306fbdf2a622b..ef5d8fe641366 100644 --- a/arch/arm64/include/asm/kvm_pkvm_module.h +++ b/arch/arm64/include/asm/kvm_pkvm_module.h @@ -82,6 +82,16 @@ enum pkvm_psci_notification { * CPU will be stuck in an infinite loop. @nr_pages * allows to apply this prot on a range of * contiguous memory. + * @host_stage2_enable_lazy_pte: + * Unmap a range of memory from the host stage-2, + * leaving the pages host ownership intact. The + * pages will be remapped lazily (subject to the + * usual ownership checks) in response to a + * faulting access from the host. + * @host_stage2_disable_lazy_pte: + * This is the opposite function of + * host_stage2_enable_lazy_pte. Must be called once + * the module is done with the region. * @host_stage2_get_leaf: Query the host's stage2 page-table entry for * the page @phys. * @register_host_smc_handler: @cb is called whenever the host issues an SMC @@ -215,8 +225,8 @@ struct pkvm_module_ops { int (*iommu_snapshot_host_stage2)(struct kvm_hyp_iommu_domain *domain); int (*hyp_smp_processor_id)(void); ANDROID_KABI_USE(1, void (*iommu_flush_unmap_cache)(struct kvm_iommu_paddr_cache *cache)); - ANDROID_KABI_RESERVE(2); - ANDROID_KABI_RESERVE(3); + ANDROID_KABI_USE(2, int (*host_stage2_enable_lazy_pte)(u64 addr, u64 nr_pages)); + ANDROID_KABI_USE(3, int (*host_stage2_disable_lazy_pte)(u64 addr, u64 nr_pages)); ANDROID_KABI_RESERVE(4); ANDROID_KABI_RESERVE(5); ANDROID_KABI_RESERVE(6); diff --git a/arch/arm64/include/asm/module.h b/arch/arm64/include/asm/module.h index b7b681d0a5287..fd3f7c2387761 100644 --- a/arch/arm64/include/asm/module.h +++ b/arch/arm64/include/asm/module.h @@ -32,7 +32,7 @@ struct pkvm_el2_module { int (*init)(const struct pkvm_module_ops *ops); }; -void kvm_apply_hyp_module_relocations(void *mod_start, void *hyp_va, +void kvm_apply_hyp_module_relocations(struct pkvm_el2_module *mod, kvm_nvhe_reloc_t *begin, kvm_nvhe_reloc_t *end); diff --git a/arch/arm64/include/asm/uprobes.h b/arch/arm64/include/asm/uprobes.h index 2b09495499c61..014b02897f8e2 100644 --- a/arch/arm64/include/asm/uprobes.h +++ b/arch/arm64/include/asm/uprobes.h @@ -10,11 +10,9 @@ #include #include -#define MAX_UINSN_BYTES AARCH64_INSN_SIZE - #define UPROBE_SWBP_INSN cpu_to_le32(BRK64_OPCODE_UPROBES) #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; @@ -23,8 +21,8 @@ struct arch_uprobe_task { struct arch_uprobe { union { - u8 insn[MAX_UINSN_BYTES]; - u8 ixol[MAX_UINSN_BYTES]; + __le32 insn; + __le32 ixol; }; struct arch_probe_insn api; bool simulate; diff --git a/arch/arm64/include/uapi/asm/sigcontext.h b/arch/arm64/include/uapi/asm/sigcontext.h index f23c1dc3f002f..8f003db7a6967 100644 --- a/arch/arm64/include/uapi/asm/sigcontext.h +++ b/arch/arm64/include/uapi/asm/sigcontext.h @@ -312,10 +312,10 @@ struct zt_context { ((sizeof(struct za_context) + (__SVE_VQ_BYTES - 1)) \ / __SVE_VQ_BYTES * __SVE_VQ_BYTES) -#define ZA_SIG_REGS_SIZE(vq) ((vq * __SVE_VQ_BYTES) * (vq * __SVE_VQ_BYTES)) +#define ZA_SIG_REGS_SIZE(vq) (((vq) * __SVE_VQ_BYTES) * ((vq) * __SVE_VQ_BYTES)) #define ZA_SIG_ZAV_OFFSET(vq, n) (ZA_SIG_REGS_OFFSET + \ - (SVE_SIG_ZREG_SIZE(vq) * n)) + (SVE_SIG_ZREG_SIZE(vq) * (n))) #define ZA_SIG_CONTEXT_SIZE(vq) \ (ZA_SIG_REGS_OFFSET + ZA_SIG_REGS_SIZE(vq)) @@ -326,7 +326,7 @@ struct zt_context { #define ZT_SIG_REGS_OFFSET sizeof(struct zt_context) -#define ZT_SIG_REGS_SIZE(n) (ZT_SIG_REG_BYTES * n) +#define ZT_SIG_REGS_SIZE(n) (ZT_SIG_REG_BYTES * (n)) #define ZT_SIG_CONTEXT_SIZE(n) \ (sizeof(struct zt_context) + ZT_SIG_REGS_SIZE(n)) diff --git a/arch/arm64/kernel/acpi_numa.c b/arch/arm64/kernel/acpi_numa.c index ccbff21ce1faf..2465f291c7e17 100644 --- a/arch/arm64/kernel/acpi_numa.c +++ b/arch/arm64/kernel/acpi_numa.c @@ -34,17 +34,6 @@ int __init acpi_numa_get_nid(unsigned int cpu) return acpi_early_node_map[cpu]; } -static inline int get_cpu_for_acpi_id(u32 uid) -{ - int cpu; - - for (cpu = 0; cpu < nr_cpu_ids; cpu++) - if (uid == get_acpi_id_for_cpu(cpu)) - return cpu; - - return -EINVAL; -} - static int __init acpi_parse_gicc_pxm(union acpi_subtable_headers *header, const unsigned long end) { diff --git a/arch/arm64/kernel/cpu_errata.c b/arch/arm64/kernel/cpu_errata.c index 57b1d6a68256b..463b48d0f9250 100644 --- a/arch/arm64/kernel/cpu_errata.c +++ b/arch/arm64/kernel/cpu_errata.c @@ -455,6 +455,7 @@ static const struct midr_range erratum_spec_ssbs_list[] = { MIDR_ALL_VERSIONS(MIDR_CORTEX_A78), MIDR_ALL_VERSIONS(MIDR_CORTEX_A78C), MIDR_ALL_VERSIONS(MIDR_CORTEX_A710), + MIDR_ALL_VERSIONS(MIDR_CORTEX_A715), MIDR_ALL_VERSIONS(MIDR_CORTEX_A720), MIDR_ALL_VERSIONS(MIDR_CORTEX_A725), MIDR_ALL_VERSIONS(MIDR_CORTEX_X1), @@ -463,8 +464,10 @@ static const struct midr_range erratum_spec_ssbs_list[] = { MIDR_ALL_VERSIONS(MIDR_CORTEX_X3), MIDR_ALL_VERSIONS(MIDR_CORTEX_X4), MIDR_ALL_VERSIONS(MIDR_CORTEX_X925), + MIDR_ALL_VERSIONS(MIDR_MICROSOFT_AZURE_COBALT_100), MIDR_ALL_VERSIONS(MIDR_NEOVERSE_N1), MIDR_ALL_VERSIONS(MIDR_NEOVERSE_N2), + MIDR_ALL_VERSIONS(MIDR_NEOVERSE_N3), MIDR_ALL_VERSIONS(MIDR_NEOVERSE_V1), MIDR_ALL_VERSIONS(MIDR_NEOVERSE_V2), MIDR_ALL_VERSIONS(MIDR_NEOVERSE_V3), @@ -472,6 +475,14 @@ static const struct midr_range erratum_spec_ssbs_list[] = { }; #endif +#ifdef CONFIG_AMPERE_ERRATUM_AC03_CPU_38 +static const struct midr_range erratum_ac03_cpu_38_list[] = { + MIDR_ALL_VERSIONS(MIDR_AMPERE1), + MIDR_ALL_VERSIONS(MIDR_AMPERE1A), + {}, +}; +#endif + const struct arm64_cpu_capabilities arm64_errata[] = { #ifdef CONFIG_ARM64_WORKAROUND_CLEAN_CACHE { @@ -789,7 +800,7 @@ const struct arm64_cpu_capabilities arm64_errata[] = { { .desc = "AmpereOne erratum AC03_CPU_38", .capability = ARM64_WORKAROUND_AMPERE_AC03_CPU_38, - ERRATA_MIDR_ALL_VERSIONS(MIDR_AMPERE1), + ERRATA_MIDR_RANGE_LIST(erratum_ac03_cpu_38_list), }, #endif { diff --git a/arch/arm64/kernel/fpsimd.c b/arch/arm64/kernel/fpsimd.c index 5cdfcc9e3e54b..0137d987631e0 100644 --- a/arch/arm64/kernel/fpsimd.c +++ b/arch/arm64/kernel/fpsimd.c @@ -1445,6 +1445,7 @@ static void sve_init_regs(void) } else { fpsimd_to_sve(current); current->thread.fp_type = FP_STATE_SVE; + fpsimd_flush_task_state(current); } } diff --git a/arch/arm64/kernel/probes/decode-insn.c b/arch/arm64/kernel/probes/decode-insn.c index 968d5fffe2330..3496d6169e59b 100644 --- a/arch/arm64/kernel/probes/decode-insn.c +++ b/arch/arm64/kernel/probes/decode-insn.c @@ -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_ret(insn)) { 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 { /* * 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 *scan_end = NULL; 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 @@ -157,7 +164,6 @@ arm_kprobe_decode_insn(kprobe_opcode_t *addr, struct arch_specific_insn *asi) else scan_end = addr - MAX_ATOMIC_CONTEXT_SIZE; } - decoded = arm_probe_decode_insn(insn, &asi->api); if (decoded != INSN_REJECTED && scan_end) if (is_probed_address_atomic(addr - 1, scan_end)) diff --git a/arch/arm64/kernel/probes/simulate-insn.c b/arch/arm64/kernel/probes/simulate-insn.c index 22d0b32524763..b65334ab79d2b 100644 --- a/arch/arm64/kernel/probes/simulate-insn.c +++ b/arch/arm64/kernel/probes/simulate-insn.c @@ -171,17 +171,15 @@ simulate_tbz_tbnz(u32 opcode, long addr, struct pt_regs *regs) void __kprobes simulate_ldr_literal(u32 opcode, long addr, struct pt_regs *regs) { - u64 *load_addr; + unsigned long load_addr; int xn = opcode & 0x1f; - int disp; - disp = ldr_displacement(opcode); - load_addr = (u64 *) (addr + disp); + load_addr = addr + ldr_displacement(opcode); 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 */ - 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); } @@ -189,14 +187,12 @@ simulate_ldr_literal(u32 opcode, long addr, struct pt_regs *regs) void __kprobes simulate_ldrsw_literal(u32 opcode, long addr, struct pt_regs *regs) { - s32 *load_addr; + unsigned long load_addr; int xn = opcode & 0x1f; - int disp; - disp = ldr_displacement(opcode); - load_addr = (s32 *) (addr + disp); + load_addr = addr + ldr_displacement(opcode); - 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); } diff --git a/arch/arm64/kernel/probes/uprobes.c b/arch/arm64/kernel/probes/uprobes.c index d49aef2657cdf..a2f137a595fc1 100644 --- a/arch/arm64/kernel/probes/uprobes.c +++ b/arch/arm64/kernel/probes/uprobes.c @@ -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)) return -EINVAL; - insn = *(probe_opcode_t *)(&auprobe->insn[0]); + insn = le32_to_cpu(auprobe->insn); switch (arm_probe_decode_insn(insn, &auprobe->api)) { case INSN_REJECTED: @@ -108,7 +108,7 @@ bool arch_uprobe_skip_sstep(struct arch_uprobe *auprobe, struct pt_regs *regs) if (!auprobe->simulate) return false; - insn = *(probe_opcode_t *)(&auprobe->insn[0]); + insn = le32_to_cpu(auprobe->insn); addr = instruction_pointer(regs); if (auprobe->api.handler) diff --git a/arch/arm64/kvm/hyp/include/nvhe/mem_protect.h b/arch/arm64/kvm/hyp/include/nvhe/mem_protect.h index c17900aa526e8..0b3bdc2638a2b 100644 --- a/arch/arm64/kvm/hyp/include/nvhe/mem_protect.h +++ b/arch/arm64/kvm/hyp/include/nvhe/mem_protect.h @@ -62,6 +62,7 @@ int __pkvm_host_use_dma(u64 phys_addr, size_t size); int __pkvm_host_unuse_dma(u64 phys_addr, size_t size); int __pkvm_guest_stage2_snapshot(struct kvm_pgtable_snapshot *snap, struct pkvm_hyp_vm *vm); int __pkvm_host_stage2_snapshot(struct kvm_pgtable_snapshot *snap); +int __pkvm_host_lazy_pte(u64 pfn, u64 nr_pages, bool enable); bool addr_is_memory(phys_addr_t phys); int host_stage2_idmap_locked(phys_addr_t addr, u64 size, diff --git a/arch/arm64/kvm/hyp/include/nvhe/trace/trace.h b/arch/arm64/kvm/hyp/include/nvhe/trace/trace.h index d182ac4dd5a0c..9d76587f369f5 100644 --- a/arch/arm64/kvm/hyp/include/nvhe/trace/trace.h +++ b/arch/arm64/kvm/hyp/include/nvhe/trace/trace.h @@ -31,7 +31,7 @@ int register_hyp_event_ids(unsigned long start, unsigned long end); int __pkvm_load_tracing(unsigned long desc_va, size_t desc_size); void __pkvm_teardown_tracing(void); int __pkvm_enable_tracing(bool enable); -int __pkvm_swap_reader_tracing(int cpu); +int __pkvm_swap_reader_tracing(unsigned int cpu); int __pkvm_enable_event(unsigned short id, bool enable); extern char __hyp_printk_fmts_start[]; @@ -81,7 +81,7 @@ static inline int register_hyp_event_ids(unsigned long start, unsigned long end) static inline int __pkvm_load_tracing(unsigned long desc_va, size_t desc_size) { return -ENODEV; } static inline void __pkvm_teardown_tracing(void) { } static inline int __pkvm_enable_tracing(bool enable) { return -ENODEV; } -static inline int __pkvm_swap_reader_tracing(int cpu) { return -ENODEV; } +static inline int __pkvm_swap_reader_tracing(unsigned int cpu) { return -ENODEV; } static inline int __pkvm_enable_event(unsigned short id, bool enable) { return -ENODEV; } #define trace_hyp_printk(fmt, ...) #endif diff --git a/arch/arm64/kvm/hyp/nvhe/alloc.c b/arch/arm64/kvm/hyp/nvhe/alloc.c index 0452690ab03d8..bbe8d18576e32 100644 --- a/arch/arm64/kvm/hyp/nvhe/alloc.c +++ b/arch/arm64/kvm/hyp/nvhe/alloc.c @@ -798,9 +798,15 @@ void hyp_alloc_reclaim(struct kvm_hyp_memcache *mc, int target) int hyp_alloc_refill(struct kvm_hyp_memcache *host_mc) { struct kvm_hyp_memcache *alloc_mc = this_cpu_ptr(&hyp_allocator_mc); + int ret; + struct hyp_allocator *allocator = &hyp_allocator; + + hyp_spin_lock(&allocator->lock); + ret = refill_memcache(alloc_mc, host_mc->nr_pages + alloc_mc->nr_pages, + host_mc); + hyp_spin_unlock(&allocator->lock); - return refill_memcache(alloc_mc, host_mc->nr_pages + alloc_mc->nr_pages, - host_mc); + return ret; } int hyp_alloc_init(size_t size) diff --git a/arch/arm64/kvm/hyp/nvhe/ffa.c b/arch/arm64/kvm/hyp/nvhe/ffa.c index 96dc86f35e102..af4a7fe371d8d 100644 --- a/arch/arm64/kvm/hyp/nvhe/ffa.c +++ b/arch/arm64/kvm/hyp/nvhe/ffa.c @@ -426,9 +426,9 @@ static void do_ffa_mem_frag_tx(struct arm_smccc_res *res, return; } -static __always_inline void do_ffa_mem_xfer(const u64 func_id, - struct arm_smccc_res *res, - struct kvm_cpu_context *ctxt) +static void __do_ffa_mem_xfer(const u64 func_id, + struct arm_smccc_res *res, + struct kvm_cpu_context *ctxt) { DECLARE_REG(u32, len, ctxt, 1); DECLARE_REG(u32, fraglen, ctxt, 2); @@ -440,9 +440,6 @@ static __always_inline void do_ffa_mem_xfer(const u64 func_id, u32 offset, nr_ranges; int ret = 0; - BUILD_BUG_ON(func_id != FFA_FN64_MEM_SHARE && - func_id != FFA_FN64_MEM_LEND); - if (addr_mbz || npages_mbz || fraglen > len || fraglen > KVM_FFA_MBOX_NR_PAGES * PAGE_SIZE) { ret = FFA_RET_INVALID_PARAMETERS; @@ -461,6 +458,11 @@ static __always_inline void do_ffa_mem_xfer(const u64 func_id, goto out_unlock; } + if (len > ffa_desc_buf.len) { + ret = FFA_RET_NO_MEMORY; + goto out_unlock; + } + buf = hyp_buffers.tx; memcpy(buf, host_buffers.tx, fraglen); @@ -512,6 +514,13 @@ static __always_inline void do_ffa_mem_xfer(const u64 func_id, goto out_unlock; } +#define do_ffa_mem_xfer(fid, res, ctxt) \ + do { \ + BUILD_BUG_ON((fid) != FFA_FN64_MEM_SHARE && \ + (fid) != FFA_FN64_MEM_LEND); \ + __do_ffa_mem_xfer((fid), (res), (ctxt)); \ + } while (0); + static void do_ffa_mem_reclaim(struct arm_smccc_res *res, struct kvm_cpu_context *ctxt) { diff --git a/arch/arm64/kvm/hyp/nvhe/hyp-main.c b/arch/arm64/kvm/hyp/nvhe/hyp-main.c index 2ec5f3218cf9a..d7c6374deb26b 100644 --- a/arch/arm64/kvm/hyp/nvhe/hyp-main.c +++ b/arch/arm64/kvm/hyp/nvhe/hyp-main.c @@ -667,9 +667,6 @@ static void flush_hyp_vcpu(struct pkvm_hyp_vcpu *hyp_vcpu) hyp_entry_exit_handler_fn ec_handler; u8 esr_ec; - if (READ_ONCE(hyp_vcpu->power_state) == PSCI_0_2_AFFINITY_LEVEL_ON_PENDING) - pkvm_reset_vcpu(hyp_vcpu); - /* * If we deal with a non-protected guest and the state is potentially * dirty (from a host perspective), copy the state back into the hyp @@ -928,29 +925,37 @@ static struct kvm_vcpu *__get_host_hyp_vcpus(struct kvm_vcpu *arg, __get_host_hyp_vcpus(__vcpu, hyp_vcpup); \ }) +static bool is_vcpu_runnable(struct pkvm_hyp_vcpu *hyp_vcpu) +{ + return (!pkvm_hyp_vcpu_is_protected(hyp_vcpu) || + hyp_vcpu->power_state == PSCI_0_2_AFFINITY_LEVEL_ON); +} + static void handle___kvm_vcpu_run(struct kvm_cpu_context *host_ctxt) { struct pkvm_hyp_vcpu *hyp_vcpu; struct kvm_vcpu *host_vcpu; - int ret; + int ret = ARM_EXCEPTION_IL; host_vcpu = get_host_hyp_vcpus(host_ctxt, 1, &hyp_vcpu); - if (!host_vcpu) { - ret = -EINVAL; + if (!host_vcpu) goto out; - } /* * KVM (and pKVM) doesn't support SME guests, and ensures that SME * features aren't enabled in pstate when loading a vcpu. Therefore, * if SME features enabled it's either a bug or a malicious host. */ - if (unlikely(system_supports_sme() && read_sysreg_s(SYS_SVCR))) { - ret = -EINVAL; + if (unlikely(system_supports_sme() && read_sysreg_s(SYS_SVCR))) goto out; - } if (unlikely(hyp_vcpu)) { + if (hyp_vcpu->power_state == PSCI_0_2_AFFINITY_LEVEL_ON_PENDING) + pkvm_reset_vcpu(hyp_vcpu); + + if (unlikely(!is_vcpu_runnable(hyp_vcpu))) + goto out; + flush_hyp_vcpu(hyp_vcpu); ret = __kvm_vcpu_run(&hyp_vcpu->vcpu); @@ -1411,7 +1416,7 @@ static void handle___pkvm_enable_tracing(struct kvm_cpu_context *host_ctxt) static void handle___pkvm_swap_reader_tracing(struct kvm_cpu_context *host_ctxt) { - DECLARE_REG(int, cpu, host_ctxt, 1); + DECLARE_REG(unsigned int, cpu, host_ctxt, 1); cpu_reg(host_ctxt, 1) = __pkvm_swap_reader_tracing(cpu); } diff --git a/arch/arm64/kvm/hyp/nvhe/mem_protect.c b/arch/arm64/kvm/hyp/nvhe/mem_protect.c index c80824cad07cb..14f6135de18ba 100644 --- a/arch/arm64/kvm/hyp/nvhe/mem_protect.c +++ b/arch/arm64/kvm/hyp/nvhe/mem_protect.c @@ -944,7 +944,7 @@ void handle_host_mem_abort(struct kvm_cpu_context *host_ctxt) if (is_dabt(esr) && !addr_is_memory(addr) && kvm_iommu_host_dabt_handler(host_ctxt, esr, addr)) - ret = 0; + goto return_to_host; /* If not handled, attempt to map the page. */ if (ret == -EPERM) @@ -2309,6 +2309,42 @@ int module_change_host_page_prot(u64 pfn, enum kvm_pgtable_prot prot, u64 nr_pag return ret; } +int __pkvm_host_lazy_pte(u64 pfn, u64 nr_pages, bool enable) +{ + u64 size = nr_pages << PAGE_SHIFT; + u64 addr = hyp_pfn_to_phys(pfn); + u64 end = addr + size; + struct memblock_region *reg; + struct kvm_mem_range range; + int ret; + + /* Reject MMIO regions */ + reg = find_mem_range(addr, &range); + if (!reg) + return -EPERM; + + if (!is_in_mem_range(end - 1, &range) || + is_range_refcounted(addr, nr_pages)) + return -EPERM; + + host_lock_component(); + + ret = ___host_check_page_state_range(addr, size, PKVM_PAGE_OWNED, reg); + if (ret) + goto unlock; + + if (enable) + ret = kvm_pgtable_stage2_get_pages(&host_mmu.pgt, addr, size, + &host_s2_pool); + else + ret = kvm_pgtable_stage2_put_pages(&host_mmu.pgt, addr, size); + +unlock: + host_unlock_component(); + + return ret; +} + int hyp_pin_shared_mem(void *from, void *to) { u64 cur, start = ALIGN_DOWN((u64)from, PAGE_SIZE); @@ -2442,7 +2478,8 @@ static int __pkvm_host_use_dma_page(phys_addr_t phys_addr) * host shared the page. */ if (state & PKVM_PAGE_SHARED_BORROWED || state & PKVM_PAGE_SHARED_OWNED) { - ret = __hyp_check_page_state_range(phys_addr, PAGE_SIZE, PKVM_NOPAGE); + ret = __hyp_check_page_state_range((u64)hyp_phys_to_virt(phys_addr), + PAGE_SIZE, PKVM_NOPAGE); if (ret) return ret; } diff --git a/arch/arm64/kvm/hyp/nvhe/modules.c b/arch/arm64/kvm/hyp/nvhe/modules.c index b63604acf9b35..adeda6cfff57b 100644 --- a/arch/arm64/kvm/hyp/nvhe/modules.c +++ b/arch/arm64/kvm/hyp/nvhe/modules.c @@ -95,6 +95,16 @@ static int _hyp_smp_processor_id(void) return hyp_smp_processor_id(); } +static int host_stage2_enable_lazy_pte(u64 pfn, u64 nr_pages) +{ + return __pkvm_host_lazy_pte(pfn, nr_pages, true); +} + +static int host_stage2_disable_lazy_pte(u64 pfn, u64 nr_pages) +{ + return __pkvm_host_lazy_pte(pfn, nr_pages, false); +} + const struct pkvm_module_ops module_ops = { .create_private_mapping = __pkvm_create_private_mapping, .alloc_module_va = __pkvm_alloc_module_va, @@ -153,6 +163,8 @@ const struct pkvm_module_ops module_ops = { .iommu_snapshot_host_stage2 = kvm_iommu_snapshot_host_stage2, .hyp_smp_processor_id = _hyp_smp_processor_id, .iommu_flush_unmap_cache = kvm_iommu_flush_unmap_cache, + .host_stage2_enable_lazy_pte = host_stage2_enable_lazy_pte, + .host_stage2_disable_lazy_pte = host_stage2_disable_lazy_pte, }; int __pkvm_init_module(void *module_init) diff --git a/arch/arm64/kvm/hyp/nvhe/setup.c b/arch/arm64/kvm/hyp/nvhe/setup.c index a9b507ff1995e..140c170b4f09b 100644 --- a/arch/arm64/kvm/hyp/nvhe/setup.c +++ b/arch/arm64/kvm/hyp/nvhe/setup.c @@ -152,20 +152,14 @@ static int recreate_hyp_mappings(phys_addr_t phys, unsigned long size, create_hyp_host_fp_mappings(); /* - * Map the host sections RO in the hypervisor, but transfer the - * ownership from the host to the hypervisor itself to make sure they + * Map the pvmfw section RO in the hypervisor, but transfer the + * ownership from the host to the hypervisor itself to make sure that it * can't be donated or shared with another entity. * * The ownership transition requires matching changes in the host * stage-2. This will be done later (see finalize_host_mappings()) once * the hyp_vmemmap is addressable. */ - prot = pkvm_mkstate(PAGE_HYP_RO, PKVM_PAGE_SHARED_OWNED); - ret = pkvm_create_mappings(&kvm_vgic_global_state, - &kvm_vgic_global_state + 1, prot); - if (ret) - return ret; - start = hyp_phys_to_virt(pvmfw_base); end = start + pvmfw_size; prot = pkvm_mkstate(PAGE_HYP_RO, PKVM_PAGE_OWNED); diff --git a/arch/arm64/kvm/hyp/nvhe/trace.c b/arch/arm64/kvm/hyp/nvhe/trace.c index a81ba8bb7b47b..140e9a17a5ce9 100644 --- a/arch/arm64/kvm/hyp/nvhe/trace.c +++ b/arch/arm64/kvm/hyp/nvhe/trace.c @@ -424,9 +424,9 @@ static int rb_cpu_init(struct rb_page_desc *pdesc, struct hyp_rb_per_cpu *cpu_bu return ret; } -int __pkvm_swap_reader_tracing(int cpu) +int __pkvm_swap_reader_tracing(unsigned int cpu) { - struct hyp_rb_per_cpu *cpu_buffer = per_cpu_ptr(&trace_rb, cpu); + struct hyp_rb_per_cpu *cpu_buffer; int ret = 0; hyp_spin_lock(&trace_rb_lock); diff --git a/arch/arm64/kvm/hyp/pgtable.c b/arch/arm64/kvm/hyp/pgtable.c index ec58fc27e80ee..8b35099fbfe23 100644 --- a/arch/arm64/kvm/hyp/pgtable.c +++ b/arch/arm64/kvm/hyp/pgtable.c @@ -861,7 +861,18 @@ static void stage2_unmap_put_pte(const struct kvm_pgtable_visit_ctx *ctx, * valid. Depending on the system support, defer the TLB maintenance * for the same until the entire unmap walk is completed. */ - stage2_unmap_clear_pte(ctx, mmu); + if (kvm_pte_valid(ctx->old)) { + kvm_clear_pte(ctx->ptep); + + if (kvm_pte_table(ctx->old, ctx->level)) { + kvm_call_hyp(__kvm_tlb_flush_vmid_ipa, mmu, ctx->addr, + 0); + } else if (!stage2_unmap_defer_tlb_flush(pgt)) { + kvm_call_hyp(__kvm_tlb_flush_vmid_ipa, mmu, ctx->addr, + ctx->level); + } + } + mm_ops->put_page(ctx->ptep); } @@ -1233,6 +1244,66 @@ int kvm_pgtable_stage2_annotate(struct kvm_pgtable *pgt, u64 addr, u64 size, return ret; } +static int stage2_get_pages_walker(const struct kvm_pgtable_visit_ctx *ctx, + enum kvm_pgtable_walk_flags visit) +{ + struct kvm_pgtable_mm_ops *mm_ops = ctx->mm_ops; + struct stage2_map_data *data = ctx->arg; + int ret; + + ret = stage2_map_walk_leaf(ctx, data); + if (ret) + return ret; + + if (ctx->level == KVM_PGTABLE_MAX_LEVELS - 1) + mm_ops->get_page(ctx->ptep); + + return 0; +} + +int kvm_pgtable_stage2_get_pages(struct kvm_pgtable *pgt, u64 addr, u64 size, + void *mc) +{ + struct stage2_map_data map_data = { + .phys = KVM_PHYS_INVALID, + .mmu = pgt->mmu, + .memcache = mc, + .force_pte = true, + }; + struct kvm_pgtable_walker walker = { + .cb = stage2_get_pages_walker, + .flags = KVM_PGTABLE_WALK_LEAF, + .arg = &map_data, + }; + + return kvm_pgtable_walk(pgt, addr, size, &walker); +} + +static int stage2_put_pages_walker(const struct kvm_pgtable_visit_ctx *ctx, + enum kvm_pgtable_walk_flags visit) +{ + struct kvm_pgtable_mm_ops *mm_ops = ctx->mm_ops; + + /* get_pages has force_pte */ + if (WARN_ON(ctx->level != KVM_PGTABLE_MAX_LEVELS - 1)) + return -EINVAL; + + mm_ops->put_page(ctx->ptep); + + return 0; +} + +int kvm_pgtable_stage2_put_pages(struct kvm_pgtable *pgt, u64 addr, u64 size) +{ + struct kvm_pgtable_walker walker = { + .cb = stage2_put_pages_walker, + .flags = KVM_PGTABLE_WALK_LEAF, + .arg = pgt->mmu, + }; + + return kvm_pgtable_walk(pgt, addr, size, &walker); +} + static int stage2_unmap_walker(const struct kvm_pgtable_visit_ctx *ctx, enum kvm_pgtable_walk_flags visit) { diff --git a/arch/arm64/kvm/hyp/vgic-v3-sr.c b/arch/arm64/kvm/hyp/vgic-v3-sr.c index 7b397fad26f29..f62598aad8fc7 100644 --- a/arch/arm64/kvm/hyp/vgic-v3-sr.c +++ b/arch/arm64/kvm/hyp/vgic-v3-sr.c @@ -1002,9 +1002,6 @@ static void __vgic_v3_read_ctlr(struct kvm_vcpu *vcpu, u32 vmcr, int rt) val = ((vtr >> 29) & 7) << ICC_CTLR_EL1_PRI_BITS_SHIFT; /* IDbits */ val |= ((vtr >> 23) & 7) << ICC_CTLR_EL1_ID_BITS_SHIFT; - /* SEIS */ - if (kvm_vgic_global_state.ich_vtr_el2 & ICH_VTR_SEIS_MASK) - val |= BIT(ICC_CTLR_EL1_SEIS_SHIFT); /* A3V */ val |= ((vtr >> 21) & 1) << ICC_CTLR_EL1_A3V_SHIFT; /* EOImode */ diff --git a/arch/arm64/kvm/mmu.c b/arch/arm64/kvm/mmu.c index d7d69a9b04448..29119d8db5b0f 100644 --- a/arch/arm64/kvm/mmu.c +++ b/arch/arm64/kvm/mmu.c @@ -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) { struct kvm_pinned_page *ppage = entry; + + if (ppage == KVM_DUMMY_PPAGE) + continue; ret = pkvm_unmap_guest(kvm, ppage); if (ret) 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) { struct kvm_pinned_page *ppage = entry; + if (ppage == KVM_DUMMY_PPAGE) + continue; __clean_dcache_guest_page(page_address(ppage->page), PAGE_SIZE); cond_resched_rwlock_write(&kvm->mmu_lock); } @@ -1177,6 +1182,11 @@ static void *hyp_mc_alloc_fn(void *flags, unsigned long order) return addr; } +static void *hyp_mc_alloc_gfp_fn(void *flags, unsigned long order) +{ + return (void *)__get_free_pages(*(gfp_t *)flags, order); +} + void free_hyp_memcache(struct kvm_hyp_memcache *mc) { unsigned long flags = mc->flags; @@ -1203,6 +1213,21 @@ int topup_hyp_memcache(struct kvm_hyp_memcache *mc, unsigned long min_pages, } EXPORT_SYMBOL(topup_hyp_memcache); +int topup_hyp_memcache_gfp(struct kvm_hyp_memcache *mc, unsigned long min_pages, + unsigned long order, gfp_t gfp) +{ + void *flags = &gfp; + + if (!is_protected_kvm_enabled()) + return 0; + + if (order > PAGE_SHIFT) + return -E2BIG; + + return __topup_hyp_memcache(mc, min_pages, hyp_mc_alloc_gfp_fn, + kvm_host_pa, flags, order); +} + /** * kvm_phys_addr_ioremap - map a device range to guest IPA * @@ -1264,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) { 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); if (ret) @@ -1598,27 +1627,22 @@ find_ppage_or_above(struct kvm *kvm, phys_addr_t ipa) unsigned long index = ipa; 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 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) { + struct kvm_pinned_page *ppage; 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) @@ -1670,10 +1694,11 @@ static int pkvm_mem_abort(struct kvm_vcpu *vcpu, phys_addr_t *fault_ipa, { unsigned int flags = FOLL_HWPOISON | FOLL_LONGTERM | FOLL_WRITE; 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 kvm_pinned_page *ppage; struct kvm *kvm = vcpu->kvm; + struct maple_tree *mt = &kvm->arch.pkvm.pinned_pages; int ret, nr_pages; struct page *page; u64 pfn; @@ -1728,53 +1753,60 @@ static int pkvm_mem_abort(struct kvm_vcpu *vcpu, phys_addr_t *fault_ipa, fault_ipa); page = pfn_to_page(pfn); +retry: if (size) *size = page_size; -retry: ret = account_locked_vm(mm, page_size >> PAGE_SHIFT, true); if (ret) 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 * other choice than enforcing PAGE_SIZE for pkvm_host_map_guest() to * succeed. */ - index = *fault_ipa; - if (page_size > PAGE_SIZE && - mt_find(&kvm->arch.pkvm.pinned_pages, &index, index + page_size - 1)) { - write_unlock(&kvm->mmu_lock); + if (page_size > PAGE_SIZE && mt_find(mt, &index, end)) { *fault_ipa += pmd_offset; pfn += pmd_offset >> PAGE_SHIFT; page = pfn_to_page(pfn); - page_size = PAGE_SIZE; account_locked_vm(mm, page_size >> PAGE_SHIFT, false); + page_size = PAGE_SIZE; goto retry; } - ret = pkvm_host_map_guest(pfn, *fault_ipa >> PAGE_SHIFT, - page_size >> PAGE_SHIFT, KVM_PGTABLE_PROT_R); + /* Reserve space in the mtree */ + ret = mtree_insert_range(mt, index, end, KVM_DUMMY_PPAGE, GFP_KERNEL); if (ret) { - if (ret == -EAGAIN) + if (ret == -EEXIST) ret = 0; - goto dec_account; } - ppage->page = page; - ppage->ipa = *fault_ipa; - ppage->order = get_order(page_size); - ppage->pins = 1 << ppage->order; - WARN_ON(insert_ppage(kvm, ppage)); + write_lock(&kvm->mmu_lock); + ret = pkvm_host_map_guest(pfn, *fault_ipa >> PAGE_SHIFT, + page_size >> PAGE_SHIFT, KVM_PGTABLE_PROT_R); + if (ret) { + 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); return 0; -dec_account: +err_unlock: write_unlock(&kvm->mmu_lock); +dec_account: account_locked_vm(mm, page_size >> PAGE_SHIFT, false); unpin: unpin_user_pages(&page, 1); @@ -1805,7 +1837,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); 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; ppage = mt_next(&vcpu->kvm->arch.pkvm.pinned_pages, ppage->ipa, ULONG_MAX); diff --git a/arch/arm64/kvm/pkvm.c b/arch/arm64/kvm/pkvm.c index 90ec8dbc093a0..f439cec45c922 100644 --- a/arch/arm64/kvm/pkvm.c +++ b/arch/arm64/kvm/pkvm.c @@ -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)); 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, __reclaim_dying_guest_page_call, host_kvm, true)); @@ -408,6 +410,8 @@ static int __pkvm_create_hyp_vm(struct kvm *host_kvm) handle = ret; host_kvm->arch.pkvm.handle = handle; + atomic64_set(&host_kvm->stat.protected_pgtable_mem, pgd_sz); + kvm_account_pgtable_pages(pgd, pgd_sz >> PAGE_SHIFT); /* Donate memory for the vcpus at hyp and initialize it. */ kvm_for_each_vcpu(idx, host_vcpu, host_kvm) { @@ -417,8 +421,6 @@ static int __pkvm_create_hyp_vm(struct kvm *host_kvm) __pkvm_vcpu_hyp_created(host_vcpu); } - atomic64_set(&host_kvm->stat.protected_pgtable_mem, pgd_sz); - kvm_account_pgtable_pages(pgd, pgd_sz >> PAGE_SHIFT); return 0; @@ -539,7 +541,7 @@ void pkvm_host_reclaim_page(struct kvm *host_kvm, phys_addr_t ipa) write_lock(&host_kvm->mmu_lock); ppage = mt_find(&host_kvm->arch.pkvm.pinned_pages, &index, index + PAGE_SIZE - 1); - if (ppage) { + if (ppage && ppage != KVM_DUMMY_PPAGE) { if (ppage->pins) ppage->pins--; else @@ -970,13 +972,7 @@ int __pkvm_load_el2_module(struct module *this, unsigned long *token) mod->sections.end = end; endrel = (void *)mod->relocs + mod->nr_relocs * sizeof(*endrel); - kvm_apply_hyp_module_relocations(start, hyp_va, mod->relocs, endrel); - - /* - * Exclude EL2 module sections from kmemleak before making them - * inaccessible. - */ - kmemleak_free_part(start, size); + kvm_apply_hyp_module_relocations(mod, mod->relocs, endrel); ret = hyp_trace_init_mod_events(mod->hyp_events, mod->event_ids.start, @@ -984,6 +980,17 @@ int __pkvm_load_el2_module(struct module *this, unsigned long *token) if (ret) kvm_err("Failed to init module events: %d\n", ret); + /* + * Sadly we have also to disable kmemleak for EL1 sections: we can't + * reset created scan area and therefore we can't create a finer grain + * scan excluding only EL2 sections. + */ + if (this) { + kmemleak_no_scan(this->mem[MOD_TEXT].base); + kmemleak_no_scan(this->mem[MOD_DATA].base); + kmemleak_no_scan(this->mem[MOD_RODATA].base); + } + ret = pkvm_map_module_sections(secs_map + secs_first, hyp_va, ARRAY_SIZE(secs_map) - secs_first); if (ret) { @@ -1014,14 +1021,15 @@ int __pkvm_register_el2_call(unsigned long hfn_hyp_va) EXPORT_SYMBOL(__pkvm_register_el2_call); #endif /* CONFIG_MODULES */ -int __pkvm_topup_hyp_alloc_mgt(unsigned long id, unsigned long nr_pages, unsigned long sz_alloc) +int __pkvm_topup_hyp_alloc_mgt_gfp(unsigned long id, unsigned long nr_pages, + unsigned long sz_alloc, gfp_t gfp) { struct kvm_hyp_memcache mc; int ret; init_hyp_memcache(&mc); - ret = topup_hyp_memcache(&mc, nr_pages, get_order(sz_alloc)); + ret = topup_hyp_memcache_gfp(&mc, nr_pages, get_order(sz_alloc), gfp); if (ret) return ret; @@ -1032,6 +1040,12 @@ int __pkvm_topup_hyp_alloc_mgt(unsigned long id, unsigned long nr_pages, unsigne return ret; } +EXPORT_SYMBOL(__pkvm_topup_hyp_alloc_mgt_gfp); + +int __pkvm_topup_hyp_alloc_mgt(unsigned long id, unsigned long nr_pages, unsigned long sz_alloc) +{ + return __pkvm_topup_hyp_alloc_mgt_gfp(id, nr_pages, sz_alloc, GFP_KERNEL); +} EXPORT_SYMBOL(__pkvm_topup_hyp_alloc_mgt); int __pkvm_topup_hyp_alloc(unsigned long nr_pages) diff --git a/arch/arm64/kvm/va_layout.c b/arch/arm64/kvm/va_layout.c index 763aac2fc62b7..8d34e0dc5ba8f 100644 --- a/arch/arm64/kvm/va_layout.c +++ b/arch/arm64/kvm/va_layout.c @@ -110,10 +110,11 @@ __init void kvm_apply_hyp_relocations(void) } } -void kvm_apply_hyp_module_relocations(void *mod_start, void *hyp_va, +void kvm_apply_hyp_module_relocations(struct pkvm_el2_module *mod, kvm_nvhe_reloc_t *begin, kvm_nvhe_reloc_t *end) { + void *hyp_va = (void *)mod->token; kvm_nvhe_reloc_t *rel; for (rel = begin; rel < end; ++rel) { @@ -130,8 +131,11 @@ void kvm_apply_hyp_module_relocations(void *mod_start, void *hyp_va, /* Convert the module VA of the reloc to a hyp VA */ WARN_ON(aarch64_insn_write_literal_u64(ptr, - (u64)(((void *)va - mod_start) + hyp_va))); + (u64)(((void *)va - mod->sections.start) + hyp_va))); } + + sync_icache_aliases((unsigned long)mod->text.start, + (unsigned long)mod->text.end); } static u32 compute_instruction(int n, u32 rd, u32 rn) diff --git a/arch/arm64/tools/cpucaps b/arch/arm64/tools/cpucaps index 7ef83f99325ab..2d67a7dac5042 100644 --- a/arch/arm64/tools/cpucaps +++ b/arch/arm64/tools/cpucaps @@ -99,7 +99,6 @@ WORKAROUND_NVIDIA_CARMEL_CNP WORKAROUND_QCOM_FALKOR_E1003 WORKAROUND_REPEAT_TLBI WORKAROUND_SPECULATIVE_AT -WORKAROUND_SPECULATIVE_SSBS WORKAROUND_SPECULATIVE_UNPRIV_LOAD WORKAROUND_SPECULATIVE_SSBS ANDROID_KABI_RESERVE_02 diff --git a/arch/loongarch/configs/loongson3_defconfig b/arch/loongarch/configs/loongson3_defconfig index a3b52aaa83b33..e5f70642ed206 100644 --- a/arch/loongarch/configs/loongson3_defconfig +++ b/arch/loongarch/configs/loongson3_defconfig @@ -83,7 +83,6 @@ CONFIG_ZPOOL=y CONFIG_ZSWAP=y CONFIG_ZSWAP_COMPRESSOR_DEFAULT_ZSTD=y CONFIG_ZBUD=y -CONFIG_Z3FOLD=y CONFIG_ZSMALLOC=m # CONFIG_COMPAT_BRK is not set CONFIG_MEMORY_HOTPLUG=y diff --git a/arch/loongarch/include/asm/hw_irq.h b/arch/loongarch/include/asm/hw_irq.h index af4f4e8fbd858..8156ffb674159 100644 --- a/arch/loongarch/include/asm/hw_irq.h +++ b/arch/loongarch/include/asm/hw_irq.h @@ -9,6 +9,8 @@ extern atomic_t irq_err_count; +#define ARCH_IRQ_INIT_FLAGS IRQ_NOPROBE + /* * interrupt-retrigger: NOP for now. This may not be appropriate for all * machines, we'll see ... diff --git a/arch/loongarch/kernel/irq.c b/arch/loongarch/kernel/irq.c index 883e5066ae445..df42c063f6c43 100644 --- a/arch/loongarch/kernel/irq.c +++ b/arch/loongarch/kernel/irq.c @@ -122,9 +122,6 @@ void __init init_IRQ(void) panic("IPI IRQ request failed\n"); #endif - for (i = 0; i < NR_IRQS; i++) - irq_set_noprobe(i); - for_each_possible_cpu(i) { page = alloc_pages_node(cpu_to_node(i), GFP_KERNEL, order); diff --git a/arch/loongarch/kernel/process.c b/arch/loongarch/kernel/process.c index f2ff8b5d591e4..6e58f65455c7c 100644 --- a/arch/loongarch/kernel/process.c +++ b/arch/loongarch/kernel/process.c @@ -293,13 +293,15 @@ unsigned long stack_top(void) { unsigned long top = TASK_SIZE & PAGE_MASK; - /* Space for the VDSO & data page */ - top -= PAGE_ALIGN(current->thread.vdso->size); - top -= VVAR_SIZE; - - /* Space to randomize the VDSO base */ - if (current->flags & PF_RANDOMIZE) - top -= VDSO_RANDOMIZE_SIZE; + if (current->thread.vdso) { + /* Space for the VDSO & data page */ + top -= PAGE_ALIGN(current->thread.vdso->size); + top -= VVAR_SIZE; + + /* Space to randomize the VDSO base */ + if (current->flags & PF_RANDOMIZE) + top -= VDSO_RANDOMIZE_SIZE; + } return top; } diff --git a/arch/loongarch/kernel/relocate.c b/arch/loongarch/kernel/relocate.c index 1acfa704c8d09..0eddd4a66b874 100644 --- a/arch/loongarch/kernel/relocate.c +++ b/arch/loongarch/kernel/relocate.c @@ -13,6 +13,7 @@ #include #include #include +#include #include #include @@ -170,7 +171,7 @@ unsigned long __init relocate_kernel(void) unsigned long kernel_length; unsigned long random_offset = 0; void *location_new = _text; /* Default to original kernel start */ - char *cmdline = early_ioremap(fw_arg1, COMMAND_LINE_SIZE); /* Boot command line is passed in fw_arg1 */ + char *cmdline = early_memremap_ro(fw_arg1, COMMAND_LINE_SIZE); /* Boot command line is passed in fw_arg1 */ strscpy(boot_command_line, cmdline, COMMAND_LINE_SIZE); @@ -182,6 +183,7 @@ unsigned long __init relocate_kernel(void) random_offset = (unsigned long)location_new - (unsigned long)(_text); #endif reloc_offset = (unsigned long)_text - VMLINUX_LOAD_ADDRESS; + early_memunmap(cmdline, COMMAND_LINE_SIZE); if (random_offset) { kernel_length = (long)(_end) - (long)(_text); diff --git a/arch/loongarch/kernel/traps.c b/arch/loongarch/kernel/traps.c index aebfc3733a760..d59052c03d9b7 100644 --- a/arch/loongarch/kernel/traps.c +++ b/arch/loongarch/kernel/traps.c @@ -529,6 +529,9 @@ asmlinkage void noinstr do_ale(struct pt_regs *regs) #else unsigned int *pc; + if (regs->csr_prmd & CSR_PRMD_PIE) + local_irq_enable(); + perf_sw_event(PERF_COUNT_SW_ALIGNMENT_FAULTS, 1, regs, regs->csr_badvaddr); /* @@ -553,6 +556,8 @@ asmlinkage void noinstr do_ale(struct pt_regs *regs) die_if_kernel("Kernel ale access", regs); force_sig_fault(SIGBUS, BUS_ADRALN, (void __user *)regs->csr_badvaddr); out: + if (regs->csr_prmd & CSR_PRMD_PIE) + local_irq_disable(); #endif irqentry_exit(regs, state); } diff --git a/arch/loongarch/pci/acpi.c b/arch/loongarch/pci/acpi.c index 365f7de771cbb..1da4dc46df43e 100644 --- a/arch/loongarch/pci/acpi.c +++ b/arch/loongarch/pci/acpi.c @@ -225,6 +225,7 @@ struct pci_bus *pci_acpi_scan_root(struct acpi_pci_root *root) if (bus) { memcpy(bus->sysdata, info->cfg, sizeof(struct pci_config_window)); kfree(info); + kfree(root_ops); } else { struct pci_bus *child; diff --git a/arch/m68k/kernel/process.c b/arch/m68k/kernel/process.c index e06ce147c0b7f..fb87219fc3b46 100644 --- a/arch/m68k/kernel/process.c +++ b/arch/m68k/kernel/process.c @@ -116,7 +116,7 @@ asmlinkage int m68k_clone(struct pt_regs *regs) { /* regs will be equal to current_pt_regs() */ struct kernel_clone_args args = { - .flags = regs->d1 & ~CSIGNAL, + .flags = (u32)(regs->d1) & ~CSIGNAL, .pidfd = (int __user *)regs->d3, .child_tid = (int __user *)regs->d4, .parent_tid = (int __user *)regs->d3, diff --git a/arch/microblaze/mm/init.c b/arch/microblaze/mm/init.c index 3827dc76edd82..4520c57415797 100644 --- a/arch/microblaze/mm/init.c +++ b/arch/microblaze/mm/init.c @@ -193,11 +193,6 @@ asmlinkage void __init mmu_init(void) { unsigned int kstart, ksize; - if (!memblock.reserved.cnt) { - pr_emerg("Error memory count\n"); - machine_restart(NULL); - } - if ((u32) memblock.memory.regions[0].size < 0x400000) { pr_emerg("Memory must be greater than 4MB\n"); machine_restart(NULL); diff --git a/arch/mips/kernel/cevt-r4k.c b/arch/mips/kernel/cevt-r4k.c index 368e8475870f0..5f6e9e2ebbdbb 100644 --- a/arch/mips/kernel/cevt-r4k.c +++ b/arch/mips/kernel/cevt-r4k.c @@ -303,13 +303,6 @@ int r4k_clockevent_init(void) if (!c0_compare_int_usable()) return -ENXIO; - /* - * With vectored interrupts things are getting platform specific. - * get_c0_compare_int is a hook to allow a platform to return the - * interrupt number of its liking. - */ - irq = get_c0_compare_int(); - cd = &per_cpu(mips_clockevent_device, cpu); cd->name = "MIPS"; @@ -320,7 +313,6 @@ int r4k_clockevent_init(void) min_delta = calculate_min_delta(); cd->rating = 300; - cd->irq = irq; cd->cpumask = cpumask_of(cpu); cd->set_next_event = mips_next_event; cd->event_handler = mips_event_handler; @@ -332,6 +324,13 @@ int r4k_clockevent_init(void) cp0_timer_irq_installed = 1; + /* + * With vectored interrupts things are getting platform specific. + * get_c0_compare_int is a hook to allow a platform to return the + * interrupt number of its liking. + */ + irq = get_c0_compare_int(); + if (request_irq(irq, c0_compare_interrupt, flags, "timer", c0_compare_interrupt)) pr_err("Failed to request irq %d (timer)\n", irq); diff --git a/arch/parisc/include/asm/mman.h b/arch/parisc/include/asm/mman.h index 47c5a1991d103..89b6beeda0b86 100644 --- a/arch/parisc/include/asm/mman.h +++ b/arch/parisc/include/asm/mman.h @@ -11,4 +11,18 @@ static inline bool arch_memory_deny_write_exec_supported(void) } #define arch_memory_deny_write_exec_supported arch_memory_deny_write_exec_supported +static inline unsigned long arch_calc_vm_flag_bits(unsigned long flags) +{ + /* + * The stack on parisc grows upwards, so if userspace requests memory + * for a stack, mark it with VM_GROWSUP so that the stack expansion in + * the fault handler will work. + */ + if (flags & MAP_STACK) + return VM_GROWSUP; + + return 0; +} +#define arch_calc_vm_flag_bits(flags) arch_calc_vm_flag_bits(flags) + #endif /* __ASM_MMAN_H__ */ diff --git a/arch/parisc/kernel/entry.S b/arch/parisc/kernel/entry.S index ab23e61a6f016..ea57bcc21dc5f 100644 --- a/arch/parisc/kernel/entry.S +++ b/arch/parisc/kernel/entry.S @@ -1051,8 +1051,7 @@ ENTRY_CFI(intr_save) /* for os_hpmc */ STREG %r16, PT_ISR(%r29) STREG %r17, PT_IOR(%r29) -#if 0 && defined(CONFIG_64BIT) - /* Revisit when we have 64-bit code above 4Gb */ +#if defined(CONFIG_64BIT) b,n intr_save2 skip_save_ior: @@ -1060,8 +1059,7 @@ skip_save_ior: * need to adjust iasq/iaoq here in the same way we adjusted isr/ior * above. */ - extrd,u,* %r8,PSW_W_BIT,1,%r1 - cmpib,COND(=),n 1,%r1,intr_save2 + bb,COND(>=),n %r8,PSW_W_BIT,intr_save2 LDREG PT_IASQ0(%r29), %r16 LDREG PT_IAOQ0(%r29), %r17 /* adjust iasq/iaoq */ diff --git a/arch/parisc/kernel/syscall.S b/arch/parisc/kernel/syscall.S index 1f51aa9c8230c..0fa81bf1466b1 100644 --- a/arch/parisc/kernel/syscall.S +++ b/arch/parisc/kernel/syscall.S @@ -243,10 +243,10 @@ linux_gateway_entry: #ifdef CONFIG_64BIT ldil L%sys_call_table, %r1 - or,= %r2,%r2,%r2 - addil L%(sys_call_table64-sys_call_table), %r1 + or,ev %r2,%r2,%r2 + ldil L%sys_call_table64, %r1 ldo R%sys_call_table(%r1), %r19 - or,= %r2,%r2,%r2 + or,ev %r2,%r2,%r2 ldo R%sys_call_table64(%r1), %r19 #else load32 sys_call_table, %r19 @@ -379,10 +379,10 @@ tracesys_next: extrd,u %r19,63,1,%r2 /* W hidden in bottom bit */ ldil L%sys_call_table, %r1 - or,= %r2,%r2,%r2 - addil L%(sys_call_table64-sys_call_table), %r1 + or,ev %r2,%r2,%r2 + ldil L%sys_call_table64, %r1 ldo R%sys_call_table(%r1), %r19 - or,= %r2,%r2,%r2 + or,ev %r2,%r2,%r2 ldo R%sys_call_table64(%r1), %r19 #else load32 sys_call_table, %r19 @@ -1327,6 +1327,8 @@ ENTRY(sys_call_table) END(sys_call_table) #ifdef CONFIG_64BIT +#undef __SYSCALL_WITH_COMPAT +#define __SYSCALL_WITH_COMPAT(nr, native, compat) __SYSCALL(nr, native) .align 8 ENTRY(sys_call_table64) #include /* 64-bit syscalls */ diff --git a/arch/powerpc/configs/ppc64_defconfig b/arch/powerpc/configs/ppc64_defconfig index 6e7b9e8fd2251..65e518dde2c2f 100644 --- a/arch/powerpc/configs/ppc64_defconfig +++ b/arch/powerpc/configs/ppc64_defconfig @@ -81,7 +81,6 @@ CONFIG_MODULE_SIG_SHA512=y CONFIG_PARTITION_ADVANCED=y CONFIG_BINFMT_MISC=m CONFIG_ZSWAP=y -CONFIG_Z3FOLD=y CONFIG_ZSMALLOC=y # CONFIG_SLAB_MERGE_DEFAULT is not set CONFIG_SLAB_FREELIST_RANDOM=y diff --git a/arch/powerpc/configs/ps3_defconfig b/arch/powerpc/configs/ps3_defconfig index aa8bb0208bcc8..2b175ddf82f0b 100644 --- a/arch/powerpc/configs/ps3_defconfig +++ b/arch/powerpc/configs/ps3_defconfig @@ -24,7 +24,6 @@ CONFIG_PS3_VRAM=m CONFIG_PS3_LPM=m # CONFIG_PPC_OF_BOOT_TRAMPOLINE is not set CONFIG_KEXEC=y -# CONFIG_PPC64_BIG_ENDIAN_ELF_ABI_V2 is not set CONFIG_PPC_4K_PAGES=y CONFIG_SCHED_SMT=y CONFIG_PM=y diff --git a/arch/powerpc/crypto/Kconfig b/arch/powerpc/crypto/Kconfig index 6fc2248ca5616..fccf742c55c2c 100644 --- a/arch/powerpc/crypto/Kconfig +++ b/arch/powerpc/crypto/Kconfig @@ -96,6 +96,7 @@ config CRYPTO_AES_PPC_SPE config CRYPTO_AES_GCM_P10 tristate "Stitched AES/GCM acceleration support on P10 or later CPU (PPC)" + depends on BROKEN depends on PPC64 && CPU_LITTLE_ENDIAN && VSX select CRYPTO_LIB_AES select CRYPTO_ALGAPI diff --git a/arch/powerpc/include/asm/asm-compat.h b/arch/powerpc/include/asm/asm-compat.h index 2bc53c646ccd7..83848b534cb17 100644 --- a/arch/powerpc/include/asm/asm-compat.h +++ b/arch/powerpc/include/asm/asm-compat.h @@ -39,6 +39,12 @@ #define STDX_BE stringify_in_c(stdbrx) #endif +#ifdef CONFIG_CC_IS_CLANG +#define DS_FORM_CONSTRAINT "Z<>" +#else +#define DS_FORM_CONSTRAINT "YZ<>" +#endif + #else /* 32-bit */ /* operations for longs and pointers */ diff --git a/arch/powerpc/include/asm/atomic.h b/arch/powerpc/include/asm/atomic.h index 5bf6a4d49268c..d1ea554c33ed7 100644 --- a/arch/powerpc/include/asm/atomic.h +++ b/arch/powerpc/include/asm/atomic.h @@ -11,6 +11,7 @@ #include #include #include +#include /* * Since *_return_relaxed and {cmp}xchg_relaxed are implemented with @@ -197,7 +198,7 @@ static __inline__ s64 arch_atomic64_read(const atomic64_t *v) if (IS_ENABLED(CONFIG_PPC_KERNEL_PREFIXED)) __asm__ __volatile__("ld %0,0(%1)" : "=r"(t) : "b"(&v->counter)); else - __asm__ __volatile__("ld%U1%X1 %0,%1" : "=r"(t) : "m<>"(v->counter)); + __asm__ __volatile__("ld%U1%X1 %0,%1" : "=r"(t) : DS_FORM_CONSTRAINT (v->counter)); return t; } @@ -208,7 +209,7 @@ static __inline__ void arch_atomic64_set(atomic64_t *v, s64 i) if (IS_ENABLED(CONFIG_PPC_KERNEL_PREFIXED)) __asm__ __volatile__("std %1,0(%2)" : "=m"(v->counter) : "r"(i), "b"(&v->counter)); else - __asm__ __volatile__("std%U0%X0 %1,%0" : "=m<>"(v->counter) : "r"(i)); + __asm__ __volatile__("std%U0%X0 %1,%0" : "=" DS_FORM_CONSTRAINT (v->counter) : "r"(i)); } #define ATOMIC64_OP(op, asm_op) \ diff --git a/arch/powerpc/include/asm/nohash/mmu-e500.h b/arch/powerpc/include/asm/nohash/mmu-e500.h index 6ddced0415cb5..7dc24b8632d7c 100644 --- a/arch/powerpc/include/asm/nohash/mmu-e500.h +++ b/arch/powerpc/include/asm/nohash/mmu-e500.h @@ -303,8 +303,7 @@ extern unsigned long linear_map_top; extern int book3e_htw_mode; #define PPC_HTW_NONE 0 -#define PPC_HTW_IBM 1 -#define PPC_HTW_E6500 2 +#define PPC_HTW_E6500 1 /* * 64-bit booke platforms don't load the tlb in the tlb miss handler code. diff --git a/arch/powerpc/include/asm/uaccess.h b/arch/powerpc/include/asm/uaccess.h index ccc91bf9b0342..a81bd825087cd 100644 --- a/arch/powerpc/include/asm/uaccess.h +++ b/arch/powerpc/include/asm/uaccess.h @@ -6,6 +6,7 @@ #include #include #include +#include #ifdef __powerpc64__ /* We use TASK_SIZE_USER64 as TASK_SIZE is not constant */ @@ -92,12 +93,6 @@ __pu_failed: \ : label) #endif -#ifdef CONFIG_CC_IS_CLANG -#define DS_FORM_CONSTRAINT "Z<>" -#else -#define DS_FORM_CONSTRAINT "YZ<>" -#endif - #ifdef __powerpc64__ #ifdef CONFIG_PPC_KERNEL_PREFIXED #define __put_user_asm2_goto(x, ptr, label) \ diff --git a/arch/powerpc/include/asm/vdso_datapage.h b/arch/powerpc/include/asm/vdso_datapage.h index a585c8e538ff0..939daf6b695ef 100644 --- a/arch/powerpc/include/asm/vdso_datapage.h +++ b/arch/powerpc/include/asm/vdso_datapage.h @@ -111,6 +111,21 @@ extern struct vdso_arch_data *vdso_data; addi \ptr, \ptr, (_vdso_datapage - 999b)@l .endm +#include +#include + +.macro get_realdatapage ptr scratch + get_datapage \ptr +#ifdef CONFIG_TIME_NS + lwz \scratch, VDSO_CLOCKMODE_OFFSET(\ptr) + xoris \scratch, \scratch, VDSO_CLOCKMODE_TIMENS@h + xori \scratch, \scratch, VDSO_CLOCKMODE_TIMENS@l + cntlzw \scratch, \scratch + rlwinm \scratch, \scratch, PAGE_SHIFT - 5, 1 << PAGE_SHIFT + add \ptr, \ptr, \scratch +#endif +.endm + #endif /* __ASSEMBLY__ */ #endif /* __KERNEL__ */ diff --git a/arch/powerpc/kernel/asm-offsets.c b/arch/powerpc/kernel/asm-offsets.c index 9f14d95b8b32f..2affd30468bc4 100644 --- a/arch/powerpc/kernel/asm-offsets.c +++ b/arch/powerpc/kernel/asm-offsets.c @@ -348,6 +348,8 @@ int main(void) #else OFFSET(CFG_SYSCALL_MAP32, vdso_arch_data, syscall_map); #endif + OFFSET(VDSO_CLOCKMODE_OFFSET, vdso_arch_data, data[0].clock_mode); + DEFINE(VDSO_CLOCKMODE_TIMENS, VDSO_CLOCKMODE_TIMENS); #ifdef CONFIG_BUG DEFINE(BUG_ENTRY_SIZE, sizeof(struct bug_entry)); diff --git a/arch/powerpc/kernel/head_8xx.S b/arch/powerpc/kernel/head_8xx.S index 647b0b445e89d..0c94db8e2bded 100644 --- a/arch/powerpc/kernel/head_8xx.S +++ b/arch/powerpc/kernel/head_8xx.S @@ -41,12 +41,12 @@ #include "head_32.h" .macro compare_to_kernel_boundary scratch, addr -#if CONFIG_TASK_SIZE <= 0x80000000 && CONFIG_PAGE_OFFSET >= 0x80000000 +#if CONFIG_TASK_SIZE <= 0x80000000 && MODULES_VADDR >= 0x80000000 /* By simply checking Address >= 0x80000000, we know if its a kernel address */ not. \scratch, \addr #else rlwinm \scratch, \addr, 16, 0xfff8 - cmpli cr0, \scratch, PAGE_OFFSET@h + cmpli cr0, \scratch, TASK_SIZE@h #endif .endm @@ -404,7 +404,7 @@ FixupDAR:/* Entry point for dcbx workaround. */ mfspr r10, SPRN_SRR0 mtspr SPRN_MD_EPN, r10 rlwinm r11, r10, 16, 0xfff8 - cmpli cr1, r11, PAGE_OFFSET@h + cmpli cr1, r11, TASK_SIZE@h mfspr r11, SPRN_M_TWB /* Get level 1 table */ blt+ cr1, 3f diff --git a/arch/powerpc/kernel/setup-common.c b/arch/powerpc/kernel/setup-common.c index 20f72cd1d8138..03eaad5949f14 100644 --- a/arch/powerpc/kernel/setup-common.c +++ b/arch/powerpc/kernel/setup-common.c @@ -950,6 +950,7 @@ void __init setup_arch(char **cmdline_p) mem_topology_setup(); /* Set max_mapnr before paging_init() */ set_max_mapnr(max_pfn); + high_memory = (void *)__va(max_low_pfn * PAGE_SIZE); /* * Release secondary cpus out of their spinloops at 0x60 now that diff --git a/arch/powerpc/kernel/vdso/cacheflush.S b/arch/powerpc/kernel/vdso/cacheflush.S index 0085ae464dac9..3b2479bd2f9a1 100644 --- a/arch/powerpc/kernel/vdso/cacheflush.S +++ b/arch/powerpc/kernel/vdso/cacheflush.S @@ -30,7 +30,7 @@ END_FTR_SECTION_IFSET(CPU_FTR_COHERENT_ICACHE) #ifdef CONFIG_PPC64 mflr r12 .cfi_register lr,r12 - get_datapage r10 + get_realdatapage r10, r11 mtlr r12 .cfi_restore lr #endif diff --git a/arch/powerpc/kernel/vdso/datapage.S b/arch/powerpc/kernel/vdso/datapage.S index db8e167f01667..2b19b6201a33a 100644 --- a/arch/powerpc/kernel/vdso/datapage.S +++ b/arch/powerpc/kernel/vdso/datapage.S @@ -28,7 +28,7 @@ V_FUNCTION_BEGIN(__kernel_get_syscall_map) mflr r12 .cfi_register lr,r12 mr. r4,r3 - get_datapage r3 + get_realdatapage r3, r11 mtlr r12 #ifdef __powerpc64__ addi r3,r3,CFG_SYSCALL_MAP64 @@ -52,7 +52,7 @@ V_FUNCTION_BEGIN(__kernel_get_tbfreq) .cfi_startproc mflr r12 .cfi_register lr,r12 - get_datapage r3 + get_realdatapage r3, r11 #ifndef __powerpc64__ lwz r4,(CFG_TB_TICKS_PER_SEC + 4)(r3) #endif diff --git a/arch/powerpc/kernel/vdso/gettimeofday.S b/arch/powerpc/kernel/vdso/gettimeofday.S index 48fc6658053aa..894cb939cd2b3 100644 --- a/arch/powerpc/kernel/vdso/gettimeofday.S +++ b/arch/powerpc/kernel/vdso/gettimeofday.S @@ -38,11 +38,7 @@ .else addi r4, r5, VDSO_DATA_OFFSET .endif -#ifdef __powerpc64__ bl CFUNC(DOTSYM(\funct)) -#else - bl \funct -#endif PPC_LL r0, PPC_MIN_STKFRM + PPC_LR_STKOFF(r1) #ifdef __powerpc64__ PPC_LL r2, PPC_MIN_STKFRM + STK_GOT(r1) diff --git a/arch/powerpc/kernel/vdso/vdso32.lds.S b/arch/powerpc/kernel/vdso/vdso32.lds.S index 426e1ccc6971a..8f57107000a24 100644 --- a/arch/powerpc/kernel/vdso/vdso32.lds.S +++ b/arch/powerpc/kernel/vdso/vdso32.lds.S @@ -74,6 +74,8 @@ SECTIONS .got : { *(.got) } :text .plt : { *(.plt) } + .rela.dyn : { *(.rela .rela*) } + _end = .; __end = .; PROVIDE(end = .); @@ -87,7 +89,7 @@ SECTIONS *(.branch_lt) *(.data .data.* .gnu.linkonce.d.* .sdata*) *(.bss .sbss .dynbss .dynsbss) - *(.got1 .glink .iplt .rela*) + *(.got1 .glink .iplt) } } diff --git a/arch/powerpc/kernel/vdso/vdso64.lds.S b/arch/powerpc/kernel/vdso/vdso64.lds.S index bda6c8cdd459c..400819258c06b 100644 --- a/arch/powerpc/kernel/vdso/vdso64.lds.S +++ b/arch/powerpc/kernel/vdso/vdso64.lds.S @@ -69,7 +69,7 @@ SECTIONS .eh_frame_hdr : { *(.eh_frame_hdr) } :text :eh_frame_hdr .eh_frame : { KEEP (*(.eh_frame)) } :text .gcc_except_table : { *(.gcc_except_table) } - .rela.dyn ALIGN(8) : { *(.rela.dyn) } + .rela.dyn ALIGN(8) : { *(.rela .rela*) } .got ALIGN(8) : { *(.got .toc) } @@ -86,7 +86,7 @@ SECTIONS *(.data .data.* .gnu.linkonce.d.* .sdata*) *(.bss .sbss .dynbss .dynsbss) *(.opd) - *(.glink .iplt .plt .rela*) + *(.glink .iplt .plt) } } diff --git a/arch/powerpc/lib/qspinlock.c b/arch/powerpc/lib/qspinlock.c index 6dd2f46bd3ef6..8830267789c9c 100644 --- a/arch/powerpc/lib/qspinlock.c +++ b/arch/powerpc/lib/qspinlock.c @@ -715,7 +715,15 @@ static __always_inline void queued_spin_lock_mcs_queue(struct qspinlock *lock, b } release: - qnodesp->count--; /* release the node */ + /* + * Clear the lock before releasing the node, as another CPU might see stale + * values if an interrupt occurs after we increment qnodesp->count + * but before node->lock is initialized. The barrier ensures that + * there are no further stores to the node after it has been released. + */ + node->lock = NULL; + barrier(); + qnodesp->count--; } void queued_spin_lock_slowpath(struct qspinlock *lock) diff --git a/arch/powerpc/mm/mem.c b/arch/powerpc/mm/mem.c index 07e8f4f1e07f8..9dbef559af4cb 100644 --- a/arch/powerpc/mm/mem.c +++ b/arch/powerpc/mm/mem.c @@ -287,8 +287,6 @@ void __init mem_init(void) swiotlb_init(ppc_swiotlb_enable, ppc_swiotlb_flags); #endif - high_memory = (void *) __va(max_low_pfn * PAGE_SIZE); - kasan_late_init(); memblock_free_all(); diff --git a/arch/powerpc/mm/nohash/8xx.c b/arch/powerpc/mm/nohash/8xx.c index 3245016302787..a947dff35d651 100644 --- a/arch/powerpc/mm/nohash/8xx.c +++ b/arch/powerpc/mm/nohash/8xx.c @@ -149,11 +149,11 @@ unsigned long __init mmu_mapin_ram(unsigned long base, unsigned long top) mmu_mapin_immr(); - mmu_mapin_ram_chunk(0, boundary, PAGE_KERNEL_TEXT, true); + mmu_mapin_ram_chunk(0, boundary, PAGE_KERNEL_X, true); if (debug_pagealloc_enabled_or_kfence()) { top = boundary; } else { - mmu_mapin_ram_chunk(boundary, einittext8, PAGE_KERNEL_TEXT, true); + mmu_mapin_ram_chunk(boundary, einittext8, PAGE_KERNEL_X, true); mmu_mapin_ram_chunk(einittext8, top, PAGE_KERNEL, true); } diff --git a/arch/powerpc/mm/nohash/Makefile b/arch/powerpc/mm/nohash/Makefile index f3894e79d5f70..24b445a5fcacc 100644 --- a/arch/powerpc/mm/nohash/Makefile +++ b/arch/powerpc/mm/nohash/Makefile @@ -3,7 +3,7 @@ ccflags-$(CONFIG_PPC64) := $(NO_MINIMAL_TOC) obj-y += mmu_context.o tlb.o tlb_low.o kup.o -obj-$(CONFIG_PPC_BOOK3E_64) += tlb_low_64e.o book3e_pgtable.o +obj-$(CONFIG_PPC_BOOK3E_64) += tlb_64e.o tlb_low_64e.o book3e_pgtable.o obj-$(CONFIG_40x) += 40x.o obj-$(CONFIG_44x) += 44x.o obj-$(CONFIG_PPC_8xx) += 8xx.o diff --git a/arch/powerpc/mm/nohash/tlb.c b/arch/powerpc/mm/nohash/tlb.c index 5ffa0af4328af..f57dc721d0636 100644 --- a/arch/powerpc/mm/nohash/tlb.c +++ b/arch/powerpc/mm/nohash/tlb.c @@ -110,28 +110,6 @@ struct mmu_psize_def mmu_psize_defs[MMU_PAGE_COUNT] = { }; #endif -/* The variables below are currently only used on 64-bit Book3E - * though this will probably be made common with other nohash - * implementations at some point - */ -#ifdef CONFIG_PPC64 - -int mmu_pte_psize; /* Page size used for PTE pages */ -int mmu_vmemmap_psize; /* Page size used for the virtual mem map */ -int book3e_htw_mode; /* HW tablewalk? Value is PPC_HTW_* */ -unsigned long linear_map_top; /* Top of linear mapping */ - - -/* - * Number of bytes to add to SPRN_SPRG_TLB_EXFRAME on crit/mcheck/debug - * exceptions. This is used for bolted and e6500 TLB miss handlers which - * do not modify this SPRG in the TLB miss code; for other TLB miss handlers, - * this is set to zero. - */ -int extlb_level_exc; - -#endif /* CONFIG_PPC64 */ - #ifdef CONFIG_PPC_E500 /* next_tlbcam_idx is used to round-robin tlbcam entry assignment */ DEFINE_PER_CPU(int, next_tlbcam_idx); @@ -358,381 +336,7 @@ void tlb_flush(struct mmu_gather *tlb) flush_tlb_mm(tlb->mm); } -/* - * Below are functions specific to the 64-bit variant of Book3E though that - * may change in the future - */ - -#ifdef CONFIG_PPC64 - -/* - * Handling of virtual linear page tables or indirect TLB entries - * flushing when PTE pages are freed - */ -void tlb_flush_pgtable(struct mmu_gather *tlb, unsigned long address) -{ - int tsize = mmu_psize_defs[mmu_pte_psize].enc; - - if (book3e_htw_mode != PPC_HTW_NONE) { - unsigned long start = address & PMD_MASK; - unsigned long end = address + PMD_SIZE; - unsigned long size = 1UL << mmu_psize_defs[mmu_pte_psize].shift; - - /* This isn't the most optimal, ideally we would factor out the - * while preempt & CPU mask mucking around, or even the IPI but - * it will do for now - */ - while (start < end) { - __flush_tlb_page(tlb->mm, start, tsize, 1); - start += size; - } - } else { - unsigned long rmask = 0xf000000000000000ul; - unsigned long rid = (address & rmask) | 0x1000000000000000ul; - unsigned long vpte = address & ~rmask; - - vpte = (vpte >> (PAGE_SHIFT - 3)) & ~0xffful; - vpte |= rid; - __flush_tlb_page(tlb->mm, vpte, tsize, 0); - } -} - -static void __init setup_page_sizes(void) -{ - unsigned int tlb0cfg; - unsigned int tlb0ps; - unsigned int eptcfg; - int i, psize; - -#ifdef CONFIG_PPC_E500 - unsigned int mmucfg = mfspr(SPRN_MMUCFG); - int fsl_mmu = mmu_has_feature(MMU_FTR_TYPE_FSL_E); - - if (fsl_mmu && (mmucfg & MMUCFG_MAVN) == MMUCFG_MAVN_V1) { - unsigned int tlb1cfg = mfspr(SPRN_TLB1CFG); - unsigned int min_pg, max_pg; - - min_pg = (tlb1cfg & TLBnCFG_MINSIZE) >> TLBnCFG_MINSIZE_SHIFT; - max_pg = (tlb1cfg & TLBnCFG_MAXSIZE) >> TLBnCFG_MAXSIZE_SHIFT; - - for (psize = 0; psize < MMU_PAGE_COUNT; ++psize) { - struct mmu_psize_def *def; - unsigned int shift; - - def = &mmu_psize_defs[psize]; - shift = def->shift; - - if (shift == 0 || shift & 1) - continue; - - /* adjust to be in terms of 4^shift Kb */ - shift = (shift - 10) >> 1; - - if ((shift >= min_pg) && (shift <= max_pg)) - def->flags |= MMU_PAGE_SIZE_DIRECT; - } - - goto out; - } - - if (fsl_mmu && (mmucfg & MMUCFG_MAVN) == MMUCFG_MAVN_V2) { - u32 tlb1cfg, tlb1ps; - - tlb0cfg = mfspr(SPRN_TLB0CFG); - tlb1cfg = mfspr(SPRN_TLB1CFG); - tlb1ps = mfspr(SPRN_TLB1PS); - eptcfg = mfspr(SPRN_EPTCFG); - - if ((tlb1cfg & TLBnCFG_IND) && (tlb0cfg & TLBnCFG_PT)) - book3e_htw_mode = PPC_HTW_E6500; - - /* - * We expect 4K subpage size and unrestricted indirect size. - * The lack of a restriction on indirect size is a Freescale - * extension, indicated by PSn = 0 but SPSn != 0. - */ - if (eptcfg != 2) - book3e_htw_mode = PPC_HTW_NONE; - - for (psize = 0; psize < MMU_PAGE_COUNT; ++psize) { - struct mmu_psize_def *def = &mmu_psize_defs[psize]; - - if (!def->shift) - continue; - - if (tlb1ps & (1U << (def->shift - 10))) { - def->flags |= MMU_PAGE_SIZE_DIRECT; - - if (book3e_htw_mode && psize == MMU_PAGE_2M) - def->flags |= MMU_PAGE_SIZE_INDIRECT; - } - } - - goto out; - } -#endif - - tlb0cfg = mfspr(SPRN_TLB0CFG); - tlb0ps = mfspr(SPRN_TLB0PS); - eptcfg = mfspr(SPRN_EPTCFG); - - /* Look for supported direct sizes */ - for (psize = 0; psize < MMU_PAGE_COUNT; ++psize) { - struct mmu_psize_def *def = &mmu_psize_defs[psize]; - - if (tlb0ps & (1U << (def->shift - 10))) - def->flags |= MMU_PAGE_SIZE_DIRECT; - } - - /* Indirect page sizes supported ? */ - if ((tlb0cfg & TLBnCFG_IND) == 0 || - (tlb0cfg & TLBnCFG_PT) == 0) - goto out; - - book3e_htw_mode = PPC_HTW_IBM; - - /* Now, we only deal with one IND page size for each - * direct size. Hopefully all implementations today are - * unambiguous, but we might want to be careful in the - * future. - */ - for (i = 0; i < 3; i++) { - unsigned int ps, sps; - - sps = eptcfg & 0x1f; - eptcfg >>= 5; - ps = eptcfg & 0x1f; - eptcfg >>= 5; - if (!ps || !sps) - continue; - for (psize = 0; psize < MMU_PAGE_COUNT; psize++) { - struct mmu_psize_def *def = &mmu_psize_defs[psize]; - - if (ps == (def->shift - 10)) - def->flags |= MMU_PAGE_SIZE_INDIRECT; - if (sps == (def->shift - 10)) - def->ind = ps + 10; - } - } - -out: - /* Cleanup array and print summary */ - pr_info("MMU: Supported page sizes\n"); - for (psize = 0; psize < MMU_PAGE_COUNT; ++psize) { - struct mmu_psize_def *def = &mmu_psize_defs[psize]; - const char *__page_type_names[] = { - "unsupported", - "direct", - "indirect", - "direct & indirect" - }; - if (def->flags == 0) { - def->shift = 0; - continue; - } - pr_info(" %8ld KB as %s\n", 1ul << (def->shift - 10), - __page_type_names[def->flags & 0x3]); - } -} - -static void __init setup_mmu_htw(void) -{ - /* - * If we want to use HW tablewalk, enable it by patching the TLB miss - * handlers to branch to the one dedicated to it. - */ - - switch (book3e_htw_mode) { - case PPC_HTW_IBM: - patch_exception(0x1c0, exc_data_tlb_miss_htw_book3e); - patch_exception(0x1e0, exc_instruction_tlb_miss_htw_book3e); - break; -#ifdef CONFIG_PPC_E500 - case PPC_HTW_E6500: - extlb_level_exc = EX_TLB_SIZE; - patch_exception(0x1c0, exc_data_tlb_miss_e6500_book3e); - patch_exception(0x1e0, exc_instruction_tlb_miss_e6500_book3e); - break; -#endif - } - pr_info("MMU: Book3E HW tablewalk %s\n", - book3e_htw_mode != PPC_HTW_NONE ? "enabled" : "not supported"); -} - -/* - * Early initialization of the MMU TLB code - */ -static void early_init_this_mmu(void) -{ - unsigned int mas4; - - /* Set MAS4 based on page table setting */ - - mas4 = 0x4 << MAS4_WIMGED_SHIFT; - switch (book3e_htw_mode) { - case PPC_HTW_E6500: - mas4 |= MAS4_INDD; - mas4 |= BOOK3E_PAGESZ_2M << MAS4_TSIZED_SHIFT; - mas4 |= MAS4_TLBSELD(1); - mmu_pte_psize = MMU_PAGE_2M; - break; - - case PPC_HTW_IBM: - mas4 |= MAS4_INDD; - mas4 |= BOOK3E_PAGESZ_1M << MAS4_TSIZED_SHIFT; - mmu_pte_psize = MMU_PAGE_1M; - break; - - case PPC_HTW_NONE: - mas4 |= BOOK3E_PAGESZ_4K << MAS4_TSIZED_SHIFT; - mmu_pte_psize = mmu_virtual_psize; - break; - } - mtspr(SPRN_MAS4, mas4); - -#ifdef CONFIG_PPC_E500 - if (mmu_has_feature(MMU_FTR_TYPE_FSL_E)) { - unsigned int num_cams; - bool map = true; - - /* use a quarter of the TLBCAM for bolted linear map */ - num_cams = (mfspr(SPRN_TLB1CFG) & TLBnCFG_N_ENTRY) / 4; - - /* - * Only do the mapping once per core, or else the - * transient mapping would cause problems. - */ -#ifdef CONFIG_SMP - if (hweight32(get_tensr()) > 1) - map = false; -#endif - - if (map) - linear_map_top = map_mem_in_cams(linear_map_top, - num_cams, false, true); - } -#endif - - /* A sync won't hurt us after mucking around with - * the MMU configuration - */ - mb(); -} - -static void __init early_init_mmu_global(void) -{ - /* XXX This should be decided at runtime based on supported - * page sizes in the TLB, but for now let's assume 16M is - * always there and a good fit (which it probably is) - * - * Freescale booke only supports 4K pages in TLB0, so use that. - */ - if (mmu_has_feature(MMU_FTR_TYPE_FSL_E)) - mmu_vmemmap_psize = MMU_PAGE_4K; - else - mmu_vmemmap_psize = MMU_PAGE_16M; - - /* XXX This code only checks for TLB 0 capabilities and doesn't - * check what page size combos are supported by the HW. It - * also doesn't handle the case where a separate array holds - * the IND entries from the array loaded by the PT. - */ - /* Look for supported page sizes */ - setup_page_sizes(); - - /* Look for HW tablewalk support */ - setup_mmu_htw(); - -#ifdef CONFIG_PPC_E500 - if (mmu_has_feature(MMU_FTR_TYPE_FSL_E)) { - if (book3e_htw_mode == PPC_HTW_NONE) { - extlb_level_exc = EX_TLB_SIZE; - patch_exception(0x1c0, exc_data_tlb_miss_bolted_book3e); - patch_exception(0x1e0, - exc_instruction_tlb_miss_bolted_book3e); - } - } -#endif - - /* Set the global containing the top of the linear mapping - * for use by the TLB miss code - */ - linear_map_top = memblock_end_of_DRAM(); - - ioremap_bot = IOREMAP_BASE; -} - -static void __init early_mmu_set_memory_limit(void) -{ -#ifdef CONFIG_PPC_E500 - if (mmu_has_feature(MMU_FTR_TYPE_FSL_E)) { - /* - * Limit memory so we dont have linear faults. - * Unlike memblock_set_current_limit, which limits - * memory available during early boot, this permanently - * reduces the memory available to Linux. We need to - * do this because highmem is not supported on 64-bit. - */ - memblock_enforce_memory_limit(linear_map_top); - } -#endif - - memblock_set_current_limit(linear_map_top); -} - -/* boot cpu only */ -void __init early_init_mmu(void) -{ - early_init_mmu_global(); - early_init_this_mmu(); - early_mmu_set_memory_limit(); -} - -void early_init_mmu_secondary(void) -{ - early_init_this_mmu(); -} - -void setup_initial_memory_limit(phys_addr_t first_memblock_base, - phys_addr_t first_memblock_size) -{ - /* On non-FSL Embedded 64-bit, we adjust the RMA size to match - * the bolted TLB entry. We know for now that only 1G - * entries are supported though that may eventually - * change. - * - * on FSL Embedded 64-bit, usually all RAM is bolted, but with - * unusual memory sizes it's possible for some RAM to not be mapped - * (such RAM is not used at all by Linux, since we don't support - * highmem on 64-bit). We limit ppc64_rma_size to what would be - * mappable if this memblock is the only one. Additional memblocks - * can only increase, not decrease, the amount that ends up getting - * mapped. We still limit max to 1G even if we'll eventually map - * more. This is due to what the early init code is set up to do. - * - * We crop it to the size of the first MEMBLOCK to - * avoid going over total available memory just in case... - */ -#ifdef CONFIG_PPC_E500 - if (early_mmu_has_feature(MMU_FTR_TYPE_FSL_E)) { - unsigned long linear_sz; - unsigned int num_cams; - - /* use a quarter of the TLBCAM for bolted linear map */ - num_cams = (mfspr(SPRN_TLB1CFG) & TLBnCFG_N_ENTRY) / 4; - - linear_sz = map_mem_in_cams(first_memblock_size, num_cams, - true, true); - - ppc64_rma_size = min_t(u64, linear_sz, 0x40000000); - } else -#endif - ppc64_rma_size = min_t(u64, first_memblock_size, 0x40000000); - - /* Finally limit subsequent allocations */ - memblock_set_current_limit(first_memblock_base + ppc64_rma_size); -} -#else /* ! CONFIG_PPC64 */ +#ifndef CONFIG_PPC64 void __init early_init_mmu(void) { unsigned long root = of_get_flat_dt_root(); diff --git a/arch/powerpc/mm/nohash/tlb_64e.c b/arch/powerpc/mm/nohash/tlb_64e.c new file mode 100644 index 0000000000000..b6af3ec4d001d --- /dev/null +++ b/arch/powerpc/mm/nohash/tlb_64e.c @@ -0,0 +1,361 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +/* + * Copyright 2008,2009 Ben Herrenschmidt + * IBM Corp. + * + * Derived from arch/ppc/mm/init.c: + * Copyright (C) 1995-1996 Gary Thomas (gdt@linuxppc.org) + * + * Modifications by Paul Mackerras (PowerMac) (paulus@cs.anu.edu.au) + * and Cort Dougan (PReP) (cort@cs.nmt.edu) + * Copyright (C) 1996 Paul Mackerras + * + * Derived from "arch/i386/mm/init.c" + * Copyright (C) 1991, 1992, 1993, 1994 Linus Torvalds + */ + +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include + +#include + +/* The variables below are currently only used on 64-bit Book3E + * though this will probably be made common with other nohash + * implementations at some point + */ +static int mmu_pte_psize; /* Page size used for PTE pages */ +int mmu_vmemmap_psize; /* Page size used for the virtual mem map */ +int book3e_htw_mode; /* HW tablewalk? Value is PPC_HTW_* */ +unsigned long linear_map_top; /* Top of linear mapping */ + + +/* + * Number of bytes to add to SPRN_SPRG_TLB_EXFRAME on crit/mcheck/debug + * exceptions. This is used for bolted and e6500 TLB miss handlers which + * do not modify this SPRG in the TLB miss code; for other TLB miss handlers, + * this is set to zero. + */ +int extlb_level_exc; + +/* + * Handling of virtual linear page tables or indirect TLB entries + * flushing when PTE pages are freed + */ +void tlb_flush_pgtable(struct mmu_gather *tlb, unsigned long address) +{ + int tsize = mmu_psize_defs[mmu_pte_psize].enc; + + if (book3e_htw_mode != PPC_HTW_NONE) { + unsigned long start = address & PMD_MASK; + unsigned long end = address + PMD_SIZE; + unsigned long size = 1UL << mmu_psize_defs[mmu_pte_psize].shift; + + /* This isn't the most optimal, ideally we would factor out the + * while preempt & CPU mask mucking around, or even the IPI but + * it will do for now + */ + while (start < end) { + __flush_tlb_page(tlb->mm, start, tsize, 1); + start += size; + } + } else { + unsigned long rmask = 0xf000000000000000ul; + unsigned long rid = (address & rmask) | 0x1000000000000000ul; + unsigned long vpte = address & ~rmask; + + vpte = (vpte >> (PAGE_SHIFT - 3)) & ~0xffful; + vpte |= rid; + __flush_tlb_page(tlb->mm, vpte, tsize, 0); + } +} + +static void __init setup_page_sizes(void) +{ + unsigned int tlb0cfg; + unsigned int eptcfg; + int psize; + +#ifdef CONFIG_PPC_E500 + unsigned int mmucfg = mfspr(SPRN_MMUCFG); + int fsl_mmu = mmu_has_feature(MMU_FTR_TYPE_FSL_E); + + if (fsl_mmu && (mmucfg & MMUCFG_MAVN) == MMUCFG_MAVN_V1) { + unsigned int tlb1cfg = mfspr(SPRN_TLB1CFG); + unsigned int min_pg, max_pg; + + min_pg = (tlb1cfg & TLBnCFG_MINSIZE) >> TLBnCFG_MINSIZE_SHIFT; + max_pg = (tlb1cfg & TLBnCFG_MAXSIZE) >> TLBnCFG_MAXSIZE_SHIFT; + + for (psize = 0; psize < MMU_PAGE_COUNT; ++psize) { + struct mmu_psize_def *def; + unsigned int shift; + + def = &mmu_psize_defs[psize]; + shift = def->shift; + + if (shift == 0 || shift & 1) + continue; + + /* adjust to be in terms of 4^shift Kb */ + shift = (shift - 10) >> 1; + + if ((shift >= min_pg) && (shift <= max_pg)) + def->flags |= MMU_PAGE_SIZE_DIRECT; + } + + goto out; + } + + if (fsl_mmu && (mmucfg & MMUCFG_MAVN) == MMUCFG_MAVN_V2) { + u32 tlb1cfg, tlb1ps; + + tlb0cfg = mfspr(SPRN_TLB0CFG); + tlb1cfg = mfspr(SPRN_TLB1CFG); + tlb1ps = mfspr(SPRN_TLB1PS); + eptcfg = mfspr(SPRN_EPTCFG); + + if ((tlb1cfg & TLBnCFG_IND) && (tlb0cfg & TLBnCFG_PT)) + book3e_htw_mode = PPC_HTW_E6500; + + /* + * We expect 4K subpage size and unrestricted indirect size. + * The lack of a restriction on indirect size is a Freescale + * extension, indicated by PSn = 0 but SPSn != 0. + */ + if (eptcfg != 2) + book3e_htw_mode = PPC_HTW_NONE; + + for (psize = 0; psize < MMU_PAGE_COUNT; ++psize) { + struct mmu_psize_def *def = &mmu_psize_defs[psize]; + + if (!def->shift) + continue; + + if (tlb1ps & (1U << (def->shift - 10))) { + def->flags |= MMU_PAGE_SIZE_DIRECT; + + if (book3e_htw_mode && psize == MMU_PAGE_2M) + def->flags |= MMU_PAGE_SIZE_INDIRECT; + } + } + + goto out; + } +#endif +out: + /* Cleanup array and print summary */ + pr_info("MMU: Supported page sizes\n"); + for (psize = 0; psize < MMU_PAGE_COUNT; ++psize) { + struct mmu_psize_def *def = &mmu_psize_defs[psize]; + const char *__page_type_names[] = { + "unsupported", + "direct", + "indirect", + "direct & indirect" + }; + if (def->flags == 0) { + def->shift = 0; + continue; + } + pr_info(" %8ld KB as %s\n", 1ul << (def->shift - 10), + __page_type_names[def->flags & 0x3]); + } +} + +static void __init setup_mmu_htw(void) +{ + /* + * If we want to use HW tablewalk, enable it by patching the TLB miss + * handlers to branch to the one dedicated to it. + */ + + switch (book3e_htw_mode) { +#ifdef CONFIG_PPC_E500 + case PPC_HTW_E6500: + extlb_level_exc = EX_TLB_SIZE; + patch_exception(0x1c0, exc_data_tlb_miss_e6500_book3e); + patch_exception(0x1e0, exc_instruction_tlb_miss_e6500_book3e); + break; +#endif + } + pr_info("MMU: Book3E HW tablewalk %s\n", + book3e_htw_mode != PPC_HTW_NONE ? "enabled" : "not supported"); +} + +/* + * Early initialization of the MMU TLB code + */ +static void early_init_this_mmu(void) +{ + unsigned int mas4; + + /* Set MAS4 based on page table setting */ + + mas4 = 0x4 << MAS4_WIMGED_SHIFT; + switch (book3e_htw_mode) { + case PPC_HTW_E6500: + mas4 |= MAS4_INDD; + mas4 |= BOOK3E_PAGESZ_2M << MAS4_TSIZED_SHIFT; + mas4 |= MAS4_TLBSELD(1); + mmu_pte_psize = MMU_PAGE_2M; + break; + + case PPC_HTW_NONE: + mas4 |= BOOK3E_PAGESZ_4K << MAS4_TSIZED_SHIFT; + mmu_pte_psize = mmu_virtual_psize; + break; + } + mtspr(SPRN_MAS4, mas4); + +#ifdef CONFIG_PPC_E500 + if (mmu_has_feature(MMU_FTR_TYPE_FSL_E)) { + unsigned int num_cams; + bool map = true; + + /* use a quarter of the TLBCAM for bolted linear map */ + num_cams = (mfspr(SPRN_TLB1CFG) & TLBnCFG_N_ENTRY) / 4; + + /* + * Only do the mapping once per core, or else the + * transient mapping would cause problems. + */ +#ifdef CONFIG_SMP + if (hweight32(get_tensr()) > 1) + map = false; +#endif + + if (map) + linear_map_top = map_mem_in_cams(linear_map_top, + num_cams, false, true); + } +#endif + + /* A sync won't hurt us after mucking around with + * the MMU configuration + */ + mb(); +} + +static void __init early_init_mmu_global(void) +{ + /* XXX This should be decided at runtime based on supported + * page sizes in the TLB, but for now let's assume 16M is + * always there and a good fit (which it probably is) + * + * Freescale booke only supports 4K pages in TLB0, so use that. + */ + if (mmu_has_feature(MMU_FTR_TYPE_FSL_E)) + mmu_vmemmap_psize = MMU_PAGE_4K; + else + mmu_vmemmap_psize = MMU_PAGE_16M; + + /* XXX This code only checks for TLB 0 capabilities and doesn't + * check what page size combos are supported by the HW. It + * also doesn't handle the case where a separate array holds + * the IND entries from the array loaded by the PT. + */ + /* Look for supported page sizes */ + setup_page_sizes(); + + /* Look for HW tablewalk support */ + setup_mmu_htw(); + +#ifdef CONFIG_PPC_E500 + if (mmu_has_feature(MMU_FTR_TYPE_FSL_E)) { + if (book3e_htw_mode == PPC_HTW_NONE) { + extlb_level_exc = EX_TLB_SIZE; + patch_exception(0x1c0, exc_data_tlb_miss_bolted_book3e); + patch_exception(0x1e0, + exc_instruction_tlb_miss_bolted_book3e); + } + } +#endif + + /* Set the global containing the top of the linear mapping + * for use by the TLB miss code + */ + linear_map_top = memblock_end_of_DRAM(); + + ioremap_bot = IOREMAP_BASE; +} + +static void __init early_mmu_set_memory_limit(void) +{ +#ifdef CONFIG_PPC_E500 + if (mmu_has_feature(MMU_FTR_TYPE_FSL_E)) { + /* + * Limit memory so we dont have linear faults. + * Unlike memblock_set_current_limit, which limits + * memory available during early boot, this permanently + * reduces the memory available to Linux. We need to + * do this because highmem is not supported on 64-bit. + */ + memblock_enforce_memory_limit(linear_map_top); + } +#endif + + memblock_set_current_limit(linear_map_top); +} + +/* boot cpu only */ +void __init early_init_mmu(void) +{ + early_init_mmu_global(); + early_init_this_mmu(); + early_mmu_set_memory_limit(); +} + +void early_init_mmu_secondary(void) +{ + early_init_this_mmu(); +} + +void setup_initial_memory_limit(phys_addr_t first_memblock_base, + phys_addr_t first_memblock_size) +{ + /* On non-FSL Embedded 64-bit, we adjust the RMA size to match + * the bolted TLB entry. We know for now that only 1G + * entries are supported though that may eventually + * change. + * + * on FSL Embedded 64-bit, usually all RAM is bolted, but with + * unusual memory sizes it's possible for some RAM to not be mapped + * (such RAM is not used at all by Linux, since we don't support + * highmem on 64-bit). We limit ppc64_rma_size to what would be + * mappable if this memblock is the only one. Additional memblocks + * can only increase, not decrease, the amount that ends up getting + * mapped. We still limit max to 1G even if we'll eventually map + * more. This is due to what the early init code is set up to do. + * + * We crop it to the size of the first MEMBLOCK to + * avoid going over total available memory just in case... + */ +#ifdef CONFIG_PPC_E500 + if (early_mmu_has_feature(MMU_FTR_TYPE_FSL_E)) { + unsigned long linear_sz; + unsigned int num_cams; + + /* use a quarter of the TLBCAM for bolted linear map */ + num_cams = (mfspr(SPRN_TLB1CFG) & TLBnCFG_N_ENTRY) / 4; + + linear_sz = map_mem_in_cams(first_memblock_size, num_cams, + true, true); + + ppc64_rma_size = min_t(u64, linear_sz, 0x40000000); + } else +#endif + ppc64_rma_size = min_t(u64, first_memblock_size, 0x40000000); + + /* Finally limit subsequent allocations */ + memblock_set_current_limit(first_memblock_base + ppc64_rma_size); +} diff --git a/arch/powerpc/mm/nohash/tlb_low_64e.S b/arch/powerpc/mm/nohash/tlb_low_64e.S index 7e0b8fe1c2797..b0eb3f7eaed14 100644 --- a/arch/powerpc/mm/nohash/tlb_low_64e.S +++ b/arch/powerpc/mm/nohash/tlb_low_64e.S @@ -893,201 +893,6 @@ virt_page_table_tlb_miss_whacko_fault: TLB_MISS_EPILOG_ERROR b exc_data_storage_book3e - -/************************************************************** - * * - * TLB miss handling for Book3E with hw page table support * - * * - **************************************************************/ - - -/* Data TLB miss */ - START_EXCEPTION(data_tlb_miss_htw) - TLB_MISS_PROLOG - - /* Now we handle the fault proper. We only save DEAR in normal - * fault case since that's the only interesting values here. - * We could probably also optimize by not saving SRR0/1 in the - * linear mapping case but I'll leave that for later - */ - mfspr r14,SPRN_ESR - mfspr r16,SPRN_DEAR /* get faulting address */ - srdi r11,r16,44 /* get region */ - xoris r11,r11,0xc - cmpldi cr0,r11,0 /* linear mapping ? */ - beq tlb_load_linear /* yes -> go to linear map load */ - cmpldi cr1,r11,1 /* vmalloc mapping ? */ - - /* We do the user/kernel test for the PID here along with the RW test - */ - srdi. r11,r16,60 /* Check for user region */ - ld r15,PACAPGD(r13) /* Load user pgdir */ - beq htw_tlb_miss - - /* XXX replace the RMW cycles with immediate loads + writes */ -1: mfspr r10,SPRN_MAS1 - rlwinm r10,r10,0,16,1 /* Clear TID */ - mtspr SPRN_MAS1,r10 - ld r15,PACA_KERNELPGD(r13) /* Load kernel pgdir */ - beq+ cr1,htw_tlb_miss - - /* We got a crappy address, just fault with whatever DEAR and ESR - * are here - */ - TLB_MISS_EPILOG_ERROR - b exc_data_storage_book3e - -/* Instruction TLB miss */ - START_EXCEPTION(instruction_tlb_miss_htw) - TLB_MISS_PROLOG - - /* If we take a recursive fault, the second level handler may need - * to know whether we are handling a data or instruction fault in - * order to get to the right store fault handler. We provide that - * info by keeping a crazy value for ESR in r14 - */ - li r14,-1 /* store to exception frame is done later */ - - /* Now we handle the fault proper. We only save DEAR in the non - * linear mapping case since we know the linear mapping case will - * not re-enter. We could indeed optimize and also not save SRR0/1 - * in the linear mapping case but I'll leave that for later - * - * Faulting address is SRR0 which is already in r16 - */ - srdi r11,r16,44 /* get region */ - xoris r11,r11,0xc - cmpldi cr0,r11,0 /* linear mapping ? */ - beq tlb_load_linear /* yes -> go to linear map load */ - cmpldi cr1,r11,1 /* vmalloc mapping ? */ - - /* We do the user/kernel test for the PID here along with the RW test - */ - srdi. r11,r16,60 /* Check for user region */ - ld r15,PACAPGD(r13) /* Load user pgdir */ - beq htw_tlb_miss - - /* XXX replace the RMW cycles with immediate loads + writes */ -1: mfspr r10,SPRN_MAS1 - rlwinm r10,r10,0,16,1 /* Clear TID */ - mtspr SPRN_MAS1,r10 - ld r15,PACA_KERNELPGD(r13) /* Load kernel pgdir */ - beq+ htw_tlb_miss - - /* We got a crappy address, just fault */ - TLB_MISS_EPILOG_ERROR - b exc_instruction_storage_book3e - - -/* - * This is the guts of the second-level TLB miss handler for direct - * misses. We are entered with: - * - * r16 = virtual page table faulting address - * r15 = PGD pointer - * r14 = ESR - * r13 = PACA - * r12 = TLB exception frame in PACA - * r11 = crap (free to use) - * r10 = crap (free to use) - * - * It can be re-entered by the linear mapping miss handler. However, to - * avoid too much complication, it will save/restore things for us - */ -htw_tlb_miss: -#ifdef CONFIG_PPC_KUAP - mfspr r10,SPRN_MAS1 - rlwinm. r10,r10,0,0x3fff0000 - beq- htw_tlb_miss_fault /* KUAP fault */ -#endif - /* Search if we already have a TLB entry for that virtual address, and - * if we do, bail out. - * - * MAS1:IND should be already set based on MAS4 - */ - PPC_TLBSRX_DOT(0,R16) - beq htw_tlb_miss_done - - /* Now, we need to walk the page tables. First check if we are in - * range. - */ - rldicl. r10,r16,64-PGTABLE_EADDR_SIZE,PGTABLE_EADDR_SIZE+4 - bne- htw_tlb_miss_fault - - /* Get the PGD pointer */ - cmpldi cr0,r15,0 - beq- htw_tlb_miss_fault - - /* Get to PGD entry */ - rldicl r11,r16,64-(PGDIR_SHIFT-3),64-PGD_INDEX_SIZE-3 - clrrdi r10,r11,3 - ldx r15,r10,r15 - cmpdi cr0,r15,0 - bge htw_tlb_miss_fault - - /* Get to PUD entry */ - rldicl r11,r16,64-(PUD_SHIFT-3),64-PUD_INDEX_SIZE-3 - clrrdi r10,r11,3 - ldx r15,r10,r15 - cmpdi cr0,r15,0 - bge htw_tlb_miss_fault - - /* Get to PMD entry */ - rldicl r11,r16,64-(PMD_SHIFT-3),64-PMD_INDEX_SIZE-3 - clrrdi r10,r11,3 - ldx r15,r10,r15 - cmpdi cr0,r15,0 - bge htw_tlb_miss_fault - - /* Ok, we're all right, we can now create an indirect entry for - * a 1M or 256M page. - * - * The last trick is now that because we use "half" pages for - * the HTW (1M IND is 2K and 256M IND is 32K) we need to account - * for an added LSB bit to the RPN. For 64K pages, there is no - * problem as we already use 32K arrays (half PTE pages), but for - * 4K page we need to extract a bit from the virtual address and - * insert it into the "PA52" bit of the RPN. - */ - rlwimi r15,r16,32-9,20,20 - /* Now we build the MAS: - * - * MAS 0 : Fully setup with defaults in MAS4 and TLBnCFG - * MAS 1 : Almost fully setup - * - PID already updated by caller if necessary - * - TSIZE for now is base ind page size always - * MAS 2 : Use defaults - * MAS 3+7 : Needs to be done - */ - ori r10,r15,(BOOK3E_PAGESZ_4K << MAS3_SPSIZE_SHIFT) - - srdi r16,r10,32 - mtspr SPRN_MAS3,r10 - mtspr SPRN_MAS7,r16 - - tlbwe - -htw_tlb_miss_done: - /* We don't bother with restoring DEAR or ESR since we know we are - * level 0 and just going back to userland. They are only needed - * if you are going to take an access fault - */ - TLB_MISS_EPILOG_SUCCESS - rfi - -htw_tlb_miss_fault: - /* We need to check if it was an instruction miss. We know this - * though because r14 would contain -1 - */ - cmpdi cr0,r14,-1 - beq 1f - mtspr SPRN_DEAR,r16 - mtspr SPRN_ESR,r14 - TLB_MISS_EPILOG_ERROR - b exc_data_storage_book3e -1: TLB_MISS_EPILOG_ERROR - b exc_instruction_storage_book3e - /* * This is the guts of "any" level TLB miss handler for kernel linear * mapping misses. We are entered with: diff --git a/arch/powerpc/platforms/pseries/dlpar.c b/arch/powerpc/platforms/pseries/dlpar.c index 47f8eabd1bee3..9873b916b2370 100644 --- a/arch/powerpc/platforms/pseries/dlpar.c +++ b/arch/powerpc/platforms/pseries/dlpar.c @@ -334,23 +334,6 @@ int handle_dlpar_errorlog(struct pseries_hp_errorlog *hp_elog) { int rc; - /* pseries error logs are in BE format, convert to cpu type */ - switch (hp_elog->id_type) { - case PSERIES_HP_ELOG_ID_DRC_COUNT: - hp_elog->_drc_u.drc_count = - be32_to_cpu(hp_elog->_drc_u.drc_count); - break; - case PSERIES_HP_ELOG_ID_DRC_INDEX: - hp_elog->_drc_u.drc_index = - be32_to_cpu(hp_elog->_drc_u.drc_index); - break; - case PSERIES_HP_ELOG_ID_DRC_IC: - hp_elog->_drc_u.ic.count = - be32_to_cpu(hp_elog->_drc_u.ic.count); - hp_elog->_drc_u.ic.index = - be32_to_cpu(hp_elog->_drc_u.ic.index); - } - switch (hp_elog->resource) { case PSERIES_HP_ELOG_RESOURCE_MEM: rc = dlpar_memory(hp_elog); diff --git a/arch/powerpc/platforms/pseries/hotplug-cpu.c b/arch/powerpc/platforms/pseries/hotplug-cpu.c index e62835a12d73f..6838a0fcda296 100644 --- a/arch/powerpc/platforms/pseries/hotplug-cpu.c +++ b/arch/powerpc/platforms/pseries/hotplug-cpu.c @@ -757,7 +757,7 @@ int dlpar_cpu(struct pseries_hp_errorlog *hp_elog) u32 drc_index; int rc; - drc_index = hp_elog->_drc_u.drc_index; + drc_index = be32_to_cpu(hp_elog->_drc_u.drc_index); lock_device_hotplug(); diff --git a/arch/powerpc/platforms/pseries/hotplug-memory.c b/arch/powerpc/platforms/pseries/hotplug-memory.c index 4adca5b61daba..95ff84c55cb14 100644 --- a/arch/powerpc/platforms/pseries/hotplug-memory.c +++ b/arch/powerpc/platforms/pseries/hotplug-memory.c @@ -811,16 +811,16 @@ int dlpar_memory(struct pseries_hp_errorlog *hp_elog) case PSERIES_HP_ELOG_ACTION_ADD: switch (hp_elog->id_type) { case PSERIES_HP_ELOG_ID_DRC_COUNT: - count = hp_elog->_drc_u.drc_count; + count = be32_to_cpu(hp_elog->_drc_u.drc_count); rc = dlpar_memory_add_by_count(count); break; case PSERIES_HP_ELOG_ID_DRC_INDEX: - drc_index = hp_elog->_drc_u.drc_index; + drc_index = be32_to_cpu(hp_elog->_drc_u.drc_index); rc = dlpar_memory_add_by_index(drc_index); break; case PSERIES_HP_ELOG_ID_DRC_IC: - count = hp_elog->_drc_u.ic.count; - drc_index = hp_elog->_drc_u.ic.index; + count = be32_to_cpu(hp_elog->_drc_u.ic.count); + drc_index = be32_to_cpu(hp_elog->_drc_u.ic.index); rc = dlpar_memory_add_by_ic(count, drc_index); break; default: @@ -832,16 +832,16 @@ int dlpar_memory(struct pseries_hp_errorlog *hp_elog) case PSERIES_HP_ELOG_ACTION_REMOVE: switch (hp_elog->id_type) { case PSERIES_HP_ELOG_ID_DRC_COUNT: - count = hp_elog->_drc_u.drc_count; + count = be32_to_cpu(hp_elog->_drc_u.drc_count); rc = dlpar_memory_remove_by_count(count); break; case PSERIES_HP_ELOG_ID_DRC_INDEX: - drc_index = hp_elog->_drc_u.drc_index; + drc_index = be32_to_cpu(hp_elog->_drc_u.drc_index); rc = dlpar_memory_remove_by_index(drc_index); break; case PSERIES_HP_ELOG_ID_DRC_IC: - count = hp_elog->_drc_u.ic.count; - drc_index = hp_elog->_drc_u.ic.index; + count = be32_to_cpu(hp_elog->_drc_u.ic.count); + drc_index = be32_to_cpu(hp_elog->_drc_u.ic.index); rc = dlpar_memory_remove_by_ic(count, drc_index); break; default: diff --git a/arch/powerpc/platforms/pseries/pmem.c b/arch/powerpc/platforms/pseries/pmem.c index 3c290b9ed01b3..0f1d45f32e4a4 100644 --- a/arch/powerpc/platforms/pseries/pmem.c +++ b/arch/powerpc/platforms/pseries/pmem.c @@ -121,7 +121,7 @@ int dlpar_hp_pmem(struct pseries_hp_errorlog *hp_elog) return -EINVAL; } - drc_index = hp_elog->_drc_u.drc_index; + drc_index = be32_to_cpu(hp_elog->_drc_u.drc_index); lock_device_hotplug(); diff --git a/arch/riscv/Kconfig b/arch/riscv/Kconfig index c37aa4dea7e2b..c1c06479f9628 100644 --- a/arch/riscv/Kconfig +++ b/arch/riscv/Kconfig @@ -27,6 +27,7 @@ config RISCV select ARCH_HAS_GCOV_PROFILE_ALL select ARCH_HAS_GIGANTIC_PAGE select ARCH_HAS_KCOV + select ARCH_HAS_MEMBARRIER_CALLBACKS select ARCH_HAS_MMIOWB select ARCH_HAS_NON_OVERLAPPING_ADDRESS_SPACE select ARCH_HAS_PMEM_API @@ -259,6 +260,11 @@ config GENERIC_HWEIGHT config FIX_EARLYCON_MEM def_bool MMU +config ILLEGAL_POINTER_VALUE + hex + default 0 if 32BIT + default 0xdead000000000000 if 64BIT + config PGTABLE_LEVELS int default 5 if 64BIT @@ -490,8 +496,8 @@ config RISCV_ISA_SVPBMT config TOOLCHAIN_HAS_V bool default y - depends on !64BIT || $(cc-option,-mabi=lp64 -march=rv64iv) - depends on !32BIT || $(cc-option,-mabi=ilp32 -march=rv32iv) + depends on !64BIT || $(cc-option,-mabi=lp64 -march=rv64imv) + depends on !32BIT || $(cc-option,-mabi=ilp32 -march=rv32imv) depends on LLD_VERSION >= 140000 || LD_VERSION >= 23800 depends on AS_HAS_OPTION_ARCH @@ -649,8 +655,7 @@ config IRQ_STACKS config THREAD_SIZE_ORDER int "Kernel stack size (in power-of-two numbers of page size)" if VMAP_STACK && EXPERT range 0 4 - default 1 if 32BIT && !KASAN - default 3 if 64BIT && KASAN + default 1 if 32BIT default 2 help Specify the Pages of thread stack size (from 4KB to 64KB), which also diff --git a/arch/riscv/boot/dts/starfive/jh7110-starfive-visionfive-2.dtsi b/arch/riscv/boot/dts/starfive/jh7110-starfive-visionfive-2.dtsi index 062b97c6e7dff..4874e3bb42ab1 100644 --- a/arch/riscv/boot/dts/starfive/jh7110-starfive-visionfive-2.dtsi +++ b/arch/riscv/boot/dts/starfive/jh7110-starfive-visionfive-2.dtsi @@ -204,6 +204,8 @@ &mmc0 { max-frequency = <100000000>; + assigned-clocks = <&syscrg JH7110_SYSCLK_SDIO0_SDCARD>; + assigned-clock-rates = <50000000>; bus-width = <8>; cap-mmc-highspeed; mmc-ddr-1_8v; @@ -220,6 +222,8 @@ &mmc1 { max-frequency = <100000000>; + assigned-clocks = <&syscrg JH7110_SYSCLK_SDIO1_SDCARD>; + assigned-clock-rates = <50000000>; bus-width = <4>; no-sdio; no-mmc; diff --git a/arch/riscv/include/asm/kfence.h b/arch/riscv/include/asm/kfence.h index 0bbffd528096d..7388edd88986f 100644 --- a/arch/riscv/include/asm/kfence.h +++ b/arch/riscv/include/asm/kfence.h @@ -18,9 +18,9 @@ static inline bool kfence_protect_page(unsigned long addr, bool protect) pte_t *pte = virt_to_kpte(addr); if (protect) - set_pte(pte, __pte(pte_val(*pte) & ~_PAGE_PRESENT)); + set_pte(pte, __pte(pte_val(ptep_get(pte)) & ~_PAGE_PRESENT)); else - set_pte(pte, __pte(pte_val(*pte) | _PAGE_PRESENT)); + set_pte(pte, __pte(pte_val(ptep_get(pte)) | _PAGE_PRESENT)); flush_tlb_kernel_range(addr, addr + PAGE_SIZE); diff --git a/arch/riscv/include/asm/kvm_vcpu_pmu.h b/arch/riscv/include/asm/kvm_vcpu_pmu.h index 395518a1664e0..a50a1d23523fe 100644 --- a/arch/riscv/include/asm/kvm_vcpu_pmu.h +++ b/arch/riscv/include/asm/kvm_vcpu_pmu.h @@ -10,6 +10,7 @@ #define __KVM_VCPU_RISCV_PMU_H #include +#include #include #ifdef CONFIG_RISCV_PMU_SBI @@ -57,11 +58,11 @@ struct kvm_pmu { #if defined(CONFIG_32BIT) #define KVM_RISCV_VCPU_HPMCOUNTER_CSR_FUNCS \ -{.base = CSR_CYCLEH, .count = 31, .func = kvm_riscv_vcpu_pmu_read_hpm }, \ -{.base = CSR_CYCLE, .count = 31, .func = kvm_riscv_vcpu_pmu_read_hpm }, +{.base = CSR_CYCLEH, .count = 32, .func = kvm_riscv_vcpu_pmu_read_hpm }, \ +{.base = CSR_CYCLE, .count = 32, .func = kvm_riscv_vcpu_pmu_read_hpm }, #else #define KVM_RISCV_VCPU_HPMCOUNTER_CSR_FUNCS \ -{.base = CSR_CYCLE, .count = 31, .func = kvm_riscv_vcpu_pmu_read_hpm }, +{.base = CSR_CYCLE, .count = 32, .func = kvm_riscv_vcpu_pmu_read_hpm }, #endif int kvm_riscv_vcpu_pmu_incr_fw(struct kvm_vcpu *vcpu, unsigned long fid); @@ -92,8 +93,20 @@ void kvm_riscv_vcpu_pmu_reset(struct kvm_vcpu *vcpu); struct kvm_pmu { }; +static inline int kvm_riscv_vcpu_pmu_read_legacy(struct kvm_vcpu *vcpu, unsigned int csr_num, + unsigned long *val, unsigned long new_val, + unsigned long wr_mask) +{ + if (csr_num == CSR_CYCLE || csr_num == CSR_INSTRET) { + *val = 0; + return KVM_INSN_CONTINUE_NEXT_SEPC; + } else { + return KVM_INSN_ILLEGAL_TRAP; + } +} + #define KVM_RISCV_VCPU_HPMCOUNTER_CSR_FUNCS \ -{.base = 0, .count = 0, .func = NULL }, +{.base = CSR_CYCLE, .count = 3, .func = kvm_riscv_vcpu_pmu_read_legacy }, static inline void kvm_riscv_vcpu_pmu_init(struct kvm_vcpu *vcpu) {} static inline int kvm_riscv_vcpu_pmu_incr_fw(struct kvm_vcpu *vcpu, unsigned long fid) diff --git a/arch/riscv/include/asm/membarrier.h b/arch/riscv/include/asm/membarrier.h new file mode 100644 index 0000000000000..6c016ebb5020a --- /dev/null +++ b/arch/riscv/include/asm/membarrier.h @@ -0,0 +1,31 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ +#ifndef _ASM_RISCV_MEMBARRIER_H +#define _ASM_RISCV_MEMBARRIER_H + +static inline void membarrier_arch_switch_mm(struct mm_struct *prev, + struct mm_struct *next, + struct task_struct *tsk) +{ + /* + * Only need the full barrier when switching between processes. + * Barrier when switching from kernel to userspace is not + * required here, given that it is implied by mmdrop(). Barrier + * when switching from userspace to kernel is not needed after + * store to rq->curr. + */ + if (IS_ENABLED(CONFIG_SMP) && + likely(!(atomic_read(&next->membarrier_state) & + (MEMBARRIER_STATE_PRIVATE_EXPEDITED | + MEMBARRIER_STATE_GLOBAL_EXPEDITED)) || !prev)) + return; + + /* + * The membarrier system call requires a full memory barrier + * after storing to rq->curr, before going back to user-space. + * Matches a full barrier in the proximity of the membarrier + * system call entry. + */ + smp_mb(); +} + +#endif /* _ASM_RISCV_MEMBARRIER_H */ diff --git a/arch/riscv/include/asm/pgtable-64.h b/arch/riscv/include/asm/pgtable-64.h index 7a5097202e157..3272ca7a5270b 100644 --- a/arch/riscv/include/asm/pgtable-64.h +++ b/arch/riscv/include/asm/pgtable-64.h @@ -198,7 +198,7 @@ static inline int pud_user(pud_t pud) static inline void set_pud(pud_t *pudp, pud_t pud) { - *pudp = pud; + WRITE_ONCE(*pudp, pud); } static inline void pud_clear(pud_t *pudp) @@ -274,7 +274,7 @@ static inline unsigned long _pmd_pfn(pmd_t pmd) static inline void set_p4d(p4d_t *p4dp, p4d_t p4d) { if (pgtable_l4_enabled) - *p4dp = p4d; + WRITE_ONCE(*p4dp, p4d); else set_pud((pud_t *)p4dp, (pud_t){ p4d_val(p4d) }); } @@ -336,18 +336,12 @@ static inline struct page *p4d_page(p4d_t p4d) #define pud_index(addr) (((addr) >> PUD_SHIFT) & (PTRS_PER_PUD - 1)) #define pud_offset pud_offset -static inline pud_t *pud_offset(p4d_t *p4d, unsigned long address) -{ - if (pgtable_l4_enabled) - return p4d_pgtable(*p4d) + pud_index(address); - - return (pud_t *)p4d; -} +pud_t *pud_offset(p4d_t *p4d, unsigned long address); static inline void set_pgd(pgd_t *pgdp, pgd_t pgd) { if (pgtable_l5_enabled) - *pgdp = pgd; + WRITE_ONCE(*pgdp, pgd); else set_p4d((p4d_t *)pgdp, (p4d_t){ pgd_val(pgd) }); } @@ -400,12 +394,6 @@ static inline struct page *pgd_page(pgd_t pgd) #define p4d_index(addr) (((addr) >> P4D_SHIFT) & (PTRS_PER_P4D - 1)) #define p4d_offset p4d_offset -static inline p4d_t *p4d_offset(pgd_t *pgd, unsigned long address) -{ - if (pgtable_l5_enabled) - return pgd_pgtable(*pgd) + p4d_index(address); - - return (p4d_t *)pgd; -} +p4d_t *p4d_offset(pgd_t *pgd, unsigned long address); #endif /* _ASM_RISCV_PGTABLE_64_H */ diff --git a/arch/riscv/include/asm/pgtable.h b/arch/riscv/include/asm/pgtable.h index a16fcdf91f39a..8fccba6ae37c1 100644 --- a/arch/riscv/include/asm/pgtable.h +++ b/arch/riscv/include/asm/pgtable.h @@ -248,7 +248,7 @@ static inline int pmd_leaf(pmd_t pmd) static inline void set_pmd(pmd_t *pmdp, pmd_t pmd) { - *pmdp = pmd; + WRITE_ONCE(*pmdp, pmd); } static inline void pmd_clear(pmd_t *pmdp) @@ -515,7 +515,7 @@ static inline int pte_same(pte_t pte_a, pte_t pte_b) */ static inline void set_pte(pte_t *ptep, pte_t pteval) { - *ptep = pteval; + WRITE_ONCE(*ptep, pteval); } void flush_icache_pte(pte_t pte); @@ -551,19 +551,12 @@ static inline void pte_clear(struct mm_struct *mm, __set_pte_at(ptep, __pte(0)); } -#define __HAVE_ARCH_PTEP_SET_ACCESS_FLAGS -static inline int ptep_set_access_flags(struct vm_area_struct *vma, - unsigned long address, pte_t *ptep, - pte_t entry, int dirty) -{ - if (!pte_same(*ptep, entry)) - __set_pte_at(ptep, entry); - /* - * update_mmu_cache will unconditionally execute, handling both - * the case that the PTE changed and the spurious fault case. - */ - return true; -} +#define __HAVE_ARCH_PTEP_SET_ACCESS_FLAGS /* defined in mm/pgtable.c */ +extern int ptep_set_access_flags(struct vm_area_struct *vma, unsigned long address, + pte_t *ptep, pte_t entry, int dirty); +#define __HAVE_ARCH_PTEP_TEST_AND_CLEAR_YOUNG /* defined in mm/pgtable.c */ +extern int ptep_test_and_clear_young(struct vm_area_struct *vma, unsigned long address, + pte_t *ptep); #define __HAVE_ARCH_PTEP_GET_AND_CLEAR static inline pte_t ptep_get_and_clear(struct mm_struct *mm, @@ -576,16 +569,6 @@ static inline pte_t ptep_get_and_clear(struct mm_struct *mm, return pte; } -#define __HAVE_ARCH_PTEP_TEST_AND_CLEAR_YOUNG -static inline int ptep_test_and_clear_young(struct vm_area_struct *vma, - unsigned long address, - pte_t *ptep) -{ - if (!pte_young(*ptep)) - return 0; - return test_and_clear_bit(_PAGE_ACCESSED_OFFSET, &pte_val(*ptep)); -} - #define __HAVE_ARCH_PTEP_SET_WRPROTECT static inline void ptep_set_wrprotect(struct mm_struct *mm, unsigned long address, pte_t *ptep) diff --git a/arch/riscv/include/asm/sbi.h b/arch/riscv/include/asm/sbi.h index b79d0228144f4..3ed853b8a8c85 100644 --- a/arch/riscv/include/asm/sbi.h +++ b/arch/riscv/include/asm/sbi.h @@ -327,6 +327,8 @@ static inline int sbi_remote_fence_i(const struct cpumask *cpu_mask) { return -1 static inline void sbi_init(void) {} #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_marchid(unsigned int cpu_id); unsigned long riscv_cached_mimpid(unsigned int cpu_id); diff --git a/arch/riscv/include/asm/sparsemem.h b/arch/riscv/include/asm/sparsemem.h index 63acaecc33747..2f901a410586d 100644 --- a/arch/riscv/include/asm/sparsemem.h +++ b/arch/riscv/include/asm/sparsemem.h @@ -7,7 +7,7 @@ #ifdef CONFIG_64BIT #define MAX_PHYSMEM_BITS 56 #else -#define MAX_PHYSMEM_BITS 34 +#define MAX_PHYSMEM_BITS 32 #endif /* CONFIG_64BIT */ #define SECTION_SIZE_BITS 27 #endif /* CONFIG_SPARSEMEM */ diff --git a/arch/riscv/include/asm/thread_info.h b/arch/riscv/include/asm/thread_info.h index ad178e657725f..fb10cdf02b97d 100644 --- a/arch/riscv/include/asm/thread_info.h +++ b/arch/riscv/include/asm/thread_info.h @@ -12,7 +12,12 @@ #include /* thread information allocation */ -#define THREAD_SIZE_ORDER CONFIG_THREAD_SIZE_ORDER +#ifdef CONFIG_KASAN +#define KASAN_STACK_ORDER 1 +#else +#define KASAN_STACK_ORDER 0 +#endif +#define THREAD_SIZE_ORDER (CONFIG_THREAD_SIZE_ORDER + KASAN_STACK_ORDER) #define THREAD_SIZE (PAGE_SIZE << THREAD_SIZE_ORDER) /* @@ -28,7 +33,6 @@ #define THREAD_SHIFT (PAGE_SHIFT + THREAD_SIZE_ORDER) #define OVERFLOW_STACK_SIZE SZ_4K -#define SHADOW_OVERFLOW_STACK_SIZE (1024) #define IRQ_STACK_SIZE THREAD_SIZE diff --git a/arch/riscv/kernel/cpu.c b/arch/riscv/kernel/cpu.c index 157ace8b262c2..88732abecd023 100644 --- a/arch/riscv/kernel/cpu.c +++ b/arch/riscv/kernel/cpu.c @@ -139,6 +139,34 @@ int riscv_of_parent_hartid(struct device_node *node, unsigned long *hartid) 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); 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); #if IS_ENABLED(CONFIG_RISCV_SBI) - ci->mvendorid = sbi_spec_is_0_1() ? 0 : sbi_get_mvendorid(); - ci->marchid = sbi_spec_is_0_1() ? 0 : sbi_get_marchid(); + if (!ci->mvendorid) + 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(); #elif IS_ENABLED(CONFIG_RISCV_M_MODE) - ci->mvendorid = csr_read(CSR_MVENDORID); - ci->marchid = csr_read(CSR_MARCHID); + if (!ci->mvendorid) + ci->mvendorid = csr_read(CSR_MVENDORID); + if (!ci->marchid) + ci->marchid = csr_read(CSR_MARCHID); ci->mimpid = csr_read(CSR_MIMPID); #else ci->mvendorid = 0; diff --git a/arch/riscv/kernel/cpufeature.c b/arch/riscv/kernel/cpufeature.c index f2e319716fdcf..42d85c2044d0e 100644 --- a/arch/riscv/kernel/cpufeature.c +++ b/arch/riscv/kernel/cpufeature.c @@ -482,6 +482,8 @@ static void __init riscv_fill_hwcap_from_isa_string(unsigned long *isa2hwcap) struct acpi_table_header *rhct; acpi_status status; unsigned int cpu; + u64 boot_vendorid; + u64 boot_archid; if (!acpi_disabled) { 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; } + boot_vendorid = riscv_get_mvendorid(); + boot_archid = riscv_get_marchid(); + for_each_possible_cpu(cpu) { struct riscv_isainfo *isainfo = &hart_isa[cpu]; 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 * marchid. */ - if (acpi_disabled && riscv_cached_mvendorid(cpu) == THEAD_VENDOR_ID && - riscv_cached_marchid(cpu) == 0x0) { + if (acpi_disabled && boot_vendorid == THEAD_VENDOR_ID && boot_archid == 0x0) { this_hwcap &= ~isa2hwcap[RISCV_ISA_EXT_v]; clear_bit(RISCV_ISA_EXT_v, isainfo->isa); } @@ -591,7 +595,7 @@ static int __init riscv_fill_hwcap_from_ext_list(unsigned long *isa2hwcap) if (ext->subset_ext_size) { for (int j = 0; j < ext->subset_ext_size; j++) { - if (riscv_isa_extension_check(ext->subset_ext_ids[i])) + if (riscv_isa_extension_check(ext->subset_ext_ids[j])) set_bit(ext->subset_ext_ids[j], isainfo->isa); } } diff --git a/arch/riscv/kernel/efi.c b/arch/riscv/kernel/efi.c index aa6209a74c83f..b64bf1624a052 100644 --- a/arch/riscv/kernel/efi.c +++ b/arch/riscv/kernel/efi.c @@ -60,7 +60,7 @@ int __init efi_create_mapping(struct mm_struct *mm, efi_memory_desc_t *md) static int __init set_permissions(pte_t *ptep, unsigned long addr, void *data) { efi_memory_desc_t *md = data; - pte_t pte = READ_ONCE(*ptep); + pte_t pte = ptep_get(ptep); unsigned long val; if (md->attribute & EFI_MEMORY_RO) { diff --git a/arch/riscv/kernel/elf_kexec.c b/arch/riscv/kernel/elf_kexec.c index e60fbd8660c4a..8c32bf1eedda0 100644 --- a/arch/riscv/kernel/elf_kexec.c +++ b/arch/riscv/kernel/elf_kexec.c @@ -444,6 +444,12 @@ int arch_kexec_apply_relocations_add(struct purgatory_info *pi, *(u32 *)loc = CLEAN_IMM(CJTYPE, *(u32 *)loc) | ENCODE_CJTYPE_IMM(val - addr); break; + case R_RISCV_ADD16: + *(u16 *)loc += val; + break; + case R_RISCV_SUB16: + *(u16 *)loc -= val; + break; case R_RISCV_ADD32: *(u32 *)loc += val; break; diff --git a/arch/riscv/kernel/entry.S b/arch/riscv/kernel/entry.S index a388c289b8a07..19f97a6a2e598 100644 --- a/arch/riscv/kernel/entry.S +++ b/arch/riscv/kernel/entry.S @@ -228,8 +228,8 @@ SYM_CODE_START(ret_from_fork) jalr s0 1: move a0, sp /* pt_regs */ - la ra, ret_from_exception - tail syscall_exit_to_user_mode + call syscall_exit_to_user_mode + j ret_from_exception SYM_CODE_END(ret_from_fork) /* diff --git a/arch/riscv/kernel/head.S b/arch/riscv/kernel/head.S index 0097c145385f6..9691fa8f2faa7 100644 --- a/arch/riscv/kernel/head.S +++ b/arch/riscv/kernel/head.S @@ -305,6 +305,9 @@ clear_bss_done: #else mv a0, a1 #endif /* CONFIG_BUILTIN_DTB */ + /* Set trap vector to spin forever to help debug */ + la a3, .Lsecondary_park + csrw CSR_TVEC, a3 call setup_vm #ifdef CONFIG_MMU la a0, early_pg_dir diff --git a/arch/riscv/kernel/perf_callchain.c b/arch/riscv/kernel/perf_callchain.c index 3348a61de7d99..2932791e93882 100644 --- a/arch/riscv/kernel/perf_callchain.c +++ b/arch/riscv/kernel/perf_callchain.c @@ -62,7 +62,7 @@ void perf_callchain_user(struct perf_callchain_entry_ctx *entry, perf_callchain_store(entry, regs->epc); fp = user_backtrace(entry, fp, regs->ra); - while (fp && !(fp & 0x3) && entry->nr < entry->max_stack) + while (fp && !(fp & 0x7) && entry->nr < entry->max_stack) fp = user_backtrace(entry, fp, 0); } diff --git a/arch/riscv/kernel/probes/kprobes.c b/arch/riscv/kernel/probes/kprobes.c index 2f08c14a933d0..fecbbcf40ac3f 100644 --- a/arch/riscv/kernel/probes/kprobes.c +++ b/arch/riscv/kernel/probes/kprobes.c @@ -28,9 +28,8 @@ static void __kprobes arch_prepare_ss_slot(struct kprobe *p) p->ainsn.api.restore = (unsigned long)p->addr + offset; - patch_text(p->ainsn.api.insn, &p->opcode, 1); - patch_text((void *)((unsigned long)(p->ainsn.api.insn) + offset), - &insn, 1); + patch_text_nosync(p->ainsn.api.insn, &p->opcode, 1); + patch_text_nosync(p->ainsn.api.insn + offset, &insn, 1); } static void __kprobes arch_prepare_simulate(struct kprobe *p) diff --git a/arch/riscv/kvm/mmu.c b/arch/riscv/kvm/mmu.c index 068c745938710..a9e2fd7245e1e 100644 --- a/arch/riscv/kvm/mmu.c +++ b/arch/riscv/kvm/mmu.c @@ -103,7 +103,7 @@ static bool gstage_get_leaf_entry(struct kvm *kvm, gpa_t addr, *ptep_level = current_level; ptep = (pte_t *)kvm->arch.pgd; ptep = &ptep[gstage_pte_index(addr, current_level)]; - while (ptep && pte_val(*ptep)) { + while (ptep && pte_val(ptep_get(ptep))) { if (gstage_pte_leaf(ptep)) { *ptep_level = current_level; *ptepp = ptep; @@ -113,7 +113,7 @@ static bool gstage_get_leaf_entry(struct kvm *kvm, gpa_t addr, if (current_level) { current_level--; *ptep_level = current_level; - ptep = (pte_t *)gstage_pte_page_vaddr(*ptep); + ptep = (pte_t *)gstage_pte_page_vaddr(ptep_get(ptep)); ptep = &ptep[gstage_pte_index(addr, current_level)]; } else { ptep = NULL; @@ -149,25 +149,25 @@ static int gstage_set_pte(struct kvm *kvm, u32 level, if (gstage_pte_leaf(ptep)) return -EEXIST; - if (!pte_val(*ptep)) { + if (!pte_val(ptep_get(ptep))) { if (!pcache) return -ENOMEM; next_ptep = kvm_mmu_memory_cache_alloc(pcache); if (!next_ptep) return -ENOMEM; - *ptep = pfn_pte(PFN_DOWN(__pa(next_ptep)), - __pgprot(_PAGE_TABLE)); + set_pte(ptep, pfn_pte(PFN_DOWN(__pa(next_ptep)), + __pgprot(_PAGE_TABLE))); } else { if (gstage_pte_leaf(ptep)) return -EEXIST; - next_ptep = (pte_t *)gstage_pte_page_vaddr(*ptep); + next_ptep = (pte_t *)gstage_pte_page_vaddr(ptep_get(ptep)); } current_level--; ptep = &next_ptep[gstage_pte_index(addr, current_level)]; } - *ptep = *new_pte; + set_pte(ptep, *new_pte); if (gstage_pte_leaf(ptep)) gstage_remote_tlb_flush(kvm, current_level, addr); @@ -239,11 +239,11 @@ static void gstage_op_pte(struct kvm *kvm, gpa_t addr, BUG_ON(addr & (page_size - 1)); - if (!pte_val(*ptep)) + if (!pte_val(ptep_get(ptep))) return; if (ptep_level && !gstage_pte_leaf(ptep)) { - next_ptep = (pte_t *)gstage_pte_page_vaddr(*ptep); + next_ptep = (pte_t *)gstage_pte_page_vaddr(ptep_get(ptep)); next_ptep_level = ptep_level - 1; ret = gstage_level_to_page_size(next_ptep_level, &next_page_size); @@ -261,7 +261,7 @@ static void gstage_op_pte(struct kvm *kvm, gpa_t addr, if (op == GSTAGE_OP_CLEAR) set_pte(ptep, __pte(0)); else if (op == GSTAGE_OP_WP) - set_pte(ptep, __pte(pte_val(*ptep) & ~_PAGE_WRITE)); + set_pte(ptep, __pte(pte_val(ptep_get(ptep)) & ~_PAGE_WRITE)); gstage_remote_tlb_flush(kvm, ptep_level, addr); } } @@ -603,7 +603,7 @@ bool kvm_test_age_gfn(struct kvm *kvm, struct kvm_gfn_range *range) &ptep, &ptep_level)) return false; - return pte_young(*ptep); + return pte_young(ptep_get(ptep)); } int kvm_riscv_gstage_map(struct kvm_vcpu *vcpu, diff --git a/arch/riscv/kvm/vcpu_sbi.c b/arch/riscv/kvm/vcpu_sbi.c index 9cd97091c7233..7a7fe40d0930b 100644 --- a/arch/riscv/kvm/vcpu_sbi.c +++ b/arch/riscv/kvm/vcpu_sbi.c @@ -91,8 +91,8 @@ void kvm_riscv_vcpu_sbi_forward(struct kvm_vcpu *vcpu, struct kvm_run *run) run->riscv_sbi.args[3] = cp->a3; run->riscv_sbi.args[4] = cp->a4; run->riscv_sbi.args[5] = cp->a5; - run->riscv_sbi.ret[0] = cp->a0; - run->riscv_sbi.ret[1] = cp->a1; + run->riscv_sbi.ret[0] = SBI_ERR_NOT_SUPPORTED; + run->riscv_sbi.ret[1] = 0; } void kvm_riscv_vcpu_sbi_system_reset(struct kvm_vcpu *vcpu, diff --git a/arch/riscv/mm/Makefile b/arch/riscv/mm/Makefile index 3a4dfc8babcf8..2c869f8026a88 100644 --- a/arch/riscv/mm/Makefile +++ b/arch/riscv/mm/Makefile @@ -13,10 +13,9 @@ endif KCOV_INSTRUMENT_init.o := n obj-y += init.o -obj-$(CONFIG_MMU) += extable.o fault.o pageattr.o +obj-$(CONFIG_MMU) += extable.o fault.o pageattr.o pgtable.o obj-y += cacheflush.o obj-y += context.o -obj-y += pgtable.o obj-y += pmem.o ifeq ($(CONFIG_MMU),y) diff --git a/arch/riscv/mm/context.c b/arch/riscv/mm/context.c index 217fd4de61342..ba8eb3944687c 100644 --- a/arch/riscv/mm/context.c +++ b/arch/riscv/mm/context.c @@ -323,6 +323,8 @@ void switch_mm(struct mm_struct *prev, struct mm_struct *next, if (unlikely(prev == next)) return; + membarrier_arch_switch_mm(prev, next, task); + /* * Mark the current MM context as inactive, and the next as * active. This is at least used by the icache flushing diff --git a/arch/riscv/mm/fault.c b/arch/riscv/mm/fault.c index c91a8f84a3c20..6f1c7c8bdb839 100644 --- a/arch/riscv/mm/fault.c +++ b/arch/riscv/mm/fault.c @@ -137,24 +137,24 @@ static inline void vmalloc_fault(struct pt_regs *regs, int code, unsigned long a pgd = (pgd_t *)pfn_to_virt(pfn) + index; pgd_k = init_mm.pgd + index; - if (!pgd_present(*pgd_k)) { + if (!pgd_present(pgdp_get(pgd_k))) { no_context(regs, addr); return; } - set_pgd(pgd, *pgd_k); + set_pgd(pgd, pgdp_get(pgd_k)); p4d_k = p4d_offset(pgd_k, addr); - if (!p4d_present(*p4d_k)) { + if (!p4d_present(p4dp_get(p4d_k))) { no_context(regs, addr); return; } pud_k = pud_offset(p4d_k, addr); - if (!pud_present(*pud_k)) { + if (!pud_present(pudp_get(pud_k))) { no_context(regs, addr); return; } - if (pud_leaf(*pud_k)) + if (pud_leaf(pudp_get(pud_k))) goto flush_tlb; /* @@ -162,11 +162,11 @@ static inline void vmalloc_fault(struct pt_regs *regs, int code, unsigned long a * to copy individual PTEs */ pmd_k = pmd_offset(pud_k, addr); - if (!pmd_present(*pmd_k)) { + if (!pmd_present(pmdp_get(pmd_k))) { no_context(regs, addr); return; } - if (pmd_leaf(*pmd_k)) + if (pmd_leaf(pmdp_get(pmd_k))) goto flush_tlb; /* @@ -176,7 +176,7 @@ static inline void vmalloc_fault(struct pt_regs *regs, int code, unsigned long a * silently loop forever. */ pte_k = pte_offset_kernel(pmd_k, addr); - if (!pte_present(*pte_k)) { + if (!pte_present(ptep_get(pte_k))) { no_context(regs, addr); return; } diff --git a/arch/riscv/mm/hugetlbpage.c b/arch/riscv/mm/hugetlbpage.c index fbe918801667d..5ef2a6891158a 100644 --- a/arch/riscv/mm/hugetlbpage.c +++ b/arch/riscv/mm/hugetlbpage.c @@ -54,7 +54,7 @@ pte_t *huge_pte_alloc(struct mm_struct *mm, } if (sz == PMD_SIZE) { - if (want_pmd_share(vma, addr) && pud_none(*pud)) + if (want_pmd_share(vma, addr) && pud_none(pudp_get(pud))) pte = huge_pmd_share(mm, vma, addr, pud); else pte = (pte_t *)pmd_alloc(mm, pud, addr); @@ -93,11 +93,11 @@ pte_t *huge_pte_offset(struct mm_struct *mm, pmd_t *pmd; pgd = pgd_offset(mm, addr); - if (!pgd_present(*pgd)) + if (!pgd_present(pgdp_get(pgd))) return NULL; p4d = p4d_offset(pgd, addr); - if (!p4d_present(*p4d)) + if (!p4d_present(p4dp_get(p4d))) return NULL; pud = pud_offset(p4d, addr); @@ -105,7 +105,7 @@ pte_t *huge_pte_offset(struct mm_struct *mm, /* must be pud huge, non-present or none */ return (pte_t *)pud; - if (!pud_present(*pud)) + if (!pud_present(pudp_get(pud))) return NULL; pmd = pmd_offset(pud, addr); @@ -113,7 +113,7 @@ pte_t *huge_pte_offset(struct mm_struct *mm, /* must be pmd huge, non-present or none */ return (pte_t *)pmd; - if (!pmd_present(*pmd)) + if (!pmd_present(pmdp_get(pmd))) return NULL; for_each_napot_order(order) { @@ -351,7 +351,7 @@ void huge_pte_clear(struct mm_struct *mm, pte_t *ptep, unsigned long sz) { - pte_t pte = READ_ONCE(*ptep); + pte_t pte = ptep_get(ptep); int i, pte_num; if (!pte_napot(pte)) { diff --git a/arch/riscv/mm/init.c b/arch/riscv/mm/init.c index abe7a7a7686c1..3245bb525212e 100644 --- a/arch/riscv/mm/init.c +++ b/arch/riscv/mm/init.c @@ -235,7 +235,7 @@ static void __init setup_bootmem(void) * The size of the linear page mapping may restrict the amount of * usable RAM. */ - if (IS_ENABLED(CONFIG_64BIT)) { + if (IS_ENABLED(CONFIG_64BIT) && IS_ENABLED(CONFIG_MMU)) { max_mapped_addr = __pa(PAGE_OFFSET) + KERN_VIRT_SIZE; memblock_cap_memory_range(phys_ram_base, max_mapped_addr - phys_ram_base); diff --git a/arch/riscv/mm/kasan_init.c b/arch/riscv/mm/kasan_init.c index 5e39dcf23fdbc..e962518530373 100644 --- a/arch/riscv/mm/kasan_init.c +++ b/arch/riscv/mm/kasan_init.c @@ -31,7 +31,7 @@ static void __init kasan_populate_pte(pmd_t *pmd, unsigned long vaddr, unsigned phys_addr_t phys_addr; pte_t *ptep, *p; - if (pmd_none(*pmd)) { + if (pmd_none(pmdp_get(pmd))) { p = memblock_alloc(PTRS_PER_PTE * sizeof(pte_t), PAGE_SIZE); set_pmd(pmd, pfn_pmd(PFN_DOWN(__pa(p)), PAGE_TABLE)); } @@ -39,7 +39,7 @@ static void __init kasan_populate_pte(pmd_t *pmd, unsigned long vaddr, unsigned ptep = pte_offset_kernel(pmd, vaddr); do { - if (pte_none(*ptep)) { + if (pte_none(ptep_get(ptep))) { phys_addr = memblock_phys_alloc(PAGE_SIZE, PAGE_SIZE); set_pte(ptep, pfn_pte(PFN_DOWN(phys_addr), PAGE_KERNEL)); memset(__va(phys_addr), KASAN_SHADOW_INIT, PAGE_SIZE); @@ -53,7 +53,7 @@ static void __init kasan_populate_pmd(pud_t *pud, unsigned long vaddr, unsigned pmd_t *pmdp, *p; unsigned long next; - if (pud_none(*pud)) { + if (pud_none(pudp_get(pud))) { p = memblock_alloc(PTRS_PER_PMD * sizeof(pmd_t), PAGE_SIZE); set_pud(pud, pfn_pud(PFN_DOWN(__pa(p)), PAGE_TABLE)); } @@ -63,7 +63,8 @@ static void __init kasan_populate_pmd(pud_t *pud, unsigned long vaddr, unsigned do { next = pmd_addr_end(vaddr, end); - if (pmd_none(*pmdp) && IS_ALIGNED(vaddr, PMD_SIZE) && (next - vaddr) >= PMD_SIZE) { + if (pmd_none(pmdp_get(pmdp)) && IS_ALIGNED(vaddr, PMD_SIZE) && + (next - vaddr) >= PMD_SIZE) { phys_addr = memblock_phys_alloc(PMD_SIZE, PMD_SIZE); if (phys_addr) { set_pmd(pmdp, pfn_pmd(PFN_DOWN(phys_addr), PAGE_KERNEL)); @@ -83,7 +84,7 @@ static void __init kasan_populate_pud(p4d_t *p4d, pud_t *pudp, *p; unsigned long next; - if (p4d_none(*p4d)) { + if (p4d_none(p4dp_get(p4d))) { p = memblock_alloc(PTRS_PER_PUD * sizeof(pud_t), PAGE_SIZE); set_p4d(p4d, pfn_p4d(PFN_DOWN(__pa(p)), PAGE_TABLE)); } @@ -93,7 +94,8 @@ static void __init kasan_populate_pud(p4d_t *p4d, do { next = pud_addr_end(vaddr, end); - if (pud_none(*pudp) && IS_ALIGNED(vaddr, PUD_SIZE) && (next - vaddr) >= PUD_SIZE) { + if (pud_none(pudp_get(pudp)) && IS_ALIGNED(vaddr, PUD_SIZE) && + (next - vaddr) >= PUD_SIZE) { phys_addr = memblock_phys_alloc(PUD_SIZE, PUD_SIZE); if (phys_addr) { set_pud(pudp, pfn_pud(PFN_DOWN(phys_addr), PAGE_KERNEL)); @@ -113,7 +115,7 @@ static void __init kasan_populate_p4d(pgd_t *pgd, p4d_t *p4dp, *p; unsigned long next; - if (pgd_none(*pgd)) { + if (pgd_none(pgdp_get(pgd))) { p = memblock_alloc(PTRS_PER_P4D * sizeof(p4d_t), PAGE_SIZE); set_pgd(pgd, pfn_pgd(PFN_DOWN(__pa(p)), PAGE_TABLE)); } @@ -123,7 +125,8 @@ static void __init kasan_populate_p4d(pgd_t *pgd, do { next = p4d_addr_end(vaddr, end); - if (p4d_none(*p4dp) && IS_ALIGNED(vaddr, P4D_SIZE) && (next - vaddr) >= P4D_SIZE) { + if (p4d_none(p4dp_get(p4dp)) && IS_ALIGNED(vaddr, P4D_SIZE) && + (next - vaddr) >= P4D_SIZE) { phys_addr = memblock_phys_alloc(P4D_SIZE, P4D_SIZE); if (phys_addr) { set_p4d(p4dp, pfn_p4d(PFN_DOWN(phys_addr), PAGE_KERNEL)); @@ -145,7 +148,7 @@ static void __init kasan_populate_pgd(pgd_t *pgdp, do { next = pgd_addr_end(vaddr, end); - if (pgd_none(*pgdp) && IS_ALIGNED(vaddr, PGDIR_SIZE) && + if (pgd_none(pgdp_get(pgdp)) && IS_ALIGNED(vaddr, PGDIR_SIZE) && (next - vaddr) >= PGDIR_SIZE) { phys_addr = memblock_phys_alloc(PGDIR_SIZE, PGDIR_SIZE); if (phys_addr) { @@ -168,7 +171,7 @@ static void __init kasan_early_clear_pud(p4d_t *p4dp, if (!pgtable_l4_enabled) { pudp = (pud_t *)p4dp; } else { - base_pud = pt_ops.get_pud_virt(pfn_to_phys(_p4d_pfn(*p4dp))); + base_pud = pt_ops.get_pud_virt(pfn_to_phys(_p4d_pfn(p4dp_get(p4dp)))); pudp = base_pud + pud_index(vaddr); } @@ -193,7 +196,7 @@ static void __init kasan_early_clear_p4d(pgd_t *pgdp, if (!pgtable_l5_enabled) { p4dp = (p4d_t *)pgdp; } else { - base_p4d = pt_ops.get_p4d_virt(pfn_to_phys(_pgd_pfn(*pgdp))); + base_p4d = pt_ops.get_p4d_virt(pfn_to_phys(_pgd_pfn(pgdp_get(pgdp)))); p4dp = base_p4d + p4d_index(vaddr); } @@ -239,14 +242,14 @@ static void __init kasan_early_populate_pud(p4d_t *p4dp, if (!pgtable_l4_enabled) { pudp = (pud_t *)p4dp; } else { - base_pud = pt_ops.get_pud_virt(pfn_to_phys(_p4d_pfn(*p4dp))); + base_pud = pt_ops.get_pud_virt(pfn_to_phys(_p4d_pfn(p4dp_get(p4dp)))); pudp = base_pud + pud_index(vaddr); } do { next = pud_addr_end(vaddr, end); - if (pud_none(*pudp) && IS_ALIGNED(vaddr, PUD_SIZE) && + if (pud_none(pudp_get(pudp)) && IS_ALIGNED(vaddr, PUD_SIZE) && (next - vaddr) >= PUD_SIZE) { phys_addr = __pa((uintptr_t)kasan_early_shadow_pmd); set_pud(pudp, pfn_pud(PFN_DOWN(phys_addr), PAGE_TABLE)); @@ -277,14 +280,14 @@ static void __init kasan_early_populate_p4d(pgd_t *pgdp, if (!pgtable_l5_enabled) { p4dp = (p4d_t *)pgdp; } else { - base_p4d = pt_ops.get_p4d_virt(pfn_to_phys(_pgd_pfn(*pgdp))); + base_p4d = pt_ops.get_p4d_virt(pfn_to_phys(_pgd_pfn(pgdp_get(pgdp)))); p4dp = base_p4d + p4d_index(vaddr); } do { next = p4d_addr_end(vaddr, end); - if (p4d_none(*p4dp) && IS_ALIGNED(vaddr, P4D_SIZE) && + if (p4d_none(p4dp_get(p4dp)) && IS_ALIGNED(vaddr, P4D_SIZE) && (next - vaddr) >= P4D_SIZE) { phys_addr = __pa((uintptr_t)kasan_early_shadow_pud); set_p4d(p4dp, pfn_p4d(PFN_DOWN(phys_addr), PAGE_TABLE)); @@ -305,7 +308,7 @@ static void __init kasan_early_populate_pgd(pgd_t *pgdp, do { next = pgd_addr_end(vaddr, end); - if (pgd_none(*pgdp) && IS_ALIGNED(vaddr, PGDIR_SIZE) && + if (pgd_none(pgdp_get(pgdp)) && IS_ALIGNED(vaddr, PGDIR_SIZE) && (next - vaddr) >= PGDIR_SIZE) { phys_addr = __pa((uintptr_t)kasan_early_shadow_p4d); set_pgd(pgdp, pfn_pgd(PFN_DOWN(phys_addr), PAGE_TABLE)); @@ -381,7 +384,7 @@ static void __init kasan_shallow_populate_pud(p4d_t *p4d, do { next = pud_addr_end(vaddr, end); - if (pud_none(*pud_k)) { + if (pud_none(pudp_get(pud_k))) { p = memblock_alloc(PAGE_SIZE, PAGE_SIZE); set_pud(pud_k, pfn_pud(PFN_DOWN(__pa(p)), PAGE_TABLE)); continue; @@ -401,7 +404,7 @@ static void __init kasan_shallow_populate_p4d(pgd_t *pgd, do { next = p4d_addr_end(vaddr, end); - if (p4d_none(*p4d_k)) { + if (p4d_none(p4dp_get(p4d_k))) { p = memblock_alloc(PAGE_SIZE, PAGE_SIZE); set_p4d(p4d_k, pfn_p4d(PFN_DOWN(__pa(p)), PAGE_TABLE)); continue; @@ -420,7 +423,7 @@ static void __init kasan_shallow_populate_pgd(unsigned long vaddr, unsigned long do { next = pgd_addr_end(vaddr, end); - if (pgd_none(*pgd_k)) { + if (pgd_none(pgdp_get(pgd_k))) { p = memblock_alloc(PAGE_SIZE, PAGE_SIZE); set_pgd(pgd_k, pfn_pgd(PFN_DOWN(__pa(p)), PAGE_TABLE)); continue; @@ -451,7 +454,7 @@ static void __init create_tmp_mapping(void) /* Copy the last p4d since it is shared with the kernel mapping. */ if (pgtable_l5_enabled) { - ptr = (p4d_t *)pgd_page_vaddr(*pgd_offset_k(KASAN_SHADOW_END)); + ptr = (p4d_t *)pgd_page_vaddr(pgdp_get(pgd_offset_k(KASAN_SHADOW_END))); memcpy(tmp_p4d, ptr, sizeof(p4d_t) * PTRS_PER_P4D); set_pgd(&tmp_pg_dir[pgd_index(KASAN_SHADOW_END)], pfn_pgd(PFN_DOWN(__pa(tmp_p4d)), PAGE_TABLE)); @@ -462,7 +465,7 @@ static void __init create_tmp_mapping(void) /* Copy the last pud since it is shared with the kernel mapping. */ if (pgtable_l4_enabled) { - ptr = (pud_t *)p4d_page_vaddr(*(base_p4d + p4d_index(KASAN_SHADOW_END))); + ptr = (pud_t *)p4d_page_vaddr(p4dp_get(base_p4d + p4d_index(KASAN_SHADOW_END))); memcpy(tmp_pud, ptr, sizeof(pud_t) * PTRS_PER_PUD); set_p4d(&base_p4d[p4d_index(KASAN_SHADOW_END)], pfn_p4d(PFN_DOWN(__pa(tmp_pud)), PAGE_TABLE)); diff --git a/arch/riscv/mm/pageattr.c b/arch/riscv/mm/pageattr.c index f61b2f8291e35..271d01a5ba4da 100644 --- a/arch/riscv/mm/pageattr.c +++ b/arch/riscv/mm/pageattr.c @@ -29,7 +29,7 @@ static unsigned long set_pageattr_masks(unsigned long val, struct mm_walk *walk) static int pageattr_p4d_entry(p4d_t *p4d, unsigned long addr, unsigned long next, struct mm_walk *walk) { - p4d_t val = READ_ONCE(*p4d); + p4d_t val = p4dp_get(p4d); if (p4d_leaf(val)) { val = __p4d(set_pageattr_masks(p4d_val(val), walk)); @@ -42,7 +42,7 @@ static int pageattr_p4d_entry(p4d_t *p4d, unsigned long addr, static int pageattr_pud_entry(pud_t *pud, unsigned long addr, unsigned long next, struct mm_walk *walk) { - pud_t val = READ_ONCE(*pud); + pud_t val = pudp_get(pud); if (pud_leaf(val)) { val = __pud(set_pageattr_masks(pud_val(val), walk)); @@ -55,7 +55,7 @@ static int pageattr_pud_entry(pud_t *pud, unsigned long addr, static int pageattr_pmd_entry(pmd_t *pmd, unsigned long addr, unsigned long next, struct mm_walk *walk) { - pmd_t val = READ_ONCE(*pmd); + pmd_t val = pmdp_get(pmd); if (pmd_leaf(val)) { val = __pmd(set_pageattr_masks(pmd_val(val), walk)); @@ -68,7 +68,7 @@ static int pageattr_pmd_entry(pmd_t *pmd, unsigned long addr, static int pageattr_pte_entry(pte_t *pte, unsigned long addr, unsigned long next, struct mm_walk *walk) { - pte_t val = READ_ONCE(*pte); + pte_t val = ptep_get(pte); val = __pte(set_pageattr_masks(pte_val(val), walk)); set_pte(pte, val); @@ -108,10 +108,10 @@ static int __split_linear_mapping_pmd(pud_t *pudp, vaddr <= (vaddr & PMD_MASK) && end >= next) continue; - if (pmd_leaf(*pmdp)) { + if (pmd_leaf(pmdp_get(pmdp))) { struct page *pte_page; - unsigned long pfn = _pmd_pfn(*pmdp); - pgprot_t prot = __pgprot(pmd_val(*pmdp) & ~_PAGE_PFN_MASK); + unsigned long pfn = _pmd_pfn(pmdp_get(pmdp)); + pgprot_t prot = __pgprot(pmd_val(pmdp_get(pmdp)) & ~_PAGE_PFN_MASK); pte_t *ptep_new; int i; @@ -148,10 +148,10 @@ static int __split_linear_mapping_pud(p4d_t *p4dp, vaddr <= (vaddr & PUD_MASK) && end >= next) continue; - if (pud_leaf(*pudp)) { + if (pud_leaf(pudp_get(pudp))) { struct page *pmd_page; - unsigned long pfn = _pud_pfn(*pudp); - pgprot_t prot = __pgprot(pud_val(*pudp) & ~_PAGE_PFN_MASK); + unsigned long pfn = _pud_pfn(pudp_get(pudp)); + pgprot_t prot = __pgprot(pud_val(pudp_get(pudp)) & ~_PAGE_PFN_MASK); pmd_t *pmdp_new; int i; @@ -197,10 +197,10 @@ static int __split_linear_mapping_p4d(pgd_t *pgdp, vaddr <= (vaddr & P4D_MASK) && end >= next) continue; - if (p4d_leaf(*p4dp)) { + if (p4d_leaf(p4dp_get(p4dp))) { struct page *pud_page; - unsigned long pfn = _p4d_pfn(*p4dp); - pgprot_t prot = __pgprot(p4d_val(*p4dp) & ~_PAGE_PFN_MASK); + unsigned long pfn = _p4d_pfn(p4dp_get(p4dp)); + pgprot_t prot = __pgprot(p4d_val(p4dp_get(p4dp)) & ~_PAGE_PFN_MASK); pud_t *pudp_new; int i; @@ -427,29 +427,29 @@ bool kernel_page_present(struct page *page) pte_t *pte; pgd = pgd_offset_k(addr); - if (!pgd_present(*pgd)) + if (!pgd_present(pgdp_get(pgd))) return false; - if (pgd_leaf(*pgd)) + if (pgd_leaf(pgdp_get(pgd))) return true; p4d = p4d_offset(pgd, addr); - if (!p4d_present(*p4d)) + if (!p4d_present(p4dp_get(p4d))) return false; - if (p4d_leaf(*p4d)) + if (p4d_leaf(p4dp_get(p4d))) return true; pud = pud_offset(p4d, addr); - if (!pud_present(*pud)) + if (!pud_present(pudp_get(pud))) return false; - if (pud_leaf(*pud)) + if (pud_leaf(pudp_get(pud))) return true; pmd = pmd_offset(pud, addr); - if (!pmd_present(*pmd)) + if (!pmd_present(pmdp_get(pmd))) return false; - if (pmd_leaf(*pmd)) + if (pmd_leaf(pmdp_get(pmd))) return true; pte = pte_offset_kernel(pmd, addr); - return pte_present(*pte); + return pte_present(ptep_get(pte)); } diff --git a/arch/riscv/mm/pgtable.c b/arch/riscv/mm/pgtable.c index fef4e7328e490..ef887efcb6790 100644 --- a/arch/riscv/mm/pgtable.c +++ b/arch/riscv/mm/pgtable.c @@ -5,6 +5,47 @@ #include #include +int ptep_set_access_flags(struct vm_area_struct *vma, + unsigned long address, pte_t *ptep, + pte_t entry, int dirty) +{ + if (!pte_same(ptep_get(ptep), entry)) + __set_pte_at(ptep, entry); + /* + * update_mmu_cache will unconditionally execute, handling both + * the case that the PTE changed and the spurious fault case. + */ + return true; +} + +int ptep_test_and_clear_young(struct vm_area_struct *vma, + unsigned long address, + pte_t *ptep) +{ + if (!pte_young(ptep_get(ptep))) + return 0; + return test_and_clear_bit(_PAGE_ACCESSED_OFFSET, &pte_val(*ptep)); +} +EXPORT_SYMBOL_GPL(ptep_test_and_clear_young); + +#ifdef CONFIG_64BIT +pud_t *pud_offset(p4d_t *p4d, unsigned long address) +{ + if (pgtable_l4_enabled) + return p4d_pgtable(p4dp_get(p4d)) + pud_index(address); + + return (pud_t *)p4d; +} + +p4d_t *p4d_offset(pgd_t *pgd, unsigned long address) +{ + if (pgtable_l5_enabled) + return pgd_pgtable(pgdp_get(pgd)) + p4d_index(address); + + return (p4d_t *)pgd; +} +#endif + #ifdef CONFIG_HAVE_ARCH_HUGE_VMAP int p4d_set_huge(p4d_t *p4d, phys_addr_t addr, pgprot_t prot) { @@ -25,7 +66,7 @@ int pud_set_huge(pud_t *pud, phys_addr_t phys, pgprot_t prot) int pud_clear_huge(pud_t *pud) { - if (!pud_leaf(READ_ONCE(*pud))) + if (!pud_leaf(pudp_get(pud))) return 0; pud_clear(pud); return 1; @@ -33,7 +74,7 @@ int pud_clear_huge(pud_t *pud) int pud_free_pmd_page(pud_t *pud, unsigned long addr) { - pmd_t *pmd = pud_pgtable(*pud); + pmd_t *pmd = pud_pgtable(pudp_get(pud)); int i; pud_clear(pud); @@ -63,7 +104,7 @@ int pmd_set_huge(pmd_t *pmd, phys_addr_t phys, pgprot_t prot) int pmd_clear_huge(pmd_t *pmd) { - if (!pmd_leaf(READ_ONCE(*pmd))) + if (!pmd_leaf(pmdp_get(pmd))) return 0; pmd_clear(pmd); return 1; @@ -71,7 +112,7 @@ int pmd_clear_huge(pmd_t *pmd) int pmd_free_pte_page(pmd_t *pmd, unsigned long addr) { - pte_t *pte = (pte_t *)pmd_page_vaddr(*pmd); + pte_t *pte = (pte_t *)pmd_page_vaddr(pmdp_get(pmd)); pmd_clear(pmd); @@ -88,7 +129,7 @@ pmd_t pmdp_collapse_flush(struct vm_area_struct *vma, pmd_t pmd = pmdp_huge_get_and_clear(vma->vm_mm, address, pmdp); VM_BUG_ON(address & ~HPAGE_PMD_MASK); - VM_BUG_ON(pmd_trans_huge(*pmdp)); + VM_BUG_ON(pmd_trans_huge(pmdp_get(pmdp))); /* * When leaf PTE entries (regular pages) are collapsed into a leaf * PMD entry (huge page), a valid non-leaf PTE is converted into a diff --git a/arch/riscv/purgatory/entry.S b/arch/riscv/purgatory/entry.S index 0194f4554130a..a4ede42bc1510 100644 --- a/arch/riscv/purgatory/entry.S +++ b/arch/riscv/purgatory/entry.S @@ -11,6 +11,8 @@ .macro size, sym:req .size \sym, . - \sym .endm +#include +#include .text @@ -39,6 +41,7 @@ size purgatory_start .data +.align LGREG .globl riscv_kernel_entry riscv_kernel_entry: .quad 0 diff --git a/arch/s390/include/asm/facility.h b/arch/s390/include/asm/facility.h index 94b6919026dfb..953d42205ea83 100644 --- a/arch/s390/include/asm/facility.h +++ b/arch/s390/include/asm/facility.h @@ -60,8 +60,10 @@ static inline int test_facility(unsigned long nr) unsigned long facilities_als[] = { FACILITIES_ALS }; if (__builtin_constant_p(nr) && nr < sizeof(facilities_als) * 8) { - if (__test_facility(nr, &facilities_als)) - return 1; + if (__test_facility(nr, &facilities_als)) { + if (!__is_defined(__DECOMPRESSOR)) + return 1; + } } return __test_facility(nr, &stfle_fac_list); } diff --git a/arch/s390/include/asm/io.h b/arch/s390/include/asm/io.h index 4453ad7c11ace..36a9c7740c437 100644 --- a/arch/s390/include/asm/io.h +++ b/arch/s390/include/asm/io.h @@ -16,8 +16,10 @@ #include #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); #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); #define IO_SPACE_LIMIT 0 diff --git a/arch/s390/kernel/perf_cpum_sf.c b/arch/s390/kernel/perf_cpum_sf.c index 06efad5b4f931..a3169193775f7 100644 --- a/arch/s390/kernel/perf_cpum_sf.c +++ b/arch/s390/kernel/perf_cpum_sf.c @@ -1463,7 +1463,7 @@ static int aux_output_begin(struct perf_output_handle *handle, unsigned long range, i, range_scan, idx, head, base, offset; struct hws_trailer_entry *te; - if (WARN_ON_ONCE(handle->head & ~PAGE_MASK)) + if (handle->head & ~PAGE_MASK) return -EINVAL; aux->head = handle->head >> PAGE_SHIFT; @@ -1642,7 +1642,7 @@ static void hw_collect_aux(struct cpu_hw_sf *cpuhw) unsigned long num_sdb; aux = perf_get_aux(handle); - if (WARN_ON_ONCE(!aux)) + if (!aux) return; /* Inform user space new data arrived */ @@ -1661,7 +1661,7 @@ static void hw_collect_aux(struct cpu_hw_sf *cpuhw) num_sdb); break; } - if (WARN_ON_ONCE(!aux)) + if (!aux) return; /* 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); - if (WARN_ON_ONCE(!(event->hw.state & PERF_HES_STOPPED))) + if (!(event->hw.state & PERF_HES_STOPPED)) return; - - if (flags & PERF_EF_RELOAD) - WARN_ON_ONCE(!(event->hw.state & PERF_HES_UPTODATE)); - perf_pmu_disable(event->pmu); event->hw.state = 0; cpuhw->lsctl.cs = 1; diff --git a/arch/s390/kernel/vmlinux.lds.S b/arch/s390/kernel/vmlinux.lds.S index 2ae201ebf90b9..de5f9f623f5b2 100644 --- a/arch/s390/kernel/vmlinux.lds.S +++ b/arch/s390/kernel/vmlinux.lds.S @@ -71,6 +71,15 @@ SECTIONS . = ALIGN(PAGE_SIZE); __end_ro_after_init = .; + .data.rel.ro : { + *(.data.rel.ro .data.rel.ro.*) + } + .got : { + __got_start = .; + *(.got) + __got_end = .; + } + RW_DATA(0x100, PAGE_SIZE, THREAD_SIZE) BOOT_DATA_PRESERVED diff --git a/arch/s390/kvm/diag.c b/arch/s390/kvm/diag.c index 3c65b8258ae67..2cc3ec034046c 100644 --- a/arch/s390/kvm/diag.c +++ b/arch/s390/kvm/diag.c @@ -77,7 +77,7 @@ static int __diag_page_ref_service(struct kvm_vcpu *vcpu) vcpu->stat.instruction_diagnose_258++; if (vcpu->run->s.regs.gprs[rx] & 7) 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) return kvm_s390_inject_prog_cond(vcpu, rc); if (parm.parm_version != 2 || parm.parm_len < 5 || parm.code != 0x258) diff --git a/arch/s390/kvm/gaccess.c b/arch/s390/kvm/gaccess.c index ff8349d17b331..090dc38334336 100644 --- a/arch/s390/kvm/gaccess.c +++ b/arch/s390/kvm/gaccess.c @@ -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); int rc; + if (!gfn_to_memslot(kvm, gfn)) + return PGM_ADDRESSING; if (mode == GACC_STORE) rc = kvm_write_guest_page(kvm, gfn, data, offset, len); else @@ -1158,6 +1160,8 @@ int access_guest_real(struct kvm_vcpu *vcpu, unsigned long gra, gra += fragment_len; data += fragment_len; } + if (rc > 0) + vcpu->arch.pgm.code = rc; return rc; } diff --git a/arch/s390/kvm/gaccess.h b/arch/s390/kvm/gaccess.h index b320d12aa0493..3fde45a151f22 100644 --- a/arch/s390/kvm/gaccess.h +++ b/arch/s390/kvm/gaccess.h @@ -405,11 +405,12 @@ int read_guest_abs(struct kvm_vcpu *vcpu, unsigned long gpa, void *data, * @len: number of bytes to copy * * 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. * - * 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. */ @@ -428,11 +429,12 @@ int write_guest_real(struct kvm_vcpu *vcpu, unsigned long gra, void *data, * @len: number of bytes to copy * * 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. * - * 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. */ diff --git a/arch/s390/mm/cmm.c b/arch/s390/mm/cmm.c index f47515313226c..9af4d82964944 100644 --- a/arch/s390/mm/cmm.c +++ b/arch/s390/mm/cmm.c @@ -95,11 +95,12 @@ static long cmm_alloc_pages(long nr, long *counter, (*counter)++; spin_unlock(&cmm_lock); nr--; + cond_resched(); } 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; unsigned long addr; @@ -123,6 +124,21 @@ static long cmm_free_pages(long nr, long *counter, struct cmm_page_array **list) 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, unsigned long dummy, void *parm) { diff --git a/arch/um/drivers/line.c b/arch/um/drivers/line.c index 375200e9aba9a..2ba4e0d4e26b0 100644 --- a/arch/um/drivers/line.c +++ b/arch/um/drivers/line.c @@ -383,6 +383,7 @@ int setup_one_line(struct line *lines, int n, char *init, parse_chan_pair(NULL, line, n, opts, error_out); err = 0; } + *error_out = "configured as 'none'"; } else { char *new = kstrdup(init, GFP_KERNEL); if (!new) { @@ -406,6 +407,7 @@ int setup_one_line(struct line *lines, int n, char *init, } } if (err) { + *error_out = "failed to parse channel pair"; line->init_str = NULL; line->valid = 0; kfree(new); diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig index 82d12c93feabe..2f05896dec372 100644 --- a/arch/x86/Kconfig +++ b/arch/x86/Kconfig @@ -893,7 +893,18 @@ config INTEL_TDX_GUEST memory contents and CPU state. TDX guests are protected from some attacks from the VMM. -endif # HYPERVISOR_GUEST +config QNX_GUEST + bool "QNX Guest support" + depends on X86_64 + help + This option enables Linux OS run as guest on QNX hypervisor. + QNX is a commercial Unix-like real-time operating system, aimed primarily + at the embedded systems market. + + If unsure, say N here. + + +endif #HYPERVISOR_GUEST source "arch/x86/Kconfig.cpu" diff --git a/arch/x86/coco/tdx/tdx.c b/arch/x86/coco/tdx/tdx.c index f3c75809fed26..905ac8a3f7165 100644 --- a/arch/x86/coco/tdx/tdx.c +++ b/arch/x86/coco/tdx/tdx.c @@ -14,6 +14,7 @@ #include #include #include +#include /* MMIO direction */ #define EPT_READ 0 @@ -362,7 +363,6 @@ static bool mmio_read(int size, unsigned long addr, unsigned long *val) .r12 = size, .r13 = EPT_READ, .r14 = addr, - .r15 = *val, }; if (__tdx_hypercall_ret(&args)) @@ -406,6 +406,11 @@ static int handle_mmio(struct pt_regs *regs, struct ve_info *ve) return -EINVAL; } + if (!fault_in_kernel_space(ve->gla)) { + WARN_ONCE(1, "Access to userspace address is not supported"); + return -EINVAL; + } + /* * Reject EPT violation #VEs that split pages. * diff --git a/arch/x86/configs/gki_defconfig b/arch/x86/configs/gki_defconfig index 10f830c61384e..a08e47d7cd96c 100644 --- a/arch/x86/configs/gki_defconfig +++ b/arch/x86/configs/gki_defconfig @@ -65,6 +65,7 @@ CONFIG_NR_CPUS=32 CONFIG_EFI=y CONFIG_CMDLINE_BOOL=y CONFIG_CMDLINE="console=ttynull stack_depot_disable=on cgroup_disable=pressure bootconfig" +CONFIG_HIBERNATION=y CONFIG_PM_WAKELOCKS=y CONFIG_PM_WAKELOCKS_LIMIT=0 # CONFIG_PM_WAKELOCKS_GC is not set @@ -122,6 +123,9 @@ CONFIG_ANON_VMA_NAME=y CONFIG_USERFAULTFD=y CONFIG_LRU_GEN=y CONFIG_LRU_GEN_ENABLED=y +CONFIG_DAMON=y +CONFIG_DAMON_VADDR=y +CONFIG_DAMON_SYSFS=y CONFIG_NET=y CONFIG_PACKET=y CONFIG_XFRM_USER=y @@ -140,6 +144,11 @@ CONFIG_NET_IPVTI=y CONFIG_INET_ESP=y CONFIG_INET_UDP_DIAG=y CONFIG_INET_DIAG_DESTROY=y +CONFIG_TCP_CONG_ADVANCED=y +# CONFIG_TCP_CONG_BIC is not set +# CONFIG_TCP_CONG_WESTWOOD is not set +# CONFIG_TCP_CONG_HTCP is not set +CONFIG_TCP_CONG_BBR=y CONFIG_IPV6_ROUTER_PREF=y CONFIG_IPV6_ROUTE_INFO=y CONFIG_IPV6_OPTIMISTIC_DAD=y @@ -311,6 +320,7 @@ CONFIG_VCPU_STALL_DETECTOR=m CONFIG_SCSI=y # CONFIG_SCSI_PROC_FS is not set CONFIG_BLK_DEV_SD=y +CONFIG_SCSI_SCAN_ASYNC=y CONFIG_MD=y CONFIG_BLK_DEV_DM=y CONFIG_DM_CRYPT=y @@ -319,6 +329,7 @@ CONFIG_DM_SNAPSHOT=y CONFIG_DM_UEVENT=y CONFIG_DM_VERITY=y CONFIG_DM_VERITY_FEC=y +CONFIG_DM_BOW=y CONFIG_NETDEVICES=y CONFIG_DUMMY=y CONFIG_WIREGUARD=y @@ -472,6 +483,7 @@ CONFIG_USB_HIDDEV=y CONFIG_USB_ANNOUNCE_NEW_DEVICES=y CONFIG_USB_MON=m CONFIG_USB_XHCI_HCD=y +CONFIG_USB_XHCI_SIDEBAND=y CONFIG_USB_EHCI_HCD=y CONFIG_USB_EHCI_ROOT_HUB_TT=y CONFIG_USB_EHCI_HCD_PLATFORM=y @@ -520,7 +532,6 @@ CONFIG_LEDS_TRIGGER_TIMER=y CONFIG_LEDS_TRIGGER_TRANSIENT=y CONFIG_EDAC=y CONFIG_RTC_CLASS=y -# CONFIG_RTC_HCTOSYS is not set CONFIG_RTC_LIB_KUNIT_TEST=m CONFIG_DMABUF_HEAPS=y CONFIG_DMABUF_SYSFS_STATS=y @@ -684,7 +695,6 @@ CONFIG_UBSAN_TRAP=y # CONFIG_UBSAN_ENUM is not set CONFIG_PAGE_OWNER=y CONFIG_PAGE_PINNER=y -CONFIG_DEBUG_STACK_USAGE=y CONFIG_DEBUG_MEMORY_INIT=y CONFIG_KFENCE=y CONFIG_KFENCE_SAMPLE_INTERVAL=500 diff --git a/arch/x86/crypto/TEST_MAPPING b/arch/x86/crypto/TEST_MAPPING index d73f8129550bb..178988515657a 100644 --- a/arch/x86/crypto/TEST_MAPPING +++ b/arch/x86/crypto/TEST_MAPPING @@ -264,6 +264,31 @@ "include-filter": "android.hardware.camera2.cts.FastBasicsTest" } ] + }, + { + "name": "CtsIncrementalInstallHostTestCases", + "options": [ + { + "include-filter": "android.incrementalinstall.cts.IncrementalFeatureTest" + }, + { + "include-filter": "android.incrementalinstall.cts.IncrementalInstallTest" + } + ] + }, + { + "name": "CtsLibcoreLegacy22TestCases", + "options": [ + { + "include-filter": "android.util.cts.FloatMathTest" + } + ] + }, + { + "name": "CtsRootBluetoothTestCases" + }, + { + "name": "vts_kernel_net_tests" } ] } diff --git a/arch/x86/crypto/sha256-avx2-asm.S b/arch/x86/crypto/sha256-avx2-asm.S index 0ffb072be9561..0bbec1c75cd0b 100644 --- a/arch/x86/crypto/sha256-avx2-asm.S +++ b/arch/x86/crypto/sha256-avx2-asm.S @@ -592,22 +592,22 @@ SYM_TYPED_FUNC_START(sha256_transform_rorx) leaq K256+0*32(%rip), INP ## reuse INP as scratch reg vpaddd (INP, SRND), X0, XFER vmovdqa XFER, 0*32+_XFER(%rsp, SRND) - FOUR_ROUNDS_AND_SCHED _XFER + 0*32 + FOUR_ROUNDS_AND_SCHED (_XFER + 0*32) leaq K256+1*32(%rip), INP vpaddd (INP, SRND), X0, XFER vmovdqa XFER, 1*32+_XFER(%rsp, SRND) - FOUR_ROUNDS_AND_SCHED _XFER + 1*32 + FOUR_ROUNDS_AND_SCHED (_XFER + 1*32) leaq K256+2*32(%rip), INP vpaddd (INP, SRND), X0, XFER vmovdqa XFER, 2*32+_XFER(%rsp, SRND) - FOUR_ROUNDS_AND_SCHED _XFER + 2*32 + FOUR_ROUNDS_AND_SCHED (_XFER + 2*32) leaq K256+3*32(%rip), INP vpaddd (INP, SRND), X0, XFER vmovdqa XFER, 3*32+_XFER(%rsp, SRND) - FOUR_ROUNDS_AND_SCHED _XFER + 3*32 + FOUR_ROUNDS_AND_SCHED (_XFER + 3*32) add $4*32, SRND cmp $3*4*32, SRND @@ -618,12 +618,12 @@ SYM_TYPED_FUNC_START(sha256_transform_rorx) leaq K256+0*32(%rip), INP vpaddd (INP, SRND), X0, XFER vmovdqa XFER, 0*32+_XFER(%rsp, SRND) - DO_4ROUNDS _XFER + 0*32 + DO_4ROUNDS (_XFER + 0*32) leaq K256+1*32(%rip), INP vpaddd (INP, SRND), X1, XFER vmovdqa XFER, 1*32+_XFER(%rsp, SRND) - DO_4ROUNDS _XFER + 1*32 + DO_4ROUNDS (_XFER + 1*32) add $2*32, SRND vmovdqa X2, X0 @@ -651,8 +651,8 @@ SYM_TYPED_FUNC_START(sha256_transform_rorx) xor SRND, SRND .align 16 .Lloop3: - DO_4ROUNDS _XFER + 0*32 + 16 - DO_4ROUNDS _XFER + 1*32 + 16 + DO_4ROUNDS (_XFER + 0*32 + 16) + DO_4ROUNDS (_XFER + 1*32 + 16) add $2*32, SRND cmp $4*4*32, SRND jb .Lloop3 diff --git a/arch/x86/entry/entry.S b/arch/x86/entry/entry.S index 718c00367f9a5..34eca8015b64b 100644 --- a/arch/x86/entry/entry.S +++ b/arch/x86/entry/entry.S @@ -9,6 +9,8 @@ #include #include #include +#include +#include .pushsection .noinstr.text, "ax" @@ -17,6 +19,9 @@ SYM_FUNC_START(entry_ibpb) movl $PRED_CMD_IBPB, %eax xorl %edx, %edx wrmsr + + /* Make sure IBPB clears return stack preductions too. */ + FILL_RETURN_BUFFER %rax, RSB_CLEAR_LOOPS, X86_BUG_IBPB_NO_RET RET SYM_FUNC_END(entry_ibpb) /* For KVM */ diff --git a/arch/x86/entry/entry_32.S b/arch/x86/entry/entry_32.S index 74a4358c7f450..3894acc54b79c 100644 --- a/arch/x86/entry/entry_32.S +++ b/arch/x86/entry/entry_32.S @@ -875,6 +875,8 @@ SYM_FUNC_START(entry_SYSENTER_32) /* Now ready to switch the cr3 */ SWITCH_TO_USER_CR3 scratch_reg=%eax + /* Clobbers ZF */ + CLEAR_CPU_BUFFERS /* * 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 popfl popl %eax - CLEAR_CPU_BUFFERS /* * 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. */ call exc_nmi - CLEAR_CPU_BUFFERS jmp .Lnmi_return .Lnmi_from_sysenter_stack: @@ -1169,6 +1169,7 @@ SYM_CODE_START(asm_exc_nmi) CHECK_AND_APPLY_ESPFIX RESTORE_ALL_NMI cr3_reg=%edi pop=4 + CLEAR_CPU_BUFFERS jmp .Lirq_return #ifdef CONFIG_X86_ESPFIX32 @@ -1210,6 +1211,7 @@ SYM_CODE_START(asm_exc_nmi) * 1 - orig_ax */ lss (1+5+6)*4(%esp), %esp # back to espfix stack + CLEAR_CPU_BUFFERS jmp .Lirq_return #endif SYM_CODE_END(asm_exc_nmi) diff --git a/arch/x86/events/intel/core.c b/arch/x86/events/intel/core.c index bc4fcf0d94056..688550e336ce1 100644 --- a/arch/x86/events/intel/core.c +++ b/arch/x86/events/intel/core.c @@ -4465,6 +4465,25 @@ static u8 adl_get_hybrid_cpu_type(void) return hybrid_big; } +static inline bool erratum_hsw11(struct perf_event *event) +{ + return (event->hw.config & INTEL_ARCH_EVENT_MASK) == + X86_CONFIG(.event=0xc0, .umask=0x01); +} + +/* + * The HSW11 requires a period larger than 100 which is the same as the BDM11. + * A minimum period of 128 is enforced as well for the INST_RETIRED.ALL. + * + * The message 'interrupt took too long' can be observed on any counter which + * was armed with a period < 32 and two events expired in the same NMI. + * A minimum period of 32 is enforced for the rest of the events. + */ +static void hsw_limit_period(struct perf_event *event, s64 *left) +{ + *left = max(*left, erratum_hsw11(event) ? 128 : 32); +} + /* * Broadwell: * @@ -4482,8 +4501,7 @@ static u8 adl_get_hybrid_cpu_type(void) */ static void bdw_limit_period(struct perf_event *event, s64 *left) { - if ((event->hw.config & INTEL_ARCH_EVENT_MASK) == - X86_CONFIG(.event=0xc0, .umask=0x01)) { + if (erratum_hsw11(event)) { if (*left < 128) *left = 128; *left &= ~0x3fULL; @@ -6392,6 +6410,7 @@ __init int intel_pmu_init(void) x86_pmu.hw_config = hsw_hw_config; x86_pmu.get_event_constraints = hsw_get_event_constraints; + x86_pmu.limit_period = hsw_limit_period; x86_pmu.lbr_double_abort = true; extra_attr = boot_cpu_has(X86_FEATURE_RTM) ? hsw_format_attr : nhm_format_attr; diff --git a/arch/x86/events/intel/pt.c b/arch/x86/events/intel/pt.c index cc5c6a3264967..4110246aba12c 100644 --- a/arch/x86/events/intel/pt.c +++ b/arch/x86/events/intel/pt.c @@ -1602,6 +1602,7 @@ static void pt_event_stop(struct perf_event *event, int mode) * see comment in intel_pt_interrupt(). */ WRITE_ONCE(pt->handle_nmi, 0); + barrier(); pt_config_stop(event); @@ -1653,11 +1654,10 @@ static long pt_event_snapshot_aux(struct perf_event *event, return 0; /* - * Here, handle_nmi tells us if the tracing is on + * There is no PT interrupt in this mode, so stop the trace and it will + * remain stopped while the buffer is copied. */ - if (READ_ONCE(pt->handle_nmi)) - pt_config_stop(event); - + pt_config_stop(event); pt_read_offset(buf); pt_update_head(pt); @@ -1669,11 +1669,10 @@ static long pt_event_snapshot_aux(struct perf_event *event, ret = perf_output_copy_aux(&pt->handle, handle, from, to); /* - * If the tracing was on when we turned up, restart it. - * Compiler barrier not needed as we couldn't have been - * preempted by anything that touches pt->handle_nmi. + * Here, handle_nmi tells us if the tracing was on. + * If the tracing was on, restart it. */ - if (pt->handle_nmi) + if (READ_ONCE(pt->handle_nmi)) pt_config_start(event); return ret; diff --git a/arch/x86/hyperv/hv_init.c b/arch/x86/hyperv/hv_init.c index 8f3a4d16bb791..d1e2d12279e26 100644 --- a/arch/x86/hyperv/hv_init.c +++ b/arch/x86/hyperv/hv_init.c @@ -35,7 +35,6 @@ #include #include -int hyperv_init_cpuhp; u64 hv_current_partition_id = ~0ull; EXPORT_SYMBOL_GPL(hv_current_partition_id); @@ -607,8 +606,6 @@ void __init hyperv_init(void) register_syscore_ops(&hv_syscore_ops); - hyperv_init_cpuhp = cpuhp; - if (cpuid_ebx(HYPERV_CPUID_FEATURES) & HV_ACCESS_PARTITION_ID) hv_get_partition_id(); @@ -637,7 +634,7 @@ void __init hyperv_init(void) clean_guest_os_id: wrmsrl(HV_X64_MSR_GUEST_OS_ID, 0); hv_ivm_msr_write(HV_X64_MSR_GUEST_OS_ID, 0); - cpuhp_remove_state(cpuhp); + cpuhp_remove_state(CPUHP_AP_HYPERV_ONLINE); free_ghcb_page: free_percpu(hv_ghcb_pg); free_vp_assist_page: diff --git a/arch/x86/include/asm/TEST_MAPPING b/arch/x86/include/asm/TEST_MAPPING index ed5f13513ee80..5365d70e7e443 100644 --- a/arch/x86/include/asm/TEST_MAPPING +++ b/arch/x86/include/asm/TEST_MAPPING @@ -264,6 +264,40 @@ "include-filter": "android.hardware.camera2.cts.FastBasicsTest" } ] + }, + { + "name": "CtsIncrementalInstallHostTestCases", + "options": [ + { + "include-filter": "android.incrementalinstall.cts.IncrementalFeatureTest" + }, + { + "include-filter": "android.incrementalinstall.cts.IncrementalInstallTest" + } + ] + }, + { + "name": "CtsLibcoreLegacy22TestCases", + "options": [ + { + "include-filter": "android.util.cts.FloatMathTest" + } + ] + }, + { + "name": "CtsRootBluetoothTestCases" + }, + { + "name": "vts_kernel_net_tests" + }, + { + "name": "KernelAbilistTest" + }, + { + "name": "VtsAidlHalSensorsTargetTest" + }, + { + "name": "VtsBootconfigTest" } ] } diff --git a/arch/x86/include/asm/acpi.h b/arch/x86/include/asm/acpi.h index f896eed4516c7..529c36a98d9ea 100644 --- a/arch/x86/include/asm/acpi.h +++ b/arch/x86/include/asm/acpi.h @@ -165,6 +165,14 @@ void acpi_generic_reduced_hw_init(void); void x86_default_set_root_pointer(u64 addr); u64 x86_default_get_root_pointer(void); +#ifdef CONFIG_XEN_PV +/* A Xen PV domain needs a special acpi_os_ioremap() handling. */ +extern void __iomem * (*acpi_os_ioremap)(acpi_physical_address phys, + acpi_size size); +void __iomem *x86_acpi_os_ioremap(acpi_physical_address phys, acpi_size size); +#define acpi_os_ioremap acpi_os_ioremap +#endif + #else /* !CONFIG_ACPI */ #define acpi_lapic 0 diff --git a/arch/x86/include/asm/cpufeatures.h b/arch/x86/include/asm/cpufeatures.h index 8c1593dd2c317..55d18eef6775a 100644 --- a/arch/x86/include/asm/cpufeatures.h +++ b/arch/x86/include/asm/cpufeatures.h @@ -216,7 +216,7 @@ #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_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_ZEN ( 7*32+28) /* "" Generic flag for all Zen and newer */ #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_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_AMD_IBPB_RET (13*32+30) /* "" IBPB clears return address predictor */ #define X86_FEATURE_BRS (13*32+31) /* Branch Sampling available */ /* 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_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_IBPB_NO_RET X86_BUG(1*32 + 4) /* "ibpb_no_ret" IBPB omits return target predictions */ #endif /* _ASM_X86_CPUFEATURES_H */ diff --git a/arch/x86/include/asm/fpu/signal.h b/arch/x86/include/asm/fpu/signal.h index 611fa41711aff..eccc75bc9c4f3 100644 --- a/arch/x86/include/asm/fpu/signal.h +++ b/arch/x86/include/asm/fpu/signal.h @@ -29,7 +29,7 @@ fpu__alloc_mathframe(unsigned long sp, int ia32_frame, unsigned long fpu__get_fpstate_size(void); -extern bool copy_fpstate_to_sigframe(void __user *buf, void __user *fp, int size); +extern bool copy_fpstate_to_sigframe(void __user *buf, void __user *fp, int size, u32 pkru); extern void fpu__clear_user_states(struct fpu *fpu); extern bool fpu__restore_sig(void __user *buf, int ia32_frame); diff --git a/arch/x86/include/asm/fpu/types.h b/arch/x86/include/asm/fpu/types.h index eb810074f1e74..fd5fb43d920b4 100644 --- a/arch/x86/include/asm/fpu/types.h +++ b/arch/x86/include/asm/fpu/types.h @@ -589,6 +589,13 @@ struct fpu_state_config { * even without XSAVE support, i.e. legacy features FP + SSE */ u64 legacy_features; + /* + * @independent_features: + * + * Features that are supported by XSAVES, but not managed as part of + * the FPU core, such as LBR + */ + u64 independent_features; }; /* FPU state configuration information */ diff --git a/arch/x86/include/asm/hardirq.h b/arch/x86/include/asm/hardirq.h index 66837b8c67f1a..f2e245741afc2 100644 --- a/arch/x86/include/asm/hardirq.h +++ b/arch/x86/include/asm/hardirq.h @@ -63,7 +63,11 @@ extern u64 arch_irq_stat(void); #define local_softirq_pending_ref pcpu_hot.softirq_pending #if IS_ENABLED(CONFIG_KVM_INTEL) -static inline void kvm_set_cpu_l1tf_flush_l1d(void) +/* + * This function is called from noinstr interrupt contexts + * and must be inlined to not get instrumentation. + */ +static __always_inline void kvm_set_cpu_l1tf_flush_l1d(void) { __this_cpu_write(irq_stat.kvm_cpu_l1tf_flush_l1d, 1); } @@ -78,7 +82,7 @@ static __always_inline bool kvm_get_cpu_l1tf_flush_l1d(void) return __this_cpu_read(irq_stat.kvm_cpu_l1tf_flush_l1d); } #else /* !IS_ENABLED(CONFIG_KVM_INTEL) */ -static inline void kvm_set_cpu_l1tf_flush_l1d(void) { } +static __always_inline void kvm_set_cpu_l1tf_flush_l1d(void) { } #endif /* IS_ENABLED(CONFIG_KVM_INTEL) */ #endif /* _ASM_X86_HARDIRQ_H */ diff --git a/arch/x86/include/asm/hypervisor.h b/arch/x86/include/asm/hypervisor.h index e41cbf2ec41d2..0062943f24d4c 100644 --- a/arch/x86/include/asm/hypervisor.h +++ b/arch/x86/include/asm/hypervisor.h @@ -30,6 +30,7 @@ enum x86_hypervisor_type { X86_HYPER_KVM, X86_HYPER_JAILHOUSE, X86_HYPER_ACRN, + X86_HYPER_QNX, }; #ifdef CONFIG_HYPERVISOR_GUEST @@ -64,6 +65,7 @@ extern const struct hypervisor_x86 x86_hyper_xen_pv; extern const struct hypervisor_x86 x86_hyper_kvm; extern const struct hypervisor_x86 x86_hyper_jailhouse; extern const struct hypervisor_x86 x86_hyper_acrn; +extern const struct hypervisor_x86 x86_hyper_qnx; extern struct hypervisor_x86 x86_hyper_xen_hvm; extern bool nopv; diff --git a/arch/x86/include/asm/idtentry.h b/arch/x86/include/asm/idtentry.h index 13639e57e1f8a..10603e185111d 100644 --- a/arch/x86/include/asm/idtentry.h +++ b/arch/x86/include/asm/idtentry.h @@ -13,15 +13,18 @@ #include +typedef void (*idtentry_t)(struct pt_regs *regs); + /** * DECLARE_IDTENTRY - Declare functions for simple IDT entry points * No error code pushed by hardware * @vector: Vector number (ignored for C) * @func: Function name of the entry point * - * Declares three functions: + * Declares four functions: * - The ASM entry point: asm_##func * - The XEN PV trap entry point: xen_##func (maybe unused) + * - The C handler called from the FRED event dispatcher (maybe unused) * - The C handler called from the ASM entry point * * Note: This is the C variant of DECLARE_IDTENTRY(). As the name says it @@ -31,6 +34,7 @@ #define DECLARE_IDTENTRY(vector, func) \ asmlinkage void asm_##func(void); \ asmlinkage void xen_asm_##func(void); \ + void fred_##func(struct pt_regs *regs); \ __visible void func(struct pt_regs *regs) /** @@ -137,6 +141,17 @@ static __always_inline void __##func(struct pt_regs *regs, \ #define DEFINE_IDTENTRY_RAW(func) \ __visible noinstr void func(struct pt_regs *regs) +/** + * DEFINE_FREDENTRY_RAW - Emit code for raw FRED entry points + * @func: Function name of the entry point + * + * @func is called from the FRED event dispatcher with interrupts disabled. + * + * See @DEFINE_IDTENTRY_RAW for further details. + */ +#define DEFINE_FREDENTRY_RAW(func) \ +noinstr void fred_##func(struct pt_regs *regs) + /** * DECLARE_IDTENTRY_RAW_ERRORCODE - Declare functions for raw IDT entry points * Error code pushed by hardware @@ -197,8 +212,8 @@ __visible noinstr void func(struct pt_regs *regs, \ irqentry_state_t state = irqentry_enter(regs); \ u32 vector = (u32)(u8)error_code; \ \ + kvm_set_cpu_l1tf_flush_l1d(); \ instrumentation_begin(); \ - kvm_set_cpu_l1tf_flush_l1d(); \ run_irq_on_irqstack_cond(__##func, regs, vector); \ instrumentation_end(); \ irqentry_exit(regs, state); \ @@ -233,17 +248,27 @@ static noinline void __##func(struct pt_regs *regs, u32 vector) #define DEFINE_IDTENTRY_SYSVEC(func) \ static void __##func(struct pt_regs *regs); \ \ +static __always_inline void instr_##func(struct pt_regs *regs) \ +{ \ + run_sysvec_on_irqstack_cond(__##func, regs); \ +} \ + \ __visible noinstr void func(struct pt_regs *regs) \ { \ irqentry_state_t state = irqentry_enter(regs); \ \ + kvm_set_cpu_l1tf_flush_l1d(); \ instrumentation_begin(); \ - kvm_set_cpu_l1tf_flush_l1d(); \ - run_sysvec_on_irqstack_cond(__##func, regs); \ + instr_##func (regs); \ instrumentation_end(); \ irqentry_exit(regs, state); \ } \ \ +void fred_##func(struct pt_regs *regs) \ +{ \ + instr_##func (regs); \ +} \ + \ static noinline void __##func(struct pt_regs *regs) /** @@ -260,19 +285,29 @@ static noinline void __##func(struct pt_regs *regs) #define DEFINE_IDTENTRY_SYSVEC_SIMPLE(func) \ static __always_inline void __##func(struct pt_regs *regs); \ \ +static __always_inline void instr_##func(struct pt_regs *regs) \ +{ \ + __irq_enter_raw(); \ + __##func (regs); \ + __irq_exit_raw(); \ +} \ + \ __visible noinstr void func(struct pt_regs *regs) \ { \ irqentry_state_t state = irqentry_enter(regs); \ \ + kvm_set_cpu_l1tf_flush_l1d(); \ instrumentation_begin(); \ - __irq_enter_raw(); \ - kvm_set_cpu_l1tf_flush_l1d(); \ - __##func (regs); \ - __irq_exit_raw(); \ + instr_##func (regs); \ instrumentation_end(); \ irqentry_exit(regs, state); \ } \ \ +void fred_##func(struct pt_regs *regs) \ +{ \ + instr_##func (regs); \ +} \ + \ static __always_inline void __##func(struct pt_regs *regs) /** @@ -410,15 +445,18 @@ __visible noinstr void func(struct pt_regs *regs, \ /* C-Code mapping */ #define DECLARE_IDTENTRY_NMI DECLARE_IDTENTRY_RAW #define DEFINE_IDTENTRY_NMI DEFINE_IDTENTRY_RAW +#define DEFINE_FREDENTRY_NMI DEFINE_FREDENTRY_RAW #ifdef CONFIG_X86_64 #define DECLARE_IDTENTRY_MCE DECLARE_IDTENTRY_IST #define DEFINE_IDTENTRY_MCE DEFINE_IDTENTRY_IST #define DEFINE_IDTENTRY_MCE_USER DEFINE_IDTENTRY_NOIST +#define DEFINE_FREDENTRY_MCE DEFINE_FREDENTRY_RAW #define DECLARE_IDTENTRY_DEBUG DECLARE_IDTENTRY_IST #define DEFINE_IDTENTRY_DEBUG DEFINE_IDTENTRY_IST #define DEFINE_IDTENTRY_DEBUG_USER DEFINE_IDTENTRY_NOIST +#define DEFINE_FREDENTRY_DEBUG DEFINE_FREDENTRY_RAW #endif #else /* !__ASSEMBLY__ */ @@ -655,23 +693,36 @@ DECLARE_IDTENTRY(RESCHEDULE_VECTOR, sysvec_reschedule_ipi); DECLARE_IDTENTRY_SYSVEC(REBOOT_VECTOR, sysvec_reboot); DECLARE_IDTENTRY_SYSVEC(CALL_FUNCTION_SINGLE_VECTOR, sysvec_call_function_single); DECLARE_IDTENTRY_SYSVEC(CALL_FUNCTION_VECTOR, sysvec_call_function); +#else +# define fred_sysvec_reschedule_ipi NULL +# define fred_sysvec_reboot NULL +# define fred_sysvec_call_function_single NULL +# define fred_sysvec_call_function NULL #endif #ifdef CONFIG_X86_LOCAL_APIC # ifdef CONFIG_X86_MCE_THRESHOLD DECLARE_IDTENTRY_SYSVEC(THRESHOLD_APIC_VECTOR, sysvec_threshold); +# else +# define fred_sysvec_threshold NULL # endif # ifdef CONFIG_X86_MCE_AMD DECLARE_IDTENTRY_SYSVEC(DEFERRED_ERROR_VECTOR, sysvec_deferred_error); +# else +# define fred_sysvec_deferred_error NULL # endif # ifdef CONFIG_X86_THERMAL_VECTOR DECLARE_IDTENTRY_SYSVEC(THERMAL_APIC_VECTOR, sysvec_thermal); +# else +# define fred_sysvec_thermal NULL # endif # ifdef CONFIG_IRQ_WORK DECLARE_IDTENTRY_SYSVEC(IRQ_WORK_VECTOR, sysvec_irq_work); +# else +# define fred_sysvec_irq_work NULL # endif #endif @@ -679,12 +730,16 @@ DECLARE_IDTENTRY_SYSVEC(IRQ_WORK_VECTOR, sysvec_irq_work); DECLARE_IDTENTRY_SYSVEC(POSTED_INTR_VECTOR, sysvec_kvm_posted_intr_ipi); DECLARE_IDTENTRY_SYSVEC(POSTED_INTR_WAKEUP_VECTOR, sysvec_kvm_posted_intr_wakeup_ipi); DECLARE_IDTENTRY_SYSVEC(POSTED_INTR_NESTED_VECTOR, sysvec_kvm_posted_intr_nested_ipi); +#else +# define fred_sysvec_kvm_posted_intr_ipi NULL +# define fred_sysvec_kvm_posted_intr_wakeup_ipi NULL +# define fred_sysvec_kvm_posted_intr_nested_ipi NULL #endif #if IS_ENABLED(CONFIG_HYPERV) DECLARE_IDTENTRY_SYSVEC(HYPERVISOR_CALLBACK_VECTOR, sysvec_hyperv_callback); DECLARE_IDTENTRY_SYSVEC(HYPERV_REENLIGHTENMENT_VECTOR, sysvec_hyperv_reenlightenment); -DECLARE_IDTENTRY_SYSVEC(HYPERV_STIMER0_VECTOR, sysvec_hyperv_stimer0); +DECLARE_IDTENTRY_SYSVEC(HYPERV_STIMER0_VECTOR, sysvec_hyperv_stimer0); #endif #if IS_ENABLED(CONFIG_ACRN_GUEST) diff --git a/arch/x86/include/asm/mshyperv.h b/arch/x86/include/asm/mshyperv.h index 896445edc6a8e..ec95d6e9f1682 100644 --- a/arch/x86/include/asm/mshyperv.h +++ b/arch/x86/include/asm/mshyperv.h @@ -40,7 +40,6 @@ static inline unsigned char hv_get_nmi_reason(void) } #if IS_ENABLED(CONFIG_HYPERV) -extern int hyperv_init_cpuhp; extern bool hyperv_paravisor_present; extern void *hv_hypercall_pg; diff --git a/arch/x86/include/asm/nospec-branch.h b/arch/x86/include/asm/nospec-branch.h index a8781c8763b44..ee642d26e3045 100644 --- a/arch/x86/include/asm/nospec-branch.h +++ b/arch/x86/include/asm/nospec-branch.h @@ -332,7 +332,16 @@ * Note: Only the memory operand variant of VERW clears the 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 #ifdef CONFIG_X86_64 diff --git a/arch/x86/include/asm/page_64.h b/arch/x86/include/asm/page_64.h index cc6b8e087192e..9dab85aba7afd 100644 --- a/arch/x86/include/asm/page_64.h +++ b/arch/x86/include/asm/page_64.h @@ -17,6 +17,7 @@ extern unsigned long phys_base; extern unsigned long page_offset_base; extern unsigned long vmalloc_base; extern unsigned long vmemmap_base; +extern unsigned long physmem_end; static __always_inline unsigned long __phys_addr_nodebug(unsigned long x) { diff --git a/arch/x86/include/asm/pgtable_64_types.h b/arch/x86/include/asm/pgtable_64_types.h index 38b54b992f32e..35c416f061552 100644 --- a/arch/x86/include/asm/pgtable_64_types.h +++ b/arch/x86/include/asm/pgtable_64_types.h @@ -140,6 +140,10 @@ extern unsigned int ptrs_per_p4d; # define VMEMMAP_START __VMEMMAP_BASE_L4 #endif /* CONFIG_DYNAMIC_MEMORY_LAYOUT */ +#ifdef CONFIG_RANDOMIZE_MEMORY +# define PHYSMEM_END physmem_end +#endif + /* * End of the region for which vmalloc page tables are pre-allocated. * For non-KMSAN builds, this is the same as VMALLOC_END. diff --git a/arch/x86/include/asm/syscall.h b/arch/x86/include/asm/syscall.h index 03bb950eba690..228a42585d5c9 100644 --- a/arch/x86/include/asm/syscall.h +++ b/arch/x86/include/asm/syscall.h @@ -82,7 +82,12 @@ static inline void syscall_get_arguments(struct task_struct *task, struct pt_regs *regs, unsigned long *args) { - memcpy(args, ®s->bx, 6 * sizeof(args[0])); + args[0] = regs->bx; + args[1] = regs->cx; + args[2] = regs->dx; + args[3] = regs->si; + args[4] = regs->di; + args[5] = regs->bp; } static inline int syscall_get_arch(struct task_struct *task) diff --git a/arch/x86/kernel/acpi/boot.c b/arch/x86/kernel/acpi/boot.c index c55c0ef47a187..49c39f5dc1c99 100644 --- a/arch/x86/kernel/acpi/boot.c +++ b/arch/x86/kernel/acpi/boot.c @@ -1901,3 +1901,14 @@ u64 x86_default_get_root_pointer(void) { return boot_params.acpi_rsdp_addr; } + +#ifdef CONFIG_XEN_PV +void __iomem *x86_acpi_os_ioremap(acpi_physical_address phys, acpi_size size) +{ + return ioremap_cache(phys, size); +} + +void __iomem * (*acpi_os_ioremap)(acpi_physical_address phys, acpi_size size) = + x86_acpi_os_ioremap; +EXPORT_SYMBOL_GPL(acpi_os_ioremap); +#endif diff --git a/arch/x86/kernel/amd_nb.c b/arch/x86/kernel/amd_nb.c index 6f1cc7f1b202a..6dabb53f58a44 100644 --- a/arch/x86/kernel/amd_nb.c +++ b/arch/x86/kernel/amd_nb.c @@ -26,6 +26,7 @@ #define PCI_DEVICE_ID_AMD_19H_M70H_ROOT 0x14e8 #define PCI_DEVICE_ID_AMD_1AH_M00H_ROOT 0x153a #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_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_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_M60H_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_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_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) }, {} }; diff --git a/arch/x86/kernel/apic/apic.c b/arch/x86/kernel/apic/apic.c index 06d5a7eeee81a..45a1be941bb97 100644 --- a/arch/x86/kernel/apic/apic.c +++ b/arch/x86/kernel/apic/apic.c @@ -294,6 +294,19 @@ int lapic_get_maxlvt(void) /* i82489DX specific */ #define I82489DX_BASE_DIVIDER (((0x2) << 18)) +/* Now QNX uses Core Base Frequency instead of nominal core crystal clock. + * We need to scale LVTT Initial Count by TSC/clock ratio. On RPL, it's 73 (2800MHZ / 38400000 Hz) + */ +static int qnx_lvtt_scale_factor = 1; + +static int __init qnx_lvtt_scale_factor_setup(char *str) +{ + if (hypervisor_is_type(X86_HYPER_QNX)) + get_option(&str, &qnx_lvtt_scale_factor); + return 1; +} +__setup("qnx_lvtt_scale=", qnx_lvtt_scale_factor_setup); + /* * This function sets up the local APIC timer, with a timeout of * 'clocks' APIC bus clock. During calibration we actually call @@ -346,6 +359,7 @@ static void __setup_APIC_LVTT(unsigned int clocks, int oneshot, int irqen) (tmp_value & ~(APIC_TDR_DIV_1 | APIC_TDR_DIV_TMBASE)) | APIC_TDR_DIV_16); + clocks = (clocks * qnx_lvtt_scale_factor); if (!oneshot) apic_write(APIC_TMICT, clocks / APIC_DIVISOR); } @@ -445,6 +459,7 @@ EXPORT_SYMBOL_GPL(setup_APIC_eilvt); static int lapic_next_event(unsigned long delta, struct clock_event_device *evt) { + delta = (delta * qnx_lvtt_scale_factor); apic_write(APIC_TMICT, delta); return 0; } @@ -473,7 +488,19 @@ static int lapic_timer_shutdown(struct clock_event_device *evt) v = apic_read(APIC_LVTT); v |= (APIC_LVT_MASKED | LOCAL_TIMER_VECTOR); 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; } @@ -1812,12 +1839,9 @@ static __init void apic_set_fixmap(bool read_apic); static __init void x2apic_disable(void) { - u32 x2apic_id, state = x2apic_state; - - x2apic_mode = 0; - x2apic_state = X2APIC_DISABLED; + u32 x2apic_id; - if (state != X2APIC_ON) + if (x2apic_state < X2APIC_ON) return; x2apic_id = read_apic_id(); @@ -1830,6 +1854,10 @@ static __init void x2apic_disable(void) } __x2apic_disable(); + + x2apic_mode = 0; + x2apic_state = X2APIC_DISABLED; + /* * Don't reread the APIC ID as it was already done from * check_x2apic() and the APIC driver still is a x2APIC variant, diff --git a/arch/x86/kernel/apic/io_apic.c b/arch/x86/kernel/apic/io_apic.c index 00da6cf6b07dc..d0c5325d17510 100644 --- a/arch/x86/kernel/apic/io_apic.c +++ b/arch/x86/kernel/apic/io_apic.c @@ -352,27 +352,26 @@ static void ioapic_mask_entry(int apic, int pin) * shared ISA-space IRQs, so we have to support them. We are super * fast in the common case, and fast for shared ISA-space IRQs. */ -static int __add_pin_to_irq_node(struct mp_chip_data *data, - int node, int apic, int pin) +static bool add_pin_to_irq_node(struct mp_chip_data *data, int node, int apic, int pin) { struct irq_pin_list *entry; - /* don't allow duplicates */ - for_each_irq_pin(entry, data->irq_2_pin) + /* Don't allow duplicates */ + for_each_irq_pin(entry, data->irq_2_pin) { if (entry->apic == apic && entry->pin == pin) - return 0; + return true; + } entry = kzalloc_node(sizeof(struct irq_pin_list), GFP_ATOMIC, node); if (!entry) { - pr_err("can not alloc irq_pin_list (%d,%d,%d)\n", - node, apic, pin); - return -ENOMEM; + pr_err("Cannot allocate irq_pin_list (%d,%d,%d)\n", node, apic, pin); + return false; } + entry->apic = apic; entry->pin = pin; list_add_tail(&entry->list, &data->irq_2_pin); - - return 0; + return true; } static void __remove_pin_from_irq(struct mp_chip_data *data, int apic, int pin) @@ -387,13 +386,6 @@ static void __remove_pin_from_irq(struct mp_chip_data *data, int apic, int pin) } } -static void add_pin_to_irq_node(struct mp_chip_data *data, - int node, int apic, int pin) -{ - if (__add_pin_to_irq_node(data, node, apic, pin)) - panic("IO-APIC: failed to add irq-pin. Can not proceed\n"); -} - /* * Reroute an IRQ to a different pin. */ @@ -1002,8 +994,7 @@ static int alloc_isa_irq_from_domain(struct irq_domain *domain, if (irq_data && irq_data->parent_data) { if (!mp_check_pin_attr(irq, info)) return -EBUSY; - if (__add_pin_to_irq_node(irq_data->chip_data, node, ioapic, - info->ioapic.pin)) + if (!add_pin_to_irq_node(irq_data->chip_data, node, ioapic, info->ioapic.pin)) return -ENOMEM; } else { info->flags |= X86_IRQ_ALLOC_LEGACY; @@ -3037,10 +3028,8 @@ int mp_irqdomain_alloc(struct irq_domain *domain, unsigned int virq, return -ENOMEM; ret = irq_domain_alloc_irqs_parent(domain, virq, nr_irqs, info); - if (ret < 0) { - kfree(data); - return ret; - } + if (ret < 0) + goto free_data; INIT_LIST_HEAD(&data->irq_2_pin); irq_data->hwirq = info->ioapic.pin; @@ -3049,7 +3038,10 @@ int mp_irqdomain_alloc(struct irq_domain *domain, unsigned int virq, irq_data->chip_data = data; mp_irqdomain_get_attr(mp_pin_to_gsi(ioapic, pin), data, info); - add_pin_to_irq_node(data, ioapic_alloc_attr_node(info), ioapic, pin); + if (!add_pin_to_irq_node(data, ioapic_alloc_attr_node(info), ioapic, pin)) { + ret = -ENOMEM; + goto free_irqs; + } mp_preconfigure_entry(data); mp_register_handler(virq, data->is_level); @@ -3064,6 +3056,12 @@ int mp_irqdomain_alloc(struct irq_domain *domain, unsigned int virq, ioapic, mpc_ioapic_id(ioapic), pin, virq, data->is_level, data->active_low); return 0; + +free_irqs: + irq_domain_free_irqs_parent(domain, virq, nr_irqs); +free_data: + kfree(data); + return ret; } void mp_irqdomain_free(struct irq_domain *domain, unsigned int virq, diff --git a/arch/x86/kernel/cpu/Makefile b/arch/x86/kernel/cpu/Makefile index 4350f6bfc0641..689c805faee56 100644 --- a/arch/x86/kernel/cpu/Makefile +++ b/arch/x86/kernel/cpu/Makefile @@ -53,6 +53,7 @@ obj-$(CONFIG_X86_LOCAL_APIC) += perfctr-watchdog.o obj-$(CONFIG_HYPERVISOR_GUEST) += vmware.o hypervisor.o mshyperv.o obj-$(CONFIG_ACRN_GUEST) += acrn.o +obj-$(CONFIG_QNX_GUEST) += qnx.o quiet_cmd_mkcapflags = MKCAP $@ cmd_mkcapflags = $(CONFIG_SHELL) $(srctree)/$(src)/mkcapflags.sh $@ $^ diff --git a/arch/x86/kernel/cpu/amd.c b/arch/x86/kernel/cpu/amd.c index 9fd91022d92d0..145c81c68394b 100644 --- a/arch/x86/kernel/cpu/amd.c +++ b/arch/x86/kernel/cpu/amd.c @@ -1374,7 +1374,8 @@ void amd_check_microcode(void) if (boot_cpu_data.x86_vendor != X86_VENDOR_AMD) return; - on_each_cpu(zenbleed_check_cpu, NULL, 1); + if (cpu_feature_enabled(X86_FEATURE_ZEN2)) + on_each_cpu(zenbleed_check_cpu, NULL, 1); } /* diff --git a/arch/x86/kernel/cpu/bugs.c b/arch/x86/kernel/cpu/bugs.c index c2dc9b7426acb..fd21e5b1095b7 100644 --- a/arch/x86/kernel/cpu/bugs.c +++ b/arch/x86/kernel/cpu/bugs.c @@ -70,6 +70,8 @@ void (*x86_return_thunk)(void) __ro_after_init = __x86_return_thunk; /* Update SPEC_CTRL MSR and its cached copy unconditionally */ static void update_spec_ctrl(u64 val) { + if (hypervisor_is_type(X86_HYPER_QNX)) + return; this_cpu_write(x86_spec_ctrl_current, val); wrmsrl(MSR_IA32_SPEC_CTRL, val); } @@ -135,7 +137,8 @@ void __init cpu_select_mitigations(void) * have unknown values. AMD64_LS_CFG MSR is cached in the early AMD * init code as it is not enumerated and depends on the family. */ - if (cpu_feature_enabled(X86_FEATURE_MSR_SPEC_CTRL)) { + if (!hypervisor_is_type(X86_HYPER_QNX) && + cpu_feature_enabled(X86_FEATURE_MSR_SPEC_CTRL)) { rdmsrl(MSR_IA32_SPEC_CTRL, x86_spec_ctrl_base); /* @@ -1113,8 +1116,25 @@ static void __init retbleed_select_mitigation(void) case RETBLEED_MITIGATION_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); 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; case RETBLEED_MITIGATION_STUFF: @@ -2610,6 +2630,14 @@ static void __init srso_select_mitigation(void) if (has_microcode) { setup_force_cpu_cap(X86_FEATURE_ENTRY_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 { pr_err("WARNING: kernel not compiled with CPU_IBPB_ENTRY.\n"); @@ -2622,6 +2650,13 @@ static void __init srso_select_mitigation(void) if (!boot_cpu_has(X86_FEATURE_ENTRY_IBPB) && has_microcode) { setup_force_cpu_cap(X86_FEATURE_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 { pr_err("WARNING: kernel not compiled with CPU_SRSO.\n"); diff --git a/arch/x86/kernel/cpu/common.c b/arch/x86/kernel/cpu/common.c index 74d566263467e..c984ce8c485f8 100644 --- a/arch/x86/kernel/cpu/common.c +++ b/arch/x86/kernel/cpu/common.c @@ -999,7 +999,8 @@ static void init_speculation_control(struct cpuinfo_x86 *c) if (cpu_has(c, X86_FEATURE_SPEC_CTRL)) { set_cpu_cap(c, X86_FEATURE_IBRS); set_cpu_cap(c, X86_FEATURE_IBPB); - set_cpu_cap(c, X86_FEATURE_MSR_SPEC_CTRL); + if (!hypervisor_is_type(X86_HYPER_QNX)) + set_cpu_cap(c, X86_FEATURE_MSR_SPEC_CTRL); } if (cpu_has(c, X86_FEATURE_INTEL_STIBP)) @@ -1011,7 +1012,8 @@ static void init_speculation_control(struct cpuinfo_x86 *c) if (cpu_has(c, X86_FEATURE_AMD_IBRS)) { set_cpu_cap(c, X86_FEATURE_IBRS); - set_cpu_cap(c, X86_FEATURE_MSR_SPEC_CTRL); + if (!hypervisor_is_type(X86_HYPER_QNX)) + set_cpu_cap(c, X86_FEATURE_MSR_SPEC_CTRL); } if (cpu_has(c, X86_FEATURE_AMD_IBPB)) @@ -1019,12 +1021,14 @@ static void init_speculation_control(struct cpuinfo_x86 *c) if (cpu_has(c, X86_FEATURE_AMD_STIBP)) { set_cpu_cap(c, X86_FEATURE_STIBP); - set_cpu_cap(c, X86_FEATURE_MSR_SPEC_CTRL); + if (!hypervisor_is_type(X86_HYPER_QNX)) + set_cpu_cap(c, X86_FEATURE_MSR_SPEC_CTRL); } if (cpu_has(c, X86_FEATURE_AMD_SSBD)) { set_cpu_cap(c, X86_FEATURE_SSBD); - set_cpu_cap(c, X86_FEATURE_MSR_SPEC_CTRL); + if (!hypervisor_is_type(X86_HYPER_QNX)) + set_cpu_cap(c, X86_FEATURE_MSR_SPEC_CTRL); clear_cpu_cap(c, X86_FEATURE_VIRT_SSBD); } } @@ -1483,6 +1487,9 @@ static void __init cpu_set_bug_bits(struct cpuinfo_x86 *c) boot_cpu_has(X86_FEATURE_HYPERVISOR))) 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)) return; diff --git a/arch/x86/kernel/cpu/hypervisor.c b/arch/x86/kernel/cpu/hypervisor.c index 553bfbfc3a1b5..d4fb7b08261de 100644 --- a/arch/x86/kernel/cpu/hypervisor.c +++ b/arch/x86/kernel/cpu/hypervisor.c @@ -45,6 +45,9 @@ static const __initconst struct hypervisor_x86 * const hypervisors[] = #ifdef CONFIG_ACRN_GUEST &x86_hyper_acrn, #endif +#ifdef CONFIG_QNX_GUEST + &x86_hyper_qnx, +#endif }; enum x86_hypervisor_type x86_hyper_type; diff --git a/arch/x86/kernel/cpu/intel.c b/arch/x86/kernel/cpu/intel.c index aa3e7ed0eb3d7..b218cfb7ecea7 100644 --- a/arch/x86/kernel/cpu/intel.c +++ b/arch/x86/kernel/cpu/intel.c @@ -41,6 +41,8 @@ #include #endif +#include "asm/hypervisor.h" + enum split_lock_detect_state { sld_off = 0, sld_warn, @@ -298,7 +300,8 @@ static void early_init_intel(struct cpuinfo_x86 *c) setup_clear_cpu_cap(X86_FEATURE_IBPB); setup_clear_cpu_cap(X86_FEATURE_STIBP); setup_clear_cpu_cap(X86_FEATURE_SPEC_CTRL); - setup_clear_cpu_cap(X86_FEATURE_MSR_SPEC_CTRL); + if (!hypervisor_is_type(X86_HYPER_QNX)) + setup_clear_cpu_cap(X86_FEATURE_MSR_SPEC_CTRL); setup_clear_cpu_cap(X86_FEATURE_INTEL_STIBP); setup_clear_cpu_cap(X86_FEATURE_SSBD); setup_clear_cpu_cap(X86_FEATURE_SPEC_CTRL_SSBD); @@ -424,7 +427,8 @@ static void early_init_intel(struct cpuinfo_x86 *c) * Adjust the number of physical bits early because it affects the * valid bits of the MTRR mask registers. */ - if (cpu_has(c, X86_FEATURE_TME)) + if (!hypervisor_is_type(X86_HYPER_QNX) && + cpu_has(c, X86_FEATURE_TME)) detect_tme_early(c); } diff --git a/arch/x86/kernel/cpu/mshyperv.c b/arch/x86/kernel/cpu/mshyperv.c index e6bba12c759cb..bcb2d640a0cd8 100644 --- a/arch/x86/kernel/cpu/mshyperv.c +++ b/arch/x86/kernel/cpu/mshyperv.c @@ -199,8 +199,8 @@ static void hv_machine_shutdown(void) * Call hv_cpu_die() on all the CPUs, otherwise later the hypervisor * corrupts the old VP Assist Pages and can crash the kexec kernel. */ - if (kexec_in_progress && hyperv_init_cpuhp > 0) - cpuhp_remove_state(hyperv_init_cpuhp); + if (kexec_in_progress) + cpuhp_remove_state(CPUHP_AP_HYPERV_ONLINE); /* The function calls stop_other_cpus(). */ native_machine_shutdown(); @@ -423,6 +423,7 @@ static void __init ms_hyperv_init_platform(void) ms_hyperv.misc_features & HV_FEATURE_FREQUENCY_MSRS_AVAILABLE) { x86_platform.calibrate_tsc = hv_get_tsc_khz; x86_platform.calibrate_cpu = hv_get_tsc_khz; + setup_force_cpu_cap(X86_FEATURE_TSC_KNOWN_FREQ); } if (ms_hyperv.priv_high & HV_ISOLATION) { diff --git a/arch/x86/kernel/cpu/qnx.c b/arch/x86/kernel/cpu/qnx.c new file mode 100644 index 0000000000000..7b679e13aa52c --- /dev/null +++ b/arch/x86/kernel/cpu/qnx.c @@ -0,0 +1,45 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * QNX detection support + * + */ + +#include +#include +#include + +#define QNX_CPUID_FEATURES 0x40000000 + +static u32 __init qnx_detect(void) +{ + if (boot_cpu_has(X86_FEATURE_HYPERVISOR)) { + uint32_t eax, signature[2], edx; + + cpuid(QNX_CPUID_FEATURES, &eax, &signature[0], &signature[1], &edx); + + if (!memcmp("QNXQVMBS", signature, 8)) + return 1; + } + + return 0; +} + +static void __init qnx_init_platform(void) +{ + setup_clear_cpu_cap(X86_FEATURE_TME); + setup_clear_cpu_cap(X86_FEATURE_WAITPKG); + setup_clear_cpu_cap(X86_FEATURE_MSR_SPEC_CTRL); +} + +static bool qnx_x2apic_available(void) +{ + return boot_cpu_has(X86_FEATURE_X2APIC); +} + +const __initconst struct hypervisor_x86 x86_hyper_qnx = { + .name = "QNX", + .detect = qnx_detect, + .type = X86_HYPER_QNX, + .init.init_platform = qnx_init_platform, + .init.x2apic_available = qnx_x2apic_available, +}; diff --git a/arch/x86/kernel/cpu/resctrl/core.c b/arch/x86/kernel/cpu/resctrl/core.c index 8073fd3042939..10830995eadab 100644 --- a/arch/x86/kernel/cpu/resctrl/core.c +++ b/arch/x86/kernel/cpu/resctrl/core.c @@ -193,7 +193,7 @@ static inline bool rdt_get_mb_table(struct rdt_resource *r) 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); union cpuid_0x10_3_eax eax; @@ -227,7 +227,7 @@ static bool __get_mem_config_intel(struct rdt_resource *r) 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); u32 eax, ebx, ecx, edx, subleaf; diff --git a/arch/x86/kernel/cpu/sgx/main.c b/arch/x86/kernel/cpu/sgx/main.c index 166692f2d5011..c7f8c3200e8d7 100644 --- a/arch/x86/kernel/cpu/sgx/main.c +++ b/arch/x86/kernel/cpu/sgx/main.c @@ -474,24 +474,25 @@ struct sgx_epc_page *__sgx_alloc_epc_page(void) { struct sgx_epc_page *page; int nid_of_current = numa_node_id(); - int nid = nid_of_current; + int nid_start, nid; - if (node_isset(nid_of_current, sgx_numa_mask)) { - page = __sgx_alloc_epc_page_from_node(nid_of_current); - if (page) - return page; - } - - /* Fall back to the non-local NUMA nodes: */ - while (true) { - nid = next_node_in(nid, sgx_numa_mask); - if (nid == nid_of_current) - break; + /* + * Try local node first. If it doesn't have an EPC section, + * fall back to the non-local NUMA nodes. + */ + if (node_isset(nid_of_current, sgx_numa_mask)) + nid_start = nid_of_current; + else + nid_start = next_node_in(nid_of_current, sgx_numa_mask); + nid = nid_start; + do { page = __sgx_alloc_epc_page_from_node(nid); if (page) return page; - } + + nid = next_node_in(nid, sgx_numa_mask); + } while (nid != nid_start); return ERR_PTR(-ENOMEM); } diff --git a/arch/x86/kernel/cpu/umwait.c b/arch/x86/kernel/cpu/umwait.c index 2293efd6ffa69..2b91572829941 100644 --- a/arch/x86/kernel/cpu/umwait.c +++ b/arch/x86/kernel/cpu/umwait.c @@ -5,6 +5,7 @@ #include #include +#include "asm/hypervisor.h" #define UMWAIT_C02_ENABLE 0 @@ -206,7 +207,8 @@ static int __init umwait_init(void) struct device *dev; int ret; - if (!boot_cpu_has(X86_FEATURE_WAITPKG)) + if (!hypervisor_is_type(X86_HYPER_QNX) && + !boot_cpu_has(X86_FEATURE_WAITPKG)) return -ENODEV; /* diff --git a/arch/x86/kernel/fpu/TEST_MAPPING b/arch/x86/kernel/fpu/TEST_MAPPING index f29356a2b089c..5465205ac71ac 100644 --- a/arch/x86/kernel/fpu/TEST_MAPPING +++ b/arch/x86/kernel/fpu/TEST_MAPPING @@ -264,6 +264,40 @@ "include-filter": "android.hardware.camera2.cts.FastBasicsTest" } ] + }, + { + "name": "CtsIncrementalInstallHostTestCases", + "options": [ + { + "include-filter": "android.incrementalinstall.cts.IncrementalFeatureTest" + }, + { + "include-filter": "android.incrementalinstall.cts.IncrementalInstallTest" + } + ] + }, + { + "name": "CtsLibcoreLegacy22TestCases", + "options": [ + { + "include-filter": "android.util.cts.FloatMathTest" + } + ] + }, + { + "name": "CtsRootBluetoothTestCases" + }, + { + "name": "vts_kernel_net_tests" + }, + { + "name": "KernelAbilistTest" + }, + { + "name": "VtsAidlHalSensorsTargetTest" + }, + { + "name": "VtsBootconfigTest" } ] } diff --git a/arch/x86/kernel/fpu/signal.c b/arch/x86/kernel/fpu/signal.c index 247f2225aa9f3..2b3b9e140dd41 100644 --- a/arch/x86/kernel/fpu/signal.c +++ b/arch/x86/kernel/fpu/signal.c @@ -156,7 +156,7 @@ static inline bool save_xstate_epilog(void __user *buf, int ia32_frame, return !err; } -static inline int copy_fpregs_to_sigframe(struct xregs_state __user *buf) +static inline int copy_fpregs_to_sigframe(struct xregs_state __user *buf, u32 pkru) { if (use_xsave()) return xsave_to_user_sigframe(buf); @@ -185,7 +185,7 @@ static inline int copy_fpregs_to_sigframe(struct xregs_state __user *buf) * For [f]xsave state, update the SW reserved fields in the [f]xsave frame * indicating the absence/presence of the extended state to the user. */ -bool copy_fpstate_to_sigframe(void __user *buf, void __user *buf_fx, int size) +bool copy_fpstate_to_sigframe(void __user *buf, void __user *buf_fx, int size, u32 pkru) { struct task_struct *tsk = current; struct fpstate *fpstate = tsk->thread.fpu.fpstate; @@ -228,7 +228,7 @@ bool copy_fpstate_to_sigframe(void __user *buf, void __user *buf_fx, int size) fpregs_restore_userregs(); pagefault_disable(); - ret = copy_fpregs_to_sigframe(buf_fx); + ret = copy_fpregs_to_sigframe(buf_fx, pkru); pagefault_enable(); fpregs_unlock(); diff --git a/arch/x86/kernel/fpu/xstate.c b/arch/x86/kernel/fpu/xstate.c index 571a43b3105df..255ff8f6c5270 100644 --- a/arch/x86/kernel/fpu/xstate.c +++ b/arch/x86/kernel/fpu/xstate.c @@ -788,6 +788,9 @@ void __init fpu__init_system_xstate(unsigned int legacy_size) goto out_disable; } + fpu_kernel_cfg.independent_features = fpu_kernel_cfg.max_features & + XFEATURE_MASK_INDEPENDENT; + /* * Clear XSAVE features that are disabled in the normal CPUID. */ diff --git a/arch/x86/kernel/fpu/xstate.h b/arch/x86/kernel/fpu/xstate.h index 19ca623ffa2ac..544224611e23c 100644 --- a/arch/x86/kernel/fpu/xstate.h +++ b/arch/x86/kernel/fpu/xstate.h @@ -64,9 +64,9 @@ static inline u64 xfeatures_mask_supervisor(void) static inline u64 xfeatures_mask_independent(void) { if (!cpu_feature_enabled(X86_FEATURE_ARCH_LBR)) - return XFEATURE_MASK_INDEPENDENT & ~XFEATURE_MASK_LBR; + return fpu_kernel_cfg.independent_features & ~XFEATURE_MASK_LBR; - return XFEATURE_MASK_INDEPENDENT; + return fpu_kernel_cfg.independent_features; } /* XSAVE/XRSTOR wrapper functions */ diff --git a/arch/x86/kernel/jailhouse.c b/arch/x86/kernel/jailhouse.c index 578d16fc040fa..5481c7c5db301 100644 --- a/arch/x86/kernel/jailhouse.c +++ b/arch/x86/kernel/jailhouse.c @@ -12,6 +12,7 @@ #include #include #include +#include #include #include #include diff --git a/arch/x86/kernel/machine_kexec_64.c b/arch/x86/kernel/machine_kexec_64.c index d287fe290c9ab..2fa12d1dc6760 100644 --- a/arch/x86/kernel/machine_kexec_64.c +++ b/arch/x86/kernel/machine_kexec_64.c @@ -28,6 +28,7 @@ #include #include #include +#include #ifdef CONFIG_ACPI /* @@ -90,6 +91,8 @@ map_efi_systab(struct x86_mapping_info *info, pgd_t *level4p) { #ifdef CONFIG_EFI unsigned long mstart, mend; + void *kaddr; + int ret; if (!efi_enabled(EFI_BOOT)) return 0; @@ -105,6 +108,30 @@ map_efi_systab(struct x86_mapping_info *info, pgd_t *level4p) if (!mstart) return 0; + ret = kernel_ident_mapping_init(info, level4p, mstart, mend); + if (ret) + return ret; + + kaddr = memremap(mstart, mend - mstart, MEMREMAP_WB); + if (!kaddr) { + pr_err("Could not map UEFI system table\n"); + return -ENOMEM; + } + + mstart = efi_config_table; + + if (efi_enabled(EFI_64BIT)) { + efi_system_table_64_t *stbl = (efi_system_table_64_t *)kaddr; + + mend = mstart + sizeof(efi_config_table_64_t) * stbl->nr_tables; + } else { + efi_system_table_32_t *stbl = (efi_system_table_32_t *)kaddr; + + mend = mstart + sizeof(efi_config_table_32_t) * stbl->nr_tables; + } + + memunmap(kaddr); + return kernel_ident_mapping_init(info, level4p, mstart, mend); #endif return 0; diff --git a/arch/x86/kernel/mmconf-fam10h_64.c b/arch/x86/kernel/mmconf-fam10h_64.c index c94dec6a18345..1f54eedc3015e 100644 --- a/arch/x86/kernel/mmconf-fam10h_64.c +++ b/arch/x86/kernel/mmconf-fam10h_64.c @@ -9,6 +9,7 @@ #include #include #include +#include #include #include diff --git a/arch/x86/kernel/process_64.c b/arch/x86/kernel/process_64.c index 4989095ab7696..d595ef7c1de05 100644 --- a/arch/x86/kernel/process_64.c +++ b/arch/x86/kernel/process_64.c @@ -750,6 +750,27 @@ static long prctl_map_vdso(const struct vdso_image *image, unsigned long addr) #define LAM_U57_BITS 6 +static void enable_lam_func(void *__mm) +{ + struct mm_struct *mm = __mm; + + if (this_cpu_read(cpu_tlbstate.loaded_mm) == mm) { + write_cr3(__read_cr3() | mm->context.lam_cr3_mask); + set_tlbstate_lam_mode(mm); + } +} + +static void mm_enable_lam(struct mm_struct *mm) +{ + /* + * Even though the process must still be single-threaded at this + * point, kernel threads may be using the mm. IPI those kernel + * threads if they exist. + */ + on_each_cpu_mask(mm_cpumask(mm), enable_lam_func, mm, true); + set_bit(MM_CONTEXT_LOCK_LAM, &mm->context.flags); +} + static int prctl_enable_tagged_addr(struct mm_struct *mm, unsigned long nr_bits) { if (!cpu_feature_enabled(X86_FEATURE_LAM)) @@ -766,6 +787,10 @@ static int prctl_enable_tagged_addr(struct mm_struct *mm, unsigned long nr_bits) if (mmap_write_lock_killable(mm)) return -EINTR; + /* + * MM_CONTEXT_LOCK_LAM is set on clone. Prevent LAM from + * being enabled unless the process is single threaded: + */ if (test_bit(MM_CONTEXT_LOCK_LAM, &mm->context.flags)) { mmap_write_unlock(mm); return -EBUSY; @@ -782,9 +807,7 @@ static int prctl_enable_tagged_addr(struct mm_struct *mm, unsigned long nr_bits) return -EINVAL; } - write_cr3(__read_cr3() | mm->context.lam_cr3_mask); - set_tlbstate_lam_mode(mm); - set_bit(MM_CONTEXT_LOCK_LAM, &mm->context.flags); + mm_enable_lam(mm); mmap_write_unlock(mm); diff --git a/arch/x86/kernel/signal.c b/arch/x86/kernel/signal.c index 65fe2094da59b..876d3b30c2c77 100644 --- a/arch/x86/kernel/signal.c +++ b/arch/x86/kernel/signal.c @@ -83,6 +83,7 @@ get_sigframe(struct ksignal *ksig, struct pt_regs *regs, size_t frame_size, unsigned long math_size = 0; unsigned long sp = regs->sp; unsigned long buf_fx = 0; + u32 pkru = read_pkru(); /* redzone */ if (!ia32_frame) @@ -138,7 +139,7 @@ get_sigframe(struct ksignal *ksig, struct pt_regs *regs, size_t frame_size, } /* save i387 and extended state */ - if (!copy_fpstate_to_sigframe(*fpstate, (void __user *)buf_fx, math_size)) + if (!copy_fpstate_to_sigframe(*fpstate, (void __user *)buf_fx, math_size, pkru)) return (void __user *)-1L; return (void __user *)sp; diff --git a/arch/x86/kernel/signal_64.c b/arch/x86/kernel/signal_64.c index 23d8aaf8d9fd1..449a6ed0b8c98 100644 --- a/arch/x86/kernel/signal_64.c +++ b/arch/x86/kernel/signal_64.c @@ -260,13 +260,13 @@ SYSCALL_DEFINE0(rt_sigreturn) set_current_blocked(&set); - if (!restore_sigcontext(regs, &frame->uc.uc_mcontext, uc_flags)) + if (restore_altstack(&frame->uc.uc_stack)) goto badframe; - if (restore_signal_shadow_stack()) + if (!restore_sigcontext(regs, &frame->uc.uc_mcontext, uc_flags)) goto badframe; - if (restore_altstack(&frame->uc.uc_stack)) + if (restore_signal_shadow_stack()) goto badframe; return regs->ax; diff --git a/arch/x86/kernel/smpboot.c b/arch/x86/kernel/smpboot.c index 2a187c0cbd5b1..ce77dac9a0202 100644 --- a/arch/x86/kernel/smpboot.c +++ b/arch/x86/kernel/smpboot.c @@ -60,6 +60,7 @@ #include #include #include +#include #include #include diff --git a/arch/x86/kernel/time.c b/arch/x86/kernel/time.c index 52e1f3f0b361c..64bed645561dc 100644 --- a/arch/x86/kernel/time.c +++ b/arch/x86/kernel/time.c @@ -25,6 +25,8 @@ #include #include +#include "asm/hypervisor.h" + unsigned long profile_pc(struct pt_regs *regs) { return instruction_pointer(regs); @@ -82,7 +84,8 @@ static __init void x86_late_time_init(void) x86_init.irqs.intr_mode_init(); tsc_init(); - if (static_cpu_has(X86_FEATURE_WAITPKG)) + if (!hypervisor_is_type(X86_HYPER_QNX) && + static_cpu_has(X86_FEATURE_WAITPKG)) use_tpause_delay(); } diff --git a/arch/x86/kernel/x86_init.c b/arch/x86/kernel/x86_init.c index 3f0718b4a7d28..268627a17cf0d 100644 --- a/arch/x86/kernel/x86_init.c +++ b/arch/x86/kernel/x86_init.c @@ -8,6 +8,7 @@ #include #include #include +#include #include #include diff --git a/arch/x86/kvm/lapic.c b/arch/x86/kvm/lapic.c index 66a2c4c0ae106..1380f34897770 100644 --- a/arch/x86/kvm/lapic.c +++ b/arch/x86/kvm/lapic.c @@ -2443,6 +2443,29 @@ void kvm_lapic_set_eoi(struct kvm_vcpu *vcpu) } EXPORT_SYMBOL_GPL(kvm_lapic_set_eoi); +#define X2APIC_ICR_RESERVED_BITS (GENMASK_ULL(31, 20) | GENMASK_ULL(17, 16) | BIT(13)) + +int kvm_x2apic_icr_write(struct kvm_lapic *apic, u64 data) +{ + if (data & X2APIC_ICR_RESERVED_BITS) + return 1; + + /* + * The BUSY bit is reserved on both Intel and AMD in x2APIC mode, but + * only AMD requires it to be zero, Intel essentially just ignores the + * bit. And if IPI virtualization (Intel) or x2AVIC (AMD) is enabled, + * the CPU performs the reserved bits checks, i.e. the underlying CPU + * behavior will "win". Arbitrarily clear the BUSY bit, as there is no + * sane way to provide consistent behavior with respect to hardware. + */ + data &= ~APIC_ICR_BUSY; + + kvm_apic_send_ipi(apic, (u32)data, (u32)(data >> 32)); + kvm_lapic_set_reg64(apic, APIC_ICR, data); + trace_kvm_apic_write(APIC_ICR, data); + return 0; +} + /* emulate APIC access in a trap manner */ void kvm_apic_write_nodecode(struct kvm_vcpu *vcpu, u32 offset) { @@ -2460,7 +2483,7 @@ void kvm_apic_write_nodecode(struct kvm_vcpu *vcpu, u32 offset) * maybe-unecessary write, and both are in the noise anyways. */ if (apic_x2apic_mode(apic) && offset == APIC_ICR) - kvm_x2apic_icr_write(apic, kvm_lapic_get_reg64(apic, APIC_ICR)); + WARN_ON_ONCE(kvm_x2apic_icr_write(apic, kvm_lapic_get_reg64(apic, APIC_ICR))); else kvm_lapic_reg_write(apic, offset, kvm_lapic_get_reg(apic, offset)); } @@ -3153,16 +3176,6 @@ int kvm_lapic_set_vapic_addr(struct kvm_vcpu *vcpu, gpa_t vapic_addr) return 0; } -int kvm_x2apic_icr_write(struct kvm_lapic *apic, u64 data) -{ - data &= ~APIC_ICR_BUSY; - - kvm_apic_send_ipi(apic, (u32)data, (u32)(data >> 32)); - kvm_lapic_set_reg64(apic, APIC_ICR, data); - trace_kvm_apic_write(APIC_ICR, data); - return 0; -} - static int kvm_lapic_msr_read(struct kvm_lapic *apic, u32 reg, u64 *data) { u32 low; diff --git a/arch/x86/kvm/svm/svm.c b/arch/x86/kvm/svm/svm.c index e3c2acc1adc73..413f1f2aadd1a 100644 --- a/arch/x86/kvm/svm/svm.c +++ b/arch/x86/kvm/svm/svm.c @@ -2869,6 +2869,12 @@ static int svm_get_msr(struct kvm_vcpu *vcpu, struct msr_data *msr_info) case MSR_CSTAR: msr_info->data = svm->vmcb01.ptr->save.cstar; break; + case MSR_GS_BASE: + msr_info->data = svm->vmcb01.ptr->save.gs.base; + break; + case MSR_FS_BASE: + msr_info->data = svm->vmcb01.ptr->save.fs.base; + break; case MSR_KERNEL_GS_BASE: msr_info->data = svm->vmcb01.ptr->save.kernel_gs_base; break; @@ -3090,6 +3096,12 @@ static int svm_set_msr(struct kvm_vcpu *vcpu, struct msr_data *msr) case MSR_CSTAR: svm->vmcb01.ptr->save.cstar = data; break; + case MSR_GS_BASE: + svm->vmcb01.ptr->save.gs.base = data; + break; + case MSR_FS_BASE: + svm->vmcb01.ptr->save.fs.base = data; + break; case MSR_KERNEL_GS_BASE: svm->vmcb01.ptr->save.kernel_gs_base = data; break; @@ -5166,6 +5178,9 @@ static __init void svm_set_cpu_caps(void) /* CPUID 0x8000001F (SME/SEV features) */ sev_set_cpu_caps(); + + /* Don't advertise Bus Lock Detect to guest if SVM support is absent */ + kvm_cpu_cap_clear(X86_FEATURE_BUS_LOCK_DETECT); } static __init int svm_hardware_setup(void) diff --git a/arch/x86/kvm/vmx/vmx.c b/arch/x86/kvm/vmx/vmx.c index 2e0106d9d371c..2b338a5eed27e 100644 --- a/arch/x86/kvm/vmx/vmx.c +++ b/arch/x86/kvm/vmx/vmx.c @@ -7203,7 +7203,8 @@ void noinstr vmx_spec_ctrl_restore_host(struct vcpu_vmx *vmx, { u64 hostval = this_cpu_read(x86_spec_ctrl_current); - if (!cpu_feature_enabled(X86_FEATURE_MSR_SPEC_CTRL)) + if (!hypervisor_is_type(X86_HYPER_QNX) && + !cpu_feature_enabled(X86_FEATURE_MSR_SPEC_CTRL)) return; if (flags & VMX_RUN_SAVE_SPEC_CTRL) diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c index c7e7ab1593d5b..50cc822e12900 100644 --- a/arch/x86/kvm/x86.c +++ b/arch/x86/kvm/x86.c @@ -5829,7 +5829,9 @@ long kvm_arch_vcpu_ioctl(struct file *filp, if (copy_from_user(&events, argp, sizeof(struct kvm_vcpu_events))) break; + kvm_vcpu_srcu_read_lock(vcpu); r = kvm_vcpu_ioctl_x86_set_vcpu_events(vcpu, &events); + kvm_vcpu_srcu_read_unlock(vcpu); break; } case KVM_GET_DEBUGREGS: { diff --git a/arch/x86/lib/iomem.c b/arch/x86/lib/iomem.c index e0411a3774d49..5eecb45d05d5d 100644 --- a/arch/x86/lib/iomem.c +++ b/arch/x86/lib/iomem.c @@ -25,6 +25,9 @@ static __always_inline void rep_movs(void *to, const void *from, size_t n) static void string_memcpy_fromio(void *to, const volatile void __iomem *from, size_t n) { + const void *orig_to = to; + const size_t orig_n = n; + if (unlikely(!n)) return; @@ -39,7 +42,7 @@ static void string_memcpy_fromio(void *to, const volatile void __iomem *from, si } rep_movs(to, (const void *)from, n); /* KMSAN must treat values read from devices as initialized. */ - kmsan_unpoison_memory(to, n); + kmsan_unpoison_memory(orig_to, orig_n); } static void string_memcpy_toio(volatile void __iomem *to, const void *from, size_t n) diff --git a/arch/x86/mm/init.c b/arch/x86/mm/init.c index dbf6afa4f4456..cb6e0549d7b1e 100644 --- a/arch/x86/mm/init.c +++ b/arch/x86/mm/init.c @@ -267,21 +267,17 @@ static void __init probe_page_size_mask(void) } } -#define INTEL_MATCH(_model) { .vendor = X86_VENDOR_INTEL, \ - .family = 6, \ - .model = _model, \ - } /* * INVLPG may not properly flush Global entries * on these CPUs when PCIDs are enabled. */ static const struct x86_cpu_id invlpg_miss_ids[] = { - INTEL_MATCH(INTEL_FAM6_ALDERLAKE ), - INTEL_MATCH(INTEL_FAM6_ALDERLAKE_L ), - INTEL_MATCH(INTEL_FAM6_ATOM_GRACEMONT ), - INTEL_MATCH(INTEL_FAM6_RAPTORLAKE ), - INTEL_MATCH(INTEL_FAM6_RAPTORLAKE_P), - INTEL_MATCH(INTEL_FAM6_RAPTORLAKE_S), + X86_MATCH_INTEL_FAM6_MODEL(ALDERLAKE, 0), + X86_MATCH_INTEL_FAM6_MODEL(ALDERLAKE_L, 0), + X86_MATCH_INTEL_FAM6_MODEL(ATOM_GRACEMONT, 0), + X86_MATCH_INTEL_FAM6_MODEL(RAPTORLAKE, 0), + X86_MATCH_INTEL_FAM6_MODEL(RAPTORLAKE_P, 0), + X86_MATCH_INTEL_FAM6_MODEL(RAPTORLAKE_S, 0), {} }; diff --git a/arch/x86/mm/init_64.c b/arch/x86/mm/init_64.c index 19d209b412d7a..aa69353da49f2 100644 --- a/arch/x86/mm/init_64.c +++ b/arch/x86/mm/init_64.c @@ -950,8 +950,12 @@ static void update_end_of_memory_vars(u64 start, u64 size) int add_pages(int nid, unsigned long start_pfn, unsigned long nr_pages, struct mhp_params *params) { + unsigned long end = ((start_pfn + nr_pages) << PAGE_SHIFT) - 1; int ret; + if (WARN_ON_ONCE(end > PHYSMEM_END)) + return -ERANGE; + ret = __add_pages(nid, start_pfn, nr_pages, params); WARN_ON_ONCE(ret); diff --git a/arch/x86/mm/kaslr.c b/arch/x86/mm/kaslr.c index 37db264866b64..230f1dee4f095 100644 --- a/arch/x86/mm/kaslr.c +++ b/arch/x86/mm/kaslr.c @@ -47,13 +47,24 @@ static const unsigned long vaddr_end = CPU_ENTRY_AREA_BASE; */ static __initdata struct kaslr_memory_region { unsigned long *base; + unsigned long *end; unsigned long size_tb; } kaslr_regions[] = { - { &page_offset_base, 0 }, - { &vmalloc_base, 0 }, - { &vmemmap_base, 0 }, + { + .base = &page_offset_base, + .end = &physmem_end, + }, + { + .base = &vmalloc_base, + }, + { + .base = &vmemmap_base, + }, }; +/* The end of the possible address space for physical memory */ +unsigned long physmem_end __ro_after_init; + /* Get size in bytes used by the memory region */ static inline unsigned long get_padding(struct kaslr_memory_region *region) { @@ -82,6 +93,8 @@ void __init kernel_randomize_memory(void) BUILD_BUG_ON(vaddr_end != CPU_ENTRY_AREA_BASE); BUILD_BUG_ON(vaddr_end > __START_KERNEL_map); + /* Preset the end of the possible address space for physical memory */ + physmem_end = ((1ULL << MAX_PHYSMEM_BITS) - 1); if (!kaslr_memory_enabled()) return; @@ -128,11 +141,18 @@ void __init kernel_randomize_memory(void) vaddr += entropy; *kaslr_regions[i].base = vaddr; + /* Calculate the end of the region */ + vaddr += get_padding(&kaslr_regions[i]); /* - * Jump the region and add a minimum padding based on - * randomization alignment. + * KASLR trims the maximum possible size of the + * direct-map. Update the physmem_end boundary. + * No rounding required as the region starts + * PUD aligned and size is in units of TB. */ - vaddr += get_padding(&kaslr_regions[i]); + if (kaslr_regions[i].end) + *kaslr_regions[i].end = __pa_nodebug(vaddr - 1); + + /* Add a minimum padding based on randomization alignment. */ vaddr = round_up(vaddr + 1, PUD_SIZE); remain_entropy -= entropy; } diff --git a/arch/x86/mm/pti.c b/arch/x86/mm/pti.c index 41d8c8f475a7c..83a6bdf0b498e 100644 --- a/arch/x86/mm/pti.c +++ b/arch/x86/mm/pti.c @@ -241,7 +241,7 @@ static pmd_t *pti_user_pagetable_walk_pmd(unsigned long address) * * Returns a pointer to a PTE on success, or NULL on failure. */ -static pte_t *pti_user_pagetable_walk_pte(unsigned long address) +static pte_t *pti_user_pagetable_walk_pte(unsigned long address, bool late_text) { gfp_t gfp = (GFP_KERNEL | __GFP_NOTRACK | __GFP_ZERO); pmd_t *pmd; @@ -251,10 +251,15 @@ static pte_t *pti_user_pagetable_walk_pte(unsigned long address) if (!pmd) return NULL; - /* We can't do anything sensible if we hit a large mapping. */ + /* Large PMD mapping found */ if (pmd_large(*pmd)) { - WARN_ON(1); - return NULL; + /* Clear the PMD if we hit a large mapping from the first round */ + if (late_text) { + set_pmd(pmd, __pmd(0)); + } else { + WARN_ON_ONCE(1); + return NULL; + } } if (pmd_none(*pmd)) { @@ -283,7 +288,7 @@ static void __init pti_setup_vsyscall(void) if (!pte || WARN_ON(level != PG_LEVEL_4K) || pte_none(*pte)) return; - target_pte = pti_user_pagetable_walk_pte(VSYSCALL_ADDR); + target_pte = pti_user_pagetable_walk_pte(VSYSCALL_ADDR, false); if (WARN_ON(!target_pte)) return; @@ -301,7 +306,7 @@ enum pti_clone_level { static void pti_clone_pgtable(unsigned long start, unsigned long end, - enum pti_clone_level level) + enum pti_clone_level level, bool late_text) { unsigned long addr; @@ -390,7 +395,7 @@ pti_clone_pgtable(unsigned long start, unsigned long end, return; /* Allocate PTE in the user page-table */ - target_pte = pti_user_pagetable_walk_pte(addr); + target_pte = pti_user_pagetable_walk_pte(addr, late_text); if (WARN_ON(!target_pte)) return; @@ -452,7 +457,7 @@ static void __init pti_clone_user_shared(void) phys_addr_t pa = per_cpu_ptr_to_phys((void *)va); pte_t *target_pte; - target_pte = pti_user_pagetable_walk_pte(va); + target_pte = pti_user_pagetable_walk_pte(va, false); if (WARN_ON(!target_pte)) return; @@ -475,7 +480,7 @@ static void __init pti_clone_user_shared(void) start = CPU_ENTRY_AREA_BASE; end = start + (PAGE_SIZE * CPU_ENTRY_AREA_PAGES); - pti_clone_pgtable(start, end, PTI_CLONE_PMD); + pti_clone_pgtable(start, end, PTI_CLONE_PMD, false); } #endif /* CONFIG_X86_64 */ @@ -492,11 +497,11 @@ static void __init pti_setup_espfix64(void) /* * Clone the populated PMDs of the entry text and force it RO. */ -static void pti_clone_entry_text(void) +static void pti_clone_entry_text(bool late) { pti_clone_pgtable((unsigned long) __entry_text_start, (unsigned long) __entry_text_end, - PTI_LEVEL_KERNEL_IMAGE); + PTI_LEVEL_KERNEL_IMAGE, late); } /* @@ -571,7 +576,7 @@ static void pti_clone_kernel_text(void) * pti_set_kernel_image_nonglobal() did to clear the * global bit. */ - pti_clone_pgtable(start, end_clone, PTI_LEVEL_KERNEL_IMAGE); + pti_clone_pgtable(start, end_clone, PTI_LEVEL_KERNEL_IMAGE, false); /* * pti_clone_pgtable() will set the global bit in any PMDs @@ -638,8 +643,15 @@ void __init pti_init(void) /* Undo all global bits from the init pagetables in head_64.S: */ pti_set_kernel_image_nonglobal(); + /* Replace some of the global bits just for shared entry text: */ - pti_clone_entry_text(); + /* + * This is very early in boot. Device and Late initcalls can do + * modprobe before free_initmem() and mark_readonly(). This + * pti_clone_entry_text() allows those user-mode-helpers to function, + * but notably the text is still RW. + */ + pti_clone_entry_text(false); pti_setup_espfix64(); pti_setup_vsyscall(); } @@ -656,10 +668,11 @@ void pti_finalize(void) if (!boot_cpu_has(X86_FEATURE_PTI)) return; /* - * We need to clone everything (again) that maps parts of the - * kernel image. + * This is after free_initmem() (all initcalls are done) and we've done + * mark_readonly(). Text is now NX which might've split some PMDs + * relative to the early clone. */ - pti_clone_entry_text(); + pti_clone_entry_text(true); pti_clone_kernel_text(); debug_checkwx_user(); diff --git a/arch/x86/mm/tlb.c b/arch/x86/mm/tlb.c index 453ea95b667da..2fbae48f0b470 100644 --- a/arch/x86/mm/tlb.c +++ b/arch/x86/mm/tlb.c @@ -497,9 +497,9 @@ void switch_mm_irqs_off(struct mm_struct *prev, struct mm_struct *next, { struct mm_struct *real_prev = this_cpu_read(cpu_tlbstate.loaded_mm); u16 prev_asid = this_cpu_read(cpu_tlbstate.loaded_mm_asid); - unsigned long new_lam = mm_lam_cr3_mask(next); bool was_lazy = this_cpu_read(cpu_tlbstate_shared.is_lazy); unsigned cpu = smp_processor_id(); + unsigned long new_lam; u64 next_tlb_gen; bool need_flush; u16 new_asid; @@ -622,9 +622,7 @@ void switch_mm_irqs_off(struct mm_struct *prev, struct mm_struct *next, cpumask_clear_cpu(cpu, mm_cpumask(real_prev)); } - /* - * Start remote flushes and then read tlb_gen. - */ + /* Start receiving IPIs and then read tlb_gen (and LAM below) */ if (next != &init_mm) cpumask_set_cpu(cpu, mm_cpumask(next)); next_tlb_gen = atomic64_read(&next->context.tlb_gen); @@ -636,6 +634,7 @@ void switch_mm_irqs_off(struct mm_struct *prev, struct mm_struct *next, barrier(); } + new_lam = mm_lam_cr3_mask(next); set_tlbstate_lam_mode(next); if (need_flush) { this_cpu_write(cpu_tlbstate.ctxs[new_asid].ctx_id, next->context.ctx_id); diff --git a/arch/x86/net/TEST_MAPPING b/arch/x86/net/TEST_MAPPING index 42a6eeece2950..18d2e6dbf2c6d 100644 --- a/arch/x86/net/TEST_MAPPING +++ b/arch/x86/net/TEST_MAPPING @@ -255,5 +255,21 @@ } ] } + ], + "kernel-presubmit": [ + { + "name": "CtsIncrementalInstallHostTestCases", + "options": [ + { + "include-filter": "android.incrementalinstall.cts.IncrementalInstallTest" + } + ] + }, + { + "name": "CtsRootBluetoothTestCases" + }, + { + "name": "vts_kernel_net_tests" + } ] } diff --git a/arch/x86/net/bpf_jit_comp.c b/arch/x86/net/bpf_jit_comp.c index 878a4c6dd7565..a50c99e9b5c01 100644 --- a/arch/x86/net/bpf_jit_comp.c +++ b/arch/x86/net/bpf_jit_comp.c @@ -58,6 +58,56 @@ static bool is_imm8(int value) 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) { return value == (s64)(s32)value; @@ -1774,7 +1824,7 @@ st: if (is_imm8(insn->off)) return -EFAULT; } jmp_offset = addrs[i + insn->off] - addrs[i]; - if (is_imm8(jmp_offset)) { + if (is_imm8_jmp_offset(jmp_offset)) { if (jmp_padding) { /* To keep the jmp_offset valid, the extra bytes are * padded before the jump insn, so we subtract the @@ -1856,7 +1906,7 @@ st: if (is_imm8(insn->off)) break; } emit_jmp: - if (is_imm8(jmp_offset)) { + if (is_imm8_jmp_offset(jmp_offset)) { if (jmp_padding) { /* To avoid breaking jmp_offset, the extra bytes * are padded before the actual jmp insn, so diff --git a/arch/x86/pci/fixup.c b/arch/x86/pci/fixup.c index b33afb240601b..98a9bb92d75c8 100644 --- a/arch/x86/pci/fixup.c +++ b/arch/x86/pci/fixup.c @@ -980,7 +980,7 @@ static void amd_rp_pme_suspend(struct pci_dev *dev) return; rp = pcie_find_root_port(dev); - if (!rp->pm_cap) + if (!rp || !rp->pm_cap) return; rp->pme_support &= ~((PCI_PM_CAP_PME_D3hot|PCI_PM_CAP_PME_D3cold) >> @@ -994,7 +994,7 @@ static void amd_rp_pme_resume(struct pci_dev *dev) u16 pmc; rp = pcie_find_root_port(dev); - if (!rp->pm_cap) + if (!rp || !rp->pm_cap) return; pci_read_config_word(rp, rp->pm_cap + PCI_PM_PMC, &pmc); diff --git a/arch/x86/xen/mmu_pv.c b/arch/x86/xen/mmu_pv.c index 9d4a9311e819b..6b201e64d8abc 100644 --- a/arch/x86/xen/mmu_pv.c +++ b/arch/x86/xen/mmu_pv.c @@ -2019,10 +2019,7 @@ void __init xen_reserve_special_pages(void) void __init xen_pt_check_e820(void) { - if (xen_is_e820_reserved(xen_pt_base, xen_pt_size)) { - xen_raw_console_write("Xen hypervisor allocated page table memory conflicts with E820 map\n"); - BUG(); - } + xen_chk_is_e820_usable(xen_pt_base, xen_pt_size, "page table"); } static unsigned char dummy_mapping[PAGE_SIZE] __page_aligned_bss; diff --git a/arch/x86/xen/p2m.c b/arch/x86/xen/p2m.c index 4c2bf989edafc..11b5c042d4fae 100644 --- a/arch/x86/xen/p2m.c +++ b/arch/x86/xen/p2m.c @@ -70,6 +70,7 @@ #include #include #include +#include #include #include @@ -80,6 +81,7 @@ #include #include #include +#include #include "multicalls.h" #include "xen-ops.h" @@ -794,6 +796,102 @@ int clear_foreign_p2m_mapping(struct gnttab_unmap_grant_ref *unmap_ops, return ret; } +/* Remapped non-RAM areas */ +#define NR_NONRAM_REMAP 4 +static struct nonram_remap { + phys_addr_t maddr; + phys_addr_t paddr; + size_t size; +} xen_nonram_remap[NR_NONRAM_REMAP] __ro_after_init; +static unsigned int nr_nonram_remap __ro_after_init; + +/* + * Do the real remapping of non-RAM regions as specified in the + * xen_nonram_remap[] array. + * In case of an error just crash the system. + */ +void __init xen_do_remap_nonram(void) +{ + unsigned int i; + unsigned int remapped = 0; + const struct nonram_remap *remap = xen_nonram_remap; + unsigned long pfn, mfn, end_pfn; + + for (i = 0; i < nr_nonram_remap; i++) { + end_pfn = PFN_UP(remap->paddr + remap->size); + pfn = PFN_DOWN(remap->paddr); + mfn = PFN_DOWN(remap->maddr); + while (pfn < end_pfn) { + if (!set_phys_to_machine(pfn, mfn)) + panic("Failed to set p2m mapping for pfn=%lx mfn=%lx\n", + pfn, mfn); + + pfn++; + mfn++; + remapped++; + } + + remap++; + } + + pr_info("Remapped %u non-RAM page(s)\n", remapped); +} + +#ifdef CONFIG_ACPI +/* + * Xen variant of acpi_os_ioremap() taking potentially remapped non-RAM + * regions into account. + * Any attempt to map an area crossing a remap boundary will produce a + * WARN() splat. + * phys is related to remap->maddr on input and will be rebased to remap->paddr. + */ +static void __iomem *xen_acpi_os_ioremap(acpi_physical_address phys, + acpi_size size) +{ + unsigned int i; + const struct nonram_remap *remap = xen_nonram_remap; + + for (i = 0; i < nr_nonram_remap; i++) { + if (phys + size > remap->maddr && + phys < remap->maddr + remap->size) { + WARN_ON(phys < remap->maddr || + phys + size > remap->maddr + remap->size); + phys += remap->paddr - remap->maddr; + break; + } + } + + return x86_acpi_os_ioremap(phys, size); +} +#endif /* CONFIG_ACPI */ + +/* + * Add a new non-RAM remap entry. + * In case of no free entry found, just crash the system. + */ +void __init xen_add_remap_nonram(phys_addr_t maddr, phys_addr_t paddr, + unsigned long size) +{ + BUG_ON((maddr & ~PAGE_MASK) != (paddr & ~PAGE_MASK)); + + if (nr_nonram_remap == NR_NONRAM_REMAP) { + xen_raw_console_write("Number of required E820 entry remapping actions exceed maximum value\n"); + BUG(); + } + +#ifdef CONFIG_ACPI + /* Switch to the Xen acpi_os_ioremap() variant. */ + if (nr_nonram_remap == 0) + acpi_os_ioremap = xen_acpi_os_ioremap; +#endif + + xen_nonram_remap[nr_nonram_remap].maddr = maddr; + xen_nonram_remap[nr_nonram_remap].paddr = paddr; + xen_nonram_remap[nr_nonram_remap].size = size; + + nr_nonram_remap++; +} + #ifdef CONFIG_XEN_DEBUG_FS #include #include "debugfs.h" diff --git a/arch/x86/xen/setup.c b/arch/x86/xen/setup.c index 380591028cb8f..dc822124cacb9 100644 --- a/arch/x86/xen/setup.c +++ b/arch/x86/xen/setup.c @@ -15,12 +15,12 @@ #include #include #include +#include #include #include #include #include -#include #include #include #include @@ -47,6 +47,9 @@ bool xen_pv_pci_possible; /* E820 map used during setting up memory. */ static struct e820_table xen_e820_table __initdata; +/* Number of initially usable memory pages. */ +static unsigned long ini_nr_pages __initdata; + /* * Buffer used to remap identity mapped pages. We only need the virtual space. * The physical page behind this address is remapped as needed to different @@ -213,7 +216,7 @@ static int __init xen_free_mfn(unsigned long mfn) * as a fallback if the remapping fails. */ static void __init xen_set_identity_and_release_chunk(unsigned long start_pfn, - unsigned long end_pfn, unsigned long nr_pages) + unsigned long end_pfn) { unsigned long pfn, end; int ret; @@ -221,7 +224,7 @@ static void __init xen_set_identity_and_release_chunk(unsigned long start_pfn, WARN_ON(start_pfn > end_pfn); /* Release pages first. */ - end = min(end_pfn, nr_pages); + end = min(end_pfn, ini_nr_pages); for (pfn = start_pfn; pfn < end; pfn++) { unsigned long mfn = pfn_to_mfn(pfn); @@ -342,15 +345,14 @@ static void __init xen_do_set_identity_and_remap_chunk( * to Xen and not remapped. */ static unsigned long __init xen_set_identity_and_remap_chunk( - unsigned long start_pfn, unsigned long end_pfn, unsigned long nr_pages, - unsigned long remap_pfn) + unsigned long start_pfn, unsigned long end_pfn, unsigned long remap_pfn) { unsigned long pfn; unsigned long i = 0; unsigned long n = end_pfn - start_pfn; if (remap_pfn == 0) - remap_pfn = nr_pages; + remap_pfn = ini_nr_pages; while (i < n) { unsigned long cur_pfn = start_pfn + i; @@ -359,19 +361,19 @@ static unsigned long __init xen_set_identity_and_remap_chunk( unsigned long remap_range_size; /* Do not remap pages beyond the current allocation */ - if (cur_pfn >= nr_pages) { + if (cur_pfn >= ini_nr_pages) { /* Identity map remaining pages */ set_phys_range_identity(cur_pfn, cur_pfn + size); break; } - if (cur_pfn + size > nr_pages) - size = nr_pages - cur_pfn; + if (cur_pfn + size > ini_nr_pages) + size = ini_nr_pages - cur_pfn; remap_range_size = xen_find_pfn_range(&remap_pfn); if (!remap_range_size) { pr_warn("Unable to find available pfn range, not remapping identity pages\n"); xen_set_identity_and_release_chunk(cur_pfn, - cur_pfn + left, nr_pages); + cur_pfn + left); break; } /* Adjust size to fit in current e820 RAM region */ @@ -398,18 +400,18 @@ static unsigned long __init xen_set_identity_and_remap_chunk( } static unsigned long __init xen_count_remap_pages( - unsigned long start_pfn, unsigned long end_pfn, unsigned long nr_pages, + unsigned long start_pfn, unsigned long end_pfn, unsigned long remap_pages) { - if (start_pfn >= nr_pages) + if (start_pfn >= ini_nr_pages) return remap_pages; - return remap_pages + min(end_pfn, nr_pages) - start_pfn; + return remap_pages + min(end_pfn, ini_nr_pages) - start_pfn; } -static unsigned long __init xen_foreach_remap_area(unsigned long nr_pages, +static unsigned long __init xen_foreach_remap_area( unsigned long (*func)(unsigned long start_pfn, unsigned long end_pfn, - unsigned long nr_pages, unsigned long last_val)) + unsigned long last_val)) { phys_addr_t start = 0; unsigned long ret_val = 0; @@ -437,8 +439,7 @@ static unsigned long __init xen_foreach_remap_area(unsigned long nr_pages, end_pfn = PFN_UP(entry->addr); if (start_pfn < end_pfn) - ret_val = func(start_pfn, end_pfn, nr_pages, - ret_val); + ret_val = func(start_pfn, end_pfn, ret_val); start = end; } } @@ -495,6 +496,8 @@ void __init xen_remap_memory(void) set_pte_mfn(buf, mfn_save, PAGE_KERNEL); pr_info("Remapped %ld page(s)\n", remapped); + + xen_do_remap_nonram(); } static unsigned long __init xen_get_pages_limit(void) @@ -568,7 +571,7 @@ static void __init xen_ignore_unusable(void) } } -bool __init xen_is_e820_reserved(phys_addr_t start, phys_addr_t size) +static bool __init xen_is_e820_reserved(phys_addr_t start, phys_addr_t size) { struct e820_entry *entry; unsigned mapcnt; @@ -625,6 +628,111 @@ phys_addr_t __init xen_find_free_area(phys_addr_t size) return 0; } +/* + * Swap a non-RAM E820 map entry with RAM above ini_nr_pages. + * Note that the E820 map is modified accordingly, but the P2M map isn't yet. + * The adaption of the P2M must be deferred until page allocation is possible. + */ +static void __init xen_e820_swap_entry_with_ram(struct e820_entry *swap_entry) +{ + struct e820_entry *entry; + unsigned int mapcnt; + phys_addr_t mem_end = PFN_PHYS(ini_nr_pages); + phys_addr_t swap_addr, swap_size, entry_end; + + swap_addr = PAGE_ALIGN_DOWN(swap_entry->addr); + swap_size = PAGE_ALIGN(swap_entry->addr - swap_addr + swap_entry->size); + entry = xen_e820_table.entries; + + for (mapcnt = 0; mapcnt < xen_e820_table.nr_entries; mapcnt++) { + entry_end = entry->addr + entry->size; + if (entry->type == E820_TYPE_RAM && entry->size >= swap_size && + entry_end - swap_size >= mem_end) { + /* Reduce RAM entry by needed space (whole pages). */ + entry->size -= swap_size; + + /* Add new entry at the end of E820 map. */ + entry = xen_e820_table.entries + + xen_e820_table.nr_entries; + xen_e820_table.nr_entries++; + + /* Fill new entry (keep size and page offset). */ + entry->type = swap_entry->type; + entry->addr = entry_end - swap_size + + swap_addr - swap_entry->addr; + entry->size = swap_entry->size; + + /* Convert old entry to RAM, align to pages. */ + swap_entry->type = E820_TYPE_RAM; + swap_entry->addr = swap_addr; + swap_entry->size = swap_size; + + /* Remember PFN<->MFN relation for P2M update. */ + xen_add_remap_nonram(swap_addr, entry_end - swap_size, + swap_size); + + /* Order E820 table and merge entries. */ + e820__update_table(&xen_e820_table); + + return; + } + + entry++; + } + + xen_raw_console_write("No suitable area found for required E820 entry remapping action\n"); + BUG(); +} + +/* + * Look for non-RAM memory types in a specific guest physical area and move + * those away if possible (ACPI NVS only for now). + */ +static void __init xen_e820_resolve_conflicts(phys_addr_t start, + phys_addr_t size) +{ + struct e820_entry *entry; + unsigned int mapcnt; + phys_addr_t end; + + if (!size) + return; + + end = start + size; + entry = xen_e820_table.entries; + + for (mapcnt = 0; mapcnt < xen_e820_table.nr_entries; mapcnt++) { + if (entry->addr >= end) + return; + + if (entry->addr + entry->size > start && + entry->type == E820_TYPE_NVS) + xen_e820_swap_entry_with_ram(entry); + + entry++; + } +} + +/* + * Check for an area in physical memory to be usable for non-movable purposes. + * An area is considered to usable if the used E820 map lists it to be RAM or + * some other type which can be moved to higher PFNs while keeping the MFNs. + * In case the area is not usable, crash the system with an error message. + */ +void __init xen_chk_is_e820_usable(phys_addr_t start, phys_addr_t size, + const char *component) +{ + xen_e820_resolve_conflicts(start, size); + + if (!xen_is_e820_reserved(start, size)) + return; + + xen_raw_console_write("Xen hypervisor allocated "); + xen_raw_console_write(component); + xen_raw_console_write(" memory conflicts with E820 map\n"); + BUG(); +} + /* * Like memcpy, but with physical addresses for dest and src. */ @@ -684,20 +792,20 @@ static void __init xen_reserve_xen_mfnlist(void) **/ char * __init xen_memory_setup(void) { - unsigned long max_pfn, pfn_s, n_pfns; + unsigned long pfn_s, n_pfns; phys_addr_t mem_end, addr, size, chunk_size; u32 type; int rc; struct xen_memory_map memmap; unsigned long max_pages; unsigned long extra_pages = 0; + unsigned long maxmem_pages; int i; int op; xen_parse_512gb(); - max_pfn = xen_get_pages_limit(); - max_pfn = min(max_pfn, xen_start_info->nr_pages); - mem_end = PFN_PHYS(max_pfn); + ini_nr_pages = min(xen_get_pages_limit(), xen_start_info->nr_pages); + mem_end = PFN_PHYS(ini_nr_pages); memmap.nr_entries = ARRAY_SIZE(xen_e820_table.entries); set_xen_guest_handle(memmap.buffer, xen_e820_table.entries); @@ -747,13 +855,35 @@ char * __init xen_memory_setup(void) /* Make sure the Xen-supplied memory map is well-ordered. */ e820__update_table(&xen_e820_table); + /* + * Check whether the kernel itself conflicts with the target E820 map. + * Failing now is better than running into weird problems later due + * to relocating (and even reusing) pages with kernel text or data. + */ + xen_chk_is_e820_usable(__pa_symbol(_text), + __pa_symbol(_end) - __pa_symbol(_text), + "kernel"); + + /* + * Check for a conflict of the xen_start_info memory with the target + * E820 map. + */ + xen_chk_is_e820_usable(__pa(xen_start_info), sizeof(*xen_start_info), + "xen_start_info"); + + /* + * Check for a conflict of the hypervisor supplied page tables with + * the target E820 map. + */ + xen_pt_check_e820(); + max_pages = xen_get_max_pages(); /* How many extra pages do we need due to remapping? */ - max_pages += xen_foreach_remap_area(max_pfn, xen_count_remap_pages); + max_pages += xen_foreach_remap_area(xen_count_remap_pages); - if (max_pages > max_pfn) - extra_pages += max_pages - max_pfn; + if (max_pages > ini_nr_pages) + extra_pages += max_pages - ini_nr_pages; /* * Clamp the amount of extra memory to a EXTRA_MEM_RATIO @@ -762,8 +892,8 @@ char * __init xen_memory_setup(void) * Make sure we have no memory above max_pages, as this area * isn't handled by the p2m management. */ - extra_pages = min3(EXTRA_MEM_RATIO * min(max_pfn, PFN_DOWN(MAXMEM)), - extra_pages, max_pages - max_pfn); + maxmem_pages = EXTRA_MEM_RATIO * min(ini_nr_pages, PFN_DOWN(MAXMEM)); + extra_pages = min3(maxmem_pages, extra_pages, max_pages - ini_nr_pages); i = 0; addr = xen_e820_table.entries[0].addr; size = xen_e820_table.entries[0].size; @@ -819,23 +949,6 @@ char * __init xen_memory_setup(void) e820__update_table(e820_table); - /* - * Check whether the kernel itself conflicts with the target E820 map. - * Failing now is better than running into weird problems later due - * to relocating (and even reusing) pages with kernel text or data. - */ - if (xen_is_e820_reserved(__pa_symbol(_text), - __pa_symbol(__bss_stop) - __pa_symbol(_text))) { - xen_raw_console_write("Xen hypervisor allocated kernel memory conflicts with E820 map\n"); - BUG(); - } - - /* - * Check for a conflict of the hypervisor supplied page tables with - * the target E820 map. - */ - xen_pt_check_e820(); - xen_reserve_xen_mfnlist(); /* Check for a conflict of the initrd with the target E820 map. */ @@ -863,7 +976,7 @@ char * __init xen_memory_setup(void) * Set identity map on non-RAM pages and prepare remapping the * underlying RAM. */ - xen_foreach_remap_area(max_pfn, xen_set_identity_and_remap_chunk); + xen_foreach_remap_area(xen_set_identity_and_remap_chunk); pr_info("Released %ld page(s)\n", xen_released_pages); diff --git a/arch/x86/xen/xen-ops.h b/arch/x86/xen/xen-ops.h index 79cf93f2c92f1..a6a21dd055270 100644 --- a/arch/x86/xen/xen-ops.h +++ b/arch/x86/xen/xen-ops.h @@ -43,8 +43,12 @@ void xen_mm_unpin_all(void); #ifdef CONFIG_X86_64 void __init xen_relocate_p2m(void); #endif +void __init xen_do_remap_nonram(void); +void __init xen_add_remap_nonram(phys_addr_t maddr, phys_addr_t paddr, + unsigned long size); -bool __init xen_is_e820_reserved(phys_addr_t start, phys_addr_t size); +void __init xen_chk_is_e820_usable(phys_addr_t start, phys_addr_t size, + const char *component); unsigned long __ref xen_chk_extra_mem(unsigned long pfn); void __init xen_inv_extra_mem(void); void __init xen_remap_memory(void); diff --git a/block/TEST_MAPPING b/block/TEST_MAPPING index 13fa08f0296d5..03e120f0ec3a6 100644 --- a/block/TEST_MAPPING +++ b/block/TEST_MAPPING @@ -272,6 +272,40 @@ "include-filter": "android.hardware.camera2.cts.FastBasicsTest" } ] + }, + { + "name": "CtsIncrementalInstallHostTestCases", + "options": [ + { + "include-filter": "android.incrementalinstall.cts.IncrementalFeatureTest" + }, + { + "include-filter": "android.incrementalinstall.cts.IncrementalInstallTest" + } + ] + }, + { + "name": "CtsLibcoreLegacy22TestCases", + "options": [ + { + "include-filter": "android.util.cts.FloatMathTest" + } + ] + }, + { + "name": "CtsRootBluetoothTestCases" + }, + { + "name": "vts_kernel_net_tests" + }, + { + "name": "KernelAbilistTest" + }, + { + "name": "VtsAidlHalSensorsTargetTest" + }, + { + "name": "VtsBootconfigTest" } ] } diff --git a/block/bfq-iosched.c b/block/bfq-iosched.c index 3cce6de464a7b..7e0dcded5713a 100644 --- a/block/bfq-iosched.c +++ b/block/bfq-iosched.c @@ -2911,8 +2911,12 @@ bfq_setup_cooperator(struct bfq_data *bfqd, struct bfq_queue *bfqq, struct bfq_iocq_bfqq_data *bfqq_data = &bic->bfqq_data[a_idx]; /* if a merge has already been setup, then proceed with that first */ - if (bfqq->new_bfqq) - return bfqq->new_bfqq; + new_bfqq = bfqq->new_bfqq; + if (new_bfqq) { + while (new_bfqq->new_bfqq) + new_bfqq = new_bfqq->new_bfqq; + return new_bfqq; + } /* * Check delayed stable merge for rotational or non-queueing @@ -3125,10 +3129,12 @@ void bfq_release_process_ref(struct bfq_data *bfqd, struct bfq_queue *bfqq) bfq_put_queue(bfqq); } -static void -bfq_merge_bfqqs(struct bfq_data *bfqd, struct bfq_io_cq *bic, - struct bfq_queue *bfqq, struct bfq_queue *new_bfqq) +static struct bfq_queue *bfq_merge_bfqqs(struct bfq_data *bfqd, + struct bfq_io_cq *bic, + struct bfq_queue *bfqq) { + struct bfq_queue *new_bfqq = bfqq->new_bfqq; + bfq_log_bfqq(bfqd, bfqq, "merging with queue %lu", (unsigned long)new_bfqq->pid); /* Save weight raising and idle window of the merged queues */ @@ -3222,6 +3228,8 @@ bfq_merge_bfqqs(struct bfq_data *bfqd, struct bfq_io_cq *bic, bfq_reassign_last_bfqq(bfqq, new_bfqq); bfq_release_process_ref(bfqd, bfqq); + + return new_bfqq; } static bool bfq_allow_bio_merge(struct request_queue *q, struct request *rq, @@ -3257,14 +3265,8 @@ static bool bfq_allow_bio_merge(struct request_queue *q, struct request *rq, * fulfilled, i.e., bic can be redirected to new_bfqq * and bfqq can be put. */ - bfq_merge_bfqqs(bfqd, bfqd->bio_bic, bfqq, - new_bfqq); - /* - * If we get here, bio will be queued into new_queue, - * so use new_bfqq to decide whether bio and rq can be - * merged. - */ - bfqq = new_bfqq; + while (bfqq != new_bfqq) + bfqq = bfq_merge_bfqqs(bfqd, bfqd->bio_bic, bfqq); /* * Change also bqfd->bio_bfqq, as @@ -5699,9 +5701,7 @@ bfq_do_early_stable_merge(struct bfq_data *bfqd, struct bfq_queue *bfqq, * state before killing it. */ bfqq->bic = bic; - bfq_merge_bfqqs(bfqd, bic, bfqq, new_bfqq); - - return new_bfqq; + return bfq_merge_bfqqs(bfqd, bic, bfqq); } /* @@ -6156,6 +6156,7 @@ static bool __bfq_insert_request(struct bfq_data *bfqd, struct request *rq) bool waiting, idle_timer_disabled = false; if (new_bfqq) { + struct bfq_queue *old_bfqq = bfqq; /* * Release the request's reference to the old bfqq * and make sure one is taken to the shared queue. @@ -6172,18 +6173,18 @@ static bool __bfq_insert_request(struct bfq_data *bfqd, struct request *rq) * new_bfqq. */ if (bic_to_bfqq(RQ_BIC(rq), true, - bfq_actuator_index(bfqd, rq->bio)) == bfqq) - bfq_merge_bfqqs(bfqd, RQ_BIC(rq), - bfqq, new_bfqq); + bfq_actuator_index(bfqd, rq->bio)) == bfqq) { + while (bfqq != new_bfqq) + bfqq = bfq_merge_bfqqs(bfqd, RQ_BIC(rq), bfqq); + } - bfq_clear_bfqq_just_created(bfqq); + bfq_clear_bfqq_just_created(old_bfqq); /* * rq is about to be enqueued into new_bfqq, * release rq reference on bfqq */ - bfq_put_queue(bfqq); + bfq_put_queue(old_bfqq); rq->elv.priv[1] = new_bfqq; - bfqq = new_bfqq; } bfq_update_io_thinktime(bfqd, bfqq); @@ -6721,7 +6722,7 @@ bfq_split_bfqq(struct bfq_io_cq *bic, struct bfq_queue *bfqq) { bfq_log_bfqq(bfqq->bfqd, bfqq, "splitting queue"); - if (bfqq_process_refs(bfqq) == 1) { + if (bfqq_process_refs(bfqq) == 1 && !bfqq->new_bfqq) { bfqq->pid = current->pid; bfq_clear_bfqq_coop(bfqq); bfq_clear_bfqq_split_coop(bfqq); @@ -6819,6 +6820,31 @@ static void bfq_prepare_request(struct request *rq) rq->elv.priv[0] = rq->elv.priv[1] = NULL; } +static struct bfq_queue *bfq_waker_bfqq(struct bfq_queue *bfqq) +{ + struct bfq_queue *new_bfqq = bfqq->new_bfqq; + struct bfq_queue *waker_bfqq = bfqq->waker_bfqq; + + if (!waker_bfqq) + return NULL; + + while (new_bfqq) { + if (new_bfqq == waker_bfqq) { + /* + * If waker_bfqq is in the merge chain, and current + * is the only procress. + */ + if (bfqq_process_refs(waker_bfqq) == 1) + return NULL; + break; + } + + new_bfqq = new_bfqq->new_bfqq; + } + + return waker_bfqq; +} + /* * If needed, init rq, allocate bfq data structures associated with * rq, and increment reference counters in the destination bfq_queue @@ -6880,7 +6906,7 @@ static struct bfq_queue *bfq_init_rq(struct request *rq) /* If the queue was seeky for too long, break it apart. */ if (bfq_bfqq_coop(bfqq) && bfq_bfqq_split_coop(bfqq) && !bic->bfqq_data[a_idx].stably_merged) { - struct bfq_queue *old_bfqq = bfqq; + struct bfq_queue *waker_bfqq = bfq_waker_bfqq(bfqq); /* Update bic before losing reference to bfqq */ if (bfq_bfqq_in_large_burst(bfqq)) @@ -6900,7 +6926,7 @@ static struct bfq_queue *bfq_init_rq(struct request *rq) bfqq_already_existing = true; if (!bfqq_already_existing) { - bfqq->waker_bfqq = old_bfqq->waker_bfqq; + bfqq->waker_bfqq = waker_bfqq; bfqq->tentative_waker_bfqq = NULL; /* @@ -6910,7 +6936,7 @@ static struct bfq_queue *bfq_init_rq(struct request *rq) * woken_list of the waker. See * bfq_check_waker for details. */ - if (bfqq->waker_bfqq) + if (waker_bfqq) hlist_add_head(&bfqq->woken_list_node, &bfqq->waker_bfqq->woken_list); } @@ -6932,7 +6958,8 @@ static struct bfq_queue *bfq_init_rq(struct request *rq) * addition, if the queue has also just been split, we have to * resume its state. */ - if (likely(bfqq != &bfqd->oom_bfqq) && bfqq_process_refs(bfqq) == 1) { + if (likely(bfqq != &bfqd->oom_bfqq) && !bfqq->new_bfqq && + bfqq_process_refs(bfqq) == 1) { bfqq->bic = bic; if (split) { /* diff --git a/block/blk-core.c b/block/blk-core.c index 67d23d0cf524d..4ad61822e3afc 100644 --- a/block/blk-core.c +++ b/block/blk-core.c @@ -611,9 +611,14 @@ static inline blk_status_t blk_check_zone_append(struct request_queue *q, static void __submit_bio(struct bio *bio) { + /* If plug is not used, add new plug here to cache nsecs time. */ + struct blk_plug plug; + if (unlikely(!blk_crypto_bio_prep(&bio))) return; + blk_start_plug(&plug); + if (!bio->bi_bdev->bd_has_submit_bio) { blk_mq_submit_bio(bio); } else if (likely(bio_queue_enter(bio) == 0)) { @@ -622,6 +627,8 @@ static void __submit_bio(struct bio *bio) disk->fops->submit_bio(bio); blk_queue_exit(disk->queue); } + + blk_finish_plug(&plug); } /* diff --git a/block/blk-iocost.c b/block/blk-iocost.c index 0dca77591d66c..c3cb9c20b306c 100644 --- a/block/blk-iocost.c +++ b/block/blk-iocost.c @@ -2076,7 +2076,7 @@ static void ioc_forgive_debts(struct ioc *ioc, u64 usage_us_sum, int nr_debtors, struct ioc_now *now) { struct ioc_gq *iocg; - u64 dur, usage_pct, nr_cycles; + u64 dur, usage_pct, nr_cycles, nr_cycles_shift; /* if no debtor, reset the cycle */ if (!nr_debtors) { @@ -2138,10 +2138,12 @@ static void ioc_forgive_debts(struct ioc *ioc, u64 usage_us_sum, int nr_debtors, old_debt = iocg->abs_vdebt; old_delay = iocg->delay; + nr_cycles_shift = min_t(u64, nr_cycles, BITS_PER_LONG - 1); if (iocg->abs_vdebt) - iocg->abs_vdebt = iocg->abs_vdebt >> nr_cycles ?: 1; + iocg->abs_vdebt = iocg->abs_vdebt >> nr_cycles_shift ?: 1; + if (iocg->delay) - iocg->delay = iocg->delay >> nr_cycles ?: 1; + iocg->delay = iocg->delay >> nr_cycles_shift ?: 1; iocg_kick_waitq(iocg, true, now); diff --git a/block/blk-mq.c b/block/blk-mq.c index 7f3b938a9cfb1..f854d00af2bd1 100644 --- a/block/blk-mq.c +++ b/block/blk-mq.c @@ -32,6 +32,8 @@ #include +#include + #include #include "blk.h" #include "blk-mq.h" @@ -1503,6 +1505,12 @@ static void blk_mq_requeue_work(struct work_struct *work) void blk_mq_kick_requeue_list(struct request_queue *q) { + bool skip = false; + + trace_android_vh_blk_mq_kick_requeue_list(q, 0, &skip); + if (skip) + return; + kblockd_mod_delayed_work_on(WORK_CPU_UNBOUND, &q->requeue_work, 0); } EXPORT_SYMBOL(blk_mq_kick_requeue_list); @@ -1510,6 +1518,13 @@ EXPORT_SYMBOL(blk_mq_kick_requeue_list); void blk_mq_delay_kick_requeue_list(struct request_queue *q, unsigned long msecs) { + bool skip = false; + + trace_android_vh_blk_mq_kick_requeue_list(q, + msecs_to_jiffies(msecs), &skip); + if (skip) + return; + kblockd_mod_delayed_work_on(WORK_CPU_UNBOUND, &q->requeue_work, msecs_to_jiffies(msecs)); } @@ -2243,8 +2258,16 @@ static int blk_mq_hctx_next_cpu(struct blk_mq_hw_ctx *hctx) */ void blk_mq_delay_run_hw_queue(struct blk_mq_hw_ctx *hctx, unsigned long msecs) { + bool skip = false; + if (unlikely(blk_mq_hctx_stopped(hctx))) return; + + trace_android_vh_blk_mq_delay_run_hw_queue(blk_mq_hctx_next_cpu(hctx), + hctx, msecs_to_jiffies(msecs), &skip); + if (skip) + return; + kblockd_mod_delayed_work_on(blk_mq_hctx_next_cpu(hctx), &hctx->run_work, msecs_to_jiffies(msecs)); } diff --git a/block/blk-rq-qos.c b/block/blk-rq-qos.c index dd7310c94713c..dc510f493ba57 100644 --- a/block/blk-rq-qos.c +++ b/block/blk-rq-qos.c @@ -219,8 +219,8 @@ static int rq_qos_wake_function(struct wait_queue_entry *curr, data->got_token = true; smp_wmb(); - list_del_init(&curr->entry); wake_up_process(data->task); + list_del_init_careful(&curr->entry); return 1; } diff --git a/block/partitions/core.c b/block/partitions/core.c index 962e4b57d64ab..ef7697567cbce 100644 --- a/block/partitions/core.c +++ b/block/partitions/core.c @@ -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); if (part->bd_meta_info && part->bd_meta_info->volname[0]) 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; } @@ -574,9 +576,11 @@ static bool blk_add_partition(struct gendisk *disk, part = add_partition(disk, p, from, size, state->parts[p].flags, &state->parts[p].info); - if (IS_ERR(part) && PTR_ERR(part) != -ENXIO) { - printk(KERN_ERR " %s: p%d could not be added: %ld\n", - disk->disk_name, p, -PTR_ERR(part)); + if (IS_ERR(part)) { + if (PTR_ERR(part) != -ENXIO) { + printk(KERN_ERR " %s: p%d could not be added: %pe\n", + disk->disk_name, p, part); + } return true; } diff --git a/crypto/asymmetric_keys/asymmetric_type.c b/crypto/asymmetric_keys/asymmetric_type.c index a5da8ccd353ef..43af5fa510c09 100644 --- a/crypto/asymmetric_keys/asymmetric_type.c +++ b/crypto/asymmetric_keys/asymmetric_type.c @@ -60,17 +60,18 @@ struct key *find_asymmetric_key(struct key *keyring, char *req, *p; int len; - WARN_ON(!id_0 && !id_1 && !id_2); - if (id_0) { lookup = id_0->data; len = id_0->len; } else if (id_1) { lookup = id_1->data; len = id_1->len; - } else { + } else if (id_2) { lookup = id_2->data; len = id_2->len; + } else { + WARN_ON(1); + return ERR_PTR(-EINVAL); } /* Construct an identifier "id:". */ diff --git a/crypto/simd.c b/crypto/simd.c index edaa479a1ec5e..d109866641a26 100644 --- a/crypto/simd.c +++ b/crypto/simd.c @@ -136,27 +136,19 @@ static int simd_skcipher_init(struct crypto_skcipher *tfm) return 0; } -struct simd_skcipher_alg *simd_skcipher_create_compat(const char *algname, +struct simd_skcipher_alg *simd_skcipher_create_compat(struct skcipher_alg *ialg, + const char *algname, const char *drvname, const char *basename) { struct simd_skcipher_alg *salg; - struct crypto_skcipher *tfm; - struct skcipher_alg *ialg; struct skcipher_alg *alg; int err; - tfm = crypto_alloc_skcipher(basename, CRYPTO_ALG_INTERNAL, - CRYPTO_ALG_INTERNAL | CRYPTO_ALG_ASYNC); - if (IS_ERR(tfm)) - return ERR_CAST(tfm); - - ialg = crypto_skcipher_alg(tfm); - salg = kzalloc(sizeof(*salg), GFP_KERNEL); if (!salg) { salg = ERR_PTR(-ENOMEM); - goto out_put_tfm; + goto out; } salg->ialg_name = basename; @@ -195,30 +187,16 @@ struct simd_skcipher_alg *simd_skcipher_create_compat(const char *algname, if (err) goto out_free_salg; -out_put_tfm: - crypto_free_skcipher(tfm); +out: return salg; out_free_salg: kfree(salg); salg = ERR_PTR(err); - goto out_put_tfm; + goto out; } EXPORT_SYMBOL_GPL(simd_skcipher_create_compat); -struct simd_skcipher_alg *simd_skcipher_create(const char *algname, - const char *basename) -{ - char drvname[CRYPTO_MAX_ALG_NAME]; - - if (snprintf(drvname, CRYPTO_MAX_ALG_NAME, "simd-%s", basename) >= - CRYPTO_MAX_ALG_NAME) - return ERR_PTR(-ENAMETOOLONG); - - return simd_skcipher_create_compat(algname, drvname, basename); -} -EXPORT_SYMBOL_GPL(simd_skcipher_create); - void simd_skcipher_free(struct simd_skcipher_alg *salg) { crypto_unregister_skcipher(&salg->alg); @@ -246,7 +224,7 @@ int simd_register_skciphers_compat(struct skcipher_alg *algs, int count, algname = algs[i].base.cra_name + 2; drvname = algs[i].base.cra_driver_name + 2; basename = algs[i].base.cra_driver_name; - simd = simd_skcipher_create_compat(algname, drvname, basename); + simd = simd_skcipher_create_compat(algs + i, algname, drvname, basename); err = PTR_ERR(simd); if (IS_ERR(simd)) goto err_unregister; @@ -383,27 +361,19 @@ static int simd_aead_init(struct crypto_aead *tfm) return 0; } -struct simd_aead_alg *simd_aead_create_compat(const char *algname, - const char *drvname, - const char *basename) +static struct simd_aead_alg *simd_aead_create_compat(struct aead_alg *ialg, + const char *algname, + const char *drvname, + const char *basename) { struct simd_aead_alg *salg; - struct crypto_aead *tfm; - struct aead_alg *ialg; struct aead_alg *alg; int err; - tfm = crypto_alloc_aead(basename, CRYPTO_ALG_INTERNAL, - CRYPTO_ALG_INTERNAL | CRYPTO_ALG_ASYNC); - if (IS_ERR(tfm)) - return ERR_CAST(tfm); - - ialg = crypto_aead_alg(tfm); - salg = kzalloc(sizeof(*salg), GFP_KERNEL); if (!salg) { salg = ERR_PTR(-ENOMEM); - goto out_put_tfm; + goto out; } salg->ialg_name = basename; @@ -442,36 +412,20 @@ struct simd_aead_alg *simd_aead_create_compat(const char *algname, if (err) goto out_free_salg; -out_put_tfm: - crypto_free_aead(tfm); +out: return salg; out_free_salg: kfree(salg); salg = ERR_PTR(err); - goto out_put_tfm; -} -EXPORT_SYMBOL_GPL(simd_aead_create_compat); - -struct simd_aead_alg *simd_aead_create(const char *algname, - const char *basename) -{ - char drvname[CRYPTO_MAX_ALG_NAME]; - - if (snprintf(drvname, CRYPTO_MAX_ALG_NAME, "simd-%s", basename) >= - CRYPTO_MAX_ALG_NAME) - return ERR_PTR(-ENAMETOOLONG); - - return simd_aead_create_compat(algname, drvname, basename); + goto out; } -EXPORT_SYMBOL_GPL(simd_aead_create); -void simd_aead_free(struct simd_aead_alg *salg) +static void simd_aead_free(struct simd_aead_alg *salg) { crypto_unregister_aead(&salg->alg); kfree(salg); } -EXPORT_SYMBOL_GPL(simd_aead_free); int simd_register_aeads_compat(struct aead_alg *algs, int count, struct simd_aead_alg **simd_algs) @@ -493,7 +447,7 @@ int simd_register_aeads_compat(struct aead_alg *algs, int count, algname = algs[i].base.cra_name + 2; drvname = algs[i].base.cra_driver_name + 2; basename = algs[i].base.cra_driver_name; - simd = simd_aead_create_compat(algname, drvname, basename); + simd = simd_aead_create_compat(algs + i, algname, drvname, basename); err = PTR_ERR(simd); if (IS_ERR(simd)) goto err_unregister; diff --git a/crypto/xor.c b/crypto/xor.c index 8e72e5d5db0de..56aa3169e8717 100644 --- a/crypto/xor.c +++ b/crypto/xor.c @@ -83,33 +83,30 @@ static void __init do_xor_speed(struct xor_block_template *tmpl, void *b1, void *b2) { int speed; - int i, j; - ktime_t min, start, diff; + unsigned long reps; + ktime_t min, start, t0; tmpl->next = template_list; template_list = tmpl; preempt_disable(); - min = (ktime_t)S64_MAX; - for (i = 0; i < 3; i++) { - start = ktime_get(); - for (j = 0; j < REPS; j++) { - mb(); /* prevent loop optimization */ - tmpl->do_2(BENCH_SIZE, b1, b2); - mb(); - } - diff = ktime_sub(ktime_get(), start); - if (diff < min) - min = diff; - } + reps = 0; + t0 = ktime_get(); + /* delay start until time has advanced */ + while ((start = ktime_get()) == t0) + cpu_relax(); + do { + mb(); /* prevent loop optimization */ + tmpl->do_2(BENCH_SIZE, b1, b2); + mb(); + } while (reps++ < REPS || (t0 = ktime_get()) == start); + min = ktime_sub(t0, start); preempt_enable(); // bytes/ns == GB/s, multiply by 1000 to get MB/s [not MiB/s] - if (!min) - min = 1; - speed = (1000 * REPS * BENCH_SIZE) / (unsigned int)ktime_to_ns(min); + speed = (1000 * reps * BENCH_SIZE) / (unsigned int)ktime_to_ns(min); tmpl->speed = speed; pr_info(" %-16s: %5d MB/sec\n", tmpl->name, speed); diff --git a/drivers/Kconfig b/drivers/Kconfig index 000e562961b7b..98f6917ab2787 100644 --- a/drivers/Kconfig +++ b/drivers/Kconfig @@ -135,6 +135,8 @@ source "drivers/dca/Kconfig" source "drivers/uio/Kconfig" +source "drivers/ivshm/Kconfig" + source "drivers/vfio/Kconfig" source "drivers/vlynq/Kconfig" diff --git a/drivers/Makefile b/drivers/Makefile index e1dc06105d507..a2189d82556be 100644 --- a/drivers/Makefile +++ b/drivers/Makefile @@ -97,6 +97,7 @@ obj-$(CONFIG_ATM) += atm/ obj-$(CONFIG_FUSION) += message/ obj-y += firewire/ obj-$(CONFIG_UIO) += uio/ +obj-$(CONFIG_IVSHM) += ivshm/ obj-$(CONFIG_VFIO) += vfio/ obj-y += cdrom/ obj-y += auxdisplay/ diff --git a/drivers/accel/drm_accel.c b/drivers/accel/drm_accel.c index 4a9baf02439e4..8827cb78ca9d8 100644 --- a/drivers/accel/drm_accel.c +++ b/drivers/accel/drm_accel.c @@ -8,7 +8,7 @@ #include #include -#include +#include #include #include @@ -17,8 +17,7 @@ #include #include -static DEFINE_SPINLOCK(accel_minor_lock); -static struct idr accel_minors_idr; +DEFINE_XARRAY_ALLOC(accel_minors_xa); static struct dentry *accel_debugfs_root; static struct class *accel_class; @@ -120,99 +119,6 @@ void accel_set_device_instance_params(struct device *kdev, int index) kdev->type = &accel_sysfs_device_minor; } -/** - * accel_minor_alloc() - Allocates a new accel minor - * - * This function access the accel minors idr and allocates from it - * a new id to represent a new accel minor - * - * Return: A new id on success or error code in case idr_alloc failed - */ -int accel_minor_alloc(void) -{ - unsigned long flags; - int r; - - spin_lock_irqsave(&accel_minor_lock, flags); - r = idr_alloc(&accel_minors_idr, NULL, 0, ACCEL_MAX_MINORS, GFP_NOWAIT); - spin_unlock_irqrestore(&accel_minor_lock, flags); - - return r; -} - -/** - * accel_minor_remove() - Remove an accel minor - * @index: The minor id to remove. - * - * This function access the accel minors idr and removes from - * it the member with the id that is passed to this function. - */ -void accel_minor_remove(int index) -{ - unsigned long flags; - - spin_lock_irqsave(&accel_minor_lock, flags); - idr_remove(&accel_minors_idr, index); - spin_unlock_irqrestore(&accel_minor_lock, flags); -} - -/** - * accel_minor_replace() - Replace minor pointer in accel minors idr. - * @minor: Pointer to the new minor. - * @index: The minor id to replace. - * - * This function access the accel minors idr structure and replaces the pointer - * that is associated with an existing id. Because the minor pointer can be - * NULL, we need to explicitly pass the index. - * - * Return: 0 for success, negative value for error - */ -void accel_minor_replace(struct drm_minor *minor, int index) -{ - unsigned long flags; - - spin_lock_irqsave(&accel_minor_lock, flags); - idr_replace(&accel_minors_idr, minor, index); - spin_unlock_irqrestore(&accel_minor_lock, flags); -} - -/* - * Looks up the given minor-ID and returns the respective DRM-minor object. The - * refence-count of the underlying device is increased so you must release this - * object with accel_minor_release(). - * - * The object can be only a drm_minor that represents an accel device. - * - * As long as you hold this minor, it is guaranteed that the object and the - * minor->dev pointer will stay valid! However, the device may get unplugged and - * unregistered while you hold the minor. - */ -static struct drm_minor *accel_minor_acquire(unsigned int minor_id) -{ - struct drm_minor *minor; - unsigned long flags; - - spin_lock_irqsave(&accel_minor_lock, flags); - minor = idr_find(&accel_minors_idr, minor_id); - if (minor) - drm_dev_get(minor->dev); - spin_unlock_irqrestore(&accel_minor_lock, flags); - - if (!minor) { - return ERR_PTR(-ENODEV); - } else if (drm_dev_is_unplugged(minor->dev)) { - drm_dev_put(minor->dev); - return ERR_PTR(-ENODEV); - } - - return minor; -} - -static void accel_minor_release(struct drm_minor *minor) -{ - drm_dev_put(minor->dev); -} - /** * accel_open - open method for ACCEL file * @inode: device inode @@ -230,7 +136,7 @@ int accel_open(struct inode *inode, struct file *filp) struct drm_minor *minor; int retcode; - minor = accel_minor_acquire(iminor(inode)); + minor = drm_minor_acquire(&accel_minors_xa, iminor(inode)); if (IS_ERR(minor)) return PTR_ERR(minor); @@ -249,7 +155,7 @@ int accel_open(struct inode *inode, struct file *filp) err_undo: atomic_dec(&dev->open_count); - accel_minor_release(minor); + drm_minor_release(minor); return retcode; } EXPORT_SYMBOL_GPL(accel_open); @@ -260,7 +166,7 @@ static int accel_stub_open(struct inode *inode, struct file *filp) struct drm_minor *minor; int err; - minor = accel_minor_acquire(iminor(inode)); + minor = drm_minor_acquire(&accel_minors_xa, iminor(inode)); if (IS_ERR(minor)) return PTR_ERR(minor); @@ -277,7 +183,7 @@ static int accel_stub_open(struct inode *inode, struct file *filp) err = 0; out: - accel_minor_release(minor); + drm_minor_release(minor); return err; } @@ -293,15 +199,13 @@ void accel_core_exit(void) unregister_chrdev(ACCEL_MAJOR, "accel"); debugfs_remove(accel_debugfs_root); accel_sysfs_destroy(); - idr_destroy(&accel_minors_idr); + WARN_ON(!xa_empty(&accel_minors_xa)); } int __init accel_core_init(void) { int ret; - idr_init(&accel_minors_idr); - ret = accel_sysfs_init(); if (ret < 0) { DRM_ERROR("Cannot create ACCEL class: %d\n", ret); diff --git a/drivers/accel/habanalabs/gaudi2/gaudi2_security.c b/drivers/accel/habanalabs/gaudi2/gaudi2_security.c index 908710524dc9e..493e556cd31b7 100644 --- a/drivers/accel/habanalabs/gaudi2/gaudi2_security.c +++ b/drivers/accel/habanalabs/gaudi2/gaudi2_security.c @@ -479,6 +479,7 @@ static const u32 gaudi2_pb_dcr0_edma0_unsecured_regs[] = { mmDCORE0_EDMA0_CORE_CTX_TE_NUMROWS, mmDCORE0_EDMA0_CORE_CTX_IDX, mmDCORE0_EDMA0_CORE_CTX_IDX_INC, + mmDCORE0_EDMA0_CORE_WR_COMP_MAX_OUTSTAND, mmDCORE0_EDMA0_CORE_RD_LBW_RATE_LIM_CFG, mmDCORE0_EDMA0_QM_CQ_CFG0_0, mmDCORE0_EDMA0_QM_CQ_CFG0_1, diff --git a/drivers/accel/ivpu/Makefile b/drivers/accel/ivpu/Makefile index e4328b4305640..0453727ff0f25 100644 --- a/drivers/accel/ivpu/Makefile +++ b/drivers/accel/ivpu/Makefile @@ -14,6 +14,7 @@ intel_vpu-y := \ ivpu_jsm_msg.o \ ivpu_mmu.o \ ivpu_mmu_context.o \ - ivpu_pm.o + ivpu_pm.o \ + ivpu_sysfs.o obj-$(CONFIG_DRM_ACCEL_IVPU) += intel_vpu.o diff --git a/drivers/accel/ivpu/ivpu_drv.c b/drivers/accel/ivpu/ivpu_drv.c index 5619980d9edda..c8c9bc21f1ad7 100644 --- a/drivers/accel/ivpu/ivpu_drv.c +++ b/drivers/accel/ivpu/ivpu_drv.c @@ -25,6 +25,7 @@ #include "ivpu_mmu.h" #include "ivpu_mmu_context.h" #include "ivpu_pm.h" +#include "ivpu_sysfs.h" #ifndef DRIVER_VERSION_STR #define DRIVER_VERSION_STR __stringify(DRM_IVPU_DRIVER_MAJOR) "." \ @@ -661,6 +662,8 @@ static int ivpu_probe(struct pci_dev *pdev, const struct pci_device_id *id) return ret; } + ivpu_sysfs_init(vdev); + ret = drm_dev_register(&vdev->drm, 0); if (ret) { dev_err(&pdev->dev, "Failed to register DRM device: %d\n", ret); diff --git a/drivers/accel/ivpu/ivpu_drv.h b/drivers/accel/ivpu/ivpu_drv.h index 6853dfe1c7e58..889b1df0d595c 100644 --- a/drivers/accel/ivpu/ivpu_drv.h +++ b/drivers/accel/ivpu/ivpu_drv.h @@ -118,6 +118,9 @@ struct ivpu_device { atomic64_t unique_id_counter; + ktime_t busy_start_ts; + ktime_t busy_time; + struct { int boot; int jsm; diff --git a/drivers/accel/ivpu/ivpu_fw.c b/drivers/accel/ivpu/ivpu_fw.c index a277bbae78fc4..3b35d262ddd43 100644 --- a/drivers/accel/ivpu/ivpu_fw.c +++ b/drivers/accel/ivpu/ivpu_fw.c @@ -55,6 +55,10 @@ static struct { { IVPU_HW_40XX, "intel/vpu/vpu_40xx_v0.0.bin" }, }; +/* Production fw_names from the table above */ +MODULE_FIRMWARE("intel/vpu/vpu_37xx_v0.0.bin"); +MODULE_FIRMWARE("intel/vpu/vpu_40xx_v0.0.bin"); + static int ivpu_fw_request(struct ivpu_device *vdev) { int ret = -ENOENT; diff --git a/drivers/accel/ivpu/ivpu_job.c b/drivers/accel/ivpu/ivpu_job.c index 76f468c9f761b..1fc224c8f9e49 100644 --- a/drivers/accel/ivpu/ivpu_job.c +++ b/drivers/accel/ivpu/ivpu_job.c @@ -323,11 +323,28 @@ ivpu_create_job(struct ivpu_file_priv *file_priv, u32 engine_idx, u32 bo_count) return NULL; } +static struct ivpu_job *ivpu_job_remove_from_submitted_jobs(struct ivpu_device *vdev, u32 job_id) +{ + struct ivpu_job *job; + + xa_lock(&vdev->submitted_jobs_xa); + job = __xa_erase(&vdev->submitted_jobs_xa, job_id); + + if (xa_empty(&vdev->submitted_jobs_xa) && job) { + vdev->busy_time = ktime_add(ktime_sub(ktime_get(), vdev->busy_start_ts), + vdev->busy_time); + } + + xa_unlock(&vdev->submitted_jobs_xa); + + return job; +} + static int ivpu_job_done(struct ivpu_device *vdev, u32 job_id, u32 job_status) { struct ivpu_job *job; - job = xa_erase(&vdev->submitted_jobs_xa, job_id); + job = ivpu_job_remove_from_submitted_jobs(vdev, job_id); if (!job) return -ENOENT; @@ -372,6 +389,7 @@ static int ivpu_direct_job_submission(struct ivpu_job *job) struct ivpu_device *vdev = job->vdev; struct xa_limit job_id_range; struct ivpu_cmdq *cmdq; + bool is_first_job; int ret; mutex_lock(&file_priv->lock); @@ -388,6 +406,7 @@ static int ivpu_direct_job_submission(struct ivpu_job *job) job_id_range.max = job_id_range.min | JOB_ID_JOB_MASK; job_get(job, &job); + is_first_job = xa_empty(&vdev->submitted_jobs_xa); ret = xa_alloc(&vdev->submitted_jobs_xa, &job->job_id, job, job_id_range, GFP_KERNEL); if (ret) { ivpu_warn_ratelimited(vdev, "Failed to allocate job id: %d\n", ret); @@ -408,6 +427,8 @@ static int ivpu_direct_job_submission(struct ivpu_job *job) wmb(); /* Flush WC buffer for jobq header */ } else { ivpu_cmdq_ring_db(vdev, cmdq); + if (is_first_job) + vdev->busy_start_ts = ktime_get(); } mutex_unlock(&file_priv->lock); diff --git a/drivers/accel/ivpu/ivpu_sysfs.c b/drivers/accel/ivpu/ivpu_sysfs.c new file mode 100644 index 0000000000000..913669f1786e8 --- /dev/null +++ b/drivers/accel/ivpu/ivpu_sysfs.c @@ -0,0 +1,58 @@ +// SPDX-License-Identifier: GPL-2.0-only +/* + * Copyright (C) 2024 Intel Corporation + */ + +#include +#include + +#include "ivpu_hw.h" +#include "ivpu_sysfs.h" + +/* + * npu_busy_time_us is the time that the device spent executing jobs. + * The time is counted when and only when there are jobs submitted to firmware. + * + * This time can be used to measure the utilization of NPU, either by calculating + * npu_busy_time_us difference between two timepoints (i.e. measuring the time + * that the NPU was active during some workload) or monitoring utilization percentage + * by reading npu_busy_time_us periodically. + * + * When reading the value periodically, it shouldn't be read too often as it may have + * an impact on job submission performance. Recommended period is 1 second. + */ +static ssize_t +npu_busy_time_us_show(struct device *dev, struct device_attribute *attr, char *buf) +{ + struct drm_device *drm = dev_get_drvdata(dev); + struct ivpu_device *vdev = to_ivpu_device(drm); + ktime_t total, now = 0; + + xa_lock(&vdev->submitted_jobs_xa); + total = vdev->busy_time; + if (!xa_empty(&vdev->submitted_jobs_xa)) + now = ktime_sub(ktime_get(), vdev->busy_start_ts); + xa_unlock(&vdev->submitted_jobs_xa); + + return sysfs_emit(buf, "%lld\n", ktime_to_us(ktime_add(total, now))); +} + +static DEVICE_ATTR_RO(npu_busy_time_us); + +static struct attribute *ivpu_dev_attrs[] = { + &dev_attr_npu_busy_time_us.attr, + NULL, +}; + +static struct attribute_group ivpu_dev_attr_group = { + .attrs = ivpu_dev_attrs, +}; + +void ivpu_sysfs_init(struct ivpu_device *vdev) +{ + int ret; + + ret = devm_device_add_group(vdev->drm.dev, &ivpu_dev_attr_group); + if (ret) + ivpu_warn(vdev, "Failed to add group to device, ret %d", ret); +} diff --git a/drivers/accel/ivpu/ivpu_sysfs.h b/drivers/accel/ivpu/ivpu_sysfs.h new file mode 100644 index 0000000000000..9836f09b35a3b --- /dev/null +++ b/drivers/accel/ivpu/ivpu_sysfs.h @@ -0,0 +1,13 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ +/* + * Copyright (C) 2024 Intel Corporation + */ + +#ifndef __IVPU_SYSFS_H__ +#define __IVPU_SYSFS_H__ + +#include "ivpu_drv.h" + +void ivpu_sysfs_init(struct ivpu_device *vdev); + +#endif /* __IVPU_SYSFS_H__ */ diff --git a/drivers/acpi/acpi_pad.c b/drivers/acpi/acpi_pad.c index 7a453c5ff303a..71e25c7989762 100644 --- a/drivers/acpi/acpi_pad.c +++ b/drivers/acpi/acpi_pad.c @@ -131,8 +131,10 @@ static void exit_round_robin(unsigned int tsk_index) { struct cpumask *pad_busy_cpus = to_cpumask(pad_busy_cpus_bits); - cpumask_clear_cpu(tsk_in_cpu[tsk_index], pad_busy_cpus); - tsk_in_cpu[tsk_index] = -1; + if (tsk_in_cpu[tsk_index] != -1) { + cpumask_clear_cpu(tsk_in_cpu[tsk_index], pad_busy_cpus); + tsk_in_cpu[tsk_index] = -1; + } } static unsigned int idle_pct = 5; /* percentage */ diff --git a/drivers/acpi/acpi_processor.c b/drivers/acpi/acpi_processor.c index 0f5218e361df5..7053f1b9fc1dd 100644 --- a/drivers/acpi/acpi_processor.c +++ b/drivers/acpi/acpi_processor.c @@ -415,7 +415,7 @@ static int acpi_processor_add(struct acpi_device *device, result = acpi_processor_get_info(device); if (result) /* Processor is not physically present or unavailable */ - return 0; + goto err_clear_driver_data; BUG_ON(pr->id >= nr_cpu_ids); @@ -430,7 +430,7 @@ static int acpi_processor_add(struct acpi_device *device, "BIOS reported wrong ACPI id %d for the processor\n", pr->id); /* Give up, but do not abort the namespace scan. */ - goto err; + goto err_clear_driver_data; } /* * processor_device_array is not cleared on errors to allow buggy BIOS @@ -442,12 +442,12 @@ static int acpi_processor_add(struct acpi_device *device, dev = get_cpu_device(pr->id); if (!dev) { result = -ENODEV; - goto err; + goto err_clear_per_cpu; } result = acpi_bind_one(dev, device); if (result) - goto err; + goto err_clear_per_cpu; pr->dev = dev; @@ -458,10 +458,11 @@ static int acpi_processor_add(struct acpi_device *device, dev_err(dev, "Processor driver could not be attached\n"); acpi_unbind_one(dev); - err: - free_cpumask_var(pr->throttling.shared_cpu_map); - device->driver_data = NULL; + err_clear_per_cpu: per_cpu(processors, pr->id) = NULL; + err_clear_driver_data: + device->driver_data = NULL; + free_cpumask_var(pr->throttling.shared_cpu_map); err_free_pr: kfree(pr); return result; diff --git a/drivers/acpi/acpica/dbconvert.c b/drivers/acpi/acpica/dbconvert.c index 2b84ac093698a..8dbab69320499 100644 --- a/drivers/acpi/acpica/dbconvert.c +++ b/drivers/acpi/acpica/dbconvert.c @@ -174,6 +174,8 @@ acpi_status acpi_db_convert_to_package(char *string, union acpi_object *object) elements = ACPI_ALLOCATE_ZEROED(DB_DEFAULT_PKG_ELEMENTS * sizeof(union acpi_object)); + if (!elements) + return (AE_NO_MEMORY); this = string; for (i = 0; i < (DB_DEFAULT_PKG_ELEMENTS - 1); i++) { diff --git a/drivers/acpi/acpica/exprep.c b/drivers/acpi/acpica/exprep.c index 08196fa17080e..82b1fa2d201fe 100644 --- a/drivers/acpi/acpica/exprep.c +++ b/drivers/acpi/acpica/exprep.c @@ -437,6 +437,9 @@ acpi_status acpi_ex_prep_field_value(struct acpi_create_field_info *info) if (info->connection_node) { second_desc = info->connection_node->object; + if (second_desc == NULL) { + break; + } if (!(second_desc->common.flags & AOPOBJ_DATA_VALID)) { status = acpi_ds_get_buffer_arguments(second_desc); diff --git a/drivers/acpi/acpica/psargs.c b/drivers/acpi/acpica/psargs.c index 422c074ed2897..28582adfc0aca 100644 --- a/drivers/acpi/acpica/psargs.c +++ b/drivers/acpi/acpica/psargs.c @@ -25,6 +25,8 @@ acpi_ps_get_next_package_length(struct acpi_parse_state *parser_state); static union acpi_parse_object *acpi_ps_get_next_field(struct acpi_parse_state *parser_state); +static void acpi_ps_free_field_list(union acpi_parse_object *start); + /******************************************************************************* * * FUNCTION: acpi_ps_get_next_package_length @@ -683,6 +685,39 @@ static union acpi_parse_object *acpi_ps_get_next_field(struct acpi_parse_state return_PTR(field); } +/******************************************************************************* + * + * FUNCTION: acpi_ps_free_field_list + * + * PARAMETERS: start - First Op in field list + * + * RETURN: None. + * + * DESCRIPTION: Free all Op objects inside a field list. + * + ******************************************************************************/ + +static void acpi_ps_free_field_list(union acpi_parse_object *start) +{ + union acpi_parse_object *cur = start; + union acpi_parse_object *next; + union acpi_parse_object *arg; + + while (cur) { + next = cur->common.next; + + /* AML_INT_CONNECTION_OP can have a single argument */ + + arg = acpi_ps_get_arg(cur, 0); + if (arg) { + acpi_ps_free_op(arg); + } + + acpi_ps_free_op(cur); + cur = next; + } +} + /******************************************************************************* * * FUNCTION: acpi_ps_get_next_arg @@ -751,6 +786,10 @@ acpi_ps_get_next_arg(struct acpi_walk_state *walk_state, while (parser_state->aml < parser_state->pkg_end) { field = acpi_ps_get_next_field(parser_state); if (!field) { + if (arg) { + acpi_ps_free_field_list(arg); + } + return_ACPI_STATUS(AE_NO_MEMORY); } @@ -820,6 +859,10 @@ acpi_ps_get_next_arg(struct acpi_walk_state *walk_state, acpi_ps_get_next_namepath(walk_state, parser_state, arg, ACPI_NOT_METHOD_CALL); + if (ACPI_FAILURE(status)) { + acpi_ps_free_op(arg); + return_ACPI_STATUS(status); + } } else { /* Single complex argument, nothing returned */ @@ -854,6 +897,10 @@ acpi_ps_get_next_arg(struct acpi_walk_state *walk_state, acpi_ps_get_next_namepath(walk_state, parser_state, arg, ACPI_POSSIBLE_METHOD_CALL); + if (ACPI_FAILURE(status)) { + acpi_ps_free_op(arg); + return_ACPI_STATUS(status); + } if (arg->common.aml_opcode == AML_INT_METHODCALL_OP) { diff --git a/drivers/acpi/battery.c b/drivers/acpi/battery.c index 7f7ad94f22b91..e3cbaf3c3bbc1 100644 --- a/drivers/acpi/battery.c +++ b/drivers/acpi/battery.c @@ -703,28 +703,35 @@ static LIST_HEAD(acpi_battery_list); static LIST_HEAD(battery_hook_list); static DEFINE_MUTEX(hook_mutex); -static void __battery_hook_unregister(struct acpi_battery_hook *hook, int lock) +static void battery_hook_unregister_unlocked(struct acpi_battery_hook *hook) { struct acpi_battery *battery; + /* * In order to remove a hook, we first need to * de-register all the batteries that are registered. */ - if (lock) - mutex_lock(&hook_mutex); list_for_each_entry(battery, &acpi_battery_list, list) { if (!hook->remove_battery(battery->bat, hook)) power_supply_changed(battery->bat); } - list_del(&hook->list); - if (lock) - mutex_unlock(&hook_mutex); + list_del_init(&hook->list); + pr_info("extension unregistered: %s\n", hook->name); } void battery_hook_unregister(struct acpi_battery_hook *hook) { - __battery_hook_unregister(hook, 1); + mutex_lock(&hook_mutex); + /* + * Ignore already unregistered battery hooks. This might happen + * if a battery hook was previously unloaded due to an error when + * adding a new battery. + */ + if (!list_empty(&hook->list)) + battery_hook_unregister_unlocked(hook); + + mutex_unlock(&hook_mutex); } EXPORT_SYMBOL_GPL(battery_hook_unregister); @@ -733,7 +740,6 @@ void battery_hook_register(struct acpi_battery_hook *hook) struct acpi_battery *battery; mutex_lock(&hook_mutex); - INIT_LIST_HEAD(&hook->list); list_add(&hook->list, &battery_hook_list); /* * Now that the driver is registered, we need @@ -750,7 +756,7 @@ void battery_hook_register(struct acpi_battery_hook *hook) * hooks. */ pr_err("extension failed to load: %s", hook->name); - __battery_hook_unregister(hook, 0); + battery_hook_unregister_unlocked(hook); goto end; } @@ -789,7 +795,7 @@ static void battery_hook_add_battery(struct acpi_battery *battery) */ pr_err("error in extension, unloading: %s", hook_node->name); - __battery_hook_unregister(hook_node, 0); + battery_hook_unregister_unlocked(hook_node); } } mutex_unlock(&hook_mutex); @@ -822,7 +828,7 @@ static void __exit battery_hook_exit(void) * need to remove the hooks. */ list_for_each_entry_safe(hook, ptr, &battery_hook_list, list) { - __battery_hook_unregister(hook, 1); + battery_hook_unregister(hook); } mutex_destroy(&hook_mutex); } diff --git a/drivers/acpi/cppc_acpi.c b/drivers/acpi/cppc_acpi.c index d3b9da75a8155..7aced0b9bad7c 100644 --- a/drivers/acpi/cppc_acpi.c +++ b/drivers/acpi/cppc_acpi.c @@ -100,6 +100,11 @@ static DEFINE_PER_CPU(struct cpc_desc *, cpc_desc_ptr); (cpc)->cpc_entry.reg.space_id == \ ACPI_ADR_SPACE_PLATFORM_COMM) +/* Check if a CPC register is in FFH */ +#define CPC_IN_FFH(cpc) ((cpc)->type == ACPI_TYPE_BUFFER && \ + (cpc)->cpc_entry.reg.space_id == \ + ACPI_ADR_SPACE_FIXED_HARDWARE) + /* Check if a CPC register is in SystemMemory */ #define CPC_IN_SYSTEM_MEMORY(cpc) ((cpc)->type == ACPI_TYPE_BUFFER && \ (cpc)->cpc_entry.reg.space_id == \ @@ -167,8 +172,11 @@ show_cppc_data(cppc_get_perf_ctrs, cppc_perf_fb_ctrs, wraparound_time); #define GET_BIT_WIDTH(reg) ((reg)->access_width ? (8 << ((reg)->access_width - 1)) : (reg)->bit_width) /* Shift and apply the mask for CPC reads/writes */ -#define MASK_VAL(reg, val) (((val) >> (reg)->bit_offset) & \ +#define MASK_VAL_READ(reg, val) (((val) >> (reg)->bit_offset) & \ GENMASK(((reg)->bit_width) - 1, 0)) +#define MASK_VAL_WRITE(reg, prev_val, val) \ + ((((val) & GENMASK(((reg)->bit_width) - 1, 0)) << (reg)->bit_offset) | \ + ((prev_val) & ~(GENMASK(((reg)->bit_width) - 1, 0) << (reg)->bit_offset))) \ static ssize_t show_feedback_ctrs(struct kobject *kobj, struct kobj_attribute *attr, char *buf) @@ -852,6 +860,7 @@ int acpi_cppc_processor_probe(struct acpi_processor *pr) /* Store CPU Logical ID */ cpc_ptr->cpu_id = pr->id; + spin_lock_init(&cpc_ptr->rmw_lock); /* Parse PSD data for this CPU */ ret = acpi_get_psd(cpc_ptr, handle); @@ -1057,7 +1066,7 @@ static int cpc_read(int cpu, struct cpc_register_resource *reg_res, u64 *val) } if (reg->space_id == ACPI_ADR_SPACE_SYSTEM_MEMORY) - *val = MASK_VAL(reg, *val); + *val = MASK_VAL_READ(reg, *val); return 0; } @@ -1066,9 +1075,11 @@ static int cpc_write(int cpu, struct cpc_register_resource *reg_res, u64 val) { int ret_val = 0; int size; + u64 prev_val; void __iomem *vaddr = NULL; int pcc_ss_id = per_cpu(cpu_pcc_subspace_idx, cpu); struct cpc_reg *reg = ®_res->cpc_entry.reg; + struct cpc_desc *cpc_desc; size = GET_BIT_WIDTH(reg); @@ -1101,8 +1112,34 @@ static int cpc_write(int cpu, struct cpc_register_resource *reg_res, u64 val) return acpi_os_write_memory((acpi_physical_address)reg->address, val, size); - if (reg->space_id == ACPI_ADR_SPACE_SYSTEM_MEMORY) - val = MASK_VAL(reg, val); + if (reg->space_id == ACPI_ADR_SPACE_SYSTEM_MEMORY) { + cpc_desc = per_cpu(cpc_desc_ptr, cpu); + if (!cpc_desc) { + pr_debug("No CPC descriptor for CPU:%d\n", cpu); + return -ENODEV; + } + + spin_lock(&cpc_desc->rmw_lock); + switch (size) { + case 8: + prev_val = readb_relaxed(vaddr); + break; + case 16: + prev_val = readw_relaxed(vaddr); + break; + case 32: + prev_val = readl_relaxed(vaddr); + break; + case 64: + prev_val = readq_relaxed(vaddr); + break; + default: + spin_unlock(&cpc_desc->rmw_lock); + return -EFAULT; + } + val = MASK_VAL_WRITE(reg, prev_val, val); + val |= prev_val; + } switch (size) { case 8: @@ -1129,6 +1166,9 @@ static int cpc_write(int cpu, struct cpc_register_resource *reg_res, u64 val) break; } + if (reg->space_id == ACPI_ADR_SPACE_SYSTEM_MEMORY) + spin_unlock(&cpc_desc->rmw_lock); + return ret_val; } @@ -1196,6 +1236,19 @@ int cppc_get_nominal_perf(int cpunum, u64 *nominal_perf) return cppc_get_perf(cpunum, NOMINAL_PERF, nominal_perf); } +/** + * cppc_get_highest_perf - Get the highest performance register value. + * @cpunum: CPU from which to get highest performance. + * @highest_perf: Return address. + * + * Return: 0 for success, -EIO otherwise. + */ +int cppc_get_highest_perf(int cpunum, u64 *highest_perf) +{ + return cppc_get_perf(cpunum, HIGHEST_PERF, highest_perf); +} +EXPORT_SYMBOL_GPL(cppc_get_highest_perf); + /** * cppc_get_epp_perf - Get the epp register value. * @cpunum: CPU from which to get epp preference value. @@ -1466,9 +1519,12 @@ int cppc_set_epp_perf(int cpu, struct cppc_perf_ctrls *perf_ctrls, bool enable) /* after writing CPC, transfer the ownership of PCC to platform */ ret = send_pcc_cmd(pcc_ss_id, CMD_WRITE); up_write(&pcc_ss_data->pcc_lock); + } else if (osc_cpc_flexible_adr_space_confirmed && + CPC_SUPPORTED(epp_set_reg) && CPC_IN_FFH(epp_set_reg)) { + ret = cpc_write(cpu, epp_set_reg, perf_ctrls->energy_perf); } else { ret = -ENOTSUPP; - pr_debug("_CPC in PCC is not supported\n"); + pr_debug("_CPC in PCC and _CPC in FFH are not supported\n"); } return ret; diff --git a/drivers/acpi/device_sysfs.c b/drivers/acpi/device_sysfs.c index a34d8578b3da6..6ed5e9e56be2f 100644 --- a/drivers/acpi/device_sysfs.c +++ b/drivers/acpi/device_sysfs.c @@ -544,8 +544,9 @@ int acpi_device_setup_files(struct acpi_device *dev) * If device has _STR, 'description' file is created */ if (acpi_has_method(dev->handle, "_STR")) { - status = acpi_evaluate_object(dev->handle, "_STR", - NULL, &buffer); + status = acpi_evaluate_object_typed(dev->handle, "_STR", + NULL, &buffer, + ACPI_TYPE_BUFFER); if (ACPI_FAILURE(status)) buffer.pointer = NULL; dev->pnp.str_obj = buffer.pointer; diff --git a/drivers/acpi/ec.c b/drivers/acpi/ec.c index 35e22a2af4e4b..115994dfefec1 100644 --- a/drivers/acpi/ec.c +++ b/drivers/acpi/ec.c @@ -783,6 +783,9 @@ static int acpi_ec_transaction_unlocked(struct acpi_ec *ec, unsigned long tmp; int ret = 0; + if (t->rdata) + memset(t->rdata, 0, t->rlen); + /* start transaction */ spin_lock_irqsave(&ec->lock, tmp); /* Enable GPE for command processing (IBF=0/OBF=1) */ @@ -819,8 +822,6 @@ static int acpi_ec_transaction(struct acpi_ec *ec, struct transaction *t) if (!ec || (!t) || (t->wlen && !t->wdata) || (t->rlen && !t->rdata)) return -EINVAL; - if (t->rdata) - memset(t->rdata, 0, t->rlen); mutex_lock(&ec->mutex); if (ec->global_lock) { @@ -847,7 +848,7 @@ static int acpi_ec_burst_enable(struct acpi_ec *ec) .wdata = NULL, .rdata = &d, .wlen = 0, .rlen = 1}; - return acpi_ec_transaction(ec, &t); + return acpi_ec_transaction_unlocked(ec, &t); } static int acpi_ec_burst_disable(struct acpi_ec *ec) @@ -857,7 +858,7 @@ static int acpi_ec_burst_disable(struct acpi_ec *ec) .wlen = 0, .rlen = 0}; return (acpi_ec_read_status(ec) & ACPI_EC_FLAG_BURST) ? - acpi_ec_transaction(ec, &t) : 0; + acpi_ec_transaction_unlocked(ec, &t) : 0; } static int acpi_ec_read(struct acpi_ec *ec, u8 address, u8 *data) @@ -873,6 +874,19 @@ static int acpi_ec_read(struct acpi_ec *ec, u8 address, u8 *data) return result; } +static int acpi_ec_read_unlocked(struct acpi_ec *ec, u8 address, u8 *data) +{ + int result; + u8 d; + struct transaction t = {.command = ACPI_EC_COMMAND_READ, + .wdata = &address, .rdata = &d, + .wlen = 1, .rlen = 1}; + + result = acpi_ec_transaction_unlocked(ec, &t); + *data = d; + return result; +} + static int acpi_ec_write(struct acpi_ec *ec, u8 address, u8 data) { u8 wdata[2] = { address, data }; @@ -883,6 +897,16 @@ static int acpi_ec_write(struct acpi_ec *ec, u8 address, u8 data) return acpi_ec_transaction(ec, &t); } +static int acpi_ec_write_unlocked(struct acpi_ec *ec, u8 address, u8 data) +{ + u8 wdata[2] = { address, data }; + struct transaction t = {.command = ACPI_EC_COMMAND_WRITE, + .wdata = wdata, .rdata = NULL, + .wlen = 2, .rlen = 0}; + + return acpi_ec_transaction_unlocked(ec, &t); +} + int ec_read(u8 addr, u8 *val) { int err; @@ -1323,6 +1347,7 @@ acpi_ec_space_handler(u32 function, acpi_physical_address address, struct acpi_ec *ec = handler_context; int result = 0, i, bytes = bits / 8; u8 *value = (u8 *)value64; + u32 glk; if ((address > 0xFF) || !value || !handler_context) return AE_BAD_PARAMETER; @@ -1330,13 +1355,25 @@ acpi_ec_space_handler(u32 function, acpi_physical_address address, if (function != ACPI_READ && function != ACPI_WRITE) return AE_BAD_PARAMETER; + mutex_lock(&ec->mutex); + + if (ec->global_lock) { + acpi_status status; + + status = acpi_acquire_global_lock(ACPI_EC_UDELAY_GLK, &glk); + if (ACPI_FAILURE(status)) { + result = -ENODEV; + goto unlock; + } + } + if (ec->busy_polling || bits > 8) acpi_ec_burst_enable(ec); for (i = 0; i < bytes; ++i, ++address, ++value) { result = (function == ACPI_READ) ? - acpi_ec_read(ec, address, value) : - acpi_ec_write(ec, address, *value); + acpi_ec_read_unlocked(ec, address, value) : + acpi_ec_write_unlocked(ec, address, *value); if (result < 0) break; } @@ -1344,6 +1381,12 @@ acpi_ec_space_handler(u32 function, acpi_physical_address address, if (ec->busy_polling || bits > 8) acpi_ec_burst_disable(ec); + if (ec->global_lock) + acpi_release_global_lock(glk); + +unlock: + mutex_unlock(&ec->mutex); + switch (result) { case -EINVAL: return AE_BAD_PARAMETER; diff --git a/drivers/acpi/pci_root.c b/drivers/acpi/pci_root.c index 84030804a7633..74ec73459eadf 100644 --- a/drivers/acpi/pci_root.c +++ b/drivers/acpi/pci_root.c @@ -23,6 +23,9 @@ #include #include #include "internal.h" +#ifdef CONFIG_QNX_GUEST +#include "asm/hypervisor.h" +#endif #define ACPI_PCI_ROOT_CLASS "pci_bridge" #define ACPI_PCI_ROOT_DEVICE_NAME "PCI Root Bridge" @@ -893,7 +896,46 @@ static void acpi_pci_root_remap_iospace(struct fwnode_handle *fwnode, res->flags |= IORESOURCE_DISABLED; #endif } +#ifdef CONFIG_QNX_GUEST +static phys_addr_t pci_root_upper_base; +static phys_addr_t pci_root_upper_limit; + +static int __init parse_pci_root_upper_base(char *str) +{ + unsigned long value; + char *cur = str; + + value = simple_strtoull(str, &cur, 0); + if (value > SZ_4G && + (pci_root_upper_limit == 0 || pci_root_upper_base < pci_root_upper_limit)) { + pci_root_upper_base = value; + printk(KERN_INFO "PCI PATCH CFG: Base of upper PCI MMIO window -> 0x%llx\n", + pci_root_upper_base); + return 1; + } + + return 0; +} +__setup("pci_root_upper_base=", parse_pci_root_upper_base); + +static int __init parse_pci_root_upper_limit(char *str) +{ + unsigned long value; + char *cur = str; + + value = simple_strtoull(str, &cur, 0); + if (value > SZ_4G && + (pci_root_upper_base == 0 || pci_root_upper_base < pci_root_upper_limit)) { + pci_root_upper_limit = value; + printk(KERN_INFO "PCI PATCH CFG: Limit of upper PCI MMIO window -> 0x%llx\n", + pci_root_upper_limit); + return 1; + } + return 0; +} +__setup("pci_root_upper_limit=", parse_pci_root_upper_limit); +#endif int acpi_pci_probe_root_resources(struct acpi_pci_root_info *info) { int ret; @@ -901,6 +943,10 @@ int acpi_pci_probe_root_resources(struct acpi_pci_root_info *info) struct acpi_device *device = info->bridge; struct resource_entry *entry, *tmp; unsigned long flags; +#ifdef CONFIG_QNX_GUEST + bool enlarged = false; + struct resource_entry *last_mmio_entry = NULL; +#endif flags = IORESOURCE_IO | IORESOURCE_MEM | IORESOURCE_MEM_8AND16BIT; ret = acpi_dev_get_resources(device, list, @@ -918,11 +964,34 @@ int acpi_pci_probe_root_resources(struct acpi_pci_root_info *info) acpi_pci_root_remap_iospace(&device->fwnode, entry); - if (entry->res->flags & IORESOURCE_DISABLED) + if (entry->res->flags & IORESOURCE_DISABLED) { resource_list_destroy_entry(entry); - else - entry->res->name = info->name; + continue; + } + + entry->res->name = info->name; +#ifdef CONFIG_QNX_GUEST + if (hypervisor_is_type(X86_HYPER_QNX) && !enlarged && pci_root_upper_base && + (entry->res->flags & IORESOURCE_MEM) && + entry->res->start > pci_root_upper_base) { + dev_info(&device->dev, "enlarge upper PCI window base: 0x%llx -> 0x%llx\n", + entry->res->start, pci_root_upper_base); + entry->res->start = pci_root_upper_base; + enlarged = true; + } + if (hypervisor_is_type(X86_HYPER_QNX) && pci_root_upper_base && + pci_root_upper_limit && (entry->res->flags & IORESOURCE_MEM)) + if (!last_mmio_entry || entry->res->end > last_mmio_entry->res->end) + last_mmio_entry = entry; +#endif } +#ifdef CONFIG_QNX_GUEST + if (last_mmio_entry) { + dev_info(&device->dev, "enlarge upper PCI window limit: 0x%llx -> 0x%llx\n", + last_mmio_entry->res->end, pci_root_upper_limit); + last_mmio_entry->res->end = pci_root_upper_limit; + } +#endif acpi_pci_root_validate_resources(&device->dev, list, IORESOURCE_MEM); acpi_pci_root_validate_resources(&device->dev, list, diff --git a/drivers/acpi/pmic/tps68470_pmic.c b/drivers/acpi/pmic/tps68470_pmic.c index ebd03e4729555..0d1a82eeb4b0b 100644 --- a/drivers/acpi/pmic/tps68470_pmic.c +++ b/drivers/acpi/pmic/tps68470_pmic.c @@ -376,10 +376,8 @@ static int tps68470_pmic_opregion_probe(struct platform_device *pdev) struct tps68470_pmic_opregion *opregion; acpi_status status; - if (!dev || !tps68470_regmap) { - dev_warn(dev, "dev or regmap is NULL\n"); - return -EINVAL; - } + if (!tps68470_regmap) + return dev_err_probe(dev, -EINVAL, "regmap is missing\n"); if (!handle) { dev_warn(dev, "acpi handle is NULL\n"); diff --git a/drivers/acpi/prmt.c b/drivers/acpi/prmt.c index 7020584096bfa..8b391f12853bb 100644 --- a/drivers/acpi/prmt.c +++ b/drivers/acpi/prmt.c @@ -52,7 +52,7 @@ struct prm_context_buffer { static LIST_HEAD(prm_module_list); struct prm_handler_info { - guid_t guid; + efi_guid_t guid; efi_status_t (__efiapi *handler_addr)(u64, void *); u64 static_data_buffer_addr; u64 acpi_param_buffer_addr; @@ -72,17 +72,21 @@ struct prm_module_info { struct prm_handler_info handlers[]; }; -static u64 efi_pa_va_lookup(u64 pa) +static u64 efi_pa_va_lookup(efi_guid_t *guid, u64 pa) { efi_memory_desc_t *md; u64 pa_offset = pa & ~PAGE_MASK; u64 page = pa & PAGE_MASK; for_each_efi_memory_desc(md) { - if (md->phys_addr < pa && pa < md->phys_addr + PAGE_SIZE * md->num_pages) + if ((md->attribute & EFI_MEMORY_RUNTIME) && + (md->phys_addr < pa && pa < md->phys_addr + PAGE_SIZE * md->num_pages)) { return pa_offset + md->virt_addr + page - md->phys_addr; + } } + pr_warn("Failed to find VA for GUID: %pUL, PA: 0x%llx", guid, pa); + return 0; } @@ -148,9 +152,15 @@ acpi_parse_prmt(union acpi_subtable_headers *header, const unsigned long end) th = &tm->handlers[cur_handler]; guid_copy(&th->guid, (guid_t *)handler_info->handler_guid); - th->handler_addr = (void *)efi_pa_va_lookup(handler_info->handler_address); - th->static_data_buffer_addr = efi_pa_va_lookup(handler_info->static_data_buffer_address); - th->acpi_param_buffer_addr = efi_pa_va_lookup(handler_info->acpi_param_buffer_address); + th->handler_addr = + (void *)efi_pa_va_lookup(&th->guid, handler_info->handler_address); + + th->static_data_buffer_addr = + efi_pa_va_lookup(&th->guid, handler_info->static_data_buffer_address); + + th->acpi_param_buffer_addr = + efi_pa_va_lookup(&th->guid, handler_info->acpi_param_buffer_address); + } while (++cur_handler < tm->handler_count && (handler_info = get_next_handler(handler_info))); return 0; @@ -253,6 +263,13 @@ static acpi_status acpi_platformrt_space_handler(u32 function, if (!handler || !module) goto invalid_guid; + if (!handler->handler_addr || + !handler->static_data_buffer_addr || + !handler->acpi_param_buffer_addr) { + buffer->prm_status = PRM_HANDLER_ERROR; + return AE_OK; + } + ACPI_COPY_NAMESEG(context.signature, "PRMC"); context.revision = 0x0; context.reserved = 0x0; diff --git a/drivers/acpi/resource.c b/drivers/acpi/resource.c index 15f9d3d9c1cb8..95233b413c1ac 100644 --- a/drivers/acpi/resource.c +++ b/drivers/acpi/resource.c @@ -439,6 +439,13 @@ static const struct dmi_system_id asus_laptop[] = { DMI_MATCH(DMI_BOARD_NAME, "S5602ZA"), }, }, + { + /* Asus Vivobook X1704VAP */ + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."), + DMI_MATCH(DMI_BOARD_NAME, "X1704VAP"), + }, + }, { .ident = "Asus ExpertBook B1402CBA", .matches = { @@ -502,12 +509,25 @@ static const struct dmi_system_id maingear_laptop[] = { DMI_MATCH(DMI_PRODUCT_NAME, "MG-VCP2-15A3070T"), } }, + { + /* Asus ExpertBook B2502CVA */ + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."), + DMI_MATCH(DMI_BOARD_NAME, "B2502CVA"), + }, + }, { /* TongFang GMxXGxx/TUXEDO Polaris 15 Gen5 AMD */ .matches = { DMI_MATCH(DMI_BOARD_NAME, "GMxXGxx"), }, }, + { + /* TongFang GMxXGxX/TUXEDO Polaris 15 Gen5 AMD */ + .matches = { + DMI_MATCH(DMI_BOARD_NAME, "GMxXGxX"), + }, + }, { /* TongFang GMxXGxx sold as Eluktronics Inc. RP-15 */ .matches = { diff --git a/drivers/acpi/video_detect.c b/drivers/acpi/video_detect.c index 16ab2d9ef67f3..e96afb1622f95 100644 --- a/drivers/acpi/video_detect.c +++ b/drivers/acpi/video_detect.c @@ -260,6 +260,14 @@ static const struct dmi_system_id video_detect_dmi_table[] = { DMI_MATCH(DMI_PRODUCT_NAME, "PCG-FRV35"), }, }, + { + .callback = video_detect_force_vendor, + /* Panasonic Toughbook CF-18 */ + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "Matsushita Electric Industrial"), + DMI_MATCH(DMI_PRODUCT_NAME, "CF-18"), + }, + }, /* * Toshiba models with Transflective display, these need to use diff --git a/drivers/android/TEST_MAPPING b/drivers/android/TEST_MAPPING index db7a08514bd33..08bfd98429b54 100644 --- a/drivers/android/TEST_MAPPING +++ b/drivers/android/TEST_MAPPING @@ -264,6 +264,40 @@ "include-filter": "android.hardware.camera2.cts.FastBasicsTest" } ] + }, + { + "name": "CtsIncrementalInstallHostTestCases", + "options": [ + { + "include-filter": "android.incrementalinstall.cts.IncrementalFeatureTest" + }, + { + "include-filter": "android.incrementalinstall.cts.IncrementalInstallTest" + } + ] + }, + { + "name": "CtsLibcoreLegacy22TestCases", + "options": [ + { + "include-filter": "android.util.cts.FloatMathTest" + } + ] + }, + { + "name": "CtsRootBluetoothTestCases" + }, + { + "name": "vts_kernel_net_tests" + }, + { + "name": "KernelAbilistTest" + }, + { + "name": "VtsAidlHalSensorsTargetTest" + }, + { + "name": "VtsBootconfigTest" } ] } diff --git a/drivers/android/android_debug_symbols.c b/drivers/android/android_debug_symbols.c index a8f36e28eab62..bf238c1294496 100644 --- a/drivers/android/android_debug_symbols.c +++ b/drivers/android/android_debug_symbols.c @@ -53,6 +53,8 @@ static const struct ads_entry ads_entries[ADS_END] = { ADS_ENTRY(ADS_TOTAL_CMA, &totalcma_pages), ADS_ENTRY(ADS_SLAB_CACHES, &slab_caches), ADS_ENTRY(ADS_SLAB_MUTEX, &slab_mutex), + ADS_ENTRY(ADS_START_RO_AFTER_INIT, __start_ro_after_init), + ADS_ENTRY(ADS_END_RO_AFTER_INIT, __end_ro_after_init), }; /* diff --git a/drivers/android/binder.c b/drivers/android/binder.c index 53e5ba497ebf1..2985db6cc5202 100644 --- a/drivers/android/binder.c +++ b/drivers/android/binder.c @@ -1404,6 +1404,10 @@ static void binder_cleanup_ref_olocked(struct binder_ref *ref) binder_dequeue_work(ref->proc, &ref->death->work); binder_stats_deleted(BINDER_STAT_DEATH); } + + if (ref->freeze) + binder_dequeue_work(ref->proc, &ref->freeze->work); + binder_stats_deleted(BINDER_STAT_REF); } @@ -1533,6 +1537,7 @@ static void binder_free_ref(struct binder_ref *ref) if (ref->node) binder_free_node(ref->node); kfree(ref->death); + kfree(ref->freeze); kfree(ref); } @@ -4064,6 +4069,152 @@ static void binder_transaction(struct binder_proc *proc, } } +static int +binder_request_freeze_notification(struct binder_proc *proc, + struct binder_thread *thread, + struct binder_handle_cookie *handle_cookie) +{ + struct binder_ref_freeze *freeze; + struct binder_ref *ref; + + freeze = kzalloc(sizeof(*freeze), GFP_KERNEL); + if (!freeze) + return -ENOMEM; + binder_proc_lock(proc); + ref = binder_get_ref_olocked(proc, handle_cookie->handle, false); + if (!ref) { + binder_user_error("%d:%d BC_REQUEST_FREEZE_NOTIFICATION invalid ref %d\n", + proc->pid, thread->pid, handle_cookie->handle); + binder_proc_unlock(proc); + kfree(freeze); + return -EINVAL; + } + + binder_node_lock(ref->node); + if (ref->freeze) { + binder_user_error("%d:%d BC_REQUEST_FREEZE_NOTIFICATION already set\n", + proc->pid, thread->pid); + binder_node_unlock(ref->node); + binder_proc_unlock(proc); + kfree(freeze); + return -EINVAL; + } + + INIT_LIST_HEAD(&freeze->work.entry); + freeze->cookie = handle_cookie->cookie; + freeze->work.type = BINDER_WORK_FROZEN_BINDER; + ref->freeze = freeze; + + if (ref->node->proc) { + binder_inner_proc_lock(ref->node->proc); + freeze->is_frozen = ref->node->proc->is_frozen; + 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_proc_unlock(proc); + return 0; +} + +static int +binder_clear_freeze_notification(struct binder_proc *proc, + struct binder_thread *thread, + struct binder_handle_cookie *handle_cookie) +{ + struct binder_ref_freeze *freeze; + struct binder_ref *ref; + + binder_proc_lock(proc); + ref = binder_get_ref_olocked(proc, handle_cookie->handle, false); + if (!ref) { + binder_user_error("%d:%d BC_CLEAR_FREEZE_NOTIFICATION invalid ref %d\n", + proc->pid, thread->pid, handle_cookie->handle); + binder_proc_unlock(proc); + return -EINVAL; + } + + binder_node_lock(ref->node); + + if (!ref->freeze) { + binder_user_error("%d:%d BC_CLEAR_FREEZE_NOTIFICATION freeze notification not active\n", + proc->pid, thread->pid); + binder_node_unlock(ref->node); + binder_proc_unlock(proc); + return -EINVAL; + } + freeze = ref->freeze; + binder_inner_proc_lock(proc); + if (freeze->cookie != handle_cookie->cookie) { + binder_user_error("%d:%d BC_CLEAR_FREEZE_NOTIFICATION freeze notification cookie mismatch %016llx != %016llx\n", + proc->pid, thread->pid, (u64)freeze->cookie, + (u64)handle_cookie->cookie); + binder_inner_proc_unlock(proc); + binder_node_unlock(ref->node); + binder_proc_unlock(proc); + return -EINVAL; + } + ref->freeze = NULL; + /* + * Take the existing freeze object and overwrite its work type. There are three cases here: + * 1. No pending notification. In this case just add the work to the queue. + * 2. A notification was sent and is pending an ack from userspace. Once an ack arrives, we + * should resend with the new work type. + * 3. A notification is pending to be sent. Since the work is already in the queue, nothing + * needs to be done here. + */ + freeze->work.type = BINDER_WORK_CLEAR_FREEZE_NOTIFICATION; + if (list_empty(&freeze->work.entry)) { + binder_enqueue_work_ilocked(&freeze->work, &proc->todo); + binder_wakeup_proc_ilocked(proc); + } else if (freeze->sent) { + freeze->resend = true; + } + binder_inner_proc_unlock(proc); + binder_node_unlock(ref->node); + binder_proc_unlock(proc); + return 0; +} + +static int +binder_freeze_notification_done(struct binder_proc *proc, + struct binder_thread *thread, + binder_uintptr_t cookie) +{ + struct binder_ref_freeze *freeze = NULL; + struct binder_work *w; + + binder_inner_proc_lock(proc); + list_for_each_entry(w, &proc_wrapper(proc)->delivered_freeze, entry) { + struct binder_ref_freeze *tmp_freeze = + container_of(w, struct binder_ref_freeze, work); + + if (tmp_freeze->cookie == cookie) { + freeze = tmp_freeze; + break; + } + } + if (!freeze) { + binder_user_error("%d:%d BC_FREEZE_NOTIFICATION_DONE %016llx not found\n", + proc->pid, thread->pid, (u64)cookie); + binder_inner_proc_unlock(proc); + return -EINVAL; + } + binder_dequeue_work_ilocked(&freeze->work); + freeze->sent = false; + if (freeze->resend) { + freeze->resend = false; + binder_enqueue_work_ilocked(&freeze->work, &proc->todo); + binder_wakeup_proc_ilocked(proc); + } + binder_inner_proc_unlock(proc); + return 0; +} + /** * binder_free_buf() - free the specified buffer * @proc: binder proc that owns buffer @@ -4557,6 +4708,44 @@ static int binder_thread_write(struct binder_proc *proc, binder_inner_proc_unlock(proc); } break; + case BC_REQUEST_FREEZE_NOTIFICATION: { + struct binder_handle_cookie handle_cookie; + int error; + + if (copy_from_user(&handle_cookie, ptr, sizeof(handle_cookie))) + return -EFAULT; + ptr += sizeof(handle_cookie); + error = binder_request_freeze_notification(proc, thread, + &handle_cookie); + if (error) + return error; + } break; + + case BC_CLEAR_FREEZE_NOTIFICATION: { + struct binder_handle_cookie handle_cookie; + int error; + + if (copy_from_user(&handle_cookie, ptr, sizeof(handle_cookie))) + return -EFAULT; + ptr += sizeof(handle_cookie); + error = binder_clear_freeze_notification(proc, thread, &handle_cookie); + if (error) + return error; + } break; + + case BC_FREEZE_NOTIFICATION_DONE: { + binder_uintptr_t cookie; + int error; + + if (get_user(cookie, (binder_uintptr_t __user *)ptr)) + return -EFAULT; + + ptr += sizeof(cookie); + error = binder_freeze_notification_done(proc, thread, cookie); + if (error) + return error; + } break; + default: pr_err("%d:%d unknown command %u\n", proc->pid, thread->pid, cmd); @@ -4959,6 +5148,45 @@ static int binder_thread_read(struct binder_proc *proc, if (cmd == BR_DEAD_BINDER) goto done; /* DEAD_BINDER notifications can cause transactions */ } break; + + case BINDER_WORK_FROZEN_BINDER: { + struct binder_ref_freeze *freeze; + struct binder_frozen_state_info info; + + memset(&info, 0, sizeof(info)); + freeze = container_of(w, struct binder_ref_freeze, work); + info.is_frozen = freeze->is_frozen; + info.cookie = freeze->cookie; + freeze->sent = true; + binder_enqueue_work_ilocked(w, &proc_wrapper(proc)->delivered_freeze); + binder_inner_proc_unlock(proc); + + if (put_user(BR_FROZEN_BINDER, (uint32_t __user *)ptr)) + return -EFAULT; + ptr += sizeof(uint32_t); + if (copy_to_user(ptr, &info, sizeof(info))) + return -EFAULT; + ptr += sizeof(info); + binder_stat_br(proc, thread, BR_FROZEN_BINDER); + goto done; /* BR_FROZEN_BINDER notifications can cause transactions */ + } break; + + case BINDER_WORK_CLEAR_FREEZE_NOTIFICATION: { + struct binder_ref_freeze *freeze = + container_of(w, struct binder_ref_freeze, work); + binder_uintptr_t cookie = freeze->cookie; + + binder_inner_proc_unlock(proc); + kfree(freeze); + if (put_user(BR_CLEAR_FREEZE_NOTIFICATION_DONE, (uint32_t __user *)ptr)) + return -EFAULT; + ptr += sizeof(uint32_t); + if (put_user(cookie, (binder_uintptr_t __user *)ptr)) + return -EFAULT; + ptr += sizeof(binder_uintptr_t); + binder_stat_br(proc, thread, BR_CLEAR_FREEZE_NOTIFICATION_DONE); + } break; + default: binder_inner_proc_unlock(proc); pr_err("%d:%d: bad work type %d\n", @@ -5166,6 +5394,15 @@ static void binder_release_work(struct binder_proc *proc, } break; case BINDER_WORK_NODE: 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: pr_err("unexpected work type, %d, not freed\n", wtype); @@ -5576,6 +5813,57 @@ static bool binder_txns_pending_ilocked(struct binder_proc *proc) return false; } +static void binder_add_freeze_work(struct binder_proc *proc, bool is_frozen) +{ + struct binder_node *prev = NULL; + struct rb_node *n; + struct binder_ref *ref; + + binder_inner_proc_lock(proc); + for (n = rb_first(&proc->nodes); n; n = rb_next(n)) { + struct binder_node *node; + + node = rb_entry(n, struct binder_node, rb_node); + binder_inc_node_tmpref_ilocked(node); + binder_inner_proc_unlock(proc); + if (prev) + binder_put_node(prev); + binder_node_lock(node); + hlist_for_each_entry(ref, &node->refs, node_entry) { + /* + * Need the node lock to synchronize + * with new notification requests and the + * inner lock to synchronize with queued + * freeze notifications. + */ + binder_inner_proc_lock(ref->proc); + if (!ref->freeze) { + binder_inner_proc_unlock(ref->proc); + continue; + } + ref->freeze->work.type = BINDER_WORK_FROZEN_BINDER; + if (list_empty(&ref->freeze->work.entry)) { + ref->freeze->is_frozen = is_frozen; + binder_enqueue_work_ilocked(&ref->freeze->work, &ref->proc->todo); + binder_wakeup_proc_ilocked(ref->proc); + } else { + if (ref->freeze->sent && ref->freeze->is_frozen != is_frozen) + ref->freeze->resend = true; + ref->freeze->is_frozen = is_frozen; + } + binder_inner_proc_unlock(ref->proc); + } + prev = node; + binder_node_unlock(node); + binder_inner_proc_lock(proc); + if (proc->is_dead) + break; + } + binder_inner_proc_unlock(proc); + if (prev) + binder_put_node(prev); +} + static int binder_ioctl_freeze(struct binder_freeze_info *info, struct binder_proc *target_proc) { @@ -5587,6 +5875,7 @@ static int binder_ioctl_freeze(struct binder_freeze_info *info, target_proc->async_recv = false; target_proc->is_frozen = false; binder_inner_proc_unlock(target_proc); + binder_add_freeze_work(target_proc, false); return 0; } @@ -5619,6 +5908,8 @@ static int binder_ioctl_freeze(struct binder_freeze_info *info, binder_inner_proc_lock(target_proc); target_proc->is_frozen = false; binder_inner_proc_unlock(target_proc); + } else { + binder_add_freeze_work(target_proc, true); } return ret; @@ -6004,6 +6295,7 @@ static int binder_open(struct inode *nodp, struct file *filp) binder_stats_created(BINDER_STAT_PROC); proc->pid = current->group_leader->pid; INIT_LIST_HEAD(&proc->delivered_death); + INIT_LIST_HEAD(&proc_wrapper(proc)->delivered_freeze); INIT_LIST_HEAD(&proc->waiting_threads); filp->private_data = proc; @@ -6254,6 +6546,7 @@ static void binder_deferred_release(struct binder_proc *proc) if (special_list) binder_release_work(proc, special_list); binder_release_work(proc, &proc->delivered_death); + binder_release_work(proc, &proc_wrapper(proc)->delivered_freeze); binder_debug(BINDER_DEBUG_OPEN_CLOSE, "%s: %d threads %d, nodes %d (ref %d), refs %d, active transactions %d\n", @@ -6388,6 +6681,12 @@ static void print_binder_work_ilocked(struct seq_file *m, case BINDER_WORK_CLEAR_DEATH_NOTIFICATION: seq_printf(m, "%shas cleared death notification\n", prefix); 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: seq_printf(m, "%sunknown work: type %d\n", prefix, w->type); break; @@ -6537,6 +6836,10 @@ static void print_binder_proc(struct seq_file *m, seq_puts(m, " has delivered dead binder\n"); 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); if (!print_all && m->count == header_pos) m->count = start_pos; @@ -6563,7 +6866,7 @@ static const char * const binder_return_strings[] = { "BR_FAILED_REPLY", "BR_FROZEN_REPLY", "BR_ONEWAY_SPAM_SUSPECT", - "BR_TRANSACTION_PENDING_FROZEN" + "BR_TRANSACTION_PENDING_FROZEN", }; static const char * const binder_command_strings[] = { @@ -6595,7 +6898,7 @@ static const char * const binder_objstat_strings[] = { "ref", "death", "transaction", - "transaction_complete" + "transaction_complete", }; static void print_binder_stats(struct seq_file *m, const char *prefix, diff --git a/drivers/android/binder_internal.h b/drivers/android/binder_internal.h index 2f23aa10657b7..8f6415ee4962a 100644 --- a/drivers/android/binder_internal.h +++ b/drivers/android/binder_internal.h @@ -161,6 +161,10 @@ struct binder_work { BINDER_WORK_DEAD_BINDER, BINDER_WORK_DEAD_BINDER_AND_CLEAR, BINDER_WORK_CLEAR_DEATH_NOTIFICATION, +#ifndef __GENKSYMS__ + BINDER_WORK_FROZEN_BINDER, + BINDER_WORK_CLEAR_FREEZE_NOTIFICATION, +#endif } type; ANDROID_OEM_DATA(1); @@ -284,6 +288,14 @@ struct binder_ref_death { binder_uintptr_t cookie; }; +struct binder_ref_freeze { + struct binder_work work; + binder_uintptr_t cookie; + bool is_frozen:1; + bool sent:1; + bool resend:1; +}; + /** * struct binder_ref_data - binder_ref counts and id * @debug_id: unique ID for the ref @@ -316,6 +328,8 @@ struct binder_ref_data { * @node indicates the node must be freed * @death: pointer to death notification (ref_death) if requested * (protected by @node->lock) + * @freeze: pointer to freeze notification (ref_freeze) if requested + * (protected by @node->lock) * * Structure to track references from procA to target node (on procB). This * structure is unsafe to access without holding @proc->outer_lock. @@ -332,6 +346,7 @@ struct binder_ref { struct binder_proc *proc; struct binder_node *node; struct binder_ref_death *death; + struct binder_ref_freeze *freeze; }; /** @@ -471,10 +486,13 @@ struct binder_proc { * @proc: binder_proc being wrapped * @dmap dbitmap to manage available reference descriptors * (protected by @proc.outer_lock) + * @delivered_freeze: list of delivered freeze notification + * (protected by @inner_lock) */ struct binder_proc_wrap { struct binder_proc proc; struct dbitmap dmap; + struct list_head delivered_freeze; }; static inline diff --git a/drivers/android/binderfs.c b/drivers/android/binderfs.c index 81effec17b3d6..82e47ed5a0c45 100644 --- a/drivers/android/binderfs.c +++ b/drivers/android/binderfs.c @@ -59,6 +59,7 @@ enum binderfs_stats_mode { struct binder_features { bool oneway_spam_detection; bool extended_error; + bool freeze_notification; }; static const struct constant_table binderfs_param_stats[] = { @@ -75,6 +76,7 @@ static const struct fs_parameter_spec binderfs_fs_parameters[] = { static struct binder_features binder_features = { .oneway_spam_detection = true, .extended_error = true, + .freeze_notification = true, }; static inline struct binderfs_info *BINDERFS_SB(const struct super_block *sb) @@ -609,6 +611,12 @@ static int init_binder_features(struct super_block *sb) if (IS_ERR(dentry)) return PTR_ERR(dentry); + dentry = binderfs_create_file(dir, "freeze_notification", + &binder_features_fops, + &binder_features.freeze_notification); + if (IS_ERR(dentry)) + return PTR_ERR(dentry); + return 0; } diff --git a/drivers/android/vendor_hooks.c b/drivers/android/vendor_hooks.c index a3169a2432163..3d0d04f0eee56 100644 --- a/drivers/android/vendor_hooks.c +++ b/drivers/android/vendor_hooks.c @@ -37,6 +37,7 @@ #include #include #include +#include #include #include #include @@ -48,6 +49,7 @@ #include #include #include +#include #include #include #include @@ -78,6 +80,7 @@ #include #include #include +#include /* * Export tracepoints that act as a bare tracehook (ie: have no trace event @@ -149,6 +152,7 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_cpuinfo_c_show); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_meminfo_cache_adjust); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_si_mem_available_adjust); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_si_meminfo_adjust); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_si_meminfo_adjust_shmem); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_thermal_pm_notify_suspend); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_ufs_fill_prdt); EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_ufs_reprogram_all_keys); @@ -164,10 +168,13 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_syscall_prctl_finished); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_anon_vma_name_recog); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_restore_mm_flags); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_update_vma_flags); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_thp_vma_allowable_orders); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_ufs_send_uic_command); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_ufs_send_tm_command); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_ufs_check_int_errors); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_ufs_update_sdev); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_ogki_f2fs_create); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_ogki_f2fs_submit_write_page); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_cgroup_attach); EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_iommu_setup_dma_ops); EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_iommu_alloc_insert_iova); @@ -214,8 +221,13 @@ 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_rwsem_lock_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_shmem_get_folio); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_shmem_mod_shmem); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_shmem_mod_swapped); EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_commit_creds); EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_exit_creds); EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_override_creds); @@ -266,11 +278,13 @@ 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_this); 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_vh_sha256); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_aes_expandkey); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_aes_encrypt); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_aes_decrypt); +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_wake_finish); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_meminfo_proc_show); @@ -291,10 +305,15 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_do_el1_fpac); EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_handle_bad_stack); EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_panic_unhandled); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_gzvm_vcpu_exit_reason); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_gzvm_handle_demand_page_pre); +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_alter_mutex_list_add); 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_save_track_hash); 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_id_remove); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_mem_cgroup_css_offline); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_mem_cgroup_css_online); @@ -308,11 +327,13 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_binder_preset); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_binder_reply); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_binder_trans); 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_exit_signal_whether_wake); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_exit_check); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_freeze_whether_wake); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_percpu_rwsem_wq_add); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_alloc_oem_binder_struct); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_alloc_workqueue); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_binder_transaction_received); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_free_oem_binder_struct); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_binder_special_task); @@ -322,6 +343,7 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_binder_looper_exited); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_binder_spawn_new_thread); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_binder_has_special_work_ilocked); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_logbuf); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_logbuf); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_do_shrink_slab); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_get_page_wmark); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_page_add_new_anon_rmap); @@ -334,11 +356,15 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_binder_read_done); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_modify_scan_control); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_should_continue_reclaim); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_file_is_tiny_bypass); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_mglru_should_abort_scan); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_mglru_should_abort_scan_order); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_exit_signal); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_check_folio_look_around_ref); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_look_around); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_look_around_migrate_folio); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_test_clear_look_around_ref); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_throttle_direct_reclaim_bypass); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_dma_buf_stats_teardown); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_ufs_perf_huristic_ctrl); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_ufs_send_command_post_change); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_ufs_abort_success_ctrl); @@ -359,6 +385,10 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_tcp_connect); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_inet_csk_clone_lock); 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_udp_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_record_rwsem_reader_owned); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_clear_rwsem_reader_owned); @@ -369,10 +399,13 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_compaction_exit); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_compaction_try_to_compact_exit); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_mm_direct_reclaim_enter); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_mm_direct_reclaim_exit); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_mm_kcompactd_cpu_online); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_mm_may_oom_exit); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_vmscan_kswapd_done); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_shrink_folio_list); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_inode_lru_isolate); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_should_memcg_bypass); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_shrink_node); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_invalidate_mapping_pagevec); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_customize_alloc_gfp); EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_cpu_capacity_show); @@ -416,6 +449,9 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_swapmem_gather_finish); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_oom_swapmem_gather_init); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_oom_swapmem_gather_finish); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_f2fs_file_open); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_f2fs_down_read); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_f2fs_improve_priority); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_f2fs_restore_priority); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_uplink_send_msg); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_inet_create); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_sock_create); @@ -424,6 +460,7 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_free_user); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_save_vmalloc_stack); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_show_stack_hash); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_show_mapcount_pages); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_filemap_add_folio); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_lock_folio_drop_mmap_start); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_lock_folio_drop_mmap_end); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_filemap_update_page); @@ -452,9 +489,14 @@ 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_rvh_usb_dev_suspend); 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_do_new_mount_fc); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_blk_fill_rwbs); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_blk_mq_delay_run_hw_queue); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_blk_mq_kick_requeue_list); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_f2fs_ra_op_flags); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_use_amu_fie); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_resume_end); @@ -537,3 +579,22 @@ 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_customize_thp_pcp_order); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_customize_thp_gfp_orders); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_init_adjust_zone_wmark); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_cma_alloc_retry); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_ksys_umount); +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_shrink_node_memcgs); +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_finish); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_sync_irq_wait_start); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_sync_irq_wait_finish); +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_work_wait_start); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_flush_work_wait_finish); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_direct_reclaim_begin); +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_wake_idle_worker); diff --git a/drivers/ata/ahci.c b/drivers/ata/ahci.c index 0a6aea36cd975..6e76780fb4308 100644 --- a/drivers/ata/ahci.c +++ b/drivers/ata/ahci.c @@ -667,6 +667,87 @@ static int mobile_lpm_policy = -1; module_param(mobile_lpm_policy, int, 0644); 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: " + "\"\" to apply the same mask to all AHCI controller " + "devices, and \"=,=,...\" to " + "specify different masks for the controllers specified, " + "where 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, 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"); } + /* 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); } diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c index 373d23af1d9ac..4ed90d46a017a 100644 --- a/drivers/ata/libata-core.c +++ b/drivers/ata/libata-core.c @@ -5593,8 +5593,10 @@ struct ata_host *ata_host_alloc(struct device *dev, int max_ports) } dr = devres_alloc(ata_devres_release, 0, GFP_KERNEL); - if (!dr) + if (!dr) { + kfree(host); goto err_out; + } devres_add(dev, dr); dev_set_drvdata(dev, host); diff --git a/drivers/ata/libata-eh.c b/drivers/ata/libata-eh.c index 1168e29cae86e..a96566e1b2b84 100644 --- a/drivers/ata/libata-eh.c +++ b/drivers/ata/libata-eh.c @@ -618,6 +618,14 @@ void ata_scsi_cmd_error_handler(struct Scsi_Host *host, struct ata_port *ap, list_for_each_entry_safe(scmd, tmp, eh_work_q, eh_entry) { struct ata_queued_cmd *qc; + /* + * If the scmd was added to EH, via ata_qc_schedule_eh() -> + * scsi_timeout() -> scsi_eh_scmd_add(), scsi_timeout() will + * have set DID_TIME_OUT (since libata does not have an abort + * handler). Thus, to clear DID_TIME_OUT, clear the host byte. + */ + set_host_byte(scmd, DID_OK); + ata_qc_for_each_raw(ap, qc, i) { if (qc->flags & ATA_QCFLAG_ACTIVE && qc->scsicmd == scmd) @@ -4041,10 +4049,20 @@ static void ata_eh_handle_port_suspend(struct ata_port *ap) WARN_ON(ap->pflags & ATA_PFLAG_SUSPENDED); - /* Set all devices attached to the port in standby mode */ - ata_for_each_link(link, ap, HOST_FIRST) { - ata_for_each_dev(dev, link, ENABLED) - ata_dev_power_set_standby(dev); + /* + * We will reach this point for all of the PM events: + * PM_EVENT_SUSPEND (if runtime pm, PM_EVENT_AUTO will also be set) + * PM_EVENT_FREEZE, and PM_EVENT_HIBERNATE. + * + * We do not want to perform disk spin down for PM_EVENT_FREEZE. + * (Spin down will be performed by the subsequent PM_EVENT_HIBERNATE.) + */ + if (!(ap->pm_mesg.event & PM_EVENT_FREEZE)) { + /* Set all devices attached to the port in standby mode */ + ata_for_each_link(link, ap, HOST_FIRST) { + ata_for_each_dev(dev, link, ENABLED) + ata_dev_power_set_standby(dev); + } } /* diff --git a/drivers/ata/libata-scsi.c b/drivers/ata/libata-scsi.c index 277bf0e8ed091..5377d094bf754 100644 --- a/drivers/ata/libata-scsi.c +++ b/drivers/ata/libata-scsi.c @@ -242,10 +242,17 @@ void ata_scsi_set_sense_information(struct ata_device *dev, */ static void ata_scsi_set_passthru_sense_fields(struct ata_queued_cmd *qc) { + struct ata_device *dev = qc->dev; struct scsi_cmnd *cmd = qc->scsicmd; struct ata_taskfile *tf = &qc->result_tf; unsigned char *sb = cmd->sense_buffer; + if (!(qc->flags & ATA_QCFLAG_RTF_FILLED)) { + ata_dev_dbg(dev, + "missing result TF: can't set ATA PT sense fields\n"); + return; + } + if ((sb[0] & 0x7f) >= 0x72) { unsigned char *desc; u8 len; @@ -924,12 +931,16 @@ static void ata_to_sense_error(unsigned id, u8 drv_stat, u8 drv_err, u8 *sk, */ static void ata_gen_passthru_sense(struct ata_queued_cmd *qc) { + struct ata_device *dev = qc->dev; struct scsi_cmnd *cmd = qc->scsicmd; struct ata_taskfile *tf = &qc->result_tf; - unsigned char *sb = cmd->sense_buffer; u8 sense_key, asc, ascq; - memset(sb, 0, SCSI_SENSE_BUFFERSIZE); + if (!(qc->flags & ATA_QCFLAG_RTF_FILLED)) { + ata_dev_dbg(dev, + "missing result TF: can't generate ATA PT sense data\n"); + return; + } /* * Use ata_to_sense_error() to map status register bits @@ -976,14 +987,19 @@ static void ata_gen_ata_sense(struct ata_queued_cmd *qc) u64 block; u8 sense_key, asc, ascq; - memset(sb, 0, SCSI_SENSE_BUFFERSIZE); - if (ata_dev_disabled(dev)) { /* Device disabled after error recovery */ /* LOGICAL UNIT NOT READY, HARD RESET REQUIRED */ ata_scsi_set_sense(dev, cmd, NOT_READY, 0x04, 0x21); return; } + + if (!(qc->flags & ATA_QCFLAG_RTF_FILLED)) { + ata_dev_dbg(dev, + "missing result TF: can't generate sense data\n"); + return; + } + /* Use ata_to_sense_error() to map status register bits * onto sense key, asc & ascq. */ @@ -1709,9 +1725,6 @@ static void ata_scsi_qc_complete(struct ata_queued_cmd *qc) set_status_byte(qc->scsicmd, SAM_STAT_CHECK_CONDITION); } else if (is_error && !have_sense) { ata_gen_ata_sense(qc); - } else { - /* Keep the SCSI ML and status byte, clear host byte. */ - cmd->result &= 0x0000ffff; } ata_qc_done(qc); @@ -2377,7 +2390,7 @@ static unsigned int ata_msense_control(struct ata_device *dev, u8 *buf, case ALL_SUB_MPAGES: n = ata_msense_control_spg0(dev, buf, changeable); n += ata_msense_control_spgt2(dev, buf + n, CDL_T2A_SUB_MPAGE); - n += ata_msense_control_spgt2(dev, buf + n, CDL_T2A_SUB_MPAGE); + n += ata_msense_control_spgt2(dev, buf + n, CDL_T2B_SUB_MPAGE); n += ata_msense_control_ata_feature(dev, buf + n); return n; default: diff --git a/drivers/ata/pata_macio.c b/drivers/ata/pata_macio.c index 17f6ccee53c7c..ffbb2e8591cef 100644 --- a/drivers/ata/pata_macio.c +++ b/drivers/ata/pata_macio.c @@ -541,7 +541,8 @@ static enum ata_completion_errors pata_macio_qc_prep(struct ata_queued_cmd *qc) while (sg_len) { /* table overflow should never happen */ - BUG_ON (pi++ >= MAX_DCMDS); + if (WARN_ON_ONCE(pi >= MAX_DCMDS)) + return AC_ERR_SYSTEM; len = (sg_len < MAX_DBDMA_SEG) ? sg_len : MAX_DBDMA_SEG; table->command = cpu_to_le16(write ? OUTPUT_MORE: INPUT_MORE); @@ -553,11 +554,13 @@ static enum ata_completion_errors pata_macio_qc_prep(struct ata_queued_cmd *qc) addr += len; sg_len -= len; ++table; + ++pi; } } /* Should never happen according to Tejun */ - BUG_ON(!pi); + if (WARN_ON_ONCE(!pi)) + return AC_ERR_SYSTEM; /* Convert the last command to an input/output */ table--; diff --git a/drivers/ata/pata_serverworks.c b/drivers/ata/pata_serverworks.c index 549ff24a98231..4edddf6bcc150 100644 --- a/drivers/ata/pata_serverworks.c +++ b/drivers/ata/pata_serverworks.c @@ -46,10 +46,11 @@ #define SVWKS_CSB5_REVISION_NEW 0x92 /* min PCI_REVISION_ID for UDMA5 (A2.0) */ #define SVWKS_CSB6_REVISION 0xa0 /* min PCI_REVISION_ID for UDMA4 (A1.0) */ -/* Seagate Barracuda ATA IV Family drives in UDMA mode 5 - * can overrun their FIFOs when used with the CSB5 */ - -static const char *csb_bad_ata100[] = { +/* + * Seagate Barracuda ATA IV Family drives in UDMA mode 5 + * can overrun their FIFOs when used with the CSB5. + */ +static const char * const csb_bad_ata100[] = { "ST320011A", "ST340016A", "ST360021A", @@ -163,10 +164,11 @@ static unsigned int serverworks_osb4_filter(struct ata_device *adev, unsigned in * @adev: ATA device * @mask: Mask of proposed modes * - * Check the blacklist and disable UDMA5 if matched + * Check the list of devices with broken UDMA5 and + * disable UDMA5 if matched. */ - -static unsigned int serverworks_csb_filter(struct ata_device *adev, unsigned int mask) +static unsigned int serverworks_csb_filter(struct ata_device *adev, + unsigned int mask) { const char *p; char model_num[ATA_ID_PROD_LEN + 1]; diff --git a/drivers/ata/sata_sil.c b/drivers/ata/sata_sil.c index cc77c02482843..df095659bae0f 100644 --- a/drivers/ata/sata_sil.c +++ b/drivers/ata/sata_sil.c @@ -128,7 +128,7 @@ static const struct pci_device_id sil_pci_tbl[] = { static const struct sil_drivelist { const char *product; unsigned int quirk; -} sil_blacklist [] = { +} sil_quirks[] = { { "ST320012AS", SIL_QUIRK_MOD15WRITE }, { "ST330013AS", SIL_QUIRK_MOD15WRITE }, { "ST340017AS", SIL_QUIRK_MOD15WRITE }, @@ -600,8 +600,8 @@ static void sil_thaw(struct ata_port *ap) * list, and apply the fixups to only the specific * devices/hosts/firmwares that need it. * - * 20040111 - Seagate drives affected by the Mod15Write bug are blacklisted - * The Maxtor quirk is in the blacklist, but I'm keeping the original + * 20040111 - Seagate drives affected by the Mod15Write bug are quirked + * The Maxtor quirk is in sil_quirks, but I'm keeping the original * pessimistic fix for the following reasons... * - There seems to be less info on it, only one device gleaned off the * Windows driver, maybe only one is affected. More info would be greatly @@ -620,9 +620,9 @@ static void sil_dev_config(struct ata_device *dev) ata_id_c_string(dev->id, model_num, ATA_ID_PROD, sizeof(model_num)); - for (n = 0; sil_blacklist[n].product; n++) - if (!strcmp(sil_blacklist[n].product, model_num)) { - quirks = sil_blacklist[n].quirk; + for (n = 0; sil_quirks[n].product; n++) + if (!strcmp(sil_quirks[n].product, model_num)) { + quirks = sil_quirks[n].quirk; break; } diff --git a/drivers/base/TEST_MAPPING b/drivers/base/TEST_MAPPING index d05c11e1b47d2..0023abab85f0f 100644 --- a/drivers/base/TEST_MAPPING +++ b/drivers/base/TEST_MAPPING @@ -264,6 +264,40 @@ "include-filter": "android.hardware.camera2.cts.FastBasicsTest" } ] + }, + { + "name": "CtsIncrementalInstallHostTestCases", + "options": [ + { + "include-filter": "android.incrementalinstall.cts.IncrementalFeatureTest" + }, + { + "include-filter": "android.incrementalinstall.cts.IncrementalInstallTest" + } + ] + }, + { + "name": "CtsLibcoreLegacy22TestCases", + "options": [ + { + "include-filter": "android.util.cts.FloatMathTest" + } + ] + }, + { + "name": "CtsRootBluetoothTestCases" + }, + { + "name": "vts_kernel_net_tests" + }, + { + "name": "KernelAbilistTest" + }, + { + "name": "VtsAidlHalSensorsTargetTest" + }, + { + "name": "VtsBootconfigTest" } ] } diff --git a/drivers/base/bus.c b/drivers/base/bus.c index d7c4330786cae..d4361ad3b433f 100644 --- a/drivers/base/bus.c +++ b/drivers/base/bus.c @@ -152,7 +152,8 @@ static ssize_t bus_attr_show(struct kobject *kobj, struct attribute *attr, { struct bus_attribute *bus_attr = to_bus_attr(attr); struct subsys_private *subsys_priv = to_subsys_private(kobj); - ssize_t ret = 0; + /* return -EIO for reading a bus attribute without show() */ + ssize_t ret = -EIO; if (bus_attr->show) ret = bus_attr->show(subsys_priv->bus, buf); @@ -164,7 +165,8 @@ static ssize_t bus_attr_store(struct kobject *kobj, struct attribute *attr, { struct bus_attribute *bus_attr = to_bus_attr(attr); struct subsys_private *subsys_priv = to_subsys_private(kobj); - ssize_t ret = 0; + /* return -EIO for writing a bus attribute without store() */ + ssize_t ret = -EIO; if (bus_attr->store) ret = bus_attr->store(subsys_priv->bus, buf, count); @@ -920,6 +922,8 @@ int bus_register(const struct bus_type *bus) bus_remove_file(bus, &bus_attr_uevent); bus_uevent_fail: kset_unregister(&priv->subsys); + /* Above kset_unregister() will kfree @priv */ + priv = NULL; out: kfree(priv); return retval; diff --git a/drivers/base/core.c b/drivers/base/core.c index cb323700e952f..60a0a4630a5bb 100644 --- a/drivers/base/core.c +++ b/drivers/base/core.c @@ -4485,9 +4485,11 @@ EXPORT_SYMBOL_GPL(device_destroy); */ int device_rename(struct device *dev, const char *new_name) { + struct subsys_private *sp = NULL; struct kobject *kobj = &dev->kobj; char *old_device_name = NULL; int error; + bool is_link_renamed = false; dev = get_device(dev); if (!dev) @@ -4502,7 +4504,7 @@ int device_rename(struct device *dev, const char *new_name) } if (dev->class) { - struct subsys_private *sp = class_to_subsys(dev->class); + sp = class_to_subsys(dev->class); if (!sp) { error = -EINVAL; @@ -4511,16 +4513,19 @@ int device_rename(struct device *dev, const char *new_name) error = sysfs_rename_link_ns(&sp->subsys.kobj, kobj, old_device_name, new_name, kobject_namespace(kobj)); - subsys_put(sp); if (error) goto out; + + is_link_renamed = true; } error = kobject_rename(kobj, new_name); - if (error) - goto out; - out: + if (error && is_link_renamed) + sysfs_rename_link_ns(&sp->subsys.kobj, kobj, new_name, + old_device_name, kobject_namespace(kobj)); + subsys_put(sp); + put_device(dev); kfree(old_device_name); diff --git a/drivers/base/devres.c b/drivers/base/devres.c index 8d709dbd4e0c1..e9b0d94aeabd9 100644 --- a/drivers/base/devres.c +++ b/drivers/base/devres.c @@ -567,6 +567,7 @@ void * devres_open_group(struct device *dev, void *id, gfp_t gfp) grp->id = grp; if (id) grp->id = id; + grp->color = 0; spin_lock_irqsave(&dev->devres_lock, flags); add_dr(dev, &grp->node[0]); diff --git a/drivers/base/firmware_loader/fallback.c b/drivers/base/firmware_loader/fallback.c index bf68e39478147..3ef0b312ae719 100644 --- a/drivers/base/firmware_loader/fallback.c +++ b/drivers/base/firmware_loader/fallback.c @@ -46,7 +46,7 @@ static inline int fw_sysfs_wait_timeout(struct fw_priv *fw_priv, long timeout) static LIST_HEAD(pending_fw_head); -void kill_pending_fw_fallback_reqs(bool only_kill_custom) +void kill_pending_fw_fallback_reqs(bool kill_all) { struct fw_priv *fw_priv; struct fw_priv *next; @@ -54,9 +54,13 @@ void kill_pending_fw_fallback_reqs(bool only_kill_custom) mutex_lock(&fw_lock); list_for_each_entry_safe(fw_priv, next, &pending_fw_head, pending_list) { - if (!fw_priv->need_uevent || !only_kill_custom) + if (kill_all || !fw_priv->need_uevent) __fw_load_abort(fw_priv); } + + if (kill_all) + fw_load_abort_all = true; + mutex_unlock(&fw_lock); } @@ -86,7 +90,7 @@ static int fw_load_sysfs_fallback(struct fw_sysfs *fw_sysfs, long timeout) } mutex_lock(&fw_lock); - if (fw_state_is_aborted(fw_priv)) { + if (fw_load_abort_all || fw_state_is_aborted(fw_priv)) { mutex_unlock(&fw_lock); retval = -EINTR; goto out; diff --git a/drivers/base/firmware_loader/fallback.h b/drivers/base/firmware_loader/fallback.h index 144148595660d..ccf912bef6ca7 100644 --- a/drivers/base/firmware_loader/fallback.h +++ b/drivers/base/firmware_loader/fallback.h @@ -13,7 +13,7 @@ int firmware_fallback_sysfs(struct firmware *fw, const char *name, struct device *device, u32 opt_flags, int ret); -void kill_pending_fw_fallback_reqs(bool only_kill_custom); +void kill_pending_fw_fallback_reqs(bool kill_all); void fw_fallback_set_cache_timeout(void); void fw_fallback_set_default_timeout(void); @@ -28,7 +28,7 @@ static inline int firmware_fallback_sysfs(struct firmware *fw, const char *name, return ret; } -static inline void kill_pending_fw_fallback_reqs(bool only_kill_custom) { } +static inline void kill_pending_fw_fallback_reqs(bool kill_all) { } static inline void fw_fallback_set_cache_timeout(void) { } static inline void fw_fallback_set_default_timeout(void) { } #endif /* CONFIG_FW_LOADER_USER_HELPER */ diff --git a/drivers/base/firmware_loader/firmware.h b/drivers/base/firmware_loader/firmware.h index bf549d6500d7b..e891742ba2647 100644 --- a/drivers/base/firmware_loader/firmware.h +++ b/drivers/base/firmware_loader/firmware.h @@ -86,6 +86,7 @@ struct fw_priv { extern struct mutex fw_lock; extern struct firmware_cache fw_cache; +extern bool fw_load_abort_all; static inline bool __fw_state_check(struct fw_priv *fw_priv, enum fw_status status) diff --git a/drivers/base/firmware_loader/main.c b/drivers/base/firmware_loader/main.c index 1cae33ec7dc28..9c7104b3b7fbb 100644 --- a/drivers/base/firmware_loader/main.c +++ b/drivers/base/firmware_loader/main.c @@ -93,6 +93,7 @@ static inline struct fw_priv *to_fw_priv(struct kref *ref) DEFINE_MUTEX(fw_lock); struct firmware_cache fw_cache; +bool fw_load_abort_all; void fw_state_init(struct fw_priv *fw_priv) { @@ -912,6 +913,26 @@ static void fw_log_firmware_info(const struct firmware *fw, const char *name, {} #endif +/* + * Reject firmware file names with ".." path components. + * There are drivers that construct firmware file names from device-supplied + * strings, and we don't want some device to be able to tell us "I would like to + * be sent my firmware from ../../../etc/shadow, please". + * + * Search for ".." surrounded by either '/' or start/end of string. + * + * This intentionally only looks at the firmware name, not at the firmware base + * directory or at symlink contents. + */ +static bool name_contains_dotdot(const char *name) +{ + size_t name_len = strlen(name); + + return strcmp(name, "..") == 0 || strncmp(name, "../", 3) == 0 || + strstr(name, "/../") != NULL || + (name_len >= 3 && strcmp(name+name_len-3, "/..") == 0); +} + /* called from request_firmware() and request_firmware_work_func() */ static int _request_firmware(const struct firmware **firmware_p, const char *name, @@ -932,6 +953,14 @@ _request_firmware(const struct firmware **firmware_p, const char *name, goto out; } + if (name_contains_dotdot(name)) { + dev_warn(device, + "Firmware load for '%s' refused, path contains '..' component\n", + name); + ret = -EINVAL; + goto out; + } + ret = _request_firmware_prepare(&fw, name, device, buf, size, offset, opt_flags); if (ret <= 0) /* error or already assigned */ @@ -1009,6 +1038,8 @@ _request_firmware(const struct firmware **firmware_p, const char *name, * @name will be used as $FIRMWARE in the uevent environment and * should be distinctive enough not to be confused with any other * firmware image for this or any other device. + * It must not contain any ".." path components - "foo/bar..bin" is + * allowed, but "foo/../bar.bin" is not. * * Caller must hold the reference count of @device. * @@ -1592,10 +1623,10 @@ static int fw_pm_notify(struct notifier_block *notify_block, case PM_SUSPEND_PREPARE: case PM_RESTORE_PREPARE: /* - * kill pending fallback requests with a custom fallback - * to avoid stalling suspend. + * Here, kill pending fallback requests will only kill + * non-uevent firmware request to avoid stalling suspend. */ - kill_pending_fw_fallback_reqs(true); + kill_pending_fw_fallback_reqs(false); device_cache_fw_images(); break; @@ -1680,7 +1711,7 @@ static int fw_shutdown_notify(struct notifier_block *unused1, * Kill all pending fallback requests to avoid both stalling shutdown, * and avoid a deadlock with the usermode_lock. */ - kill_pending_fw_fallback_reqs(false); + kill_pending_fw_fallback_reqs(true); return NOTIFY_DONE; } diff --git a/drivers/base/module.c b/drivers/base/module.c index b0b79b9c189d4..0d5c5da367f72 100644 --- a/drivers/base/module.c +++ b/drivers/base/module.c @@ -66,27 +66,31 @@ int module_add_driver(struct module *mod, struct device_driver *drv) driver_name = make_driver_name(drv); if (!driver_name) { ret = -ENOMEM; - goto out; + goto out_remove_kobj; } module_create_drivers_dir(mk); if (!mk->drivers_dir) { ret = -EINVAL; - goto out; + goto out_free_driver_name; } ret = sysfs_create_link(mk->drivers_dir, &drv->p->kobj, driver_name); if (ret) - goto out; + goto out_remove_drivers_dir; kfree(driver_name); return 0; -out: - sysfs_remove_link(&drv->p->kobj, "module"); + +out_remove_drivers_dir: sysfs_remove_link(mk->drivers_dir, driver_name); + +out_free_driver_name: kfree(driver_name); +out_remove_kobj: + sysfs_remove_link(&drv->p->kobj, "module"); return ret; } diff --git a/drivers/base/power/domain.c b/drivers/base/power/domain.c index 011948f02b367..5663b3d6557bd 100644 --- a/drivers/base/power/domain.c +++ b/drivers/base/power/domain.c @@ -3145,7 +3145,7 @@ static int genpd_summary_one(struct seq_file *s, else snprintf(state, sizeof(state), "%s", status_lookup[genpd->status]); - seq_printf(s, "%-30s %-50s %u", genpd->name, state, genpd->performance_state); + seq_printf(s, "%-30s %-49s %u", genpd->name, state, genpd->performance_state); /* * Modifications on the list require holding locks on both diff --git a/drivers/base/power/main.c b/drivers/base/power/main.c index a83fc6d870624..df7ac64edcda3 100644 --- a/drivers/base/power/main.c +++ b/drivers/base/power/main.c @@ -36,6 +36,8 @@ #include #include +#include + #include "../base.h" #include "power.h" @@ -239,8 +241,11 @@ static void dpm_wait(struct device *dev, bool async) if (!dev) return; - if (async || (pm_async_enabled && dev->power.async_suspend)) + if (async || (pm_async_enabled && dev->power.async_suspend)) { + trace_android_vh_dpm_wait_start(dev); wait_for_completion(&dev->power.completion); + trace_android_vh_dpm_wait_finish(dev); + } } static int dpm_wait_fn(struct device *dev, void *async_ptr) diff --git a/drivers/base/regmap/regcache-maple.c b/drivers/base/regmap/regcache-maple.c index 55999a50ccc0b..0b6c2277128b4 100644 --- a/drivers/base/regmap/regcache-maple.c +++ b/drivers/base/regmap/regcache-maple.c @@ -110,7 +110,8 @@ static int regcache_maple_drop(struct regmap *map, unsigned int min, struct maple_tree *mt = map->cache; MA_STATE(mas, mt, min, max); unsigned long *entry, *lower, *upper; - unsigned long lower_index, lower_last; + /* initialized to work around false-positive -Wuninitialized warning */ + unsigned long lower_index = 0, lower_last = 0; unsigned long upper_index, upper_last; int ret = 0; diff --git a/drivers/block/TEST_MAPPING b/drivers/block/TEST_MAPPING index f301c19f14e6d..0b08c69e42694 100644 --- a/drivers/block/TEST_MAPPING +++ b/drivers/block/TEST_MAPPING @@ -213,6 +213,34 @@ "include-filter": "android.hardware.camera2.cts.FastBasicsTest" } ] + }, + { + "name": "CtsIncrementalInstallHostTestCases", + "options": [ + { + "include-filter": "android.incrementalinstall.cts.IncrementalFeatureTest" + }, + { + "include-filter": "android.incrementalinstall.cts.IncrementalInstallTest" + } + ] + }, + { + "name": "CtsLibcoreLegacy22TestCases", + "options": [ + { + "include-filter": "android.util.cts.FloatMathTest" + } + ] + }, + { + "name": "CtsRootBluetoothTestCases" + }, + { + "name": "vts_kernel_net_tests" + }, + { + "name": "VtsAidlHalSensorsTargetTest" } ] } diff --git a/drivers/block/aoe/aoecmd.c b/drivers/block/aoe/aoecmd.c index cc9077b588d7e..d1f4ddc576451 100644 --- a/drivers/block/aoe/aoecmd.c +++ b/drivers/block/aoe/aoecmd.c @@ -361,6 +361,7 @@ ata_rw_frameinit(struct frame *f) } ah->cmdstat = ATA_CMD_PIO_READ | writebit | extbit; + dev_hold(t->ifp->nd); skb->dev = t->ifp->nd; } @@ -401,6 +402,8 @@ aoecmd_ata_rw(struct aoedev *d) __skb_queue_head_init(&queue); __skb_queue_tail(&queue, skb); aoenet_xmit(&queue); + } else { + dev_put(f->t->ifp->nd); } return 1; } @@ -483,10 +486,13 @@ resend(struct aoedev *d, struct frame *f) memcpy(h->dst, t->addr, sizeof h->dst); memcpy(h->src, t->ifp->nd->dev_addr, sizeof h->src); + dev_hold(t->ifp->nd); skb->dev = t->ifp->nd; skb = skb_clone(skb, GFP_ATOMIC); - if (skb == NULL) + if (skb == NULL) { + dev_put(t->ifp->nd); return; + } f->sent = ktime_get(); __skb_queue_head_init(&queue); __skb_queue_tail(&queue, skb); @@ -617,6 +623,8 @@ probe(struct aoetgt *t) __skb_queue_head_init(&queue); __skb_queue_tail(&queue, skb); aoenet_xmit(&queue); + } else { + dev_put(f->t->ifp->nd); } } @@ -1395,6 +1403,7 @@ aoecmd_ata_id(struct aoedev *d) ah->cmdstat = ATA_CMD_ID_ATA; ah->lba3 = 0xa0; + dev_hold(t->ifp->nd); skb->dev = t->ifp->nd; d->rttavg = RTTAVG_INIT; @@ -1404,6 +1413,8 @@ aoecmd_ata_id(struct aoedev *d) skb = skb_clone(skb, GFP_ATOMIC); if (skb) f->sent = ktime_get(); + else + dev_put(t->ifp->nd); return skb; } diff --git a/drivers/block/drbd/drbd_main.c b/drivers/block/drbd/drbd_main.c index 6bc86106c7b2a..102cc3034412d 100644 --- a/drivers/block/drbd/drbd_main.c +++ b/drivers/block/drbd/drbd_main.c @@ -3392,10 +3392,12 @@ void drbd_uuid_new_current(struct drbd_device *device) __must_hold(local) void drbd_uuid_set_bm(struct drbd_device *device, u64 val) __must_hold(local) { unsigned long flags; - if (device->ldev->md.uuid[UI_BITMAP] == 0 && val == 0) + spin_lock_irqsave(&device->ldev->md.uuid_lock, flags); + if (device->ldev->md.uuid[UI_BITMAP] == 0 && val == 0) { + spin_unlock_irqrestore(&device->ldev->md.uuid_lock, flags); return; + } - spin_lock_irqsave(&device->ldev->md.uuid_lock, flags); if (val == 0) { drbd_uuid_move_history(device); device->ldev->md.uuid[UI_HISTORY_START] = device->ldev->md.uuid[UI_BITMAP]; diff --git a/drivers/block/drbd/drbd_state.c b/drivers/block/drbd/drbd_state.c index 287a8d1d3f707..87cf5883078f5 100644 --- a/drivers/block/drbd/drbd_state.c +++ b/drivers/block/drbd/drbd_state.c @@ -876,7 +876,7 @@ is_valid_state(struct drbd_device *device, union drbd_state ns) ns.disk == D_OUTDATED) rv = SS_CONNECTED_OUTDATES; - else if ((ns.conn == C_VERIFY_S || ns.conn == C_VERIFY_T) && + else if (nc && (ns.conn == C_VERIFY_S || ns.conn == C_VERIFY_T) && (nc->verify_alg[0] == 0)) rv = SS_NO_VERIFY_ALG; diff --git a/drivers/block/loop.c b/drivers/block/loop.c index 50ef15cbdd54c..5bd92d74a6172 100644 --- a/drivers/block/loop.c +++ b/drivers/block/loop.c @@ -211,13 +211,10 @@ static void __loop_update_dio(struct loop_device *lo, bool dio) if (lo->lo_state == Lo_bound) blk_mq_freeze_queue(lo->lo_queue); lo->use_dio = use_dio; - if (use_dio) { - blk_queue_flag_clear(QUEUE_FLAG_NOMERGES, lo->lo_queue); + if (use_dio) lo->lo_flags |= LO_FLAGS_DIRECT_IO; - } else { - blk_queue_flag_set(QUEUE_FLAG_NOMERGES, lo->lo_queue); + else lo->lo_flags &= ~LO_FLAGS_DIRECT_IO; - } if (lo->lo_state == Lo_bound) blk_mq_unfreeze_queue(lo->lo_queue); } @@ -2039,14 +2036,6 @@ static int loop_add(int i) blk_queue_max_hw_sectors(lo->lo_queue, BLK_DEF_MAX_SECTORS); - /* - * By default, we do buffer IO, so it doesn't make sense to enable - * merge because the I/O submitted to backing file is handled page by - * page. For directio mode, merge does help to dispatch bigger request - * to underlayer disk. We will enable merge once directio is enabled. - */ - blk_queue_flag_set(QUEUE_FLAG_NOMERGES, lo->lo_queue); - /* * Disable partition scanning by default. The in-kernel partition * scanning can be requested individually per-device during its diff --git a/drivers/block/nbd.c b/drivers/block/nbd.c index 1089dc646b808..96b349148e578 100644 --- a/drivers/block/nbd.c +++ b/drivers/block/nbd.c @@ -181,6 +181,17 @@ static void nbd_requeue_cmd(struct nbd_cmd *cmd) { struct request *req = blk_mq_rq_from_pdu(cmd); + lockdep_assert_held(&cmd->lock); + + /* + * Clear INFLIGHT flag so that this cmd won't be completed in + * normal completion path + * + * INFLIGHT flag will be set when the cmd is queued to nbd next + * time. + */ + __clear_bit(NBD_CMD_INFLIGHT, &cmd->flags); + if (!test_and_set_bit(NBD_CMD_REQUEUED, &cmd->flags)) blk_mq_requeue_request(req, true); } @@ -461,8 +472,8 @@ static enum blk_eh_timer_return nbd_xmit_timeout(struct request *req) nbd_mark_nsock_dead(nbd, nsock, 1); mutex_unlock(&nsock->tx_lock); } - mutex_unlock(&cmd->lock); nbd_requeue_cmd(cmd); + mutex_unlock(&cmd->lock); nbd_config_put(nbd); return BLK_EH_DONE; } diff --git a/drivers/block/null_blk/main.c b/drivers/block/null_blk/main.c index 4f315a72d29be..f771d1d02b55f 100644 --- a/drivers/block/null_blk/main.c +++ b/drivers/block/null_blk/main.c @@ -396,13 +396,25 @@ static int nullb_update_nr_hw_queues(struct nullb_device *dev, static int nullb_apply_submit_queues(struct nullb_device *dev, unsigned int submit_queues) { - return nullb_update_nr_hw_queues(dev, submit_queues, dev->poll_queues); + int ret; + + mutex_lock(&lock); + ret = nullb_update_nr_hw_queues(dev, submit_queues, dev->poll_queues); + mutex_unlock(&lock); + + return ret; } static int nullb_apply_poll_queues(struct nullb_device *dev, unsigned int poll_queues) { - return nullb_update_nr_hw_queues(dev, dev->submit_queues, poll_queues); + int ret; + + mutex_lock(&lock); + ret = nullb_update_nr_hw_queues(dev, dev->submit_queues, poll_queues); + mutex_unlock(&lock); + + return ret; } NULLB_DEVICE_ATTR(size, ulong, NULL); @@ -449,28 +461,32 @@ static ssize_t nullb_device_power_store(struct config_item *item, if (ret < 0) return ret; + ret = count; + mutex_lock(&lock); if (!dev->power && newp) { if (test_and_set_bit(NULLB_DEV_FL_UP, &dev->flags)) - return count; + goto out; + ret = null_add_dev(dev); if (ret) { clear_bit(NULLB_DEV_FL_UP, &dev->flags); - return ret; + goto out; } set_bit(NULLB_DEV_FL_CONFIGURED, &dev->flags); dev->power = newp; + ret = count; } else if (dev->power && !newp) { if (test_and_clear_bit(NULLB_DEV_FL_UP, &dev->flags)) { - mutex_lock(&lock); dev->power = newp; null_del_dev(dev->nullb); - mutex_unlock(&lock); } clear_bit(NULLB_DEV_FL_CONFIGURED, &dev->flags); } - return count; +out: + mutex_unlock(&lock); + return ret; } CONFIGFS_ATTR(nullb_device_, power); @@ -1831,7 +1847,7 @@ static void null_del_dev(struct nullb *nullb) dev = nullb->dev; - ida_simple_remove(&nullb_indexes, nullb->index); + ida_free(&nullb_indexes, nullb->index); list_del_init(&nullb->list); @@ -2164,15 +2180,12 @@ static int null_add_dev(struct nullb_device *dev) nullb->q->queuedata = nullb; blk_queue_flag_set(QUEUE_FLAG_NONROT, nullb->q); - mutex_lock(&lock); - rv = ida_simple_get(&nullb_indexes, 0, 0, GFP_KERNEL); - if (rv < 0) { - mutex_unlock(&lock); + rv = ida_alloc(&nullb_indexes, GFP_KERNEL); + if (rv < 0) goto out_cleanup_zone; - } + nullb->index = rv; dev->index = rv; - mutex_unlock(&lock); blk_queue_logical_block_size(nullb->q, dev->blocksize); blk_queue_physical_block_size(nullb->q, dev->blocksize); @@ -2198,9 +2211,7 @@ static int null_add_dev(struct nullb_device *dev) if (rv) goto out_ida_free; - mutex_lock(&lock); list_add_tail(&nullb->list, &nullb_list); - mutex_unlock(&lock); pr_info("disk %s created\n", nullb->disk_name); @@ -2249,7 +2260,9 @@ static int null_create_dev(void) if (!dev) return -ENOMEM; + mutex_lock(&lock); ret = null_add_dev(dev); + mutex_unlock(&lock); if (ret) { null_free_dev(dev); return ret; diff --git a/drivers/block/ublk_drv.c b/drivers/block/ublk_drv.c index f4e0573c47114..f31607a24f573 100644 --- a/drivers/block/ublk_drv.c +++ b/drivers/block/ublk_drv.c @@ -68,9 +68,6 @@ struct ublk_rq_data { struct llist_node node; struct kref ref; - __u64 sector; - __u32 operation; - __u32 nr_zones; }; struct ublk_uring_cmd_pdu { @@ -215,6 +212,33 @@ static inline bool ublk_queue_is_zoned(struct ublk_queue *ubq) #ifdef CONFIG_BLK_DEV_ZONED +struct ublk_zoned_report_desc { + __u64 sector; + __u32 operation; + __u32 nr_zones; +}; + +static DEFINE_XARRAY(ublk_zoned_report_descs); + +static int ublk_zoned_insert_report_desc(const struct request *req, + struct ublk_zoned_report_desc *desc) +{ + return xa_insert(&ublk_zoned_report_descs, (unsigned long)req, + desc, GFP_KERNEL); +} + +static struct ublk_zoned_report_desc *ublk_zoned_erase_report_desc( + const struct request *req) +{ + return xa_erase(&ublk_zoned_report_descs, (unsigned long)req); +} + +static struct ublk_zoned_report_desc *ublk_zoned_get_report_desc( + const struct request *req) +{ + return xa_load(&ublk_zoned_report_descs, (unsigned long)req); +} + static int ublk_get_nr_zones(const struct ublk_device *ub) { const struct ublk_param_basic *p = &ub->params.basic; @@ -321,7 +345,7 @@ static int ublk_report_zones(struct gendisk *disk, sector_t sector, unsigned int zones_in_request = min_t(unsigned int, remaining_zones, max_zones_per_request); struct request *req; - struct ublk_rq_data *pdu; + struct ublk_zoned_report_desc desc; blk_status_t status; memset(buffer, 0, buffer_length); @@ -332,20 +356,23 @@ static int ublk_report_zones(struct gendisk *disk, sector_t sector, goto out; } - pdu = blk_mq_rq_to_pdu(req); - pdu->operation = UBLK_IO_OP_REPORT_ZONES; - pdu->sector = sector; - pdu->nr_zones = zones_in_request; + desc.operation = UBLK_IO_OP_REPORT_ZONES; + desc.sector = sector; + desc.nr_zones = zones_in_request; + ret = ublk_zoned_insert_report_desc(req, &desc); + if (ret) + goto free_req; ret = blk_rq_map_kern(disk->queue, req, buffer, buffer_length, GFP_KERNEL); - if (ret) { - blk_mq_free_request(req); - goto out; - } + if (ret) + goto erase_desc; status = blk_execute_rq(req, 0); ret = blk_status_to_errno(status); +erase_desc: + ublk_zoned_erase_report_desc(req); +free_req: blk_mq_free_request(req); if (ret) goto out; @@ -379,7 +406,7 @@ static blk_status_t ublk_setup_iod_zoned(struct ublk_queue *ubq, { struct ublksrv_io_desc *iod = ublk_get_iod(ubq, req->tag); struct ublk_io *io = &ubq->ios[req->tag]; - struct ublk_rq_data *pdu = blk_mq_rq_to_pdu(req); + struct ublk_zoned_report_desc *desc; u32 ublk_op; switch (req_op(req)) { @@ -402,12 +429,15 @@ static blk_status_t ublk_setup_iod_zoned(struct ublk_queue *ubq, ublk_op = UBLK_IO_OP_ZONE_RESET_ALL; break; case REQ_OP_DRV_IN: - ublk_op = pdu->operation; + desc = ublk_zoned_get_report_desc(req); + if (!desc) + return BLK_STS_IOERR; + ublk_op = desc->operation; switch (ublk_op) { case UBLK_IO_OP_REPORT_ZONES: iod->op_flags = ublk_op | ublk_req_build_flags(req); - iod->nr_zones = pdu->nr_zones; - iod->start_sector = pdu->sector; + iod->nr_zones = desc->nr_zones; + iod->start_sector = desc->sector; return BLK_STS_OK; default: return BLK_STS_IOERR; @@ -2297,10 +2327,19 @@ static int ublk_ctrl_add_dev(struct io_uring_cmd *cmd) * TODO: provide forward progress for RECOVERY handler, so that * unprivileged device can benefit from it */ - if (info.flags & UBLK_F_UNPRIVILEGED_DEV) + if (info.flags & UBLK_F_UNPRIVILEGED_DEV) { info.flags &= ~(UBLK_F_USER_RECOVERY_REISSUE | UBLK_F_USER_RECOVERY); + /* + * For USER_COPY, we depends on userspace to fill request + * buffer by pwrite() to ublk char device, which can't be + * used for unprivileged device + */ + if (info.flags & UBLK_F_USER_COPY) + return -EINVAL; + } + /* the created device is always owned by current user */ ublk_store_owner_uid_gid(&info.owner_uid, &info.owner_gid); @@ -2603,6 +2642,8 @@ static int ublk_ctrl_start_recovery(struct ublk_device *ub, mutex_lock(&ub->mutex); if (!ublk_can_use_recovery(ub)) goto out_unlock; + if (!ub->nr_queues_ready) + goto out_unlock; /* * START_RECOVERY is only allowd after: * diff --git a/drivers/block/zram/zram_drv.c b/drivers/block/zram/zram_drv.c index 0f10709b0ee5f..e20d438205fe5 100644 --- a/drivers/block/zram/zram_drv.c +++ b/drivers/block/zram/zram_drv.c @@ -1984,6 +1984,13 @@ static void zram_destroy_comps(struct zram *zram) zcomp_destroy(comp); zram->num_active_comps--; } + + for (prio = ZRAM_PRIMARY_COMP; prio < ZRAM_MAX_COMPS; prio++) { + /* Do not free statically defined compression algorithms */ + if (zram->comp_algs[prio] != default_compressor) + kfree(zram->comp_algs[prio]); + zram->comp_algs[prio] = NULL; + } } static void zram_reset_device(struct zram *zram) diff --git a/drivers/bluetooth/btintel.c b/drivers/bluetooth/btintel.c index 7da4bcdd395d6..36da6bea2e414 100644 --- a/drivers/bluetooth/btintel.c +++ b/drivers/bluetooth/btintel.c @@ -2206,8 +2206,12 @@ static int btintel_prepare_fw_download_tlv(struct hci_dev *hdev, if (err < 0) { if (err == -EALREADY) { /* Firmware has already been loaded */ - btintel_set_flag(hdev, INTEL_FIRMWARE_LOADED); - err = 0; + bt_dev_info(hdev, "Firmware already loaded"); + //btintel_set_flag(hdev, INTEL_FIRMWARE_LOADED); + btintel_reset_to_bootloader(hdev); + /*even this error report, the BT still working , + so 150ms delay is still needed */ + msleep(150); goto done; } diff --git a/drivers/bluetooth/btmrvl_sdio.c b/drivers/bluetooth/btmrvl_sdio.c index d76c799553aaa..468e4165c7cc0 100644 --- a/drivers/bluetooth/btmrvl_sdio.c +++ b/drivers/bluetooth/btmrvl_sdio.c @@ -92,7 +92,7 @@ static int btmrvl_sdio_probe_of(struct device *dev, } else { ret = devm_request_irq(dev, cfg->irq_bt, btmrvl_wake_irq_bt, - 0, "bt_wake", card); + IRQF_NO_AUTOEN, "bt_wake", card); if (ret) { dev_err(dev, "Failed to request irq_bt %d (%d)\n", @@ -101,7 +101,6 @@ static int btmrvl_sdio_probe_of(struct device *dev, /* Configure wakeup (enabled by default) */ device_init_wakeup(dev, true); - disable_irq(cfg->irq_bt); } } diff --git a/drivers/bluetooth/btnxpuart.c b/drivers/bluetooth/btnxpuart.c index 814dd966b1a45..5ee9a8b8dcfdb 100644 --- a/drivers/bluetooth/btnxpuart.c +++ b/drivers/bluetooth/btnxpuart.c @@ -1326,8 +1326,10 @@ static int btnxpuart_close(struct hci_dev *hdev) serdev_device_close(nxpdev->serdev); skb_queue_purge(&nxpdev->txq); - kfree_skb(nxpdev->rx_skb); - nxpdev->rx_skb = NULL; + if (!IS_ERR_OR_NULL(nxpdev->rx_skb)) { + kfree_skb(nxpdev->rx_skb); + nxpdev->rx_skb = NULL; + } clear_bit(BTNXPUART_SERDEV_OPEN, &nxpdev->tx_state); return 0; } @@ -1342,8 +1344,10 @@ static int btnxpuart_flush(struct hci_dev *hdev) cancel_work_sync(&nxpdev->tx_work); - kfree_skb(nxpdev->rx_skb); - nxpdev->rx_skb = NULL; + if (!IS_ERR_OR_NULL(nxpdev->rx_skb)) { + kfree_skb(nxpdev->rx_skb); + nxpdev->rx_skb = NULL; + } return 0; } diff --git a/drivers/bluetooth/btrtl.c b/drivers/bluetooth/btrtl.c index 277d039ecbb42..1e7c1f9db9e4b 100644 --- a/drivers/bluetooth/btrtl.c +++ b/drivers/bluetooth/btrtl.c @@ -1285,6 +1285,7 @@ void btrtl_set_quirks(struct hci_dev *hdev, struct btrtl_device_info *btrtl_dev) btrealtek_set_flag(hdev, REALTEK_ALT6_CONTINUOUS_TX_CHIP); if (btrtl_dev->project_id == CHIP_ID_8852A || + btrtl_dev->project_id == CHIP_ID_8852B || btrtl_dev->project_id == CHIP_ID_8852C) set_bit(HCI_QUIRK_USE_MSFT_EXT_ADDRESS_FILTER, &hdev->quirks); diff --git a/drivers/bluetooth/btusb.c b/drivers/bluetooth/btusb.c index d0f8940851b85..738c0c4a470b5 100644 --- a/drivers/bluetooth/btusb.c +++ b/drivers/bluetooth/btusb.c @@ -537,6 +537,8 @@ static const struct usb_device_id quirks_table[] = { BTUSB_WIDEBAND_SPEECH }, { USB_DEVICE(0x13d3, 0x3592), .driver_info = BTUSB_REALTEK | BTUSB_WIDEBAND_SPEECH }, + { USB_DEVICE(0x0489, 0xe122), .driver_info = BTUSB_REALTEK | + BTUSB_WIDEBAND_SPEECH }, /* Realtek 8852BE Bluetooth devices */ { USB_DEVICE(0x0cb8, 0xc559), .driver_info = BTUSB_REALTEK | @@ -1352,7 +1354,15 @@ static int btusb_submit_intr_urb(struct hci_dev *hdev, gfp_t mem_flags) if (!urb) return -ENOMEM; - size = le16_to_cpu(data->intr_ep->wMaxPacketSize); + if (le16_to_cpu(data->udev->descriptor.idVendor) == 0x0a12 && + le16_to_cpu(data->udev->descriptor.idProduct) == 0x0001) + /* Fake CSR devices don't seem to support sort-transter */ + size = le16_to_cpu(data->intr_ep->wMaxPacketSize); + else + /* Use maximum HCI Event size so the USB stack handles + * ZPL/short-transfer automatically. + */ + size = HCI_MAX_EVENT_SIZE; buf = kmalloc(size, mem_flags); if (!buf) { diff --git a/drivers/bluetooth/hci_qca.c b/drivers/bluetooth/hci_qca.c index 9082456d80fbf..7a552387129ef 100644 --- a/drivers/bluetooth/hci_qca.c +++ b/drivers/bluetooth/hci_qca.c @@ -1090,6 +1090,7 @@ static void qca_controller_memdump(struct work_struct *work) qca->memdump_state = QCA_MEMDUMP_COLLECTED; cancel_delayed_work(&qca->ctrl_memdump_timeout); clear_bit(QCA_MEMDUMP_COLLECTION, &qca->flags); + clear_bit(QCA_IBS_DISABLED, &qca->flags); mutex_unlock(&qca->hci_memdump_lock); return; } diff --git a/drivers/bus/arm-integrator-lm.c b/drivers/bus/arm-integrator-lm.c index b715c8ab36e8b..a65c79b08804f 100644 --- a/drivers/bus/arm-integrator-lm.c +++ b/drivers/bus/arm-integrator-lm.c @@ -85,6 +85,7 @@ static int integrator_ap_lm_probe(struct platform_device *pdev) return -ENODEV; } map = syscon_node_to_regmap(syscon); + of_node_put(syscon); if (IS_ERR(map)) { dev_err(dev, "could not find Integrator/AP system controller\n"); diff --git a/drivers/bus/mhi/ep/internal.h b/drivers/bus/mhi/ep/internal.h index a2125fa5fe2f9..accbf3a51d0cf 100644 --- a/drivers/bus/mhi/ep/internal.h +++ b/drivers/bus/mhi/ep/internal.h @@ -159,6 +159,7 @@ struct mhi_ep_chan { void (*xfer_cb)(struct mhi_ep_device *mhi_dev, struct mhi_result *result); enum mhi_ch_state state; enum dma_data_direction dir; + size_t rd_offset; u64 tre_loc; u32 tre_size; u32 tre_bytes_left; diff --git a/drivers/bus/mhi/ep/main.c b/drivers/bus/mhi/ep/main.c index 934cdbca08e44..c48f4d9f2c690 100644 --- a/drivers/bus/mhi/ep/main.c +++ b/drivers/bus/mhi/ep/main.c @@ -74,7 +74,7 @@ static int mhi_ep_send_completion_event(struct mhi_ep_cntrl *mhi_cntrl, struct m struct mhi_ring_element *event; int ret; - event = kmem_cache_zalloc(mhi_cntrl->ev_ring_el_cache, GFP_KERNEL | GFP_DMA); + event = kmem_cache_zalloc(mhi_cntrl->ev_ring_el_cache, GFP_KERNEL); if (!event) return -ENOMEM; @@ -93,7 +93,7 @@ int mhi_ep_send_state_change_event(struct mhi_ep_cntrl *mhi_cntrl, enum mhi_stat struct mhi_ring_element *event; int ret; - event = kmem_cache_zalloc(mhi_cntrl->ev_ring_el_cache, GFP_KERNEL | GFP_DMA); + event = kmem_cache_zalloc(mhi_cntrl->ev_ring_el_cache, GFP_KERNEL); if (!event) return -ENOMEM; @@ -111,7 +111,7 @@ int mhi_ep_send_ee_event(struct mhi_ep_cntrl *mhi_cntrl, enum mhi_ee_type exec_e struct mhi_ring_element *event; int ret; - event = kmem_cache_zalloc(mhi_cntrl->ev_ring_el_cache, GFP_KERNEL | GFP_DMA); + event = kmem_cache_zalloc(mhi_cntrl->ev_ring_el_cache, GFP_KERNEL); if (!event) return -ENOMEM; @@ -130,7 +130,7 @@ static int mhi_ep_send_cmd_comp_event(struct mhi_ep_cntrl *mhi_cntrl, enum mhi_e struct mhi_ring_element *event; int ret; - event = kmem_cache_zalloc(mhi_cntrl->ev_ring_el_cache, GFP_KERNEL | GFP_DMA); + event = kmem_cache_zalloc(mhi_cntrl->ev_ring_el_cache, GFP_KERNEL); if (!event) return -ENOMEM; @@ -183,6 +183,8 @@ static int mhi_ep_process_cmd_ring(struct mhi_ep_ring *ring, struct mhi_ring_ele goto err_unlock; } + + mhi_chan->rd_offset = ch_ring->rd_offset; } /* Set channel state to RUNNING */ @@ -312,21 +314,85 @@ bool mhi_ep_queue_is_empty(struct mhi_ep_device *mhi_dev, enum dma_data_directio struct mhi_ep_cntrl *mhi_cntrl = mhi_dev->mhi_cntrl; struct mhi_ep_ring *ring = &mhi_cntrl->mhi_chan[mhi_chan->chan].ring; - return !!(ring->rd_offset == ring->wr_offset); + return !!(mhi_chan->rd_offset == ring->wr_offset); } EXPORT_SYMBOL_GPL(mhi_ep_queue_is_empty); +static void mhi_ep_read_completion(struct mhi_ep_buf_info *buf_info) +{ + struct mhi_ep_device *mhi_dev = buf_info->mhi_dev; + struct mhi_ep_cntrl *mhi_cntrl = mhi_dev->mhi_cntrl; + struct mhi_ep_chan *mhi_chan = mhi_dev->ul_chan; + struct mhi_ep_ring *ring = &mhi_cntrl->mhi_chan[mhi_chan->chan].ring; + struct mhi_ring_element *el = &ring->ring_cache[ring->rd_offset]; + struct mhi_result result = {}; + int ret; + + if (mhi_chan->xfer_cb) { + result.buf_addr = buf_info->cb_buf; + result.dir = mhi_chan->dir; + result.bytes_xferd = buf_info->size; + + mhi_chan->xfer_cb(mhi_dev, &result); + } + + /* + * The host will split the data packet into multiple TREs if it can't fit + * the packet in a single TRE. In that case, CHAIN flag will be set by the + * host for all TREs except the last one. + */ + if (buf_info->code != MHI_EV_CC_OVERFLOW) { + if (MHI_TRE_DATA_GET_CHAIN(el)) { + /* + * IEOB (Interrupt on End of Block) flag will be set by the host if + * it expects the completion event for all TREs of a TD. + */ + if (MHI_TRE_DATA_GET_IEOB(el)) { + ret = mhi_ep_send_completion_event(mhi_cntrl, ring, el, + MHI_TRE_DATA_GET_LEN(el), + MHI_EV_CC_EOB); + if (ret < 0) { + dev_err(&mhi_chan->mhi_dev->dev, + "Error sending transfer compl. event\n"); + goto err_free_tre_buf; + } + } + } else { + /* + * IEOT (Interrupt on End of Transfer) flag will be set by the host + * for the last TRE of the TD and expects the completion event for + * the same. + */ + if (MHI_TRE_DATA_GET_IEOT(el)) { + ret = mhi_ep_send_completion_event(mhi_cntrl, ring, el, + MHI_TRE_DATA_GET_LEN(el), + MHI_EV_CC_EOT); + if (ret < 0) { + dev_err(&mhi_chan->mhi_dev->dev, + "Error sending transfer compl. event\n"); + goto err_free_tre_buf; + } + } + } + } + + mhi_ep_ring_inc_index(ring); + +err_free_tre_buf: + kmem_cache_free(mhi_cntrl->tre_buf_cache, buf_info->cb_buf); +} + static int mhi_ep_read_channel(struct mhi_ep_cntrl *mhi_cntrl, - struct mhi_ep_ring *ring, - struct mhi_result *result, - u32 len) + struct mhi_ep_ring *ring) { struct mhi_ep_chan *mhi_chan = &mhi_cntrl->mhi_chan[ring->ch_id]; struct device *dev = &mhi_cntrl->mhi_dev->dev; size_t tr_len, read_offset, write_offset; struct mhi_ep_buf_info buf_info = {}; + u32 len = MHI_EP_DEFAULT_MTU; struct mhi_ring_element *el; bool tr_done = false; + void *buf_addr; u32 buf_left; int ret; @@ -339,7 +405,7 @@ static int mhi_ep_read_channel(struct mhi_ep_cntrl *mhi_cntrl, return -ENODEV; } - el = &ring->ring_cache[ring->rd_offset]; + el = &ring->ring_cache[mhi_chan->rd_offset]; /* Check if there is data pending to be read from previous read operation */ if (mhi_chan->tre_bytes_left) { @@ -356,82 +422,50 @@ static int mhi_ep_read_channel(struct mhi_ep_cntrl *mhi_cntrl, read_offset = mhi_chan->tre_size - mhi_chan->tre_bytes_left; write_offset = len - buf_left; + buf_addr = kmem_cache_zalloc(mhi_cntrl->tre_buf_cache, GFP_KERNEL); + if (!buf_addr) + return -ENOMEM; + buf_info.host_addr = mhi_chan->tre_loc + read_offset; - buf_info.dev_addr = result->buf_addr + write_offset; + buf_info.dev_addr = buf_addr + write_offset; buf_info.size = tr_len; + buf_info.cb = mhi_ep_read_completion; + buf_info.cb_buf = buf_addr; + buf_info.mhi_dev = mhi_chan->mhi_dev; + + if (mhi_chan->tre_bytes_left - tr_len) + buf_info.code = MHI_EV_CC_OVERFLOW; dev_dbg(dev, "Reading %zd bytes from channel (%u)\n", tr_len, ring->ch_id); - ret = mhi_cntrl->read_from_host(mhi_cntrl, &buf_info); + ret = mhi_cntrl->read_async(mhi_cntrl, &buf_info); if (ret < 0) { dev_err(&mhi_chan->mhi_dev->dev, "Error reading from channel\n"); - return ret; + goto err_free_buf_addr; } buf_left -= tr_len; mhi_chan->tre_bytes_left -= tr_len; - /* - * Once the TRE (Transfer Ring Element) of a TD (Transfer Descriptor) has been - * read completely: - * - * 1. Send completion event to the host based on the flags set in TRE. - * 2. Increment the local read offset of the transfer ring. - */ if (!mhi_chan->tre_bytes_left) { - /* - * The host will split the data packet into multiple TREs if it can't fit - * the packet in a single TRE. In that case, CHAIN flag will be set by the - * host for all TREs except the last one. - */ - if (MHI_TRE_DATA_GET_CHAIN(el)) { - /* - * IEOB (Interrupt on End of Block) flag will be set by the host if - * it expects the completion event for all TREs of a TD. - */ - if (MHI_TRE_DATA_GET_IEOB(el)) { - ret = mhi_ep_send_completion_event(mhi_cntrl, ring, el, - MHI_TRE_DATA_GET_LEN(el), - MHI_EV_CC_EOB); - if (ret < 0) { - dev_err(&mhi_chan->mhi_dev->dev, - "Error sending transfer compl. event\n"); - return ret; - } - } - } else { - /* - * IEOT (Interrupt on End of Transfer) flag will be set by the host - * for the last TRE of the TD and expects the completion event for - * the same. - */ - if (MHI_TRE_DATA_GET_IEOT(el)) { - ret = mhi_ep_send_completion_event(mhi_cntrl, ring, el, - MHI_TRE_DATA_GET_LEN(el), - MHI_EV_CC_EOT); - if (ret < 0) { - dev_err(&mhi_chan->mhi_dev->dev, - "Error sending transfer compl. event\n"); - return ret; - } - } - + if (MHI_TRE_DATA_GET_IEOT(el)) tr_done = true; - } - mhi_ep_ring_inc_index(ring); + mhi_chan->rd_offset = (mhi_chan->rd_offset + 1) % ring->ring_size; } - - result->bytes_xferd += tr_len; } while (buf_left && !tr_done); return 0; + +err_free_buf_addr: + kmem_cache_free(mhi_cntrl->tre_buf_cache, buf_addr); + + return ret; } -static int mhi_ep_process_ch_ring(struct mhi_ep_ring *ring, struct mhi_ring_element *el) +static int mhi_ep_process_ch_ring(struct mhi_ep_ring *ring) { struct mhi_ep_cntrl *mhi_cntrl = ring->mhi_cntrl; struct mhi_result result = {}; - u32 len = MHI_EP_DEFAULT_MTU; struct mhi_ep_chan *mhi_chan; int ret; @@ -452,32 +486,49 @@ static int mhi_ep_process_ch_ring(struct mhi_ep_ring *ring, struct mhi_ring_elem mhi_chan->xfer_cb(mhi_chan->mhi_dev, &result); } else { /* UL channel */ - result.buf_addr = kmem_cache_zalloc(mhi_cntrl->tre_buf_cache, GFP_KERNEL | GFP_DMA); - if (!result.buf_addr) - return -ENOMEM; - do { - ret = mhi_ep_read_channel(mhi_cntrl, ring, &result, len); + ret = mhi_ep_read_channel(mhi_cntrl, ring); if (ret < 0) { dev_err(&mhi_chan->mhi_dev->dev, "Failed to read channel\n"); - kmem_cache_free(mhi_cntrl->tre_buf_cache, result.buf_addr); return ret; } - result.dir = mhi_chan->dir; - mhi_chan->xfer_cb(mhi_chan->mhi_dev, &result); - result.bytes_xferd = 0; - memset(result.buf_addr, 0, len); - /* Read until the ring becomes empty */ } while (!mhi_ep_queue_is_empty(mhi_chan->mhi_dev, DMA_TO_DEVICE)); - - kmem_cache_free(mhi_cntrl->tre_buf_cache, result.buf_addr); } return 0; } +static void mhi_ep_skb_completion(struct mhi_ep_buf_info *buf_info) +{ + struct mhi_ep_device *mhi_dev = buf_info->mhi_dev; + struct mhi_ep_cntrl *mhi_cntrl = mhi_dev->mhi_cntrl; + struct mhi_ep_chan *mhi_chan = mhi_dev->dl_chan; + struct mhi_ep_ring *ring = &mhi_cntrl->mhi_chan[mhi_chan->chan].ring; + struct mhi_ring_element *el = &ring->ring_cache[ring->rd_offset]; + struct device *dev = &mhi_dev->dev; + struct mhi_result result = {}; + int ret; + + if (mhi_chan->xfer_cb) { + result.buf_addr = buf_info->cb_buf; + result.dir = mhi_chan->dir; + result.bytes_xferd = buf_info->size; + + mhi_chan->xfer_cb(mhi_dev, &result); + } + + ret = mhi_ep_send_completion_event(mhi_cntrl, ring, el, buf_info->size, + buf_info->code); + if (ret) { + dev_err(dev, "Error sending transfer completion event\n"); + return; + } + + mhi_ep_ring_inc_index(ring); +} + /* TODO: Handle partially formed TDs */ int mhi_ep_queue_skb(struct mhi_ep_device *mhi_dev, struct sk_buff *skb) { @@ -488,7 +539,6 @@ int mhi_ep_queue_skb(struct mhi_ep_device *mhi_dev, struct sk_buff *skb) struct mhi_ring_element *el; u32 buf_left, read_offset; struct mhi_ep_ring *ring; - enum mhi_ev_ccs code; size_t tr_len; u32 tre_len; int ret; @@ -512,7 +562,7 @@ int mhi_ep_queue_skb(struct mhi_ep_device *mhi_dev, struct sk_buff *skb) goto err_exit; } - el = &ring->ring_cache[ring->rd_offset]; + el = &ring->ring_cache[mhi_chan->rd_offset]; tre_len = MHI_TRE_DATA_GET_LEN(el); tr_len = min(buf_left, tre_len); @@ -521,33 +571,35 @@ int mhi_ep_queue_skb(struct mhi_ep_device *mhi_dev, struct sk_buff *skb) buf_info.dev_addr = skb->data + read_offset; buf_info.host_addr = MHI_TRE_DATA_GET_PTR(el); buf_info.size = tr_len; + buf_info.cb = mhi_ep_skb_completion; + buf_info.cb_buf = skb; + buf_info.mhi_dev = mhi_dev; - dev_dbg(dev, "Writing %zd bytes to channel (%u)\n", tr_len, ring->ch_id); - ret = mhi_cntrl->write_to_host(mhi_cntrl, &buf_info); - if (ret < 0) { - dev_err(dev, "Error writing to the channel\n"); - goto err_exit; - } - - buf_left -= tr_len; /* * For all TREs queued by the host for DL channel, only the EOT flag will be set. * If the packet doesn't fit into a single TRE, send the OVERFLOW event to * the host so that the host can adjust the packet boundary to next TREs. Else send * the EOT event to the host indicating the packet boundary. */ - if (buf_left) - code = MHI_EV_CC_OVERFLOW; + if (buf_left - tr_len) + buf_info.code = MHI_EV_CC_OVERFLOW; else - code = MHI_EV_CC_EOT; + buf_info.code = MHI_EV_CC_EOT; - ret = mhi_ep_send_completion_event(mhi_cntrl, ring, el, tr_len, code); - if (ret) { - dev_err(dev, "Error sending transfer completion event\n"); + dev_dbg(dev, "Writing %zd bytes to channel (%u)\n", tr_len, ring->ch_id); + ret = mhi_cntrl->write_async(mhi_cntrl, &buf_info); + if (ret < 0) { + dev_err(dev, "Error writing to the channel\n"); goto err_exit; } - mhi_ep_ring_inc_index(ring); + buf_left -= tr_len; + + /* + * Update the read offset cached in mhi_chan. Actual read offset + * will be updated by the completion handler. + */ + mhi_chan->rd_offset = (mhi_chan->rd_offset + 1) % ring->ring_size; } while (buf_left); mutex_unlock(&mhi_chan->lock); @@ -748,7 +800,6 @@ static void mhi_ep_ch_ring_worker(struct work_struct *work) struct mhi_ep_cntrl *mhi_cntrl = container_of(work, struct mhi_ep_cntrl, ch_ring_work); struct device *dev = &mhi_cntrl->mhi_dev->dev; struct mhi_ep_ring_item *itr, *tmp; - struct mhi_ring_element *el; struct mhi_ep_ring *ring; struct mhi_ep_chan *chan; unsigned long flags; @@ -787,16 +838,14 @@ static void mhi_ep_ch_ring_worker(struct work_struct *work) } /* Sanity check to make sure there are elements in the ring */ - if (ring->rd_offset == ring->wr_offset) { + if (chan->rd_offset == ring->wr_offset) { mutex_unlock(&chan->lock); kmem_cache_free(mhi_cntrl->ring_item_cache, itr); continue; } - el = &ring->ring_cache[ring->rd_offset]; - dev_dbg(dev, "Processing the ring for channel (%u)\n", ring->ch_id); - ret = mhi_ep_process_ch_ring(ring, el); + ret = mhi_ep_process_ch_ring(ring); if (ret) { dev_err(dev, "Error processing ring for channel (%u): %d\n", ring->ch_id, ret); @@ -1411,14 +1460,14 @@ int mhi_ep_register_controller(struct mhi_ep_cntrl *mhi_cntrl, mhi_cntrl->ev_ring_el_cache = kmem_cache_create("mhi_ep_event_ring_el", sizeof(struct mhi_ring_element), 0, - SLAB_CACHE_DMA, NULL); + 0, NULL); if (!mhi_cntrl->ev_ring_el_cache) { ret = -ENOMEM; goto err_free_cmd; } mhi_cntrl->tre_buf_cache = kmem_cache_create("mhi_ep_tre_buf", MHI_EP_DEFAULT_MTU, 0, - SLAB_CACHE_DMA, NULL); + 0, NULL); if (!mhi_cntrl->tre_buf_cache) { ret = -ENOMEM; goto err_destroy_ev_ring_el_cache; @@ -1431,6 +1480,7 @@ int mhi_ep_register_controller(struct mhi_ep_cntrl *mhi_cntrl, ret = -ENOMEM; goto err_destroy_tre_buf_cache; } + INIT_WORK(&mhi_cntrl->state_work, mhi_ep_state_worker); INIT_WORK(&mhi_cntrl->reset_work, mhi_ep_reset_worker); INIT_WORK(&mhi_cntrl->cmd_ring_work, mhi_ep_cmd_ring_worker); diff --git a/drivers/bus/mhi/ep/ring.c b/drivers/bus/mhi/ep/ring.c index c673d7200b3e1..ba9f696d1aa80 100644 --- a/drivers/bus/mhi/ep/ring.c +++ b/drivers/bus/mhi/ep/ring.c @@ -48,7 +48,7 @@ static int __mhi_ep_cache_ring(struct mhi_ep_ring *ring, size_t end) buf_info.host_addr = ring->rbase + (start * sizeof(struct mhi_ring_element)); buf_info.dev_addr = &ring->ring_cache[start]; - ret = mhi_cntrl->read_from_host(mhi_cntrl, &buf_info); + ret = mhi_cntrl->read_sync(mhi_cntrl, &buf_info); if (ret < 0) return ret; } else { @@ -56,7 +56,7 @@ static int __mhi_ep_cache_ring(struct mhi_ep_ring *ring, size_t end) buf_info.host_addr = ring->rbase + (start * sizeof(struct mhi_ring_element)); buf_info.dev_addr = &ring->ring_cache[start]; - ret = mhi_cntrl->read_from_host(mhi_cntrl, &buf_info); + ret = mhi_cntrl->read_sync(mhi_cntrl, &buf_info); if (ret < 0) return ret; @@ -65,7 +65,7 @@ static int __mhi_ep_cache_ring(struct mhi_ep_ring *ring, size_t end) buf_info.dev_addr = &ring->ring_cache[0]; buf_info.size = end * sizeof(struct mhi_ring_element); - ret = mhi_cntrl->read_from_host(mhi_cntrl, &buf_info); + ret = mhi_cntrl->read_sync(mhi_cntrl, &buf_info); if (ret < 0) return ret; } @@ -143,7 +143,7 @@ int mhi_ep_ring_add_element(struct mhi_ep_ring *ring, struct mhi_ring_element *e buf_info.dev_addr = el; buf_info.size = sizeof(*el); - return mhi_cntrl->write_to_host(mhi_cntrl, &buf_info); + return mhi_cntrl->write_sync(mhi_cntrl, &buf_info); } void mhi_ep_ring_init(struct mhi_ep_ring *ring, enum mhi_ep_ring_type type, u32 id) diff --git a/drivers/bus/mhi/host/pci_generic.c b/drivers/bus/mhi/host/pci_generic.c index 3f06083a9b731..1b01220fe9737 100644 --- a/drivers/bus/mhi/host/pci_generic.c +++ b/drivers/bus/mhi/host/pci_generic.c @@ -660,6 +660,15 @@ static const struct mhi_pci_dev_info mhi_telit_fn990_info = { .mru_default = 32768, }; +static const struct mhi_pci_dev_info mhi_telit_fe990a_info = { + .name = "telit-fe990a", + .config = &modem_telit_fn990_config, + .bar_num = MHI_PCI_DEFAULT_BAR_NUM, + .dma_data_width = 32, + .sideband_wake = false, + .mru_default = 32768, +}; + /* Keep the list sorted based on the PID. New VID should be added as the last entry */ static const struct pci_device_id mhi_pci_id_table[] = { { PCI_DEVICE(PCI_VENDOR_ID_QCOM, 0x0304), @@ -676,9 +685,9 @@ static const struct pci_device_id mhi_pci_id_table[] = { /* Telit FN990 */ { PCI_DEVICE_SUB(PCI_VENDOR_ID_QCOM, 0x0308, 0x1c5d, 0x2010), .driver_data = (kernel_ulong_t) &mhi_telit_fn990_info }, - /* Telit FE990 */ + /* Telit FE990A */ { PCI_DEVICE_SUB(PCI_VENDOR_ID_QCOM, 0x0308, 0x1c5d, 0x2015), - .driver_data = (kernel_ulong_t) &mhi_telit_fn990_info }, + .driver_data = (kernel_ulong_t) &mhi_telit_fe990a_info }, { PCI_DEVICE(PCI_VENDOR_ID_QCOM, 0x0308), .driver_data = (kernel_ulong_t) &mhi_qcom_sdx65_info }, { PCI_DEVICE(PCI_VENDOR_ID_QUECTEL, 0x1001), /* EM120R-GL (sdx24) */ diff --git a/drivers/char/TEST_MAPPING b/drivers/char/TEST_MAPPING index db7a08514bd33..08bfd98429b54 100644 --- a/drivers/char/TEST_MAPPING +++ b/drivers/char/TEST_MAPPING @@ -264,6 +264,40 @@ "include-filter": "android.hardware.camera2.cts.FastBasicsTest" } ] + }, + { + "name": "CtsIncrementalInstallHostTestCases", + "options": [ + { + "include-filter": "android.incrementalinstall.cts.IncrementalFeatureTest" + }, + { + "include-filter": "android.incrementalinstall.cts.IncrementalInstallTest" + } + ] + }, + { + "name": "CtsLibcoreLegacy22TestCases", + "options": [ + { + "include-filter": "android.util.cts.FloatMathTest" + } + ] + }, + { + "name": "CtsRootBluetoothTestCases" + }, + { + "name": "vts_kernel_net_tests" + }, + { + "name": "KernelAbilistTest" + }, + { + "name": "VtsAidlHalSensorsTargetTest" + }, + { + "name": "VtsBootconfigTest" } ] } diff --git a/drivers/char/hw_random/bcm2835-rng.c b/drivers/char/hw_random/bcm2835-rng.c index 4c08efe7f3753..57a80ec93bada 100644 --- a/drivers/char/hw_random/bcm2835-rng.c +++ b/drivers/char/hw_random/bcm2835-rng.c @@ -94,8 +94,10 @@ static int bcm2835_rng_init(struct hwrng *rng) return ret; ret = reset_control_reset(priv->reset); - if (ret) + if (ret) { + clk_disable_unprepare(priv->clk); return ret; + } if (priv->mask_interrupts) { /* mask the interrupt */ diff --git a/drivers/char/hw_random/cctrng.c b/drivers/char/hw_random/cctrng.c index 1abbff04a015a..a55f5f2d35dff 100644 --- a/drivers/char/hw_random/cctrng.c +++ b/drivers/char/hw_random/cctrng.c @@ -624,6 +624,7 @@ static int __maybe_unused cctrng_resume(struct device *dev) /* wait for Cryptocell reset completion */ if (!cctrng_wait_for_reset_completion(drvdata)) { dev_err(dev, "Cryptocell reset not completed"); + clk_disable_unprepare(drvdata->clk); return -EBUSY; } diff --git a/drivers/char/hw_random/mtk-rng.c b/drivers/char/hw_random/mtk-rng.c index aa993753ab120..1e3048f2bb38f 100644 --- a/drivers/char/hw_random/mtk-rng.c +++ b/drivers/char/hw_random/mtk-rng.c @@ -142,7 +142,7 @@ static int mtk_rng_probe(struct platform_device *pdev) dev_set_drvdata(&pdev->dev, priv); pm_runtime_set_autosuspend_delay(&pdev->dev, RNG_AUTOSUSPEND_TIMEOUT); pm_runtime_use_autosuspend(&pdev->dev); - pm_runtime_enable(&pdev->dev); + devm_pm_runtime_enable(&pdev->dev); dev_info(&pdev->dev, "registered RNG driver\n"); diff --git a/drivers/char/tpm/tpm-dev-common.c b/drivers/char/tpm/tpm-dev-common.c index 30b4c288c1bbc..c3fbbf4d3db79 100644 --- a/drivers/char/tpm/tpm-dev-common.c +++ b/drivers/char/tpm/tpm-dev-common.c @@ -47,6 +47,8 @@ static ssize_t tpm_dev_transmit(struct tpm_chip *chip, struct tpm_space *space, if (!ret) ret = tpm2_commit_space(chip, space, buf, &len); + else + tpm2_flush_space(chip); out_rc: return ret ? ret : len; diff --git a/drivers/char/tpm/tpm2-space.c b/drivers/char/tpm/tpm2-space.c index 363afdd4d1d30..d4d1007fe8117 100644 --- a/drivers/char/tpm/tpm2-space.c +++ b/drivers/char/tpm/tpm2-space.c @@ -166,6 +166,9 @@ void tpm2_flush_space(struct tpm_chip *chip) struct tpm_space *space = &chip->work_space; int i; + if (!space) + return; + for (i = 0; i < ARRAY_SIZE(space->context_tbl); i++) if (space->context_tbl[i] && ~space->context_tbl[i]) tpm2_flush_context(chip, space->context_tbl[i]); diff --git a/drivers/char/virtio_console.c b/drivers/char/virtio_console.c index 680d1ef2a2179..796ab9a4e48fa 100644 --- a/drivers/char/virtio_console.c +++ b/drivers/char/virtio_console.c @@ -2052,25 +2052,27 @@ static int virtcons_probe(struct virtio_device *vdev) multiport = true; } - err = init_vqs(portdev); - if (err < 0) { - dev_err(&vdev->dev, "Error %d initializing vqs\n", err); - goto free_chrdev; - } - spin_lock_init(&portdev->ports_lock); INIT_LIST_HEAD(&portdev->ports); INIT_LIST_HEAD(&portdev->list); - virtio_device_ready(portdev->vdev); - INIT_WORK(&portdev->config_work, &config_work_handler); INIT_WORK(&portdev->control_work, &control_work_handler); if (multiport) { spin_lock_init(&portdev->c_ivq_lock); spin_lock_init(&portdev->c_ovq_lock); + } + err = init_vqs(portdev); + if (err < 0) { + dev_err(&vdev->dev, "Error %d initializing vqs\n", err); + goto free_chrdev; + } + + virtio_device_ready(portdev->vdev); + + if (multiport) { err = fill_queue(portdev->c_ivq, &portdev->c_ivq_lock); if (err < 0) { dev_err(&vdev->dev, diff --git a/drivers/clk/at91/sama7g5.c b/drivers/clk/at91/sama7g5.c index 91b5c6f148196..4e9594714b142 100644 --- a/drivers/clk/at91/sama7g5.c +++ b/drivers/clk/at91/sama7g5.c @@ -66,6 +66,7 @@ enum pll_component_id { PLL_COMPID_FRAC, PLL_COMPID_DIV0, PLL_COMPID_DIV1, + PLL_COMPID_MAX, }; /* @@ -165,7 +166,7 @@ static struct sama7g5_pll { u8 t; u8 eid; u8 safe_div; -} sama7g5_plls[][PLL_ID_MAX] = { +} sama7g5_plls[][PLL_COMPID_MAX] = { [PLL_ID_CPU] = { [PLL_COMPID_FRAC] = { .n = "cpupll_fracck", @@ -1038,7 +1039,7 @@ static void __init sama7g5_pmc_setup(struct device_node *np) sama7g5_pmc->chws[PMC_MAIN] = hw; for (i = 0; i < PLL_ID_MAX; i++) { - for (j = 0; j < 3; j++) { + for (j = 0; j < PLL_COMPID_MAX; j++) { struct clk_hw *parent_hw; if (!sama7g5_plls[i][j].n) diff --git a/drivers/clk/bcm/clk-bcm53573-ilp.c b/drivers/clk/bcm/clk-bcm53573-ilp.c index 84f2af736ee8a..83ef41d618be3 100644 --- a/drivers/clk/bcm/clk-bcm53573-ilp.c +++ b/drivers/clk/bcm/clk-bcm53573-ilp.c @@ -112,7 +112,7 @@ static void bcm53573_ilp_init(struct device_node *np) goto err_free_ilp; } - ilp->regmap = syscon_node_to_regmap(of_get_parent(np)); + ilp->regmap = syscon_node_to_regmap(np->parent); if (IS_ERR(ilp->regmap)) { err = PTR_ERR(ilp->regmap); goto err_free_ilp; diff --git a/drivers/clk/imx/clk-composite-7ulp.c b/drivers/clk/imx/clk-composite-7ulp.c index e208ddc511339..db7f40b07d1ab 100644 --- a/drivers/clk/imx/clk-composite-7ulp.c +++ b/drivers/clk/imx/clk-composite-7ulp.c @@ -14,6 +14,7 @@ #include "../clk-fractional-divider.h" #include "clk.h" +#define PCG_PR_MASK BIT(31) #define PCG_PCS_SHIFT 24 #define PCG_PCS_MASK 0x7 #define PCG_CGC_SHIFT 30 @@ -78,6 +79,12 @@ static struct clk_hw *imx_ulp_clk_hw_composite(const char *name, struct clk_hw *hw; u32 val; + val = readl(reg); + if (!(val & PCG_PR_MASK)) { + pr_info("PCC PR is 0 for clk:%s, bypass\n", name); + return 0; + } + if (mux_present) { mux = kzalloc(sizeof(*mux), GFP_KERNEL); if (!mux) diff --git a/drivers/clk/imx/clk-composite-8m.c b/drivers/clk/imx/clk-composite-8m.c index 27a08c50ac1d8..ac5e9d60acb83 100644 --- a/drivers/clk/imx/clk-composite-8m.c +++ b/drivers/clk/imx/clk-composite-8m.c @@ -204,6 +204,34 @@ static const struct clk_ops imx8m_clk_composite_mux_ops = { .determine_rate = imx8m_clk_composite_mux_determine_rate, }; +static int imx8m_clk_composite_gate_enable(struct clk_hw *hw) +{ + struct clk_gate *gate = to_clk_gate(hw); + unsigned long flags; + u32 val; + + spin_lock_irqsave(gate->lock, flags); + + val = readl(gate->reg); + val |= BIT(gate->bit_idx); + writel(val, gate->reg); + + spin_unlock_irqrestore(gate->lock, flags); + + return 0; +} + +static void imx8m_clk_composite_gate_disable(struct clk_hw *hw) +{ + /* composite clk requires the disable hook */ +} + +static const struct clk_ops imx8m_clk_composite_gate_ops = { + .enable = imx8m_clk_composite_gate_enable, + .disable = imx8m_clk_composite_gate_disable, + .is_enabled = clk_gate_is_enabled, +}; + struct clk_hw *__imx8m_clk_hw_composite(const char *name, const char * const *parent_names, int num_parents, void __iomem *reg, @@ -217,10 +245,11 @@ struct clk_hw *__imx8m_clk_hw_composite(const char *name, struct clk_mux *mux = NULL; const struct clk_ops *divider_ops; const struct clk_ops *mux_ops; + const struct clk_ops *gate_ops; mux = kzalloc(sizeof(*mux), GFP_KERNEL); if (!mux) - goto fail; + return ERR_CAST(hw); mux_hw = &mux->hw; mux->reg = reg; @@ -230,7 +259,7 @@ struct clk_hw *__imx8m_clk_hw_composite(const char *name, div = kzalloc(sizeof(*div), GFP_KERNEL); if (!div) - goto fail; + goto free_mux; div_hw = &div->hw; div->reg = reg; @@ -257,28 +286,32 @@ struct clk_hw *__imx8m_clk_hw_composite(const char *name, div->flags = CLK_DIVIDER_ROUND_CLOSEST; /* skip registering the gate ops if M4 is enabled */ - if (!mcore_booted) { - gate = kzalloc(sizeof(*gate), GFP_KERNEL); - if (!gate) - goto fail; - - gate_hw = &gate->hw; - gate->reg = reg; - gate->bit_idx = PCG_CGC_SHIFT; - gate->lock = &imx_ccm_lock; - } + gate = kzalloc(sizeof(*gate), GFP_KERNEL); + if (!gate) + goto free_div; + + gate_hw = &gate->hw; + gate->reg = reg; + gate->bit_idx = PCG_CGC_SHIFT; + gate->lock = &imx_ccm_lock; + if (!mcore_booted) + gate_ops = &clk_gate_ops; + else + gate_ops = &imx8m_clk_composite_gate_ops; hw = clk_hw_register_composite(NULL, name, parent_names, num_parents, mux_hw, mux_ops, div_hw, - divider_ops, gate_hw, &clk_gate_ops, flags); + divider_ops, gate_hw, gate_ops, flags); if (IS_ERR(hw)) - goto fail; + goto free_gate; return hw; -fail: +free_gate: kfree(gate); +free_div: kfree(div); +free_mux: kfree(mux); return ERR_CAST(hw); } diff --git a/drivers/clk/imx/clk-composite-93.c b/drivers/clk/imx/clk-composite-93.c index 81164bdcd6cc9..6c6c5a30f3282 100644 --- a/drivers/clk/imx/clk-composite-93.c +++ b/drivers/clk/imx/clk-composite-93.c @@ -76,6 +76,13 @@ static int imx93_clk_composite_gate_enable(struct clk_hw *hw) static void imx93_clk_composite_gate_disable(struct clk_hw *hw) { + /* + * Skip disable the root clock gate if mcore enabled. + * The root clock may be used by the mcore. + */ + if (mcore_booted) + return; + imx93_clk_composite_gate_endisable(hw, 0); } @@ -222,7 +229,7 @@ struct clk_hw *imx93_clk_composite_flags(const char *name, const char * const *p hw = clk_hw_register_composite(NULL, name, parent_names, num_parents, mux_hw, &clk_mux_ro_ops, div_hw, &clk_divider_ro_ops, NULL, NULL, flags); - } else if (!mcore_booted) { + } else { gate = kzalloc(sizeof(*gate), GFP_KERNEL); if (!gate) goto fail; @@ -238,12 +245,6 @@ struct clk_hw *imx93_clk_composite_flags(const char *name, const char * const *p &imx93_clk_composite_divider_ops, gate_hw, &imx93_clk_composite_gate_ops, flags | CLK_SET_RATE_NO_REPARENT); - } else { - hw = clk_hw_register_composite(NULL, name, parent_names, num_parents, - mux_hw, &imx93_clk_composite_mux_ops, div_hw, - &imx93_clk_composite_divider_ops, NULL, - &imx93_clk_composite_gate_ops, - flags | CLK_SET_RATE_NO_REPARENT); } if (IS_ERR(hw)) diff --git a/drivers/clk/imx/clk-fracn-gppll.c b/drivers/clk/imx/clk-fracn-gppll.c index 44462ab50e513..1becba2b62d0b 100644 --- a/drivers/clk/imx/clk-fracn-gppll.c +++ b/drivers/clk/imx/clk-fracn-gppll.c @@ -291,6 +291,10 @@ static int clk_fracn_gppll_prepare(struct clk_hw *hw) if (val & POWERUP_MASK) return 0; + if (pll->flags & CLK_FRACN_GPPLL_FRACN) + writel_relaxed(readl_relaxed(pll->base + PLL_NUMERATOR), + pll->base + PLL_NUMERATOR); + val |= CLKMUX_BYPASS; writel_relaxed(val, pll->base + PLL_CTRL); diff --git a/drivers/clk/imx/clk-imx6ul.c b/drivers/clk/imx/clk-imx6ul.c index f9394e94f69d7..05c7a82b751f3 100644 --- a/drivers/clk/imx/clk-imx6ul.c +++ b/drivers/clk/imx/clk-imx6ul.c @@ -542,8 +542,8 @@ static void __init imx6ul_clocks_init(struct device_node *ccm_node) clk_set_parent(hws[IMX6UL_CLK_ENFC_SEL]->clk, hws[IMX6UL_CLK_PLL2_PFD2]->clk); - clk_set_parent(hws[IMX6UL_CLK_ENET1_REF_SEL]->clk, hws[IMX6UL_CLK_ENET_REF]->clk); - clk_set_parent(hws[IMX6UL_CLK_ENET2_REF_SEL]->clk, hws[IMX6UL_CLK_ENET2_REF]->clk); + clk_set_parent(hws[IMX6UL_CLK_ENET1_REF_SEL]->clk, hws[IMX6UL_CLK_ENET1_REF_125M]->clk); + clk_set_parent(hws[IMX6UL_CLK_ENET2_REF_SEL]->clk, hws[IMX6UL_CLK_ENET2_REF_125M]->clk); imx_register_uart_clocks(); } diff --git a/drivers/clk/imx/clk-imx7d.c b/drivers/clk/imx/clk-imx7d.c index 2b77d1fc7bb94..1e1296e748357 100644 --- a/drivers/clk/imx/clk-imx7d.c +++ b/drivers/clk/imx/clk-imx7d.c @@ -498,9 +498,9 @@ static void __init imx7d_clocks_init(struct device_node *ccm_node) hws[IMX7D_ENET_AXI_ROOT_SRC] = imx_clk_hw_mux2_flags("enet_axi_src", base + 0x8900, 24, 3, enet_axi_sel, ARRAY_SIZE(enet_axi_sel), CLK_SET_PARENT_GATE); hws[IMX7D_NAND_USDHC_BUS_ROOT_SRC] = imx_clk_hw_mux2_flags("nand_usdhc_src", base + 0x8980, 24, 3, nand_usdhc_bus_sel, ARRAY_SIZE(nand_usdhc_bus_sel), CLK_SET_PARENT_GATE); hws[IMX7D_DRAM_PHYM_ROOT_SRC] = imx_clk_hw_mux2_flags("dram_phym_src", base + 0x9800, 24, 1, dram_phym_sel, ARRAY_SIZE(dram_phym_sel), CLK_SET_PARENT_GATE); - hws[IMX7D_DRAM_ROOT_SRC] = imx_clk_hw_mux2_flags("dram_src", base + 0x9880, 24, 1, dram_sel, ARRAY_SIZE(dram_sel), CLK_SET_PARENT_GATE); + hws[IMX7D_DRAM_ROOT_SRC] = imx_clk_hw_mux2("dram_src", base + 0x9880, 24, 1, dram_sel, ARRAY_SIZE(dram_sel)); hws[IMX7D_DRAM_PHYM_ALT_ROOT_SRC] = imx_clk_hw_mux2_flags("dram_phym_alt_src", base + 0xa000, 24, 3, dram_phym_alt_sel, ARRAY_SIZE(dram_phym_alt_sel), CLK_SET_PARENT_GATE); - hws[IMX7D_DRAM_ALT_ROOT_SRC] = imx_clk_hw_mux2_flags("dram_alt_src", base + 0xa080, 24, 3, dram_alt_sel, ARRAY_SIZE(dram_alt_sel), CLK_SET_PARENT_GATE); + hws[IMX7D_DRAM_ALT_ROOT_SRC] = imx_clk_hw_mux2("dram_alt_src", base + 0xa080, 24, 3, dram_alt_sel, ARRAY_SIZE(dram_alt_sel)); hws[IMX7D_USB_HSIC_ROOT_SRC] = imx_clk_hw_mux2_flags("usb_hsic_src", base + 0xa100, 24, 3, usb_hsic_sel, ARRAY_SIZE(usb_hsic_sel), CLK_SET_PARENT_GATE); hws[IMX7D_PCIE_CTRL_ROOT_SRC] = imx_clk_hw_mux2_flags("pcie_ctrl_src", base + 0xa180, 24, 3, pcie_ctrl_sel, ARRAY_SIZE(pcie_ctrl_sel), CLK_SET_PARENT_GATE); hws[IMX7D_PCIE_PHY_ROOT_SRC] = imx_clk_hw_mux2_flags("pcie_phy_src", base + 0xa200, 24, 3, pcie_phy_sel, ARRAY_SIZE(pcie_phy_sel), CLK_SET_PARENT_GATE); diff --git a/drivers/clk/imx/clk-imx8mp-audiomix.c b/drivers/clk/imx/clk-imx8mp-audiomix.c index 55ed211a5e0b1..ab2a028b3027d 100644 --- a/drivers/clk/imx/clk-imx8mp-audiomix.c +++ b/drivers/clk/imx/clk-imx8mp-audiomix.c @@ -146,6 +146,15 @@ static const struct clk_parent_data clk_imx8mp_audiomix_pll_bypass_sels[] = { PDM_SEL, 2, 0 \ } +#define CLK_GATE_PARENT(gname, cname, pname) \ + { \ + gname"_cg", \ + IMX8MP_CLK_AUDIOMIX_##cname, \ + { .fw_name = pname, .name = pname }, NULL, 1, \ + CLKEN0 + 4 * !!(IMX8MP_CLK_AUDIOMIX_##cname / 32), \ + 1, IMX8MP_CLK_AUDIOMIX_##cname % 32 \ + } + struct clk_imx8mp_audiomix_sel { const char *name; int clkid; @@ -163,14 +172,14 @@ static struct clk_imx8mp_audiomix_sel sels[] = { CLK_GATE("earc", EARC_IPG), CLK_GATE("ocrama", OCRAMA_IPG), CLK_GATE("aud2htx", AUD2HTX_IPG), - CLK_GATE("earc_phy", EARC_PHY), + CLK_GATE_PARENT("earc_phy", EARC_PHY, "sai_pll_out_div2"), CLK_GATE("sdma2", SDMA2_ROOT), CLK_GATE("sdma3", SDMA3_ROOT), CLK_GATE("spba2", SPBA2_ROOT), CLK_GATE("dsp", DSP_ROOT), CLK_GATE("dspdbg", DSPDBG_ROOT), CLK_GATE("edma", EDMA_ROOT), - CLK_GATE("audpll", AUDPLL_ROOT), + CLK_GATE_PARENT("audpll", AUDPLL_ROOT, "osc_24m"), CLK_GATE("mu2", MU2_ROOT), CLK_GATE("mu3", MU3_ROOT), CLK_PDM, diff --git a/drivers/clk/imx/clk-imx8mp.c b/drivers/clk/imx/clk-imx8mp.c index 670aa2bab3017..e561ff7b135fb 100644 --- a/drivers/clk/imx/clk-imx8mp.c +++ b/drivers/clk/imx/clk-imx8mp.c @@ -551,8 +551,8 @@ static int imx8mp_clocks_probe(struct platform_device *pdev) hws[IMX8MP_CLK_IPG_ROOT] = imx_clk_hw_divider2("ipg_root", "ahb_root", ccm_base + 0x9080, 0, 1); - hws[IMX8MP_CLK_DRAM_ALT] = imx8m_clk_hw_composite("dram_alt", imx8mp_dram_alt_sels, ccm_base + 0xa000); - hws[IMX8MP_CLK_DRAM_APB] = imx8m_clk_hw_composite_critical("dram_apb", imx8mp_dram_apb_sels, ccm_base + 0xa080); + hws[IMX8MP_CLK_DRAM_ALT] = imx8m_clk_hw_fw_managed_composite("dram_alt", imx8mp_dram_alt_sels, ccm_base + 0xa000); + hws[IMX8MP_CLK_DRAM_APB] = imx8m_clk_hw_fw_managed_composite_critical("dram_apb", imx8mp_dram_apb_sels, ccm_base + 0xa080); hws[IMX8MP_CLK_VPU_G1] = imx8m_clk_hw_composite("vpu_g1", imx8mp_vpu_g1_sels, ccm_base + 0xa100); hws[IMX8MP_CLK_VPU_G2] = imx8m_clk_hw_composite("vpu_g2", imx8mp_vpu_g2_sels, ccm_base + 0xa180); hws[IMX8MP_CLK_CAN1] = imx8m_clk_hw_composite("can1", imx8mp_can1_sels, ccm_base + 0xa200); diff --git a/drivers/clk/imx/clk-imx8qxp.c b/drivers/clk/imx/clk-imx8qxp.c index 245761e018973..6d458995f3887 100644 --- a/drivers/clk/imx/clk-imx8qxp.c +++ b/drivers/clk/imx/clk-imx8qxp.c @@ -165,8 +165,8 @@ static int imx8qxp_clk_probe(struct platform_device *pdev) imx_clk_scu("pwm_clk", IMX_SC_R_LCD_0_PWM_0, IMX_SC_PM_CLK_PER); imx_clk_scu("elcdif_pll", IMX_SC_R_ELCDIF_PLL, IMX_SC_PM_CLK_PLL); imx_clk_scu2("lcd_clk", lcd_sels, ARRAY_SIZE(lcd_sels), IMX_SC_R_LCD_0, IMX_SC_PM_CLK_PER); - imx_clk_scu2("lcd_pxl_clk", lcd_pxl_sels, ARRAY_SIZE(lcd_pxl_sels), IMX_SC_R_LCD_0, IMX_SC_PM_CLK_MISC0); imx_clk_scu("lcd_pxl_bypass_div_clk", IMX_SC_R_LCD_0, IMX_SC_PM_CLK_BYPASS); + imx_clk_scu2("lcd_pxl_clk", lcd_pxl_sels, ARRAY_SIZE(lcd_pxl_sels), IMX_SC_R_LCD_0, IMX_SC_PM_CLK_MISC0); /* Audio SS */ imx_clk_scu("audio_pll0_clk", IMX_SC_R_AUDIO_PLL_0, IMX_SC_PM_CLK_PLL); @@ -199,18 +199,18 @@ static int imx8qxp_clk_probe(struct platform_device *pdev) imx_clk_scu("usb3_lpm_div", IMX_SC_R_USB_2, IMX_SC_PM_CLK_MISC); /* Display controller SS */ - imx_clk_scu2("dc0_disp0_clk", dc0_sels, ARRAY_SIZE(dc0_sels), IMX_SC_R_DC_0, IMX_SC_PM_CLK_MISC0); - imx_clk_scu2("dc0_disp1_clk", dc0_sels, ARRAY_SIZE(dc0_sels), IMX_SC_R_DC_0, IMX_SC_PM_CLK_MISC1); imx_clk_scu("dc0_pll0_clk", IMX_SC_R_DC_0_PLL_0, IMX_SC_PM_CLK_PLL); imx_clk_scu("dc0_pll1_clk", IMX_SC_R_DC_0_PLL_1, IMX_SC_PM_CLK_PLL); imx_clk_scu("dc0_bypass0_clk", IMX_SC_R_DC_0_VIDEO0, IMX_SC_PM_CLK_BYPASS); + imx_clk_scu2("dc0_disp0_clk", dc0_sels, ARRAY_SIZE(dc0_sels), IMX_SC_R_DC_0, IMX_SC_PM_CLK_MISC0); + imx_clk_scu2("dc0_disp1_clk", dc0_sels, ARRAY_SIZE(dc0_sels), IMX_SC_R_DC_0, IMX_SC_PM_CLK_MISC1); imx_clk_scu("dc0_bypass1_clk", IMX_SC_R_DC_0_VIDEO1, IMX_SC_PM_CLK_BYPASS); - imx_clk_scu2("dc1_disp0_clk", dc1_sels, ARRAY_SIZE(dc1_sels), IMX_SC_R_DC_1, IMX_SC_PM_CLK_MISC0); - imx_clk_scu2("dc1_disp1_clk", dc1_sels, ARRAY_SIZE(dc1_sels), IMX_SC_R_DC_1, IMX_SC_PM_CLK_MISC1); imx_clk_scu("dc1_pll0_clk", IMX_SC_R_DC_1_PLL_0, IMX_SC_PM_CLK_PLL); imx_clk_scu("dc1_pll1_clk", IMX_SC_R_DC_1_PLL_1, IMX_SC_PM_CLK_PLL); imx_clk_scu("dc1_bypass0_clk", IMX_SC_R_DC_1_VIDEO0, IMX_SC_PM_CLK_BYPASS); + imx_clk_scu2("dc1_disp0_clk", dc1_sels, ARRAY_SIZE(dc1_sels), IMX_SC_R_DC_1, IMX_SC_PM_CLK_MISC0); + imx_clk_scu2("dc1_disp1_clk", dc1_sels, ARRAY_SIZE(dc1_sels), IMX_SC_R_DC_1, IMX_SC_PM_CLK_MISC1); imx_clk_scu("dc1_bypass1_clk", IMX_SC_R_DC_1_VIDEO1, IMX_SC_PM_CLK_BYPASS); /* MIPI-LVDS SS */ diff --git a/drivers/clk/qcom/clk-alpha-pll.c b/drivers/clk/qcom/clk-alpha-pll.c index 85aa089650eaa..8b3e5f84e89a7 100644 --- a/drivers/clk/qcom/clk-alpha-pll.c +++ b/drivers/clk/qcom/clk-alpha-pll.c @@ -40,7 +40,7 @@ #define PLL_USER_CTL(p) ((p)->offset + (p)->regs[PLL_OFF_USER_CTL]) # define PLL_POST_DIV_SHIFT 8 -# define PLL_POST_DIV_MASK(p) GENMASK((p)->width, 0) +# define PLL_POST_DIV_MASK(p) GENMASK((p)->width - 1, 0) # define PLL_ALPHA_EN BIT(24) # define PLL_ALPHA_MODE BIT(25) # define PLL_VCO_SHIFT 20 @@ -1478,8 +1478,8 @@ clk_trion_pll_postdiv_set_rate(struct clk_hw *hw, unsigned long rate, } return regmap_update_bits(regmap, PLL_USER_CTL(pll), - PLL_POST_DIV_MASK(pll) << PLL_POST_DIV_SHIFT, - val << PLL_POST_DIV_SHIFT); + PLL_POST_DIV_MASK(pll) << pll->post_div_shift, + val << pll->post_div_shift); } const struct clk_ops clk_alpha_pll_postdiv_trion_ops = { @@ -1638,7 +1638,7 @@ static int __alpha_pll_trion_set_rate(struct clk_hw *hw, unsigned long rate, if (ret < 0) return ret; - regmap_write(pll->clkr.regmap, PLL_L_VAL(pll), l); + regmap_update_bits(pll->clkr.regmap, PLL_L_VAL(pll), LUCID_EVO_PLL_L_VAL_MASK, l); regmap_write(pll->clkr.regmap, PLL_ALPHA_VAL(pll), a); /* Latch the PLL input */ @@ -1757,6 +1757,58 @@ const struct clk_ops clk_alpha_pll_agera_ops = { }; EXPORT_SYMBOL_GPL(clk_alpha_pll_agera_ops); +/** + * clk_lucid_5lpe_pll_configure - configure the lucid 5lpe pll + * + * @pll: clk alpha pll + * @regmap: register map + * @config: configuration to apply for pll + */ +void clk_lucid_5lpe_pll_configure(struct clk_alpha_pll *pll, struct regmap *regmap, + const struct alpha_pll_config *config) +{ + /* + * If the bootloader left the PLL enabled it's likely that there are + * RCGs that will lock up if we disable the PLL below. + */ + if (trion_pll_is_enabled(pll, regmap)) { + pr_debug("Lucid 5LPE PLL is already enabled, skipping configuration\n"); + return; + } + + clk_alpha_pll_write_config(regmap, PLL_L_VAL(pll), config->l); + regmap_write(regmap, PLL_CAL_L_VAL(pll), TRION_PLL_CAL_VAL); + clk_alpha_pll_write_config(regmap, PLL_ALPHA_VAL(pll), config->alpha); + clk_alpha_pll_write_config(regmap, PLL_CONFIG_CTL(pll), + config->config_ctl_val); + clk_alpha_pll_write_config(regmap, PLL_CONFIG_CTL_U(pll), + config->config_ctl_hi_val); + clk_alpha_pll_write_config(regmap, PLL_CONFIG_CTL_U1(pll), + config->config_ctl_hi1_val); + clk_alpha_pll_write_config(regmap, PLL_USER_CTL(pll), + config->user_ctl_val); + clk_alpha_pll_write_config(regmap, PLL_USER_CTL_U(pll), + config->user_ctl_hi_val); + clk_alpha_pll_write_config(regmap, PLL_USER_CTL_U1(pll), + config->user_ctl_hi1_val); + clk_alpha_pll_write_config(regmap, PLL_TEST_CTL(pll), + config->test_ctl_val); + clk_alpha_pll_write_config(regmap, PLL_TEST_CTL_U(pll), + config->test_ctl_hi_val); + clk_alpha_pll_write_config(regmap, PLL_TEST_CTL_U1(pll), + config->test_ctl_hi1_val); + + /* Disable PLL output */ + regmap_update_bits(regmap, PLL_MODE(pll), PLL_OUTCTRL, 0); + + /* Set operation mode to OFF */ + regmap_write(regmap, PLL_OPMODE(pll), PLL_STANDBY); + + /* Place the PLL in STANDBY mode */ + regmap_update_bits(regmap, PLL_MODE(pll), PLL_RESET_N, PLL_RESET_N); +} +EXPORT_SYMBOL_GPL(clk_lucid_5lpe_pll_configure); + static int alpha_pll_lucid_5lpe_enable(struct clk_hw *hw) { struct clk_alpha_pll *pll = to_clk_alpha_pll(hw); diff --git a/drivers/clk/qcom/clk-alpha-pll.h b/drivers/clk/qcom/clk-alpha-pll.h index 903fbab9b58e9..3fd0ef41c72c8 100644 --- a/drivers/clk/qcom/clk-alpha-pll.h +++ b/drivers/clk/qcom/clk-alpha-pll.h @@ -198,6 +198,8 @@ void clk_agera_pll_configure(struct clk_alpha_pll *pll, struct regmap *regmap, void clk_zonda_pll_configure(struct clk_alpha_pll *pll, struct regmap *regmap, const struct alpha_pll_config *config); +void clk_lucid_5lpe_pll_configure(struct clk_alpha_pll *pll, struct regmap *regmap, + const struct alpha_pll_config *config); void clk_lucid_evo_pll_configure(struct clk_alpha_pll *pll, struct regmap *regmap, const struct alpha_pll_config *config); void clk_rivian_evo_pll_configure(struct clk_alpha_pll *pll, struct regmap *regmap, diff --git a/drivers/clk/qcom/clk-rcg.h b/drivers/clk/qcom/clk-rcg.h index e6d84c8c7989c..84c497f361bc6 100644 --- a/drivers/clk/qcom/clk-rcg.h +++ b/drivers/clk/qcom/clk-rcg.h @@ -176,6 +176,7 @@ extern const struct clk_ops clk_byte2_ops; extern const struct clk_ops clk_pixel_ops; extern const struct clk_ops clk_gfx3d_ops; extern const struct clk_ops clk_rcg2_shared_ops; +extern const struct clk_ops clk_rcg2_shared_no_init_park_ops; extern const struct clk_ops clk_dp_ops; struct clk_rcg_dfs_data { diff --git a/drivers/clk/qcom/clk-rcg2.c b/drivers/clk/qcom/clk-rcg2.c index b9f2a29be927c..461f54fe5e4f1 100644 --- a/drivers/clk/qcom/clk-rcg2.c +++ b/drivers/clk/qcom/clk-rcg2.c @@ -1182,6 +1182,36 @@ const struct clk_ops clk_rcg2_shared_ops = { }; EXPORT_SYMBOL_GPL(clk_rcg2_shared_ops); +static int clk_rcg2_shared_no_init_park(struct clk_hw *hw) +{ + struct clk_rcg2 *rcg = to_clk_rcg2(hw); + + /* + * Read the config register so that the parent is properly mapped at + * registration time. + */ + regmap_read(rcg->clkr.regmap, rcg->cmd_rcgr + CFG_REG, &rcg->parked_cfg); + + return 0; +} + +/* + * Like clk_rcg2_shared_ops but skip the init so that the clk frequency is left + * unchanged at registration time. + */ +const struct clk_ops clk_rcg2_shared_no_init_park_ops = { + .init = clk_rcg2_shared_no_init_park, + .enable = clk_rcg2_shared_enable, + .disable = clk_rcg2_shared_disable, + .get_parent = clk_rcg2_shared_get_parent, + .set_parent = clk_rcg2_shared_set_parent, + .recalc_rate = clk_rcg2_shared_recalc_rate, + .determine_rate = clk_rcg2_determine_rate, + .set_rate = clk_rcg2_shared_set_rate, + .set_rate_and_parent = clk_rcg2_shared_set_rate_and_parent, +}; +EXPORT_SYMBOL_GPL(clk_rcg2_shared_no_init_park_ops); + /* Common APIs to be used for DFS based RCGR */ static void clk_rcg2_dfs_populate_freq(struct clk_hw *hw, unsigned int l, struct freq_tbl *f) diff --git a/drivers/clk/qcom/clk-rpmh.c b/drivers/clk/qcom/clk-rpmh.c index 4c5b552b47b6a..a556c9e77d192 100644 --- a/drivers/clk/qcom/clk-rpmh.c +++ b/drivers/clk/qcom/clk-rpmh.c @@ -263,6 +263,8 @@ static int clk_rpmh_bcm_send_cmd(struct clk_rpmh *c, bool enable) cmd_state = 0; } + cmd_state = min(cmd_state, BCM_TCS_CMD_VOTE_MASK); + if (c->last_sent_aggr_state != cmd_state) { cmd.addr = c->res_addr; cmd.data = BCM_TCS_CMD(1, enable, 0, cmd_state); diff --git a/drivers/clk/qcom/dispcc-sm8250.c b/drivers/clk/qcom/dispcc-sm8250.c index e17bb8b543b51..317a7e2b50bfb 100644 --- a/drivers/clk/qcom/dispcc-sm8250.c +++ b/drivers/clk/qcom/dispcc-sm8250.c @@ -851,6 +851,7 @@ static struct clk_branch disp_cc_mdss_dp_link1_intf_clk = { &disp_cc_mdss_dp_link1_div_clk_src.clkr.hw, }, .num_parents = 1, + .flags = CLK_SET_RATE_PARENT, .ops = &clk_branch2_ops, }, }, @@ -886,6 +887,7 @@ static struct clk_branch disp_cc_mdss_dp_link_intf_clk = { &disp_cc_mdss_dp_link_div_clk_src.clkr.hw, }, .num_parents = 1, + .flags = CLK_SET_RATE_PARENT, .ops = &clk_branch2_ops, }, }, @@ -1011,6 +1013,7 @@ static struct clk_branch disp_cc_mdss_mdp_lut_clk = { &disp_cc_mdss_mdp_clk_src.clkr.hw, }, .num_parents = 1, + .flags = CLK_SET_RATE_PARENT, .ops = &clk_branch2_ops, }, }, @@ -1359,8 +1362,13 @@ static int disp_cc_sm8250_probe(struct platform_device *pdev) disp_cc_sm8250_clocks[DISP_CC_MDSS_EDP_GTC_CLK_SRC] = NULL; } - clk_lucid_pll_configure(&disp_cc_pll0, regmap, &disp_cc_pll0_config); - clk_lucid_pll_configure(&disp_cc_pll1, regmap, &disp_cc_pll1_config); + if (of_device_is_compatible(pdev->dev.of_node, "qcom,sm8350-dispcc")) { + clk_lucid_5lpe_pll_configure(&disp_cc_pll0, regmap, &disp_cc_pll0_config); + clk_lucid_5lpe_pll_configure(&disp_cc_pll1, regmap, &disp_cc_pll1_config); + } else { + clk_lucid_pll_configure(&disp_cc_pll0, regmap, &disp_cc_pll0_config); + clk_lucid_pll_configure(&disp_cc_pll1, regmap, &disp_cc_pll1_config); + } /* Enable clock gating for MDP clocks */ regmap_update_bits(regmap, 0x8000, 0x10, 0x10); diff --git a/drivers/clk/qcom/dispcc-sm8550.c b/drivers/clk/qcom/dispcc-sm8550.c index b9edeb2a221dc..95b4c0548f50d 100644 --- a/drivers/clk/qcom/dispcc-sm8550.c +++ b/drivers/clk/qcom/dispcc-sm8550.c @@ -196,7 +196,7 @@ static const struct clk_parent_data disp_cc_parent_data_3[] = { static const struct parent_map disp_cc_parent_map_4[] = { { P_BI_TCXO, 0 }, { P_DP0_PHY_PLL_LINK_CLK, 1 }, - { P_DP1_PHY_PLL_VCO_DIV_CLK, 2 }, + { P_DP0_PHY_PLL_VCO_DIV_CLK, 2 }, { P_DP3_PHY_PLL_VCO_DIV_CLK, 3 }, { P_DP1_PHY_PLL_VCO_DIV_CLK, 4 }, { P_DP2_PHY_PLL_VCO_DIV_CLK, 6 }, @@ -213,7 +213,7 @@ static const struct clk_parent_data disp_cc_parent_data_4[] = { static const struct parent_map disp_cc_parent_map_5[] = { { P_BI_TCXO, 0 }, - { P_DSI0_PHY_PLL_OUT_BYTECLK, 4 }, + { P_DSI0_PHY_PLL_OUT_BYTECLK, 2 }, { P_DSI1_PHY_PLL_OUT_BYTECLK, 4 }, }; @@ -400,7 +400,7 @@ static struct clk_rcg2 disp_cc_mdss_dptx1_aux_clk_src = { .parent_data = disp_cc_parent_data_0, .num_parents = ARRAY_SIZE(disp_cc_parent_data_0), .flags = CLK_SET_RATE_PARENT, - .ops = &clk_dp_ops, + .ops = &clk_rcg2_ops, }, }; @@ -562,7 +562,7 @@ static struct clk_rcg2 disp_cc_mdss_esc0_clk_src = { .parent_data = disp_cc_parent_data_5, .num_parents = ARRAY_SIZE(disp_cc_parent_data_5), .flags = CLK_SET_RATE_PARENT, - .ops = &clk_rcg2_ops, + .ops = &clk_rcg2_shared_ops, }, }; @@ -577,7 +577,7 @@ static struct clk_rcg2 disp_cc_mdss_esc1_clk_src = { .parent_data = disp_cc_parent_data_5, .num_parents = ARRAY_SIZE(disp_cc_parent_data_5), .flags = CLK_SET_RATE_PARENT, - .ops = &clk_rcg2_ops, + .ops = &clk_rcg2_shared_ops, }, }; @@ -1611,7 +1611,7 @@ static struct gdsc mdss_gdsc = { .name = "mdss_gdsc", }, .pwrsts = PWRSTS_OFF_ON, - .flags = HW_CTRL | RETAIN_FF_ENABLE, + .flags = POLL_CFG_GDSCR | HW_CTRL | RETAIN_FF_ENABLE, }; static struct gdsc mdss_int2_gdsc = { @@ -1620,7 +1620,7 @@ static struct gdsc mdss_int2_gdsc = { .name = "mdss_int2_gdsc", }, .pwrsts = PWRSTS_OFF_ON, - .flags = HW_CTRL | RETAIN_FF_ENABLE, + .flags = POLL_CFG_GDSCR | HW_CTRL | RETAIN_FF_ENABLE, }; static struct clk_regmap *disp_cc_sm8550_clocks[] = { diff --git a/drivers/clk/qcom/gcc-ipq5332.c b/drivers/clk/qcom/gcc-ipq5332.c index f98591148a976..6a4877d888294 100644 --- a/drivers/clk/qcom/gcc-ipq5332.c +++ b/drivers/clk/qcom/gcc-ipq5332.c @@ -3388,6 +3388,7 @@ static struct clk_regmap *gcc_ipq5332_clocks[] = { [GCC_QDSS_DAP_DIV_CLK_SRC] = &gcc_qdss_dap_div_clk_src.clkr, [GCC_QDSS_ETR_USB_CLK] = &gcc_qdss_etr_usb_clk.clkr, [GCC_QDSS_EUD_AT_CLK] = &gcc_qdss_eud_at_clk.clkr, + [GCC_QDSS_TSCTR_CLK_SRC] = &gcc_qdss_tsctr_clk_src.clkr, [GCC_QPIC_AHB_CLK] = &gcc_qpic_ahb_clk.clkr, [GCC_QPIC_CLK] = &gcc_qpic_clk.clkr, [GCC_QPIC_IO_MACRO_CLK] = &gcc_qpic_io_macro_clk.clkr, diff --git a/drivers/clk/qcom/gcc-ipq9574.c b/drivers/clk/qcom/gcc-ipq9574.c index f8b9a1e93bef2..cdbbf2cc9c5d1 100644 --- a/drivers/clk/qcom/gcc-ipq9574.c +++ b/drivers/clk/qcom/gcc-ipq9574.c @@ -65,7 +65,7 @@ static const struct clk_parent_data gcc_sleep_clk_data[] = { static struct clk_alpha_pll gpll0_main = { .offset = 0x20000, - .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT], + .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT_EVO], .clkr = { .enable_reg = 0x0b000, .enable_mask = BIT(0), @@ -93,7 +93,7 @@ static struct clk_fixed_factor gpll0_out_main_div2 = { static struct clk_alpha_pll_postdiv gpll0 = { .offset = 0x20000, - .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT], + .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT_EVO], .width = 4, .clkr.hw.init = &(const struct clk_init_data) { .name = "gpll0", @@ -107,7 +107,7 @@ static struct clk_alpha_pll_postdiv gpll0 = { static struct clk_alpha_pll gpll4_main = { .offset = 0x22000, - .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT], + .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT_EVO], .clkr = { .enable_reg = 0x0b000, .enable_mask = BIT(2), @@ -122,7 +122,7 @@ static struct clk_alpha_pll gpll4_main = { static struct clk_alpha_pll_postdiv gpll4 = { .offset = 0x22000, - .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT], + .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT_EVO], .width = 4, .clkr.hw.init = &(const struct clk_init_data) { .name = "gpll4", @@ -136,7 +136,7 @@ static struct clk_alpha_pll_postdiv gpll4 = { static struct clk_alpha_pll gpll2_main = { .offset = 0x21000, - .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT], + .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT_EVO], .clkr = { .enable_reg = 0x0b000, .enable_mask = BIT(1), @@ -151,7 +151,7 @@ static struct clk_alpha_pll gpll2_main = { static struct clk_alpha_pll_postdiv gpll2 = { .offset = 0x21000, - .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT], + .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT_EVO], .width = 4, .clkr.hw.init = &(const struct clk_init_data) { .name = "gpll2", diff --git a/drivers/clk/qcom/gcc-sc8180x.c b/drivers/clk/qcom/gcc-sc8180x.c index ae21473815596..ec0c45881c67a 100644 --- a/drivers/clk/qcom/gcc-sc8180x.c +++ b/drivers/clk/qcom/gcc-sc8180x.c @@ -142,6 +142,23 @@ static struct clk_alpha_pll gpll7 = { }, }; +static struct clk_alpha_pll gpll9 = { + .offset = 0x1c000, + .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_TRION], + .clkr = { + .enable_reg = 0x52000, + .enable_mask = BIT(9), + .hw.init = &(const struct clk_init_data) { + .name = "gpll9", + .parent_data = &(const struct clk_parent_data) { + .fw_name = "bi_tcxo", + }, + .num_parents = 1, + .ops = &clk_alpha_pll_fixed_trion_ops, + }, + }, +}; + static const struct parent_map gcc_parent_map_0[] = { { P_BI_TCXO, 0 }, { P_GPLL0_OUT_MAIN, 1 }, @@ -241,7 +258,7 @@ static const struct parent_map gcc_parent_map_7[] = { static const struct clk_parent_data gcc_parents_7[] = { { .fw_name = "bi_tcxo", }, { .hw = &gpll0.clkr.hw }, - { .name = "gppl9" }, + { .hw = &gpll9.clkr.hw }, { .hw = &gpll4.clkr.hw }, { .hw = &gpll0_out_even.clkr.hw }, }; @@ -260,28 +277,6 @@ static const struct clk_parent_data gcc_parents_8[] = { { .hw = &gpll0_out_even.clkr.hw }, }; -static const struct freq_tbl ftbl_gcc_cpuss_ahb_clk_src[] = { - F(19200000, P_BI_TCXO, 1, 0, 0), - F(50000000, P_GPLL0_OUT_MAIN, 12, 0, 0), - F(100000000, P_GPLL0_OUT_MAIN, 6, 0, 0), - { } -}; - -static struct clk_rcg2 gcc_cpuss_ahb_clk_src = { - .cmd_rcgr = 0x48014, - .mnd_width = 0, - .hid_width = 5, - .parent_map = gcc_parent_map_0, - .freq_tbl = ftbl_gcc_cpuss_ahb_clk_src, - .clkr.hw.init = &(struct clk_init_data){ - .name = "gcc_cpuss_ahb_clk_src", - .parent_data = gcc_parents_0, - .num_parents = ARRAY_SIZE(gcc_parents_0), - .flags = CLK_SET_RATE_PARENT, - .ops = &clk_rcg2_ops, - }, -}; - static const struct freq_tbl ftbl_gcc_emac_ptp_clk_src[] = { F(19200000, P_BI_TCXO, 1, 0, 0), F(50000000, P_GPLL0_OUT_EVEN, 6, 0, 0), @@ -916,7 +911,7 @@ static const struct freq_tbl ftbl_gcc_sdcc2_apps_clk_src[] = { F(25000000, P_GPLL0_OUT_MAIN, 12, 1, 2), F(50000000, P_GPLL0_OUT_MAIN, 12, 0, 0), F(100000000, P_GPLL0_OUT_MAIN, 6, 0, 0), - F(200000000, P_GPLL0_OUT_MAIN, 3, 0, 0), + F(202000000, P_GPLL9_OUT_MAIN, 4, 0, 0), { } }; @@ -939,9 +934,8 @@ static const struct freq_tbl ftbl_gcc_sdcc4_apps_clk_src[] = { F(400000, P_BI_TCXO, 12, 1, 4), F(9600000, P_BI_TCXO, 2, 0, 0), F(19200000, P_BI_TCXO, 1, 0, 0), - F(37500000, P_GPLL0_OUT_MAIN, 16, 0, 0), F(50000000, P_GPLL0_OUT_MAIN, 12, 0, 0), - F(75000000, P_GPLL0_OUT_MAIN, 8, 0, 0), + F(100000000, P_GPLL0_OUT_MAIN, 6, 0, 0), { } }; @@ -1599,25 +1593,6 @@ static struct clk_branch gcc_cfg_noc_usb3_sec_axi_clk = { }, }; -/* For CPUSS functionality the AHB clock needs to be left enabled */ -static struct clk_branch gcc_cpuss_ahb_clk = { - .halt_reg = 0x48000, - .halt_check = BRANCH_HALT_VOTED, - .clkr = { - .enable_reg = 0x52004, - .enable_mask = BIT(21), - .hw.init = &(struct clk_init_data){ - .name = "gcc_cpuss_ahb_clk", - .parent_hws = (const struct clk_hw *[]){ - &gcc_cpuss_ahb_clk_src.clkr.hw - }, - .num_parents = 1, - .flags = CLK_IS_CRITICAL | CLK_SET_RATE_PARENT, - .ops = &clk_branch2_ops, - }, - }, -}; - static struct clk_branch gcc_cpuss_rbcpr_clk = { .halt_reg = 0x48008, .halt_check = BRANCH_HALT, @@ -3150,25 +3125,6 @@ static struct clk_branch gcc_sdcc4_apps_clk = { }, }; -/* For CPUSS functionality the SYS NOC clock needs to be left enabled */ -static struct clk_branch gcc_sys_noc_cpuss_ahb_clk = { - .halt_reg = 0x4819c, - .halt_check = BRANCH_HALT_VOTED, - .clkr = { - .enable_reg = 0x52004, - .enable_mask = BIT(0), - .hw.init = &(struct clk_init_data){ - .name = "gcc_sys_noc_cpuss_ahb_clk", - .parent_hws = (const struct clk_hw *[]){ - &gcc_cpuss_ahb_clk_src.clkr.hw - }, - .num_parents = 1, - .flags = CLK_IS_CRITICAL | CLK_SET_RATE_PARENT, - .ops = &clk_branch2_ops, - }, - }, -}; - static struct clk_branch gcc_tsif_ahb_clk = { .halt_reg = 0x36004, .halt_check = BRANCH_HALT, @@ -4258,8 +4214,6 @@ static struct clk_regmap *gcc_sc8180x_clocks[] = { [GCC_CFG_NOC_USB3_MP_AXI_CLK] = &gcc_cfg_noc_usb3_mp_axi_clk.clkr, [GCC_CFG_NOC_USB3_PRIM_AXI_CLK] = &gcc_cfg_noc_usb3_prim_axi_clk.clkr, [GCC_CFG_NOC_USB3_SEC_AXI_CLK] = &gcc_cfg_noc_usb3_sec_axi_clk.clkr, - [GCC_CPUSS_AHB_CLK] = &gcc_cpuss_ahb_clk.clkr, - [GCC_CPUSS_AHB_CLK_SRC] = &gcc_cpuss_ahb_clk_src.clkr, [GCC_CPUSS_RBCPR_CLK] = &gcc_cpuss_rbcpr_clk.clkr, [GCC_DDRSS_GPU_AXI_CLK] = &gcc_ddrss_gpu_axi_clk.clkr, [GCC_DISP_HF_AXI_CLK] = &gcc_disp_hf_axi_clk.clkr, @@ -4396,7 +4350,6 @@ static struct clk_regmap *gcc_sc8180x_clocks[] = { [GCC_SDCC4_AHB_CLK] = &gcc_sdcc4_ahb_clk.clkr, [GCC_SDCC4_APPS_CLK] = &gcc_sdcc4_apps_clk.clkr, [GCC_SDCC4_APPS_CLK_SRC] = &gcc_sdcc4_apps_clk_src.clkr, - [GCC_SYS_NOC_CPUSS_AHB_CLK] = &gcc_sys_noc_cpuss_ahb_clk.clkr, [GCC_TSIF_AHB_CLK] = &gcc_tsif_ahb_clk.clkr, [GCC_TSIF_INACTIVITY_TIMERS_CLK] = &gcc_tsif_inactivity_timers_clk.clkr, [GCC_TSIF_REF_CLK] = &gcc_tsif_ref_clk.clkr, @@ -4483,6 +4436,7 @@ static struct clk_regmap *gcc_sc8180x_clocks[] = { [GPLL1] = &gpll1.clkr, [GPLL4] = &gpll4.clkr, [GPLL7] = &gpll7.clkr, + [GPLL9] = &gpll9.clkr, }; static const struct qcom_reset_map gcc_sc8180x_resets[] = { diff --git a/drivers/clk/qcom/gcc-sm8250.c b/drivers/clk/qcom/gcc-sm8250.c index c6c5261264f11..272da807c6945 100644 --- a/drivers/clk/qcom/gcc-sm8250.c +++ b/drivers/clk/qcom/gcc-sm8250.c @@ -3226,7 +3226,7 @@ static struct gdsc pcie_0_gdsc = { .pd = { .name = "pcie_0_gdsc", }, - .pwrsts = PWRSTS_OFF_ON, + .pwrsts = PWRSTS_RET_ON, }; static struct gdsc pcie_1_gdsc = { @@ -3234,7 +3234,7 @@ static struct gdsc pcie_1_gdsc = { .pd = { .name = "pcie_1_gdsc", }, - .pwrsts = PWRSTS_OFF_ON, + .pwrsts = PWRSTS_RET_ON, }; static struct gdsc pcie_2_gdsc = { @@ -3242,7 +3242,7 @@ static struct gdsc pcie_2_gdsc = { .pd = { .name = "pcie_2_gdsc", }, - .pwrsts = PWRSTS_OFF_ON, + .pwrsts = PWRSTS_RET_ON, }; static struct gdsc ufs_card_gdsc = { diff --git a/drivers/clk/qcom/gcc-sm8450.c b/drivers/clk/qcom/gcc-sm8450.c index 5635429825516..4c55df89ddca7 100644 --- a/drivers/clk/qcom/gcc-sm8450.c +++ b/drivers/clk/qcom/gcc-sm8450.c @@ -2974,7 +2974,7 @@ static struct gdsc pcie_0_gdsc = { .pd = { .name = "pcie_0_gdsc", }, - .pwrsts = PWRSTS_OFF_ON, + .pwrsts = PWRSTS_RET_ON, }; static struct gdsc pcie_1_gdsc = { @@ -2982,7 +2982,7 @@ static struct gdsc pcie_1_gdsc = { .pd = { .name = "pcie_1_gdsc", }, - .pwrsts = PWRSTS_OFF_ON, + .pwrsts = PWRSTS_RET_ON, }; static struct gdsc ufs_phy_gdsc = { diff --git a/drivers/clk/qcom/gcc-sm8550.c b/drivers/clk/qcom/gcc-sm8550.c index b883dffe5f7aa..eb3765c57b650 100644 --- a/drivers/clk/qcom/gcc-sm8550.c +++ b/drivers/clk/qcom/gcc-sm8550.c @@ -536,7 +536,7 @@ static struct clk_rcg2 gcc_qupv3_i2c_s0_clk_src = { .parent_data = gcc_parent_data_0, .num_parents = ARRAY_SIZE(gcc_parent_data_0), .flags = CLK_SET_RATE_PARENT, - .ops = &clk_rcg2_shared_ops, + .ops = &clk_rcg2_ops, }, }; @@ -551,7 +551,7 @@ static struct clk_rcg2 gcc_qupv3_i2c_s1_clk_src = { .parent_data = gcc_parent_data_0, .num_parents = ARRAY_SIZE(gcc_parent_data_0), .flags = CLK_SET_RATE_PARENT, - .ops = &clk_rcg2_shared_ops, + .ops = &clk_rcg2_ops, }, }; @@ -566,7 +566,7 @@ static struct clk_rcg2 gcc_qupv3_i2c_s2_clk_src = { .parent_data = gcc_parent_data_0, .num_parents = ARRAY_SIZE(gcc_parent_data_0), .flags = CLK_SET_RATE_PARENT, - .ops = &clk_rcg2_shared_ops, + .ops = &clk_rcg2_ops, }, }; @@ -581,7 +581,7 @@ static struct clk_rcg2 gcc_qupv3_i2c_s3_clk_src = { .parent_data = gcc_parent_data_0, .num_parents = ARRAY_SIZE(gcc_parent_data_0), .flags = CLK_SET_RATE_PARENT, - .ops = &clk_rcg2_shared_ops, + .ops = &clk_rcg2_ops, }, }; @@ -596,7 +596,7 @@ static struct clk_rcg2 gcc_qupv3_i2c_s4_clk_src = { .parent_data = gcc_parent_data_0, .num_parents = ARRAY_SIZE(gcc_parent_data_0), .flags = CLK_SET_RATE_PARENT, - .ops = &clk_rcg2_shared_ops, + .ops = &clk_rcg2_ops, }, }; @@ -611,7 +611,7 @@ static struct clk_rcg2 gcc_qupv3_i2c_s5_clk_src = { .parent_data = gcc_parent_data_0, .num_parents = ARRAY_SIZE(gcc_parent_data_0), .flags = CLK_SET_RATE_PARENT, - .ops = &clk_rcg2_shared_ops, + .ops = &clk_rcg2_ops, }, }; @@ -626,7 +626,7 @@ static struct clk_rcg2 gcc_qupv3_i2c_s6_clk_src = { .parent_data = gcc_parent_data_0, .num_parents = ARRAY_SIZE(gcc_parent_data_0), .flags = CLK_SET_RATE_PARENT, - .ops = &clk_rcg2_shared_ops, + .ops = &clk_rcg2_ops, }, }; @@ -641,7 +641,7 @@ static struct clk_rcg2 gcc_qupv3_i2c_s7_clk_src = { .parent_data = gcc_parent_data_0, .num_parents = ARRAY_SIZE(gcc_parent_data_0), .flags = CLK_SET_RATE_PARENT, - .ops = &clk_rcg2_shared_ops, + .ops = &clk_rcg2_ops, }, }; @@ -656,7 +656,7 @@ static struct clk_rcg2 gcc_qupv3_i2c_s8_clk_src = { .parent_data = gcc_parent_data_0, .num_parents = ARRAY_SIZE(gcc_parent_data_0), .flags = CLK_SET_RATE_PARENT, - .ops = &clk_rcg2_shared_ops, + .ops = &clk_rcg2_ops, }, }; @@ -671,7 +671,7 @@ static struct clk_rcg2 gcc_qupv3_i2c_s9_clk_src = { .parent_data = gcc_parent_data_0, .num_parents = ARRAY_SIZE(gcc_parent_data_0), .flags = CLK_SET_RATE_PARENT, - .ops = &clk_rcg2_shared_ops, + .ops = &clk_rcg2_ops, }, }; @@ -700,7 +700,7 @@ static struct clk_init_data gcc_qupv3_wrap1_s0_clk_src_init = { .parent_data = gcc_parent_data_0, .num_parents = ARRAY_SIZE(gcc_parent_data_0), .flags = CLK_SET_RATE_PARENT, - .ops = &clk_rcg2_shared_ops, + .ops = &clk_rcg2_ops, }; static struct clk_rcg2 gcc_qupv3_wrap1_s0_clk_src = { @@ -717,7 +717,7 @@ static struct clk_init_data gcc_qupv3_wrap1_s1_clk_src_init = { .parent_data = gcc_parent_data_0, .num_parents = ARRAY_SIZE(gcc_parent_data_0), .flags = CLK_SET_RATE_PARENT, - .ops = &clk_rcg2_shared_ops, + .ops = &clk_rcg2_ops, }; static struct clk_rcg2 gcc_qupv3_wrap1_s1_clk_src = { @@ -750,7 +750,7 @@ static struct clk_init_data gcc_qupv3_wrap1_s2_clk_src_init = { .parent_data = gcc_parent_data_0, .num_parents = ARRAY_SIZE(gcc_parent_data_0), .flags = CLK_SET_RATE_PARENT, - .ops = &clk_rcg2_shared_ops, + .ops = &clk_rcg2_ops, }; static struct clk_rcg2 gcc_qupv3_wrap1_s2_clk_src = { @@ -767,7 +767,7 @@ static struct clk_init_data gcc_qupv3_wrap1_s3_clk_src_init = { .parent_data = gcc_parent_data_0, .num_parents = ARRAY_SIZE(gcc_parent_data_0), .flags = CLK_SET_RATE_PARENT, - .ops = &clk_rcg2_shared_ops, + .ops = &clk_rcg2_ops, }; static struct clk_rcg2 gcc_qupv3_wrap1_s3_clk_src = { @@ -784,7 +784,7 @@ static struct clk_init_data gcc_qupv3_wrap1_s4_clk_src_init = { .parent_data = gcc_parent_data_0, .num_parents = ARRAY_SIZE(gcc_parent_data_0), .flags = CLK_SET_RATE_PARENT, - .ops = &clk_rcg2_shared_ops, + .ops = &clk_rcg2_ops, }; static struct clk_rcg2 gcc_qupv3_wrap1_s4_clk_src = { @@ -801,7 +801,7 @@ static struct clk_init_data gcc_qupv3_wrap1_s5_clk_src_init = { .parent_data = gcc_parent_data_0, .num_parents = ARRAY_SIZE(gcc_parent_data_0), .flags = CLK_SET_RATE_PARENT, - .ops = &clk_rcg2_shared_ops, + .ops = &clk_rcg2_ops, }; static struct clk_rcg2 gcc_qupv3_wrap1_s5_clk_src = { @@ -818,7 +818,7 @@ static struct clk_init_data gcc_qupv3_wrap1_s6_clk_src_init = { .parent_data = gcc_parent_data_0, .num_parents = ARRAY_SIZE(gcc_parent_data_0), .flags = CLK_SET_RATE_PARENT, - .ops = &clk_rcg2_shared_ops, + .ops = &clk_rcg2_ops, }; static struct clk_rcg2 gcc_qupv3_wrap1_s6_clk_src = { @@ -835,7 +835,7 @@ static struct clk_init_data gcc_qupv3_wrap1_s7_clk_src_init = { .parent_data = gcc_parent_data_0, .num_parents = ARRAY_SIZE(gcc_parent_data_0), .flags = CLK_SET_RATE_PARENT, - .ops = &clk_rcg2_shared_ops, + .ops = &clk_rcg2_ops, }; static struct clk_rcg2 gcc_qupv3_wrap1_s7_clk_src = { @@ -852,7 +852,7 @@ static struct clk_init_data gcc_qupv3_wrap2_s0_clk_src_init = { .parent_data = gcc_parent_data_0, .num_parents = ARRAY_SIZE(gcc_parent_data_0), .flags = CLK_SET_RATE_PARENT, - .ops = &clk_rcg2_shared_ops, + .ops = &clk_rcg2_ops, }; static struct clk_rcg2 gcc_qupv3_wrap2_s0_clk_src = { @@ -869,7 +869,7 @@ static struct clk_init_data gcc_qupv3_wrap2_s1_clk_src_init = { .parent_data = gcc_parent_data_0, .num_parents = ARRAY_SIZE(gcc_parent_data_0), .flags = CLK_SET_RATE_PARENT, - .ops = &clk_rcg2_shared_ops, + .ops = &clk_rcg2_ops, }; static struct clk_rcg2 gcc_qupv3_wrap2_s1_clk_src = { @@ -886,7 +886,7 @@ static struct clk_init_data gcc_qupv3_wrap2_s2_clk_src_init = { .parent_data = gcc_parent_data_0, .num_parents = ARRAY_SIZE(gcc_parent_data_0), .flags = CLK_SET_RATE_PARENT, - .ops = &clk_rcg2_shared_ops, + .ops = &clk_rcg2_ops, }; static struct clk_rcg2 gcc_qupv3_wrap2_s2_clk_src = { @@ -903,7 +903,7 @@ static struct clk_init_data gcc_qupv3_wrap2_s3_clk_src_init = { .parent_data = gcc_parent_data_0, .num_parents = ARRAY_SIZE(gcc_parent_data_0), .flags = CLK_SET_RATE_PARENT, - .ops = &clk_rcg2_shared_ops, + .ops = &clk_rcg2_ops, }; static struct clk_rcg2 gcc_qupv3_wrap2_s3_clk_src = { @@ -920,7 +920,7 @@ static struct clk_init_data gcc_qupv3_wrap2_s4_clk_src_init = { .parent_data = gcc_parent_data_0, .num_parents = ARRAY_SIZE(gcc_parent_data_0), .flags = CLK_SET_RATE_PARENT, - .ops = &clk_rcg2_shared_ops, + .ops = &clk_rcg2_ops, }; static struct clk_rcg2 gcc_qupv3_wrap2_s4_clk_src = { @@ -937,7 +937,7 @@ static struct clk_init_data gcc_qupv3_wrap2_s5_clk_src_init = { .parent_data = gcc_parent_data_0, .num_parents = ARRAY_SIZE(gcc_parent_data_0), .flags = CLK_SET_RATE_PARENT, - .ops = &clk_rcg2_shared_ops, + .ops = &clk_rcg2_ops, }; static struct clk_rcg2 gcc_qupv3_wrap2_s5_clk_src = { @@ -975,7 +975,7 @@ static struct clk_init_data gcc_qupv3_wrap2_s6_clk_src_init = { .parent_data = gcc_parent_data_8, .num_parents = ARRAY_SIZE(gcc_parent_data_8), .flags = CLK_SET_RATE_PARENT, - .ops = &clk_rcg2_shared_ops, + .ops = &clk_rcg2_ops, }; static struct clk_rcg2 gcc_qupv3_wrap2_s6_clk_src = { @@ -992,7 +992,7 @@ static struct clk_init_data gcc_qupv3_wrap2_s7_clk_src_init = { .parent_data = gcc_parent_data_0, .num_parents = ARRAY_SIZE(gcc_parent_data_0), .flags = CLK_SET_RATE_PARENT, - .ops = &clk_rcg2_shared_ops, + .ops = &clk_rcg2_ops, }; static struct clk_rcg2 gcc_qupv3_wrap2_s7_clk_src = { @@ -1159,7 +1159,7 @@ static struct clk_rcg2 gcc_usb30_prim_master_clk_src = { .parent_data = gcc_parent_data_0, .num_parents = ARRAY_SIZE(gcc_parent_data_0), .flags = CLK_SET_RATE_PARENT, - .ops = &clk_rcg2_shared_ops, + .ops = &clk_rcg2_shared_no_init_park_ops, }, }; diff --git a/drivers/clk/rockchip/clk-rk3228.c b/drivers/clk/rockchip/clk-rk3228.c index a24a35553e134..7343d2d7676bc 100644 --- a/drivers/clk/rockchip/clk-rk3228.c +++ b/drivers/clk/rockchip/clk-rk3228.c @@ -409,7 +409,7 @@ static struct rockchip_clk_branch rk3228_clk_branches[] __initdata = { RK2928_CLKSEL_CON(29), 0, 3, DFLAGS), DIV(0, "sclk_vop_pre", "sclk_vop_src", 0, RK2928_CLKSEL_CON(27), 8, 8, DFLAGS), - MUX(DCLK_VOP, "dclk_vop", mux_dclk_vop_p, 0, + MUX(DCLK_VOP, "dclk_vop", mux_dclk_vop_p, CLK_SET_RATE_PARENT | CLK_SET_RATE_NO_REPARENT, RK2928_CLKSEL_CON(27), 1, 1, MFLAGS), FACTOR(0, "xin12m", "xin24m", 0, 1, 2), diff --git a/drivers/clk/rockchip/clk-rk3588.c b/drivers/clk/rockchip/clk-rk3588.c index 6994165e03957..d8ffcaefa480b 100644 --- a/drivers/clk/rockchip/clk-rk3588.c +++ b/drivers/clk/rockchip/clk-rk3588.c @@ -526,7 +526,7 @@ PNAME(pmu_200m_100m_p) = { "clk_pmu1_200m_src", "clk_pmu1_100m_src" }; PNAME(pmu_300m_24m_p) = { "clk_300m_src", "xin24m" }; PNAME(pmu_400m_24m_p) = { "clk_400m_src", "xin24m" }; PNAME(pmu_100m_50m_24m_src_p) = { "clk_pmu1_100m_src", "clk_pmu1_50m_src", "xin24m" }; -PNAME(pmu_24m_32k_100m_src_p) = { "xin24m", "32k", "clk_pmu1_100m_src" }; +PNAME(pmu_24m_32k_100m_src_p) = { "xin24m", "xin32k", "clk_pmu1_100m_src" }; PNAME(hclk_pmu1_root_p) = { "clk_pmu1_200m_src", "clk_pmu1_100m_src", "clk_pmu1_50m_src", "xin24m" }; PNAME(hclk_pmu_cm0_root_p) = { "clk_pmu1_400m_src", "clk_pmu1_200m_src", "clk_pmu1_100m_src", "xin24m" }; PNAME(mclk_pdm0_p) = { "clk_pmu1_300m_src", "clk_pmu1_200m_src" }; diff --git a/drivers/clk/rockchip/clk.c b/drivers/clk/rockchip/clk.c index 4059d9365ae64..b9d6ffcb34091 100644 --- a/drivers/clk/rockchip/clk.c +++ b/drivers/clk/rockchip/clk.c @@ -433,12 +433,13 @@ void rockchip_clk_register_branches(struct rockchip_clk_provider *ctx, struct rockchip_clk_branch *list, unsigned int nr_clk) { - struct clk *clk = NULL; + struct clk *clk; unsigned int idx; unsigned long flags; for (idx = 0; idx < nr_clk; idx++, list++) { flags = list->flags; + clk = NULL; /* catch simple muxes */ switch (list->branch_type) { diff --git a/drivers/clk/samsung/clk-exynos7885.c b/drivers/clk/samsung/clk-exynos7885.c index f7d7427a558ba..87387d4cbf48a 100644 --- a/drivers/clk/samsung/clk-exynos7885.c +++ b/drivers/clk/samsung/clk-exynos7885.c @@ -20,7 +20,7 @@ #define CLKS_NR_TOP (CLK_GOUT_FSYS_USB30DRD + 1) #define CLKS_NR_CORE (CLK_GOUT_TREX_P_CORE_PCLK_P_CORE + 1) #define CLKS_NR_PERI (CLK_GOUT_WDT1_PCLK + 1) -#define CLKS_NR_FSYS (CLK_GOUT_MMC_SDIO_SDCLKIN + 1) +#define CLKS_NR_FSYS (CLK_MOUT_FSYS_USB30DRD_USER + 1) /* ---- CMU_TOP ------------------------------------------------------------- */ diff --git a/drivers/clk/starfive/clk-starfive-jh7110-sys.c b/drivers/clk/starfive/clk-starfive-jh7110-sys.c index 3884eff9fe931..58ef7c6d69cce 100644 --- a/drivers/clk/starfive/clk-starfive-jh7110-sys.c +++ b/drivers/clk/starfive/clk-starfive-jh7110-sys.c @@ -385,6 +385,32 @@ int jh7110_reset_controller_register(struct jh71x0_clk_priv *priv, } EXPORT_SYMBOL_GPL(jh7110_reset_controller_register); +/* + * This clock notifier is called when the rate of PLL0 clock is to be changed. + * The cpu_root clock should save the curent parent clock and switch its parent + * clock to osc before PLL0 rate will be changed. Then switch its parent clock + * back after the PLL0 rate is completed. + */ +static int jh7110_pll0_clk_notifier_cb(struct notifier_block *nb, + unsigned long action, void *data) +{ + struct jh71x0_clk_priv *priv = container_of(nb, struct jh71x0_clk_priv, pll_clk_nb); + struct clk *cpu_root = priv->reg[JH7110_SYSCLK_CPU_ROOT].hw.clk; + int ret = 0; + + if (action == PRE_RATE_CHANGE) { + struct clk *osc = clk_get(priv->dev, "osc"); + + priv->original_clk = clk_get_parent(cpu_root); + ret = clk_set_parent(cpu_root, osc); + clk_put(osc); + } else if (action == POST_RATE_CHANGE) { + ret = clk_set_parent(cpu_root, priv->original_clk); + } + + return notifier_from_errno(ret); +} + static int __init jh7110_syscrg_probe(struct platform_device *pdev) { struct jh71x0_clk_priv *priv; @@ -413,7 +439,10 @@ static int __init jh7110_syscrg_probe(struct platform_device *pdev) if (IS_ERR(priv->pll[0])) return PTR_ERR(priv->pll[0]); } else { - clk_put(pllclk); + priv->pll_clk_nb.notifier_call = jh7110_pll0_clk_notifier_cb; + ret = clk_notifier_register(pllclk, &priv->pll_clk_nb); + if (ret) + return ret; priv->pll[0] = NULL; } diff --git a/drivers/clk/starfive/clk-starfive-jh7110-vout.c b/drivers/clk/starfive/clk-starfive-jh7110-vout.c index 10cc1ec439251..36340ca42cc7e 100644 --- a/drivers/clk/starfive/clk-starfive-jh7110-vout.c +++ b/drivers/clk/starfive/clk-starfive-jh7110-vout.c @@ -145,7 +145,7 @@ static int jh7110_voutcrg_probe(struct platform_device *pdev) /* enable power domain and clocks */ pm_runtime_enable(priv->dev); - ret = pm_runtime_get_sync(priv->dev); + ret = pm_runtime_resume_and_get(priv->dev); if (ret < 0) return dev_err_probe(priv->dev, ret, "failed to turn on power\n"); diff --git a/drivers/clk/starfive/clk-starfive-jh71x0.h b/drivers/clk/starfive/clk-starfive-jh71x0.h index 34bb11c72eb73..ebc55b9ef8370 100644 --- a/drivers/clk/starfive/clk-starfive-jh71x0.h +++ b/drivers/clk/starfive/clk-starfive-jh71x0.h @@ -114,6 +114,8 @@ struct jh71x0_clk_priv { spinlock_t rmw_lock; struct device *dev; void __iomem *base; + struct clk *original_clk; + struct notifier_block pll_clk_nb; struct clk_hw *pll[3]; struct jh71x0_clk reg[]; }; diff --git a/drivers/clk/ti/clk-dra7-atl.c b/drivers/clk/ti/clk-dra7-atl.c index d964e3affd42c..0eab7f3e2eab9 100644 --- a/drivers/clk/ti/clk-dra7-atl.c +++ b/drivers/clk/ti/clk-dra7-atl.c @@ -240,6 +240,7 @@ static int of_dra7_atl_clk_probe(struct platform_device *pdev) } clk = of_clk_get_from_provider(&clkspec); + of_node_put(clkspec.np); if (IS_ERR(clk)) { pr_err("%s: failed to get atl clock %d from provider\n", __func__, i); diff --git a/drivers/clocksource/timer-imx-tpm.c b/drivers/clocksource/timer-imx-tpm.c index bd64a8a8427f3..92c025b70eb62 100644 --- a/drivers/clocksource/timer-imx-tpm.c +++ b/drivers/clocksource/timer-imx-tpm.c @@ -83,20 +83,28 @@ static u64 notrace tpm_read_sched_clock(void) static int tpm_set_next_event(unsigned long delta, struct clock_event_device *evt) { - unsigned long next, now; + unsigned long next, prev, now; - next = tpm_read_counter(); - next += delta; + prev = tpm_read_counter(); + next = prev + delta; writel(next, timer_base + TPM_C0V); now = tpm_read_counter(); + /* + * Need to wait CNT increase at least 1 cycle to make sure + * the C0V has been updated into HW. + */ + if ((next & 0xffffffff) != readl(timer_base + TPM_C0V)) + while (now == tpm_read_counter()) + ; + /* * NOTE: We observed in a very small probability, the bus fabric * contention between GPU and A7 may results a few cycles delay * of writing CNT registers which may cause the min_delta event got * missed, so we need add a ETIME check here in case it happened. */ - return (int)(next - now) <= 0 ? -ETIME : 0; + return (now - prev) >= delta ? -ETIME : 0; } static int tpm_set_state_oneshot(struct clock_event_device *evt) diff --git a/drivers/clocksource/timer-qcom.c b/drivers/clocksource/timer-qcom.c index b4afe3a675835..eac4c95c6127f 100644 --- a/drivers/clocksource/timer-qcom.c +++ b/drivers/clocksource/timer-qcom.c @@ -233,6 +233,7 @@ static int __init msm_dt_timer_init(struct device_node *np) } if (of_property_read_u32(np, "clock-frequency", &freq)) { + iounmap(cpu0_base); pr_err("Unknown frequency\n"); return -EINVAL; } @@ -243,7 +244,11 @@ static int __init msm_dt_timer_init(struct device_node *np) freq /= 4; writel_relaxed(DGT_CLK_CTL_DIV_4, source_base + DGT_CLK_CTL); - return msm_timer_init(freq, 32, irq, !!percpu_offset); + ret = msm_timer_init(freq, 32, irq, !!percpu_offset); + if (ret) + iounmap(cpu0_base); + + return ret; } TIMER_OF_DECLARE(kpss_timer, "qcom,kpss-timer", msm_dt_timer_init); TIMER_OF_DECLARE(scss_timer, "qcom,scss-timer", msm_dt_timer_init); diff --git a/drivers/comedi/drivers/ni_routing/tools/convert_c_to_py.c b/drivers/comedi/drivers/ni_routing/tools/convert_c_to_py.c index d55521b5bdcb2..892a66b2cea66 100644 --- a/drivers/comedi/drivers/ni_routing/tools/convert_c_to_py.c +++ b/drivers/comedi/drivers/ni_routing/tools/convert_c_to_py.c @@ -140,6 +140,11 @@ int main(void) { FILE *fp = fopen("ni_values.py", "w"); + if (fp == NULL) { + fprintf(stderr, "Could not open file!"); + return -1; + } + /* write route register values */ fprintf(fp, "ni_route_values = {\n"); for (int i = 0; ni_all_route_values[i]; ++i) diff --git a/drivers/cpufreq/Kconfig b/drivers/cpufreq/Kconfig index c996963f03482..a1b82168a9420 100644 --- a/drivers/cpufreq/Kconfig +++ b/drivers/cpufreq/Kconfig @@ -239,6 +239,20 @@ config ANDROID_V_CPUFREQ_VIRT If in doubt, say N. +config CPUFREQ_VIRT + tristate "Virtual cpufreq driver" + depends on GENERIC_ARCH_TOPOLOGY + help + This adds a virtualized cpufreq driver for guest kernels that + read/writes to a MMIO region for a virtualized cpufreq device to + communicate with the host. It sends performance requests to the host + which gets used as a hint to schedule vCPU threads and select CPU + frequency. If a VM does not support a virtualized FIE such as AMUs, + it updates the frequency scaling factor by polling host CPU frequency + to enable accurate Per-Entity Load Tracking for tasks running in the guest. + + If in doubt, say N. + config CPUFREQ_DT_PLATDEV tristate "Generic DT based cpufreq platdev driver" depends on OF diff --git a/drivers/cpufreq/Makefile b/drivers/cpufreq/Makefile index 6312cdf4ae262..e2657bf897356 100644 --- a/drivers/cpufreq/Makefile +++ b/drivers/cpufreq/Makefile @@ -20,6 +20,7 @@ obj-$(CONFIG_CPU_FREQ_GOV_ATTR_SET) += cpufreq_governor_attr_set.o obj-$(CONFIG_CPUFREQ_DT) += cpufreq-dt.o obj-$(CONFIG_CPUFREQ_DT_PLATDEV) += cpufreq-dt-platdev.o obj-$(CONFIG_ANDROID_V_CPUFREQ_VIRT) += android-v-virt-cpufreq.o +obj-$(CONFIG_CPUFREQ_VIRT) += virtual-cpufreq.o obj-$(CONFIG_CPUFREQ_DUMMY) += dummy-cpufreq.o diff --git a/drivers/cpufreq/TEST_MAPPING b/drivers/cpufreq/TEST_MAPPING index 4263379dc49e6..7cc7d25039091 100644 --- a/drivers/cpufreq/TEST_MAPPING +++ b/drivers/cpufreq/TEST_MAPPING @@ -237,6 +237,22 @@ "include-filter": "android.hardware.camera2.cts.FastBasicsTest" } ] + }, + { + "name": "CtsIncrementalInstallHostTestCases", + "options": [ + { + "include-filter": "android.incrementalinstall.cts.IncrementalInstallTest" + } + ] + }, + { + "name": "CtsLibcoreLegacy22TestCases", + "options": [ + { + "include-filter": "android.util.cts.FloatMathTest" + } + ] } ] } diff --git a/drivers/cpufreq/amd-pstate.c b/drivers/cpufreq/amd-pstate.c index 23c74e9f04c48..f461f99eb040c 100644 --- a/drivers/cpufreq/amd-pstate.c +++ b/drivers/cpufreq/amd-pstate.c @@ -37,6 +37,7 @@ #include #include #include +#include #include #include @@ -49,6 +50,8 @@ #define AMD_PSTATE_TRANSITION_LATENCY 20000 #define AMD_PSTATE_TRANSITION_DELAY 1000 +#define CPPC_HIGHEST_PERF_PERFORMANCE 196 +#define CPPC_HIGHEST_PERF_DEFAULT 166 /* * TODO: We need more time to fine tune processors with shared memory solution @@ -64,6 +67,7 @@ static struct cpufreq_driver amd_pstate_driver; static struct cpufreq_driver amd_pstate_epp_driver; static int cppc_state = AMD_PSTATE_UNDEFINED; static bool cppc_enabled; +static bool amd_pstate_prefcore = true; /* * AMD Energy Preference Performance (EPP) @@ -310,6 +314,21 @@ static inline int amd_pstate_enable(bool enable) return static_call(amd_pstate_enable)(enable); } +static u32 amd_pstate_highest_perf_set(struct amd_cpudata *cpudata) +{ + struct cpuinfo_x86 *c = &cpu_data(0); + + /* + * For AMD CPUs with Family ID 19H and Model ID range 0x70 to 0x7f, + * the highest performance level is set to 196. + * https://bugzilla.kernel.org/show_bug.cgi?id=218759 + */ + if (c->x86 == 0x19 && (c->x86_model >= 0x70 && c->x86_model <= 0x7f)) + return CPPC_HIGHEST_PERF_PERFORMANCE; + + return CPPC_HIGHEST_PERF_DEFAULT; +} + static int pstate_init_perf(struct amd_cpudata *cpudata) { u64 cap1; @@ -320,13 +339,14 @@ static int pstate_init_perf(struct amd_cpudata *cpudata) if (ret) return ret; - /* - * TODO: Introduce AMD specific power feature. - * - * CPPC entry doesn't indicate the highest performance in some ASICs. + /* For platforms that do not support the preferred core feature, the + * highest_pef may be configured with 166 or 255, to avoid max frequency + * calculated wrongly. we take the AMD_CPPC_HIGHEST_PERF(cap1) value as + * the default max perf. */ - highest_perf = amd_get_highest_perf(); - if (highest_perf > AMD_CPPC_HIGHEST_PERF(cap1)) + if (cpudata->hw_prefcore) + highest_perf = amd_pstate_highest_perf_set(cpudata); + else highest_perf = AMD_CPPC_HIGHEST_PERF(cap1); WRITE_ONCE(cpudata->highest_perf, highest_perf); @@ -347,8 +367,9 @@ static int cppc_init_perf(struct amd_cpudata *cpudata) if (ret) return ret; - highest_perf = amd_get_highest_perf(); - if (highest_perf > cppc_perf.highest_perf) + if (cpudata->hw_prefcore) + highest_perf = amd_pstate_highest_perf_set(cpudata); + else highest_perf = cppc_perf.highest_perf; WRITE_ONCE(cpudata->highest_perf, highest_perf); @@ -709,6 +730,80 @@ static void amd_perf_ctl_reset(unsigned int cpu) wrmsrl_on_cpu(cpu, MSR_AMD_PERF_CTL, 0); } +/* + * Set amd-pstate preferred core enable can't be done directly from cpufreq callbacks + * due to locking, so queue the work for later. + */ +static void amd_pstste_sched_prefcore_workfn(struct work_struct *work) +{ + sched_set_itmt_support(); +} +static DECLARE_WORK(sched_prefcore_work, amd_pstste_sched_prefcore_workfn); + +/* + * Get the highest performance register value. + * @cpu: CPU from which to get highest performance. + * @highest_perf: Return address. + * + * Return: 0 for success, -EIO otherwise. + */ +static int amd_pstate_get_highest_perf(int cpu, u32 *highest_perf) +{ + int ret; + + if (boot_cpu_has(X86_FEATURE_CPPC)) { + u64 cap1; + + ret = rdmsrl_safe_on_cpu(cpu, MSR_AMD_CPPC_CAP1, &cap1); + if (ret) + return ret; + WRITE_ONCE(*highest_perf, AMD_CPPC_HIGHEST_PERF(cap1)); + } else { + u64 cppc_highest_perf; + + ret = cppc_get_highest_perf(cpu, &cppc_highest_perf); + if (ret) + return ret; + WRITE_ONCE(*highest_perf, cppc_highest_perf); + } + + return (ret); +} + +#define CPPC_MAX_PERF U8_MAX + +static void amd_pstate_init_prefcore(struct amd_cpudata *cpudata) +{ + int ret, prio; + u32 highest_perf; + + ret = amd_pstate_get_highest_perf(cpudata->cpu, &highest_perf); + if (ret) + return; + + cpudata->hw_prefcore = true; + /* check if CPPC preferred core feature is enabled*/ + if (highest_perf < CPPC_MAX_PERF) + prio = (int)highest_perf; + else { + pr_debug("AMD CPPC preferred core is unsupported!\n"); + cpudata->hw_prefcore = false; + return; + } + + if (!amd_pstate_prefcore) + return; + + /* + * The priorities can be set regardless of whether or not + * sched_set_itmt_support(true) has been called and it is valid to + * update them at any time after it has been called. + */ + sched_set_itmt_core_prio(prio, cpudata->cpu); + + schedule_work(&sched_prefcore_work); +} + static int amd_pstate_cpu_init(struct cpufreq_policy *policy) { int min_freq, max_freq, nominal_freq, lowest_nonlinear_freq, ret; @@ -730,6 +825,8 @@ static int amd_pstate_cpu_init(struct cpufreq_policy *policy) cpudata->cpu = policy->cpu; + amd_pstate_init_prefcore(cpudata); + ret = amd_pstate_init_perf(cpudata); if (ret) goto free_cpudata1; @@ -880,6 +977,17 @@ static ssize_t show_amd_pstate_highest_perf(struct cpufreq_policy *policy, return sysfs_emit(buf, "%u\n", perf); } +static ssize_t show_amd_pstate_hw_prefcore(struct cpufreq_policy *policy, + char *buf) +{ + bool hw_prefcore; + struct amd_cpudata *cpudata = policy->driver_data; + + hw_prefcore = READ_ONCE(cpudata->hw_prefcore); + + return sysfs_emit(buf, "%s\n", str_enabled_disabled(hw_prefcore)); +} + static ssize_t show_energy_performance_available_preferences( struct cpufreq_policy *policy, char *buf) { @@ -1077,18 +1185,27 @@ static ssize_t status_store(struct device *a, struct device_attribute *b, return ret < 0 ? ret : count; } +static ssize_t prefcore_show(struct device *dev, + struct device_attribute *attr, char *buf) +{ + return sysfs_emit(buf, "%s\n", str_enabled_disabled(amd_pstate_prefcore)); +} + cpufreq_freq_attr_ro(amd_pstate_max_freq); cpufreq_freq_attr_ro(amd_pstate_lowest_nonlinear_freq); cpufreq_freq_attr_ro(amd_pstate_highest_perf); +cpufreq_freq_attr_ro(amd_pstate_hw_prefcore); cpufreq_freq_attr_rw(energy_performance_preference); cpufreq_freq_attr_ro(energy_performance_available_preferences); static DEVICE_ATTR_RW(status); +static DEVICE_ATTR_RO(prefcore); static struct freq_attr *amd_pstate_attr[] = { &amd_pstate_max_freq, &amd_pstate_lowest_nonlinear_freq, &amd_pstate_highest_perf, + &amd_pstate_hw_prefcore, NULL, }; @@ -1096,6 +1213,7 @@ static struct freq_attr *amd_pstate_epp_attr[] = { &amd_pstate_max_freq, &amd_pstate_lowest_nonlinear_freq, &amd_pstate_highest_perf, + &amd_pstate_hw_prefcore, &energy_performance_preference, &energy_performance_available_preferences, NULL, @@ -1103,6 +1221,7 @@ static struct freq_attr *amd_pstate_epp_attr[] = { static struct attribute *pstate_global_attributes[] = { &dev_attr_status.attr, + &dev_attr_prefcore.attr, NULL }; @@ -1154,6 +1273,8 @@ static int amd_pstate_epp_cpu_init(struct cpufreq_policy *policy) cpudata->cpu = policy->cpu; cpudata->epp_policy = 0; + amd_pstate_init_prefcore(cpudata); + ret = amd_pstate_init_perf(cpudata); if (ret) goto free_cpudata1; @@ -1577,7 +1698,17 @@ static int __init amd_pstate_param(char *str) return amd_pstate_set_driver(mode_idx); } + +static int __init amd_prefcore_param(char *str) +{ + if (!strcmp(str, "disable")) + amd_pstate_prefcore = false; + + return 0; +} + early_param("amd_pstate", amd_pstate_param); +early_param("amd_prefcore", amd_prefcore_param); MODULE_AUTHOR("Huang Rui "); MODULE_DESCRIPTION("AMD Processor P-state Frequency Driver"); diff --git a/drivers/cpufreq/intel_pstate.c b/drivers/cpufreq/intel_pstate.c index acee34c5d3de2..691972334c00c 100644 --- a/drivers/cpufreq/intel_pstate.c +++ b/drivers/cpufreq/intel_pstate.c @@ -1632,7 +1632,7 @@ static void intel_pstate_notify_work(struct work_struct *work) wrmsrl_on_cpu(cpudata->cpu, MSR_HWP_STATUS, 0); } -static DEFINE_SPINLOCK(hwp_notify_lock); +static DEFINE_RAW_SPINLOCK(hwp_notify_lock); static cpumask_t hwp_intr_enable_mask; void notify_hwp_interrupt(void) @@ -1649,7 +1649,7 @@ void notify_hwp_interrupt(void) if (!(value & 0x01)) return; - spin_lock_irqsave(&hwp_notify_lock, flags); + raw_spin_lock_irqsave(&hwp_notify_lock, flags); if (!cpumask_test_cpu(this_cpu, &hwp_intr_enable_mask)) goto ack_intr; @@ -1673,13 +1673,13 @@ void notify_hwp_interrupt(void) schedule_delayed_work(&cpudata->hwp_notify_work, msecs_to_jiffies(10)); - spin_unlock_irqrestore(&hwp_notify_lock, flags); + raw_spin_unlock_irqrestore(&hwp_notify_lock, flags); return; ack_intr: wrmsrl_safe(MSR_HWP_STATUS, 0); - spin_unlock_irqrestore(&hwp_notify_lock, flags); + raw_spin_unlock_irqrestore(&hwp_notify_lock, flags); } static void intel_pstate_disable_hwp_interrupt(struct cpudata *cpudata) @@ -1692,10 +1692,10 @@ static void intel_pstate_disable_hwp_interrupt(struct cpudata *cpudata) /* wrmsrl_on_cpu has to be outside spinlock as this can result in IPC */ wrmsrl_on_cpu(cpudata->cpu, MSR_HWP_INTERRUPT, 0x00); - spin_lock_irqsave(&hwp_notify_lock, flags); + raw_spin_lock_irqsave(&hwp_notify_lock, flags); if (cpumask_test_and_clear_cpu(cpudata->cpu, &hwp_intr_enable_mask)) cancel_delayed_work(&cpudata->hwp_notify_work); - spin_unlock_irqrestore(&hwp_notify_lock, flags); + raw_spin_unlock_irqrestore(&hwp_notify_lock, flags); } static void intel_pstate_enable_hwp_interrupt(struct cpudata *cpudata) @@ -1704,10 +1704,10 @@ static void intel_pstate_enable_hwp_interrupt(struct cpudata *cpudata) if (boot_cpu_has(X86_FEATURE_HWP_NOTIFY)) { unsigned long flags; - spin_lock_irqsave(&hwp_notify_lock, flags); + raw_spin_lock_irqsave(&hwp_notify_lock, flags); INIT_DELAYED_WORK(&cpudata->hwp_notify_work, intel_pstate_notify_work); cpumask_set_cpu(cpudata->cpu, &hwp_intr_enable_mask); - spin_unlock_irqrestore(&hwp_notify_lock, flags); + raw_spin_unlock_irqrestore(&hwp_notify_lock, flags); /* wrmsrl_on_cpu has to be outside spinlock as this can result in IPC */ wrmsrl_on_cpu(cpudata->cpu, MSR_HWP_INTERRUPT, 0x01); @@ -3136,10 +3136,10 @@ static void intel_pstate_driver_cleanup(void) if (intel_pstate_driver == &intel_pstate) intel_pstate_clear_update_util_hook(cpu); - spin_lock(&hwp_notify_lock); + raw_spin_lock(&hwp_notify_lock); kfree(all_cpu_data[cpu]); WRITE_ONCE(all_cpu_data[cpu], NULL); - spin_unlock(&hwp_notify_lock); + raw_spin_unlock(&hwp_notify_lock); } } cpus_read_unlock(); diff --git a/drivers/cpufreq/ti-cpufreq.c b/drivers/cpufreq/ti-cpufreq.c index d88ee87b1cd6f..cb5d1c8fefeb4 100644 --- a/drivers/cpufreq/ti-cpufreq.c +++ b/drivers/cpufreq/ti-cpufreq.c @@ -61,6 +61,9 @@ struct ti_cpufreq_soc_data { unsigned long efuse_shift; unsigned long rev_offset; bool multi_regulator; +/* Backward compatibility hack: Might have missing syscon */ +#define TI_QUIRK_SYSCON_MAY_BE_MISSING 0x1 + u8 quirks; }; struct ti_cpufreq_data { @@ -182,6 +185,7 @@ static struct ti_cpufreq_soc_data omap34xx_soc_data = { .efuse_mask = BIT(3), .rev_offset = OMAP3_CONTROL_IDCODE - OMAP3_SYSCON_BASE, .multi_regulator = false, + .quirks = TI_QUIRK_SYSCON_MAY_BE_MISSING, }; /* @@ -209,6 +213,7 @@ static struct ti_cpufreq_soc_data omap36xx_soc_data = { .efuse_mask = BIT(9), .rev_offset = OMAP3_CONTROL_IDCODE - OMAP3_SYSCON_BASE, .multi_regulator = true, + .quirks = TI_QUIRK_SYSCON_MAY_BE_MISSING, }; /* @@ -223,6 +228,7 @@ static struct ti_cpufreq_soc_data am3517_soc_data = { .efuse_mask = 0, .rev_offset = OMAP3_CONTROL_IDCODE - OMAP3_SYSCON_BASE, .multi_regulator = false, + .quirks = TI_QUIRK_SYSCON_MAY_BE_MISSING, }; static struct ti_cpufreq_soc_data am625_soc_data = { @@ -250,7 +256,7 @@ static int ti_cpufreq_get_efuse(struct ti_cpufreq_data *opp_data, ret = regmap_read(opp_data->syscon, opp_data->soc_data->efuse_offset, &efuse); - if (ret == -EIO) { + if (opp_data->soc_data->quirks & TI_QUIRK_SYSCON_MAY_BE_MISSING && ret == -EIO) { /* not a syscon register! */ void __iomem *regs = ioremap(OMAP3_SYSCON_BASE + opp_data->soc_data->efuse_offset, 4); @@ -291,7 +297,7 @@ static int ti_cpufreq_get_rev(struct ti_cpufreq_data *opp_data, ret = regmap_read(opp_data->syscon, opp_data->soc_data->rev_offset, &revision); - if (ret == -EIO) { + if (opp_data->soc_data->quirks & TI_QUIRK_SYSCON_MAY_BE_MISSING && ret == -EIO) { /* not a syscon register! */ void __iomem *regs = ioremap(OMAP3_SYSCON_BASE + opp_data->soc_data->rev_offset, 4); diff --git a/drivers/cpufreq/virtual-cpufreq.c b/drivers/cpufreq/virtual-cpufreq.c new file mode 100644 index 0000000000000..55afb2611f10f --- /dev/null +++ b/drivers/cpufreq/virtual-cpufreq.c @@ -0,0 +1,337 @@ +// SPDX-License-Identifier: GPL-2.0-only +/* + * Copyright (C) 2024 Google LLC + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +/* + * CPU0..CPUn + * +-------------+-------------------------------+--------+-------+ + * | Register | Description | Offset | Len | + * +-------------+-------------------------------+--------+-------+ + * | cur_perf | read this register to get | 0x0 | 0x4 | + * | | the current perf (integer val | | | + * | | representing perf relative to | | | + * | | max performance) | | | + * | | that vCPU is running at | | | + * +-------------+-------------------------------+--------+-------+ + * | set_perf | write to this register to set | 0x4 | 0x4 | + * | | perf value of the vCPU | | | + * +-------------+-------------------------------+--------+-------+ + * | perftbl_len | number of entries in perf | 0x8 | 0x4 | + * | | table. A single entry in the | | | + * | | perf table denotes no table | | | + * | | and the entry contains | | | + * | | the maximum perf value | | | + * | | that this vCPU supports. | | | + * | | The guest can request any | | | + * | | value between 1 and max perf | | | + * | | when perftbls are not used. | | | + * +---------------------------------------------+--------+-------+ + * | perftbl_sel | write to this register to | 0xc | 0x4 | + * | | select perf table entry to | | | + * | | read from | | | + * +---------------------------------------------+--------+-------+ + * | perftbl_rd | read this register to get | 0x10 | 0x4 | + * | | perf value of the selected | | | + * | | entry based on perftbl_sel | | | + * +---------------------------------------------+--------+-------+ + * | perf_domain | performance domain number | 0x14 | 0x4 | + * | | that this vCPU belongs to. | | | + * | | vCPUs sharing the same perf | | | + * | | domain number are part of the | | | + * | | same performance domain. | | | + * +-------------+-------------------------------+--------+-------+ + */ + +#define REG_CUR_PERF_STATE_OFFSET 0x0 +#define REG_SET_PERF_STATE_OFFSET 0x4 +#define REG_PERFTBL_LEN_OFFSET 0x8 +#define REG_PERFTBL_SEL_OFFSET 0xc +#define REG_PERFTBL_RD_OFFSET 0x10 +#define REG_PERF_DOMAIN_OFFSET 0x14 +#define PER_CPU_OFFSET 0x1000 + +#define PERFTBL_MAX_ENTRIES 64U + +static void __iomem *base; +static DEFINE_PER_CPU(u32, perftbl_num_entries); + +static void virt_scale_freq_tick(void) +{ + int cpu = smp_processor_id(); + u32 max_freq = (u32)cpufreq_get_hw_max_freq(cpu); + u64 cur_freq; + unsigned long scale; + + cur_freq = (u64)readl_relaxed(base + cpu * PER_CPU_OFFSET + + REG_CUR_PERF_STATE_OFFSET); + + cur_freq <<= SCHED_CAPACITY_SHIFT; + scale = (unsigned long)div_u64(cur_freq, max_freq); + scale = min(scale, SCHED_CAPACITY_SCALE); + + this_cpu_write(arch_freq_scale, scale); +} + +static struct scale_freq_data virt_sfd = { + .source = SCALE_FREQ_SOURCE_VIRT, + .set_freq_scale = virt_scale_freq_tick, +}; + +static unsigned int virt_cpufreq_set_perf(struct cpufreq_policy *policy, + unsigned int target_freq) +{ + writel_relaxed(target_freq, + base + policy->cpu * PER_CPU_OFFSET + REG_SET_PERF_STATE_OFFSET); + return 0; +} + +static unsigned int virt_cpufreq_fast_switch(struct cpufreq_policy *policy, + unsigned int target_freq) +{ + virt_cpufreq_set_perf(policy, target_freq); + return target_freq; +} + +static u32 virt_cpufreq_get_perftbl_entry(int cpu, u32 idx) +{ + writel_relaxed(idx, base + cpu * PER_CPU_OFFSET + + REG_PERFTBL_SEL_OFFSET); + return readl_relaxed(base + cpu * PER_CPU_OFFSET + + REG_PERFTBL_RD_OFFSET); +} + +static int virt_cpufreq_target(struct cpufreq_policy *policy, + unsigned int target_freq, + unsigned int relation) +{ + struct cpufreq_freqs freqs; + int ret = 0; + + freqs.old = policy->cur; + freqs.new = target_freq; + + cpufreq_freq_transition_begin(policy, &freqs); + ret = virt_cpufreq_set_perf(policy, target_freq); + cpufreq_freq_transition_end(policy, &freqs, ret != 0); + + return ret; +} + +static int virt_cpufreq_get_sharing_cpus(struct cpufreq_policy *policy) +{ + u32 cur_perf_domain, perf_domain; + struct device *cpu_dev; + int cpu; + + cur_perf_domain = readl_relaxed(base + policy->cpu * + PER_CPU_OFFSET + REG_PERF_DOMAIN_OFFSET); + + for_each_possible_cpu(cpu) { + cpu_dev = get_cpu_device(cpu); + if (!cpu_dev) + continue; + + perf_domain = readl_relaxed(base + cpu * + PER_CPU_OFFSET + REG_PERF_DOMAIN_OFFSET); + + if (perf_domain == cur_perf_domain) + cpumask_set_cpu(cpu, policy->cpus); + } + + return 0; +} + +static int virt_cpufreq_get_freq_info(struct cpufreq_policy *policy) +{ + struct cpufreq_frequency_table *table; + u32 num_perftbl_entries, idx; + + num_perftbl_entries = per_cpu(perftbl_num_entries, policy->cpu); + + if (num_perftbl_entries == 1) { + policy->cpuinfo.min_freq = 1; + policy->cpuinfo.max_freq = virt_cpufreq_get_perftbl_entry(policy->cpu, 0); + + policy->min = policy->cpuinfo.min_freq; + policy->max = policy->cpuinfo.max_freq; + + policy->cur = policy->max; + return 0; + } + + table = kcalloc(num_perftbl_entries + 1, sizeof(*table), GFP_KERNEL); + if (!table) + return -ENOMEM; + + for (idx = 0; idx < num_perftbl_entries; idx++) + table[idx].frequency = virt_cpufreq_get_perftbl_entry(policy->cpu, idx); + + table[idx].frequency = CPUFREQ_TABLE_END; + policy->freq_table = table; + + return 0; +} + +static int virt_cpufreq_cpu_init(struct cpufreq_policy *policy) +{ + struct device *cpu_dev; + int ret; + + cpu_dev = get_cpu_device(policy->cpu); + if (!cpu_dev) + return -ENODEV; + + ret = virt_cpufreq_get_freq_info(policy); + if (ret) { + dev_warn(cpu_dev, "failed to get cpufreq info\n"); + return ret; + } + + ret = virt_cpufreq_get_sharing_cpus(policy); + if (ret) { + dev_warn(cpu_dev, "failed to get sharing cpumask\n"); + return ret; + } + + /* + * To simplify and improve latency of handling frequency requests on + * the host side, this ensures that the vCPU thread triggering the MMIO + * abort is the same thread whose performance constraints (Ex. uclamp + * settings) need to be updated. This simplifies the VMM (Virtual + * Machine Manager) having to find the correct vCPU thread and/or + * facing permission issues when configuring other threads. + */ + policy->dvfs_possible_from_any_cpu = false; + policy->fast_switch_possible = true; + + /* + * Using the default SCALE_FREQ_SOURCE_CPUFREQ is insufficient since + * the actual physical CPU frequency may not match requested frequency + * from the vCPU thread due to frequency update latencies or other + * inputs to the physical CPU frequency selection. This additional FIE + * source allows for more accurate freq_scale updates and only takes + * effect if another FIE source such as AMUs have not been registered. + */ + topology_set_scale_freq_source(&virt_sfd, policy->cpus); + + return 0; +} + +static int virt_cpufreq_cpu_exit(struct cpufreq_policy *policy) +{ + topology_clear_scale_freq_source(SCALE_FREQ_SOURCE_VIRT, policy->related_cpus); + kfree(policy->freq_table); + + return 0; +} + +static int virt_cpufreq_online(struct cpufreq_policy *policy) +{ + /* Nothing to restore. */ + return 0; +} + +static int virt_cpufreq_offline(struct cpufreq_policy *policy) +{ + /* Dummy offline() to avoid exit() being called and freeing resources. */ + return 0; +} + +static int virt_cpufreq_verify_policy(struct cpufreq_policy_data *policy) +{ + if (policy->freq_table) + return cpufreq_frequency_table_verify(policy, policy->freq_table); + + cpufreq_verify_within_cpu_limits(policy); + return 0; +} + +static struct cpufreq_driver cpufreq_virt_driver = { + .name = "virt-cpufreq", + .init = virt_cpufreq_cpu_init, + .exit = virt_cpufreq_cpu_exit, + .online = virt_cpufreq_online, + .offline = virt_cpufreq_offline, + .verify = virt_cpufreq_verify_policy, + .target = virt_cpufreq_target, + .fast_switch = virt_cpufreq_fast_switch, + .attr = cpufreq_generic_attr, +}; + +static int virt_cpufreq_driver_probe(struct platform_device *pdev) +{ + u32 num_perftbl_entries; + int ret, cpu; + + base = devm_platform_ioremap_resource(pdev, 0); + if (IS_ERR(base)) + return PTR_ERR(base); + + for_each_possible_cpu(cpu) { + num_perftbl_entries = readl_relaxed(base + cpu * PER_CPU_OFFSET + + REG_PERFTBL_LEN_OFFSET); + + if (!num_perftbl_entries || num_perftbl_entries > PERFTBL_MAX_ENTRIES) + return -ENODEV; + + per_cpu(perftbl_num_entries, cpu) = num_perftbl_entries; + } + + ret = cpufreq_register_driver(&cpufreq_virt_driver); + if (ret) { + dev_err(&pdev->dev, "Virtual CPUFreq driver failed to register: %d\n", ret); + return ret; + } + + dev_dbg(&pdev->dev, "Virtual CPUFreq driver initialized\n"); + return 0; +} + +static int virt_cpufreq_driver_remove(struct platform_device *pdev) +{ + cpufreq_unregister_driver(&cpufreq_virt_driver); + + return 0; +} + +static const struct of_device_id virt_cpufreq_match[] = { + { .compatible = "qemu,virtual-cpufreq", .data = NULL}, + {} +}; +MODULE_DEVICE_TABLE(of, virt_cpufreq_match); + +static struct platform_driver virt_cpufreq_driver = { + .probe = virt_cpufreq_driver_probe, + .remove = virt_cpufreq_driver_remove, + .driver = { + .name = "virt-cpufreq", + .of_match_table = virt_cpufreq_match, + }, +}; + +static int __init virt_cpufreq_init(void) +{ + return platform_driver_register(&virt_cpufreq_driver); +} +postcore_initcall(virt_cpufreq_init); + +static void __exit virt_cpufreq_exit(void) +{ + platform_driver_unregister(&virt_cpufreq_driver); +} +module_exit(virt_cpufreq_exit); + +MODULE_DESCRIPTION("Virtual cpufreq driver"); +MODULE_LICENSE("GPL"); diff --git a/drivers/cpuidle/cpuidle-riscv-sbi.c b/drivers/cpuidle/cpuidle-riscv-sbi.c index e8094fc92491e..c0fe92409175a 100644 --- a/drivers/cpuidle/cpuidle-riscv-sbi.c +++ b/drivers/cpuidle/cpuidle-riscv-sbi.c @@ -8,6 +8,7 @@ #define pr_fmt(fmt) "cpuidle-riscv-sbi: " fmt +#include #include #include #include @@ -267,19 +268,16 @@ static int sbi_cpuidle_dt_init_states(struct device *dev, { struct sbi_cpuidle_data *data = per_cpu_ptr(&sbi_cpuidle_data, cpu); struct device_node *state_node; - struct device_node *cpu_node; u32 *states; int i, ret; - cpu_node = of_cpu_device_node_get(cpu); + struct device_node *cpu_node __free(device_node) = of_cpu_device_node_get(cpu); if (!cpu_node) return -ENODEV; states = devm_kcalloc(dev, state_count, sizeof(*states), GFP_KERNEL); - if (!states) { - ret = -ENOMEM; - goto fail; - } + if (!states) + return -ENOMEM; /* Parse SBI specific details from state DT nodes */ for (i = 1; i < state_count; i++) { @@ -295,10 +293,8 @@ static int sbi_cpuidle_dt_init_states(struct device *dev, pr_debug("sbi-state %#x index %d\n", states[i], i); } - if (i != state_count) { - ret = -ENODEV; - goto fail; - } + if (i != state_count) + return -ENODEV; /* Initialize optional data, used for the hierarchical topology. */ ret = sbi_dt_cpu_init_topology(drv, data, state_count, cpu); @@ -308,10 +304,7 @@ static int sbi_cpuidle_dt_init_states(struct device *dev, /* Store states in the per-cpu struct. */ data->states = states; -fail: - of_node_put(cpu_node); - - return ret; + return 0; } static void sbi_cpuidle_deinit_cpu(int cpu) diff --git a/drivers/crypto/caam/caamhash.c b/drivers/crypto/caam/caamhash.c index 290c8500c247f..65785dc5b73b2 100644 --- a/drivers/crypto/caam/caamhash.c +++ b/drivers/crypto/caam/caamhash.c @@ -708,6 +708,7 @@ static struct ahash_edesc *ahash_edesc_alloc(struct ahash_request *req, GFP_KERNEL : GFP_ATOMIC; struct ahash_edesc *edesc; + sg_num = pad_sg_nents(sg_num); edesc = kzalloc(struct_size(edesc, sec4_sg, sg_num), flags); if (!edesc) return NULL; diff --git a/drivers/crypto/ccp/sev-dev.c b/drivers/crypto/ccp/sev-dev.c index 17fb01853dbf4..07e6f782b6225 100644 --- a/drivers/crypto/ccp/sev-dev.c +++ b/drivers/crypto/ccp/sev-dev.c @@ -1367,6 +1367,8 @@ void sev_pci_init(void) return; err: + sev_dev_destroy(psp_master); + psp_master->sev_data = NULL; } diff --git a/drivers/crypto/hisilicon/hpre/hpre_main.c b/drivers/crypto/hisilicon/hpre/hpre_main.c index b97ce0ee71406..3463f5ee83c0d 100644 --- a/drivers/crypto/hisilicon/hpre/hpre_main.c +++ b/drivers/crypto/hisilicon/hpre/hpre_main.c @@ -13,9 +13,7 @@ #include #include "hpre.h" -#define HPRE_QM_ABNML_INT_MASK 0x100004 #define HPRE_CTRL_CNT_CLR_CE_BIT BIT(0) -#define HPRE_COMM_CNT_CLR_CE 0x0 #define HPRE_CTRL_CNT_CLR_CE 0x301000 #define HPRE_FSM_MAX_CNT 0x301008 #define HPRE_VFG_AXQOS 0x30100c @@ -42,7 +40,6 @@ #define HPRE_HAC_INT_SET 0x301500 #define HPRE_RNG_TIMEOUT_NUM 0x301A34 #define HPRE_CORE_INT_ENABLE 0 -#define HPRE_CORE_INT_DISABLE GENMASK(21, 0) #define HPRE_RDCHN_INI_ST 0x301a00 #define HPRE_CLSTR_BASE 0x302000 #define HPRE_CORE_EN_OFFSET 0x04 @@ -66,7 +63,6 @@ #define HPRE_CLSTR_ADDR_INTRVL 0x1000 #define HPRE_CLUSTER_INQURY 0x100 #define HPRE_CLSTR_ADDR_INQRY_RSLT 0x104 -#define HPRE_TIMEOUT_ABNML_BIT 6 #define HPRE_PASID_EN_BIT 9 #define HPRE_REG_RD_INTVRL_US 10 #define HPRE_REG_RD_TMOUT_US 1000 @@ -202,9 +198,9 @@ static const struct hisi_qm_cap_info hpre_basic_info[] = { {HPRE_QM_RESET_MASK_CAP, 0x3128, 0, GENMASK(31, 0), 0x0, 0xC37, 0x6C37}, {HPRE_QM_OOO_SHUTDOWN_MASK_CAP, 0x3128, 0, GENMASK(31, 0), 0x0, 0x4, 0x6C37}, {HPRE_QM_CE_MASK_CAP, 0x312C, 0, GENMASK(31, 0), 0x0, 0x8, 0x8}, - {HPRE_NFE_MASK_CAP, 0x3130, 0, GENMASK(31, 0), 0x0, 0x3FFFFE, 0x1FFFFFE}, - {HPRE_RESET_MASK_CAP, 0x3134, 0, GENMASK(31, 0), 0x0, 0x3FFFFE, 0xBFFFFE}, - {HPRE_OOO_SHUTDOWN_MASK_CAP, 0x3134, 0, GENMASK(31, 0), 0x0, 0x22, 0xBFFFFE}, + {HPRE_NFE_MASK_CAP, 0x3130, 0, GENMASK(31, 0), 0x0, 0x3FFFFE, 0x1FFFC3E}, + {HPRE_RESET_MASK_CAP, 0x3134, 0, GENMASK(31, 0), 0x0, 0x3FFFFE, 0xBFFC3E}, + {HPRE_OOO_SHUTDOWN_MASK_CAP, 0x3134, 0, GENMASK(31, 0), 0x0, 0x22, 0xBFFC3E}, {HPRE_CE_MASK_CAP, 0x3138, 0, GENMASK(31, 0), 0x0, 0x1, 0x1}, {HPRE_CLUSTER_NUM_CAP, 0x313c, 20, GENMASK(3, 0), 0x0, 0x4, 0x1}, {HPRE_CORE_TYPE_NUM_CAP, 0x313c, 16, GENMASK(3, 0), 0x0, 0x2, 0x2}, @@ -357,6 +353,8 @@ static struct dfx_diff_registers hpre_diff_regs[] = { }, }; +static const struct hisi_qm_err_ini hpre_err_ini; + bool hpre_check_alg_support(struct hisi_qm *qm, u32 alg) { u32 cap_val; @@ -653,11 +651,6 @@ static int hpre_set_user_domain_and_cache(struct hisi_qm *qm) writel(HPRE_QM_USR_CFG_MASK, qm->io_base + QM_AWUSER_M_CFG_ENABLE); writel_relaxed(HPRE_QM_AXI_CFG_MASK, qm->io_base + QM_AXI_M_CFG); - /* HPRE need more time, we close this interrupt */ - val = readl_relaxed(qm->io_base + HPRE_QM_ABNML_INT_MASK); - val |= BIT(HPRE_TIMEOUT_ABNML_BIT); - writel_relaxed(val, qm->io_base + HPRE_QM_ABNML_INT_MASK); - if (qm->ver >= QM_HW_V3) writel(HPRE_RSA_ENB | HPRE_ECC_ENB, qm->io_base + HPRE_TYPES_ENB); @@ -666,9 +659,7 @@ static int hpre_set_user_domain_and_cache(struct hisi_qm *qm) writel(HPRE_QM_VFG_AX_MASK, qm->io_base + HPRE_VFG_AXCACHE); writel(0x0, qm->io_base + HPRE_BD_ENDIAN); - writel(0x0, qm->io_base + HPRE_INT_MASK); writel(0x0, qm->io_base + HPRE_POISON_BYPASS); - writel(0x0, qm->io_base + HPRE_COMM_CNT_CLR_CE); writel(0x0, qm->io_base + HPRE_ECC_BYPASS); writel(HPRE_BD_USR_MASK, qm->io_base + HPRE_BD_ARUSR_CFG); @@ -758,7 +749,7 @@ static void hpre_hw_error_disable(struct hisi_qm *qm) static void hpre_hw_error_enable(struct hisi_qm *qm) { - u32 ce, nfe; + u32 ce, nfe, err_en; ce = hisi_qm_get_hw_info(qm, hpre_basic_info, HPRE_CE_MASK_CAP, qm->cap_ver); nfe = hisi_qm_get_hw_info(qm, hpre_basic_info, HPRE_NFE_MASK_CAP, qm->cap_ver); @@ -775,7 +766,8 @@ static void hpre_hw_error_enable(struct hisi_qm *qm) hpre_master_ooo_ctrl(qm, true); /* enable hpre hw error interrupts */ - writel(HPRE_CORE_INT_ENABLE, qm->io_base + HPRE_INT_MASK); + err_en = ce | nfe | HPRE_HAC_RAS_FE_ENABLE; + writel(~err_en, qm->io_base + HPRE_INT_MASK); } static inline struct hisi_qm *hpre_file_to_qm(struct hpre_debugfs_file *file) @@ -1161,6 +1153,7 @@ static int hpre_qm_init(struct hisi_qm *qm, struct pci_dev *pdev) qm->qp_num = pf_q_num; qm->debug.curr_qm_qp_num = pf_q_num; qm->qm_list = &hpre_devices; + qm->err_ini = &hpre_err_ini; if (pf_q_num_flag) set_bit(QM_MODULE_PARAM, &qm->misc_ctl); } @@ -1350,8 +1343,6 @@ static int hpre_pf_probe_init(struct hpre *hpre) hpre_open_sva_prefetch(qm); - qm->err_ini = &hpre_err_ini; - qm->err_ini->err_info_init(qm); hisi_qm_dev_err_init(qm); ret = hpre_show_last_regs_init(qm); if (ret) @@ -1380,6 +1371,18 @@ static int hpre_probe_init(struct hpre *hpre) return 0; } +static void hpre_probe_uninit(struct hisi_qm *qm) +{ + if (qm->fun_type == QM_HW_VF) + return; + + hpre_cnt_regs_clear(qm); + qm->debug.curr_qm_qp_num = 0; + hpre_show_last_regs_uninit(qm); + hpre_close_sva_prefetch(qm); + hisi_qm_dev_err_uninit(qm); +} + static int hpre_probe(struct pci_dev *pdev, const struct pci_device_id *id) { struct hisi_qm *qm; @@ -1405,7 +1408,7 @@ static int hpre_probe(struct pci_dev *pdev, const struct pci_device_id *id) ret = hisi_qm_start(qm); if (ret) - goto err_with_err_init; + goto err_with_probe_init; ret = hpre_debugfs_init(qm); if (ret) @@ -1442,9 +1445,8 @@ static int hpre_probe(struct pci_dev *pdev, const struct pci_device_id *id) hpre_debugfs_exit(qm); hisi_qm_stop(qm, QM_NORMAL); -err_with_err_init: - hpre_show_last_regs_uninit(qm); - hisi_qm_dev_err_uninit(qm); +err_with_probe_init: + hpre_probe_uninit(qm); err_with_qm_init: hisi_qm_uninit(qm); @@ -1465,13 +1467,7 @@ static void hpre_remove(struct pci_dev *pdev) hpre_debugfs_exit(qm); hisi_qm_stop(qm, QM_NORMAL); - if (qm->fun_type == QM_HW_PF) { - hpre_cnt_regs_clear(qm); - qm->debug.curr_qm_qp_num = 0; - hpre_show_last_regs_uninit(qm); - hisi_qm_dev_err_uninit(qm); - } - + hpre_probe_uninit(qm); hisi_qm_uninit(qm); } diff --git a/drivers/crypto/hisilicon/qm.c b/drivers/crypto/hisilicon/qm.c index 562df5c77c636..1b00edbbfe26a 100644 --- a/drivers/crypto/hisilicon/qm.c +++ b/drivers/crypto/hisilicon/qm.c @@ -455,6 +455,7 @@ static struct qm_typical_qos_table shaper_cbs_s[] = { }; static void qm_irqs_unregister(struct hisi_qm *qm); +static int qm_reset_device(struct hisi_qm *qm); static bool qm_avail_state(struct hisi_qm *qm, enum qm_state new) { @@ -4105,6 +4106,28 @@ static int qm_set_vf_mse(struct hisi_qm *qm, bool set) return -ETIMEDOUT; } +static void qm_dev_ecc_mbit_handle(struct hisi_qm *qm) +{ + u32 nfe_enb = 0; + + /* Kunpeng930 hardware automatically close master ooo when NFE occurs */ + if (qm->ver >= QM_HW_V3) + return; + + if (!qm->err_status.is_dev_ecc_mbit && + qm->err_status.is_qm_ecc_mbit && + qm->err_ini->close_axi_master_ooo) { + qm->err_ini->close_axi_master_ooo(qm); + } else if (qm->err_status.is_dev_ecc_mbit && + !qm->err_status.is_qm_ecc_mbit && + !qm->err_ini->close_axi_master_ooo) { + nfe_enb = readl(qm->io_base + QM_RAS_NFE_ENABLE); + writel(nfe_enb & QM_RAS_NFE_MBIT_DISABLE, + qm->io_base + QM_RAS_NFE_ENABLE); + writel(QM_ECC_MBIT, qm->io_base + QM_ABNORMAL_INT_SET); + } +} + static int qm_vf_reset_prepare(struct hisi_qm *qm, enum qm_stop_reason stop_reason) { @@ -4169,6 +4192,8 @@ static int qm_controller_reset_prepare(struct hisi_qm *qm) return ret; } + qm_dev_ecc_mbit_handle(qm); + /* PF obtains the information of VF by querying the register. */ qm_cmd_uninit(qm); @@ -4199,33 +4224,26 @@ static int qm_controller_reset_prepare(struct hisi_qm *qm) return 0; } -static void qm_dev_ecc_mbit_handle(struct hisi_qm *qm) +static int qm_master_ooo_check(struct hisi_qm *qm) { - u32 nfe_enb = 0; + u32 val; + int ret; - /* Kunpeng930 hardware automatically close master ooo when NFE occurs */ - if (qm->ver >= QM_HW_V3) - return; + /* Check the ooo register of the device before resetting the device. */ + writel(ACC_MASTER_GLOBAL_CTRL_SHUTDOWN, qm->io_base + ACC_MASTER_GLOBAL_CTRL); + ret = readl_relaxed_poll_timeout(qm->io_base + ACC_MASTER_TRANS_RETURN, + val, (val == ACC_MASTER_TRANS_RETURN_RW), + POLL_PERIOD, POLL_TIMEOUT); + if (ret) + pci_warn(qm->pdev, "Bus lock! Please reset system.\n"); - if (!qm->err_status.is_dev_ecc_mbit && - qm->err_status.is_qm_ecc_mbit && - qm->err_ini->close_axi_master_ooo) { - qm->err_ini->close_axi_master_ooo(qm); - } else if (qm->err_status.is_dev_ecc_mbit && - !qm->err_status.is_qm_ecc_mbit && - !qm->err_ini->close_axi_master_ooo) { - nfe_enb = readl(qm->io_base + QM_RAS_NFE_ENABLE); - writel(nfe_enb & QM_RAS_NFE_MBIT_DISABLE, - qm->io_base + QM_RAS_NFE_ENABLE); - writel(QM_ECC_MBIT, qm->io_base + QM_ABNORMAL_INT_SET); - } + return ret; } -static int qm_soft_reset(struct hisi_qm *qm) +static int qm_soft_reset_prepare(struct hisi_qm *qm) { struct pci_dev *pdev = qm->pdev; int ret; - u32 val; /* Ensure all doorbells and mailboxes received by QM */ ret = qm_check_req_recv(qm); @@ -4246,30 +4264,23 @@ static int qm_soft_reset(struct hisi_qm *qm) return ret; } - qm_dev_ecc_mbit_handle(qm); - - /* OOO register set and check */ - writel(ACC_MASTER_GLOBAL_CTRL_SHUTDOWN, - qm->io_base + ACC_MASTER_GLOBAL_CTRL); - - /* If bus lock, reset chip */ - ret = readl_relaxed_poll_timeout(qm->io_base + ACC_MASTER_TRANS_RETURN, - val, - (val == ACC_MASTER_TRANS_RETURN_RW), - POLL_PERIOD, POLL_TIMEOUT); - if (ret) { - pci_emerg(pdev, "Bus lock! Please reset system.\n"); + ret = qm_master_ooo_check(qm); + if (ret) return ret; - } if (qm->err_ini->close_sva_prefetch) qm->err_ini->close_sva_prefetch(qm); ret = qm_set_pf_mse(qm, false); - if (ret) { + if (ret) pci_err(pdev, "Fails to disable pf MSE bit.\n"); - return ret; - } + + return ret; +} + +static int qm_reset_device(struct hisi_qm *qm) +{ + struct pci_dev *pdev = qm->pdev; /* The reset related sub-control registers are not in PCI BAR */ if (ACPI_HANDLE(&pdev->dev)) { @@ -4288,12 +4299,23 @@ static int qm_soft_reset(struct hisi_qm *qm) pci_err(pdev, "Reset step %llu failed!\n", value); return -EIO; } - } else { - pci_err(pdev, "No reset method!\n"); - return -EINVAL; + + return 0; } - return 0; + pci_err(pdev, "No reset method!\n"); + return -EINVAL; +} + +static int qm_soft_reset(struct hisi_qm *qm) +{ + int ret; + + ret = qm_soft_reset_prepare(qm); + if (ret) + return ret; + + return qm_reset_device(qm); } static int qm_vf_reset_done(struct hisi_qm *qm) @@ -5261,6 +5283,35 @@ static int qm_get_pci_res(struct hisi_qm *qm) return ret; } +static int qm_clear_device(struct hisi_qm *qm) +{ + acpi_handle handle = ACPI_HANDLE(&qm->pdev->dev); + int ret; + + if (qm->fun_type == QM_HW_VF) + return 0; + + /* Device does not support reset, return */ + if (!qm->err_ini->err_info_init) + return 0; + qm->err_ini->err_info_init(qm); + + if (!handle) + return 0; + + /* No reset method, return */ + if (!acpi_has_method(handle, qm->err_info.acpi_rst)) + return 0; + + ret = qm_master_ooo_check(qm); + if (ret) { + writel(0x0, qm->io_base + ACC_MASTER_GLOBAL_CTRL); + return ret; + } + + return qm_reset_device(qm); +} + static int hisi_qm_pci_init(struct hisi_qm *qm) { struct pci_dev *pdev = qm->pdev; @@ -5290,8 +5341,14 @@ static int hisi_qm_pci_init(struct hisi_qm *qm) goto err_get_pci_res; } + ret = qm_clear_device(qm); + if (ret) + goto err_free_vectors; + return 0; +err_free_vectors: + pci_free_irq_vectors(pdev); err_get_pci_res: qm_put_pci_res(qm); err_disable_pcidev: @@ -5557,7 +5614,6 @@ static int qm_prepare_for_suspend(struct hisi_qm *qm) { struct pci_dev *pdev = qm->pdev; int ret; - u32 val; ret = qm->ops->set_msi(qm, false); if (ret) { @@ -5565,18 +5621,9 @@ static int qm_prepare_for_suspend(struct hisi_qm *qm) return ret; } - /* shutdown OOO register */ - writel(ACC_MASTER_GLOBAL_CTRL_SHUTDOWN, - qm->io_base + ACC_MASTER_GLOBAL_CTRL); - - ret = readl_relaxed_poll_timeout(qm->io_base + ACC_MASTER_TRANS_RETURN, - val, - (val == ACC_MASTER_TRANS_RETURN_RW), - POLL_PERIOD, POLL_TIMEOUT); - if (ret) { - pci_emerg(pdev, "Bus lock! Please reset system.\n"); + ret = qm_master_ooo_check(qm); + if (ret) return ret; - } ret = qm_set_pf_mse(qm, false); if (ret) diff --git a/drivers/crypto/hisilicon/sec2/sec_main.c b/drivers/crypto/hisilicon/sec2/sec_main.c index bf02a6b2eed41..cf7b6a37e7df7 100644 --- a/drivers/crypto/hisilicon/sec2/sec_main.c +++ b/drivers/crypto/hisilicon/sec2/sec_main.c @@ -1061,9 +1061,6 @@ static int sec_pf_probe_init(struct sec_dev *sec) struct hisi_qm *qm = &sec->qm; int ret; - qm->err_ini = &sec_err_ini; - qm->err_ini->err_info_init(qm); - ret = sec_set_user_domain_and_cache(qm); if (ret) return ret; @@ -1118,6 +1115,7 @@ static int sec_qm_init(struct hisi_qm *qm, struct pci_dev *pdev) qm->qp_num = pf_q_num; qm->debug.curr_qm_qp_num = pf_q_num; qm->qm_list = &sec_devices; + qm->err_ini = &sec_err_ini; if (pf_q_num_flag) set_bit(QM_MODULE_PARAM, &qm->misc_ctl); } else if (qm->fun_type == QM_HW_VF && qm->ver == QM_HW_V1) { @@ -1182,6 +1180,12 @@ static int sec_probe_init(struct sec_dev *sec) static void sec_probe_uninit(struct hisi_qm *qm) { + if (qm->fun_type == QM_HW_VF) + return; + + sec_debug_regs_clear(qm); + sec_show_last_regs_uninit(qm); + sec_close_sva_prefetch(qm); hisi_qm_dev_err_uninit(qm); } @@ -1274,7 +1278,6 @@ static int sec_probe(struct pci_dev *pdev, const struct pci_device_id *id) sec_debugfs_exit(qm); hisi_qm_stop(qm, QM_NORMAL); err_probe_uninit: - sec_show_last_regs_uninit(qm); sec_probe_uninit(qm); err_qm_uninit: sec_qm_uninit(qm); @@ -1296,11 +1299,6 @@ static void sec_remove(struct pci_dev *pdev) sec_debugfs_exit(qm); (void)hisi_qm_stop(qm, QM_NORMAL); - - if (qm->fun_type == QM_HW_PF) - sec_debug_regs_clear(qm); - sec_show_last_regs_uninit(qm); - sec_probe_uninit(qm); sec_qm_uninit(qm); diff --git a/drivers/crypto/hisilicon/zip/zip_main.c b/drivers/crypto/hisilicon/zip/zip_main.c index cd7ecb2180bf1..9d47b3675da7d 100644 --- a/drivers/crypto/hisilicon/zip/zip_main.c +++ b/drivers/crypto/hisilicon/zip/zip_main.c @@ -1150,8 +1150,6 @@ static int hisi_zip_pf_probe_init(struct hisi_zip *hisi_zip) hisi_zip->ctrl = ctrl; ctrl->hisi_zip = hisi_zip; - qm->err_ini = &hisi_zip_err_ini; - qm->err_ini->err_info_init(qm); ret = hisi_zip_set_user_domain_and_cache(qm); if (ret) @@ -1212,6 +1210,7 @@ static int hisi_zip_qm_init(struct hisi_qm *qm, struct pci_dev *pdev) qm->qp_num = pf_q_num; qm->debug.curr_qm_qp_num = pf_q_num; qm->qm_list = &zip_devices; + qm->err_ini = &hisi_zip_err_ini; if (pf_q_num_flag) set_bit(QM_MODULE_PARAM, &qm->misc_ctl); } else if (qm->fun_type == QM_HW_VF && qm->ver == QM_HW_V1) { @@ -1278,6 +1277,16 @@ static int hisi_zip_probe_init(struct hisi_zip *hisi_zip) return 0; } +static void hisi_zip_probe_uninit(struct hisi_qm *qm) +{ + if (qm->fun_type == QM_HW_VF) + return; + + hisi_zip_show_last_regs_uninit(qm); + hisi_zip_close_sva_prefetch(qm); + hisi_qm_dev_err_uninit(qm); +} + static int hisi_zip_probe(struct pci_dev *pdev, const struct pci_device_id *id) { struct hisi_zip *hisi_zip; @@ -1304,7 +1313,7 @@ static int hisi_zip_probe(struct pci_dev *pdev, const struct pci_device_id *id) ret = hisi_qm_start(qm); if (ret) - goto err_dev_err_uninit; + goto err_probe_uninit; ret = hisi_zip_debugfs_init(qm); if (ret) @@ -1341,9 +1350,8 @@ static int hisi_zip_probe(struct pci_dev *pdev, const struct pci_device_id *id) hisi_zip_debugfs_exit(qm); hisi_qm_stop(qm, QM_NORMAL); -err_dev_err_uninit: - hisi_zip_show_last_regs_uninit(qm); - hisi_qm_dev_err_uninit(qm); +err_probe_uninit: + hisi_zip_probe_uninit(qm); err_qm_uninit: hisi_zip_qm_uninit(qm); @@ -1364,8 +1372,7 @@ static void hisi_zip_remove(struct pci_dev *pdev) hisi_zip_debugfs_exit(qm); hisi_qm_stop(qm, QM_NORMAL); - hisi_zip_show_last_regs_uninit(qm); - hisi_qm_dev_err_uninit(qm); + hisi_zip_probe_uninit(qm); hisi_zip_qm_uninit(qm); } diff --git a/drivers/crypto/intel/qat/qat_common/adf_gen2_pfvf.c b/drivers/crypto/intel/qat/qat_common/adf_gen2_pfvf.c index 70ef119639381..43af81fcab868 100644 --- a/drivers/crypto/intel/qat/qat_common/adf_gen2_pfvf.c +++ b/drivers/crypto/intel/qat/qat_common/adf_gen2_pfvf.c @@ -100,7 +100,9 @@ static u32 adf_gen2_disable_pending_vf2pf_interrupts(void __iomem *pmisc_addr) errmsk3 |= ADF_GEN2_ERR_MSK_VF2PF(ADF_GEN2_VF_MSK); ADF_CSR_WR(pmisc_addr, ADF_GEN2_ERRMSK3, errmsk3); - errmsk3 &= ADF_GEN2_ERR_MSK_VF2PF(sources | disabled); + /* Update only section of errmsk3 related to VF2PF */ + errmsk3 &= ~ADF_GEN2_ERR_MSK_VF2PF(ADF_GEN2_VF_MSK); + errmsk3 |= ADF_GEN2_ERR_MSK_VF2PF(sources | disabled); ADF_CSR_WR(pmisc_addr, ADF_GEN2_ERRMSK3, errmsk3); /* Return the sources of the (new) interrupt(s) */ diff --git a/drivers/crypto/intel/qat/qat_dh895xcc/adf_dh895xcc_hw_data.c b/drivers/crypto/intel/qat/qat_dh895xcc/adf_dh895xcc_hw_data.c index 09551f9491265..0e40897cc983a 100644 --- a/drivers/crypto/intel/qat/qat_dh895xcc/adf_dh895xcc_hw_data.c +++ b/drivers/crypto/intel/qat/qat_dh895xcc/adf_dh895xcc_hw_data.c @@ -191,8 +191,12 @@ static u32 disable_pending_vf2pf_interrupts(void __iomem *pmisc_addr) ADF_CSR_WR(pmisc_addr, ADF_GEN2_ERRMSK3, errmsk3); ADF_CSR_WR(pmisc_addr, ADF_GEN2_ERRMSK5, errmsk5); - errmsk3 &= ADF_DH895XCC_ERR_MSK_VF2PF_L(sources | disabled); - errmsk5 &= ADF_DH895XCC_ERR_MSK_VF2PF_U(sources | disabled); + /* Update only section of errmsk3 and errmsk5 related to VF2PF */ + errmsk3 &= ~ADF_DH895XCC_ERR_MSK_VF2PF_L(ADF_DH895XCC_VF_MSK); + errmsk5 &= ~ADF_DH895XCC_ERR_MSK_VF2PF_U(ADF_DH895XCC_VF_MSK); + + errmsk3 |= ADF_DH895XCC_ERR_MSK_VF2PF_L(sources | disabled); + errmsk5 |= ADF_DH895XCC_ERR_MSK_VF2PF_U(sources | disabled); ADF_CSR_WR(pmisc_addr, ADF_GEN2_ERRMSK3, errmsk3); ADF_CSR_WR(pmisc_addr, ADF_GEN2_ERRMSK5, errmsk5); diff --git a/drivers/crypto/marvell/Kconfig b/drivers/crypto/marvell/Kconfig index a48591af12d02..78217577aa540 100644 --- a/drivers/crypto/marvell/Kconfig +++ b/drivers/crypto/marvell/Kconfig @@ -28,6 +28,7 @@ config CRYPTO_DEV_OCTEONTX_CPT select CRYPTO_SKCIPHER select CRYPTO_HASH select CRYPTO_AEAD + select CRYPTO_AUTHENC select CRYPTO_DEV_MARVELL help This driver allows you to utilize the Marvell Cryptographic @@ -47,6 +48,7 @@ config CRYPTO_DEV_OCTEONTX2_CPT select CRYPTO_SKCIPHER select CRYPTO_HASH select CRYPTO_AEAD + select CRYPTO_AUTHENC select NET_DEVLINK help This driver allows you to utilize the Marvell Cryptographic diff --git a/drivers/crypto/marvell/octeontx/otx_cptvf_algs.c b/drivers/crypto/marvell/octeontx/otx_cptvf_algs.c index 1c2c870e887aa..f64b72398eced 100644 --- a/drivers/crypto/marvell/octeontx/otx_cptvf_algs.c +++ b/drivers/crypto/marvell/octeontx/otx_cptvf_algs.c @@ -17,7 +17,6 @@ #include #include #include -#include #include #include #include "otx_cptvf.h" @@ -66,6 +65,8 @@ static struct cpt_device_table ae_devices = { .count = ATOMIC_INIT(0) }; +static struct otx_cpt_sdesc *alloc_sdesc(struct crypto_shash *alg); + static inline int get_se_device(struct pci_dev **pdev, int *cpu_num) { int count, ret = 0; @@ -515,44 +516,61 @@ static int cpt_aead_init(struct crypto_aead *tfm, u8 cipher_type, u8 mac_type) ctx->cipher_type = cipher_type; ctx->mac_type = mac_type; + switch (ctx->mac_type) { + case OTX_CPT_SHA1: + ctx->hashalg = crypto_alloc_shash("sha1", 0, 0); + break; + + case OTX_CPT_SHA256: + ctx->hashalg = crypto_alloc_shash("sha256", 0, 0); + break; + + case OTX_CPT_SHA384: + ctx->hashalg = crypto_alloc_shash("sha384", 0, 0); + break; + + case OTX_CPT_SHA512: + ctx->hashalg = crypto_alloc_shash("sha512", 0, 0); + break; + } + + if (IS_ERR(ctx->hashalg)) + return PTR_ERR(ctx->hashalg); + + crypto_aead_set_reqsize_dma(tfm, sizeof(struct otx_cpt_req_ctx)); + + if (!ctx->hashalg) + return 0; + /* * When selected cipher is NULL we use HMAC opcode instead of * FLEXICRYPTO opcode therefore we don't need to use HASH algorithms * for calculating ipad and opad */ if (ctx->cipher_type != OTX_CPT_CIPHER_NULL) { - switch (ctx->mac_type) { - case OTX_CPT_SHA1: - ctx->hashalg = crypto_alloc_shash("sha1", 0, - CRYPTO_ALG_ASYNC); - if (IS_ERR(ctx->hashalg)) - return PTR_ERR(ctx->hashalg); - break; - - case OTX_CPT_SHA256: - ctx->hashalg = crypto_alloc_shash("sha256", 0, - CRYPTO_ALG_ASYNC); - if (IS_ERR(ctx->hashalg)) - return PTR_ERR(ctx->hashalg); - break; + int ss = crypto_shash_statesize(ctx->hashalg); - case OTX_CPT_SHA384: - ctx->hashalg = crypto_alloc_shash("sha384", 0, - CRYPTO_ALG_ASYNC); - if (IS_ERR(ctx->hashalg)) - return PTR_ERR(ctx->hashalg); - break; + ctx->ipad = kzalloc(ss, GFP_KERNEL); + if (!ctx->ipad) { + crypto_free_shash(ctx->hashalg); + return -ENOMEM; + } - case OTX_CPT_SHA512: - ctx->hashalg = crypto_alloc_shash("sha512", 0, - CRYPTO_ALG_ASYNC); - if (IS_ERR(ctx->hashalg)) - return PTR_ERR(ctx->hashalg); - break; + ctx->opad = kzalloc(ss, GFP_KERNEL); + if (!ctx->opad) { + kfree(ctx->ipad); + crypto_free_shash(ctx->hashalg); + return -ENOMEM; } } - crypto_aead_set_reqsize_dma(tfm, sizeof(struct otx_cpt_req_ctx)); + ctx->sdesc = alloc_sdesc(ctx->hashalg); + if (!ctx->sdesc) { + kfree(ctx->opad); + kfree(ctx->ipad); + crypto_free_shash(ctx->hashalg); + return -ENOMEM; + } return 0; } @@ -608,8 +626,7 @@ static void otx_cpt_aead_exit(struct crypto_aead *tfm) kfree(ctx->ipad); kfree(ctx->opad); - if (ctx->hashalg) - crypto_free_shash(ctx->hashalg); + crypto_free_shash(ctx->hashalg); kfree(ctx->sdesc); } @@ -705,7 +722,7 @@ static inline void swap_data64(void *buf, u32 len) *dst = cpu_to_be64p(src); } -static int copy_pad(u8 mac_type, u8 *out_pad, u8 *in_pad) +static int swap_pad(u8 mac_type, u8 *pad) { struct sha512_state *sha512; struct sha256_state *sha256; @@ -713,22 +730,19 @@ static int copy_pad(u8 mac_type, u8 *out_pad, u8 *in_pad) switch (mac_type) { case OTX_CPT_SHA1: - sha1 = (struct sha1_state *) in_pad; + sha1 = (struct sha1_state *)pad; swap_data32(sha1->state, SHA1_DIGEST_SIZE); - memcpy(out_pad, &sha1->state, SHA1_DIGEST_SIZE); break; case OTX_CPT_SHA256: - sha256 = (struct sha256_state *) in_pad; + sha256 = (struct sha256_state *)pad; swap_data32(sha256->state, SHA256_DIGEST_SIZE); - memcpy(out_pad, &sha256->state, SHA256_DIGEST_SIZE); break; case OTX_CPT_SHA384: case OTX_CPT_SHA512: - sha512 = (struct sha512_state *) in_pad; + sha512 = (struct sha512_state *)pad; swap_data64(sha512->state, SHA512_DIGEST_SIZE); - memcpy(out_pad, &sha512->state, SHA512_DIGEST_SIZE); break; default: @@ -738,55 +752,53 @@ static int copy_pad(u8 mac_type, u8 *out_pad, u8 *in_pad) return 0; } -static int aead_hmac_init(struct crypto_aead *cipher) +static int aead_hmac_init(struct crypto_aead *cipher, + struct crypto_authenc_keys *keys) { struct otx_cpt_aead_ctx *ctx = crypto_aead_ctx_dma(cipher); - int state_size = crypto_shash_statesize(ctx->hashalg); int ds = crypto_shash_digestsize(ctx->hashalg); int bs = crypto_shash_blocksize(ctx->hashalg); - int authkeylen = ctx->auth_key_len; + int authkeylen = keys->authkeylen; u8 *ipad = NULL, *opad = NULL; - int ret = 0, icount = 0; + int icount = 0; + int ret; - ctx->sdesc = alloc_sdesc(ctx->hashalg); - if (!ctx->sdesc) - return -ENOMEM; + if (authkeylen > bs) { + ret = crypto_shash_digest(&ctx->sdesc->shash, keys->authkey, + authkeylen, ctx->key); + if (ret) + return ret; + authkeylen = ds; + } else + memcpy(ctx->key, keys->authkey, authkeylen); - ctx->ipad = kzalloc(bs, GFP_KERNEL); - if (!ctx->ipad) { - ret = -ENOMEM; - goto calc_fail; - } + ctx->enc_key_len = keys->enckeylen; + ctx->auth_key_len = authkeylen; - ctx->opad = kzalloc(bs, GFP_KERNEL); - if (!ctx->opad) { - ret = -ENOMEM; - goto calc_fail; - } + if (ctx->cipher_type == OTX_CPT_CIPHER_NULL) + return keys->enckeylen ? -EINVAL : 0; - ipad = kzalloc(state_size, GFP_KERNEL); - if (!ipad) { - ret = -ENOMEM; - goto calc_fail; + switch (keys->enckeylen) { + case AES_KEYSIZE_128: + ctx->key_type = OTX_CPT_AES_128_BIT; + break; + case AES_KEYSIZE_192: + ctx->key_type = OTX_CPT_AES_192_BIT; + break; + case AES_KEYSIZE_256: + ctx->key_type = OTX_CPT_AES_256_BIT; + break; + default: + /* Invalid key length */ + return -EINVAL; } - opad = kzalloc(state_size, GFP_KERNEL); - if (!opad) { - ret = -ENOMEM; - goto calc_fail; - } + memcpy(ctx->key + authkeylen, keys->enckey, keys->enckeylen); - if (authkeylen > bs) { - ret = crypto_shash_digest(&ctx->sdesc->shash, ctx->key, - authkeylen, ipad); - if (ret) - goto calc_fail; - - authkeylen = ds; - } else { - memcpy(ipad, ctx->key, authkeylen); - } + ipad = ctx->ipad; + opad = ctx->opad; + memcpy(ipad, ctx->key, authkeylen); memset(ipad + authkeylen, 0, bs - authkeylen); memcpy(opad, ipad, bs); @@ -804,7 +816,7 @@ static int aead_hmac_init(struct crypto_aead *cipher) crypto_shash_init(&ctx->sdesc->shash); crypto_shash_update(&ctx->sdesc->shash, ipad, bs); crypto_shash_export(&ctx->sdesc->shash, ipad); - ret = copy_pad(ctx->mac_type, ctx->ipad, ipad); + ret = swap_pad(ctx->mac_type, ipad); if (ret) goto calc_fail; @@ -812,25 +824,9 @@ static int aead_hmac_init(struct crypto_aead *cipher) crypto_shash_init(&ctx->sdesc->shash); crypto_shash_update(&ctx->sdesc->shash, opad, bs); crypto_shash_export(&ctx->sdesc->shash, opad); - ret = copy_pad(ctx->mac_type, ctx->opad, opad); - if (ret) - goto calc_fail; - - kfree(ipad); - kfree(opad); - - return 0; + ret = swap_pad(ctx->mac_type, opad); calc_fail: - kfree(ctx->ipad); - ctx->ipad = NULL; - kfree(ctx->opad); - ctx->opad = NULL; - kfree(ipad); - kfree(opad); - kfree(ctx->sdesc); - ctx->sdesc = NULL; - return ret; } @@ -838,57 +834,15 @@ static int otx_cpt_aead_cbc_aes_sha_setkey(struct crypto_aead *cipher, const unsigned char *key, unsigned int keylen) { - struct otx_cpt_aead_ctx *ctx = crypto_aead_ctx_dma(cipher); - struct crypto_authenc_key_param *param; - int enckeylen = 0, authkeylen = 0; - struct rtattr *rta = (void *)key; - int status = -EINVAL; - - if (!RTA_OK(rta, keylen)) - goto badkey; - - if (rta->rta_type != CRYPTO_AUTHENC_KEYA_PARAM) - goto badkey; - - if (RTA_PAYLOAD(rta) < sizeof(*param)) - goto badkey; - - param = RTA_DATA(rta); - enckeylen = be32_to_cpu(param->enckeylen); - key += RTA_ALIGN(rta->rta_len); - keylen -= RTA_ALIGN(rta->rta_len); - if (keylen < enckeylen) - goto badkey; + struct crypto_authenc_keys authenc_keys; + int status; - if (keylen > OTX_CPT_MAX_KEY_SIZE) - goto badkey; - - authkeylen = keylen - enckeylen; - memcpy(ctx->key, key, keylen); - - switch (enckeylen) { - case AES_KEYSIZE_128: - ctx->key_type = OTX_CPT_AES_128_BIT; - break; - case AES_KEYSIZE_192: - ctx->key_type = OTX_CPT_AES_192_BIT; - break; - case AES_KEYSIZE_256: - ctx->key_type = OTX_CPT_AES_256_BIT; - break; - default: - /* Invalid key length */ - goto badkey; - } - - ctx->enc_key_len = enckeylen; - ctx->auth_key_len = authkeylen; - - status = aead_hmac_init(cipher); + status = crypto_authenc_extractkeys(&authenc_keys, key, keylen); if (status) goto badkey; - return 0; + status = aead_hmac_init(cipher, &authenc_keys); + badkey: return status; } @@ -897,36 +851,7 @@ static int otx_cpt_aead_ecb_null_sha_setkey(struct crypto_aead *cipher, const unsigned char *key, unsigned int keylen) { - struct otx_cpt_aead_ctx *ctx = crypto_aead_ctx_dma(cipher); - struct crypto_authenc_key_param *param; - struct rtattr *rta = (void *)key; - int enckeylen = 0; - - if (!RTA_OK(rta, keylen)) - goto badkey; - - if (rta->rta_type != CRYPTO_AUTHENC_KEYA_PARAM) - goto badkey; - - if (RTA_PAYLOAD(rta) < sizeof(*param)) - goto badkey; - - param = RTA_DATA(rta); - enckeylen = be32_to_cpu(param->enckeylen); - key += RTA_ALIGN(rta->rta_len); - keylen -= RTA_ALIGN(rta->rta_len); - if (enckeylen != 0) - goto badkey; - - if (keylen > OTX_CPT_MAX_KEY_SIZE) - goto badkey; - - memcpy(ctx->key, key, keylen); - ctx->enc_key_len = enckeylen; - ctx->auth_key_len = keylen; - return 0; -badkey: - return -EINVAL; + return otx_cpt_aead_cbc_aes_sha_setkey(cipher, key, keylen); } static int otx_cpt_aead_gcm_aes_setkey(struct crypto_aead *cipher, diff --git a/drivers/crypto/marvell/octeontx2/otx2_cptvf_algs.c b/drivers/crypto/marvell/octeontx2/otx2_cptvf_algs.c index e27ddd3c4e558..4385d3df52b4d 100644 --- a/drivers/crypto/marvell/octeontx2/otx2_cptvf_algs.c +++ b/drivers/crypto/marvell/octeontx2/otx2_cptvf_algs.c @@ -11,7 +11,6 @@ #include #include #include -#include #include #include #include "otx2_cptvf.h" @@ -54,6 +53,8 @@ static struct cpt_device_table se_devices = { .count = ATOMIC_INIT(0) }; +static struct otx2_cpt_sdesc *alloc_sdesc(struct crypto_shash *alg); + static inline int get_se_device(struct pci_dev **pdev, int *cpu_num) { int count; @@ -580,40 +581,56 @@ static int cpt_aead_init(struct crypto_aead *atfm, u8 cipher_type, u8 mac_type) ctx->cipher_type = cipher_type; ctx->mac_type = mac_type; + switch (ctx->mac_type) { + case OTX2_CPT_SHA1: + ctx->hashalg = crypto_alloc_shash("sha1", 0, 0); + break; + + case OTX2_CPT_SHA256: + ctx->hashalg = crypto_alloc_shash("sha256", 0, 0); + break; + + case OTX2_CPT_SHA384: + ctx->hashalg = crypto_alloc_shash("sha384", 0, 0); + break; + + case OTX2_CPT_SHA512: + ctx->hashalg = crypto_alloc_shash("sha512", 0, 0); + break; + } + + if (IS_ERR(ctx->hashalg)) + return PTR_ERR(ctx->hashalg); + + if (ctx->hashalg) { + ctx->sdesc = alloc_sdesc(ctx->hashalg); + if (!ctx->sdesc) { + crypto_free_shash(ctx->hashalg); + return -ENOMEM; + } + } + /* * When selected cipher is NULL we use HMAC opcode instead of * FLEXICRYPTO opcode therefore we don't need to use HASH algorithms * for calculating ipad and opad */ - if (ctx->cipher_type != OTX2_CPT_CIPHER_NULL) { - switch (ctx->mac_type) { - case OTX2_CPT_SHA1: - ctx->hashalg = crypto_alloc_shash("sha1", 0, - CRYPTO_ALG_ASYNC); - if (IS_ERR(ctx->hashalg)) - return PTR_ERR(ctx->hashalg); - break; - - case OTX2_CPT_SHA256: - ctx->hashalg = crypto_alloc_shash("sha256", 0, - CRYPTO_ALG_ASYNC); - if (IS_ERR(ctx->hashalg)) - return PTR_ERR(ctx->hashalg); - break; + if (ctx->cipher_type != OTX2_CPT_CIPHER_NULL && ctx->hashalg) { + int ss = crypto_shash_statesize(ctx->hashalg); - case OTX2_CPT_SHA384: - ctx->hashalg = crypto_alloc_shash("sha384", 0, - CRYPTO_ALG_ASYNC); - if (IS_ERR(ctx->hashalg)) - return PTR_ERR(ctx->hashalg); - break; + ctx->ipad = kzalloc(ss, GFP_KERNEL); + if (!ctx->ipad) { + kfree(ctx->sdesc); + crypto_free_shash(ctx->hashalg); + return -ENOMEM; + } - case OTX2_CPT_SHA512: - ctx->hashalg = crypto_alloc_shash("sha512", 0, - CRYPTO_ALG_ASYNC); - if (IS_ERR(ctx->hashalg)) - return PTR_ERR(ctx->hashalg); - break; + ctx->opad = kzalloc(ss, GFP_KERNEL); + if (!ctx->opad) { + kfree(ctx->ipad); + kfree(ctx->sdesc); + crypto_free_shash(ctx->hashalg); + return -ENOMEM; } } switch (ctx->cipher_type) { @@ -686,8 +703,7 @@ static void otx2_cpt_aead_exit(struct crypto_aead *tfm) kfree(ctx->ipad); kfree(ctx->opad); - if (ctx->hashalg) - crypto_free_shash(ctx->hashalg); + crypto_free_shash(ctx->hashalg); kfree(ctx->sdesc); if (ctx->fbk_cipher) { @@ -760,7 +776,7 @@ static inline void swap_data64(void *buf, u32 len) cpu_to_be64s(src); } -static int copy_pad(u8 mac_type, u8 *out_pad, u8 *in_pad) +static int swap_pad(u8 mac_type, u8 *pad) { struct sha512_state *sha512; struct sha256_state *sha256; @@ -768,22 +784,19 @@ static int copy_pad(u8 mac_type, u8 *out_pad, u8 *in_pad) switch (mac_type) { case OTX2_CPT_SHA1: - sha1 = (struct sha1_state *) in_pad; + sha1 = (struct sha1_state *)pad; swap_data32(sha1->state, SHA1_DIGEST_SIZE); - memcpy(out_pad, &sha1->state, SHA1_DIGEST_SIZE); break; case OTX2_CPT_SHA256: - sha256 = (struct sha256_state *) in_pad; + sha256 = (struct sha256_state *)pad; swap_data32(sha256->state, SHA256_DIGEST_SIZE); - memcpy(out_pad, &sha256->state, SHA256_DIGEST_SIZE); break; case OTX2_CPT_SHA384: case OTX2_CPT_SHA512: - sha512 = (struct sha512_state *) in_pad; + sha512 = (struct sha512_state *)pad; swap_data64(sha512->state, SHA512_DIGEST_SIZE); - memcpy(out_pad, &sha512->state, SHA512_DIGEST_SIZE); break; default: @@ -793,55 +806,54 @@ static int copy_pad(u8 mac_type, u8 *out_pad, u8 *in_pad) return 0; } -static int aead_hmac_init(struct crypto_aead *cipher) +static int aead_hmac_init(struct crypto_aead *cipher, + struct crypto_authenc_keys *keys) { struct otx2_cpt_aead_ctx *ctx = crypto_aead_ctx_dma(cipher); - int state_size = crypto_shash_statesize(ctx->hashalg); int ds = crypto_shash_digestsize(ctx->hashalg); int bs = crypto_shash_blocksize(ctx->hashalg); - int authkeylen = ctx->auth_key_len; + int authkeylen = keys->authkeylen; u8 *ipad = NULL, *opad = NULL; - int ret = 0, icount = 0; + int icount = 0; + int ret; - ctx->sdesc = alloc_sdesc(ctx->hashalg); - if (!ctx->sdesc) - return -ENOMEM; + if (authkeylen > bs) { + ret = crypto_shash_digest(&ctx->sdesc->shash, keys->authkey, + authkeylen, ctx->key); + if (ret) + goto calc_fail; - ctx->ipad = kzalloc(bs, GFP_KERNEL); - if (!ctx->ipad) { - ret = -ENOMEM; - goto calc_fail; - } + authkeylen = ds; + } else + memcpy(ctx->key, keys->authkey, authkeylen); - ctx->opad = kzalloc(bs, GFP_KERNEL); - if (!ctx->opad) { - ret = -ENOMEM; - goto calc_fail; - } + ctx->enc_key_len = keys->enckeylen; + ctx->auth_key_len = authkeylen; - ipad = kzalloc(state_size, GFP_KERNEL); - if (!ipad) { - ret = -ENOMEM; - goto calc_fail; - } + if (ctx->cipher_type == OTX2_CPT_CIPHER_NULL) + return keys->enckeylen ? -EINVAL : 0; - opad = kzalloc(state_size, GFP_KERNEL); - if (!opad) { - ret = -ENOMEM; - goto calc_fail; + switch (keys->enckeylen) { + case AES_KEYSIZE_128: + ctx->key_type = OTX2_CPT_AES_128_BIT; + break; + case AES_KEYSIZE_192: + ctx->key_type = OTX2_CPT_AES_192_BIT; + break; + case AES_KEYSIZE_256: + ctx->key_type = OTX2_CPT_AES_256_BIT; + break; + default: + /* Invalid key length */ + return -EINVAL; } - if (authkeylen > bs) { - ret = crypto_shash_digest(&ctx->sdesc->shash, ctx->key, - authkeylen, ipad); - if (ret) - goto calc_fail; + memcpy(ctx->key + authkeylen, keys->enckey, keys->enckeylen); - authkeylen = ds; - } else { - memcpy(ipad, ctx->key, authkeylen); - } + ipad = ctx->ipad; + opad = ctx->opad; + memcpy(ipad, ctx->key, authkeylen); memset(ipad + authkeylen, 0, bs - authkeylen); memcpy(opad, ipad, bs); @@ -859,7 +871,7 @@ static int aead_hmac_init(struct crypto_aead *cipher) crypto_shash_init(&ctx->sdesc->shash); crypto_shash_update(&ctx->sdesc->shash, ipad, bs); crypto_shash_export(&ctx->sdesc->shash, ipad); - ret = copy_pad(ctx->mac_type, ctx->ipad, ipad); + ret = swap_pad(ctx->mac_type, ipad); if (ret) goto calc_fail; @@ -867,25 +879,9 @@ static int aead_hmac_init(struct crypto_aead *cipher) crypto_shash_init(&ctx->sdesc->shash); crypto_shash_update(&ctx->sdesc->shash, opad, bs); crypto_shash_export(&ctx->sdesc->shash, opad); - ret = copy_pad(ctx->mac_type, ctx->opad, opad); - if (ret) - goto calc_fail; - - kfree(ipad); - kfree(opad); - - return 0; + ret = swap_pad(ctx->mac_type, opad); calc_fail: - kfree(ctx->ipad); - ctx->ipad = NULL; - kfree(ctx->opad); - ctx->opad = NULL; - kfree(ipad); - kfree(opad); - kfree(ctx->sdesc); - ctx->sdesc = NULL; - return ret; } @@ -893,87 +889,17 @@ static int otx2_cpt_aead_cbc_aes_sha_setkey(struct crypto_aead *cipher, const unsigned char *key, unsigned int keylen) { - struct otx2_cpt_aead_ctx *ctx = crypto_aead_ctx_dma(cipher); - struct crypto_authenc_key_param *param; - int enckeylen = 0, authkeylen = 0; - struct rtattr *rta = (void *)key; - - if (!RTA_OK(rta, keylen)) - return -EINVAL; + struct crypto_authenc_keys authenc_keys; - if (rta->rta_type != CRYPTO_AUTHENC_KEYA_PARAM) - return -EINVAL; - - if (RTA_PAYLOAD(rta) < sizeof(*param)) - return -EINVAL; - - param = RTA_DATA(rta); - enckeylen = be32_to_cpu(param->enckeylen); - key += RTA_ALIGN(rta->rta_len); - keylen -= RTA_ALIGN(rta->rta_len); - if (keylen < enckeylen) - return -EINVAL; - - if (keylen > OTX2_CPT_MAX_KEY_SIZE) - return -EINVAL; - - authkeylen = keylen - enckeylen; - memcpy(ctx->key, key, keylen); - - switch (enckeylen) { - case AES_KEYSIZE_128: - ctx->key_type = OTX2_CPT_AES_128_BIT; - break; - case AES_KEYSIZE_192: - ctx->key_type = OTX2_CPT_AES_192_BIT; - break; - case AES_KEYSIZE_256: - ctx->key_type = OTX2_CPT_AES_256_BIT; - break; - default: - /* Invalid key length */ - return -EINVAL; - } - - ctx->enc_key_len = enckeylen; - ctx->auth_key_len = authkeylen; - - return aead_hmac_init(cipher); + return crypto_authenc_extractkeys(&authenc_keys, key, keylen) ?: + aead_hmac_init(cipher, &authenc_keys); } static int otx2_cpt_aead_ecb_null_sha_setkey(struct crypto_aead *cipher, const unsigned char *key, unsigned int keylen) { - struct otx2_cpt_aead_ctx *ctx = crypto_aead_ctx_dma(cipher); - struct crypto_authenc_key_param *param; - struct rtattr *rta = (void *)key; - int enckeylen = 0; - - if (!RTA_OK(rta, keylen)) - return -EINVAL; - - if (rta->rta_type != CRYPTO_AUTHENC_KEYA_PARAM) - return -EINVAL; - - if (RTA_PAYLOAD(rta) < sizeof(*param)) - return -EINVAL; - - param = RTA_DATA(rta); - enckeylen = be32_to_cpu(param->enckeylen); - key += RTA_ALIGN(rta->rta_len); - keylen -= RTA_ALIGN(rta->rta_len); - if (enckeylen != 0) - return -EINVAL; - - if (keylen > OTX2_CPT_MAX_KEY_SIZE) - return -EINVAL; - - memcpy(ctx->key, key, keylen); - ctx->enc_key_len = enckeylen; - ctx->auth_key_len = keylen; - - return 0; + return otx2_cpt_aead_cbc_aes_sha_setkey(cipher, key, keylen); } static int otx2_cpt_aead_gcm_aes_setkey(struct crypto_aead *cipher, diff --git a/drivers/crypto/starfive/jh7110-cryp.h b/drivers/crypto/starfive/jh7110-cryp.h index fe011d50473d7..607f70292b215 100644 --- a/drivers/crypto/starfive/jh7110-cryp.h +++ b/drivers/crypto/starfive/jh7110-cryp.h @@ -30,6 +30,7 @@ #define MAX_KEY_SIZE SHA512_BLOCK_SIZE #define STARFIVE_AES_IV_LEN AES_BLOCK_SIZE #define STARFIVE_AES_CTR_LEN AES_BLOCK_SIZE +#define STARFIVE_RSA_MAX_KEYSZ 256 union starfive_aes_csr { u32 v; @@ -212,12 +213,11 @@ struct starfive_cryp_request_ctx { struct scatterlist *out_sg; struct ahash_request ahash_fbk_req; size_t total; - size_t nents; unsigned int blksize; unsigned int digsize; unsigned long in_sg_len; unsigned char *adata; - u8 rsa_data[] __aligned(sizeof(u32)); + u8 rsa_data[STARFIVE_RSA_MAX_KEYSZ] __aligned(sizeof(u32)); }; struct starfive_cryp_dev *starfive_cryp_find_dev(struct starfive_cryp_ctx *ctx); diff --git a/drivers/crypto/starfive/jh7110-rsa.c b/drivers/crypto/starfive/jh7110-rsa.c index f31bbd825f883..1db9a3d02848b 100644 --- a/drivers/crypto/starfive/jh7110-rsa.c +++ b/drivers/crypto/starfive/jh7110-rsa.c @@ -37,7 +37,6 @@ // A * A * R mod N ==> A #define CRYPTO_CMD_AARN 0x7 -#define STARFIVE_RSA_MAX_KEYSZ 256 #define STARFIVE_RSA_RESET 0x2 static inline int starfive_pka_wait_done(struct starfive_cryp_ctx *ctx) @@ -91,7 +90,7 @@ static int starfive_rsa_montgomery_form(struct starfive_cryp_ctx *ctx, { struct starfive_cryp_dev *cryp = ctx->cryp; struct starfive_cryp_request_ctx *rctx = ctx->rctx; - int count = rctx->total / sizeof(u32) - 1; + int count = (ALIGN(rctx->total, 4) / 4) - 1; int loop; u32 temp; u8 opsize; @@ -274,12 +273,17 @@ static int starfive_rsa_enc_core(struct starfive_cryp_ctx *ctx, int enc) struct starfive_cryp_dev *cryp = ctx->cryp; struct starfive_cryp_request_ctx *rctx = ctx->rctx; struct starfive_rsa_key *key = &ctx->rsa_key; - int ret = 0; + int ret = 0, shift = 0; writel(STARFIVE_RSA_RESET, cryp->base + STARFIVE_PKA_CACR_OFFSET); - rctx->total = sg_copy_to_buffer(rctx->in_sg, rctx->nents, - rctx->rsa_data, rctx->total); + if (!IS_ALIGNED(rctx->total, sizeof(u32))) { + shift = sizeof(u32) - (rctx->total & 0x3); + memset(rctx->rsa_data, 0, shift); + } + + rctx->total = sg_copy_to_buffer(rctx->in_sg, sg_nents(rctx->in_sg), + rctx->rsa_data + shift, rctx->total); if (enc) { key->bitlen = key->e_bitlen; @@ -329,7 +333,6 @@ static int starfive_rsa_enc(struct akcipher_request *req) rctx->in_sg = req->src; rctx->out_sg = req->dst; rctx->total = req->src_len; - rctx->nents = sg_nents(rctx->in_sg); ctx->rctx = rctx; return starfive_rsa_enc_core(ctx, 1); diff --git a/drivers/cxl/core/pci.c b/drivers/cxl/core/pci.c index c963cd9e88d16..6edfd05466737 100644 --- a/drivers/cxl/core/pci.c +++ b/drivers/cxl/core/pci.c @@ -388,10 +388,6 @@ int cxl_dvsec_rr_decode(struct device *dev, int d, size |= temp & CXL_DVSEC_MEM_SIZE_LOW_MASK; if (!size) { - info->dvsec_range[i] = (struct range) { - .start = 0, - .end = CXL_RESOURCE_NONE, - }; continue; } @@ -409,12 +405,10 @@ int cxl_dvsec_rr_decode(struct device *dev, int d, base |= temp & CXL_DVSEC_MEM_BASE_LOW_MASK; - info->dvsec_range[i] = (struct range) { + info->dvsec_range[ranges++] = (struct range) { .start = base, .end = base + size - 1 }; - - ranges++; } info->ranges = ranges; diff --git a/drivers/cxl/core/region.c b/drivers/cxl/core/region.c index bc5a43897d578..5060d9802795e 100644 --- a/drivers/cxl/core/region.c +++ b/drivers/cxl/core/region.c @@ -1528,10 +1528,13 @@ static int cxl_region_attach_position(struct cxl_region *cxlr, const struct cxl_dport *dport, int pos) { struct cxl_memdev *cxlmd = cxled_to_memdev(cxled); + struct cxl_switch_decoder *cxlsd = &cxlrd->cxlsd; + struct cxl_decoder *cxld = &cxlsd->cxld; + int iw = cxld->interleave_ways; struct cxl_port *iter; int rc; - if (cxlrd->calc_hb(cxlrd, pos) != dport) { + if (dport != cxlrd->cxlsd.target[pos % iw]) { dev_dbg(&cxlr->dev, "%s:%s invalid target position for %s\n", dev_name(&cxlmd->dev), dev_name(&cxled->cxld.dev), dev_name(&cxlrd->cxlsd.cxld.dev)); diff --git a/drivers/cxl/cxlmem.h b/drivers/cxl/cxlmem.h index 59c7f88b915a4..edb46123e3eb0 100644 --- a/drivers/cxl/cxlmem.h +++ b/drivers/cxl/cxlmem.h @@ -538,7 +538,7 @@ enum cxl_opcode { 0x3b, 0x3f, 0x17) #define DEFINE_CXL_VENDOR_DEBUG_UUID \ - UUID_INIT(0xe1819d9, 0x11a9, 0x400c, 0x81, 0x1f, 0xd6, 0x07, 0x19, \ + UUID_INIT(0x5e1819d9, 0x11a9, 0x400c, 0x81, 0x1f, 0xd6, 0x07, 0x19, \ 0x40, 0x3d, 0x86) struct cxl_mbox_get_supported_logs { diff --git a/drivers/dax/device.c b/drivers/dax/device.c index 93ebedc5ec8ca..01e89b7ac637f 100644 --- a/drivers/dax/device.c +++ b/drivers/dax/device.c @@ -86,7 +86,7 @@ static void dax_set_mapping(struct vm_fault *vmf, pfn_t pfn, nr_pages = 1; pgoff = linear_page_index(vmf->vma, - ALIGN(vmf->address, fault_size)); + ALIGN_DOWN(vmf->address, fault_size)); for (i = 0; i < nr_pages; i++) { struct page *page = pfn_to_page(pfn_t_to_pfn(pfn) + i); diff --git a/drivers/dma-buf/TEST_MAPPING b/drivers/dma-buf/TEST_MAPPING index 8f0f07132ea99..e899320bebcc4 100644 --- a/drivers/dma-buf/TEST_MAPPING +++ b/drivers/dma-buf/TEST_MAPPING @@ -264,6 +264,26 @@ "include-filter": "android.hardware.camera2.cts.FastBasicsTest" } ] + }, + { + "name": "CtsIncrementalInstallHostTestCases", + "options": [ + { + "include-filter": "android.incrementalinstall.cts.IncrementalFeatureTest" + }, + { + "include-filter": "android.incrementalinstall.cts.IncrementalInstallTest" + } + ] + }, + { + "name": "CtsRootBluetoothTestCases" + }, + { + "name": "vts_kernel_net_tests" + }, + { + "name": "VtsAidlHalSensorsTargetTest" } ] } diff --git a/drivers/dma-buf/dma-buf-sysfs-stats.c b/drivers/dma-buf/dma-buf-sysfs-stats.c index 86299fd0fe2cf..19f1248b4196a 100644 --- a/drivers/dma-buf/dma-buf-sysfs-stats.c +++ b/drivers/dma-buf/dma-buf-sysfs-stats.c @@ -12,6 +12,7 @@ #include #include #include +#include #include "dma-buf-sysfs-stats.h" @@ -122,13 +123,17 @@ static const struct kobj_type dma_buf_ktype = { void dma_buf_stats_teardown(struct dma_buf *dmabuf) { struct dma_buf_sysfs_entry *sysfs_entry; + bool skip_sysfs_release = false; sysfs_entry = dmabuf->sysfs_entry; if (!sysfs_entry) return; - kobject_del(&sysfs_entry->kobj); - kobject_put(&sysfs_entry->kobj); + trace_android_rvh_dma_buf_stats_teardown(sysfs_entry, &skip_sysfs_release); + if (!skip_sysfs_release) { + kobject_del(&sysfs_entry->kobj); + kobject_put(&sysfs_entry->kobj); + } } diff --git a/drivers/dma-buf/heaps/cma_heap.c b/drivers/dma-buf/heaps/cma_heap.c index cea557ccc283f..06d8fc1b6c906 100644 --- a/drivers/dma-buf/heaps/cma_heap.c +++ b/drivers/dma-buf/heaps/cma_heap.c @@ -167,7 +167,7 @@ static vm_fault_t cma_heap_vm_fault(struct vm_fault *vmf) struct vm_area_struct *vma = vmf->vma; struct cma_heap_buffer *buffer = vma->vm_private_data; - if (vmf->pgoff > buffer->pagecount) + if (vmf->pgoff >= buffer->pagecount) return VM_FAULT_SIGBUS; return vmf_insert_pfn(vma, vmf->address, page_to_pfn(buffer->pages[vmf->pgoff])); diff --git a/drivers/dma-buf/udmabuf.c b/drivers/dma-buf/udmabuf.c index 1a41c4a069ea1..f561cf160f115 100644 --- a/drivers/dma-buf/udmabuf.c +++ b/drivers/dma-buf/udmabuf.c @@ -15,6 +15,7 @@ #include #include #include +#include static int list_limit = 1024; module_param(list_limit, int, 0644); @@ -258,16 +259,20 @@ static long udmabuf_create(struct miscdevice *device, memfd = fget(list[i].memfd); if (!memfd) goto err; - mapping = memfd->f_mapping; - if (!shmem_mapping(mapping) && !is_file_hugepages(memfd)) - goto err; - seals = memfd_fcntl(memfd, F_GET_SEALS, 0); - if (seals == -EINVAL) - goto err; - ret = -EINVAL; - if ((seals & SEALS_WANTED) != SEALS_WANTED || - (seals & SEALS_DENIED) != 0) + mapping = file_inode(memfd)->i_mapping; + if (shmem_mapping(mapping) || is_file_hugepages(memfd)) { + seals = memfd_fcntl(memfd, F_GET_SEALS, 0); + if (seals == -EINVAL) + goto err; + ret = -EINVAL; + if ((seals & SEALS_WANTED) != SEALS_WANTED || + (seals & SEALS_DENIED) != 0) + goto err; + } else if (is_ivshm_region(memfd)) { + /* no op */ + } else { goto err; + } pgoff = list[i].offset >> PAGE_SHIFT; pgcnt = list[i].size >> PAGE_SHIFT; if (is_file_hugepages(memfd)) { @@ -305,6 +310,12 @@ static long udmabuf_create(struct miscdevice *device, chunkoff = 0; mapidx++; } + } else if (is_ivshm_region(memfd)) { + page = ivshm_region_offset_to_page(memfd, pgoff + pgidx); + if (IS_ERR(page)) { + ret = PTR_ERR(page); + goto err; + } } else { mapidx = pgoff + pgidx; page = shmem_read_mapping_page(mapping, mapidx); diff --git a/drivers/edac/igen6_edac.c b/drivers/edac/igen6_edac.c index 67d2923e8151d..4b08dca34dfec 100644 --- a/drivers/edac/igen6_edac.c +++ b/drivers/edac/igen6_edac.c @@ -312,7 +312,7 @@ static u64 ehl_err_addr_to_imc_addr(u64 eaddr, int mc) if (igen6_tom <= _4GB) return eaddr + igen6_tolud - _4GB; - if (eaddr < _4GB) + if (eaddr >= igen6_tom) return eaddr + igen6_tolud - igen6_tom; return eaddr; diff --git a/drivers/edac/synopsys_edac.c b/drivers/edac/synopsys_edac.c index c4fc64cbecd0e..6ddc90d7ba7c2 100644 --- a/drivers/edac/synopsys_edac.c +++ b/drivers/edac/synopsys_edac.c @@ -9,6 +9,8 @@ #include #include #include +#include +#include #include #include @@ -299,6 +301,7 @@ struct synps_ecc_status { /** * struct synps_edac_priv - DDR memory controller private instance data. * @baseaddr: Base address of the DDR controller. + * @reglock: Concurrent CSRs access lock. * @message: Buffer for framing the event specific info. * @stat: ECC status information. * @p_data: Platform data. @@ -313,6 +316,7 @@ struct synps_ecc_status { */ struct synps_edac_priv { void __iomem *baseaddr; + spinlock_t reglock; char message[SYNPS_EDAC_MSG_SIZE]; struct synps_ecc_status stat; const struct synps_platform_data *p_data; @@ -334,6 +338,7 @@ struct synps_edac_priv { * @get_mtype: Get mtype. * @get_dtype: Get dtype. * @get_ecc_state: Get ECC state. + * @get_mem_info: Get EDAC memory info * @quirks: To differentiate IPs. */ struct synps_platform_data { @@ -341,6 +346,9 @@ struct synps_platform_data { enum mem_type (*get_mtype)(const void __iomem *base); enum dev_type (*get_dtype)(const void __iomem *base); bool (*get_ecc_state)(void __iomem *base); +#ifdef CONFIG_EDAC_DEBUG + u64 (*get_mem_info)(struct synps_edac_priv *priv); +#endif int quirks; }; @@ -399,6 +407,25 @@ static int zynq_get_error_info(struct synps_edac_priv *priv) return 0; } +#ifdef CONFIG_EDAC_DEBUG +/** + * zynqmp_get_mem_info - Get the current memory info. + * @priv: DDR memory controller private instance data. + * + * Return: host interface address. + */ +static u64 zynqmp_get_mem_info(struct synps_edac_priv *priv) +{ + u64 hif_addr = 0, linear_addr; + + linear_addr = priv->poison_addr; + if (linear_addr >= SZ_32G) + linear_addr = linear_addr - SZ_32G + SZ_2G; + hif_addr = linear_addr >> 3; + return hif_addr; +} +#endif + /** * zynqmp_get_error_info - Get the current ECC error info. * @priv: DDR memory controller private instance data. @@ -408,7 +435,8 @@ static int zynq_get_error_info(struct synps_edac_priv *priv) static int zynqmp_get_error_info(struct synps_edac_priv *priv) { struct synps_ecc_status *p; - u32 regval, clearval = 0; + u32 regval, clearval; + unsigned long flags; void __iomem *base; base = priv->baseaddr; @@ -452,10 +480,14 @@ static int zynqmp_get_error_info(struct synps_edac_priv *priv) p->ueinfo.blknr = (regval & ECC_CEADDR1_BLKNR_MASK); p->ueinfo.data = readl(base + ECC_UESYND0_OFST); out: - clearval = ECC_CTRL_CLR_CE_ERR | ECC_CTRL_CLR_CE_ERRCNT; - clearval |= ECC_CTRL_CLR_UE_ERR | ECC_CTRL_CLR_UE_ERRCNT; + spin_lock_irqsave(&priv->reglock, flags); + + clearval = readl(base + ECC_CLR_OFST) | + ECC_CTRL_CLR_CE_ERR | ECC_CTRL_CLR_CE_ERRCNT | + ECC_CTRL_CLR_UE_ERR | ECC_CTRL_CLR_UE_ERRCNT; writel(clearval, base + ECC_CLR_OFST); - writel(0x0, base + ECC_CLR_OFST); + + spin_unlock_irqrestore(&priv->reglock, flags); return 0; } @@ -515,24 +547,41 @@ static void handle_error(struct mem_ctl_info *mci, struct synps_ecc_status *p) static void enable_intr(struct synps_edac_priv *priv) { + unsigned long flags; + /* Enable UE/CE Interrupts */ - if (priv->p_data->quirks & DDR_ECC_INTR_SELF_CLEAR) - writel(DDR_UE_MASK | DDR_CE_MASK, - priv->baseaddr + ECC_CLR_OFST); - else + if (!(priv->p_data->quirks & DDR_ECC_INTR_SELF_CLEAR)) { writel(DDR_QOSUE_MASK | DDR_QOSCE_MASK, priv->baseaddr + DDR_QOS_IRQ_EN_OFST); + return; + } + + spin_lock_irqsave(&priv->reglock, flags); + + writel(DDR_UE_MASK | DDR_CE_MASK, + priv->baseaddr + ECC_CLR_OFST); + + spin_unlock_irqrestore(&priv->reglock, flags); } static void disable_intr(struct synps_edac_priv *priv) { + unsigned long flags; + /* Disable UE/CE Interrupts */ - if (priv->p_data->quirks & DDR_ECC_INTR_SELF_CLEAR) - writel(0x0, priv->baseaddr + ECC_CLR_OFST); - else + if (!(priv->p_data->quirks & DDR_ECC_INTR_SELF_CLEAR)) { writel(DDR_QOSUE_MASK | DDR_QOSCE_MASK, priv->baseaddr + DDR_QOS_IRQ_DB_OFST); + + return; + } + + spin_lock_irqsave(&priv->reglock, flags); + + writel(0, priv->baseaddr + ECC_CLR_OFST); + + spin_unlock_irqrestore(&priv->reglock, flags); } /** @@ -576,8 +625,6 @@ static irqreturn_t intr_handler(int irq, void *dev_id) /* v3.0 of the controller does not have this register */ if (!(priv->p_data->quirks & DDR_ECC_INTR_SELF_CLEAR)) writel(regval, priv->baseaddr + DDR_QOS_IRQ_STAT_OFST); - else - enable_intr(priv); return IRQ_HANDLED; } @@ -899,6 +946,9 @@ static const struct synps_platform_data zynqmp_edac_def = { .get_mtype = zynqmp_get_mtype, .get_dtype = zynqmp_get_dtype, .get_ecc_state = zynqmp_get_ecc_state, +#ifdef CONFIG_EDAC_DEBUG + .get_mem_info = zynqmp_get_mem_info, +#endif .quirks = (DDR_ECC_INTR_SUPPORT #ifdef CONFIG_EDAC_DEBUG | DDR_ECC_DATA_POISON_SUPPORT @@ -952,10 +1002,16 @@ MODULE_DEVICE_TABLE(of, synps_edac_match); static void ddr_poison_setup(struct synps_edac_priv *priv) { int col = 0, row = 0, bank = 0, bankgrp = 0, rank = 0, regval; + const struct synps_platform_data *p_data; int index; ulong hif_addr = 0; - hif_addr = priv->poison_addr >> 3; + p_data = priv->p_data; + + if (p_data->get_mem_info) + hif_addr = p_data->get_mem_info(priv); + else + hif_addr = priv->poison_addr >> 3; for (index = 0; index < DDR_MAX_ROW_SHIFT; index++) { if (priv->row_shift[index]) @@ -1359,6 +1415,7 @@ static int mc_probe(struct platform_device *pdev) priv = mci->pvt_info; priv->baseaddr = baseaddr; priv->p_data = p_data; + spin_lock_init(&priv->reglock); mc_init(mci, pdev); diff --git a/drivers/firewire/core-cdev.c b/drivers/firewire/core-cdev.c index 6274b86eb9437..73cc2f2dcbf92 100644 --- a/drivers/firewire/core-cdev.c +++ b/drivers/firewire/core-cdev.c @@ -598,11 +598,11 @@ static void complete_transaction(struct fw_card *card, int rcode, u32 request_ts queue_event(client, &e->event, rsp, sizeof(*rsp) + rsp->length, NULL, 0); break; + } default: WARN_ON(1); break; } - } /* Drop the idr's reference */ client_put(client); diff --git a/drivers/firmware/arm_ffa/driver.c b/drivers/firmware/arm_ffa/driver.c index 6c5c7926b8eed..f6df3ca7b4ac8 100644 --- a/drivers/firmware/arm_ffa/driver.c +++ b/drivers/firmware/arm_ffa/driver.c @@ -732,6 +732,11 @@ static void __do_sched_recv_cb(u16 part_id, u16 vcpu, bool is_per_vcpu) void *cb_data; partition = xa_load(&drv_info->partition_info, part_id); + if (!partition) { + pr_err("%s: Invalid partition ID 0x%x\n", __func__, part_id); + return; + } + read_lock(&partition->rw_lock); callback = partition->callback; cb_data = partition->cb_data; @@ -782,9 +787,9 @@ static void ffa_notification_info_get(void) if (ids_processed >= max_ids - 1) break; - part_id = packed_id_list[++ids_processed]; + part_id = packed_id_list[ids_processed++]; - if (!ids_count[list]) { /* Global Notification */ + if (ids_count[list] == 1) { /* Global Notification */ __do_sched_recv_cb(part_id, 0, false); continue; } @@ -794,7 +799,7 @@ static void ffa_notification_info_get(void) if (ids_processed >= max_ids - 1) break; - vcpu_id = packed_id_list[++ids_processed]; + vcpu_id = packed_id_list[ids_processed++]; __do_sched_recv_cb(part_id, vcpu_id, true); } @@ -909,6 +914,11 @@ static int ffa_sched_recv_cb_update(u16 part_id, ffa_sched_recv_cb callback, bool cb_valid; partition = xa_load(&drv_info->partition_info, part_id); + if (!partition) { + pr_err("%s: Invalid partition ID 0x%x\n", __func__, part_id); + return -EINVAL; + } + write_lock(&partition->rw_lock); cb_valid = !!partition->callback; @@ -1211,6 +1221,7 @@ static void ffa_setup_partitions(void) ffa_device_unregister(ffa_dev); continue; } + rwlock_init(&info->rw_lock); xa_store(&drv_info->partition_info, tpbuf->id, info, GFP_KERNEL); } drv_info->partition_count = count; @@ -1221,6 +1232,7 @@ static void ffa_setup_partitions(void) info = kzalloc(sizeof(*info), GFP_KERNEL); if (!info) return; + rwlock_init(&info->rw_lock); xa_store(&drv_info->partition_info, drv_info->vm_id, info, GFP_KERNEL); drv_info->partition_count++; } diff --git a/drivers/firmware/arm_scmi/driver.c b/drivers/firmware/arm_scmi/driver.c index 76c15ef31d905..d758907300d19 100644 --- a/drivers/firmware/arm_scmi/driver.c +++ b/drivers/firmware/arm_scmi/driver.c @@ -155,6 +155,7 @@ struct scmi_debug_info { * @devreq_mtx: A mutex to serialize device creation for this SCMI instance * @dbg: A pointer to debugfs related data (if any) * @raw: An opaque reference handle used by SCMI Raw mode. + * @max_rx_timeout_ms: the maximum receive channel timeout value */ struct scmi_info { int id; @@ -181,6 +182,7 @@ struct scmi_info { struct mutex devreq_mtx; struct scmi_debug_info *dbg; void *raw; + unsigned int max_rx_timeout_ms; }; #define handle_to_scmi_info(h) container_of(h, struct scmi_info, handle) @@ -1121,11 +1123,11 @@ static int scmi_wait_for_message_response(struct scmi_chan_info *cinfo, trace_scmi_xfer_response_wait(xfer->transfer_id, xfer->hdr.id, xfer->hdr.protocol_id, xfer->hdr.seq, - info->desc->max_rx_timeout_ms, + info->max_rx_timeout_ms, xfer->hdr.poll_completion); return scmi_wait_for_reply(dev, info->desc, cinfo, xfer, - info->desc->max_rx_timeout_ms); + info->max_rx_timeout_ms); } /** @@ -2348,7 +2350,7 @@ static int scmi_chan_setup(struct scmi_info *info, struct device_node *of_node, if (!cinfo) return -ENOMEM; - cinfo->rx_timeout_ms = info->desc->max_rx_timeout_ms; + cinfo->rx_timeout_ms = info->max_rx_timeout_ms; /* Create a unique name for this transport device */ snprintf(name, 32, "__scmi_transport_device_%s_%02X", @@ -2618,7 +2620,7 @@ static struct scmi_debug_info *scmi_debugfs_common_setup(struct scmi_info *info) debugfs_create_bool("is_atomic", 0400, trans, &dbg->is_atomic); debugfs_create_u32("max_rx_timeout_ms", 0400, trans, - (u32 *)&info->desc->max_rx_timeout_ms); + (u32 *)&info->max_rx_timeout_ms); debugfs_create_u32("max_msg_size", 0400, trans, (u32 *)&info->desc->max_msg_size); @@ -2670,7 +2672,8 @@ static int scmi_debugfs_raw_mode_setup(struct scmi_info *info) info->raw = scmi_raw_mode_init(&info->handle, info->dbg->top_dentry, info->id, channels, num_chans, - info->desc, info->tx_minfo.max_msg); + info->desc, info->tx_minfo.max_msg, + info->max_rx_timeout_ms); if (IS_ERR(info->raw)) { dev_err(info->dev, "Failed to initialize SCMI RAW Mode !\n"); ret = PTR_ERR(info->raw); @@ -2683,6 +2686,7 @@ static int scmi_debugfs_raw_mode_setup(struct scmi_info *info) static int scmi_probe(struct platform_device *pdev) { int ret; + u32 timeout; struct scmi_handle *handle; const struct scmi_desc *desc; struct scmi_info *info; @@ -2731,6 +2735,11 @@ static int scmi_probe(struct platform_device *pdev) info->atomic_threshold); handle->is_transport_atomic = scmi_is_transport_atomic; + if (!of_property_read_u32(np, "max-rx-timeout-ms", &timeout)) + info->max_rx_timeout_ms = timeout; + else + info->max_rx_timeout_ms = info->desc->max_rx_timeout_ms; + if (desc->ops->link_supplier) { ret = desc->ops->link_supplier(dev); if (ret) diff --git a/drivers/firmware/arm_scmi/mailbox.c b/drivers/firmware/arm_scmi/mailbox.c index 948acb4d76746..4417239561ba3 100644 --- a/drivers/firmware/arm_scmi/mailbox.c +++ b/drivers/firmware/arm_scmi/mailbox.c @@ -24,6 +24,7 @@ * @chan_platform_receiver: Optional Platform Receiver mailbox unidirectional channel * @cinfo: SCMI channel info * @shmem: Transmit/Receive shared memory area + * @chan_lock: Lock that prevents multiple xfers from being queued */ struct scmi_mailbox { struct mbox_client cl; @@ -32,6 +33,7 @@ struct scmi_mailbox { struct mbox_chan *chan_platform_receiver; struct scmi_chan_info *cinfo; struct scmi_shared_mem __iomem *shmem; + struct mutex chan_lock; }; #define client_to_scmi_mailbox(c) container_of(c, struct scmi_mailbox, cl) @@ -252,6 +254,7 @@ static int mailbox_chan_setup(struct scmi_chan_info *cinfo, struct device *dev, cinfo->transport_info = smbox; smbox->cinfo = cinfo; + mutex_init(&smbox->chan_lock); return 0; } @@ -281,13 +284,23 @@ static int mailbox_send_message(struct scmi_chan_info *cinfo, struct scmi_mailbox *smbox = cinfo->transport_info; int ret; - ret = mbox_send_message(smbox->chan, xfer); + /* + * The mailbox layer has its own queue. However the mailbox queue + * confuses the per message SCMI timeouts since the clock starts when + * the message is submitted into the mailbox queue. So when multiple + * messages are queued up the clock starts on all messages instead of + * only the one inflight. + */ + mutex_lock(&smbox->chan_lock); - /* mbox_send_message returns non-negative value on success, so reset */ - if (ret > 0) - ret = 0; + ret = mbox_send_message(smbox->chan, xfer); + /* mbox_send_message returns non-negative value on success */ + if (ret < 0) { + mutex_unlock(&smbox->chan_lock); + return ret; + } - return ret; + return 0; } static void mailbox_mark_txdone(struct scmi_chan_info *cinfo, int ret, @@ -295,13 +308,10 @@ static void mailbox_mark_txdone(struct scmi_chan_info *cinfo, int ret, { struct scmi_mailbox *smbox = cinfo->transport_info; - /* - * NOTE: we might prefer not to need the mailbox ticker to manage the - * transfer queueing since the protocol layer queues things by itself. - * Unfortunately, we have to kick the mailbox framework after we have - * received our message. - */ mbox_client_txdone(smbox->chan, ret); + + /* Release channel */ + mutex_unlock(&smbox->chan_lock); } static void mailbox_fetch_response(struct scmi_chan_info *cinfo, diff --git a/drivers/firmware/arm_scmi/optee.c b/drivers/firmware/arm_scmi/optee.c index e123de6e8c67a..aa02392265d32 100644 --- a/drivers/firmware/arm_scmi/optee.c +++ b/drivers/firmware/arm_scmi/optee.c @@ -467,6 +467,13 @@ static int scmi_optee_chan_free(int id, void *p, void *data) struct scmi_chan_info *cinfo = p; struct scmi_optee_channel *channel = cinfo->transport_info; + /* + * Different protocols might share the same chan info, so a previous + * call might have already freed the structure. + */ + if (!channel) + return 0; + mutex_lock(&scmi_optee_private->mu); list_del(&channel->link); mutex_unlock(&scmi_optee_private->mu); diff --git a/drivers/firmware/arm_scmi/raw_mode.c b/drivers/firmware/arm_scmi/raw_mode.c index 130d13e9cd6be..06a764d106f8f 100644 --- a/drivers/firmware/arm_scmi/raw_mode.c +++ b/drivers/firmware/arm_scmi/raw_mode.c @@ -165,6 +165,7 @@ struct scmi_raw_queue { * @wait_wq: A workqueue reference to the created workqueue * @dentry: Top debugfs root dentry for SCMI Raw * @gid: A group ID used for devres accounting + * @max_rx_timeout_ms: Max receive channel timeout value * * Note that this descriptor is passed back to the core after SCMI Raw is * initialized as an opaque handle to use by subsequent SCMI Raw call hooks. @@ -187,6 +188,7 @@ struct scmi_raw_mode_info { struct workqueue_struct *wait_wq; struct dentry *dentry; void *gid; + u32 max_rx_timeout_ms; }; /** @@ -379,7 +381,7 @@ static void scmi_xfer_raw_waiter_enqueue(struct scmi_raw_mode_info *raw, trace_scmi_xfer_response_wait(rw->xfer->transfer_id, rw->xfer->hdr.id, rw->xfer->hdr.protocol_id, rw->xfer->hdr.seq, - raw->desc->max_rx_timeout_ms, + raw->max_rx_timeout_ms, rw->xfer->hdr.poll_completion); mutex_lock(&raw->active_mtx); @@ -437,7 +439,7 @@ static void scmi_xfer_raw_worker(struct work_struct *work) raw = container_of(work, struct scmi_raw_mode_info, waiters_work); dev = raw->handle->dev; - max_tmo = msecs_to_jiffies(raw->desc->max_rx_timeout_ms); + max_tmo = msecs_to_jiffies(raw->max_rx_timeout_ms); do { int ret = 0; @@ -574,7 +576,7 @@ static int scmi_xfer_raw_get_init(struct scmi_raw_mode_info *raw, void *buf, dev_dbg(dev, "...retrying[%d] inflight registration\n", retry); - msleep(raw->desc->max_rx_timeout_ms / + msleep(raw->max_rx_timeout_ms / SCMI_XFER_RAW_MAX_RETRIES); } } while (ret && --retry); @@ -1162,6 +1164,7 @@ static int scmi_raw_mode_setup(struct scmi_raw_mode_info *raw, * @num_chans: The number of entries in @channels * @desc: Reference to the transport operations * @tx_max_msg: Max number of in-flight messages allowed by the transport + * @max_rx_timeout_ms: Max receive channel timeout value * * This function prepare the SCMI Raw stack and creates the debugfs API. * @@ -1170,7 +1173,8 @@ static int scmi_raw_mode_setup(struct scmi_raw_mode_info *raw, void *scmi_raw_mode_init(const struct scmi_handle *handle, struct dentry *top_dentry, int instance_id, u8 *channels, int num_chans, - const struct scmi_desc *desc, int tx_max_msg) + const struct scmi_desc *desc, int tx_max_msg, + u32 max_rx_timeout_ms) { int ret; struct scmi_raw_mode_info *raw; @@ -1188,6 +1192,7 @@ void *scmi_raw_mode_init(const struct scmi_handle *handle, raw->desc = desc; raw->tx_max_msg = tx_max_msg; raw->id = instance_id; + raw->max_rx_timeout_ms = max_rx_timeout_ms; ret = scmi_raw_mode_setup(raw, channels, num_chans); if (ret) { diff --git a/drivers/firmware/arm_scmi/raw_mode.h b/drivers/firmware/arm_scmi/raw_mode.h index 8af756a83fd14..25d4a46261e7d 100644 --- a/drivers/firmware/arm_scmi/raw_mode.h +++ b/drivers/firmware/arm_scmi/raw_mode.h @@ -20,7 +20,8 @@ enum { void *scmi_raw_mode_init(const struct scmi_handle *handle, struct dentry *top_dentry, int instance_id, u8 *channels, int num_chans, - const struct scmi_desc *desc, int tx_max_msg); + const struct scmi_desc *desc, int tx_max_msg, + u32 max_rx_timeout_ms); void scmi_raw_mode_cleanup(void *raw); void scmi_raw_message_report(void *raw, struct scmi_xfer *xfer, diff --git a/drivers/firmware/cirrus/cs_dsp.c b/drivers/firmware/cirrus/cs_dsp.c index a1da7581adb03..e62ffffe5fb8d 100644 --- a/drivers/firmware/cirrus/cs_dsp.c +++ b/drivers/firmware/cirrus/cs_dsp.c @@ -796,6 +796,9 @@ int cs_dsp_coeff_write_ctrl(struct cs_dsp_coeff_ctl *ctl, lockdep_assert_held(&ctl->dsp->pwr_lock); + if (ctl->flags && !(ctl->flags & WMFW_CTL_FLAG_WRITEABLE)) + return -EPERM; + if (len + off * sizeof(u32) > ctl->len) return -EINVAL; diff --git a/drivers/firmware/efi/libstub/tpm.c b/drivers/firmware/efi/libstub/tpm.c index 7acbac16eae0b..95da291c3083e 100644 --- a/drivers/firmware/efi/libstub/tpm.c +++ b/drivers/firmware/efi/libstub/tpm.c @@ -115,7 +115,7 @@ void efi_retrieve_tpm2_eventlog(void) } /* Allocate space for the logs and copy them. */ - status = efi_bs_call(allocate_pool, EFI_LOADER_DATA, + status = efi_bs_call(allocate_pool, EFI_ACPI_RECLAIM_MEMORY, sizeof(*log_tbl) + log_size, (void **)&log_tbl); if (status != EFI_SUCCESS) { diff --git a/drivers/firmware/efi/unaccepted_memory.c b/drivers/firmware/efi/unaccepted_memory.c index 79fb687bb90f9..6c3d84d9bcc16 100644 --- a/drivers/firmware/efi/unaccepted_memory.c +++ b/drivers/firmware/efi/unaccepted_memory.c @@ -3,6 +3,7 @@ #include #include #include +#include #include /* Protects unaccepted memory bitmap and accepting_list */ @@ -148,6 +149,9 @@ void accept_memory(phys_addr_t start, phys_addr_t end) } list_del(&range.list); + + touch_softlockup_watchdog(); + spin_unlock_irqrestore(&unaccepted_memory_lock, flags); } diff --git a/drivers/firmware/tegra/bpmp.c b/drivers/firmware/tegra/bpmp.c index c1590d3aa9cb7..c3a1dc3449617 100644 --- a/drivers/firmware/tegra/bpmp.c +++ b/drivers/firmware/tegra/bpmp.c @@ -24,12 +24,6 @@ #define MSG_RING BIT(1) #define TAG_SZ 32 -static inline struct tegra_bpmp * -mbox_client_to_bpmp(struct mbox_client *client) -{ - return container_of(client, struct tegra_bpmp, mbox.client); -} - static inline const struct tegra_bpmp_ops * channel_to_ops(struct tegra_bpmp_channel *channel) { diff --git a/drivers/gpio/gpio-aspeed.c b/drivers/gpio/gpio-aspeed.c index 58f107194fdaf..76468e6a2899a 100644 --- a/drivers/gpio/gpio-aspeed.c +++ b/drivers/gpio/gpio-aspeed.c @@ -406,6 +406,8 @@ static void __aspeed_gpio_set(struct gpio_chip *gc, unsigned int offset, gpio->dcache[GPIO_BANK(offset)] = reg; iowrite32(reg, addr); + /* Flush write */ + ioread32(addr); } static void aspeed_gpio_set(struct gpio_chip *gc, unsigned int offset, @@ -1191,7 +1193,7 @@ static int __init aspeed_gpio_probe(struct platform_device *pdev) if (!gpio_id) return -EINVAL; - gpio->clk = of_clk_get(pdev->dev.of_node, 0); + gpio->clk = devm_clk_get_enabled(&pdev->dev, NULL); if (IS_ERR(gpio->clk)) { dev_warn(&pdev->dev, "Failed to get clock from devicetree, debouncing disabled\n"); diff --git a/drivers/gpio/gpio-davinci.c b/drivers/gpio/gpio-davinci.c index aa3ce8aa99dc8..75107ede3bf8f 100644 --- a/drivers/gpio/gpio-davinci.c +++ b/drivers/gpio/gpio-davinci.c @@ -289,7 +289,7 @@ static int davinci_gpio_probe(struct platform_device *pdev) * serve as EDMA event triggers. */ -static void gpio_irq_disable(struct irq_data *d) +static void gpio_irq_mask(struct irq_data *d) { struct davinci_gpio_regs __iomem *g = irq2regs(d); uintptr_t mask = (uintptr_t)irq_data_get_irq_handler_data(d); @@ -298,7 +298,7 @@ static void gpio_irq_disable(struct irq_data *d) writel_relaxed(mask, &g->clr_rising); } -static void gpio_irq_enable(struct irq_data *d) +static void gpio_irq_unmask(struct irq_data *d) { struct davinci_gpio_regs __iomem *g = irq2regs(d); uintptr_t mask = (uintptr_t)irq_data_get_irq_handler_data(d); @@ -324,8 +324,8 @@ static int gpio_irq_type(struct irq_data *d, unsigned trigger) static struct irq_chip gpio_irqchip = { .name = "GPIO", - .irq_enable = gpio_irq_enable, - .irq_disable = gpio_irq_disable, + .irq_unmask = gpio_irq_unmask, + .irq_mask = gpio_irq_mask, .irq_set_type = gpio_irq_type, .flags = IRQCHIP_SET_TYPE_MASKED | IRQCHIP_SKIP_SET_WAKE, }; diff --git a/drivers/gpio/gpio-rockchip.c b/drivers/gpio/gpio-rockchip.c index b35b9604413f0..caeb3bdc78f8d 100644 --- a/drivers/gpio/gpio-rockchip.c +++ b/drivers/gpio/gpio-rockchip.c @@ -713,6 +713,7 @@ static int rockchip_gpio_probe(struct platform_device *pdev) return -ENODEV; pctldev = of_pinctrl_get(pctlnp); + of_node_put(pctlnp); if (!pctldev) return -EPROBE_DEFER; diff --git a/drivers/gpio/gpio-zynqmp-modepin.c b/drivers/gpio/gpio-zynqmp-modepin.c index a0d69387c1532..2f3c9ebfa78d1 100644 --- a/drivers/gpio/gpio-zynqmp-modepin.c +++ b/drivers/gpio/gpio-zynqmp-modepin.c @@ -146,6 +146,7 @@ static const struct of_device_id modepin_platform_id[] = { { .compatible = "xlnx,zynqmp-gpio-modepin", }, { } }; +MODULE_DEVICE_TABLE(of, modepin_platform_id); static struct platform_driver modepin_platform_driver = { .driver = { diff --git a/drivers/gpio/gpiolib-cdev.c b/drivers/gpio/gpiolib-cdev.c index d526a4c91e82e..545998e9f6ad2 100644 --- a/drivers/gpio/gpiolib-cdev.c +++ b/drivers/gpio/gpiolib-cdev.c @@ -1565,12 +1565,14 @@ static long linereq_set_config_unlocked(struct linereq *lr, line = &lr->lines[i]; desc = lr->lines[i].desc; flags = gpio_v2_line_config_flags(lc, i); - gpio_v2_line_config_flags_to_desc_flags(flags, &desc->flags); - edflags = flags & GPIO_V2_LINE_EDGE_DETECTOR_FLAGS; /* - * Lines have to be requested explicitly for input - * or output, else the line will be treated "as is". + * Lines not explicitly reconfigured as input or output + * are left unchanged. */ + if (!(flags & GPIO_V2_LINE_DIRECTION_FLAGS)) + continue; + gpio_v2_line_config_flags_to_desc_flags(flags, &desc->flags); + edflags = flags & GPIO_V2_LINE_EDGE_DETECTOR_FLAGS; if (flags & GPIO_V2_LINE_FLAG_OUTPUT) { int val = gpio_v2_line_config_output_value(lc, i); @@ -1578,7 +1580,7 @@ static long linereq_set_config_unlocked(struct linereq *lr, ret = gpiod_direction_output(desc, val); if (ret) return ret; - } else if (flags & GPIO_V2_LINE_FLAG_INPUT) { + } else { ret = gpiod_direction_input(desc); if (ret) return ret; diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c index 25d5fda5b243e..af6c6d89e63af 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c @@ -335,15 +335,15 @@ int amdgpu_amdkfd_alloc_gtt_mem(struct amdgpu_device *adev, size_t size, return r; } -void amdgpu_amdkfd_free_gtt_mem(struct amdgpu_device *adev, void *mem_obj) +void amdgpu_amdkfd_free_gtt_mem(struct amdgpu_device *adev, void **mem_obj) { - struct amdgpu_bo *bo = (struct amdgpu_bo *) mem_obj; + struct amdgpu_bo **bo = (struct amdgpu_bo **) mem_obj; - amdgpu_bo_reserve(bo, true); - amdgpu_bo_kunmap(bo); - amdgpu_bo_unpin(bo); - amdgpu_bo_unreserve(bo); - amdgpu_bo_unref(&(bo)); + amdgpu_bo_reserve(*bo, true); + amdgpu_bo_kunmap(*bo); + amdgpu_bo_unpin(*bo); + amdgpu_bo_unreserve(*bo); + amdgpu_bo_unref(bo); } int amdgpu_amdkfd_alloc_gws(struct amdgpu_device *adev, size_t size, diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h index db5b1c6beba75..3134e6ad81d1d 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h @@ -221,7 +221,7 @@ int amdgpu_amdkfd_evict_userptr(struct mmu_interval_notifier *mni, int amdgpu_amdkfd_alloc_gtt_mem(struct amdgpu_device *adev, size_t size, void **mem_obj, uint64_t *gpu_addr, void **cpu_ptr, bool mqd_gfx9); -void amdgpu_amdkfd_free_gtt_mem(struct amdgpu_device *adev, void *mem_obj); +void amdgpu_amdkfd_free_gtt_mem(struct amdgpu_device *adev, void **mem_obj); int amdgpu_amdkfd_alloc_gws(struct amdgpu_device *adev, size_t size, void **mem_obj); void amdgpu_amdkfd_free_gws(struct amdgpu_device *adev, void *mem_obj); diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c index 61668a784315f..13c97ba7a820b 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c @@ -263,6 +263,10 @@ static int amdgpu_cs_pass1(struct amdgpu_cs_parser *p, if (size < sizeof(struct drm_amdgpu_bo_list_in)) goto free_partial_kdata; + /* Only a single BO list is allowed to simplify handling. */ + if (p->bo_list) + goto free_partial_kdata; + ret = amdgpu_cs_p1_bo_handles(p, p->chunks[i].kdata); if (ret) goto free_partial_kdata; @@ -1096,6 +1100,21 @@ static int amdgpu_cs_vm_handling(struct amdgpu_cs_parser *p) unsigned int i; int r; + /* + * We can't use gang submit on with reserved VMIDs when the VM changes + * can't be invalidated by more than one engine at the same time. + */ + if (p->gang_size > 1 && !p->adev->vm_manager.concurrent_flush) { + for (i = 0; i < p->gang_size; ++i) { + struct drm_sched_entity *entity = p->entities[i]; + struct drm_gpu_scheduler *sched = entity->rq->sched; + struct amdgpu_ring *ring = to_amdgpu_ring(sched); + + if (amdgpu_vmid_uses_reserved(vm, ring->vm_hub)) + return -EINVAL; + } + } + r = amdgpu_vm_clear_freed(adev, vm, NULL); if (r) return r; diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_display.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_display.c index 578aeba49ea8e..5fbb9caa7415f 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_display.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_display.c @@ -909,8 +909,7 @@ static int check_tiling_flags_gfx6(struct amdgpu_framebuffer *afb) { u64 micro_tile_mode; - /* Zero swizzle mode means linear */ - if (AMDGPU_TILING_GET(afb->tiling_flags, SWIZZLE_MODE) == 0) + if (AMDGPU_TILING_GET(afb->tiling_flags, ARRAY_MODE) == 1) /* LINEAR_ALIGNED */ return 0; micro_tile_mode = AMDGPU_TILING_GET(afb->tiling_flags, MICRO_TILE_MODE); @@ -1034,6 +1033,30 @@ static int amdgpu_display_verify_sizes(struct amdgpu_framebuffer *rfb) block_width = 256 / format_info->cpp[i]; block_height = 1; block_size_log2 = 8; + } else if (AMD_FMT_MOD_GET(TILE_VERSION, modifier) >= AMD_FMT_MOD_TILE_VER_GFX12) { + int swizzle = AMD_FMT_MOD_GET(TILE, modifier); + + switch (swizzle) { + case AMD_FMT_MOD_TILE_GFX12_256B_2D: + block_size_log2 = 8; + break; + case AMD_FMT_MOD_TILE_GFX12_4K_2D: + block_size_log2 = 12; + break; + case AMD_FMT_MOD_TILE_GFX12_64K_2D: + block_size_log2 = 16; + break; + case AMD_FMT_MOD_TILE_GFX12_256K_2D: + block_size_log2 = 18; + break; + default: + drm_dbg_kms(rfb->base.dev, + "Gfx12 swizzle mode with unknown block size: %d\n", swizzle); + return -EINVAL; + } + + get_block_dimensions(block_size_log2, format_info->cpp[i], + &block_width, &block_height); } else { int swizzle = AMD_FMT_MOD_GET(TILE, modifier); @@ -1069,7 +1092,8 @@ static int amdgpu_display_verify_sizes(struct amdgpu_framebuffer *rfb) return ret; } - if (AMD_FMT_MOD_GET(DCC, modifier)) { + if (AMD_FMT_MOD_GET(TILE_VERSION, modifier) <= AMD_FMT_MOD_TILE_VER_GFX11 && + AMD_FMT_MOD_GET(DCC, modifier)) { if (AMD_FMT_MOD_GET(DCC_RETILE, modifier)) { block_size_log2 = get_dcc_block_size(modifier, false, false); get_block_dimensions(block_size_log2 + 8, format_info->cpp[0], diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_gfx.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_gfx.c index 0ca51df46cc0d..e7b053898f9e9 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_gfx.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_gfx.c @@ -793,8 +793,11 @@ int amdgpu_gfx_ras_late_init(struct amdgpu_device *adev, struct ras_common_if *r int r; if (amdgpu_ras_is_supported(adev, ras_block->block)) { - if (!amdgpu_persistent_edc_harvesting_supported(adev)) - amdgpu_ras_reset_error_status(adev, AMDGPU_RAS_BLOCK__GFX); + if (!amdgpu_persistent_edc_harvesting_supported(adev)) { + r = amdgpu_ras_reset_error_status(adev, AMDGPU_RAS_BLOCK__GFX); + if (r) + return r; + } r = amdgpu_ras_block_late_init(adev, ras_block); if (r) @@ -938,7 +941,10 @@ uint32_t amdgpu_kiq_rreg(struct amdgpu_device *adev, uint32_t reg) pr_err("critical bug! too many kiq readers\n"); goto failed_unlock; } - amdgpu_ring_alloc(ring, 32); + r = amdgpu_ring_alloc(ring, 32); + if (r) + goto failed_unlock; + amdgpu_ring_emit_rreg(ring, reg, reg_val_offs); r = amdgpu_fence_emit_polling(ring, &seq, MAX_KIQ_REG_WAIT); if (r) @@ -1004,7 +1010,10 @@ void amdgpu_kiq_wreg(struct amdgpu_device *adev, uint32_t reg, uint32_t v) } spin_lock_irqsave(&kiq->ring_lock, flags); - amdgpu_ring_alloc(ring, 32); + r = amdgpu_ring_alloc(ring, 32); + if (r) + goto failed_unlock; + amdgpu_ring_emit_wreg(ring, reg, v); r = amdgpu_fence_emit_polling(ring, &seq, MAX_KIQ_REG_WAIT); if (r) @@ -1040,6 +1049,7 @@ void amdgpu_kiq_wreg(struct amdgpu_device *adev, uint32_t reg, uint32_t v) failed_undo: amdgpu_ring_undo(ring); +failed_unlock: spin_unlock_irqrestore(&kiq->ring_lock, flags); failed_kiq_write: dev_err(adev->dev, "failed to write reg:%x\n", reg); diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ids.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ids.c index ff1ea99292fbf..69dfc699d78b0 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ids.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ids.c @@ -409,7 +409,7 @@ int amdgpu_vmid_grab(struct amdgpu_vm *vm, struct amdgpu_ring *ring, if (r || !idle) goto error; - if (vm->reserved_vmid[vmhub] || (enforce_isolation && (vmhub == AMDGPU_GFXHUB(0)))) { + if (amdgpu_vmid_uses_reserved(vm, vmhub)) { r = amdgpu_vmid_grab_reserved(vm, ring, job, &id, fence); if (r || !id) goto error; @@ -459,6 +459,19 @@ int amdgpu_vmid_grab(struct amdgpu_vm *vm, struct amdgpu_ring *ring, return r; } +/* + * amdgpu_vmid_uses_reserved - check if a VM will use a reserved VMID + * @vm: the VM to check + * @vmhub: the VMHUB which will be used + * + * Returns: True if the VM will use a reserved VMID. + */ +bool amdgpu_vmid_uses_reserved(struct amdgpu_vm *vm, unsigned int vmhub) +{ + return vm->reserved_vmid[vmhub] || + (enforce_isolation && (vmhub == AMDGPU_GFXHUB(0))); +} + int amdgpu_vmid_alloc_reserved(struct amdgpu_device *adev, unsigned vmhub) { diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ids.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_ids.h index fa8c42c83d5d2..240fa67512602 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ids.h +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ids.h @@ -78,6 +78,7 @@ void amdgpu_pasid_free_delayed(struct dma_resv *resv, bool amdgpu_vmid_had_gpu_reset(struct amdgpu_device *adev, struct amdgpu_vmid *id); +bool amdgpu_vmid_uses_reserved(struct amdgpu_vm *vm, unsigned int vmhub); int amdgpu_vmid_alloc_reserved(struct amdgpu_device *adev, unsigned vmhub); void amdgpu_vmid_free_reserved(struct amdgpu_device *adev, diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c index 58dab4f73a9a2..5797055b1148f 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c @@ -43,6 +43,7 @@ #include "amdgpu_gem.h" #include "amdgpu_display.h" #include "amdgpu_ras.h" +#include "amdgpu_reset.h" #include "amd_pcie.h" void amdgpu_unregister_gpu_instance(struct amdgpu_device *adev) @@ -722,6 +723,7 @@ int amdgpu_info_ioctl(struct drm_device *dev, void *data, struct drm_file *filp) ? -EFAULT : 0; } case AMDGPU_INFO_READ_MMR_REG: { + int ret = 0; unsigned int n, alloc_size; uint32_t *regs; unsigned int se_num = (info->read_mmr_reg.instance >> @@ -731,24 +733,37 @@ int amdgpu_info_ioctl(struct drm_device *dev, void *data, struct drm_file *filp) AMDGPU_INFO_MMR_SH_INDEX_SHIFT) & AMDGPU_INFO_MMR_SH_INDEX_MASK; + if (!down_read_trylock(&adev->reset_domain->sem)) + return -ENOENT; + /* set full masks if the userspace set all bits * in the bitfields */ - if (se_num == AMDGPU_INFO_MMR_SE_INDEX_MASK) + if (se_num == AMDGPU_INFO_MMR_SE_INDEX_MASK) { se_num = 0xffffffff; - else if (se_num >= AMDGPU_GFX_MAX_SE) - return -EINVAL; - if (sh_num == AMDGPU_INFO_MMR_SH_INDEX_MASK) + } else if (se_num >= AMDGPU_GFX_MAX_SE) { + ret = -EINVAL; + goto out; + } + + if (sh_num == AMDGPU_INFO_MMR_SH_INDEX_MASK) { sh_num = 0xffffffff; - else if (sh_num >= AMDGPU_GFX_MAX_SH_PER_SE) - return -EINVAL; + } else if (sh_num >= AMDGPU_GFX_MAX_SH_PER_SE) { + ret = -EINVAL; + goto out; + } - if (info->read_mmr_reg.count > 128) - return -EINVAL; + if (info->read_mmr_reg.count > 128) { + ret = -EINVAL; + goto out; + } regs = kmalloc_array(info->read_mmr_reg.count, sizeof(*regs), GFP_KERNEL); - if (!regs) - return -ENOMEM; + if (!regs) { + ret = -ENOMEM; + goto out; + } + alloc_size = info->read_mmr_reg.count * sizeof(*regs); amdgpu_gfx_off_ctrl(adev, false); @@ -760,13 +775,17 @@ int amdgpu_info_ioctl(struct drm_device *dev, void *data, struct drm_file *filp) info->read_mmr_reg.dword_offset + i); kfree(regs); amdgpu_gfx_off_ctrl(adev, true); - return -EFAULT; + ret = -EFAULT; + goto out; } } amdgpu_gfx_off_ctrl(adev, true); n = copy_to_user(out, regs, min(size, alloc_size)); kfree(regs); - return n ? -EFAULT : 0; + ret = (n ? -EFAULT : 0); +out: + up_read(&adev->reset_domain->sem); + return ret; } case AMDGPU_INFO_DEV_INFO: { struct drm_amdgpu_info_device *dev_info; diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c index d9dc675b46aed..22575422ca7ec 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c @@ -137,8 +137,10 @@ int amdgpu_virt_request_full_gpu(struct amdgpu_device *adev, bool init) if (virt->ops && virt->ops->req_full_gpu) { r = virt->ops->req_full_gpu(adev, init); - if (r) + if (r) { + adev->no_hw_access = true; return r; + } adev->virt.caps &= ~AMDGPU_SRIOV_CAPS_RUNTIME; } diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_xcp.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_xcp.h index 9a1036aeec2a0..9142238e7791a 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_xcp.h +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_xcp.h @@ -179,6 +179,6 @@ amdgpu_get_next_xcp(struct amdgpu_xcp_mgr *xcp_mgr, int *from) #define for_each_xcp(xcp_mgr, xcp, i) \ for (i = 0, xcp = amdgpu_get_next_xcp(xcp_mgr, &i); xcp; \ - xcp = amdgpu_get_next_xcp(xcp_mgr, &i)) + ++i, xcp = amdgpu_get_next_xcp(xcp_mgr, &i)) #endif diff --git a/drivers/gpu/drm/amd/amdgpu/amdgv_sriovmsg.h b/drivers/gpu/drm/amd/amdgpu/amdgv_sriovmsg.h index 104a5ad8397da..198687545407e 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgv_sriovmsg.h +++ b/drivers/gpu/drm/amd/amdgpu/amdgv_sriovmsg.h @@ -209,7 +209,7 @@ struct amd_sriov_msg_pf2vf_info { uint32_t pcie_atomic_ops_support_flags; /* reserved */ uint32_t reserved[256 - AMD_SRIOV_MSG_PF2VF_INFO_FILLED_SIZE]; -}; +} __packed; struct amd_sriov_msg_vf2pf_info_header { /* the total structure size in byte */ @@ -267,7 +267,7 @@ struct amd_sriov_msg_vf2pf_info { /* reserved */ uint32_t reserved[256 - AMD_SRIOV_MSG_VF2PF_INFO_FILLED_SIZE]; -}; +} __packed; /* mailbox message send from guest to host */ enum amd_sriov_mailbox_request_message { diff --git a/drivers/gpu/drm/amd/amdgpu/atombios_encoders.c b/drivers/gpu/drm/amd/amdgpu/atombios_encoders.c index d95b2dc780634..157e898dc3820 100644 --- a/drivers/gpu/drm/amd/amdgpu/atombios_encoders.c +++ b/drivers/gpu/drm/amd/amdgpu/atombios_encoders.c @@ -2065,26 +2065,29 @@ amdgpu_atombios_encoder_get_lcd_info(struct amdgpu_encoder *encoder) fake_edid_record = (ATOM_FAKE_EDID_PATCH_RECORD *)record; if (fake_edid_record->ucFakeEDIDLength) { struct edid *edid; - int edid_size = - max((int)EDID_LENGTH, (int)fake_edid_record->ucFakeEDIDLength); - edid = kmalloc(edid_size, GFP_KERNEL); + int edid_size; + + if (fake_edid_record->ucFakeEDIDLength == 128) + edid_size = fake_edid_record->ucFakeEDIDLength; + else + edid_size = fake_edid_record->ucFakeEDIDLength * 128; + edid = kmemdup(&fake_edid_record->ucFakeEDIDString[0], + edid_size, GFP_KERNEL); if (edid) { - memcpy((u8 *)edid, (u8 *)&fake_edid_record->ucFakeEDIDString[0], - fake_edid_record->ucFakeEDIDLength); - if (drm_edid_is_valid(edid)) { adev->mode_info.bios_hardcoded_edid = edid; adev->mode_info.bios_hardcoded_edid_size = edid_size; - } else + } else { kfree(edid); + } } + record += struct_size(fake_edid_record, + ucFakeEDIDString, + edid_size); + } else { + /* empty fake edid record must be 3 bytes long */ + record += sizeof(ATOM_FAKE_EDID_PATCH_RECORD) + 1; } - record += fake_edid_record->ucFakeEDIDLength ? - struct_size(fake_edid_record, - ucFakeEDIDString, - fake_edid_record->ucFakeEDIDLength) : - /* empty fake edid record must be 3 bytes long */ - sizeof(ATOM_FAKE_EDID_PATCH_RECORD) + 1; break; case LCD_PANEL_RESOLUTION_RECORD_TYPE: panel_res_record = (ATOM_PANEL_RESOLUTION_PATCH_RECORD *)record; diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v10_0.c b/drivers/gpu/drm/amd/amdgpu/gfx_v10_0.c index cd594b92c6129..53c99bc6abb33 100644 --- a/drivers/gpu/drm/amd/amdgpu/gfx_v10_0.c +++ b/drivers/gpu/drm/amd/amdgpu/gfx_v10_0.c @@ -8748,7 +8748,9 @@ static void gfx_v10_0_ring_soft_recovery(struct amdgpu_ring *ring, value = REG_SET_FIELD(value, SQ_CMD, MODE, 0x01); value = REG_SET_FIELD(value, SQ_CMD, CHECK_VMID, 1); value = REG_SET_FIELD(value, SQ_CMD, VM_ID, vmid); + amdgpu_gfx_rlc_enter_safe_mode(adev, 0); WREG32_SOC15(GC, 0, mmSQ_CMD, value); + amdgpu_gfx_rlc_exit_safe_mode(adev, 0); } static void diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v11_0.c b/drivers/gpu/drm/amd/amdgpu/gfx_v11_0.c index c81e98f0d17ff..54ec9b32562c2 100644 --- a/drivers/gpu/drm/amd/amdgpu/gfx_v11_0.c +++ b/drivers/gpu/drm/amd/amdgpu/gfx_v11_0.c @@ -4269,11 +4269,11 @@ static int gfx_v11_0_hw_init(void *handle) /* RLC autoload sequence 1: Program rlc ram */ if (adev->gfx.imu.funcs->program_rlc_ram) adev->gfx.imu.funcs->program_rlc_ram(adev); + /* rlc autoload firmware */ + r = gfx_v11_0_rlc_backdoor_autoload_enable(adev); + if (r) + return r; } - /* rlc autoload firmware */ - r = gfx_v11_0_rlc_backdoor_autoload_enable(adev); - if (r) - return r; } else { if (adev->firmware.load_type == AMDGPU_FW_LOAD_DIRECT) { if (adev->gfx.imu.funcs && (amdgpu_dpm > 0)) { @@ -5701,7 +5701,9 @@ static void gfx_v11_0_ring_soft_recovery(struct amdgpu_ring *ring, value = REG_SET_FIELD(value, SQ_CMD, MODE, 0x01); value = REG_SET_FIELD(value, SQ_CMD, CHECK_VMID, 1); value = REG_SET_FIELD(value, SQ_CMD, VM_ID, vmid); + amdgpu_gfx_rlc_enter_safe_mode(adev, 0); WREG32_SOC15(GC, 0, regSQ_CMD, value); + amdgpu_gfx_rlc_exit_safe_mode(adev, 0); } static void diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c b/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c index 8168836a08d2e..895060f6948f3 100644 --- a/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c +++ b/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c @@ -1172,6 +1172,10 @@ static const struct amdgpu_gfxoff_quirk amdgpu_gfxoff_quirk_list[] = { { 0x1002, 0x15dd, 0x1002, 0x15dd, 0xc6 }, /* Apple MacBook Pro (15-inch, 2019) Radeon Pro Vega 20 4 GB */ { 0x1002, 0x69af, 0x106b, 0x019a, 0xc0 }, + /* https://bbs.openkylin.top/t/topic/171497 */ + { 0x1002, 0x15d8, 0x19e5, 0x3e14, 0xc2 }, + /* HP 705G4 DM with R5 2400G */ + { 0x1002, 0x15dd, 0x103c, 0x8464, 0xd6 }, { 0, 0, 0, 0, 0 }, }; @@ -5705,7 +5709,9 @@ static void gfx_v9_0_ring_soft_recovery(struct amdgpu_ring *ring, unsigned vmid) value = REG_SET_FIELD(value, SQ_CMD, MODE, 0x01); value = REG_SET_FIELD(value, SQ_CMD, CHECK_VMID, 1); value = REG_SET_FIELD(value, SQ_CMD, VM_ID, vmid); + amdgpu_gfx_rlc_enter_safe_mode(adev, 0); WREG32_SOC15(GC, 0, mmSQ_CMD, value); + amdgpu_gfx_rlc_exit_safe_mode(adev, 0); } static void gfx_v9_0_set_gfx_eop_interrupt_state(struct amdgpu_device *adev, diff --git a/drivers/gpu/drm/amd/amdgpu/ih_v6_0.c b/drivers/gpu/drm/amd/amdgpu/ih_v6_0.c index f432dc72df6a9..725b1a585088d 100644 --- a/drivers/gpu/drm/amd/amdgpu/ih_v6_0.c +++ b/drivers/gpu/drm/amd/amdgpu/ih_v6_0.c @@ -135,6 +135,34 @@ static int ih_v6_0_toggle_ring_interrupts(struct amdgpu_device *adev, tmp = RREG32(ih_regs->ih_rb_cntl); tmp = REG_SET_FIELD(tmp, IH_RB_CNTL, RB_ENABLE, (enable ? 1 : 0)); + + if (enable) { + /* Unset the CLEAR_OVERFLOW bit to make sure the next step + * is switching the bit from 0 to 1 + */ + tmp = REG_SET_FIELD(tmp, IH_RB_CNTL, WPTR_OVERFLOW_CLEAR, 0); + if (amdgpu_sriov_vf(adev) && amdgpu_sriov_reg_indirect_ih(adev)) { + if (psp_reg_program(&adev->psp, ih_regs->psp_reg_id, tmp)) + return -ETIMEDOUT; + } else { + WREG32_NO_KIQ(ih_regs->ih_rb_cntl, tmp); + } + + /* Clear RB_OVERFLOW bit */ + tmp = REG_SET_FIELD(tmp, IH_RB_CNTL, WPTR_OVERFLOW_CLEAR, 1); + if (amdgpu_sriov_vf(adev) && amdgpu_sriov_reg_indirect_ih(adev)) { + if (psp_reg_program(&adev->psp, ih_regs->psp_reg_id, tmp)) + return -ETIMEDOUT; + } else { + WREG32_NO_KIQ(ih_regs->ih_rb_cntl, tmp); + } + + /* Unset the CLEAR_OVERFLOW bit immediately so new overflows + * can be detected. + */ + tmp = REG_SET_FIELD(tmp, IH_RB_CNTL, WPTR_OVERFLOW_CLEAR, 0); + } + /* enable_intr field is only valid in ring0 */ if (ih == &adev->irq.ih) tmp = REG_SET_FIELD(tmp, IH_RB_CNTL, ENABLE_INTR, (enable ? 1 : 0)); diff --git a/drivers/gpu/drm/amd/amdgpu/jpeg_v1_0.c b/drivers/gpu/drm/amd/amdgpu/jpeg_v1_0.c index 77595e9622da3..7ac0228fe532e 100644 --- a/drivers/gpu/drm/amd/amdgpu/jpeg_v1_0.c +++ b/drivers/gpu/drm/amd/amdgpu/jpeg_v1_0.c @@ -23,6 +23,7 @@ #include "amdgpu.h" #include "amdgpu_jpeg.h" +#include "amdgpu_cs.h" #include "soc15.h" #include "soc15d.h" #include "vcn_v1_0.h" @@ -34,6 +35,9 @@ static void jpeg_v1_0_set_dec_ring_funcs(struct amdgpu_device *adev); static void jpeg_v1_0_set_irq_funcs(struct amdgpu_device *adev); static void jpeg_v1_0_ring_begin_use(struct amdgpu_ring *ring); +static int jpeg_v1_dec_ring_parse_cs(struct amdgpu_cs_parser *parser, + struct amdgpu_job *job, + struct amdgpu_ib *ib); static void jpeg_v1_0_decode_ring_patch_wreg(struct amdgpu_ring *ring, uint32_t *ptr, uint32_t reg_offset, uint32_t val) { @@ -300,7 +304,10 @@ static void jpeg_v1_0_decode_ring_emit_ib(struct amdgpu_ring *ring, amdgpu_ring_write(ring, PACKETJ(SOC15_REG_OFFSET(JPEG, 0, mmUVD_LMI_JRBC_IB_VMID), 0, 0, PACKETJ_TYPE0)); - amdgpu_ring_write(ring, (vmid | (vmid << 4))); + if (ring->funcs->parse_cs) + amdgpu_ring_write(ring, 0); + else + amdgpu_ring_write(ring, (vmid | (vmid << 4))); amdgpu_ring_write(ring, PACKETJ(SOC15_REG_OFFSET(JPEG, 0, mmUVD_LMI_JPEG_VMID), 0, 0, PACKETJ_TYPE0)); @@ -554,6 +561,7 @@ static const struct amdgpu_ring_funcs jpeg_v1_0_decode_ring_vm_funcs = { .get_rptr = jpeg_v1_0_decode_ring_get_rptr, .get_wptr = jpeg_v1_0_decode_ring_get_wptr, .set_wptr = jpeg_v1_0_decode_ring_set_wptr, + .parse_cs = jpeg_v1_dec_ring_parse_cs, .emit_frame_size = 6 + 6 + /* hdp invalidate / flush */ SOC15_FLUSH_GPU_TLB_NUM_WREG * 6 + @@ -612,3 +620,69 @@ static void jpeg_v1_0_ring_begin_use(struct amdgpu_ring *ring) vcn_v1_0_set_pg_for_begin_use(ring, set_clocks); } + +/** + * jpeg_v1_dec_ring_parse_cs - command submission parser + * + * @parser: Command submission parser context + * @job: the job to parse + * @ib: the IB to parse + * + * Parse the command stream, return -EINVAL for invalid packet, + * 0 otherwise + */ +static int jpeg_v1_dec_ring_parse_cs(struct amdgpu_cs_parser *parser, + struct amdgpu_job *job, + struct amdgpu_ib *ib) +{ + u32 i, reg, res, cond, type; + int ret = 0; + struct amdgpu_device *adev = parser->adev; + + for (i = 0; i < ib->length_dw ; i += 2) { + reg = CP_PACKETJ_GET_REG(ib->ptr[i]); + res = CP_PACKETJ_GET_RES(ib->ptr[i]); + cond = CP_PACKETJ_GET_COND(ib->ptr[i]); + type = CP_PACKETJ_GET_TYPE(ib->ptr[i]); + + if (res || cond != PACKETJ_CONDITION_CHECK0) /* only allow 0 for now */ + return -EINVAL; + + if (reg >= JPEG_V1_REG_RANGE_START && reg <= JPEG_V1_REG_RANGE_END) + continue; + + switch (type) { + case PACKETJ_TYPE0: + if (reg != JPEG_V1_LMI_JPEG_WRITE_64BIT_BAR_HIGH && + reg != JPEG_V1_LMI_JPEG_WRITE_64BIT_BAR_LOW && + reg != JPEG_V1_LMI_JPEG_READ_64BIT_BAR_HIGH && + reg != JPEG_V1_LMI_JPEG_READ_64BIT_BAR_LOW && + reg != JPEG_V1_REG_CTX_INDEX && + reg != JPEG_V1_REG_CTX_DATA) { + ret = -EINVAL; + } + break; + case PACKETJ_TYPE1: + if (reg != JPEG_V1_REG_CTX_DATA) + ret = -EINVAL; + break; + case PACKETJ_TYPE3: + if (reg != JPEG_V1_REG_SOFT_RESET) + ret = -EINVAL; + break; + case PACKETJ_TYPE6: + if (ib->ptr[i] != CP_PACKETJ_NOP) + ret = -EINVAL; + break; + default: + ret = -EINVAL; + } + + if (ret) { + dev_err(adev->dev, "Invalid packet [0x%08x]!\n", ib->ptr[i]); + break; + } + } + + return ret; +} diff --git a/drivers/gpu/drm/amd/amdgpu/jpeg_v1_0.h b/drivers/gpu/drm/amd/amdgpu/jpeg_v1_0.h index bbf33a6a39729..9654d22e03763 100644 --- a/drivers/gpu/drm/amd/amdgpu/jpeg_v1_0.h +++ b/drivers/gpu/drm/amd/amdgpu/jpeg_v1_0.h @@ -29,4 +29,15 @@ int jpeg_v1_0_sw_init(void *handle); void jpeg_v1_0_sw_fini(void *handle); void jpeg_v1_0_start(struct amdgpu_device *adev, int mode); +#define JPEG_V1_REG_RANGE_START 0x8000 +#define JPEG_V1_REG_RANGE_END 0x803f + +#define JPEG_V1_LMI_JPEG_WRITE_64BIT_BAR_HIGH 0x8238 +#define JPEG_V1_LMI_JPEG_WRITE_64BIT_BAR_LOW 0x8239 +#define JPEG_V1_LMI_JPEG_READ_64BIT_BAR_HIGH 0x825a +#define JPEG_V1_LMI_JPEG_READ_64BIT_BAR_LOW 0x825b +#define JPEG_V1_REG_CTX_INDEX 0x8328 +#define JPEG_V1_REG_CTX_DATA 0x8329 +#define JPEG_V1_REG_SOFT_RESET 0x83a0 + #endif /*__JPEG_V1_0_H__*/ diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_chardev.c b/drivers/gpu/drm/amd/amdkfd/kfd_chardev.c index 9d10530283705..19d46be639429 100644 --- a/drivers/gpu/drm/amd/amdkfd/kfd_chardev.c +++ b/drivers/gpu/drm/amd/amdkfd/kfd_chardev.c @@ -417,7 +417,7 @@ static int kfd_ioctl_create_queue(struct file *filep, struct kfd_process *p, err_create_queue: if (wptr_bo) - amdgpu_amdkfd_free_gtt_mem(dev->adev, wptr_bo); + amdgpu_amdkfd_free_gtt_mem(dev->adev, (void **)&wptr_bo); err_wptr_map_gart: err_bind_process: err_pdd: diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_device.c b/drivers/gpu/drm/amd/amdkfd/kfd_device.c index 0c94bdfadaabf..9d0b0bf70ad1e 100644 --- a/drivers/gpu/drm/amd/amdkfd/kfd_device.c +++ b/drivers/gpu/drm/amd/amdkfd/kfd_device.c @@ -838,7 +838,7 @@ bool kgd2kfd_device_init(struct kfd_dev *kfd, kfd_doorbell_error: kfd_gtt_sa_fini(kfd); kfd_gtt_sa_init_error: - amdgpu_amdkfd_free_gtt_mem(kfd->adev, kfd->gtt_mem); + amdgpu_amdkfd_free_gtt_mem(kfd->adev, &kfd->gtt_mem); alloc_gtt_mem_failure: dev_err(kfd_device, "device %x:%x NOT added due to errors\n", @@ -856,7 +856,7 @@ void kgd2kfd_device_exit(struct kfd_dev *kfd) kfd_doorbell_fini(kfd); ida_destroy(&kfd->doorbell_ida); kfd_gtt_sa_fini(kfd); - amdgpu_amdkfd_free_gtt_mem(kfd->adev, kfd->gtt_mem); + amdgpu_amdkfd_free_gtt_mem(kfd->adev, &kfd->gtt_mem); } kfree(kfd); diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c b/drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c index 60d98301ef041..4d9a406925e18 100644 --- a/drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c +++ b/drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c @@ -2610,7 +2610,7 @@ static void deallocate_hiq_sdma_mqd(struct kfd_node *dev, { WARN(!mqd, "No hiq sdma mqd trunk to free"); - amdgpu_amdkfd_free_gtt_mem(dev->adev, mqd->gtt_mem); + amdgpu_amdkfd_free_gtt_mem(dev->adev, &mqd->gtt_mem); } void device_queue_manager_uninit(struct device_queue_manager *dqm) diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager.c b/drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager.c index 447829c22295c..4c3f379803117 100644 --- a/drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager.c +++ b/drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager.c @@ -223,7 +223,7 @@ void kfd_free_mqd_cp(struct mqd_manager *mm, void *mqd, struct kfd_mem_obj *mqd_mem_obj) { if (mqd_mem_obj->gtt_mem) { - amdgpu_amdkfd_free_gtt_mem(mm->dev->adev, mqd_mem_obj->gtt_mem); + amdgpu_amdkfd_free_gtt_mem(mm->dev->adev, &mqd_mem_obj->gtt_mem); kfree(mqd_mem_obj); } else { kfd_gtt_sa_free(mm->dev, mqd_mem_obj); diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_process.c b/drivers/gpu/drm/amd/amdkfd/kfd_process.c index d98e45aec76b4..43f520b379670 100644 --- a/drivers/gpu/drm/amd/amdkfd/kfd_process.c +++ b/drivers/gpu/drm/amd/amdkfd/kfd_process.c @@ -1047,7 +1047,7 @@ static void kfd_process_destroy_pdds(struct kfd_process *p) if (pdd->dev->kfd->shared_resources.enable_mes) amdgpu_amdkfd_free_gtt_mem(pdd->dev->adev, - pdd->proc_ctx_bo); + &pdd->proc_ctx_bo); /* * before destroying pdd, make sure to report availability * for auto suspend diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_process_queue_manager.c b/drivers/gpu/drm/amd/amdkfd/kfd_process_queue_manager.c index 8aca92624a77e..0583af4e84fa3 100644 --- a/drivers/gpu/drm/amd/amdkfd/kfd_process_queue_manager.c +++ b/drivers/gpu/drm/amd/amdkfd/kfd_process_queue_manager.c @@ -199,9 +199,9 @@ static void pqm_clean_queue_resource(struct process_queue_manager *pqm, } if (dev->kfd->shared_resources.enable_mes) { - amdgpu_amdkfd_free_gtt_mem(dev->adev, pqn->q->gang_ctx_bo); + amdgpu_amdkfd_free_gtt_mem(dev->adev, &pqn->q->gang_ctx_bo); if (pqn->q->wptr_bo) - amdgpu_amdkfd_free_gtt_mem(dev->adev, pqn->q->wptr_bo); + amdgpu_amdkfd_free_gtt_mem(dev->adev, (void **)&pqn->q->wptr_bo); } } @@ -982,6 +982,7 @@ int kfd_criu_restore_queue(struct kfd_process *p, pr_debug("Queue id %d was restored successfully\n", queue_id); kfree(q_data); + kfree(q_extra_data); return ret; } diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c index fc68c94038a85..486986637ce85 100644 --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c @@ -715,6 +715,12 @@ static void dmub_hpd_callback(struct amdgpu_device *adev, return; } + /* Skip DMUB HPD IRQ in suspend/resume. We will probe them later. */ + if (notify->type == DMUB_NOTIFICATION_HPD && adev->in_suspend) { + DRM_INFO("Skip DMUB HPD IRQ callback in suspend/resume\n"); + return; + } + link_index = notify->link_index; link = adev->dm.dc->links[link_index]; dev = adev->dm.ddev; @@ -4038,6 +4044,7 @@ static int amdgpu_dm_mode_config_init(struct amdgpu_device *adev) #define AMDGPU_DM_DEFAULT_MIN_BACKLIGHT 12 #define AMDGPU_DM_DEFAULT_MAX_BACKLIGHT 255 +#define AMDGPU_DM_MIN_SPREAD ((AMDGPU_DM_DEFAULT_MAX_BACKLIGHT - AMDGPU_DM_DEFAULT_MIN_BACKLIGHT) / 2) #define AUX_BL_DEFAULT_TRANSITION_TIME_MS 50 static void amdgpu_dm_update_backlight_caps(struct amdgpu_display_manager *dm, @@ -4052,6 +4059,21 @@ static void amdgpu_dm_update_backlight_caps(struct amdgpu_display_manager *dm, return; amdgpu_acpi_get_backlight_caps(&caps); + + /* validate the firmware value is sane */ + if (caps.caps_valid) { + int spread = caps.max_input_signal - caps.min_input_signal; + + if (caps.max_input_signal > AMDGPU_DM_DEFAULT_MAX_BACKLIGHT || + caps.min_input_signal < 0 || + spread > AMDGPU_DM_DEFAULT_MAX_BACKLIGHT || + spread < AMDGPU_DM_MIN_SPREAD) { + DRM_DEBUG_KMS("DM: Invalid backlight caps: min=%d, max=%d\n", + caps.min_input_signal, caps.max_input_signal); + caps.caps_valid = false; + } + } + if (caps.caps_valid) { dm->backlight_caps[bl_idx].caps_valid = true; if (caps.aux_support) @@ -6138,12 +6160,21 @@ create_stream_for_sink(struct amdgpu_dm_connector *aconnector, if (stream->signal == SIGNAL_TYPE_DISPLAY_PORT || stream->signal == SIGNAL_TYPE_DISPLAY_PORT_MST || stream->signal == SIGNAL_TYPE_EDP) { + const struct dc_edid_caps *edid_caps; + unsigned int disable_colorimetry = 0; + + if (aconnector->dc_sink) { + edid_caps = &aconnector->dc_sink->edid_caps; + disable_colorimetry = edid_caps->panel_patch.disable_colorimetry; + } + // // should decide stream support vsc sdp colorimetry capability // before building vsc info packet // stream->use_vsc_sdp_for_colorimetry = stream->link->dpcd_caps.dpcd_rev.raw >= 0x14 && - stream->link->dpcd_caps.dprx_feature.bits.VSC_SDP_COLORIMETRY_SUPPORTED; + stream->link->dpcd_caps.dprx_feature.bits.VSC_SDP_COLORIMETRY_SUPPORTED && + !disable_colorimetry; if (stream->out_transfer_func->tf == TRANSFER_FUNCTION_GAMMA22) tf = TRANSFER_FUNC_GAMMA_22; @@ -6939,7 +6970,7 @@ static int dm_update_mst_vcpi_slots_for_dsc(struct drm_atomic_state *state, } } - if (j == dc_state->stream_count) + if (j == dc_state->stream_count || pbn_div == 0) continue; slot_num = DIV_ROUND_UP(pbn, pbn_div); diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_helpers.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_helpers.c index 084561c3d93b3..9db624016a6a3 100644 --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_helpers.c +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_helpers.c @@ -72,6 +72,10 @@ static void apply_edid_quirks(struct edid *edid, struct dc_edid_caps *edid_caps) DRM_DEBUG_DRIVER("Clearing DPCD 0x317 on monitor with panel id %X\n", panel_id); edid_caps->panel_patch.remove_sink_ext_caps = true; break; + case drm_edid_encode_panel_id('S', 'D', 'C', 0x4154): + DRM_DEBUG_DRIVER("Disabling VSC on monitor with panel id %X\n", panel_id); + edid_caps->panel_patch.disable_colorimetry = true; + break; default: return; } diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_mst_types.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_mst_types.c index 6e0e0db5c45c8..1d0ebe764a428 100644 --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_mst_types.c +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_mst_types.c @@ -247,7 +247,7 @@ static bool validate_dsc_caps_on_connector(struct amdgpu_dm_connector *aconnecto aconnector->dsc_aux = &aconnector->mst_root->dm_dp_aux.aux; /* synaptics cascaded MST hub case */ - if (!aconnector->dsc_aux && is_synaptics_cascaded_panamera(aconnector->dc_link, port)) + if (is_synaptics_cascaded_panamera(aconnector->dc_link, port)) aconnector->dsc_aux = port->mgr->aux; if (!aconnector->dsc_aux) @@ -1116,7 +1116,7 @@ static int compute_mst_dsc_configs_for_link(struct drm_atomic_state *state, params[count].num_slices_v = aconnector->dsc_settings.dsc_num_slices_v; params[count].bpp_overwrite = aconnector->dsc_settings.dsc_bits_per_pixel; params[count].compression_possible = stream->sink->dsc_caps.dsc_dec_caps.is_dsc_supported; - dc_dsc_get_policy_for_timing(params[count].timing, 0, &dsc_policy); + dc_dsc_get_policy_for_timing(params[count].timing, 0, &dsc_policy, dc_link_get_highest_encoding_format(stream->link)); if (!dc_dsc_compute_bandwidth_range( stream->sink->ctx->dc->res_pool->dscs[0], stream->sink->ctx->dc->debug.dsc_min_slice_height_override, @@ -1584,7 +1584,7 @@ static bool is_dsc_common_config_possible(struct dc_stream_state *stream, { struct dc_dsc_policy dsc_policy = {0}; - dc_dsc_get_policy_for_timing(&stream->timing, 0, &dsc_policy); + dc_dsc_get_policy_for_timing(&stream->timing, 0, &dsc_policy, dc_link_get_highest_encoding_format(stream->link)); dc_dsc_compute_bandwidth_range(stream->sink->ctx->dc->res_pool->dscs[0], stream->sink->ctx->dc->debug.dsc_min_slice_height_override, dsc_policy.min_target_bpp * 16, diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_plane.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_plane.c index fa9f53b310793..d1329f20b7bd4 100644 --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_plane.c +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_plane.c @@ -1281,7 +1281,8 @@ void amdgpu_dm_plane_handle_cursor_update(struct drm_plane *plane, adev->dm.dc->caps.color.dpp.gamma_corr) attributes.attribute_flags.bits.ENABLE_CURSOR_DEGAMMA = 1; - attributes.pitch = afb->base.pitches[0] / afb->base.format->cpp[0]; + if (afb) + attributes.pitch = afb->base.pitches[0] / afb->base.format->cpp[0]; if (crtc_state->stream) { mutex_lock(&adev->dm.dc_lock); diff --git a/drivers/gpu/drm/amd/display/dc/core/dc.c b/drivers/gpu/drm/amd/display/dc/core/dc.c index 50e643bfdfbad..c2efe18ceacd0 100644 --- a/drivers/gpu/drm/amd/display/dc/core/dc.c +++ b/drivers/gpu/drm/amd/display/dc/core/dc.c @@ -1691,7 +1691,7 @@ bool dc_validate_boot_timing(const struct dc *dc, if (crtc_timing->pix_clk_100hz != pix_clk_100hz) return false; - if (!se->funcs->dp_get_pixel_format) + if (!se || !se->funcs->dp_get_pixel_format) return false; if (!se->funcs->dp_get_pixel_format( @@ -3797,7 +3797,8 @@ static void commit_planes_for_stream(struct dc *dc, } if ((update_type != UPDATE_TYPE_FAST) && stream->update_flags.bits.dsc_changed) - if (top_pipe_to_program->stream_res.tg->funcs->lock_doublebuffer_enable) { + if (top_pipe_to_program && + top_pipe_to_program->stream_res.tg->funcs->lock_doublebuffer_enable) { top_pipe_to_program->stream_res.tg->funcs->wait_for_state( top_pipe_to_program->stream_res.tg, CRTC_STATE_VACTIVE); @@ -4715,7 +4716,8 @@ void dc_allow_idle_optimizations(struct dc *dc, bool allow) if (allow == dc->idle_optimizations_allowed) return; - if (dc->hwss.apply_idle_power_optimizations && dc->hwss.apply_idle_power_optimizations(dc, allow)) + if (dc->hwss.apply_idle_power_optimizations && dc->clk_mgr != NULL && + dc->hwss.apply_idle_power_optimizations(dc, allow)) dc->idle_optimizations_allowed = allow; } diff --git a/drivers/gpu/drm/amd/display/dc/core/dc_resource.c b/drivers/gpu/drm/amd/display/dc/core/dc_resource.c index 733e445331ea5..99fcd39bb15e0 100644 --- a/drivers/gpu/drm/amd/display/dc/core/dc_resource.c +++ b/drivers/gpu/drm/amd/display/dc/core/dc_resource.c @@ -2154,6 +2154,8 @@ static bool are_stream_backends_same( bool dc_is_stream_unchanged( struct dc_stream_state *old_stream, struct dc_stream_state *stream) { + if (!old_stream || !stream) + return false; if (!are_stream_backends_same(old_stream, stream)) return false; @@ -2877,8 +2879,10 @@ static bool planes_changed_for_existing_stream(struct dc_state *context, } } - if (!stream_status) + if (!stream_status) { ASSERT(0); + return false; + } for (i = 0; i < set_count; i++) if (set[i].stream == stream) diff --git a/drivers/gpu/drm/amd/display/dc/dc_dsc.h b/drivers/gpu/drm/amd/display/dc/dc_dsc.h index fe3078b8789ef..01c07545ef6b4 100644 --- a/drivers/gpu/drm/amd/display/dc/dc_dsc.h +++ b/drivers/gpu/drm/amd/display/dc/dc_dsc.h @@ -100,7 +100,8 @@ uint32_t dc_dsc_stream_bandwidth_overhead_in_kbps( */ void dc_dsc_get_policy_for_timing(const struct dc_crtc_timing *timing, uint32_t max_target_bpp_limit_override_x16, - struct dc_dsc_policy *policy); + struct dc_dsc_policy *policy, + const enum dc_link_encoding_format link_encoding); void dc_dsc_policy_set_max_target_bpp_limit(uint32_t limit); diff --git a/drivers/gpu/drm/amd/display/dc/dc_types.h b/drivers/gpu/drm/amd/display/dc/dc_types.h index cc173ecf78e0c..6eaa02a80344b 100644 --- a/drivers/gpu/drm/amd/display/dc/dc_types.h +++ b/drivers/gpu/drm/amd/display/dc/dc_types.h @@ -190,6 +190,7 @@ struct dc_panel_patch { unsigned int skip_avmute; unsigned int mst_start_top_delay; unsigned int remove_sink_ext_caps; + unsigned int disable_colorimetry; }; struct dc_edid_caps { diff --git a/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_cm_common.c b/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_cm_common.c index c0372aa4ec838..684e30f9cf898 100644 --- a/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_cm_common.c +++ b/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_cm_common.c @@ -571,6 +571,8 @@ bool cm_helper_translate_curve_to_degamma_hw_format( i += increment) { if (j == hw_points - 1) break; + if (i >= TRANSFER_FUNC_POINTS) + return false; rgb_resulted[j].red = output_tf->tf_pts.red[i]; rgb_resulted[j].green = output_tf->tf_pts.green[i]; rgb_resulted[j].blue = output_tf->tf_pts.blue[i]; diff --git a/drivers/gpu/drm/amd/display/dc/dcn30/dcn30_cm_common.c b/drivers/gpu/drm/amd/display/dc/dcn30/dcn30_cm_common.c index e0df9b0065f9c..62c02adae7e76 100644 --- a/drivers/gpu/drm/amd/display/dc/dcn30/dcn30_cm_common.c +++ b/drivers/gpu/drm/amd/display/dc/dcn30/dcn30_cm_common.c @@ -178,6 +178,8 @@ bool cm3_helper_translate_curve_to_hw_format( i += increment) { if (j == hw_points - 1) break; + if (i >= TRANSFER_FUNC_POINTS) + return false; rgb_resulted[j].red = output_tf->tf_pts.red[i]; rgb_resulted[j].green = output_tf->tf_pts.green[i]; rgb_resulted[j].blue = output_tf->tf_pts.blue[i]; @@ -355,6 +357,8 @@ bool cm3_helper_translate_curve_to_degamma_hw_format( i += increment) { if (j == hw_points - 1) break; + if (i >= TRANSFER_FUNC_POINTS) + return false; rgb_resulted[j].red = output_tf->tf_pts.red[i]; rgb_resulted[j].green = output_tf->tf_pts.green[i]; rgb_resulted[j].blue = output_tf->tf_pts.blue[i]; diff --git a/drivers/gpu/drm/amd/display/dc/dcn30/dcn30_hwseq.c b/drivers/gpu/drm/amd/display/dc/dcn30/dcn30_hwseq.c index ba47a1c8eec10..d59af329d0009 100644 --- a/drivers/gpu/drm/amd/display/dc/dcn30/dcn30_hwseq.c +++ b/drivers/gpu/drm/amd/display/dc/dcn30/dcn30_hwseq.c @@ -214,7 +214,11 @@ bool dcn30_set_output_transfer_func(struct dc *dc, } } - mpc->funcs->set_output_gamma(mpc, mpcc_id, params); + if (mpc->funcs->set_output_gamma) + mpc->funcs->set_output_gamma(mpc, mpcc_id, params); + else + DC_LOG_ERROR("%s: set_output_gamma function pointer is NULL.\n", __func__); + return ret; } diff --git a/drivers/gpu/drm/amd/display/dc/dml/dcn20/display_rq_dlg_calc_20v2.c b/drivers/gpu/drm/amd/display/dc/dml/dcn20/display_rq_dlg_calc_20v2.c index 0fc9f3e3ffaef..f603486af6e30 100644 --- a/drivers/gpu/drm/amd/display/dc/dml/dcn20/display_rq_dlg_calc_20v2.c +++ b/drivers/gpu/drm/amd/display/dc/dml/dcn20/display_rq_dlg_calc_20v2.c @@ -78,7 +78,7 @@ static void calculate_ttu_cursor(struct display_mode_lib *mode_lib, static unsigned int get_bytes_per_element(enum source_format_class source_format, bool is_chroma) { - unsigned int ret_val = 0; + unsigned int ret_val = 1; if (source_format == dm_444_16) { if (!is_chroma) diff --git a/drivers/gpu/drm/amd/display/dc/dml/dcn21/display_rq_dlg_calc_21.c b/drivers/gpu/drm/amd/display/dc/dml/dcn21/display_rq_dlg_calc_21.c index 618f4b682ab1b..9f28e4d3c664c 100644 --- a/drivers/gpu/drm/amd/display/dc/dml/dcn21/display_rq_dlg_calc_21.c +++ b/drivers/gpu/drm/amd/display/dc/dml/dcn21/display_rq_dlg_calc_21.c @@ -53,7 +53,7 @@ static void calculate_ttu_cursor( static unsigned int get_bytes_per_element(enum source_format_class source_format, bool is_chroma) { - unsigned int ret_val = 0; + unsigned int ret_val = 1; if (source_format == dm_444_16) { if (!is_chroma) diff --git a/drivers/gpu/drm/amd/display/dc/dsc/dc_dsc.c b/drivers/gpu/drm/amd/display/dc/dsc/dc_dsc.c index 230be292ff35b..9edc9b0e3f082 100644 --- a/drivers/gpu/drm/amd/display/dc/dsc/dc_dsc.c +++ b/drivers/gpu/drm/amd/display/dc/dsc/dc_dsc.c @@ -861,7 +861,7 @@ static bool setup_dsc_config( memset(dsc_cfg, 0, sizeof(struct dc_dsc_config)); - dc_dsc_get_policy_for_timing(timing, options->max_target_bpp_limit_override_x16, &policy); + dc_dsc_get_policy_for_timing(timing, options->max_target_bpp_limit_override_x16, &policy, link_encoding); pic_width = timing->h_addressable + timing->h_border_left + timing->h_border_right; pic_height = timing->v_addressable + timing->v_border_top + timing->v_border_bottom; @@ -1134,7 +1134,8 @@ uint32_t dc_dsc_stream_bandwidth_overhead_in_kbps( void dc_dsc_get_policy_for_timing(const struct dc_crtc_timing *timing, uint32_t max_target_bpp_limit_override_x16, - struct dc_dsc_policy *policy) + struct dc_dsc_policy *policy, + const enum dc_link_encoding_format link_encoding) { uint32_t bpc = 0; diff --git a/drivers/gpu/drm/amd/display/dc/link/hwss/link_hwss_hpo_dp.c b/drivers/gpu/drm/amd/display/dc/link/hwss/link_hwss_hpo_dp.c index e1257404357b1..cec68c5dba132 100644 --- a/drivers/gpu/drm/amd/display/dc/link/hwss/link_hwss_hpo_dp.c +++ b/drivers/gpu/drm/amd/display/dc/link/hwss/link_hwss_hpo_dp.c @@ -28,6 +28,8 @@ #include "dccg.h" #include "clk_mgr.h" +#define DC_LOGGER link->ctx->logger + void set_hpo_dp_throttled_vcp_size(struct pipe_ctx *pipe_ctx, struct fixed31_32 throttled_vcp_size) { @@ -108,6 +110,11 @@ void enable_hpo_dp_link_output(struct dc_link *link, enum clock_source_id clock_source, const struct dc_link_settings *link_settings) { + if (!link_res->hpo_dp_link_enc) { + DC_LOG_ERROR("%s: invalid hpo_dp_link_enc\n", __func__); + return; + } + if (link->dc->res_pool->dccg->funcs->set_symclk32_le_root_clock_gating) link->dc->res_pool->dccg->funcs->set_symclk32_le_root_clock_gating( link->dc->res_pool->dccg, @@ -124,6 +131,11 @@ void disable_hpo_dp_link_output(struct dc_link *link, const struct link_resource *link_res, enum signal_type signal) { + if (!link_res->hpo_dp_link_enc) { + DC_LOG_ERROR("%s: invalid hpo_dp_link_enc\n", __func__); + return; + } + link_res->hpo_dp_link_enc->funcs->link_disable(link_res->hpo_dp_link_enc); link_res->hpo_dp_link_enc->funcs->disable_link_phy( link_res->hpo_dp_link_enc, signal); diff --git a/drivers/gpu/drm/amd/display/dc/link/link_factory.c b/drivers/gpu/drm/amd/display/dc/link/link_factory.c index 2c366866f5700..eb7c9f226af5c 100644 --- a/drivers/gpu/drm/amd/display/dc/link/link_factory.c +++ b/drivers/gpu/drm/amd/display/dc/link/link_factory.c @@ -403,7 +403,7 @@ static void link_destruct(struct dc_link *link) if (link->panel_cntl) link->panel_cntl->funcs->destroy(&link->panel_cntl); - if (link->link_enc) { + if (link->link_enc && !link->is_dig_mapping_flexible) { /* Update link encoder resource tracking variables. These are used for * the dynamic assignment of link encoders to streams. Virtual links * are not assigned encoder resources on creation. @@ -629,14 +629,14 @@ static bool construct_phy(struct dc_link *link, link->link_enc = link->dc->res_pool->funcs->link_enc_create(dc_ctx, &enc_init_data); - DC_LOG_DC("BIOS object table - DP_IS_USB_C: %d", link->link_enc->features.flags.bits.DP_IS_USB_C); - DC_LOG_DC("BIOS object table - IS_DP2_CAPABLE: %d", link->link_enc->features.flags.bits.IS_DP2_CAPABLE); - if (!link->link_enc) { DC_ERROR("Failed to create link encoder!\n"); goto link_enc_create_fail; } + DC_LOG_DC("BIOS object table - DP_IS_USB_C: %d", link->link_enc->features.flags.bits.DP_IS_USB_C); + DC_LOG_DC("BIOS object table - IS_DP2_CAPABLE: %d", link->link_enc->features.flags.bits.IS_DP2_CAPABLE); + /* Update link encoder tracking variables. These are used for the dynamic * assignment of link encoders to streams. */ diff --git a/drivers/gpu/drm/amd/display/dc/link/protocols/link_dp_phy.c b/drivers/gpu/drm/amd/display/dc/link/protocols/link_dp_phy.c index 0050e0a06cbc2..9bde0c8bf914a 100644 --- a/drivers/gpu/drm/amd/display/dc/link/protocols/link_dp_phy.c +++ b/drivers/gpu/drm/amd/display/dc/link/protocols/link_dp_phy.c @@ -143,32 +143,25 @@ enum dc_status dp_set_fec_ready(struct dc_link *link, const struct link_resource link_enc = link_enc_cfg_get_link_enc(link); ASSERT(link_enc); + if (link_enc->funcs->fec_set_ready == NULL) + return DC_NOT_SUPPORTED; - if (!dp_should_enable_fec(link)) - return status; - - if (link_enc->funcs->fec_set_ready && - link->dpcd_caps.fec_cap.bits.FEC_CAPABLE) { - if (ready) { - fec_config = 1; - status = core_link_write_dpcd(link, - DP_FEC_CONFIGURATION, - &fec_config, - sizeof(fec_config)); - if (status == DC_OK) { - link_enc->funcs->fec_set_ready(link_enc, true); - link->fec_state = dc_link_fec_ready; - } else { - link_enc->funcs->fec_set_ready(link_enc, false); - link->fec_state = dc_link_fec_not_ready; - dm_error("dpcd write failed to set fec_ready"); - } - } else if (link->fec_state == dc_link_fec_ready) { + if (ready && dp_should_enable_fec(link)) { + fec_config = 1; + + status = core_link_write_dpcd(link, DP_FEC_CONFIGURATION, + &fec_config, sizeof(fec_config)); + + if (status == DC_OK) { + link_enc->funcs->fec_set_ready(link_enc, true); + link->fec_state = dc_link_fec_ready; + } + } else { + if (link->fec_state == dc_link_fec_ready) { fec_config = 0; - status = core_link_write_dpcd(link, - DP_FEC_CONFIGURATION, - &fec_config, - sizeof(fec_config)); + core_link_write_dpcd(link, DP_FEC_CONFIGURATION, + &fec_config, sizeof(fec_config)); + link_enc->funcs->fec_set_ready(link_enc, false); link->fec_state = dc_link_fec_not_ready; } @@ -183,14 +176,12 @@ void dp_set_fec_enable(struct dc_link *link, bool enable) link_enc = link_enc_cfg_get_link_enc(link); ASSERT(link_enc); - - if (!dp_should_enable_fec(link)) + if (link_enc->funcs->fec_set_enable == NULL) return; - if (link_enc->funcs->fec_set_enable && - link->dpcd_caps.fec_cap.bits.FEC_CAPABLE) { - if (link->fec_state == dc_link_fec_ready && enable) { - /* Accord to DP spec, FEC enable sequence can first + if (enable && dp_should_enable_fec(link)) { + if (link->fec_state == dc_link_fec_ready) { + /* According to DP spec, FEC enable sequence can first * be transmitted anytime after 1000 LL codes have * been transmitted on the link after link training * completion. Using 1 lane RBR should have the maximum @@ -200,7 +191,9 @@ void dp_set_fec_enable(struct dc_link *link, bool enable) udelay(7); link_enc->funcs->fec_set_enable(link_enc, true); link->fec_state = dc_link_fec_enabled; - } else if (link->fec_state == dc_link_fec_enabled && !enable) { + } + } else { + if (link->fec_state == dc_link_fec_enabled) { link_enc->funcs->fec_set_enable(link_enc, false); link->fec_state = dc_link_fec_ready; } diff --git a/drivers/gpu/drm/amd/display/modules/freesync/freesync.c b/drivers/gpu/drm/amd/display/modules/freesync/freesync.c index ef3a674090211..803586f4267af 100644 --- a/drivers/gpu/drm/amd/display/modules/freesync/freesync.c +++ b/drivers/gpu/drm/amd/display/modules/freesync/freesync.c @@ -133,7 +133,7 @@ unsigned int mod_freesync_calc_v_total_from_refresh( v_total = div64_u64(div64_u64(((unsigned long long)( frame_duration_in_ns) * (stream->timing.pix_clk_100hz / 10)), - stream->timing.h_total), 1000000); + stream->timing.h_total) + 500000, 1000000); /* v_total cannot be less than nominal */ if (v_total < stream->timing.v_total) { diff --git a/drivers/gpu/drm/amd/display/modules/hdcp/hdcp1_execution.c b/drivers/gpu/drm/amd/display/modules/hdcp/hdcp1_execution.c index 1ddb4f5eac8e5..cee5e9e64ae71 100644 --- a/drivers/gpu/drm/amd/display/modules/hdcp/hdcp1_execution.c +++ b/drivers/gpu/drm/amd/display/modules/hdcp/hdcp1_execution.c @@ -432,18 +432,18 @@ static enum mod_hdcp_status authenticated_dp(struct mod_hdcp *hdcp, goto out; } - if (status == MOD_HDCP_STATUS_SUCCESS) - mod_hdcp_execute_and_set(mod_hdcp_read_bstatus, - &input->bstatus_read, &status, - hdcp, "bstatus_read"); - if (status == MOD_HDCP_STATUS_SUCCESS) - mod_hdcp_execute_and_set(check_link_integrity_dp, - &input->link_integrity_check, &status, - hdcp, "link_integrity_check"); - if (status == MOD_HDCP_STATUS_SUCCESS) - mod_hdcp_execute_and_set(check_no_reauthentication_request_dp, - &input->reauth_request_check, &status, - hdcp, "reauth_request_check"); + mod_hdcp_execute_and_set(mod_hdcp_read_bstatus, + &input->bstatus_read, &status, + hdcp, "bstatus_read"); + + mod_hdcp_execute_and_set(check_link_integrity_dp, + &input->link_integrity_check, &status, + hdcp, "link_integrity_check"); + + mod_hdcp_execute_and_set(check_no_reauthentication_request_dp, + &input->reauth_request_check, &status, + hdcp, "reauth_request_check"); + out: return status; } diff --git a/drivers/gpu/drm/amd/include/atomfirmware.h b/drivers/gpu/drm/amd/include/atomfirmware.h index 6c8b4afa7cc6e..ccc79bdd4f5ad 100644 --- a/drivers/gpu/drm/amd/include/atomfirmware.h +++ b/drivers/gpu/drm/amd/include/atomfirmware.h @@ -1006,7 +1006,7 @@ struct display_object_info_table_v1_4 uint16_t supporteddevices; uint8_t number_of_path; uint8_t reserved; - struct atom_display_object_path_v2 display_path[8]; //the real number of this included in the structure is calculated by using the (whole structure size - the header size- number_of_path)/size of atom_display_object_path + struct atom_display_object_path_v2 display_path[]; //the real number of this included in the structure is calculated by using the (whole structure size - the header size- number_of_path)/size of atom_display_object_path }; struct display_object_info_table_v1_5 { @@ -1016,7 +1016,7 @@ struct display_object_info_table_v1_5 { uint8_t reserved; // the real number of this included in the structure is calculated by using the // (whole structure size - the header size- number_of_path)/size of atom_display_object_path - struct atom_display_object_path_v3 display_path[8]; + struct atom_display_object_path_v3 display_path[]; }; /* diff --git a/drivers/gpu/drm/amd/pm/powerplay/hwmgr/processpptables.c b/drivers/gpu/drm/amd/pm/powerplay/hwmgr/processpptables.c index 5794b64507bf9..56a2257525806 100644 --- a/drivers/gpu/drm/amd/pm/powerplay/hwmgr/processpptables.c +++ b/drivers/gpu/drm/amd/pm/powerplay/hwmgr/processpptables.c @@ -1185,6 +1185,8 @@ static int init_overdrive_limits(struct pp_hwmgr *hwmgr, fw_info = smu_atom_get_data_table(hwmgr->adev, GetIndexIntoMasterTable(DATA, FirmwareInfo), &size, &frev, &crev); + PP_ASSERT_WITH_CODE(fw_info != NULL, + "Missing firmware info!", return -EINVAL); if ((fw_info->ucTableFormatRevision == 1) && (le16_to_cpu(fw_info->usStructureSize) >= sizeof(ATOM_FIRMWARE_INFO_V1_4))) diff --git a/drivers/gpu/drm/arm/display/komeda/komeda_kms.c b/drivers/gpu/drm/arm/display/komeda/komeda_kms.c index 9299026701f34..1a5fa7df284de 100644 --- a/drivers/gpu/drm/arm/display/komeda/komeda_kms.c +++ b/drivers/gpu/drm/arm/display/komeda/komeda_kms.c @@ -160,6 +160,7 @@ static int komeda_crtc_normalize_zpos(struct drm_crtc *crtc, struct drm_plane *plane; struct list_head zorder_list; int order = 0, err; + u32 slave_zpos = 0; DRM_DEBUG_ATOMIC("[CRTC:%d:%s] calculating normalized zpos values\n", crtc->base.id, crtc->name); @@ -199,10 +200,13 @@ static int komeda_crtc_normalize_zpos(struct drm_crtc *crtc, plane_st->zpos, plane_st->normalized_zpos); /* calculate max slave zorder */ - if (has_bit(drm_plane_index(plane), kcrtc->slave_planes)) + if (has_bit(drm_plane_index(plane), kcrtc->slave_planes)) { + slave_zpos = plane_st->normalized_zpos; + if (to_kplane_st(plane_st)->layer_split) + slave_zpos++; kcrtc_st->max_slave_zorder = - max(plane_st->normalized_zpos, - kcrtc_st->max_slave_zorder); + max(slave_zpos, kcrtc_st->max_slave_zorder); + } } crtc_st->zpos_changed = true; diff --git a/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c b/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c index 2611afd2c1c13..ef2b6ce544d0a 100644 --- a/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c +++ b/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c @@ -1291,17 +1291,6 @@ static int adv7511_probe(struct i2c_client *i2c) INIT_WORK(&adv7511->hpd_work, adv7511_hpd_work); - if (i2c->irq) { - init_waitqueue_head(&adv7511->wq); - - ret = devm_request_threaded_irq(dev, i2c->irq, NULL, - adv7511_irq_handler, - IRQF_ONESHOT, dev_name(dev), - adv7511); - if (ret) - goto err_unregister_cec; - } - adv7511_power_off(adv7511); i2c_set_clientdata(i2c, adv7511); @@ -1325,6 +1314,17 @@ static int adv7511_probe(struct i2c_client *i2c) adv7511_audio_init(dev, adv7511); + if (i2c->irq) { + init_waitqueue_head(&adv7511->wq); + + ret = devm_request_threaded_irq(dev, i2c->irq, NULL, + adv7511_irq_handler, + IRQF_ONESHOT, dev_name(dev), + adv7511); + if (ret) + goto err_unregister_audio; + } + if (adv7511->type == ADV7533 || adv7511->type == ADV7535) { ret = adv7533_attach_dsi(adv7511); if (ret) diff --git a/drivers/gpu/drm/bridge/lontium-lt8912b.c b/drivers/gpu/drm/bridge/lontium-lt8912b.c index 0efcbc73f2a43..5e43a40a5d522 100644 --- a/drivers/gpu/drm/bridge/lontium-lt8912b.c +++ b/drivers/gpu/drm/bridge/lontium-lt8912b.c @@ -411,22 +411,6 @@ static const struct drm_connector_funcs lt8912_connector_funcs = { .atomic_destroy_state = drm_atomic_helper_connector_destroy_state, }; -static enum drm_mode_status -lt8912_connector_mode_valid(struct drm_connector *connector, - struct drm_display_mode *mode) -{ - if (mode->clock > 150000) - return MODE_CLOCK_HIGH; - - if (mode->hdisplay > 1920) - return MODE_BAD_HVALUE; - - if (mode->vdisplay > 1080) - return MODE_BAD_VVALUE; - - return MODE_OK; -} - static int lt8912_connector_get_modes(struct drm_connector *connector) { const struct drm_edid *drm_edid; @@ -452,7 +436,6 @@ static int lt8912_connector_get_modes(struct drm_connector *connector) static const struct drm_connector_helper_funcs lt8912_connector_helper_funcs = { .get_modes = lt8912_connector_get_modes, - .mode_valid = lt8912_connector_mode_valid, }; static void lt8912_bridge_mode_set(struct drm_bridge *bridge, @@ -594,6 +577,23 @@ static void lt8912_bridge_detach(struct drm_bridge *bridge) drm_bridge_hpd_disable(lt->hdmi_port); } +static enum drm_mode_status +lt8912_bridge_mode_valid(struct drm_bridge *bridge, + const struct drm_display_info *info, + const struct drm_display_mode *mode) +{ + if (mode->clock > 150000) + return MODE_CLOCK_HIGH; + + if (mode->hdisplay > 1920) + return MODE_BAD_HVALUE; + + if (mode->vdisplay > 1080) + return MODE_BAD_VVALUE; + + return MODE_OK; +} + static enum drm_connector_status lt8912_bridge_detect(struct drm_bridge *bridge) { @@ -624,6 +624,7 @@ static struct edid *lt8912_bridge_get_edid(struct drm_bridge *bridge, static const struct drm_bridge_funcs lt8912_bridge_funcs = { .attach = lt8912_bridge_attach, .detach = lt8912_bridge_detach, + .mode_valid = lt8912_bridge_mode_valid, .mode_set = lt8912_bridge_mode_set, .enable = lt8912_bridge_enable, .detect = lt8912_bridge_detect, diff --git a/drivers/gpu/drm/drm_atomic_uapi.c b/drivers/gpu/drm/drm_atomic_uapi.c index 6891639b16d7c..38d7dd27e2a4f 100644 --- a/drivers/gpu/drm/drm_atomic_uapi.c +++ b/drivers/gpu/drm/drm_atomic_uapi.c @@ -582,7 +582,7 @@ static int drm_atomic_plane_set_property(struct drm_plane *plane, &state->fb_damage_clips, val, -1, - sizeof(struct drm_rect), + sizeof(struct drm_mode_rect), &replaced); return ret; } else if (property == plane->scaling_filter_property) { diff --git a/drivers/gpu/drm/drm_crtc.c b/drivers/gpu/drm/drm_crtc.c index cb90e70d85e86..65f9f66933bba 100644 --- a/drivers/gpu/drm/drm_crtc.c +++ b/drivers/gpu/drm/drm_crtc.c @@ -904,6 +904,7 @@ int drm_mode_setcrtc(struct drm_device *dev, void *data, connector_set = NULL; fb = NULL; mode = NULL; + num_connectors = 0; DRM_MODESET_LOCK_ALL_END(dev, ctx, ret); diff --git a/drivers/gpu/drm/drm_drv.c b/drivers/gpu/drm/drm_drv.c index 71bb8806dc5f5..d453d710ef0c1 100644 --- a/drivers/gpu/drm/drm_drv.c +++ b/drivers/gpu/drm/drm_drv.c @@ -34,6 +34,7 @@ #include #include #include +#include #include #include @@ -54,8 +55,7 @@ MODULE_AUTHOR("Gareth Hughes, Leif Delgass, José Fonseca, Jon Smirl"); MODULE_DESCRIPTION("DRM shared core routines"); MODULE_LICENSE("GPL and additional rights"); -static DEFINE_SPINLOCK(drm_minor_lock); -static struct idr drm_minors_idr; +DEFINE_XARRAY_ALLOC(drm_minors_xa); /* * If the drm core fails to init for whatever reason, @@ -83,6 +83,18 @@ DEFINE_STATIC_SRCU(drm_unplug_srcu); * registered and unregistered dynamically according to device-state. */ +static struct xarray *drm_minor_get_xa(enum drm_minor_type type) +{ + if (type == DRM_MINOR_PRIMARY || type == DRM_MINOR_RENDER) + return &drm_minors_xa; +#if IS_ENABLED(CONFIG_DRM_ACCEL) + else if (type == DRM_MINOR_ACCEL) + return &accel_minors_xa; +#endif + else + return ERR_PTR(-EOPNOTSUPP); +} + static struct drm_minor **drm_minor_get_slot(struct drm_device *dev, enum drm_minor_type type) { @@ -101,25 +113,31 @@ static struct drm_minor **drm_minor_get_slot(struct drm_device *dev, static void drm_minor_alloc_release(struct drm_device *dev, void *data) { struct drm_minor *minor = data; - unsigned long flags; WARN_ON(dev != minor->dev); put_device(minor->kdev); - if (minor->type == DRM_MINOR_ACCEL) { - accel_minor_remove(minor->index); - } else { - spin_lock_irqsave(&drm_minor_lock, flags); - idr_remove(&drm_minors_idr, minor->index); - spin_unlock_irqrestore(&drm_minor_lock, flags); - } + xa_erase(drm_minor_get_xa(minor->type), minor->index); } +/* + * DRM used to support 64 devices, for backwards compatibility we need to maintain the + * minor allocation scheme where minors 0-63 are primary nodes, 64-127 are control nodes, + * and 128-191 are render nodes. + * After reaching the limit, we're allocating minors dynamically - first-come, first-serve. + * Accel nodes are using a distinct major, so the minors are allocated in continuous 0-MAX + * range. + */ +#define DRM_MINOR_LIMIT(t) ({ \ + typeof(t) _t = (t); \ + _t == DRM_MINOR_ACCEL ? XA_LIMIT(0, ACCEL_MAX_MINORS) : XA_LIMIT(64 * _t, 64 * _t + 63); \ +}) +#define DRM_EXTENDED_MINOR_LIMIT XA_LIMIT(192, (1 << MINORBITS) - 1) + static int drm_minor_alloc(struct drm_device *dev, enum drm_minor_type type) { struct drm_minor *minor; - unsigned long flags; int r; minor = drmm_kzalloc(dev, sizeof(*minor), GFP_KERNEL); @@ -129,25 +147,14 @@ static int drm_minor_alloc(struct drm_device *dev, enum drm_minor_type type) minor->type = type; minor->dev = dev; - idr_preload(GFP_KERNEL); - if (type == DRM_MINOR_ACCEL) { - r = accel_minor_alloc(); - } else { - spin_lock_irqsave(&drm_minor_lock, flags); - r = idr_alloc(&drm_minors_idr, - NULL, - 64 * type, - 64 * (type + 1), - GFP_NOWAIT); - spin_unlock_irqrestore(&drm_minor_lock, flags); - } - idr_preload_end(); - + r = xa_alloc(drm_minor_get_xa(type), &minor->index, + NULL, DRM_MINOR_LIMIT(type), GFP_KERNEL); + if (r == -EBUSY && (type == DRM_MINOR_PRIMARY || type == DRM_MINOR_RENDER)) + r = xa_alloc(&drm_minors_xa, &minor->index, + NULL, DRM_EXTENDED_MINOR_LIMIT, GFP_KERNEL); if (r < 0) return r; - minor->index = r; - r = drmm_add_action_or_reset(dev, drm_minor_alloc_release, minor); if (r) return r; @@ -163,7 +170,7 @@ static int drm_minor_alloc(struct drm_device *dev, enum drm_minor_type type) static int drm_minor_register(struct drm_device *dev, enum drm_minor_type type) { struct drm_minor *minor; - unsigned long flags; + void *entry; int ret; DRM_DEBUG("\n"); @@ -187,13 +194,12 @@ static int drm_minor_register(struct drm_device *dev, enum drm_minor_type type) goto err_debugfs; /* replace NULL with @minor so lookups will succeed from now on */ - if (minor->type == DRM_MINOR_ACCEL) { - accel_minor_replace(minor, minor->index); - } else { - spin_lock_irqsave(&drm_minor_lock, flags); - idr_replace(&drm_minors_idr, minor, minor->index); - spin_unlock_irqrestore(&drm_minor_lock, flags); + entry = xa_store(drm_minor_get_xa(type), minor->index, minor, GFP_KERNEL); + if (xa_is_err(entry)) { + ret = xa_err(entry); + goto err_debugfs; } + WARN_ON(entry); DRM_DEBUG("new minor registered %d\n", minor->index); return 0; @@ -206,20 +212,13 @@ static int drm_minor_register(struct drm_device *dev, enum drm_minor_type type) static void drm_minor_unregister(struct drm_device *dev, enum drm_minor_type type) { struct drm_minor *minor; - unsigned long flags; minor = *drm_minor_get_slot(dev, type); if (!minor || !device_is_registered(minor->kdev)) return; /* replace @minor with NULL so lookups will fail from now on */ - if (minor->type == DRM_MINOR_ACCEL) { - accel_minor_replace(NULL, minor->index); - } else { - spin_lock_irqsave(&drm_minor_lock, flags); - idr_replace(&drm_minors_idr, NULL, minor->index); - spin_unlock_irqrestore(&drm_minor_lock, flags); - } + xa_store(drm_minor_get_xa(type), minor->index, NULL, GFP_KERNEL); device_del(minor->kdev); dev_set_drvdata(minor->kdev, NULL); /* safety belt */ @@ -235,16 +234,15 @@ static void drm_minor_unregister(struct drm_device *dev, enum drm_minor_type typ * minor->dev pointer will stay valid! However, the device may get unplugged and * unregistered while you hold the minor. */ -struct drm_minor *drm_minor_acquire(unsigned int minor_id) +struct drm_minor *drm_minor_acquire(struct xarray *minor_xa, unsigned int minor_id) { struct drm_minor *minor; - unsigned long flags; - spin_lock_irqsave(&drm_minor_lock, flags); - minor = idr_find(&drm_minors_idr, minor_id); + xa_lock(minor_xa); + minor = xa_load(minor_xa, minor_id); if (minor) drm_dev_get(minor->dev); - spin_unlock_irqrestore(&drm_minor_lock, flags); + xa_unlock(minor_xa); if (!minor) { return ERR_PTR(-ENODEV); @@ -1038,7 +1036,7 @@ static int drm_stub_open(struct inode *inode, struct file *filp) DRM_DEBUG("\n"); - minor = drm_minor_acquire(iminor(inode)); + minor = drm_minor_acquire(&drm_minors_xa, iminor(inode)); if (IS_ERR(minor)) return PTR_ERR(minor); @@ -1073,7 +1071,7 @@ static void drm_core_exit(void) unregister_chrdev(DRM_MAJOR, "drm"); debugfs_remove(drm_debugfs_root); drm_sysfs_destroy(); - idr_destroy(&drm_minors_idr); + WARN_ON(!xa_empty(&drm_minors_xa)); drm_connector_ida_destroy(); } @@ -1082,7 +1080,6 @@ static int __init drm_core_init(void) int ret; drm_connector_ida_init(); - idr_init(&drm_minors_idr); drm_memcpy_init_early(); ret = drm_sysfs_init(); diff --git a/drivers/gpu/drm/drm_file.c b/drivers/gpu/drm/drm_file.c index 1674bbbb11e21..e3345bc49ee24 100644 --- a/drivers/gpu/drm/drm_file.c +++ b/drivers/gpu/drm/drm_file.c @@ -417,7 +417,7 @@ int drm_open(struct inode *inode, struct file *filp) int retcode; int need_setup = 0; - minor = drm_minor_acquire(iminor(inode)); + minor = drm_minor_acquire(&drm_minors_xa, iminor(inode)); if (IS_ERR(minor)) return PTR_ERR(minor); diff --git a/drivers/gpu/drm/drm_gem.c b/drivers/gpu/drm/drm_gem.c index 44a948b80ee14..75b2da60e2a25 100644 --- a/drivers/gpu/drm/drm_gem.c +++ b/drivers/gpu/drm/drm_gem.c @@ -51,6 +51,7 @@ #include #include "drm_internal.h" +#include "linux/virtio_shm.h" /** @file drm_gem.c * @@ -539,6 +540,7 @@ struct page **drm_gem_get_pages(struct drm_gem_object *obj) struct address_space *mapping; struct page **pages; struct folio *folio; + struct page *p; struct folio_batch fbatch; long i, j, npages; @@ -564,15 +566,22 @@ struct page **drm_gem_get_pages(struct drm_gem_object *obj) i = 0; while (i < npages) { - long nr; - folio = shmem_read_folio_gfp(mapping, i, - mapping_gfp_mask(mapping)); - if (IS_ERR(folio)) - goto fail; - nr = min(npages - i, folio_nr_pages(folio)); - for (j = 0; j < nr; j++, i++) - pages[i] = folio_file_page(folio, i); - + if (strcmp(obj->dev->dev->driver->name, "virtio-ivshmem") == 0 || + strcmp(obj->dev->dev->driver->name, "virtio-guest-shm") == 0) { + p = virtio_shmem_allocate_page(obj->dev->dev); + if (IS_ERR(p)) + goto fail; + pages[i] = p; + } else { + long nr; + folio = shmem_read_folio_gfp(mapping, i, + mapping_gfp_mask(mapping)); + if (IS_ERR(folio)) + goto fail; + nr = min(npages - i, folio_nr_pages(folio)); + for (j = 0; j < nr; j++, i++) + pages[i] = folio_file_page(folio, i); + } /* Make sure shmem keeps __GFP_DMA32 allocated pages in the * correct region during swapin. Note that this requires * __GFP_DMA32 to be set in mapping_gfp_mask(inode->i_mapping) @@ -586,16 +595,21 @@ struct page **drm_gem_get_pages(struct drm_gem_object *obj) fail: mapping_clear_unevictable(mapping); - folio_batch_init(&fbatch); - j = 0; - while (j < i) { - struct folio *f = page_folio(pages[j]); - if (!folio_batch_add(&fbatch, f)) + if (strcmp(obj->dev->dev->driver->name, "virtio-ivshmem") == 0 || + strcmp(obj->dev->dev->driver->name, "virtio-guest-shm") == 0) { + virtio_shmem_free_page(obj->dev->dev, pages[i]); + } else { + folio_batch_init(&fbatch); + j = 0; + while (j < i) { + struct folio *f = page_folio(pages[j]); + if (!folio_batch_add(&fbatch, f)) + drm_gem_check_release_batch(&fbatch); + j += folio_nr_pages(f); + } + if (fbatch.nr) drm_gem_check_release_batch(&fbatch); - j += folio_nr_pages(f); } - if (fbatch.nr) - drm_gem_check_release_batch(&fbatch); kvfree(pages); return ERR_CAST(folio); @@ -627,27 +641,36 @@ void drm_gem_put_pages(struct drm_gem_object *obj, struct page **pages, npages = obj->size >> PAGE_SHIFT; - folio_batch_init(&fbatch); - for (i = 0; i < npages; i++) { - struct folio *folio; + if (strcmp(obj->dev->dev->driver->name, "virtio-ivshmem") == 0 || + strcmp(obj->dev->dev->driver->name, "virtio-guest-shm") == 0) { + for (i = 0; i < npages; i++) { + if (!pages[i]) + continue; + virtio_shmem_free_page(obj->dev->dev, pages[i]); + } + } else { + folio_batch_init(&fbatch); + for (i = 0; i < npages; i++) { + struct folio *folio; - if (!pages[i]) - continue; - folio = page_folio(pages[i]); + if (!pages[i]) + continue; + folio = page_folio(pages[i]); - if (dirty) - folio_mark_dirty(folio); + if (dirty) + folio_mark_dirty(folio); - if (accessed) - folio_mark_accessed(folio); + if (accessed) + folio_mark_accessed(folio); - /* Undo the reference we took when populating the table */ - if (!folio_batch_add(&fbatch, folio)) + /* Undo the reference we took when populating the table */ + if (!folio_batch_add(&fbatch, folio)) + drm_gem_check_release_batch(&fbatch); + i += folio_nr_pages(folio) - 1; + } + if (folio_batch_count(&fbatch)) drm_gem_check_release_batch(&fbatch); - i += folio_nr_pages(folio) - 1; } - if (folio_batch_count(&fbatch)) - drm_gem_check_release_batch(&fbatch); kvfree(pages); } diff --git a/drivers/gpu/drm/drm_internal.h b/drivers/gpu/drm/drm_internal.h index 7b83654172c76..ff6bbd7047674 100644 --- a/drivers/gpu/drm/drm_internal.h +++ b/drivers/gpu/drm/drm_internal.h @@ -81,9 +81,6 @@ void drm_prime_remove_buf_handle(struct drm_prime_file_private *prime_fpriv, #define DRM_MAGIC_HASH_ORDER \ 4 /**< Size of key hash table. Must be power of 2. */ #endif -/* drm_drv.c */ -struct drm_minor *drm_minor_acquire(unsigned int minor_id); -void drm_minor_release(struct drm_minor *minor); /* drm_managed.c */ void drm_managed_release(struct drm_device *dev); diff --git a/drivers/gpu/drm/drm_panel_orientation_quirks.c b/drivers/gpu/drm/drm_panel_orientation_quirks.c index 039da0d1a613b..5b2506c65e952 100644 --- a/drivers/gpu/drm/drm_panel_orientation_quirks.c +++ b/drivers/gpu/drm/drm_panel_orientation_quirks.c @@ -208,6 +208,18 @@ static const struct dmi_system_id orientation_data[] = { DMI_MATCH(DMI_BOARD_NAME, "KUN"), }, .driver_data = (void *)&lcd1600x2560_rightside_up, + }, { /* AYN Loki Max */ + .matches = { + DMI_EXACT_MATCH(DMI_SYS_VENDOR, "ayn"), + DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "Loki Max"), + }, + .driver_data = (void *)&lcd1080x1920_leftside_up, + }, { /* AYN Loki Zero */ + .matches = { + DMI_EXACT_MATCH(DMI_SYS_VENDOR, "ayn"), + DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "Loki Zero"), + }, + .driver_data = (void *)&lcd1080x1920_leftside_up, }, { /* Chuwi HiBook (CWI514) */ .matches = { DMI_MATCH(DMI_BOARD_VENDOR, "Hampoo"), diff --git a/drivers/gpu/drm/drm_print.c b/drivers/gpu/drm/drm_print.c index 5b93c11895bb1..aab76334083e8 100644 --- a/drivers/gpu/drm/drm_print.c +++ b/drivers/gpu/drm/drm_print.c @@ -100,8 +100,9 @@ void __drm_puts_coredump(struct drm_printer *p, const char *str) copy = iterator->remain; /* Copy out the bit of the string that we need */ - memcpy(iterator->data, - str + (iterator->start - iterator->offset), copy); + if (iterator->data) + memcpy(iterator->data, + str + (iterator->start - iterator->offset), copy); iterator->offset = iterator->start + copy; iterator->remain -= copy; @@ -110,7 +111,8 @@ void __drm_puts_coredump(struct drm_printer *p, const char *str) len = min_t(ssize_t, strlen(str), iterator->remain); - memcpy(iterator->data + pos, str, len); + if (iterator->data) + memcpy(iterator->data + pos, str, len); iterator->offset += len; iterator->remain -= len; @@ -140,8 +142,9 @@ void __drm_printfn_coredump(struct drm_printer *p, struct va_format *vaf) if ((iterator->offset >= iterator->start) && (len < iterator->remain)) { ssize_t pos = iterator->offset - iterator->start; - snprintf(((char *) iterator->data) + pos, - iterator->remain, "%pV", vaf); + if (iterator->data) + snprintf(((char *) iterator->data) + pos, + iterator->remain, "%pV", vaf); iterator->offset += len; iterator->remain -= len; diff --git a/drivers/gpu/drm/drm_syncobj.c b/drivers/gpu/drm/drm_syncobj.c index 5860428da8de8..7b4ed5ca0a9bd 100644 --- a/drivers/gpu/drm/drm_syncobj.c +++ b/drivers/gpu/drm/drm_syncobj.c @@ -1421,6 +1421,7 @@ drm_syncobj_eventfd_ioctl(struct drm_device *dev, void *data, struct drm_syncobj *syncobj; struct eventfd_ctx *ev_fd_ctx; struct syncobj_eventfd_entry *entry; + int ret; if (!drm_core_check_feature(dev, DRIVER_SYNCOBJ_TIMELINE)) return -EOPNOTSUPP; @@ -1436,13 +1437,15 @@ drm_syncobj_eventfd_ioctl(struct drm_device *dev, void *data, return -ENOENT; ev_fd_ctx = eventfd_ctx_fdget(args->fd); - if (IS_ERR(ev_fd_ctx)) - return PTR_ERR(ev_fd_ctx); + if (IS_ERR(ev_fd_ctx)) { + ret = PTR_ERR(ev_fd_ctx); + goto err_fdget; + } entry = kzalloc(sizeof(*entry), GFP_KERNEL); if (!entry) { - eventfd_ctx_put(ev_fd_ctx); - return -ENOMEM; + ret = -ENOMEM; + goto err_kzalloc; } entry->syncobj = syncobj; entry->ev_fd_ctx = ev_fd_ctx; @@ -1453,6 +1456,12 @@ drm_syncobj_eventfd_ioctl(struct drm_device *dev, void *data, drm_syncobj_put(syncobj); return 0; + +err_kzalloc: + eventfd_ctx_put(ev_fd_ctx); +err_fdget: + drm_syncobj_put(syncobj); + return ret; } int diff --git a/drivers/gpu/drm/exynos/exynos_drm_gsc.c b/drivers/gpu/drm/exynos/exynos_drm_gsc.c index 5302bebbe38c9..1456abd5b9dde 100644 --- a/drivers/gpu/drm/exynos/exynos_drm_gsc.c +++ b/drivers/gpu/drm/exynos/exynos_drm_gsc.c @@ -1173,7 +1173,7 @@ static int gsc_bind(struct device *dev, struct device *master, void *data) struct exynos_drm_ipp *ipp = &ctx->ipp; ctx->drm_dev = drm_dev; - ctx->drm_dev = drm_dev; + ipp->drm_dev = drm_dev; exynos_drm_register_dma(drm_dev, dev, &ctx->dma_priv); exynos_drm_ipp_register(dev, ipp, &ipp_funcs, diff --git a/drivers/gpu/drm/i915/display/intel_hdcp.c b/drivers/gpu/drm/i915/display/intel_hdcp.c index 8cca4793cf92d..bfcee6f15960a 100644 --- a/drivers/gpu/drm/i915/display/intel_hdcp.c +++ b/drivers/gpu/drm/i915/display/intel_hdcp.c @@ -142,11 +142,16 @@ int intel_hdcp_read_valid_bksv(struct intel_digital_port *dig_port, /* Is HDCP1.4 capable on Platform and Sink */ bool intel_hdcp_capable(struct intel_connector *connector) { - struct intel_digital_port *dig_port = intel_attached_dig_port(connector); + struct intel_digital_port *dig_port; const struct intel_hdcp_shim *shim = connector->hdcp.shim; bool capable = false; u8 bksv[5]; + if (!intel_attached_encoder(connector)) + return capable; + + dig_port = intel_attached_dig_port(connector); + if (!shim) return capable; @@ -1004,7 +1009,8 @@ static void intel_hdcp_update_value(struct intel_connector *connector, hdcp->value = value; if (update_property) { drm_connector_get(&connector->base); - queue_work(i915->unordered_wq, &hdcp->prop_work); + if (!queue_work(i915->unordered_wq, &hdcp->prop_work)) + drm_connector_put(&connector->base); } } @@ -2475,7 +2481,8 @@ void intel_hdcp_update_pipe(struct intel_atomic_state *state, mutex_lock(&hdcp->mutex); hdcp->value = DRM_MODE_CONTENT_PROTECTION_DESIRED; drm_connector_get(&connector->base); - queue_work(i915->unordered_wq, &hdcp->prop_work); + if (!queue_work(i915->unordered_wq, &hdcp->prop_work)) + drm_connector_put(&connector->base); mutex_unlock(&hdcp->mutex); } @@ -2492,7 +2499,9 @@ void intel_hdcp_update_pipe(struct intel_atomic_state *state, */ if (!desired_and_not_enabled && !content_protection_type_changed) { drm_connector_get(&connector->base); - queue_work(i915->unordered_wq, &hdcp->prop_work); + if (!queue_work(i915->unordered_wq, &hdcp->prop_work)) + drm_connector_put(&connector->base); + } } diff --git a/drivers/gpu/drm/i915/gem/i915_gem_ttm.c b/drivers/gpu/drm/i915/gem/i915_gem_ttm.c index 9227f8146a583..6dc097a2ac07b 100644 --- a/drivers/gpu/drm/i915/gem/i915_gem_ttm.c +++ b/drivers/gpu/drm/i915/gem/i915_gem_ttm.c @@ -1136,7 +1136,7 @@ static vm_fault_t vm_fault_ttm(struct vm_fault *vmf) GEM_WARN_ON(!i915_ttm_cpu_maps_iomem(bo->resource)); } - if (wakeref & CONFIG_DRM_I915_USERFAULT_AUTOSUSPEND) + if (wakeref && CONFIG_DRM_I915_USERFAULT_AUTOSUSPEND != 0) intel_wakeref_auto(&to_i915(obj->base.dev)->runtime_pm.userfault_wakeref, msecs_to_jiffies_timeout(CONFIG_DRM_I915_USERFAULT_AUTOSUSPEND)); diff --git a/drivers/gpu/drm/i915/gt/iov/intel_iov_ggtt.c b/drivers/gpu/drm/i915/gt/iov/intel_iov_ggtt.c index 5d5efa33bbf60..7f561a09e0bbb 100644 --- a/drivers/gpu/drm/i915/gt/iov/intel_iov_ggtt.c +++ b/drivers/gpu/drm/i915/gt/iov/intel_iov_ggtt.c @@ -173,7 +173,7 @@ static bool is_pte_replicable(struct intel_iov *iov, gen8_pte_t pte) void intel_iov_ggtt_vf_update_pte(struct intel_iov *iov, u32 offset, gen8_pte_t pte) { struct intel_iov_vf_ggtt_ptes *buffer = &iov->vf.ptes_buffer; - u16 max_copies = FIELD_MAX(VF2PF_MMIO_UPDATE_GGTT_REQUEST_MSG_1_NUM_COPIES); + u16 max_copies = (u8)FIELD_MAX(VF2PF_MMIO_UPDATE_GGTT_REQUEST_MSG_1_NUM_COPIES); u16 max_ptes = MMIO_UPDATE_GGTT_MAX_PTES; u32 pte_offset = (offset >> PAGE_SHIFT) - (iov->vf.config.ggtt_base >> PAGE_SHIFT); diff --git a/drivers/gpu/drm/i915/gt/uc/intel_gsc_uc.c b/drivers/gpu/drm/i915/gt/uc/intel_gsc_uc.c index ae8583e732f12..bfab07ff0ca07 100644 --- a/drivers/gpu/drm/i915/gt/uc/intel_gsc_uc.c +++ b/drivers/gpu/drm/i915/gt/uc/intel_gsc_uc.c @@ -325,7 +325,7 @@ void intel_gsc_uc_load_start(struct intel_gsc_uc *gsc) struct intel_gt *gt = gsc_uc_to_gt(gsc); struct drm_i915_private *i915 = gt->i915; - if (!intel_uc_fw_is_loadable(&gsc->fw)) + if (!intel_uc_fw_is_loadable(&gsc->fw) || intel_uc_fw_is_in_error(&gsc->fw)) return; if (intel_gsc_uc_fw_init_done(gsc)) diff --git a/drivers/gpu/drm/i915/gt/uc/intel_guc_submission.c b/drivers/gpu/drm/i915/gt/uc/intel_guc_submission.c index bd524fa3e2a40..d25b4fd84ddcb 100644 --- a/drivers/gpu/drm/i915/gt/uc/intel_guc_submission.c +++ b/drivers/gpu/drm/i915/gt/uc/intel_guc_submission.c @@ -2839,9 +2839,9 @@ static void prepare_context_registration_info_v70(struct intel_context *ce, ce->parallel.guc.wqi_tail = 0; ce->parallel.guc.wqi_head = 0; - wq_desc_offset = i915_ggtt_offset(ce->state) + + wq_desc_offset = (u64)i915_ggtt_offset(ce->state) + __get_parent_scratch_offset(ce); - wq_base_offset = i915_ggtt_offset(ce->state) + + wq_base_offset = (u64)i915_ggtt_offset(ce->state) + __get_wq_offset(ce); info->wq_desc_lo = lower_32_bits(wq_desc_offset); info->wq_desc_hi = upper_32_bits(wq_desc_offset); diff --git a/drivers/gpu/drm/i915/gt/uc/intel_uc_fw.h b/drivers/gpu/drm/i915/gt/uc/intel_uc_fw.h index ac3cfba168d7e..028c95e9f4da9 100644 --- a/drivers/gpu/drm/i915/gt/uc/intel_uc_fw.h +++ b/drivers/gpu/drm/i915/gt/uc/intel_uc_fw.h @@ -269,6 +269,11 @@ static inline bool intel_uc_fw_is_preloaded(const struct intel_uc_fw *uc_fw) return __intel_uc_fw_status(uc_fw) == INTEL_UC_FIRMWARE_PRELOADED; } +static inline bool intel_uc_fw_is_in_error(struct intel_uc_fw *uc_fw) +{ + return intel_uc_fw_status_to_error(__intel_uc_fw_status(uc_fw)) != 0; +} + static inline bool intel_uc_fw_is_overridden(const struct intel_uc_fw *uc_fw) { return uc_fw->user_overridden; diff --git a/drivers/gpu/drm/i915/i915_debugfs.c b/drivers/gpu/drm/i915/i915_debugfs.c index 26a03b586c988..5de674f4cb734 100644 --- a/drivers/gpu/drm/i915/i915_debugfs.c +++ b/drivers/gpu/drm/i915/i915_debugfs.c @@ -839,6 +839,34 @@ static const struct file_operations i915_forcewake_fops = { .release = i915_forcewake_release, }; +#ifdef CONFIG_QNX_GUEST +static int +i915_force_provisioning_vfs_set(void *data, u64 val) +{ + struct drm_i915_private *i915 = data; + /* Enable vf by setting 'i915_force_provisioning_vfs' to 1 */ + if (val > 1) + return -EINVAL; + + if (val == 1) + (void)i915_sriov_pf_enable_vfs(i915, val); + + return 0; +} + +static int +i915_force_provisioning_vfs_get(void *data, u64 *val) +{ + *val = 0; + return 0; +} + +DEFINE_SIMPLE_ATTRIBUTE(i915_force_provisioning_vfs_fops, + i915_force_provisioning_vfs_get, + i915_force_provisioning_vfs_set, + "%llu\n"); +#endif + static const struct drm_info_list i915_debugfs_list[] = { {"i915_capabilities", i915_capabilities, 0}, {"i915_gem_objects", i915_gem_object_info, 0}, @@ -870,6 +898,9 @@ static const struct i915_debugfs_files { {"i915_error_state", &i915_error_state_fops}, {"i915_gpu_info", &i915_gpu_info_fops}, #endif +#ifdef CONFIG_QNX_GUEST + {"i915_force_provisioning_vfs", &i915_force_provisioning_vfs_fops}, +#endif }, i915_vf_debugfs_files[] = { {"i915_wedged", &i915_wedged_fops}, {"i915_gem_drop_caches", &i915_drop_caches_fops}, diff --git a/drivers/gpu/drm/i915/i915_driver.c b/drivers/gpu/drm/i915/i915_driver.c index 3bc35c6ef8a42..29d20b253f947 100644 --- a/drivers/gpu/drm/i915/i915_driver.c +++ b/drivers/gpu/drm/i915/i915_driver.c @@ -853,7 +853,9 @@ int i915_driver_probe(struct pci_dev *pdev, const struct pci_device_id *ent) if (ret) goto out_cleanup_modeset2; - intel_pxp_init(i915); + ret = intel_pxp_init(i915); + if (ret != -ENODEV) + drm_dbg(&i915->drm, "pxp init failed with %d\n", ret); ret = intel_display_driver_probe(i915); if (ret) diff --git a/drivers/gpu/drm/i915/i915_params.c b/drivers/gpu/drm/i915/i915_params.c index 0bc1a2bfe2ab0..001acf3738583 100644 --- a/drivers/gpu/drm/i915/i915_params.c +++ b/drivers/gpu/drm/i915/i915_params.c @@ -248,6 +248,11 @@ i915_param_named(max_vfs, uint, 0400, "Limit number of virtual functions to allocate. " "(0 = no VFs [default]; N = allow up to N VFs)"); +#ifdef CONFIG_QNX_GUEST +i915_param_named(initial_vfs, uint, 0400, + "Number of virtual functions to initialize on startup."); +#endif + i915_param_named(enable_mtl_rcs_ccs_wa, bool, 0400, "Enable the RCS/CCS switchout hold workaround for MTL (only some workloads are affected by issue and w/a has a performance penalty) (default:false)"); diff --git a/drivers/gpu/drm/i915/i915_params.h b/drivers/gpu/drm/i915/i915_params.h index d401d2be7973f..46f6298057c57 100644 --- a/drivers/gpu/drm/i915/i915_params.h +++ b/drivers/gpu/drm/i915/i915_params.h @@ -83,6 +83,7 @@ struct drm_printer; param(unsigned int, lmem_size, 0, 0400) \ param(unsigned int, lmem_bar_size, 0, 0400) \ param(unsigned int, max_vfs, 0, 0400) \ + param(unsigned int, initial_vfs, 0, 0400) \ param(int, force_disable_ccs, 0, 0400) \ /* leave bools at the end to not create holes */ \ param(bool, enable_mtl_rcs_ccs_wa, true, 0x400) \ diff --git a/drivers/gpu/drm/i915/i915_pci.c b/drivers/gpu/drm/i915/i915_pci.c index e8f814e982fa8..4ab574c9c3d39 100644 --- a/drivers/gpu/drm/i915/i915_pci.c +++ b/drivers/gpu/drm/i915/i915_pci.c @@ -22,6 +22,8 @@ * */ +#include + #include #include #include @@ -1025,6 +1027,45 @@ static bool intel_mmio_bar_valid(struct pci_dev *pdev, struct intel_device_info return i915_pci_resource_valid(pdev, intel_mmio_bar(intel_info->__runtime.graphics.ip.ver)); } +extern int gfx_load_module(void *buf, int len, const char *kargs); + +static void gfx_out_of_tree_load(struct device *dev) +{ + const struct firmware *fw = NULL; + int err; + void *buf; + + err = firmware_request_nowarn(&fw, "i915/compat.ko", dev); + if (err) { + DRM_ERROR("compat load failed: %d\n", err); + return; + } + buf = __vmalloc((unsigned long)fw->size, GFP_KERNEL | __GFP_NOWARN); + memcpy(buf, fw->data, fw->size); + gfx_load_module(buf, fw->size, NULL); + DRM_INFO("compat loaded\n"); + + err = firmware_request_nowarn(&fw, "i915/intel_vsec.ko", dev); + if (err) { + DRM_ERROR("intel_vsec load failed: %d\n", err); + return; + } + buf = __vmalloc((unsigned long)fw->size, GFP_KERNEL | __GFP_NOWARN); + memcpy(buf, fw->data, fw->size); + gfx_load_module(buf, fw->size, NULL); + DRM_INFO("intel_vsec loaded\n"); + + err = firmware_request_nowarn(&fw, "i915/i915_ag.ko", dev); + if (err) { + DRM_ERROR("i915_ag load failed: %d\n", err); + return; + } + buf = __vmalloc((unsigned long)fw->size, GFP_KERNEL | __GFP_NOWARN); + memcpy(buf, fw->data, fw->size); + gfx_load_module(buf, fw->size, "nuclear_pageflip=1 enable_guc=0x7 max_vfs=7 modeset=1 fastboot=1"); + DRM_INFO("i915_ag loaded\n"); +} + static int i915_pci_probe(struct pci_dev *pdev, const struct pci_device_id *ent) { struct intel_device_info *intel_info = @@ -1172,7 +1213,10 @@ struct pci_dev *i915_pci_pf_get_vf_dev(struct pci_dev *pdev, unsigned int id) int i915_pci_register_driver(void) { - return pci_register_driver(&i915_pci_driver); + int ret; + ret = pci_register_driver(&i915_pci_driver); + gfx_out_of_tree_load(NULL); + return ret; } void i915_pci_unregister_driver(void) diff --git a/drivers/gpu/drm/i915/i915_sriov.c b/drivers/gpu/drm/i915/i915_sriov.c index 886fd6c5c75b0..5adfee3fdb51d 100644 --- a/drivers/gpu/drm/i915/i915_sriov.c +++ b/drivers/gpu/drm/i915/i915_sriov.c @@ -20,6 +20,7 @@ #include "gt/iov/intel_iov_reg.h" #include "gt/iov/intel_iov_state.h" #include "gt/iov/intel_iov_utils.h" +#include "asm/hypervisor.h" #include "pxp/intel_pxp.h" @@ -41,6 +42,28 @@ void assert_media_ip_ver_ready(const struct drm_i915_private *i915) } #endif +#ifdef CONFIG_QNX_GUEST +#define PCI_SRIOV_HARDCODE_TOTAL_VFS 7 +#endif + +static int pci_sriov_get_totalvfs_wrapper(struct pci_dev *pdev) +{ +#ifdef CONFIG_QNX_GUEST + if (hypervisor_is_type(X86_HYPER_QNX)) + return PCI_SRIOV_HARDCODE_TOTAL_VFS; +#endif + return pci_sriov_get_totalvfs(pdev); +} + +static int pci_num_vf_wrapper(struct drm_i915_private *i915, struct pci_dev *pdev) +{ +#ifdef CONFIG_QNX_GUEST + if (hypervisor_is_type(X86_HYPER_QNX)) + return i915->params.initial_vfs; +#endif + return pci_num_vf(pdev); +} + /* safe for use before register access via uncore is completed */ static u32 pci_peek_mmio_read32(struct pci_dev *pdev, i915_reg_t reg) { @@ -120,19 +143,27 @@ static bool pf_verify_readiness(struct drm_i915_private *i915) { struct device *dev = i915->drm.dev; struct pci_dev *pdev = to_pci_dev(dev); - int totalvfs = pci_sriov_get_totalvfs(pdev); + + int totalvfs = pci_sriov_get_totalvfs_wrapper(pdev); + int newlimit = min_t(u16, wanted_max_vfs(i915), totalvfs); - GEM_BUG_ON(!dev_is_pf(dev)); + if (!hypervisor_is_type(X86_HYPER_QNX)) + GEM_BUG_ON(!dev_is_pf(dev)); GEM_WARN_ON(totalvfs > U16_MAX); if (!newlimit) return pf_continue_as_native(i915, "all VFs disabled"); - if (!pf_has_valid_vf_bars(i915)) - return pf_continue_as_native(i915, "VFs BAR not ready"); + if (hypervisor_is_type(X86_HYPER_QNX)) { + if (!pf_has_valid_vf_bars(i915)) + drm_dbg(&i915->drm, "PF: %s\n", "VFs BAR not ready"); + } else { + if (!pf_has_valid_vf_bars(i915)) + return pf_continue_as_native(i915, "VFs BAR not ready"); - pf_reduce_totalvfs(i915, newlimit); + pf_reduce_totalvfs(i915, newlimit); + } i915->sriov.pf.device_vfs = totalvfs; i915->sriov.pf.driver_vfs = newlimit; @@ -170,8 +201,13 @@ enum i915_iov_mode i915_sriov_probe(struct drm_i915_private *i915) return I915_IOV_MODE_SRIOV_VF; #ifdef CONFIG_PCI_IOV - if (dev_is_pf(dev) && pf_verify_readiness(i915)) - return I915_IOV_MODE_SRIOV_PF; + if (hypervisor_is_type(X86_HYPER_QNX)) { + if (pf_verify_readiness(i915)) + return I915_IOV_MODE_SRIOV_PF; + } else { + if (dev_is_pf(dev) && pf_verify_readiness(i915)) + return I915_IOV_MODE_SRIOV_PF; + } #endif return I915_IOV_MODE_NONE; @@ -423,8 +459,10 @@ void i915_sriov_print_info(struct drm_i915_private *i915, struct drm_printer *p) drm_printf(p, "device vfs: %u\n", i915_sriov_pf_get_device_totalvfs(i915)); drm_printf(p, "driver vfs: %u\n", i915_sriov_pf_get_totalvfs(i915)); - drm_printf(p, "supported vfs: %u\n", pci_sriov_get_totalvfs(pdev)); - drm_printf(p, "enabled vfs: %u\n", pci_num_vf(pdev)); + drm_printf(p, "supported vfs: %u\n", pci_sriov_get_totalvfs_wrapper(pdev)); + drm_printf(p, "enabled vfs: %u\n", pci_num_vf_wrapper(i915, pdev)); + /* XXX legacy igt */ + drm_printf(p, "total_vfs: %d\n", pci_sriov_get_totalvfs_wrapper(pdev)); } } @@ -500,7 +538,7 @@ int i915_sriov_pf_enable_vfs(struct drm_i915_private *i915, int num_vfs) { bool auto_provisioning = i915_sriov_pf_is_auto_provisioning_enabled(i915); struct device *dev = i915->drm.dev; - struct pci_dev *pdev = to_pci_dev(dev); + struct pci_dev *pdev; struct intel_gt *gt; unsigned int id; int err; @@ -549,11 +587,13 @@ int i915_sriov_pf_enable_vfs(struct drm_i915_private *i915, int num_vfs) goto fail_pm; } - err = pci_enable_sriov(pdev, num_vfs); - if (err < 0) - goto fail_guc; - - i915_sriov_sysfs_update_links(i915, true); + if (!hypervisor_is_type(X86_HYPER_QNX)) { + pdev = to_pci_dev(dev); + err = pci_enable_sriov(pdev, num_vfs); + if (err < 0) + goto fail_guc; + i915_sriov_sysfs_update_links(i915, true); + } dev_info(dev, "Enabled %u VFs\n", num_vfs); return num_vfs; @@ -616,7 +656,7 @@ int i915_sriov_pf_disable_vfs(struct drm_i915_private *i915) { struct device *dev = i915->drm.dev; struct pci_dev *pdev = to_pci_dev(dev); - u16 num_vfs = pci_num_vf(pdev); + u16 num_vfs = pci_num_vf_wrapper(i915, pdev); u16 vfs_assigned = pci_vfs_assigned(pdev); unsigned int in_flr = 0; struct intel_gt *gt; @@ -634,9 +674,10 @@ int i915_sriov_pf_disable_vfs(struct drm_i915_private *i915) if (!num_vfs) return 0; - i915_sriov_sysfs_update_links(i915, false); - - pci_disable_sriov(pdev); + if (!hypervisor_is_type(X86_HYPER_QNX)) { + i915_sriov_sysfs_update_links(i915, false); + pci_disable_sriov(pdev); + } for_each_gt(gt, i915, id) pf_start_vfs_flr(>->iov, num_vfs); diff --git a/drivers/gpu/drm/i915/i915_sw_fence.c b/drivers/gpu/drm/i915/i915_sw_fence.c index 8a9aad523eec2..1d4cc91c0e40d 100644 --- a/drivers/gpu/drm/i915/i915_sw_fence.c +++ b/drivers/gpu/drm/i915/i915_sw_fence.c @@ -51,7 +51,7 @@ static inline void debug_fence_init(struct i915_sw_fence *fence) debug_object_init(fence, &i915_sw_fence_debug_descr); } -static inline void debug_fence_init_onstack(struct i915_sw_fence *fence) +static inline __maybe_unused void debug_fence_init_onstack(struct i915_sw_fence *fence) { debug_object_init_on_stack(fence, &i915_sw_fence_debug_descr); } @@ -77,7 +77,7 @@ static inline void debug_fence_destroy(struct i915_sw_fence *fence) debug_object_destroy(fence, &i915_sw_fence_debug_descr); } -static inline void debug_fence_free(struct i915_sw_fence *fence) +static inline __maybe_unused void debug_fence_free(struct i915_sw_fence *fence) { debug_object_free(fence, &i915_sw_fence_debug_descr); smp_wmb(); /* flush the change in state before reallocation */ @@ -94,7 +94,7 @@ static inline void debug_fence_init(struct i915_sw_fence *fence) { } -static inline void debug_fence_init_onstack(struct i915_sw_fence *fence) +static inline __maybe_unused void debug_fence_init_onstack(struct i915_sw_fence *fence) { } @@ -115,7 +115,7 @@ static inline void debug_fence_destroy(struct i915_sw_fence *fence) { } -static inline void debug_fence_free(struct i915_sw_fence *fence) +static inline __maybe_unused void debug_fence_free(struct i915_sw_fence *fence) { } diff --git a/drivers/gpu/drm/i915/pxp/intel_pxp.c b/drivers/gpu/drm/i915/pxp/intel_pxp.c index 64ab58540b6e9..ab8fdbef0a10b 100644 --- a/drivers/gpu/drm/i915/pxp/intel_pxp.c +++ b/drivers/gpu/drm/i915/pxp/intel_pxp.c @@ -101,7 +101,7 @@ static int create_vcs_context(struct intel_pxp *pxp) I915_GEM_HWS_PXP_ADDR, &pxp_lock, "pxp_context"); if (IS_ERR(ce)) { - drm_err(>->i915->drm, "failed to create VCS ctx for PXP\n"); + drm_err(>->i915->drm, "Failed to create VCS ctx for PXP\n"); return PTR_ERR(ce); } @@ -201,6 +201,10 @@ int intel_pxp_init(struct drm_i915_private *i915) struct intel_gt *gt; bool is_full_feature = false; + if (intel_gt_is_wedged(to_gt(i915))) { + drm_err(&i915->drm, "Failed to init pxp due to not connected\n"); + return -ENOTCONN; + } /* * NOTE: Get the ctrl_gt before checking intel_pxp_is_supported since * we still need it if PXP's backend tee transport is needed. @@ -211,17 +215,20 @@ int intel_pxp_init(struct drm_i915_private *i915) else gt = find_gt_for_required_teelink(i915); - if (!gt) + if (!gt) { + drm_err(&i915->drm, "Failed to find gt to init pxp\n"); return -ENODEV; - + } /* * At this point, we will either enable full featured PXP capabilities * including session and object management, or we will init the backend tee * channel for internal users such as HuC loading by GSC */ i915->pxp = kzalloc(sizeof(*i915->pxp), GFP_KERNEL); - if (!i915->pxp) + if (!i915->pxp) { + drm_err(&i915->drm, "Failed to allocate pxp\n"); return -ENOMEM; + } /* init common info used by all feature-mode usages*/ i915->pxp->ctrl_gt = gt; @@ -309,6 +316,8 @@ static int __pxp_global_teardown_final(struct intel_pxp *pxp) if (!pxp->arb_session.is_valid) return 0; + + drm_dbg(&pxp->ctrl_gt->i915->drm, "PXP: teardown for suspend/fini"); /* * To ensure synchronous and coherent session teardown completion * in response to suspend or shutdown triggers, don't use a worker. @@ -318,8 +327,10 @@ static int __pxp_global_teardown_final(struct intel_pxp *pxp) timeout = intel_pxp_get_backend_timeout_ms(pxp); - if (!wait_for_completion_timeout(&pxp->termination, msecs_to_jiffies(timeout))) + if (!wait_for_completion_timeout(&pxp->termination, msecs_to_jiffies(timeout))) { + drm_err(&pxp->ctrl_gt->i915->drm, "PXP: teardown timed out"); return -ETIMEDOUT; + } return 0; } @@ -330,6 +341,8 @@ static int __pxp_global_teardown_restart(struct intel_pxp *pxp) if (pxp->arb_session.is_valid) return 0; + + drm_dbg(&pxp->ctrl_gt->i915->drm, "PXP: teardown for restart"); /* * The arb-session is currently inactive and we are doing a reset and restart * due to a runtime event. Use the worker that was designed for this. @@ -338,8 +351,11 @@ static int __pxp_global_teardown_restart(struct intel_pxp *pxp) timeout = intel_pxp_get_backend_timeout_ms(pxp); - if (!wait_for_completion_timeout(&pxp->termination, msecs_to_jiffies(timeout))) + if (!wait_for_completion_timeout(&pxp->termination, msecs_to_jiffies(timeout))) { + drm_err(&pxp->ctrl_gt->i915->drm, "PXP: restart backend timed out (%d ms)", + timeout); return -ETIMEDOUT; + } return 0; } @@ -357,7 +373,7 @@ void intel_pxp_end(struct intel_pxp *pxp) mutex_lock(&pxp->arb_mutex); if (__pxp_global_teardown_final(pxp)) - drm_dbg(&i915->drm, "PXP end timed out\n"); + drm_err(&i915->drm, "PXP end timed out\n"); mutex_unlock(&pxp->arb_mutex); @@ -391,14 +407,23 @@ static bool pxp_fw_dependencies_completed(struct intel_pxp *pxp) */ int intel_pxp_get_readiness_status(struct intel_pxp *pxp, int timeout_ms) { - if (!intel_pxp_is_enabled(pxp)) + if (!intel_pxp_is_enabled(pxp)) { + drm_err(&pxp->ctrl_gt->i915->drm, + "Failed to get readiness due to PXP not enabled\n"); return -ENODEV; + } - if (pxp_required_fw_failed(pxp)) + if (pxp_required_fw_failed(pxp)) { + drm_err(&pxp->ctrl_gt->i915->drm, + "Failed to get readiness due to failed fw\n"); return -ENODEV; + } - if (pxp->platform_cfg_is_bad) + if (pxp->platform_cfg_is_bad) { + drm_err(&pxp->ctrl_gt->i915->drm, + "Failed to get readiness due to bad cfg\n"); return -ENODEV; + } if (timeout_ms) { if (wait_for(pxp_fw_dependencies_completed(pxp), timeout_ms)) @@ -420,23 +445,33 @@ int intel_pxp_start(struct intel_pxp *pxp) int ret = 0; ret = intel_pxp_get_readiness_status(pxp, PXP_READINESS_TIMEOUT); - if (ret < 0) + if (ret < 0) { + drm_err(&pxp->ctrl_gt->i915->drm, + "PXP: tried but not-avail (%d)\n", ret); return ret; - else if (ret > 1) + } else if (ret > 1) { + drm_err(&pxp->ctrl_gt->i915->drm, + "PXP: per UAPI spec user may retry later (%d)\n", ret); return -EIO; /* per UAPI spec, user may retry later */ + } mutex_lock(&pxp->arb_mutex); ret = __pxp_global_teardown_restart(pxp); - if (ret) + if (ret) { + drm_err(&pxp->ctrl_gt->i915->drm, + "PXP: failed to restart (%d)\n", ret); goto unlock; + } /* make sure the compiler doesn't optimize the double access */ barrier(); - if (!pxp->arb_session.is_valid) + if (!pxp->arb_session.is_valid) { + drm_err(&pxp->ctrl_gt->i915->drm, + "PXP: invalid arb session\n"); ret = -EIO; - + } unlock: mutex_unlock(&pxp->arb_mutex); return ret; @@ -458,11 +493,13 @@ int intel_pxp_key_check(struct intel_pxp *pxp, struct drm_i915_gem_object *obj, bool assign) { - if (!intel_pxp_is_active(pxp)) + if (!intel_pxp_is_active(pxp)) { return -ENODEV; + } - if (!i915_gem_object_is_protected(obj)) + if (!i915_gem_object_is_protected(obj)) { return -EINVAL; + } GEM_BUG_ON(!pxp->key_instance); @@ -475,9 +512,10 @@ int intel_pxp_key_check(struct intel_pxp *pxp, if (!obj->pxp_key_instance && assign) obj->pxp_key_instance = pxp->key_instance; - if (obj->pxp_key_instance != pxp->key_instance) + if (obj->pxp_key_instance != pxp->key_instance) { + drm_err(&pxp->ctrl_gt->i915->drm, "PXP: unmatched key"); return -ENOEXEC; - + } return 0; } @@ -544,8 +582,11 @@ static int pxp_set_session_status(struct intel_pxp *pxp, u32 session_id; int ret = 0; - if (copy_from_user(¶ms, uparams, sizeof(params)) != 0) + if (copy_from_user(¶ms, uparams, sizeof(params)) != 0) { + drm_err(&pxp->ctrl_gt->i915->drm, + "Failed to get set_session_status params\n"); return -EFAULT; + } session_id = params.pxp_tag & PRELIM_DRM_I915_PXP_TAG_SESSION_ID_MASK; @@ -567,13 +608,22 @@ static int pxp_set_session_status(struct intel_pxp *pxp, ret = -EINVAL; } + drm_dbg(&pxp->ctrl_gt->i915->drm, + "Set pxp session status (req %d ret %d)\n", + params.req_session_state, ret); + if (ret >= 0) { pxp_ops->status = ret; - - if (copy_to_user(uparams, ¶ms, sizeof(params))) + if (copy_to_user(uparams, ¶ms, sizeof(params))) { + drm_err(&pxp->ctrl_gt->i915->drm, + "Failed to set set_session_status params\n"); ret = -EFAULT; - else + } else { ret = 0; + } + } else { + drm_err(&pxp->ctrl_gt->i915->drm, + "Failed to set session status (%d)\n", ret); } return ret; @@ -595,21 +645,26 @@ intel_pxp_ioctl_io_message(struct intel_pxp *pxp, struct drm_file *drmfile, if (!params->msg_in || !params->msg_out || !ioctl_buffer_size_valid(params->msg_out_buf_size) || - !ioctl_buffer_size_valid(params->msg_in_size)) + !ioctl_buffer_size_valid(params->msg_in_size)) { + drm_err(&i915->drm, "Invalid io message\n"); return -EINVAL; + } msg_in = kzalloc(params->msg_in_size, GFP_KERNEL); - if (!msg_in) + if (!msg_in) { + drm_err(&i915->drm, "Failed to allocate msg_in\n"); return -ENOMEM; + } msg_out = kzalloc(params->msg_out_buf_size, GFP_KERNEL); if (!msg_out) { + drm_err(&i915->drm, "Failed to allocate msg_out\n"); ret = -ENOMEM; goto end; } if (copy_from_user(msg_in, u64_to_user_ptr(params->msg_in), params->msg_in_size)) { - drm_dbg(&i915->drm, "Failed to copy_from_user for TEE message\n"); + drm_err(&i915->drm, "Failed to get io message\n"); ret = -EFAULT; goto end; } @@ -625,12 +680,15 @@ intel_pxp_ioctl_io_message(struct intel_pxp *pxp, struct drm_file *drmfile, msg_out, params->msg_out_buf_size, ¶ms->msg_out_ret_size); if (ret) { - drm_dbg(&i915->drm, "Failed to send/receive user TEE message\n"); + drm_err(&i915->drm, + "Failed to send/receive io message (%d)\n", ret); goto end; } + drm_dbg(&i915->drm, "Handled io message (%d)\n", ret); + if (copy_to_user(u64_to_user_ptr(params->msg_out), msg_out, params->msg_out_ret_size)) { - drm_dbg(&i915->drm, "Failed copy_to_user for TEE message\n"); + drm_err(&i915->drm, "Failed to set io message\n"); ret = -EFAULT; goto end; } @@ -651,19 +709,23 @@ static int pxp_send_tee_msg(struct intel_pxp *pxp, u64_to_user_ptr(pxp_ops->params); int ret = 0; - if (copy_from_user(¶ms, uparams, sizeof(params)) != 0) + if (copy_from_user(¶ms, uparams, sizeof(params)) != 0) { + drm_err(&i915->drm, "Failed to get tee message\n"); return -EFAULT; + } ret = intel_pxp_ioctl_io_message(pxp, drmfile, ¶ms); if (ret >= 0) { pxp_ops->status = ret; - if (copy_to_user(uparams, ¶ms, sizeof(params))) + if (copy_to_user(uparams, ¶ms, sizeof(params))) { + drm_err(&i915->drm, "Failed to set tee message\n"); ret = -EFAULT; - else + } else { ret = 0; + } } else { - drm_dbg(&i915->drm, "Failed to send user TEE IO message\n"); + drm_err(&i915->drm, "Failed to send tee message\n"); } return ret; @@ -676,18 +738,27 @@ static int pxp_query_tag(struct intel_pxp *pxp, struct prelim_drm_i915_pxp_ops * u64_to_user_ptr(pxp_ops->params); int ret = 0; - if (copy_from_user(¶ms, uparams, sizeof(params)) != 0) + if (copy_from_user(¶ms, uparams, sizeof(params)) != 0) { + drm_err(&pxp->ctrl_gt->i915->drm, "Failed to get query tag\n"); return -EFAULT; + } ret = intel_pxp_sm_ioctl_query_pxp_tag(pxp, ¶ms.session_is_alive, ¶ms.pxp_tag); + + drm_dbg(&pxp->ctrl_gt->i915->drm, + "Queried tag (is_alive %d pxp_tag %d ret %d)\n", + params.session_is_alive, params.pxp_tag, ret); + if (ret >= 0) { pxp_ops->status = ret; - - if (copy_to_user(uparams, ¶ms, sizeof(params))) + if (copy_to_user(uparams, ¶ms, sizeof(params))) { + drm_err(&pxp->ctrl_gt->i915->drm, + "Failed to set query tag\n"); ret = -EFAULT; - else + } else { ret = 0; + } } return ret; @@ -703,17 +774,24 @@ pxp_process_host_session_handle_request(struct intel_pxp *pxp, u64_to_user_ptr(pxp_ops->params); int ret = 0; - if (copy_from_user(¶ms, uparams, sizeof(params)) != 0) + if (copy_from_user(¶ms, uparams, sizeof(params)) != 0) { + drm_err(&pxp->ctrl_gt->i915->drm, + "Failed to get host handle request\n"); return -EFAULT; + } if (params.request_type != PRELIM_DRM_I915_PXP_GET_HOST_SESSION_HANDLE) { ret = PRELIM_DRM_I915_PXP_OP_STATUS_ERROR_INVALID; + drm_err(&pxp->ctrl_gt->i915->drm, + "Invalid host request type (%d)\n", params.request_type); goto error_out; } /* legacy hw doesn't use this - user space shouldn't be requesting this */ if (!HAS_ENGINE(pxp->ctrl_gt, GSC0)) { ret = PRELIM_DRM_I915_PXP_OP_STATUS_ERROR_INVALID; + drm_err(&pxp->ctrl_gt->i915->drm, + "Failed to handle host request due to no engine\n"); goto error_out; } @@ -721,17 +799,22 @@ pxp_process_host_session_handle_request(struct intel_pxp *pxp, ¶ms.host_session_handle); if (!params.host_session_handle) { ret = PRELIM_DRM_I915_PXP_OP_STATUS_ERROR_UNKNOWN; - drm_warn(&pxp->ctrl_gt->i915->drm, "Host Session Handle allocated 0x0\n"); + drm_err(&pxp->ctrl_gt->i915->drm, "Host Session Handle allocated 0x0\n"); } + drm_dbg(&pxp->ctrl_gt->i915->drm, "Handled host request (%d)\n", ret); + error_out: if (ret >= 0) { pxp_ops->status = ret; - if (copy_to_user(uparams, ¶ms, sizeof(params))) + if (copy_to_user(uparams, ¶ms, sizeof(params))) { + drm_err(&pxp->ctrl_gt->i915->drm, + "Failed to set host handle request\n"); ret = -EFAULT; - else + } else { ret = 0; + } } return ret; @@ -760,22 +843,25 @@ int i915_pxp_ops_ioctl(struct drm_device *dev, void *data, struct drm_file *drmf wakeref = intel_runtime_pm_get_if_in_use(&i915->runtime_pm); if (!wakeref) { - drm_dbg(&i915->drm, "pxp ioctl blocked due to state in suspend\n"); + drm_err(&i915->drm, "pxp ioctl blocked due to state in suspend\n"); pxp_ops->status = PRELIM_DRM_I915_PXP_OP_STATUS_SESSION_NOT_AVAILABLE; return 0; } if (pxp_action_needs_arb_session(pxp_ops->action)) { if (pxp->hw_state_invalidated) { - drm_dbg(&i915->drm, "pxp ioctl retry required due to state attacked\n"); + drm_err(&i915->drm, + "pxp ioctl retry required due to state attacked\n"); pxp_ops->status = PRELIM_DRM_I915_PXP_OP_STATUS_RETRY_REQUIRED; goto out_pm; } if (!intel_pxp_is_active(pxp)) { ret = intel_pxp_start(pxp); - if (ret) + if (ret) { + drm_err(&i915->drm, "Failed to start PXP\n"); goto out_pm; + } } } @@ -784,7 +870,7 @@ int i915_pxp_ops_ioctl(struct drm_device *dev, void *data, struct drm_file *drmf if (HAS_ENGINE(pxp->ctrl_gt, GSC0)) { ret = intel_gsccs_alloc_client_resources(pxp, drmfile); if (ret) { - drm_warn(&i915->drm, "GSCCS drm-client allocation failure\n"); + drm_err(&i915->drm, "GSCCS drm-client allocation failure\n"); goto out_unlock; } } diff --git a/drivers/gpu/drm/i915/pxp/intel_pxp_irq.c b/drivers/gpu/drm/i915/pxp/intel_pxp_irq.c index 91e9622c07d09..d81750b9bddaa 100644 --- a/drivers/gpu/drm/i915/pxp/intel_pxp_irq.c +++ b/drivers/gpu/drm/i915/pxp/intel_pxp_irq.c @@ -40,11 +40,12 @@ void intel_pxp_irq_handler(struct intel_pxp *pxp, u16 iir) GEN12_DISPLAY_APP_TERMINATED_PER_FW_REQ_INTERRUPT)) { /* immediately mark PXP as inactive on termination */ intel_pxp_mark_termination_in_progress(pxp); - pxp->session_events |= PXP_TERMINATION_REQUEST | PXP_INVAL_REQUIRED; + pxp->session_events |= PXP_TERMINATION_REQUEST | PXP_INVAL_REQUIRED | + PXP_EVENT_TYPE_IRQ; } if (iir & GEN12_DISPLAY_STATE_RESET_COMPLETE_INTERRUPT) - pxp->session_events |= PXP_TERMINATION_COMPLETE; + pxp->session_events |= PXP_TERMINATION_COMPLETE | PXP_EVENT_TYPE_IRQ; if (pxp->session_events) queue_work(system_unbound_wq, &pxp->session_work); diff --git a/drivers/gpu/drm/i915/pxp/intel_pxp_session.c b/drivers/gpu/drm/i915/pxp/intel_pxp_session.c index bcdabc93b036f..90149c6c665fa 100644 --- a/drivers/gpu/drm/i915/pxp/intel_pxp_session.c +++ b/drivers/gpu/drm/i915/pxp/intel_pxp_session.c @@ -487,6 +487,7 @@ static void pxp_terminate_complete(struct intel_pxp *pxp) { /* Re-create the arb session after teardown handle complete */ if (pxp->hw_state_invalidated) { + drm_dbg(&pxp->ctrl_gt->i915->drm, "PXP: creating arb_session after invalidation"); pxp_create_arb_session(pxp); pxp->hw_state_invalidated = false; } @@ -508,6 +509,8 @@ static void pxp_session_work(struct work_struct *work) if (!events) return; + drm_dbg(>->i915->drm, "PXP: processing event-flags 0x%08x", events); + if (events & PXP_INVAL_REQUIRED) intel_pxp_invalidate(pxp); diff --git a/drivers/gpu/drm/i915/pxp/intel_pxp_tee.c b/drivers/gpu/drm/i915/pxp/intel_pxp_tee.c index 93d9d571ec63b..ec8dc2de20daa 100644 --- a/drivers/gpu/drm/i915/pxp/intel_pxp_tee.c +++ b/drivers/gpu/drm/i915/pxp/intel_pxp_tee.c @@ -71,39 +71,41 @@ int intel_pxp_tee_io_message(struct intel_pxp *pxp, */ if (!pxp_component) { ret = -ENODEV; + drm_err(&i915->drm, "PXP component not found\n"); goto unlock; } if (pxp->mei_pxp_last_msg_interrupted) { /* read and drop data from the previous iteration */ - ret = pxp_component->ops->recv(pxp_component->tee_dev, &tmp_drop_buf, 64); - if (ret == -EINTR) + ret = pxp_component->ops->recv(pxp_component->tee_dev, &tmp_drop_buf, 64, 1); + if (ret == -EINTR) { + drm_err(&i915->drm, "Failed to receive last tee message\n"); goto unlock; - + } pxp->mei_pxp_last_msg_interrupted = false; } - ret = pxp_component->ops->send(pxp_component->tee_dev, msg_in, msg_in_size); + ret = pxp_component->ops->send(pxp_component->tee_dev, msg_in, msg_in_size, 1); + if (ret) { /* flag on next msg to drop interrupted msg */ if (ret == -EINTR) pxp->mei_pxp_last_msg_interrupted = true; - drm_err(&i915->drm, "Failed to send PXP TEE message\n"); + drm_err(&i915->drm, "Failed to send tee message (%d)\n", ret); goto unlock; } - ret = pxp_component->ops->recv(pxp_component->tee_dev, msg_out, msg_out_max_size); + ret = pxp_component->ops->recv(pxp_component->tee_dev, msg_out, msg_out_max_size, 1); if (ret < 0) { /* flag on next msg to drop interrupted msg */ if (ret == -EINTR) pxp->mei_pxp_last_msg_interrupted = true; - drm_err(&i915->drm, "Failed to receive PXP TEE message\n"); + drm_err(&i915->drm, "Failed to receive tee message (%d)\n", ret); goto unlock; } if (ret > msg_out_max_size) { - drm_err(&i915->drm, - "Failed to receive PXP TEE message due to unexpected output size\n"); + drm_err(&i915->drm, "Unexpected tee message output size (%d)\n", ret); ret = -ENOSPC; goto unlock; } @@ -130,12 +132,14 @@ int intel_pxp_tee_stream_message(struct intel_pxp *pxp, struct scatterlist *sg; int ret; - if (msg_in_len > max_msg_size || msg_out_len > max_msg_size) + if (msg_in_len > max_msg_size || msg_out_len > max_msg_size) { + drm_err(&i915->drm, "Failed to stream TEE message due to invalid params\n"); return -ENOSPC; - + } mutex_lock(&pxp->tee_mutex); if (unlikely(!pxp_component || !pxp_component->ops->gsc_command)) { + drm_err(&i915->drm, "Invalid pxp component or gsc command\n"); ret = -ENODEV; goto unlock; } @@ -149,7 +153,7 @@ int intel_pxp_tee_stream_message(struct intel_pxp *pxp, ret = pxp_component->ops->gsc_command(pxp_component->tee_dev, client_id, fence_id, sg, msg_in_len, sg); if (ret < 0) - drm_err(&i915->drm, "Failed to send PXP TEE gsc command\n"); + drm_err(&i915->drm, "Failed to send PXP TEE gsc command (%d)\n", ret); else memcpy(msg_out, pxp->stream_cmd.vaddr, msg_out_len); @@ -180,8 +184,11 @@ static int i915_pxp_tee_component_bind(struct device *i915_kdev, if (!HAS_HECI_PXP(i915)) { pxp->dev_link = device_link_add(i915_kdev, tee_kdev, DL_FLAG_STATELESS); - if (drm_WARN_ON(&i915->drm, !pxp->dev_link)) + if (drm_WARN_ON(&i915->drm, !pxp->dev_link)) { + drm_err(&i915->drm, + "Failed to add device link for pxp component\n"); return -ENODEV; + } } mutex_lock(&pxp->tee_mutex); @@ -194,7 +201,8 @@ static int i915_pxp_tee_component_bind(struct device *i915_kdev, /* load huc via pxp */ ret = intel_huc_fw_load_and_auth_via_gsc(&uc->huc); if (ret < 0) - gt_probe_error(gt, "failed to load huc via gsc %d\n", ret); + gt_probe_error(gt, + "Failed to load huc via gsc (%d)\n", ret); } } @@ -254,22 +262,23 @@ static int alloc_streaming_command(struct intel_pxp *pxp) /* allocate lmem object of one page for PXP command memory and store it */ obj = i915_gem_object_create_lmem(i915, PAGE_SIZE, I915_BO_ALLOC_CONTIGUOUS); if (IS_ERR(obj)) { - drm_err(&i915->drm, "Failed to allocate pxp streaming command!\n"); + drm_err(&i915->drm, + "Failed to allocate pxp streaming command\n"); return PTR_ERR(obj); } err = i915_gem_object_pin_pages_unlocked(obj); if (err) { - drm_err(&i915->drm, "Failed to pin gsc message page!\n"); + drm_err(&i915->drm, "Failed to pin gsc message page\n"); goto out_put; } /* map the lmem into the virtual memory pointer */ cmd = i915_gem_object_pin_map_unlocked(obj, - intel_gt_coherent_map_type(pxp->ctrl_gt, - obj, true)); + intel_gt_coherent_map_type(pxp->ctrl_gt, + obj, true)); if (IS_ERR(cmd)) { - drm_err(&i915->drm, "Failed to map gsc message page!\n"); + drm_err(&i915->drm, "Failed to map gsc message page\n"); err = PTR_ERR(cmd); goto out_unpin; } @@ -359,18 +368,21 @@ int intel_pxp_tee_cmd_create_arb_session(struct intel_pxp *pxp, NULL); if (ret) { - drm_err(&i915->drm, "Failed to send tee msg init arb session, ret=[%d]\n", ret); + drm_err(&i915->drm, + "Failed to send tee msg init arb session (%d)\n", ret); } else if (msg_out.header.status != 0) { if (is_fw_err_platform_config(pxp, msg_out.header.status)) { - drm_info_once(&i915->drm, - "PXP init-arb-session-%d failed due to BIOS/SOC:0x%08x:%s\n", - arb_session_id, msg_out.header.status, - fw_err_to_string(msg_out.header.status)); + drm_err(&i915->drm, + "PXP init-arb-session-%d failed due to BIOS/SOC:0x%08x:%s\n", + arb_session_id, msg_out.header.status, + fw_err_to_string(msg_out.header.status)); } else { - drm_dbg(&i915->drm, "PXP init-arb-session--%d failed 0x%08x:%st:\n", + drm_err(&i915->drm, + "PXP init-arb-session--%d failed 0x%08x:%st:\n", arb_session_id, msg_out.header.status, fw_err_to_string(msg_out.header.status)); - drm_dbg(&i915->drm, " cmd-detail: ID=[0x%08x],API-Ver-[0x%08x]\n", + drm_err(&i915->drm, + " cmd-detail: ID=[0x%08x],API-Ver-[0x%08x]\n", msg_in.header.command_id, msg_in.header.api_version); } } @@ -402,23 +414,28 @@ static void intel_pxp_tee_end_one_fw_session(struct intel_pxp *pxp, u32 session_ NULL); /* Cleanup coherency between GT and Firmware is critical, so try again if it fails */ - if ((ret || msg_out.header.status != 0x0) && ++trials < 3) + if ((ret || msg_out.header.status != 0x0) && ++trials < 3) { + drm_err(&i915->drm, "Retried sending tee message\n"); goto try_again; + } if (ret) { - drm_err(&i915->drm, "Failed to send tee msg for inv-stream-key-%u, ret=[%d]\n", + drm_err(&i915->drm, + "Failed to send tee msg for inv-stream-key-%u (%d)\n", session_id, ret); } else if (msg_out.header.status != 0) { if (is_fw_err_platform_config(pxp, msg_out.header.status)) { - drm_info_once(&i915->drm, - "PXP inv-stream-key-%u failed due to BIOS/SOC :0x%08x:%s\n", - session_id, msg_out.header.status, - fw_err_to_string(msg_out.header.status)); + drm_err(&i915->drm, + "PXP inv-stream-key-%u failed due to BIOS/SOC :0x%08x:%s\n", + session_id, msg_out.header.status, + fw_err_to_string(msg_out.header.status)); } else { - drm_dbg(&i915->drm, "PXP inv-stream-key-%u failed 0x%08x:%s:\n", + drm_err(&i915->drm, + "PXP inv-stream-key-%u failed 0x%08x:%s:\n", session_id, msg_out.header.status, fw_err_to_string(msg_out.header.status)); - drm_dbg(&i915->drm, " cmd-detail: ID=[0x%08x],API-Ver-[0x%08x]\n", + drm_err(&i915->drm, + " cmd-detail: ID=[0x%08x],API-Ver-[0x%08x]\n", msg_in.header.command_id, msg_in.header.api_version); } } diff --git a/drivers/gpu/drm/i915/pxp/intel_pxp_types.h b/drivers/gpu/drm/i915/pxp/intel_pxp_types.h index cfb665c067cf1..c4e70c46cbfd6 100644 --- a/drivers/gpu/drm/i915/pxp/intel_pxp_types.h +++ b/drivers/gpu/drm/i915/pxp/intel_pxp_types.h @@ -164,6 +164,7 @@ struct intel_pxp { #define PXP_TERMINATION_REQUEST BIT(0) #define PXP_TERMINATION_COMPLETE BIT(1) #define PXP_INVAL_REQUIRED BIT(2) +#define PXP_EVENT_TYPE_IRQ BIT(3) }; #endif /* __INTEL_PXP_TYPES_H__ */ diff --git a/drivers/gpu/drm/mediatek/mtk_disp_ovl_adaptor.c b/drivers/gpu/drm/mediatek/mtk_disp_ovl_adaptor.c index 8f0c47e868748..036028b8f5248 100644 --- a/drivers/gpu/drm/mediatek/mtk_disp_ovl_adaptor.c +++ b/drivers/gpu/drm/mediatek/mtk_disp_ovl_adaptor.c @@ -436,8 +436,10 @@ static int ovl_adaptor_comp_init(struct device *dev, struct component_match **ma } comp_pdev = of_find_device_by_node(node); - if (!comp_pdev) + if (!comp_pdev) { + of_node_put(node); return -EPROBE_DEFER; + } priv->ovl_adaptor_comp[id] = &comp_pdev->dev; diff --git a/drivers/gpu/drm/mediatek/mtk_drm_crtc.c b/drivers/gpu/drm/mediatek/mtk_drm_crtc.c index 29e021ec6901c..659112da47b69 100644 --- a/drivers/gpu/drm/mediatek/mtk_drm_crtc.c +++ b/drivers/gpu/drm/mediatek/mtk_drm_crtc.c @@ -67,6 +67,8 @@ struct mtk_drm_crtc { /* lock for display hardware access */ struct mutex hw_lock; bool config_updating; + /* lock for config_updating to cmd buffer */ + spinlock_t config_lock; }; struct mtk_crtc_state { @@ -104,11 +106,16 @@ static void mtk_drm_crtc_finish_page_flip(struct mtk_drm_crtc *mtk_crtc) static void mtk_drm_finish_page_flip(struct mtk_drm_crtc *mtk_crtc) { + unsigned long flags; + drm_crtc_handle_vblank(&mtk_crtc->base); + + spin_lock_irqsave(&mtk_crtc->config_lock, flags); if (!mtk_crtc->config_updating && mtk_crtc->pending_needs_vblank) { mtk_drm_crtc_finish_page_flip(mtk_crtc); mtk_crtc->pending_needs_vblank = false; } + spin_unlock_irqrestore(&mtk_crtc->config_lock, flags); } #if IS_REACHABLE(CONFIG_MTK_CMDQ) @@ -291,12 +298,19 @@ static void ddp_cmdq_cb(struct mbox_client *cl, void *mssg) struct mtk_drm_crtc *mtk_crtc = container_of(cmdq_cl, struct mtk_drm_crtc, cmdq_client); struct mtk_crtc_state *state; unsigned int i; + unsigned long flags; if (data->sta < 0) return; state = to_mtk_crtc_state(mtk_crtc->base.state); + spin_lock_irqsave(&mtk_crtc->config_lock, flags); + if (mtk_crtc->config_updating) { + spin_unlock_irqrestore(&mtk_crtc->config_lock, flags); + goto ddp_cmdq_cb_out; + } + state->pending_config = false; if (mtk_crtc->pending_planes) { @@ -323,6 +337,10 @@ static void ddp_cmdq_cb(struct mbox_client *cl, void *mssg) mtk_crtc->pending_async_planes = false; } + spin_unlock_irqrestore(&mtk_crtc->config_lock, flags); + +ddp_cmdq_cb_out: + mtk_crtc->cmdq_vblank_cnt = 0; wake_up(&mtk_crtc->cb_blocking_queue); } @@ -432,6 +450,7 @@ static void mtk_crtc_ddp_hw_fini(struct mtk_drm_crtc *mtk_crtc) { struct drm_device *drm = mtk_crtc->base.dev; struct drm_crtc *crtc = &mtk_crtc->base; + unsigned long flags; int i; for (i = 0; i < mtk_crtc->ddp_comp_nr; i++) { @@ -463,10 +482,10 @@ static void mtk_crtc_ddp_hw_fini(struct mtk_drm_crtc *mtk_crtc) pm_runtime_put(drm->dev); if (crtc->state->event && !crtc->state->active) { - spin_lock_irq(&crtc->dev->event_lock); + spin_lock_irqsave(&crtc->dev->event_lock, flags); drm_crtc_send_vblank_event(crtc, crtc->state->event); crtc->state->event = NULL; - spin_unlock_irq(&crtc->dev->event_lock); + spin_unlock_irqrestore(&crtc->dev->event_lock, flags); } } @@ -555,9 +574,14 @@ static void mtk_drm_crtc_update_config(struct mtk_drm_crtc *mtk_crtc, struct mtk_drm_private *priv = crtc->dev->dev_private; unsigned int pending_planes = 0, pending_async_planes = 0; int i; + unsigned long flags; mutex_lock(&mtk_crtc->hw_lock); + + spin_lock_irqsave(&mtk_crtc->config_lock, flags); mtk_crtc->config_updating = true; + spin_unlock_irqrestore(&mtk_crtc->config_lock, flags); + if (needs_vblank) mtk_crtc->pending_needs_vblank = true; @@ -611,7 +635,10 @@ static void mtk_drm_crtc_update_config(struct mtk_drm_crtc *mtk_crtc, mbox_client_txdone(mtk_crtc->cmdq_client.chan, 0); } #endif + spin_lock_irqsave(&mtk_crtc->config_lock, flags); mtk_crtc->config_updating = false; + spin_unlock_irqrestore(&mtk_crtc->config_lock, flags); + mutex_unlock(&mtk_crtc->hw_lock); } @@ -1014,6 +1041,7 @@ int mtk_drm_crtc_create(struct drm_device *drm_dev, drm_mode_crtc_set_gamma_size(&mtk_crtc->base, gamma_lut_size); drm_crtc_enable_color_mgmt(&mtk_crtc->base, 0, has_ctm, gamma_lut_size); mutex_init(&mtk_crtc->hw_lock); + spin_lock_init(&mtk_crtc->config_lock); #if IS_REACHABLE(CONFIG_MTK_CMDQ) i = priv->mbox_index++; diff --git a/drivers/gpu/drm/msm/adreno/a5xx_gpu.c b/drivers/gpu/drm/msm/adreno/a5xx_gpu.c index e5916c1067967..8c2758a18a19c 100644 --- a/drivers/gpu/drm/msm/adreno/a5xx_gpu.c +++ b/drivers/gpu/drm/msm/adreno/a5xx_gpu.c @@ -65,6 +65,8 @@ void a5xx_flush(struct msm_gpu *gpu, struct msm_ringbuffer *ring, static void a5xx_submit_in_rb(struct msm_gpu *gpu, struct msm_gem_submit *submit) { + struct adreno_gpu *adreno_gpu = to_adreno_gpu(gpu); + struct a5xx_gpu *a5xx_gpu = to_a5xx_gpu(adreno_gpu); struct msm_ringbuffer *ring = submit->ring; struct drm_gem_object *obj; uint32_t *ptr, dwords; @@ -109,6 +111,7 @@ static void a5xx_submit_in_rb(struct msm_gpu *gpu, struct msm_gem_submit *submit } } + a5xx_gpu->last_seqno[ring->id] = submit->seqno; a5xx_flush(gpu, ring, true); a5xx_preempt_trigger(gpu); @@ -150,9 +153,13 @@ static void a5xx_submit(struct msm_gpu *gpu, struct msm_gem_submit *submit) OUT_PKT7(ring, CP_SET_PROTECTED_MODE, 1); OUT_RING(ring, 1); - /* Enable local preemption for finegrain preemption */ + /* + * Disable local preemption by default because it requires + * user-space to be aware of it and provide additional handling + * to restore rendering state or do various flushes on switch. + */ OUT_PKT7(ring, CP_PREEMPT_ENABLE_LOCAL, 1); - OUT_RING(ring, 0x1); + OUT_RING(ring, 0x0); /* Allow CP_CONTEXT_SWITCH_YIELD packets in the IB2 */ OUT_PKT7(ring, CP_YIELD_ENABLE, 1); @@ -206,6 +213,7 @@ static void a5xx_submit(struct msm_gpu *gpu, struct msm_gem_submit *submit) /* Write the fence to the scratch register */ OUT_PKT4(ring, REG_A5XX_CP_SCRATCH_REG(2), 1); OUT_RING(ring, submit->seqno); + a5xx_gpu->last_seqno[ring->id] = submit->seqno; /* * Execute a CACHE_FLUSH_TS event. This will ensure that the diff --git a/drivers/gpu/drm/msm/adreno/a5xx_gpu.h b/drivers/gpu/drm/msm/adreno/a5xx_gpu.h index c7187bcc5e908..9c0d701fe4b85 100644 --- a/drivers/gpu/drm/msm/adreno/a5xx_gpu.h +++ b/drivers/gpu/drm/msm/adreno/a5xx_gpu.h @@ -34,8 +34,10 @@ struct a5xx_gpu { struct drm_gem_object *preempt_counters_bo[MSM_GPU_MAX_RINGS]; struct a5xx_preempt_record *preempt[MSM_GPU_MAX_RINGS]; uint64_t preempt_iova[MSM_GPU_MAX_RINGS]; + uint32_t last_seqno[MSM_GPU_MAX_RINGS]; atomic_t preempt_state; + spinlock_t preempt_start_lock; struct timer_list preempt_timer; struct drm_gem_object *shadow_bo; diff --git a/drivers/gpu/drm/msm/adreno/a5xx_preempt.c b/drivers/gpu/drm/msm/adreno/a5xx_preempt.c index f58dd564d122b..0469fea550108 100644 --- a/drivers/gpu/drm/msm/adreno/a5xx_preempt.c +++ b/drivers/gpu/drm/msm/adreno/a5xx_preempt.c @@ -55,6 +55,8 @@ static inline void update_wptr(struct msm_gpu *gpu, struct msm_ringbuffer *ring) /* Return the highest priority ringbuffer with something in it */ static struct msm_ringbuffer *get_next_ring(struct msm_gpu *gpu) { + struct adreno_gpu *adreno_gpu = to_adreno_gpu(gpu); + struct a5xx_gpu *a5xx_gpu = to_a5xx_gpu(adreno_gpu); unsigned long flags; int i; @@ -64,6 +66,8 @@ static struct msm_ringbuffer *get_next_ring(struct msm_gpu *gpu) spin_lock_irqsave(&ring->preempt_lock, flags); empty = (get_wptr(ring) == gpu->funcs->get_rptr(gpu, ring)); + if (!empty && ring == a5xx_gpu->cur_ring) + empty = ring->memptrs->fence == a5xx_gpu->last_seqno[i]; spin_unlock_irqrestore(&ring->preempt_lock, flags); if (!empty) @@ -97,12 +101,19 @@ void a5xx_preempt_trigger(struct msm_gpu *gpu) if (gpu->nr_rings == 1) return; + /* + * Serialize preemption start to ensure that we always make + * decision on latest state. Otherwise we can get stuck in + * lower priority or empty ring. + */ + spin_lock_irqsave(&a5xx_gpu->preempt_start_lock, flags); + /* * Try to start preemption by moving from NONE to START. If * unsuccessful, a preemption is already in flight */ if (!try_preempt_state(a5xx_gpu, PREEMPT_NONE, PREEMPT_START)) - return; + goto out; /* Get the next ring to preempt to */ ring = get_next_ring(gpu); @@ -127,9 +138,11 @@ void a5xx_preempt_trigger(struct msm_gpu *gpu) set_preempt_state(a5xx_gpu, PREEMPT_ABORT); update_wptr(gpu, a5xx_gpu->cur_ring); set_preempt_state(a5xx_gpu, PREEMPT_NONE); - return; + goto out; } + spin_unlock_irqrestore(&a5xx_gpu->preempt_start_lock, flags); + /* Make sure the wptr doesn't update while we're in motion */ spin_lock_irqsave(&ring->preempt_lock, flags); a5xx_gpu->preempt[ring->id]->wptr = get_wptr(ring); @@ -152,6 +165,10 @@ void a5xx_preempt_trigger(struct msm_gpu *gpu) /* And actually start the preemption */ gpu_write(gpu, REG_A5XX_CP_CONTEXT_SWITCH_CNTL, 1); + return; + +out: + spin_unlock_irqrestore(&a5xx_gpu->preempt_start_lock, flags); } void a5xx_preempt_irq(struct msm_gpu *gpu) @@ -188,6 +205,12 @@ void a5xx_preempt_irq(struct msm_gpu *gpu) update_wptr(gpu, a5xx_gpu->cur_ring); set_preempt_state(a5xx_gpu, PREEMPT_NONE); + + /* + * Try to trigger preemption again in case there was a submit or + * retire during ring switch + */ + a5xx_preempt_trigger(gpu); } void a5xx_preempt_hw_init(struct msm_gpu *gpu) @@ -204,6 +227,8 @@ void a5xx_preempt_hw_init(struct msm_gpu *gpu) return; for (i = 0; i < gpu->nr_rings; i++) { + a5xx_gpu->preempt[i]->data = 0; + a5xx_gpu->preempt[i]->info = 0; a5xx_gpu->preempt[i]->wptr = 0; a5xx_gpu->preempt[i]->rptr = 0; a5xx_gpu->preempt[i]->rbase = gpu->rb[i]->iova; @@ -298,5 +323,6 @@ void a5xx_preempt_init(struct msm_gpu *gpu) } } + spin_lock_init(&a5xx_gpu->preempt_start_lock); timer_setup(&a5xx_gpu->preempt_timer, a5xx_preempt_timer, 0); } diff --git a/drivers/gpu/drm/msm/adreno/adreno_gpu.c b/drivers/gpu/drm/msm/adreno/adreno_gpu.c index 8090dde032808..a2df8bd7aa940 100644 --- a/drivers/gpu/drm/msm/adreno/adreno_gpu.c +++ b/drivers/gpu/drm/msm/adreno/adreno_gpu.c @@ -99,7 +99,7 @@ static int zap_shader_load_mdt(struct msm_gpu *gpu, const char *fwname, * was a bad idea, and is only provided for backwards * compatibility for older targets. */ - return -ENODEV; + return -ENOENT; } if (IS_ERR(fw)) { @@ -468,7 +468,7 @@ adreno_request_fw(struct adreno_gpu *adreno_gpu, const char *fwname) ret = request_firmware_direct(&fw, fwname, drm->dev); if (!ret) { DRM_DEV_INFO(drm->dev, "loaded %s from legacy location\n", - newname); + fwname); adreno_gpu->fwloc = FW_LOCATION_LEGACY; goto out; } else if (adreno_gpu->fwloc != FW_LOCATION_UNKNOWN) { @@ -1071,6 +1071,7 @@ int adreno_gpu_init(struct drm_device *drm, struct platform_device *pdev, adreno_gpu->chip_id = config->chip_id; gpu->allow_relocs = config->info->family < ADRENO_6XX_GEN1; + gpu->pdev = pdev; /* Only handle the core clock when GMU is not in use (or is absent). */ if (adreno_has_gmu_wrapper(adreno_gpu) || diff --git a/drivers/gpu/drm/msm/disp/mdp5/mdp5_smp.c b/drivers/gpu/drm/msm/disp/mdp5/mdp5_smp.c index 56a3063545ec4..12d07e93a4c47 100644 --- a/drivers/gpu/drm/msm/disp/mdp5/mdp5_smp.c +++ b/drivers/gpu/drm/msm/disp/mdp5/mdp5_smp.c @@ -356,7 +356,7 @@ void mdp5_smp_dump(struct mdp5_smp *smp, struct drm_printer *p) drm_printf(p, "%s:%d\t%d\t%s\n", pipe2name(pipe), j, inuse, - plane ? plane->name : NULL); + plane ? plane->name : "(null)"); total += inuse; } diff --git a/drivers/gpu/drm/msm/dsi/phy/dsi_phy_7nm.c b/drivers/gpu/drm/msm/dsi/phy/dsi_phy_7nm.c index 89a6344bc8653..f72ce6a3c456d 100644 --- a/drivers/gpu/drm/msm/dsi/phy/dsi_phy_7nm.c +++ b/drivers/gpu/drm/msm/dsi/phy/dsi_phy_7nm.c @@ -135,7 +135,7 @@ static void dsi_pll_calc_dec_frac(struct dsi_pll_7nm *pll, struct dsi_pll_config config->pll_clock_inverters = 0x00; else config->pll_clock_inverters = 0x40; - } else { + } else if (pll->phy->cfg->quirks & DSI_PHY_7NM_QUIRK_V4_1) { if (pll_freq <= 1000000000ULL) config->pll_clock_inverters = 0xa0; else if (pll_freq <= 2500000000ULL) @@ -144,6 +144,16 @@ static void dsi_pll_calc_dec_frac(struct dsi_pll_7nm *pll, struct dsi_pll_config config->pll_clock_inverters = 0x00; else config->pll_clock_inverters = 0x40; + } else { + /* 4.2, 4.3 */ + if (pll_freq <= 1000000000ULL) + config->pll_clock_inverters = 0xa0; + else if (pll_freq <= 2500000000ULL) + config->pll_clock_inverters = 0x20; + else if (pll_freq <= 3500000000ULL) + config->pll_clock_inverters = 0x00; + else + config->pll_clock_inverters = 0x40; } config->decimal_div_start = dec; diff --git a/drivers/gpu/drm/msm/msm_gpu.c b/drivers/gpu/drm/msm/msm_gpu.c index 5c10b559a5957..5a7541597d0ce 100644 --- a/drivers/gpu/drm/msm/msm_gpu.c +++ b/drivers/gpu/drm/msm/msm_gpu.c @@ -927,7 +927,6 @@ int msm_gpu_init(struct drm_device *drm, struct platform_device *pdev, if (IS_ERR(gpu->gpu_cx)) gpu->gpu_cx = NULL; - gpu->pdev = pdev; platform_set_drvdata(pdev, &gpu->adreno_smmu); msm_devfreq_init(gpu); diff --git a/drivers/gpu/drm/nouveau/dispnv04/crtc.c b/drivers/gpu/drm/nouveau/dispnv04/crtc.c index a34917b048f96..8c7fff19c97bb 100644 --- a/drivers/gpu/drm/nouveau/dispnv04/crtc.c +++ b/drivers/gpu/drm/nouveau/dispnv04/crtc.c @@ -1157,7 +1157,7 @@ nv04_crtc_page_flip(struct drm_crtc *crtc, struct drm_framebuffer *fb, chan = drm->channel; if (!chan) return -ENODEV; - cli = (void *)chan->user.client; + cli = chan->cli; push = chan->chan.push; s = kzalloc(sizeof(*s), GFP_KERNEL); diff --git a/drivers/gpu/drm/nouveau/nouveau_abi16.c b/drivers/gpu/drm/nouveau/nouveau_abi16.c index 74b16e3913856..2e177ebab3039 100644 --- a/drivers/gpu/drm/nouveau/nouveau_abi16.c +++ b/drivers/gpu/drm/nouveau/nouveau_abi16.c @@ -351,7 +351,7 @@ nouveau_abi16_ioctl_channel_alloc(ABI16_IOCTL_ARGS) list_add(&chan->head, &abi16->channels); /* create channel object and initialise dma and fence management */ - ret = nouveau_channel_new(drm, device, false, runm, init->fb_ctxdma_handle, + ret = nouveau_channel_new(cli, false, runm, init->fb_ctxdma_handle, init->tt_ctxdma_handle, &chan->chan); if (ret) goto done; diff --git a/drivers/gpu/drm/nouveau/nouveau_bo.c b/drivers/gpu/drm/nouveau/nouveau_bo.c index 3a7f4ce34aa31..5d398a422459e 100644 --- a/drivers/gpu/drm/nouveau/nouveau_bo.c +++ b/drivers/gpu/drm/nouveau/nouveau_bo.c @@ -843,7 +843,7 @@ nouveau_bo_move_m2mf(struct ttm_buffer_object *bo, int evict, { struct nouveau_drm *drm = nouveau_bdev(bo->bdev); struct nouveau_channel *chan = drm->ttm.chan; - struct nouveau_cli *cli = (void *)chan->user.client; + struct nouveau_cli *cli = chan->cli; struct nouveau_fence *fence; int ret; diff --git a/drivers/gpu/drm/nouveau/nouveau_chan.c b/drivers/gpu/drm/nouveau/nouveau_chan.c index 7c97b28868076..cee36b1efd391 100644 --- a/drivers/gpu/drm/nouveau/nouveau_chan.c +++ b/drivers/gpu/drm/nouveau/nouveau_chan.c @@ -52,7 +52,7 @@ static int nouveau_channel_killed(struct nvif_event *event, void *repv, u32 repc) { struct nouveau_channel *chan = container_of(event, typeof(*chan), kill); - struct nouveau_cli *cli = (void *)chan->user.client; + struct nouveau_cli *cli = chan->cli; NV_PRINTK(warn, cli, "channel %d killed!\n", chan->chid); @@ -66,7 +66,7 @@ int nouveau_channel_idle(struct nouveau_channel *chan) { if (likely(chan && chan->fence && !atomic_read(&chan->killed))) { - struct nouveau_cli *cli = (void *)chan->user.client; + struct nouveau_cli *cli = chan->cli; struct nouveau_fence *fence = NULL; int ret; @@ -142,10 +142,11 @@ nouveau_channel_wait(struct nvif_push *push, u32 size) } static int -nouveau_channel_prep(struct nouveau_drm *drm, struct nvif_device *device, +nouveau_channel_prep(struct nouveau_cli *cli, u32 size, struct nouveau_channel **pchan) { - struct nouveau_cli *cli = (void *)device->object.client; + struct nouveau_drm *drm = cli->drm; + struct nvif_device *device = &cli->device; struct nv_dma_v0 args = {}; struct nouveau_channel *chan; u32 target; @@ -155,6 +156,7 @@ nouveau_channel_prep(struct nouveau_drm *drm, struct nvif_device *device, if (!chan) return -ENOMEM; + chan->cli = cli; chan->device = device; chan->drm = drm; chan->vmm = nouveau_cli_vmm(cli); @@ -254,7 +256,7 @@ nouveau_channel_prep(struct nouveau_drm *drm, struct nvif_device *device, } static int -nouveau_channel_ctor(struct nouveau_drm *drm, struct nvif_device *device, bool priv, u64 runm, +nouveau_channel_ctor(struct nouveau_cli *cli, bool priv, u64 runm, struct nouveau_channel **pchan) { const struct nvif_mclass hosts[] = { @@ -279,7 +281,7 @@ nouveau_channel_ctor(struct nouveau_drm *drm, struct nvif_device *device, bool p struct nvif_chan_v0 chan; char name[TASK_COMM_LEN+16]; } args; - struct nouveau_cli *cli = (void *)device->object.client; + struct nvif_device *device = &cli->device; struct nouveau_channel *chan; const u64 plength = 0x10000; const u64 ioffset = plength; @@ -298,7 +300,7 @@ nouveau_channel_ctor(struct nouveau_drm *drm, struct nvif_device *device, bool p size = ioffset + ilength; /* allocate dma push buffer */ - ret = nouveau_channel_prep(drm, device, size, &chan); + ret = nouveau_channel_prep(cli, size, &chan); *pchan = chan; if (ret) return ret; @@ -493,13 +495,12 @@ nouveau_channel_init(struct nouveau_channel *chan, u32 vram, u32 gart) } int -nouveau_channel_new(struct nouveau_drm *drm, struct nvif_device *device, +nouveau_channel_new(struct nouveau_cli *cli, bool priv, u64 runm, u32 vram, u32 gart, struct nouveau_channel **pchan) { - struct nouveau_cli *cli = (void *)device->object.client; int ret; - ret = nouveau_channel_ctor(drm, device, priv, runm, pchan); + ret = nouveau_channel_ctor(cli, priv, runm, pchan); if (ret) { NV_PRINTK(dbg, cli, "channel create, %d\n", ret); return ret; diff --git a/drivers/gpu/drm/nouveau/nouveau_chan.h b/drivers/gpu/drm/nouveau/nouveau_chan.h index 5de2ef4e98c2b..260febd634ee2 100644 --- a/drivers/gpu/drm/nouveau/nouveau_chan.h +++ b/drivers/gpu/drm/nouveau/nouveau_chan.h @@ -12,6 +12,7 @@ struct nouveau_channel { struct nvif_push *push; } chan; + struct nouveau_cli *cli; struct nvif_device *device; struct nouveau_drm *drm; struct nouveau_vmm *vmm; @@ -62,7 +63,7 @@ struct nouveau_channel { int nouveau_channels_init(struct nouveau_drm *); void nouveau_channels_fini(struct nouveau_drm *); -int nouveau_channel_new(struct nouveau_drm *, struct nvif_device *, bool priv, u64 runm, +int nouveau_channel_new(struct nouveau_cli *, bool priv, u64 runm, u32 vram, u32 gart, struct nouveau_channel **); void nouveau_channel_del(struct nouveau_channel **); int nouveau_channel_idle(struct nouveau_channel *); diff --git a/drivers/gpu/drm/nouveau/nouveau_dmem.c b/drivers/gpu/drm/nouveau/nouveau_dmem.c index 6fb65b01d7780..097bd3af0719e 100644 --- a/drivers/gpu/drm/nouveau/nouveau_dmem.c +++ b/drivers/gpu/drm/nouveau/nouveau_dmem.c @@ -193,7 +193,7 @@ static vm_fault_t nouveau_dmem_migrate_to_ram(struct vm_fault *vmf) if (!spage || !(src & MIGRATE_PFN_MIGRATE)) goto done; - dpage = alloc_page_vma(GFP_HIGHUSER, vmf->vma, vmf->address); + dpage = alloc_page_vma(GFP_HIGHUSER | __GFP_ZERO, vmf->vma, vmf->address); if (!dpage) goto done; diff --git a/drivers/gpu/drm/nouveau/nouveau_drm.c b/drivers/gpu/drm/nouveau/nouveau_drm.c index 75545da9d1e91..ac15a662e0604 100644 --- a/drivers/gpu/drm/nouveau/nouveau_drm.c +++ b/drivers/gpu/drm/nouveau/nouveau_drm.c @@ -343,7 +343,7 @@ nouveau_accel_ce_init(struct nouveau_drm *drm) return; } - ret = nouveau_channel_new(drm, device, false, runm, NvDmaFB, NvDmaTT, &drm->cechan); + ret = nouveau_channel_new(&drm->client, true, runm, NvDmaFB, NvDmaTT, &drm->cechan); if (ret) NV_ERROR(drm, "failed to create ce channel, %d\n", ret); } @@ -371,7 +371,7 @@ nouveau_accel_gr_init(struct nouveau_drm *drm) return; } - ret = nouveau_channel_new(drm, device, false, runm, NvDmaFB, NvDmaTT, &drm->channel); + ret = nouveau_channel_new(&drm->client, false, runm, NvDmaFB, NvDmaTT, &drm->channel); if (ret) { NV_ERROR(drm, "failed to create kernel channel, %d\n", ret); nouveau_accel_gr_fini(drm); diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/fb/ram.h b/drivers/gpu/drm/nouveau/nvkm/subdev/fb/ram.h index 50f0c1914f58e..4c3f743965798 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/fb/ram.h +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/fb/ram.h @@ -46,6 +46,8 @@ u32 gm107_ram_probe_fbp(const struct nvkm_ram_func *, u32 gm200_ram_probe_fbp_amount(const struct nvkm_ram_func *, u32, struct nvkm_device *, int, int *); +int gp100_ram_init(struct nvkm_ram *); + /* RAM type-specific MR calculation routines */ int nvkm_sddr2_calc(struct nvkm_ram *); int nvkm_sddr3_calc(struct nvkm_ram *); diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/fb/ramgp100.c b/drivers/gpu/drm/nouveau/nvkm/subdev/fb/ramgp100.c index 378f6fb709907..8987a21e81d17 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/fb/ramgp100.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/fb/ramgp100.c @@ -27,7 +27,7 @@ #include #include -static int +int gp100_ram_init(struct nvkm_ram *ram) { struct nvkm_subdev *subdev = &ram->fb->subdev; diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/fb/ramgp102.c b/drivers/gpu/drm/nouveau/nvkm/subdev/fb/ramgp102.c index 8550f5e473474..b6b6ee59019d7 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/fb/ramgp102.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/fb/ramgp102.c @@ -5,6 +5,7 @@ static const struct nvkm_ram_func gp102_ram = { + .init = gp100_ram_init, }; int diff --git a/drivers/gpu/drm/omapdrm/omap_drv.c b/drivers/gpu/drm/omapdrm/omap_drv.c index e000577a95dd7..21996b713d1c3 100644 --- a/drivers/gpu/drm/omapdrm/omap_drv.c +++ b/drivers/gpu/drm/omapdrm/omap_drv.c @@ -695,6 +695,10 @@ static int omapdrm_init(struct omap_drm_private *priv, struct device *dev) soc = soc_device_match(omapdrm_soc_devices); priv->omaprev = soc ? (uintptr_t)soc->data : 0; priv->wq = alloc_ordered_workqueue("omapdrm", 0); + if (!priv->wq) { + ret = -ENOMEM; + goto err_alloc_workqueue; + } mutex_init(&priv->list_lock); INIT_LIST_HEAD(&priv->obj_list); @@ -753,6 +757,7 @@ static int omapdrm_init(struct omap_drm_private *priv, struct device *dev) drm_mode_config_cleanup(ddev); omap_gem_deinit(ddev); destroy_workqueue(priv->wq); +err_alloc_workqueue: omap_disconnect_pipelines(ddev); drm_dev_put(ddev); return ret; diff --git a/drivers/gpu/drm/panel/panel-boe-tv101wum-nl6.c b/drivers/gpu/drm/panel/panel-boe-tv101wum-nl6.c index cfa5b54ed6fe7..e6328991c87e9 100644 --- a/drivers/gpu/drm/panel/panel-boe-tv101wum-nl6.c +++ b/drivers/gpu/drm/panel/panel-boe-tv101wum-nl6.c @@ -2112,11 +2112,11 @@ static const struct panel_desc starry_qfh032011_53g_desc = { }; static const struct drm_display_mode starry_himax83102_j02_default_mode = { - .clock = 162850, + .clock = 162680, .hdisplay = 1200, - .hsync_start = 1200 + 50, - .hsync_end = 1200 + 50 + 20, - .htotal = 1200 + 50 + 20 + 50, + .hsync_start = 1200 + 60, + .hsync_end = 1200 + 60 + 20, + .htotal = 1200 + 60 + 20 + 40, .vdisplay = 1920, .vsync_start = 1920 + 116, .vsync_end = 1920 + 116 + 8, diff --git a/drivers/gpu/drm/radeon/evergreen_cs.c b/drivers/gpu/drm/radeon/evergreen_cs.c index 0de79f3a7e3ff..820c2c3641d38 100644 --- a/drivers/gpu/drm/radeon/evergreen_cs.c +++ b/drivers/gpu/drm/radeon/evergreen_cs.c @@ -395,7 +395,7 @@ static int evergreen_cs_track_validate_cb(struct radeon_cs_parser *p, unsigned i struct evergreen_cs_track *track = p->track; struct eg_surface surf; unsigned pitch, slice, mslice; - unsigned long offset; + u64 offset; int r; mslice = G_028C6C_SLICE_MAX(track->cb_color_view[id]) + 1; @@ -433,14 +433,14 @@ static int evergreen_cs_track_validate_cb(struct radeon_cs_parser *p, unsigned i return r; } - offset = track->cb_color_bo_offset[id] << 8; + offset = (u64)track->cb_color_bo_offset[id] << 8; if (offset & (surf.base_align - 1)) { - dev_warn(p->dev, "%s:%d cb[%d] bo base %ld not aligned with %ld\n", + dev_warn(p->dev, "%s:%d cb[%d] bo base %llu not aligned with %ld\n", __func__, __LINE__, id, offset, surf.base_align); return -EINVAL; } - offset += surf.layer_size * mslice; + offset += (u64)surf.layer_size * mslice; if (offset > radeon_bo_size(track->cb_color_bo[id])) { /* old ddx are broken they allocate bo with w*h*bpp but * program slice with ALIGN(h, 8), catch this and patch @@ -448,14 +448,14 @@ static int evergreen_cs_track_validate_cb(struct radeon_cs_parser *p, unsigned i */ if (!surf.mode) { uint32_t *ib = p->ib.ptr; - unsigned long tmp, nby, bsize, size, min = 0; + u64 tmp, nby, bsize, size, min = 0; /* find the height the ddx wants */ if (surf.nby > 8) { min = surf.nby - 8; } bsize = radeon_bo_size(track->cb_color_bo[id]); - tmp = track->cb_color_bo_offset[id] << 8; + tmp = (u64)track->cb_color_bo_offset[id] << 8; for (nby = surf.nby; nby > min; nby--) { size = nby * surf.nbx * surf.bpe * surf.nsamples; if ((tmp + size * mslice) <= bsize) { @@ -467,7 +467,7 @@ static int evergreen_cs_track_validate_cb(struct radeon_cs_parser *p, unsigned i slice = ((nby * surf.nbx) / 64) - 1; if (!evergreen_surface_check(p, &surf, "cb")) { /* check if this one works */ - tmp += surf.layer_size * mslice; + tmp += (u64)surf.layer_size * mslice; if (tmp <= bsize) { ib[track->cb_color_slice_idx[id]] = slice; goto old_ddx_ok; @@ -476,9 +476,9 @@ static int evergreen_cs_track_validate_cb(struct radeon_cs_parser *p, unsigned i } } dev_warn(p->dev, "%s:%d cb[%d] bo too small (layer size %d, " - "offset %d, max layer %d, bo size %ld, slice %d)\n", + "offset %llu, max layer %d, bo size %ld, slice %d)\n", __func__, __LINE__, id, surf.layer_size, - track->cb_color_bo_offset[id] << 8, mslice, + (u64)track->cb_color_bo_offset[id] << 8, mslice, radeon_bo_size(track->cb_color_bo[id]), slice); dev_warn(p->dev, "%s:%d problematic surf: (%d %d) (%d %d %d %d %d %d %d)\n", __func__, __LINE__, surf.nbx, surf.nby, @@ -562,7 +562,7 @@ static int evergreen_cs_track_validate_stencil(struct radeon_cs_parser *p) struct evergreen_cs_track *track = p->track; struct eg_surface surf; unsigned pitch, slice, mslice; - unsigned long offset; + u64 offset; int r; mslice = G_028008_SLICE_MAX(track->db_depth_view) + 1; @@ -608,18 +608,18 @@ static int evergreen_cs_track_validate_stencil(struct radeon_cs_parser *p) return r; } - offset = track->db_s_read_offset << 8; + offset = (u64)track->db_s_read_offset << 8; if (offset & (surf.base_align - 1)) { - dev_warn(p->dev, "%s:%d stencil read bo base %ld not aligned with %ld\n", + dev_warn(p->dev, "%s:%d stencil read bo base %llu not aligned with %ld\n", __func__, __LINE__, offset, surf.base_align); return -EINVAL; } - offset += surf.layer_size * mslice; + offset += (u64)surf.layer_size * mslice; if (offset > radeon_bo_size(track->db_s_read_bo)) { dev_warn(p->dev, "%s:%d stencil read bo too small (layer size %d, " - "offset %ld, max layer %d, bo size %ld)\n", + "offset %llu, max layer %d, bo size %ld)\n", __func__, __LINE__, surf.layer_size, - (unsigned long)track->db_s_read_offset << 8, mslice, + (u64)track->db_s_read_offset << 8, mslice, radeon_bo_size(track->db_s_read_bo)); dev_warn(p->dev, "%s:%d stencil invalid (0x%08x 0x%08x 0x%08x 0x%08x)\n", __func__, __LINE__, track->db_depth_size, @@ -627,18 +627,18 @@ static int evergreen_cs_track_validate_stencil(struct radeon_cs_parser *p) return -EINVAL; } - offset = track->db_s_write_offset << 8; + offset = (u64)track->db_s_write_offset << 8; if (offset & (surf.base_align - 1)) { - dev_warn(p->dev, "%s:%d stencil write bo base %ld not aligned with %ld\n", + dev_warn(p->dev, "%s:%d stencil write bo base %llu not aligned with %ld\n", __func__, __LINE__, offset, surf.base_align); return -EINVAL; } - offset += surf.layer_size * mslice; + offset += (u64)surf.layer_size * mslice; if (offset > radeon_bo_size(track->db_s_write_bo)) { dev_warn(p->dev, "%s:%d stencil write bo too small (layer size %d, " - "offset %ld, max layer %d, bo size %ld)\n", + "offset %llu, max layer %d, bo size %ld)\n", __func__, __LINE__, surf.layer_size, - (unsigned long)track->db_s_write_offset << 8, mslice, + (u64)track->db_s_write_offset << 8, mslice, radeon_bo_size(track->db_s_write_bo)); return -EINVAL; } @@ -659,7 +659,7 @@ static int evergreen_cs_track_validate_depth(struct radeon_cs_parser *p) struct evergreen_cs_track *track = p->track; struct eg_surface surf; unsigned pitch, slice, mslice; - unsigned long offset; + u64 offset; int r; mslice = G_028008_SLICE_MAX(track->db_depth_view) + 1; @@ -706,34 +706,34 @@ static int evergreen_cs_track_validate_depth(struct radeon_cs_parser *p) return r; } - offset = track->db_z_read_offset << 8; + offset = (u64)track->db_z_read_offset << 8; if (offset & (surf.base_align - 1)) { - dev_warn(p->dev, "%s:%d stencil read bo base %ld not aligned with %ld\n", + dev_warn(p->dev, "%s:%d stencil read bo base %llu not aligned with %ld\n", __func__, __LINE__, offset, surf.base_align); return -EINVAL; } - offset += surf.layer_size * mslice; + offset += (u64)surf.layer_size * mslice; if (offset > radeon_bo_size(track->db_z_read_bo)) { dev_warn(p->dev, "%s:%d depth read bo too small (layer size %d, " - "offset %ld, max layer %d, bo size %ld)\n", + "offset %llu, max layer %d, bo size %ld)\n", __func__, __LINE__, surf.layer_size, - (unsigned long)track->db_z_read_offset << 8, mslice, + (u64)track->db_z_read_offset << 8, mslice, radeon_bo_size(track->db_z_read_bo)); return -EINVAL; } - offset = track->db_z_write_offset << 8; + offset = (u64)track->db_z_write_offset << 8; if (offset & (surf.base_align - 1)) { - dev_warn(p->dev, "%s:%d stencil write bo base %ld not aligned with %ld\n", + dev_warn(p->dev, "%s:%d stencil write bo base %llu not aligned with %ld\n", __func__, __LINE__, offset, surf.base_align); return -EINVAL; } - offset += surf.layer_size * mslice; + offset += (u64)surf.layer_size * mslice; if (offset > radeon_bo_size(track->db_z_write_bo)) { dev_warn(p->dev, "%s:%d depth write bo too small (layer size %d, " - "offset %ld, max layer %d, bo size %ld)\n", + "offset %llu, max layer %d, bo size %ld)\n", __func__, __LINE__, surf.layer_size, - (unsigned long)track->db_z_write_offset << 8, mslice, + (u64)track->db_z_write_offset << 8, mslice, radeon_bo_size(track->db_z_write_bo)); return -EINVAL; } diff --git a/drivers/gpu/drm/radeon/r100.c b/drivers/gpu/drm/radeon/r100.c index cfeca2694d5f9..b63b6b4e9b281 100644 --- a/drivers/gpu/drm/radeon/r100.c +++ b/drivers/gpu/drm/radeon/r100.c @@ -1015,45 +1015,65 @@ static int r100_cp_init_microcode(struct radeon_device *rdev) DRM_DEBUG_KMS("\n"); - if ((rdev->family == CHIP_R100) || (rdev->family == CHIP_RV100) || - (rdev->family == CHIP_RV200) || (rdev->family == CHIP_RS100) || - (rdev->family == CHIP_RS200)) { + switch (rdev->family) { + case CHIP_R100: + case CHIP_RV100: + case CHIP_RV200: + case CHIP_RS100: + case CHIP_RS200: DRM_INFO("Loading R100 Microcode\n"); fw_name = FIRMWARE_R100; - } else if ((rdev->family == CHIP_R200) || - (rdev->family == CHIP_RV250) || - (rdev->family == CHIP_RV280) || - (rdev->family == CHIP_RS300)) { + break; + + case CHIP_R200: + case CHIP_RV250: + case CHIP_RV280: + case CHIP_RS300: DRM_INFO("Loading R200 Microcode\n"); fw_name = FIRMWARE_R200; - } else if ((rdev->family == CHIP_R300) || - (rdev->family == CHIP_R350) || - (rdev->family == CHIP_RV350) || - (rdev->family == CHIP_RV380) || - (rdev->family == CHIP_RS400) || - (rdev->family == CHIP_RS480)) { + break; + + case CHIP_R300: + case CHIP_R350: + case CHIP_RV350: + case CHIP_RV380: + case CHIP_RS400: + case CHIP_RS480: DRM_INFO("Loading R300 Microcode\n"); fw_name = FIRMWARE_R300; - } else if ((rdev->family == CHIP_R420) || - (rdev->family == CHIP_R423) || - (rdev->family == CHIP_RV410)) { + break; + + case CHIP_R420: + case CHIP_R423: + case CHIP_RV410: DRM_INFO("Loading R400 Microcode\n"); fw_name = FIRMWARE_R420; - } else if ((rdev->family == CHIP_RS690) || - (rdev->family == CHIP_RS740)) { + break; + + case CHIP_RS690: + case CHIP_RS740: DRM_INFO("Loading RS690/RS740 Microcode\n"); fw_name = FIRMWARE_RS690; - } else if (rdev->family == CHIP_RS600) { + break; + + case CHIP_RS600: DRM_INFO("Loading RS600 Microcode\n"); fw_name = FIRMWARE_RS600; - } else if ((rdev->family == CHIP_RV515) || - (rdev->family == CHIP_R520) || - (rdev->family == CHIP_RV530) || - (rdev->family == CHIP_R580) || - (rdev->family == CHIP_RV560) || - (rdev->family == CHIP_RV570)) { + break; + + case CHIP_RV515: + case CHIP_R520: + case CHIP_RV530: + case CHIP_R580: + case CHIP_RV560: + case CHIP_RV570: DRM_INFO("Loading R500 Microcode\n"); fw_name = FIRMWARE_R520; + break; + + default: + DRM_ERROR("Unsupported Radeon family %u\n", rdev->family); + return -EINVAL; } err = request_firmware(&rdev->me_fw, fw_name, rdev->dev); diff --git a/drivers/gpu/drm/radeon/radeon_atombios.c b/drivers/gpu/drm/radeon/radeon_atombios.c index 061396e7fa0f9..53c7273eb6a5c 100644 --- a/drivers/gpu/drm/radeon/radeon_atombios.c +++ b/drivers/gpu/drm/radeon/radeon_atombios.c @@ -1716,26 +1716,29 @@ struct radeon_encoder_atom_dig *radeon_atombios_get_lvds_info(struct fake_edid_record = (ATOM_FAKE_EDID_PATCH_RECORD *)record; if (fake_edid_record->ucFakeEDIDLength) { struct edid *edid; - int edid_size = - max((int)EDID_LENGTH, (int)fake_edid_record->ucFakeEDIDLength); - edid = kmalloc(edid_size, GFP_KERNEL); + int edid_size; + + if (fake_edid_record->ucFakeEDIDLength == 128) + edid_size = fake_edid_record->ucFakeEDIDLength; + else + edid_size = fake_edid_record->ucFakeEDIDLength * 128; + edid = kmemdup(&fake_edid_record->ucFakeEDIDString[0], + edid_size, GFP_KERNEL); if (edid) { - memcpy((u8 *)edid, (u8 *)&fake_edid_record->ucFakeEDIDString[0], - fake_edid_record->ucFakeEDIDLength); - if (drm_edid_is_valid(edid)) { rdev->mode_info.bios_hardcoded_edid = edid; rdev->mode_info.bios_hardcoded_edid_size = edid_size; - } else + } else { kfree(edid); + } } + record += struct_size(fake_edid_record, + ucFakeEDIDString, + edid_size); + } else { + /* empty fake edid record must be 3 bytes long */ + record += sizeof(ATOM_FAKE_EDID_PATCH_RECORD) + 1; } - record += fake_edid_record->ucFakeEDIDLength ? - struct_size(fake_edid_record, - ucFakeEDIDString, - fake_edid_record->ucFakeEDIDLength) : - /* empty fake edid record must be 3 bytes long */ - sizeof(ATOM_FAKE_EDID_PATCH_RECORD) + 1; break; case LCD_PANEL_RESOLUTION_RECORD_TYPE: panel_res_record = (ATOM_PANEL_RESOLUTION_PATCH_RECORD *)record; diff --git a/drivers/gpu/drm/radeon/radeon_encoders.c b/drivers/gpu/drm/radeon/radeon_encoders.c index 9cb6401fe97ed..bb908f125269d 100644 --- a/drivers/gpu/drm/radeon/radeon_encoders.c +++ b/drivers/gpu/drm/radeon/radeon_encoders.c @@ -42,7 +42,7 @@ static uint32_t radeon_encoder_clones(struct drm_encoder *encoder) struct radeon_device *rdev = dev->dev_private; struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder); struct drm_encoder *clone_encoder; - uint32_t index_mask = 0; + uint32_t index_mask = drm_encoder_mask(encoder); int count; /* DIG routing gets problematic */ diff --git a/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c b/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c index 341550199111f..89bc86d620146 100644 --- a/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c +++ b/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c @@ -435,6 +435,8 @@ static void dw_hdmi_rk3328_setup_hpd(struct dw_hdmi *dw_hdmi, void *data) HIWORD_UPDATE(RK3328_HDMI_SDAIN_MSK | RK3328_HDMI_SCLIN_MSK, RK3328_HDMI_SDAIN_MSK | RK3328_HDMI_SCLIN_MSK | RK3328_HDMI_HPD_IOE)); + + dw_hdmi_rk3328_read_hpd(dw_hdmi, data); } static const struct dw_hdmi_phy_ops rk3228_hdmi_phy_ops = { diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c index 4b338cb89d32d..ee72e8c6ad69b 100644 --- a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c +++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c @@ -381,8 +381,8 @@ static void scl_vop_cal_scl_fac(struct vop *vop, const struct vop_win_data *win, if (info->is_yuv) is_yuv = true; - if (dst_w > 3840) { - DRM_DEV_ERROR(vop->dev, "Maximum dst width (3840) exceeded\n"); + if (dst_w > 4096) { + DRM_DEV_ERROR(vop->dev, "Maximum dst width (4096) exceeded\n"); return; } @@ -1566,6 +1566,10 @@ static void vop_crtc_atomic_flush(struct drm_crtc *crtc, VOP_AFBC_SET(vop, enable, s->enable_afbc); vop_cfg_done(vop); + /* Ack the DMA transfer of the previous frame (RK3066). */ + if (VOP_HAS_REG(vop, common, dma_stop)) + VOP_REG_SET(vop, common, dma_stop, 0); + spin_unlock(&vop->reg_lock); /* diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop.h b/drivers/gpu/drm/rockchip/rockchip_drm_vop.h index 5f56e0597df84..c5c716a69171a 100644 --- a/drivers/gpu/drm/rockchip/rockchip_drm_vop.h +++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop.h @@ -122,6 +122,7 @@ struct vop_common { struct vop_reg lut_buffer_index; struct vop_reg gate_en; struct vop_reg mmu_en; + struct vop_reg dma_stop; struct vop_reg out_mode; struct vop_reg standby; }; diff --git a/drivers/gpu/drm/rockchip/rockchip_vop_reg.c b/drivers/gpu/drm/rockchip/rockchip_vop_reg.c index 7b28050067769..f7d0edd762b36 100644 --- a/drivers/gpu/drm/rockchip/rockchip_vop_reg.c +++ b/drivers/gpu/drm/rockchip/rockchip_vop_reg.c @@ -435,6 +435,7 @@ static const struct vop_output rk3066_output = { }; static const struct vop_common rk3066_common = { + .dma_stop = VOP_REG(RK3066_SYS_CTRL0, 0x1, 0), .standby = VOP_REG(RK3066_SYS_CTRL0, 0x1, 1), .out_mode = VOP_REG(RK3066_DSP_CTRL0, 0xf, 0), .cfg_done = VOP_REG(RK3066_REG_CFG_DONE, 0x1, 0), @@ -483,6 +484,7 @@ static const struct vop_data rk3066_vop = { .output = &rk3066_output, .win = rk3066_vop_win_data, .win_size = ARRAY_SIZE(rk3066_vop_win_data), + .feature = VOP_FEATURE_INTERNAL_RGB, .max_output = { 1920, 1080 }, }; diff --git a/drivers/gpu/drm/scheduler/sched_entity.c b/drivers/gpu/drm/scheduler/sched_entity.c index a42763e1429dc..d3462be749303 100644 --- a/drivers/gpu/drm/scheduler/sched_entity.c +++ b/drivers/gpu/drm/scheduler/sched_entity.c @@ -111,8 +111,10 @@ void drm_sched_entity_modify_sched(struct drm_sched_entity *entity, { WARN_ON(!num_sched_list || !sched_list); + spin_lock(&entity->rq_lock); entity->sched_list = sched_list; entity->num_sched_list = num_sched_list; + spin_unlock(&entity->rq_lock); } EXPORT_SYMBOL(drm_sched_entity_modify_sched); diff --git a/drivers/gpu/drm/stm/drv.c b/drivers/gpu/drm/stm/drv.c index e8523abef27a5..e1232f74dfa53 100644 --- a/drivers/gpu/drm/stm/drv.c +++ b/drivers/gpu/drm/stm/drv.c @@ -25,6 +25,7 @@ #include #include #include +#include #include "ltdc.h" @@ -75,7 +76,7 @@ static int drv_load(struct drm_device *ddev) DRM_DEBUG("%s\n", __func__); - ldev = devm_kzalloc(ddev->dev, sizeof(*ldev), GFP_KERNEL); + ldev = drmm_kzalloc(ddev, sizeof(*ldev), GFP_KERNEL); if (!ldev) return -ENOMEM; @@ -203,12 +204,14 @@ static int stm_drm_platform_probe(struct platform_device *pdev) ret = drm_dev_register(ddev, 0); if (ret) - goto err_put; + goto err_unload; drm_fbdev_dma_setup(ddev, 16); return 0; +err_unload: + drv_unload(ddev); err_put: drm_dev_put(ddev); diff --git a/drivers/gpu/drm/stm/ltdc.c b/drivers/gpu/drm/stm/ltdc.c index 5576fdae49623..0832b749b66e7 100644 --- a/drivers/gpu/drm/stm/ltdc.c +++ b/drivers/gpu/drm/stm/ltdc.c @@ -36,6 +36,7 @@ #include #include #include +#include #include