Merge branch 'android14-6.1' into branch 'android14-6.1-lts'

This brings the -lts branch up to date with the recent changes in
'android14-6.1'.  Included in here are the following commits:

* af361f9a10 UPSTREAM: usb: typec: Return size of buffer if pd_set operation succeeds
* 07d4bc4f64 UPSTREAM: usb: typec: tcpm: Update PD of Type-C port upon pd_set
* 59dc53906a UPSTREAM: usb: typec: tcpm: fix double-free issue in tcpm_port_unregister_pd()
* 0e88400de9 UPSTREAM: usb: typec: tcpm: Correct port source pdo array in pd_set callback
* 3ca4271578 Reapply "Merge tag 'android14-6.1.75_r00' into android14-6.1"
* eb58741d26 Revert "ANDROID: null_blk: Support configuring the maximum segment size"
* e684a924fa Revert "usb: dwc3: core: configure TX/RX threshold for DWC3_IP"
* f085398f0e ANDROID: Update the ABI symbol list
* fa57be1983 ANDROID: GKI: Update symbols for rockchip drm
* 0c9784b747 FROMLIST: binder: check offset alignment in binder_get_object()
* 931187cc18 ANDROID: GKI: Add symbol list for Nothing
* 353c3de3f1 ANDROID: thermal: Add vendor thermal_pm_notify_suspend function
* 5b8114ec3c UPSTREAM: usb: dwc3: gadget: Don't disconnect if not started
* 80cdac5d86 Revert "ANDROID: block: Add support for filesystem requests and small segments"
* 71ad82fd45 ANDROID: vendor_hook: fix issue vip thread do not sleep while no vip work
* 8f2f0a3b12 UPSTREAM: sched/wait: Fix a kthread_park race with wait_woken()
* eef3b6e529 ANDROID: KVM: arm64: Fix TLB invalidation when coalescing into a block
* 8790a94475 ANDROID: ABI: Update symbol list for Exynos SoC
* d518ca9dbb ANDROID: GKI: Add symbols for rockchip snd trcm
* 89af1d57cc FROMGIT: usb: dwc2: Disable clock gating feature on Rockchip SoCs
* 38f8abdd89 ANDROID: ABI: Update symbol list for Exynos SoC
* 421a001633 ANDROID: KVM: arm64: Fix missing trace event for nVHE dyn HVCs
* 609541ba1a ANDROID: Update the ABI symbol list
* b751125447 ANDROID: Add symbols for IIO SCMI module
* 2485080922 ANDROID: GKI: Update symbols for rockchip
* 148edc25ee UPSTREAM: usb: dwc2: disable lpm feature on Rockchip SoCs
* 2adbad2296 ANDROID: Update symbols list for open-dice.ko
* 176b8fe524 FROMLIST: mm/migrate: set swap entry values of THP tail pages properly.
* 14a09b9f62 ANDROID: Update the ABI symbol list
* 7d911a149b ANDROID: virt: gunyah: Move send_lock around req and reply
* 75266774b9 ANDROID: null_blk: Support configuring the maximum segment size
* a265d535b7 ANDROID: scsi_debug: Support configuring the maximum segment size
* 8a2f432fcb ANDROID: block: Add support for filesystem requests and small segments
* 879eff2954 ANDROID: block: Support submitting passthrough requests with small segments
* c5b8696597 ANDROID: block: Make sub_page_limit_queues available in debugfs
* 4fd9a46455 ANDROID: block: Support configuring limits below the page size
* 65bdaa7543 ANDROID: block: Prepare for supporting sub-page limits
* 05ee024443 ANDROID: block: Use pr_info() instead of printk(KERN_INFO ...)
* 326690739d ANDROID: sound: usb: add vendor hook for cpu suspend support
* 41292928f9 ANDROID: usb: Add vendor hook for usb suspend and resume
* 3f5807c586 ANDROID: fips140: change linker script guard
* fa6c89a93f Revert "ANDROID: Update symbols list for open-dice.ko"
* 14e89262f0 ANDROID: Update symbols list for open-dice.ko
* 7b51d1fd64 FROMGIT: PM: sleep: wakeirq: fix wake irq warning in system suspend
* a354271b6e ANDROID: ABI: Update symbol for Exynos SoC
* 2df2c4b515 UPSTREAM: usb: dwc3: core: set force_gen1 bit in USB31 devices if max speed is SS
* 299c92ff85 UPSTREAM: PCI: dwc: Strengthen the MSI address allocation logic
* e3bc469e5d UPSTREAM: PCI: dwc: Restrict only coherent DMA mask for MSI address allocation
* e623dd5ac2 ANDROID: ABI: Update oplus symbol list
* db91c5d31a ANDROID: vendor_hook: rename the the name of hooks
* 4292d25903 FROMGIT: usb: xhci: Add error handling in xhci_map_urb_for_dma
* 6bce7cfc5e FROMGIT: usb: dwc3: host: Set XHCI_SG_TRB_CACHE_SIZE_QUIRK
* 89e4f7a7a3 FROMGIT: usb: host: xhci-plat: Add support for XHCI_SG_TRB_CACHE_SIZE_QUIRK
* ef39f76e4d ANDROID: fuse-bpf: Fix readdir for getdents
* 4c25eb8ea5 ANDROID: EXPORT raise_softirq and update the ABI symbol list
* a69447d296 UPSTREAM: netfilter: nf_tables: disallow timeout for anonymous sets
* 4a85f45e4e BACKPORT: FROMGIT: mm: add alloc_contig_migrate_range allocation statistics
* e2903ba04e FROMLIST: iommu: Avoid races around default domain allocations
* 65d457fae4 ANDROID: fips140 - fix integrity check by unapplying dynamic SCS
* 1616e03be1 ANDROID: fips140 - add option for debugging the integrity check
* fd3551098b BACKPORT: f2fs: split initial and dynamic conditions for extent_cache
* e897dadaf3 ANDROID: Update the ABI symbol list
* bb197cebd5 UPSTREAM: usb: typec: altmodes/displayport: create sysfs nodes as driver's default device attribute group
* 981ffd6df1 UPSTREAM: epoll: use refcount to reduce ep_mutex contention
* 457946c233 ANDROID: GKI: Update oplus symbol list
* 2fd940bf34 ANDROID: uid_sys_stat: fix data-error of cputime and io
* 5f66e7c904 ANDROID: Update the ABI symbol list
* 8bd9771065 ANDROID: vendor_hooks: Export cma_alloc trace points
* 9219a44e00 ANDROID: gki_defconfig: Enable CONFIG_ARM_SCMI_TRANSPORT_VIRTIO
* 6bad1052c2 Revert "Merge tag 'android14-6.1.75_r00' into android14-6.1"
* ecb45e2a73 UPSTREAM: net: tls: fix use-after-free with partial reads and async decrypt
* 1dbafe61e3 Merge tag 'android14-6.1.75_r00' into android14-6.1
* 95805f9e46 ANDROID: GKI: add GKI symbol list for Exynosauto SoC
* 23c8963806 UPSTREAM: usb: typec: class: fix typec_altmode_put_partner to put plugs
* 3b7cd7d0e0 UPSTREAM: Revert "usb: typec: class: fix typec_altmode_put_partner to put plugs"
* 8b964b55a6 ANDROID: GKI: Update symbol list for mtk
* 945b0c8ac4 ANDROID: GKI: Update oplus symbol list
* 9698f7e8e7 FROMGIT: f2fs: introduce FAULT_BLKADDR_CONSISTENCE
* cc322f7dee FROMGIT: f2fs: fix to remove unnecessary f2fs_bug_on() to avoid panic
* 33d3b7311b FROMGIT: f2fs: compress: fix to avoid inconsistence bewteen i_blocks and dnode
* ba28d24cea FROMGIT: f2fs: compress: fix to check unreleased compressed cluster
* 0c3d1c94c4 FROMGIT: f2fs: compress: fix to cover normal cluster write with cp_rwsem
* 02a1ce0cf2 FROMGIT: f2fs: compress: fix to guarantee persisting compressed blocks by CP
* 139e9a0f9d ANDROID: remove LTO check from build.config.gki.aarch64.fips140
* e61a6ec29a ANDROID: add symbol list for fips140 module
* 09ca5740fb ANDROID: abi_gki_aarch64_qcom: Update symbol list
* 0832777c62 ANDROID: GKI: Update symbol list for transsion
* 35bb2c8c5f ANDROID: Add vendor_hooks to workaround CONFIG_TASK_DELAY_ACCT
* 70fdaa07de Revert "ANDROID: Build null_blk and scsi_debug as kernel modules"
* 30edcedb44 Revert "interconnect: Fix locking for runpm vs reclaim"
* 4289e1348e ANDROID: GKI: Update symbol list for xiaomi
* 77277e4ba4 ANDROID: sched/cpuset: Add vendor hook to change tasks affinity
* 18c75fa402 ANDROID: ABI: Update oplus symbol list
* 56e0cf4e39 ANDROID: binder: Add vendor hook to fix priority restore
* c73814520d Revert "interconnect: Teach lockdep about icc_bw_lock order"
* c38ea4a131 BACKPORT: gso: fix dodgy bit handling for GSO_UDP_L4
* 34cf02fef9 ANDROID: ABI: Update oplus symbol list
* 763647877c ANDROID: vendor_hooks: Add hook for trace_android_vh_copy_process
* 26d7216e1d ANDROID: GKI: Update symbol list for mtk
* ad49939193 FROMGIT: PM: runtime: add tracepoint for runtime_status changes
* e7d236d9c4 ANDROID: GKI: add allowed list file for xiaomi
* 1bb51799bf UPSTREAM: netfilter: nft_set_rbtree: skip end interval element from gc
* d68f68a9d7 ANDROID: GKI: add symbol list file for moto
* 7114c782ec UPSTREAM: scsi: ufs: core: Fix racing issue between ufshcd_mcq_abort() and ISR
* db23405211 UPSTREAM: scsi: ufs: core: Remove dev cmd clock scaling busy
* c622e98ddc ANDROID: ABI: Update symbol list for Nothing
* 8c0f917473 ANDROID: abi_gki_aarch64_qcom: Export trace_android_vh_try_fixup_sea
* 9be763fb64 ANDROID: arm64: Call fixup_exception() within do_sea()
* d6b58cc171 ANDROID: PCI: dwc: Wait for the link only if it has been started
* a7f647f49d ANDROID: Update the Pixel symbol list and GKI ABI
* eef88095dc ANDROID: scsi: ufs: add complete init vendor hook
* 81d55bc3b9 ANDROID: Update the ABI symbol list

Change-Id: I039832aa8c22ce92962c51396516b96b3a32a9fc
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
This commit is contained in:
Greg Kroah-Hartman 2024-04-03 17:15:26 +00:00
commit 63040ce8e9
98 changed files with 4475 additions and 767 deletions

View File

@ -104,11 +104,13 @@ filegroup(
"android/abi_gki_aarch64_db845c",
"android/abi_gki_aarch64_exynos",
"android/abi_gki_aarch64_exynosauto",
"android/abi_gki_aarch64_fips140",
"android/abi_gki_aarch64_galaxy",
"android/abi_gki_aarch64_honda",
"android/abi_gki_aarch64_honor",
"android/abi_gki_aarch64_imx",
"android/abi_gki_aarch64_meizu",
"android/abi_gki_aarch64_moto",
"android/abi_gki_aarch64_mtk",
"android/abi_gki_aarch64_nothing",
"android/abi_gki_aarch64_oplus",
@ -714,9 +716,16 @@ kernel_build(
outs = [],
base_kernel = ":kernel_aarch64",
build_config = "build.config.gki.aarch64.fips140",
kmi_symbol_list = "android/abi_gki_aarch64_fips140",
module_outs = ["crypto/fips140.ko"],
)
kernel_abi(
name = "fips140_abi",
kernel_build = ":fips140",
kmi_symbol_list_add_only = True,
)
copy_to_dist_dir(
name = "fips140_dist",
data = [

View File

@ -686,29 +686,30 @@ Description: Support configuring fault injection type, should be
enabled with fault_injection option, fault type value
is shown below, it supports single or combined type.
=================== ===========
Type_Name Type_Value
=================== ===========
FAULT_KMALLOC 0x000000001
FAULT_KVMALLOC 0x000000002
FAULT_PAGE_ALLOC 0x000000004
FAULT_PAGE_GET 0x000000008
FAULT_ALLOC_BIO 0x000000010 (obsolete)
FAULT_ALLOC_NID 0x000000020
FAULT_ORPHAN 0x000000040
FAULT_BLOCK 0x000000080
FAULT_DIR_DEPTH 0x000000100
FAULT_EVICT_INODE 0x000000200
FAULT_TRUNCATE 0x000000400
FAULT_READ_IO 0x000000800
FAULT_CHECKPOINT 0x000001000
FAULT_DISCARD 0x000002000
FAULT_WRITE_IO 0x000004000
FAULT_SLAB_ALLOC 0x000008000
FAULT_DQUOT_INIT 0x000010000
FAULT_LOCK_OP 0x000020000
FAULT_BLKADDR 0x000040000
=================== ===========
=========================== ===========
Type_Name Type_Value
=========================== ===========
FAULT_KMALLOC 0x000000001
FAULT_KVMALLOC 0x000000002
FAULT_PAGE_ALLOC 0x000000004
FAULT_PAGE_GET 0x000000008
FAULT_ALLOC_BIO 0x000000010 (obsolete)
FAULT_ALLOC_NID 0x000000020
FAULT_ORPHAN 0x000000040
FAULT_BLOCK 0x000000080
FAULT_DIR_DEPTH 0x000000100
FAULT_EVICT_INODE 0x000000200
FAULT_TRUNCATE 0x000000400
FAULT_READ_IO 0x000000800
FAULT_CHECKPOINT 0x000001000
FAULT_DISCARD 0x000002000
FAULT_WRITE_IO 0x000004000
FAULT_SLAB_ALLOC 0x000008000
FAULT_DQUOT_INIT 0x000010000
FAULT_LOCK_OP 0x000020000
FAULT_BLKADDR_VALIDITY 0x000040000
FAULT_BLKADDR_CONSISTENCE 0x000080000
=========================== ===========
What: /sys/fs/f2fs/<disk>/discard_io_aware_gran
Date: January 2023

View File

@ -184,29 +184,30 @@ fault_type=%d Support configuring fault injection type, should be
enabled with fault_injection option, fault type value
is shown below, it supports single or combined type.
=================== ===========
Type_Name Type_Value
=================== ===========
FAULT_KMALLOC 0x000000001
FAULT_KVMALLOC 0x000000002
FAULT_PAGE_ALLOC 0x000000004
FAULT_PAGE_GET 0x000000008
FAULT_ALLOC_BIO 0x000000010 (obsolete)
FAULT_ALLOC_NID 0x000000020
FAULT_ORPHAN 0x000000040
FAULT_BLOCK 0x000000080
FAULT_DIR_DEPTH 0x000000100
FAULT_EVICT_INODE 0x000000200
FAULT_TRUNCATE 0x000000400
FAULT_READ_IO 0x000000800
FAULT_CHECKPOINT 0x000001000
FAULT_DISCARD 0x000002000
FAULT_WRITE_IO 0x000004000
FAULT_SLAB_ALLOC 0x000008000
FAULT_DQUOT_INIT 0x000010000
FAULT_LOCK_OP 0x000020000
FAULT_BLKADDR 0x000040000
=================== ===========
=========================== ===========
Type_Name Type_Value
=========================== ===========
FAULT_KMALLOC 0x000000001
FAULT_KVMALLOC 0x000000002
FAULT_PAGE_ALLOC 0x000000004
FAULT_PAGE_GET 0x000000008
FAULT_ALLOC_BIO 0x000000010 (obsolete)
FAULT_ALLOC_NID 0x000000020
FAULT_ORPHAN 0x000000040
FAULT_BLOCK 0x000000080
FAULT_DIR_DEPTH 0x000000100
FAULT_EVICT_INODE 0x000000200
FAULT_TRUNCATE 0x000000400
FAULT_READ_IO 0x000000800
FAULT_CHECKPOINT 0x000001000
FAULT_DISCARD 0x000002000
FAULT_WRITE_IO 0x000004000
FAULT_SLAB_ALLOC 0x000008000
FAULT_DQUOT_INIT 0x000010000
FAULT_LOCK_OP 0x000020000
FAULT_BLKADDR_VALIDITY 0x000040000
FAULT_BLKADDR_CONSISTENCE 0x000080000
=========================== ===========
mode=%s Control block allocation mode which supports "adaptive"
and "lfs". In "lfs" mode, there should be no random
writes towards main area.

File diff suppressed because it is too large Load Diff

View File

@ -11,7 +11,6 @@
alloc_workqueue
alt_cb_patch_nops
android_rvh_probe_register
anon_inode_getfile
__arch_copy_from_user
__arch_copy_to_user
argv_free
@ -26,6 +25,7 @@
__bitmap_and
__bitmap_andnot
__bitmap_clear
__bitmap_complement
__bitmap_equal
bitmap_free
__bitmap_intersects
@ -86,7 +86,9 @@
completion_done
config_ep_by_speed
config_group_init_type_name
console_printk
console_suspend_enabled
console_unlock
__const_udelay
consume_skb
__copy_overflow
@ -99,11 +101,14 @@
cpufreq_quick_get
cpufreq_register_notifier
cpufreq_unregister_notifier
__cpuhp_remove_state
__cpuhp_setup_state
cpu_hwcaps
cpu_number
__cpu_online_mask
__cpu_possible_mask
cpus_read_lock
cpus_read_unlock
cpu_subsys
crc32_le
crypto_alloc_shash
@ -127,6 +132,7 @@
devfreq_add_device
devfreq_add_governor
devfreq_get_devfreq_by_phandle
devfreq_monitor_stop
devfreq_recommended_opp
devfreq_remove_device
device_create
@ -221,7 +227,6 @@
dma_fence_release
dma_fence_remove_callback
dma_fence_signal
dma_fence_signal_locked
dma_fence_wait_timeout
dma_free_attrs
dma_heap_buffer_alloc
@ -324,13 +329,13 @@
enable_irq
eth_type_trans
fd_install
fget
_find_first_bit
_find_first_zero_bit
_find_last_bit
_find_next_and_bit
_find_next_bit
_find_next_zero_bit
find_task_by_vpid
find_vpid
finish_wait
firmware_request_nowarn
@ -362,6 +367,7 @@
get_cpu_device
get_device
__get_free_pages
get_pid_task
get_random_bytes
get_task_mm
get_thermal_instance
@ -451,6 +457,7 @@
kasan_flag_enabled
kasprintf
kernel_kobj
kernfs_path_from_node
__kfifo_alloc
__kfifo_free
__kfifo_in
@ -555,8 +562,10 @@
netif_receive_skb
netif_rx
netif_tx_wake_queue
netlink_broadcast
nla_memcpy
nla_put
nla_put_64bit
nla_reserve
noop_llseek
nr_cpu_ids
@ -575,7 +584,6 @@
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_property
of_fwnode_ops
@ -636,8 +644,13 @@
pci_store_saved_state
pci_write_config_dword
__per_cpu_offset
perf_event_create_kernel_counter
perf_event_enable
perf_event_read_local
perf_event_release_kernel
perf_trace_buf_alloc
perf_trace_run_bpf_submit
pfn_is_map_memory
phy_power_off
phy_power_on
phy_set_mode_ext
@ -664,8 +677,6 @@
__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
@ -912,19 +923,29 @@
trace_event_raw_init
trace_event_reg
trace_handle_return
__traceiter_android_rvh_sched_fork_init
__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_is_fpsimd_save
__traceiter_android_vh_meminfo_proc_show
__traceiter_android_vh_scheduler_tick
__traceiter_android_vh_show_mem
__traceiter_clock_set_rate
__traceiter_device_pm_callback_end
__traceiter_device_pm_callback_start
__traceiter_suspend_resume
__tracepoint_android_rvh_sched_fork_init
__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_is_fpsimd_save
__tracepoint_android_vh_meminfo_proc_show
__tracepoint_android_vh_scheduler_tick
__tracepoint_android_vh_show_mem
__tracepoint_clock_set_rate
__tracepoint_device_pm_callback_end
__tracepoint_device_pm_callback_start
tracepoint_probe_register
@ -1024,6 +1045,7 @@
wakeup_source_register
wakeup_source_unregister
__warn_printk
work_busy
ww_mutex_lock
ww_mutex_unlock
@ -1048,14 +1070,12 @@
kfree_sensitive
ktime_get_coarse_with_offset
netdev_err
netlink_broadcast
netlink_register_notifier
netlink_unicast
netlink_unregister_notifier
net_ns_type_operations
nla_find
__nla_parse
nla_put_64bit
__nla_validate
__pskb_pull_tail
__put_net
@ -1133,12 +1153,14 @@
input_register_handle
input_register_handler
input_unregister_handle
is_console_locked
kstat
nr_irqs
register_console
return_address
stack_trace_save_tsk
touch_softlockup_watchdog
__traceiter_android_rvh_arm64_serror_panic
__traceiter_android_vh_ipi_stop
__traceiter_hrtimer_expire_entry
__traceiter_hrtimer_expire_exit
@ -1150,6 +1172,7 @@
__traceiter_sched_switch
__traceiter_workqueue_execute_end
__traceiter_workqueue_execute_start
__tracepoint_android_rvh_arm64_serror_panic
__tracepoint_android_vh_ipi_stop
__tracepoint_hrtimer_expire_entry
__tracepoint_hrtimer_expire_exit
@ -1162,28 +1185,6 @@
__tracepoint_workqueue_execute_end
__tracepoint_workqueue_execute_start
# required by dw_mmc-exynos.ko
mmc_wait_for_req
# required by dw_mmc.ko
debugfs_create_x64
device_property_read_string_array
dma_map_sg_attrs
mmc_add_host
mmc_alloc_host
mmc_can_gpio_cd
mmc_detect_change
mmc_free_host
mmc_gpio_get_cd
mmc_gpio_get_ro
mmc_of_parse
mmc_regulator_get_supply
mmc_regulator_set_ocr
mmc_regulator_set_vqmmc
mmc_remove_host
mmc_request_done
sdio_signal_irq
# required by dwc3-exynos-usb.ko
device_create_managed_software_node
platform_device_add
@ -1203,7 +1204,6 @@
activate_task
available_idle_cpu
balance_push_callback
__bitmap_complement
bpf_trace_run11
check_preempt_curr
cpufreq_add_update_util_hook
@ -1221,7 +1221,7 @@
cpu_topology
deactivate_task
double_rq_lock
get_pid_task
get_task_cred
housekeeping_cpumask
__hrtimer_get_remaining
irq_work_queue
@ -1229,15 +1229,15 @@
match_string
memory_read_from_buffer
migrate_swap
perf_event_create_kernel_counter
perf_event_enable
perf_event_read_local
ns_capable
pick_highest_pushable_task
__put_cred
raw_spin_rq_lock_nested
raw_spin_rq_unlock
_raw_write_trylock
reciprocal_value
resched_curr
root_task_group
sched_feat_keys
sched_feat_names
sched_uclamp_used
@ -1261,7 +1261,6 @@
__traceiter_android_rvh_flush_task
__traceiter_android_rvh_new_task_stats
__traceiter_android_rvh_replace_next_task_fair
__traceiter_android_rvh_sched_fork_init
__traceiter_android_rvh_sched_newidle_balance
__traceiter_android_rvh_sched_nohz_balancer_kick
__traceiter_android_rvh_sched_rebalance_domains
@ -1269,17 +1268,18 @@
__traceiter_android_rvh_select_fallback_rq
__traceiter_android_rvh_select_task_rq_fair
__traceiter_android_rvh_select_task_rq_rt
__traceiter_android_rvh_set_task_cpu
__traceiter_android_rvh_try_to_wake_up
__traceiter_android_rvh_uclamp_eff_get
__traceiter_android_rvh_update_cpu_capacity
__traceiter_android_rvh_update_misfit_status
__traceiter_android_rvh_wake_up_new_task
__traceiter_android_vh_binder_restore_priority
__traceiter_android_vh_binder_set_priority
__traceiter_android_vh_binder_wakeup_ilocked
__traceiter_android_vh_jiffies_update
__traceiter_android_vh_scheduler_tick
__traceiter_android_vh_dup_task_struct
__traceiter_android_vh_syscall_prctl_finished
__traceiter_binder_transaction_received
__traceiter_cpu_frequency_limits
__tracepoint_android_rvh_can_migrate_task
__tracepoint_android_rvh_check_preempt_wakeup
__tracepoint_android_rvh_cpu_cgroup_attach
@ -1292,7 +1292,6 @@
__tracepoint_android_rvh_flush_task
__tracepoint_android_rvh_new_task_stats
__tracepoint_android_rvh_replace_next_task_fair
__tracepoint_android_rvh_sched_fork_init
__tracepoint_android_rvh_sched_newidle_balance
__tracepoint_android_rvh_sched_nohz_balancer_kick
__tracepoint_android_rvh_sched_rebalance_domains
@ -1300,17 +1299,18 @@
__tracepoint_android_rvh_select_fallback_rq
__tracepoint_android_rvh_select_task_rq_fair
__tracepoint_android_rvh_select_task_rq_rt
__tracepoint_android_rvh_set_task_cpu
__tracepoint_android_rvh_try_to_wake_up
__tracepoint_android_rvh_uclamp_eff_get
__tracepoint_android_rvh_update_cpu_capacity
__tracepoint_android_rvh_update_misfit_status
__tracepoint_android_rvh_wake_up_new_task
__tracepoint_android_vh_binder_restore_priority
__tracepoint_android_vh_binder_set_priority
__tracepoint_android_vh_binder_wakeup_ilocked
__tracepoint_android_vh_jiffies_update
__tracepoint_android_vh_scheduler_tick
__tracepoint_android_vh_dup_task_struct
__tracepoint_android_vh_syscall_prctl_finished
__tracepoint_binder_transaction_received
__tracepoint_cpu_frequency_limits
uclamp_eff_value
update_rq_clock
wake_up_if_idle
@ -1346,6 +1346,7 @@
# required by exynos-cpupm.ko
cpuidle_get_cpu_driver
cpuidle_get_driver
of_find_node_by_type
__traceiter_ipi_entry
__traceiter_ipi_exit
__traceiter_ipi_raise
@ -1363,7 +1364,6 @@
component_match_add_release
component_unbind_all
console_trylock
console_unlock
devm_drm_panel_bridge_add_typed
__do_once_done
__do_once_start
@ -1413,6 +1413,7 @@
drm_bridge_add
drm_bridge_attach
drm_bridge_chain_mode_set
drm_bridge_chain_post_disable
drm_connector_atomic_hdr_metadata_equal
drm_connector_attach_hdr_output_metadata_property
drm_crtc_enable_color_mgmt
@ -1516,6 +1517,8 @@
# required by exynos-usb-audio-offloading.ko
snd_ctl_add
snd_ctl_new1
snd_usb_autoresume
snd_usb_autosuspend
snd_vendor_set_ops
__traceiter_android_rvh_audio_usb_offload_disconnect
__traceiter_android_vh_audio_usb_offload_connect
@ -1562,13 +1565,12 @@
devfreq_unregister_opp_notifier
dev_pm_opp_disable
dev_pm_opp_get_freq
__traceiter_clock_set_rate
__tracepoint_clock_set_rate
perf_event_read_value
__srcu_read_lock
__srcu_read_unlock
synchronize_srcu
update_devfreq
# required by exynos_esca.ko
debugfs_lookup
# required by exynos_mct_v3.ko
clockevents_config_and_register
__clocksource_register_scale
@ -1586,12 +1588,10 @@
d_alloc_name
d_make_root
dput
find_task_by_vpid
fs_kobj
get_next_ino
get_tree_single
init_user_ns
kernfs_path_from_node
kill_litter_super
new_inode
register_filesystem
@ -1602,14 +1602,11 @@
sysfs_remove_mount_point
__traceiter_android_rvh_sched_fork
__traceiter_android_vh_cgroup_attach
__traceiter_android_vh_is_fpsimd_save
__tracepoint_android_rvh_sched_fork
__tracepoint_android_vh_cgroup_attach
__tracepoint_android_vh_is_fpsimd_save
unregister_filesystem
# required by exynos_thermal_v2.ko
dev_pm_opp_find_freq_exact
dev_pm_opp_get_opp_count
kthread_flush_work
of_get_cpu_node
@ -1689,8 +1686,6 @@
xa_store
# required by hardlockup-watchdog.ko
cpus_read_lock
cpus_read_unlock
free_percpu
smp_call_on_cpu
@ -1704,6 +1699,11 @@
__tracepoint_android_vh_set_wake_flags
__wake_up_sync_key
# required by hts.ko
kernel_cpustat
__traceiter_android_vh_free_task
__tracepoint_android_vh_free_task
# required by hwmon.ko
device_property_read_string
devres_free
@ -1759,10 +1759,6 @@
__traceiter_android_rvh_gic_v3_set_affinity
__tracepoint_android_rvh_gic_v3_set_affinity
# required by irq-gic-vh.ko
__traceiter_android_vh_gic_set_affinity
__tracepoint_android_vh_gic_set_affinity
# required by is-actuator-ak737x.ko
v4l2_i2c_subdev_init
@ -1819,11 +1815,8 @@
__wake_up_sync
# required by npu.ko
console_printk
cpuidle_pause_and_lock
cpuidle_resume_and_unlock
dev_pm_opp_find_freq_floor
dma_fence_free
vsprintf
# required by pablo-icpu.ko
@ -1976,6 +1969,7 @@
gen_pool_first_fit_align
# required by samsung_dma_heap.ko
anon_inode_getfile
deferred_free
dma_buf_get_flags
dmabuf_page_pool_alloc
@ -1988,7 +1982,6 @@
dma_heap_get_drvdata
dma_heap_get_name
is_dma_buf_file
iterate_fd
# required by samsung_iommu_v9.ko
device_link_add
@ -1997,7 +1990,6 @@
iommu_device_register
iommu_device_sysfs_add
iommu_device_sysfs_remove
iommu_device_unlink
iommu_fwspec_add_ids
iommu_fwspec_free
iommu_group_for_each_dev
@ -2006,6 +1998,13 @@
iommu_group_set_iommudata
iommu_report_device_fault
of_find_node_with_property
rb_prev
__traceiter_android_rvh_iommu_alloc_insert_iova
__traceiter_android_rvh_iommu_iovad_init_alloc_algo
__traceiter_android_rvh_iommu_limit_align_shift
__tracepoint_android_rvh_iommu_alloc_insert_iova
__tracepoint_android_rvh_iommu_iovad_init_alloc_algo
__tracepoint_android_rvh_iommu_limit_align_shift
# required by scaler.ko
dma_fence_default_wait
@ -2013,7 +2012,6 @@
sync_file_get_fence
v4l2_ctrl_handler_setup
v4l2_m2m_try_schedule
work_busy
# required by scsc_bt.ko
crc_ccitt
@ -2035,6 +2033,7 @@
vprintk_emit
# required by scsc_mx.ko
__kfifo_from_user
kobject_uevent
# required by scsc_platform_mif.ko
@ -2054,18 +2053,17 @@
# required by scsc_wlan.ko
arp_tbl
__cpuhp_remove_state
__cpuhp_state_add_instance
__cpuhp_state_remove_instance
dev_addr_mod
dev_alloc_name
__dev_queue_xmit
dev_set_threaded
down_trylock
dql_completed
dql_reset
dst_release
ether_setup
__find_nth_bit
for_each_kernel_tracepoint
in4_pton
in6_pton
@ -2100,7 +2098,10 @@
unregister_kretprobe
# required by scsi_srpmb.ko
pfn_is_map_memory
blk_execute_rq
blk_mq_alloc_request
blk_mq_free_request
blk_rq_map_kern
scsi_block_when_processing_errors
__scsi_device_lookup_by_target
scsi_execute_cmd
@ -2118,6 +2119,7 @@
input_set_abs_params
# required by sgpu.ko
__arch_clear_user
backlight_device_register
backlight_device_unregister
__bitmap_xor
@ -2125,7 +2127,6 @@
copy_highpage
devfreq_monitor_resume
devfreq_monitor_start
devfreq_monitor_stop
devfreq_monitor_suspend
devfreq_remove_governor
devfreq_resume_device
@ -2142,6 +2143,7 @@
dma_fence_chain_walk
dma_fence_get_status
dma_fence_get_stub
dma_fence_signal_locked
dma_fence_wait_any_timeout
dma_get_required_mask
dma_resv_add_fence
@ -2266,9 +2268,7 @@
shmem_read_mapping_page_gfp
si_meminfo
sysfs_remove_files
__traceiter_android_vh_meminfo_proc_show
__traceiter_gpu_mem_total
__tracepoint_android_vh_meminfo_proc_show
__tracepoint_gpu_mem_total
ttm_bo_init_reserved
ttm_bo_kmap
@ -2443,17 +2443,18 @@
# required by ufs-exynos-core.ko
blk_crypto_reprogram_all_keys
blk_mq_unique_tag
devm_blk_crypto_profile_init
of_cpu_node_to_id
scsi_dma_unmap
scsi_done
__traceiter_android_vh_ufs_check_int_errors
__traceiter_android_vh_ufs_compl_command
__traceiter_android_vh_ufs_mcq_abort
__traceiter_android_vh_ufs_send_command
__traceiter_android_vh_ufs_use_mcq_hooks
__tracepoint_android_vh_ufs_check_int_errors
__tracepoint_android_vh_ufs_compl_command
__tracepoint_android_vh_ufs_mcq_abort
__tracepoint_android_vh_ufs_send_command
__tracepoint_android_vh_ufs_use_mcq_hooks
trace_print_symbols_seq
ufshcd_auto_hibern8_update
@ -2502,7 +2503,6 @@
xhci_ring_alloc
xhci_segment_free
xhci_trb_virt_to_dma
xhci_vendor_get_ops
# required by xhci-exynos.ko
device_property_read_u32_array
@ -2533,6 +2533,7 @@
__alloc_percpu_gfp
arc4_crypt
arc4_setkey
cpuidle_pause_and_lock
__cpu_present_mask
crc32_be
crypto_aead_decrypt
@ -2548,23 +2549,49 @@
crypto_skcipher_encrypt
crypto_skcipher_setkey
__crypto_xor
debugfs_create_x64
debugfs_lookup
dev_fetch_sw_netstats
device_property_read_string_array
dev_pm_opp_find_freq_exact
dma_fence_free
dma_map_sg_attrs
drm_dev_has_vblank
eth_mac_addr
ethtool_op_get_link
fget
__find_nth_bit
get_random_u16
__hw_addr_init
__hw_addr_sync
__hw_addr_unsync
iommu_device_unlink
iterate_fd
kernel_param_lock
kernel_param_unlock
kfree_skb_list_reason
ktime_get_seconds
memmove
mmc_add_host
mmc_alloc_host
mmc_can_gpio_cd
mmc_detect_change
mmc_free_host
mmc_gpio_get_cd
mmc_gpio_get_ro
mmc_of_parse
mmc_regulator_get_supply
mmc_regulator_set_ocr
mmc_regulator_set_vqmmc
mmc_remove_host
mmc_request_done
mmc_wait_for_req
netdev_info
netdev_set_default_ethtool_ops
netif_receive_skb_list
net_ratelimit
pm_runtime_force_resume
pm_runtime_force_suspend
pskb_expand_head
___pskb_trim
rhashtable_free_and_destroy
@ -2576,6 +2603,9 @@
round_jiffies
round_jiffies_relative
round_jiffies_up
scsi_dma_unmap
scsi_done
sdio_signal_irq
sg_init_one
skb_checksum_help
skb_clone_sk
@ -2584,6 +2614,13 @@
__skb_get_hash
__skb_gso_segment
tasklet_unlock_wait
__traceiter_android_rvh_set_task_cpu
__traceiter_android_vh_gic_set_affinity
__traceiter_android_vh_jiffies_update
__tracepoint_android_rvh_set_task_cpu
__tracepoint_android_vh_gic_set_affinity
__tracepoint_android_vh_jiffies_update
ttm_bo_eviction_valuable
ufshcd_mcq_poll_cqe_nolock
unregister_netdevice_many
xhci_vendor_get_ops

View File

@ -1,9 +1,11 @@
[abi_symbol_list]
# commonly used symbols
alloc_chrdev_region
__alloc_pages
__alloc_percpu
alloc_workqueue
alt_cb_patch_nops
anon_inode_getfile
__arch_copy_from_user
__arch_copy_to_user
arm64_use_ng_mappings
@ -13,6 +15,7 @@
atomic_notifier_chain_unregister
__bitmap_and
bitmap_find_free_region
bitmap_parselist
bitmap_release_region
__bitmap_weight
blocking_notifier_call_chain
@ -22,19 +25,25 @@
bpf_trace_run2
bpf_trace_run3
bpf_trace_run4
bpf_trace_run5
bpf_trace_run6
call_rcu
cancel_delayed_work
cancel_delayed_work_sync
cancel_work_sync
cdev_add
cdev_del
cdev_init
__check_object_size
__class_create
class_destroy
__class_register
class_unregister
clk_disable
clk_enable
clk_get
clk_get_rate
__clk_is_enabled
clk_prepare
clk_set_rate
clk_unprepare
@ -52,6 +61,7 @@
cpu_pm_register_notifier
__cpu_possible_mask
crc32_le
_ctype
debugfs_create_dir
debugfs_create_file
debugfs_create_u32
@ -116,6 +126,8 @@
devm_snd_soc_register_component
devm_thermal_of_zone_register
_dev_notice
dev_pm_opp_put
_dev_printk
devres_add
__devres_alloc_node
dev_set_name
@ -141,6 +153,7 @@
dma_fence_release
dma_fence_remove_callback
dma_fence_signal
dma_fence_signal_locked
dma_fence_wait_timeout
dma_free_attrs
dma_heap_buffer_alloc
@ -172,6 +185,8 @@
drm_atomic_helper_connector_destroy_state
drm_atomic_helper_connector_duplicate_state
drm_atomic_helper_connector_reset
__drm_atomic_helper_private_obj_duplicate_state
drm_atomic_private_obj_init
drm_bridge_add
drm_bridge_remove
drm_compat_ioctl
@ -226,7 +241,6 @@
drm_kms_helper_poll_init
drmm_mode_config_init
drm_mode_config_cleanup
drm_mode_copy
drm_mode_create
drm_mode_duplicate
drm_mode_object_put
@ -235,6 +249,7 @@
drm_modeset_unlock
drm_mode_vrefresh
drm_object_attach_property
drm_object_property_set_value
drm_open
drm_poll
drm_prime_gem_destroy
@ -285,7 +300,6 @@
gpiod_set_raw_value
gpiod_set_value_cansleep
gpio_free
gpio_request
gpio_request_one
gpio_to_desc
handle_edge_irq
@ -312,6 +326,7 @@
iomem_resource
iommu_get_domain_for_dev
iommu_map
iommu_map_sg
iommu_register_device_fault_handler
iommu_unmap
iommu_unregister_device_fault_handler
@ -390,7 +405,9 @@
loops_per_jiffy
mdiobus_read
mdiobus_write
memchr_inv
memcpy
__memcpy_fromio
memdup_user
mem_section
memset
@ -507,6 +524,7 @@
platform_get_irq_optional
platform_get_resource
platform_get_resource_byname
__pm_relax
__pm_runtime_disable
pm_runtime_enable
pm_runtime_forbid
@ -518,7 +536,9 @@
__pm_runtime_set_status
__pm_runtime_suspend
__pm_runtime_use_autosuspend
__pm_stay_awake
pm_wakeup_dev_event
pm_wakeup_ws_event
preempt_schedule
preempt_schedule_notrace
prepare_to_wait_event
@ -541,6 +561,7 @@
_raw_spin_unlock_irqrestore
_raw_write_lock_irqsave
_raw_write_unlock_irqrestore
rb_next
rcu_barrier
rdev_get_drvdata
rdev_get_id
@ -548,6 +569,7 @@
regcache_mark_dirty
regcache_sync
__register_chrdev
register_chrdev_region
register_console
register_pm_notifier
register_reboot_notifier
@ -579,6 +601,7 @@
seq_puts
seq_read
set_cpus_allowed_ptr
set_normalized_timespec64
sg_alloc_table
sg_free_table
sg_init_table
@ -589,6 +612,7 @@
simple_attr_write
simple_open
simple_read_from_buffer
simple_strtoul
simple_write_to_buffer
single_open
single_release
@ -631,6 +655,7 @@
strstr
__sw_hweight32
sync_file_create
synchronize_irq
syscon_regmap_lookup_by_phandle
sysfs_create_file_ns
sysfs_create_group
@ -651,6 +676,7 @@
ttm_bo_mmap_obj
__udelay
__unregister_chrdev
unregister_chrdev_region
unregister_pm_notifier
up
up_write
@ -689,6 +715,7 @@
video_unregister_device
vmalloc
vmap
vscnprintf
vsnprintf
vunmap
vzalloc
@ -697,6 +724,8 @@
wait_for_completion_timeout
__wake_up
wake_up_process
wakeup_source_register
wakeup_source_unregister
__warn_printk
ww_mutex_lock
ww_mutex_unlock
@ -712,6 +741,7 @@
cec_transmit_done_ts
cec_unregister_adapter
drm_bridge_hpd_notify
drm_mode_copy
hdmi_avi_infoframe_init
hdmi_avi_infoframe_pack
i2c_new_ancillary_device
@ -749,15 +779,12 @@
# required by drm_display_helper.ko
devm_backlight_device_register
_dev_printk
drm_atomic_get_connector_state
drm_atomic_get_crtc_state
drm_atomic_get_new_private_obj_state
drm_atomic_get_old_private_obj_state
drm_atomic_get_private_obj_state
__drm_atomic_helper_private_obj_duplicate_state
drm_atomic_private_obj_fini
drm_atomic_private_obj_init
drm_crtc_commit_wait
drm_crtc_wait_one_vblank
__drm_debug
@ -766,9 +793,7 @@
drm_edid_duplicate
drm_edid_get_monitor_name
drm_modeset_lock_single_interruptible
drm_object_property_set_value
__drm_printfn_debug
memchr_inv
__sw_hweight8
system_long_wq
@ -794,6 +819,7 @@
nr_irqs
proc_create
register_die_notifier
register_module_notifier
register_restart_handler
return_address
rtc_time64_to_tm
@ -855,9 +881,7 @@
platform_device_alloc
platform_device_del
platform_device_put
__pm_relax
pm_runtime_allow
__pm_stay_awake
typec_register_partner
typec_register_port
typec_set_data_role
@ -867,11 +891,8 @@
typec_unregister_port
usb_gadget_set_state
usb_otg_state_string
wakeup_source_register
wakeup_source_unregister
# required by exynos-acme.ko
bitmap_parselist
__cpu_active_mask
cpufreq_cpu_get
cpufreq_cpu_get_raw
@ -890,9 +911,6 @@
get_cpu_device
system_state
# required by exynos-adv-tracer-s2d.ko
simple_strtoul
# required by exynos-chipid_v2.ko
of_find_node_opts_by_path
soc_device_register
@ -904,7 +922,6 @@
__cpu_present_mask
# required by exynos-debug-test.ko
_ctype
remove_cpu
smp_call_function
smp_call_function_single
@ -961,6 +978,7 @@
drm_atomic_helper_update_plane
drm_atomic_helper_wait_for_vblanks
drm_bridge_attach
drm_connector_set_path_property
drm_crtc_arm_vblank_event
drm_crtc_handle_vblank
drm_crtc_init_with_planes
@ -978,9 +996,11 @@
drm_gem_vm_open
drm_get_connector_status_name
drm_get_format_info
drm_helper_probe_detect
drm_mode_config_helper_resume
drm_mode_config_helper_suspend
drm_mode_config_reset
drm_mode_object_find
drm_mode_object_get
drm_of_component_match_add
drm_of_crtc_port_mask
@ -996,6 +1016,7 @@
drm_plane_create_zpos_immutable_property
drm_plane_create_zpos_property
__drm_printfn_info
drm_property_blob_put
drm_property_create
drm_property_create_blob
drm_rotation_simplify
@ -1004,7 +1025,6 @@
drm_writeback_connector_init
drm_writeback_queue_job
drm_writeback_signal_completion
flush_signals
gpiod_to_irq
mipi_dsi_host_register
mipi_dsi_host_unregister
@ -1012,6 +1032,7 @@
of_drm_find_panel
of_find_i2c_device_by_node
of_graph_get_endpoint_by_regs
of_graph_get_endpoint_count
of_graph_get_next_endpoint
of_graph_get_port_by_id
of_graph_get_remote_port
@ -1023,8 +1044,6 @@
platform_find_device_by_driver
seq_hex_dump
seq_release
strnstr
synchronize_irq
vmalloc_to_page
# required by exynos_mfc.ko
@ -1032,7 +1051,6 @@
dma_buf_begin_cpu_access_partial
dma_buf_end_cpu_access_partial
hex_dump_to_buffer
iommu_map_sg
__sw_hweight64
_totalram_pages
@ -1091,8 +1109,6 @@
hrtimer_try_to_cancel
# required by hwmon.ko
__class_register
class_unregister
device_property_read_string
devres_free
devres_release
@ -1112,8 +1128,6 @@
i2c_smbus_xfer
i2c_transfer_buffer_flags
i2c_verify_client
register_chrdev_region
unregister_chrdev_region
# required by lontium-lt9611.ko
drm_hdmi_avi_infoframe_from_display_mode
@ -1121,6 +1135,28 @@
regmap_multi_reg_write
regulator_set_load
# required by npu.ko
__bitmap_clear
__bitmap_set
cdev_alloc
console_printk
cpuidle_pause_and_lock
cpuidle_resume_and_unlock
devm_clk_put
dev_pm_opp_find_freq_ceil
dev_pm_opp_find_freq_floor
dma_fence_free
fget
_find_next_zero_bit
firmware_request_nowarn
__kfifo_in
__kfifo_out
of_irq_parse_one
rb_erase
rb_insert_color
strrchr
sysfs_remove_file_ns
# required by panel-samsung-dummy.ko
drm_panel_add
drm_panel_init
@ -1138,7 +1174,7 @@
phylink_mii_c22_pcs_encode_advertisement
# required by phy-exynosauto-usbdrd-super.ko
__clk_is_enabled
gpio_request
# required by pinctrl-samsung-core.ko
device_get_next_child_node
@ -1209,7 +1245,6 @@
# required by rtc-s2vps02.ko
devm_rtc_device_register
pm_wakeup_ws_event
rtc_update_irq
rtc_valid_tm
@ -1241,7 +1276,6 @@
regulator_set_voltage
unregister_reboot_notifier
vb2_mmap
vscnprintf
# required by samsung-bridge-dummy.ko
drm_atomic_helper_bridge_propagate_bus_fmt
@ -1257,7 +1291,6 @@
# required by samsung_dma_heap.ko
adjust_managed_page_count
anon_inode_getfile
deferred_free
dma_buf_get_flags
dmabuf_page_pool_alloc
@ -1298,8 +1331,11 @@
# required by scaler.ko
clk_set_parent
devm_get_free_pages
dma_fence_default_wait
dma_heap_buffer_free
flush_signals
kill_pid
sync_file_get_fence
v4l2_ctrl_handler_free
v4l2_ctrl_handler_init_class
@ -1334,14 +1370,14 @@
backlight_device_unregister
__bitmap_andnot
__bitmap_xor
bpf_trace_run5
bpf_trace_run9
capable
devfreq_recommended_opp
devfreq_resume_device
devfreq_suspend_device
__devm_drm_dev_alloc
devm_iounmap
dev_pm_opp_get_voltage
dev_pm_opp_put
dev_pm_qos_update_request
dma_buf_dynamic_attach
dma_buf_move_notify
@ -1352,7 +1388,6 @@
dma_fence_chain_walk
dma_fence_get_status
dma_fence_get_stub
dma_fence_signal_locked
dma_fence_wait_any_timeout
dma_get_required_mask
dma_resv_add_fence
@ -1433,7 +1468,6 @@
jiffies64_to_msecs
jiffies_to_usecs
kobject_put
__memcpy_fromio
__memcpy_toio
memremap
memunmap
@ -1475,12 +1509,10 @@
__rb_erase_color
rb_first_postorder
__rb_insert_augmented
rb_next
rb_next_postorder
__rcu_read_lock
__rcu_read_unlock
seq_write
set_normalized_timespec64
sg_alloc_table_from_pages_segment
si_meminfo
sysfs_create_files
@ -1547,12 +1579,13 @@
snd_soc_jack_report
# required by snd-soc-samsung-abox-core.ko
__devm_regmap_init
devm_ioremap_wc
__devm_regmap_init_mmio_clk
__devm_request_region
dma_mmap_attrs
irq_set_affinity
kthread_bind
of_property_match_string
__platform_register_drivers
platform_unregister_drivers
pm_runtime_no_callbacks
@ -1569,10 +1602,10 @@
snd_soc_dapm_mux_update_power
snd_soc_dapm_new_control
snd_soc_dapm_new_controls
snd_soc_new_compress
snd_soc_set_runtime_hwparams
snd_soc_unregister_component
stpcpy
__tasklet_hi_schedule
# required by snd-soc-tas6424.ko
regcache_cache_only
@ -1748,14 +1781,20 @@
xsk_uses_need_wakeup
# required by sxgmac.ko
alloc_chrdev_region
cdev_add
gpiod_direction_output
gpiod_set_value
# required by ufs-exynosauto-core.ko
__crypto_memneq
devm_blk_crypto_profile_init
dmam_free_coherent
scsi_dma_unmap
scsi_done
__traceiter_android_vh_ufs_fill_prdt
__traceiter_android_vh_ufs_prepare_command
__tracepoint_android_vh_ufs_fill_prdt
__tracepoint_android_vh_ufs_prepare_command
trace_print_symbols_seq
ufshcd_auto_hibern8_update
ufshcd_config_pwr_mode
ufshcd_dme_get_attr
@ -1774,10 +1813,8 @@
console_suspend_enabled
current_work
default_wake_function
__devm_regmap_init
dma_buf_fd
drm_connector_set_path_property
drm_helper_probe_detect
drm_property_blob_put
irq_create_of_mapping
irq_dispose_mapping
irq_find_matching_fwspec
@ -1791,7 +1828,6 @@
nonseekable_open
of_clk_del_provider
of_find_node_by_type
of_graph_get_endpoint_count
of_irq_find_parent
pci_disable_device
pci_disable_msi
@ -1809,8 +1845,10 @@
remove_proc_entry
remove_wait_queue
sigprocmask
strnstr
sysfs_create_bin_file
sysfs_remove_bin_file
__tasklet_hi_schedule
__task_pid_nr_ns
thermal_of_zone_register
thermal_of_zone_unregister

View File

@ -0,0 +1,145 @@
[abi_symbol_list]
# commonly used symbols
module_layout
__put_task_struct
# required by fips140.ko
aead_register_instance
ahash_register_instance
arch_timer_read_counter
bcmp
complete_all
completion_done
cpu_have_feature
crypto_aead_decrypt
crypto_aead_encrypt
crypto_aead_setauthsize
crypto_aead_setkey
crypto_ahash_finup
crypto_ahash_setkey
crypto_alg_list
crypto_alg_sem
crypto_alloc_aead
crypto_alloc_base
crypto_alloc_rng
crypto_alloc_shash
crypto_alloc_skcipher
crypto_attr_alg_name
crypto_check_attr_type
crypto_cipher_encrypt_one
crypto_cipher_setkey
crypto_destroy_tfm
crypto_drop_spawn
crypto_get_default_null_skcipher
crypto_grab_aead
crypto_grab_ahash
crypto_grab_shash
crypto_grab_skcipher
crypto_grab_spawn
crypto_inst_setname
crypto_put_default_null_skcipher
crypto_register_aead
crypto_register_aeads
crypto_register_ahash
crypto_register_ahashes
crypto_register_alg
crypto_register_algs
crypto_register_rng
crypto_register_rngs
crypto_register_shash
crypto_register_shashes
crypto_register_skcipher
crypto_register_skciphers
crypto_register_template
crypto_register_templates
crypto_remove_spawns
crypto_req_done
crypto_rng_reset
crypto_shash_alg_has_setkey
crypto_shash_digest
crypto_shash_final
crypto_shash_finup
crypto_shash_setkey
crypto_shash_tfm_digest
crypto_shash_update
crypto_skcipher_decrypt
crypto_skcipher_encrypt
crypto_skcipher_setkey
crypto_spawn_tfm
crypto_spawn_tfm2
crypto_unregister_aead
crypto_unregister_alg
crypto_unregister_rng
crypto_unregister_rngs
crypto_unregister_shash
crypto_unregister_shashes
crypto_unregister_skciphers
crypto_unregister_template
crypto_unregister_templates
down_write
fortify_panic
fpsimd_context_busy
get_random_bytes
__init_swait_queue_head
irq_stat
jiffies
kasan_flag_enabled
kernel_neon_begin
kernel_neon_end
kfree
kfree_sensitive
__kmalloc
kmalloc_caches
kmalloc_trace
kmemdup
ktime_get
__list_add_valid
__list_del_entry_valid
memcpy
memset
__mutex_init
mutex_lock
mutex_unlock
panic
preempt_schedule
preempt_schedule_notrace
_printk
___ratelimit
_raw_spin_lock
_raw_spin_unlock
refcount_warn_saturate
rng_is_initialized
scatterwalk_ffwd
scatterwalk_map_and_copy
sg_init_one
sg_init_table
sg_next
shash_free_singlespawn_instance
shash_register_instance
skcipher_alloc_instance_simple
skcipher_register_instance
skcipher_walk_aead_decrypt
skcipher_walk_aead_encrypt
skcipher_walk_done
skcipher_walk_virt
snprintf
__stack_chk_fail
strcmp
strlcat
strlen
strncmp
strnlen
strscpy
__traceiter_android_vh_aes_decrypt
__traceiter_android_vh_aes_encrypt
__traceiter_android_vh_aes_expandkey
__traceiter_android_vh_sha256
__tracepoint_android_vh_aes_decrypt
__tracepoint_android_vh_aes_encrypt
__tracepoint_android_vh_aes_expandkey
__tracepoint_android_vh_sha256
tracepoint_probe_register
up_write
wait_for_completion
xa_load
xa_store

View File

@ -0,0 +1,3 @@
[abi_symbol_list]
__traceiter_android_vh_tune_mmap_readaround
__tracepoint_android_vh_tune_mmap_readaround

View File

@ -171,6 +171,7 @@
clk_hw_get_rate
clk_hw_is_enabled
clk_hw_is_prepared
clk_hw_register
clk_hw_round_rate
clk_hw_set_parent
__clk_is_enabled
@ -188,6 +189,7 @@
clk_set_parent
clk_set_rate
clk_unprepare
clk_unregister
clockevents_config_and_register
clocks_calc_mult_shift
clocksource_mmio_init
@ -361,6 +363,7 @@
dev_close_many
dev_coredumpv
dev_driver_string
_dev_emerg
_dev_err
dev_err_probe
dev_fetch_sw_netstats
@ -473,6 +476,7 @@
dev_mc_unsync
devm_devfreq_add_device
devm_devfreq_register_notifier
devm_devfreq_register_opp_notifier
devm_devfreq_remove_device
devm_devfreq_unregister_notifier
devm_devfreq_unregister_opp_notifier
@ -679,6 +683,7 @@
dma_resv_iter_first_unlocked
dma_resv_iter_next_unlocked
dma_resv_reserve_fences
dma_resv_wait_timeout
dma_run_dependencies
dma_set_coherent_mask
dma_set_mask
@ -828,6 +833,7 @@
drm_kms_helper_poll_disable
drm_kms_helper_poll_enable
drm_kms_helper_poll_fini
drm_kms_helper_poll_init
drmm_mode_config_init
drm_mode_config_cleanup
drm_mode_config_reset
@ -881,6 +887,7 @@
dst_cache_set_ip4
dst_cache_set_ip6
dst_release
dummy_irq_chip
dump_stack
efi
em_cpu_get
@ -911,6 +918,7 @@
extcon_get_edev_by_phandle
extcon_get_state
extcon_set_state_sync
fasync_helper
__fdget
fd_install
fget
@ -999,7 +1007,11 @@
genlmsg_put
genl_register_family
genl_unregister_family
__genphy_config_aneg
genphy_read_status
genphy_resume
genphy_soft_reset
genphy_suspend
gen_pool_add_owner
gen_pool_alloc_algo_owner
gen_pool_avail
@ -1060,6 +1072,7 @@
gpiod_direction_input
gpiod_direction_output
gpiod_direction_output_raw
gpiod_get_optional
gpiod_get_raw_value
gpiod_get_value
gpiod_get_value_cansleep
@ -1263,7 +1276,9 @@
irq_create_of_mapping
irq_dispose_mapping
__irq_domain_add
__irq_domain_alloc_fwnode
irq_domain_create_simple
irq_domain_free_fwnode
irq_domain_free_irqs_common
irq_domain_get_irq_data
irq_domain_remove
@ -1335,6 +1350,7 @@
kfree_skb_list_reason
kfree_skb_partial
kfree_skb_reason
kill_fasync
kimage_vaddr
kimage_voffset
__kmalloc
@ -1402,6 +1418,7 @@
kthread_unpark
kthread_worker_fn
ktime_get
ktime_get_coarse_ts64
ktime_get_coarse_with_offset
ktime_get_mono_fast_ns
ktime_get_raw
@ -1458,8 +1475,12 @@
mdiobus_alloc_size
mdiobus_free
mdiobus_get_phy
__mdiobus_read
mdiobus_read
__mdiobus_register
mdiobus_unregister
__mdiobus_write
mdiobus_write
media_create_ancillary_link
media_create_intf_link
media_create_pad_link
@ -1723,6 +1744,7 @@
of_machine_is_compatible
of_match_device
of_match_node
__of_mdiobus_register
of_n_addr_cells
of_n_size_cells
__of_parse_phandle_with_args
@ -1865,6 +1887,9 @@
phy_connect_direct
phy_disconnect
phy_do_ioctl_running
phy_drivers_register
phy_drivers_unregister
phy_error
phy_ethtool_get_eee
phy_ethtool_get_link_ksettings
phy_ethtool_get_wol
@ -1877,8 +1902,10 @@
phy_exit
phy_find_first
phy_get
phy_get_pause
phy_init
phy_init_eee
phy_init_hw
phylink_connect_phy
phylink_create
phylink_destroy
@ -1895,8 +1922,10 @@
phy_power_on
phy_print_status
phy_put
phy_read_mmd
phy_register_fixup_for_uid
phy_remove_link_mode
phy_restore_page
phy_save_page
phy_set_mode_ext
phy_start
@ -1904,7 +1933,9 @@
phy_stop
phy_support_asym_pause
phy_suspend
phy_trigger_machine
phy_unregister_fixup_for_uid
phy_write_mmd
pick_migrate_task
pid_task
pinconf_generic_parse_dt_config
@ -1938,6 +1969,7 @@
__platform_driver_register
platform_driver_unregister
platform_find_device_by_driver
platform_get_ethdev_address
platform_get_irq
platform_get_irq_byname
platform_get_irq_byname_optional
@ -2134,9 +2166,12 @@
regmap_field_read
regmap_field_update_bits_base
regmap_irq_get_domain
regmap_multi_reg_write
regmap_raw_read
regmap_raw_write
regmap_read
regmap_register_patch
regmap_test_bits
regmap_update_bits_base
regmap_write
regulator_bulk_disable
@ -2182,6 +2217,7 @@
remove_proc_entry
remove_proc_subtree
remove_wait_queue
report_iommu_fault
request_firmware
request_firmware_direct
request_firmware_nowait
@ -2457,19 +2493,25 @@
snd_soc_dapm_get_pin_switch
snd_soc_dapm_get_volsw
snd_soc_dapm_info_pin_switch
snd_soc_dapm_kcontrol_widget
snd_soc_dapm_new_controls
snd_soc_dapm_new_widgets
snd_soc_dapm_put_enum_double
snd_soc_dapm_put_pin_switch
snd_soc_dapm_put_volsw
snd_soc_dapm_sync
snd_soc_dpcm_get_substream
snd_soc_get_enum_double
snd_soc_get_volsw
snd_soc_info_enum_double
snd_soc_info_volsw
snd_soc_jack_report
snd_soc_new_compress
snd_soc_of_get_dai_link_codecs
snd_soc_of_parse_audio_routing
snd_soc_pm_ops
snd_soc_poweroff
snd_soc_put_enum_double
snd_soc_put_volsw
snd_soc_register_component
snd_soc_resume
@ -2642,6 +2684,7 @@
thermal_zone_get_zone_by_name
thread_group_cputime_adjusted
tick_nohz_get_sleep_length
time64_to_tm
timecounter_init
timecounter_read
timer_of_init
@ -3135,10 +3178,12 @@
usb_role_string
usb_role_switch_get
usb_role_switch_get_drvdata
usb_role_switch_put
usb_role_switch_register
usb_role_switch_set_role
usb_role_switch_unregister
usb_root_hub_lost_power
usb_scuttle_anchored_urbs
usb_set_interface
usb_show_dynids
usb_speed_string
@ -3154,6 +3199,13 @@
uuid_gen
uuid_null
uuid_parse
v4l2_async_nf_cleanup
v4l2_async_nf_init
v4l2_async_nf_parse_fwnode_endpoints
v4l2_async_nf_register
v4l2_async_nf_unregister
v4l2_async_register_subdev
v4l2_async_unregister_subdev
v4l2_compat_ioctl32
v4l2_ctrl_find
v4l2_ctrl_g_ctrl
@ -3190,6 +3242,7 @@
v4l2_fh_open
__v4l2_find_nearest_size
v4l2_format_info
v4l2_fwnode_endpoint_parse
v4l2_i2c_subdev_init
v4l2_m2m_buf_copy_metadata
v4l2_m2m_buf_queue
@ -3203,7 +3256,9 @@
v4l2_m2m_get_vq
v4l2_m2m_init
v4l2_m2m_ioctl_create_bufs
v4l2_m2m_ioctl_decoder_cmd
v4l2_m2m_ioctl_dqbuf
v4l2_m2m_ioctl_encoder_cmd
v4l2_m2m_ioctl_expbuf
v4l2_m2m_ioctl_prepare_buf
v4l2_m2m_ioctl_qbuf
@ -3211,7 +3266,10 @@
v4l2_m2m_ioctl_reqbufs
v4l2_m2m_ioctl_streamoff
v4l2_m2m_ioctl_streamon
v4l2_m2m_ioctl_try_decoder_cmd
v4l2_m2m_ioctl_try_encoder_cmd
v4l2_m2m_job_finish
v4l2_m2m_last_buffer_done
v4l2_m2m_next_buf
v4l2_m2m_qbuf
v4l2_m2m_register_media_controller

View File

@ -1,4 +1,224 @@
[abi_symbol_list]
# commonly used symbols
module_layout
__put_task_struct
# required by ntfs3.ko
__alloc_pages
alt_cb_patch_nops
__arch_copy_from_user
__arch_copy_to_user
arm64_use_ng_mappings
balance_dirty_pages_ratelimited
bcmp
__bh_read
bh_uptodate_or_lock
bio_add_page
bio_alloc_bioset
bio_chain
bio_put
__bitmap_clear
__bitmap_set
__bitmap_weight
blkdev_issue_discard
blk_finish_plug
blk_start_plug
__blockdev_direct_IO
block_dirty_folio
block_invalidate_folio
block_truncate_page
block_write_begin
block_write_end
block_write_full_page
__bread_gfp
__brelse
call_rcu
capable
clean_bdev_aliases
clear_inode
clear_nlink
copy_page_from_iter_atomic
cpu_hwcaps
create_empty_buffers
current_time
current_umask
d_find_alias
d_instantiate
discard_new_inode
d_make_root
d_obtain_alias
down_read
down_write
down_write_trylock
dput
drop_nlink
d_splice_alias
end_buffer_read_sync
fault_in_iov_iter_readable
fiemap_fill_next_extent
fiemap_prep
filemap_fdatawait_range
filemap_fdatawrite
filemap_fdatawrite_range
filemap_write_and_wait_range
file_remove_privs
file_update_time
_find_next_bit
_find_next_zero_bit
flush_dcache_page
__folio_lock
__folio_put
fs_bio_set
fs_param_is_string
fs_param_is_u32
__fs_parse
generic_block_bmap
generic_fh_to_dentry
generic_fh_to_parent
generic_file_fsync
generic_file_llseek
generic_file_mmap
generic_file_open
generic_file_read_iter
generic_file_splice_read
__generic_file_write_iter
generic_fillattr
generic_permission
generic_read_dir
generic_write_checks
generic_write_end
generic_writepages
__getblk_gfp
get_random_u32
get_tree_bdev
gic_nonsecure_priorities
grab_cache_page_write_begin
hex_asc
iget5_locked
iget_failed
ihold
ilookup
inc_nlink
__init_rwsem
init_special_inode
inode_dio_wait
inode_get_bytes
inode_init_once
inode_init_owner
inode_needs_sync
inode_newsize_ok
inode_nohighmem
inode_set_bytes
inode_to_bdi
insert_inode_locked
invalidate_bdev
invalidate_inode_buffers
iov_iter_revert
iov_iter_zero
iput
is_bad_inode
iter_file_splice_write
kasan_flag_enabled
kfree
kfree_link
kill_block_super
__kmalloc
kmalloc_caches
kmalloc_trace
kmem_cache_alloc
kmem_cache_alloc_lru
kmem_cache_create
kmem_cache_destroy
kmem_cache_free
kmemdup
kvfree
kvmalloc_node
load_nls
load_nls_default
__lock_buffer
lockref_get
logfc
make_bad_inode
mark_buffer_dirty
__mark_inode_dirty
memcpy
memmove
memset
mpage_readahead
mpage_read_folio
mpage_writepages
__mutex_init
mutex_lock
mutex_trylock
mutex_unlock
names_cachep
new_inode
overflowgid
overflowuid
pagecache_get_page
page_pinner_inited
__page_pinner_put_page
posix_acl_chmod
preempt_schedule
_printk
___ratelimit
_raw_spin_lock
_raw_spin_unlock
rb_erase
rb_first
rb_insert_color
rb_last
rb_next
rb_prev
rcu_barrier
read_cache_page
register_filesystem
sb_set_blocksize
seq_printf
seq_puts
setattr_copy
setattr_prepare
set_bh_page
set_nlink
set_page_dirty
snprintf
__stack_chk_fail
strcmp
strlen
submit_bh
submit_bio
submit_bio_wait
sync_blockdev
sync_blockdev_nowait
sync_dirty_buffer
sync_filesystem
sync_inode_metadata
sync_mapping_buffers
truncate_inode_pages_final
truncate_pagecache
truncate_setsize
unload_nls
unlock_buffer
unlock_new_inode
unlock_page
unregister_filesystem
up_read
up_write
utf16s_to_utf8s
utf8_to_utf32
vfs_fsync_range
vmap
vm_zone_stat
vunmap
__wait_on_buffer
__warn_printk
write_inode_now
# required by mount_state.ko
get_fs_type
iterate_supers_type
get_fs_type
# required by thermal_core_skip_irq.ko
__traceiter_android_vh_thermal_pm_notify_suspend
__tracepoint_android_vh_thermal_pm_notify_suspend
tracepoint_probe_register

View File

@ -53,6 +53,8 @@
mmc_wait_for_cmd
__mod_lruvec_state
__mod_zone_page_state
neigh_xmit
netif_receive_skb_core
nf_ct_attach
nf_ct_delete
nf_register_net_hook
@ -79,6 +81,7 @@
root_mem_cgroup
rtc_read_alarm
rtc_set_alarm
__rtnl_link_register
__rtnl_link_unregister
sdio_memcpy_fromio
sdio_memcpy_toio
@ -142,7 +145,7 @@
__traceiter_android_vh_binder_thread_read
__traceiter_android_vh_binder_thread_release
__traceiter_android_vh_binder_wait_for_work
__traceiter_android_vh_binder_detect_low_async_space_locked
__traceiter_android_vh_binder_detect_low_async_space
__traceiter_android_vh_cgroup_set_task
__traceiter_android_vh_check_folio_look_around_ref
__traceiter_android_vh_dup_task_struct
@ -209,6 +212,8 @@
__traceiter_android_vh_free_oem_binder_struct
__traceiter_android_vh_binder_special_task
__traceiter_android_vh_binder_free_buf
__traceiter_android_vh_binder_buffer_release
__traceiter_android_vh_copy_process
__tracepoint_android_rvh_post_init_entity_util_avg
__tracepoint_android_rvh_rtmutex_force_update
__tracepoint_android_vh_account_process_tick_gran
@ -234,7 +239,7 @@
__tracepoint_android_vh_binder_thread_read
__tracepoint_android_vh_binder_thread_release
__tracepoint_android_vh_binder_wait_for_work
__tracepoint_android_vh_binder_detect_low_async_space_locked
__tracepoint_android_vh_binder_detect_low_async_space
__tracepoint_android_vh_cgroup_set_task
__tracepoint_android_vh_check_folio_look_around_ref
__tracepoint_android_vh_do_futex
@ -316,6 +321,8 @@
__tracepoint_android_vh_free_oem_binder_struct
__tracepoint_android_vh_binder_special_task
__tracepoint_android_vh_binder_free_buf
__tracepoint_android_vh_binder_buffer_release
__tracepoint_android_vh_copy_process
__trace_puts
try_to_free_mem_cgroup_pages
typec_mux_get_drvdata
@ -327,4 +334,6 @@
wakeup_source_remove
wake_up_state
wq_worker_comm
xt_register_match
xt_unregister_match
zero_pfn

View File

@ -116,6 +116,7 @@
blk_queue_logical_block_size
blk_queue_max_discard_sectors
blk_queue_max_hw_sectors
blk_queue_max_segment_size
blk_queue_max_write_zeroes_sectors
blk_queue_max_zone_append_sectors
blk_queue_physical_block_size
@ -481,6 +482,7 @@
__devm_regmap_init_spi
__devm_regmap_init_spmi_ext
devm_regulator_bulk_get
devm_regulator_bulk_get_const
devm_regulator_get
devm_regulator_get_exclusive
devm_regulator_get_optional
@ -693,6 +695,7 @@
drm_bridge_remove
drm_compat_ioctl
drm_connector_attach_encoder
drm_connector_attach_max_bpc_property
drm_connector_cleanup
drm_connector_init
drm_connector_list_iter_begin
@ -785,6 +788,7 @@
drm_modeset_lock_all_ctx
drm_modeset_lock_single_interruptible
drm_modeset_unlock
drm_mode_sort
drm_mode_vrefresh
drm_object_attach_property
drm_object_property_set_value
@ -1271,6 +1275,7 @@
kstrtou8_from_user
kstrtouint
kstrtouint_from_user
kstrtoul_from_user
kstrtoull
kstrtoull_from_user
kthread_bind
@ -1493,6 +1498,7 @@
of_genpd_add_provider_simple
of_get_child_by_name
of_get_cpu_node
of_get_drm_panel_display_mode
of_get_named_gpio_flags
of_get_next_available_child
of_get_next_child
@ -1750,6 +1756,7 @@
radix_tree_lookup
radix_tree_next_chunk
radix_tree_preload
raise_softirq
___ratelimit
raw_notifier_call_chain
raw_notifier_chain_register
@ -1961,6 +1968,8 @@
__seq_open_private
seq_printf
seq_putc
seq_put_decimal_ll
seq_put_decimal_ull
seq_puts
seq_read
seq_release
@ -2325,12 +2334,14 @@
__traceiter_android_rvh_set_user_nice_locked
__traceiter_android_rvh_typec_tcpci_get_vbus
__traceiter_android_rvh_uclamp_eff_get
__traceiter_android_rvh_ufs_complete_init
__traceiter_android_rvh_ufs_reprogram_all_keys
__traceiter_android_rvh_update_blocked_fair
__traceiter_android_rvh_update_load_avg
__traceiter_android_rvh_update_load_sum
__traceiter_android_rvh_update_misfit_status
__traceiter_android_rvh_update_rt_rq_load_avg
__traceiter_android_rvh_usb_dev_suspend
__traceiter_android_rvh_util_fits_cpu
__traceiter_android_vh_arch_set_freq_scale
__traceiter_android_vh_audio_usb_offload_connect
@ -2355,6 +2366,7 @@
__traceiter_android_vh_scheduler_tick
__traceiter_android_vh_setscheduler_uclamp
__traceiter_android_vh_si_meminfo_adjust
__traceiter_android_vh_sound_usb_support_cpu_suspend
__traceiter_android_vh_sysrq_crash
__traceiter_android_vh_timerfd_create
__traceiter_android_vh_typec_store_partner_src_caps
@ -2372,9 +2384,13 @@
__traceiter_android_vh_ufs_send_uic_command
__traceiter_android_vh_ufs_update_sdev
__traceiter_android_vh_ufs_update_sysfs
__traceiter_android_vh_usb_dev_resume
__traceiter_android_vh_use_amu_fie
__traceiter_clock_set_rate
__traceiter_cma_alloc_finish
__traceiter_cma_alloc_start
__traceiter_cpu_frequency
__traceiter_cpu_idle
__traceiter_device_pm_callback_end
__traceiter_device_pm_callback_start
__traceiter_dwc3_readl
@ -2440,12 +2456,14 @@
__tracepoint_android_rvh_set_user_nice_locked
__tracepoint_android_rvh_typec_tcpci_get_vbus
__tracepoint_android_rvh_uclamp_eff_get
__tracepoint_android_rvh_ufs_complete_init
__tracepoint_android_rvh_ufs_reprogram_all_keys
__tracepoint_android_rvh_update_blocked_fair
__tracepoint_android_rvh_update_load_avg
__tracepoint_android_rvh_update_load_sum
__tracepoint_android_rvh_update_misfit_status
__tracepoint_android_rvh_update_rt_rq_load_avg
__tracepoint_android_rvh_usb_dev_suspend
__tracepoint_android_rvh_util_fits_cpu
__tracepoint_android_vh_arch_set_freq_scale
__tracepoint_android_vh_audio_usb_offload_connect
@ -2470,6 +2488,7 @@
__tracepoint_android_vh_scheduler_tick
__tracepoint_android_vh_setscheduler_uclamp
__tracepoint_android_vh_si_meminfo_adjust
__tracepoint_android_vh_sound_usb_support_cpu_suspend
__tracepoint_android_vh_sysrq_crash
__tracepoint_android_vh_timerfd_create
__tracepoint_android_vh_typec_store_partner_src_caps
@ -2487,9 +2506,13 @@
__tracepoint_android_vh_ufs_send_uic_command
__tracepoint_android_vh_ufs_update_sdev
__tracepoint_android_vh_ufs_update_sysfs
__tracepoint_android_vh_usb_dev_resume
__tracepoint_android_vh_use_amu_fie
__tracepoint_clock_set_rate
__tracepoint_cma_alloc_finish
__tracepoint_cma_alloc_start
__tracepoint_cpu_frequency
__tracepoint_cpu_idle
__tracepoint_device_pm_callback_end
__tracepoint_device_pm_callback_start
__tracepoint_dwc3_readl
@ -2763,6 +2786,8 @@
woken_wake_function
work_busy
__write_overflow_field
ww_mutex_lock
ww_mutex_unlock
__xa_alloc
xa_clear_mark
xa_destroy

View File

@ -308,6 +308,7 @@
clk_set_rate
clk_sync_state
clk_unprepare
clk_unregister_fixed_rate
close_candev
close_fd
cma_alloc
@ -1247,6 +1248,7 @@
get_page_owner_handle
get_pfnblock_flags_mask
get_pid_task
get_phy_device
get_random_bytes
get_random_u16
get_random_u32
@ -1392,6 +1394,7 @@
__hvc_resize
__hw_addr_init
__hw_addr_sync
__hw_addr_sync_dev
__hw_addr_unsync
hwrng_register
hwrng_unregister
@ -2017,6 +2020,7 @@
netdev_change_features
netdev_core_stats_alloc
netdev_err
netdev_features_change
netdev_increment_features
netdev_info
netdev_lower_state_changed
@ -2277,6 +2281,7 @@
pci_disable_device
pci_disable_msi
pcie_capability_clear_and_set_word
pcie_capability_read_dword
pcie_capability_read_word
pci_enable_device
pci_enable_pcie_error_reporting
@ -2332,6 +2337,8 @@
perf_trace_run_bpf_submit
phy_attached_info
phy_calibrate
phy_device_free
phy_device_register
phy_do_ioctl_running
phy_drivers_register
phy_drivers_unregister
@ -2342,6 +2349,8 @@
phy_init
phy_init_eee
phy_init_hw
phy_loopback
phy_lookup_setting
phylink_connect_phy
phylink_create
phylink_destroy
@ -2379,6 +2388,7 @@
phy_power_on
phy_read_mmd
phy_resolve_aneg_linkmode
phy_restart_aneg
phy_set_max_speed
phy_set_mode_ext
phy_suspend
@ -3439,6 +3449,7 @@
__traceiter_android_vh_show_suspend_epoch_val
__traceiter_android_vh_skip_swap_map_write
__traceiter_android_vh_timer_calc_index
__traceiter_android_vh_try_fixup_sea
__traceiter_android_vh_ufs_check_int_errors
__traceiter_android_vh_ufs_compl_command
__traceiter_android_vh_ufs_send_command
@ -3587,6 +3598,7 @@
__tracepoint_android_vh_show_suspend_epoch_val
__tracepoint_android_vh_skip_swap_map_write
__tracepoint_android_vh_timer_calc_index
__tracepoint_android_vh_try_fixup_sea
__tracepoint_android_vh_ufs_check_int_errors
__tracepoint_android_vh_ufs_compl_command
__tracepoint_android_vh_ufs_send_command

View File

@ -144,6 +144,14 @@
__crypto_xor
csum_partial
_ctype
debugfs_attr_read
debugfs_attr_write
debugfs_create_dir
debugfs_create_file
debugfs_create_regset32
debugfs_lookup
debugfs_remove
debugfs_rename
default_llseek
delayed_work_timer_fn
del_timer
@ -1121,6 +1129,7 @@
snd_soc_info_volsw
snd_soc_jack_add_gpios
snd_soc_jack_report
snd_soc_lookup_component
snd_soc_of_parse_audio_routing
snd_soc_of_parse_card_name
snd_soc_params_to_frame_size
@ -1457,6 +1466,7 @@
clear_page
__ClearPageMovable
complete_all
debugfs_create_bool
devfreq_add_device
devfreq_cooling_em_register
devfreq_cooling_unregister
@ -1751,6 +1761,8 @@
mmc_send_tuning
# required by dw_mmc.ko
debugfs_create_u32
debugfs_create_x64
device_property_read_string_array
mmc_add_host
mmc_alloc_host
@ -2183,6 +2195,47 @@
mmc_pwrseq_register
mmc_pwrseq_unregister
# required by r8168.ko
csum_ipv6_magic
netif_set_tso_max_segs
netif_set_tso_max_size
pci_choose_state
pci_clear_master
pci_clear_mwi
pci_disable_msi
pci_disable_msix
pci_enable_device
pci_enable_msi
pci_enable_msix_range
pci_enable_wake
pci_get_slot
pci_release_regions
pci_request_regions
pci_set_mwi
pci_wake_from_d3
pci_write_config_byte
proc_get_parent_data
proc_mkdir_data
# required by realtek.ko
genphy_handle_interrupt_no_ack
genphy_read_abilities
genphy_read_mmd_unsupported
genphy_update_link
genphy_write_mmd_unsupported
__mdiobus_read
__mdiobus_write
phy_basic_t1_features
__phy_modify
phy_modify
phy_modify_changed
phy_modify_paged
phy_modify_paged_changed
phy_read_paged
phy_restore_page
phy_select_page
phy_write_paged
# required by reboot-mode.ko
devres_release
kernel_kobj
@ -2437,6 +2490,8 @@
drm_crtc_vblank_off
drm_crtc_vblank_on
drm_crtc_vblank_put
drm_debugfs_create_files
drm_debugfs_remove_files
drm_do_get_edid
drm_encoder_cleanup
drm_encoder_init
@ -2661,11 +2716,29 @@
# required by snd-soc-rockchip-spdif.ko
snd_pcm_create_iec958_consumer_hw_params
# required by snd-soc-rockchip-trcm.ko
snd_dmaengine_pcm_prepare_slave_config
snd_dmaengine_pcm_refine_runtime_hwparams
snd_dmaengine_pcm_set_config_from_dai_data
snd_pcm_format_size
snd_pcm_hw_constraint_integer
snd_pcm_period_elapsed
snd_pcm_set_managed_buffer
snd_soc_add_component
snd_soc_component_initialize
snd_soc_set_runtime_hwparams
snd_soc_unregister_component_by_driver
strscpy_pad
# required by snd-soc-rockchip.ko
snd_pcm_format_physical_width
# required by snd-soc-rt5640.ko
regmap_register_patch
snd_soc_dapm_force_bias_level
# required by snd-soc-simple-card-utils.ko
devm_get_clk_from_child
devm_kvasprintf
snd_pcm_hw_constraint_minmax
snd_soc_component_set_sysclk
@ -2857,6 +2930,25 @@
crypto_register_alg
crypto_unregister_alg
# required by ufs-rockchip.ko
ufshcd_config_pwr_mode
ufshcd_dealloc_host
ufshcd_dme_set_attr
ufshcd_hba_enable
ufshcd_hba_stop
ufshcd_hold
ufshcd_make_hba_operational
ufshcd_pltfrm_init
ufshcd_pltfrm_shutdown
ufshcd_release
ufshcd_remove
ufshcd_resume_complete
ufshcd_runtime_resume
ufshcd_runtime_suspend
ufshcd_suspend_prepare
ufshcd_system_resume
ufshcd_system_suspend
# required by usblp.ko
add_wait_queue
default_wake_function

View File

@ -0,0 +1,37 @@
[abi_symbol_list]
# required by delayacct
set_delayacct_enabled
__traceiter_android_rvh_delayacct_init
__traceiter_android_rvh_delayacct_tsk_init
__traceiter_android_rvh_delayacct_tsk_free
__traceiter_android_vh_delayacct_blkio_start
__traceiter_android_vh_delayacct_blkio_end
__traceiter_android_vh_delayacct_add_tsk
__traceiter_android_vh_delayacct_blkio_ticks
__traceiter_android_vh_delayacct_freepages_start
__traceiter_android_vh_delayacct_freepages_end
__traceiter_android_vh_delayacct_thrashing_start
__traceiter_android_vh_delayacct_thrashing_end
__traceiter_android_vh_delayacct_swapin_start
__traceiter_android_vh_delayacct_swapin_end
__traceiter_android_vh_delayacct_compact_start
__traceiter_android_vh_delayacct_compact_end
__traceiter_android_vh_delayacct_wpcopy_start
__traceiter_android_vh_delayacct_wpcopy_end
__tracepoint_android_rvh_delayacct_init
__tracepoint_android_rvh_delayacct_tsk_init
__tracepoint_android_rvh_delayacct_tsk_free
__tracepoint_android_vh_delayacct_blkio_start
__tracepoint_android_vh_delayacct_blkio_end
__tracepoint_android_vh_delayacct_add_tsk
__tracepoint_android_vh_delayacct_blkio_ticks
__tracepoint_android_vh_delayacct_freepages_start
__tracepoint_android_vh_delayacct_freepages_end
__tracepoint_android_vh_delayacct_thrashing_start
__tracepoint_android_vh_delayacct_thrashing_end
__tracepoint_android_vh_delayacct_swapin_start
__tracepoint_android_vh_delayacct_swapin_end
__tracepoint_android_vh_delayacct_compact_start
__tracepoint_android_vh_delayacct_compact_end
__tracepoint_android_vh_delayacct_wpcopy_start
__tracepoint_android_vh_delayacct_wpcopy_end

View File

@ -350,3 +350,12 @@
pagecache_get_page
filemap_get_folios
find_get_pages_range_tag
#required by bcmdhd.ko
nla_append
sdio_writew
sdio_readw
#required by speed_ui.ko
__tracepoint_android_rvh_update_cpus_allowed
__traceiter_android_rvh_update_cpus_allowed

View File

@ -304,12 +304,12 @@ CONFIG_FW_LOADER_USER_HELPER=y
# CONFIG_SUN50I_DE2_BUS is not set
# CONFIG_SUNXI_RSB is not set
CONFIG_ARM_SCMI_PROTOCOL=y
CONFIG_ARM_SCMI_TRANSPORT_VIRTIO=y
# CONFIG_ARM_SCMI_POWER_DOMAIN is not set
CONFIG_ARM_SCPI_PROTOCOL=y
# CONFIG_ARM_SCPI_POWER_DOMAIN is not set
# CONFIG_EFI_ARMSTUB_DTB_LOADER is not set
CONFIG_GNSS=y
CONFIG_BLK_DEV_NULL_BLK=m
CONFIG_ZRAM=m
CONFIG_BLK_DEV_LOOP=y
CONFIG_BLK_DEV_LOOP_MIN_COUNT=16
@ -323,7 +323,6 @@ CONFIG_UID_SYS_STATS=y
CONFIG_SCSI=y
# CONFIG_SCSI_PROC_FS is not set
CONFIG_BLK_DEV_SD=y
CONFIG_SCSI_DEBUG=m
CONFIG_MD=y
CONFIG_BLK_DEV_DM=y
CONFIG_DM_CRYPT=y

View File

@ -1334,7 +1334,7 @@ static void handle_host_hcall(struct kvm_cpu_context *host_ctxt)
hcall_t hfn;
if (handle_host_dynamic_hcall(host_ctxt) == HCALL_HANDLED)
return;
goto end;
/*
* If pKVM has been initialised then reject any calls to the
@ -1359,7 +1359,7 @@ static void handle_host_hcall(struct kvm_cpu_context *host_ctxt)
cpu_reg(host_ctxt, 0) = SMCCC_RET_SUCCESS;
hfn(host_ctxt);
end:
trace_host_hcall(id, 0);
return;

View File

@ -887,7 +887,9 @@ static void stage2_coalesce_walk_table_post(u64 addr, u64 end, u32 level,
* of the page table page.
*/
if (mm_ops->page_count(childp) == 1) {
stage2_put_pte(ptep, data->mmu, addr, level, mm_ops);
kvm_clear_pte(ptep);
kvm_call_hyp(__kvm_tlb_flush_vmid, data->mmu);
mm_ops->put_page(ptep);
mm_ops->put_page(childp);
}
}

View File

@ -746,6 +746,11 @@ static int do_sea(unsigned long far, unsigned long esr, struct pt_regs *regs)
{
const struct fault_info *inf;
unsigned long siaddr;
bool can_fixup = false;
trace_android_vh_try_fixup_sea(far, esr, regs, &can_fixup);
if (can_fixup && fixup_exception(regs))
return 0;
inf = esr_to_fault_info(esr);

View File

@ -295,7 +295,6 @@ CONFIG_FW_LOADER_USER_HELPER=y
# CONFIG_FW_CACHE is not set
CONFIG_GNSS=y
CONFIG_OF=y
CONFIG_BLK_DEV_NULL_BLK=m
CONFIG_ZRAM=m
CONFIG_BLK_DEV_LOOP=y
CONFIG_BLK_DEV_LOOP_MIN_COUNT=16
@ -309,7 +308,6 @@ CONFIG_UID_SYS_STATS=y
CONFIG_SCSI=y
# CONFIG_SCSI_PROC_FS is not set
CONFIG_BLK_DEV_SD=y
CONFIG_SCSI_DEBUG=m
CONFIG_MD=y
CONFIG_BLK_DEV_DM=y
CONFIG_DM_CRYPT=y

View File

@ -45,6 +45,9 @@
#include <trace/events/block.h>
#include "blk.h"
#ifndef __GENKSYMS__
#include "blk-mq-debugfs.h"
#endif
#include "blk-mq-sched.h"
#include "blk-pm.h"
#include "blk-cgroup.h"
@ -1213,6 +1216,7 @@ int __init blk_dev_init(void)
sizeof(struct srcu_struct), 0, SLAB_PANIC, NULL);
blk_debugfs_root = debugfs_create_dir("block", NULL);
blk_mq_debugfs_init();
return 0;
}

View File

@ -531,7 +531,7 @@ int blk_rq_append_bio(struct request *rq, struct bio *bio)
unsigned int nr_segs = 0;
bio_for_each_bvec(bv, bio, iter)
nr_segs++;
nr_segs += blk_segments(&rq->q->limits, bv.bv_len);
if (!rq->bio) {
blk_rq_bio_prep(rq, bio, nr_segs);

View File

@ -874,3 +874,12 @@ void blk_mq_debugfs_unregister_sched_hctx(struct blk_mq_hw_ctx *hctx)
debugfs_remove_recursive(hctx->sched_debugfs_dir);
hctx->sched_debugfs_dir = NULL;
}
DEFINE_DEBUGFS_ATTRIBUTE(blk_sub_page_limit_queues_fops,
blk_sub_page_limit_queues_get, NULL, "%llu\n");
void blk_mq_debugfs_init(void)
{
debugfs_create_file("sub_page_limit_queues", 0400, blk_debugfs_root,
NULL, &blk_sub_page_limit_queues_fops);
}

View File

@ -17,6 +17,8 @@ struct blk_mq_debugfs_attr {
const struct seq_operations *seq_ops;
};
void blk_mq_debugfs_init(void);
int __blk_mq_debugfs_rq_show(struct seq_file *m, struct request *rq);
int blk_mq_debugfs_rq_show(struct seq_file *m, void *v);
@ -36,6 +38,10 @@ void blk_mq_debugfs_unregister_sched_hctx(struct blk_mq_hw_ctx *hctx);
void blk_mq_debugfs_register_rqos(struct rq_qos *rqos);
void blk_mq_debugfs_unregister_rqos(struct rq_qos *rqos);
#else
static inline void blk_mq_debugfs_init(void)
{
}
static inline void blk_mq_debugfs_register(struct request_queue *q)
{
}

View File

@ -2,6 +2,9 @@
/*
* Functions related to setting various queue properties from drivers
*/
#define pr_fmt(fmt) "%s: " fmt, __func__
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/init.h>
@ -18,6 +21,11 @@
#include "blk.h"
#include "blk-wbt.h"
/* Protects blk_nr_sub_page_limit_queues and blk_sub_page_limits changes. */
static DEFINE_MUTEX(blk_sub_page_limit_lock);
static uint32_t blk_nr_sub_page_limit_queues;
DEFINE_STATIC_KEY_FALSE(blk_sub_page_limits);
void blk_queue_rq_timeout(struct request_queue *q, unsigned int timeout)
{
q->rq_timeout = timeout;
@ -58,6 +66,7 @@ void blk_set_default_limits(struct queue_limits *lim)
lim->zoned = BLK_ZONED_NONE;
lim->zone_write_granularity = 0;
lim->dma_alignment = 511;
lim->sub_page_limits = false;
}
/**
@ -100,6 +109,58 @@ void blk_queue_bounce_limit(struct request_queue *q, enum blk_bounce bounce)
}
EXPORT_SYMBOL(blk_queue_bounce_limit);
/* For debugfs. */
int blk_sub_page_limit_queues_get(void *data, u64 *val)
{
*val = READ_ONCE(blk_nr_sub_page_limit_queues);
return 0;
}
/**
* blk_enable_sub_page_limits - enable support for limits below the page size
* @lim: request queue limits for which to enable support of these features.
*
* Enable support for max_segment_size values smaller than PAGE_SIZE and for
* max_hw_sectors values below PAGE_SIZE >> SECTOR_SHIFT. Support for these
* features is not enabled all the time because of the runtime overhead of these
* features.
*/
static void blk_enable_sub_page_limits(struct queue_limits *lim)
{
if (lim->sub_page_limits)
return;
lim->sub_page_limits = true;
mutex_lock(&blk_sub_page_limit_lock);
if (++blk_nr_sub_page_limit_queues == 1)
static_branch_enable(&blk_sub_page_limits);
mutex_unlock(&blk_sub_page_limit_lock);
}
/**
* blk_disable_sub_page_limits - disable support for limits below the page size
* @lim: request queue limits for which to enable support of these features.
*
* max_segment_size values smaller than PAGE_SIZE and for max_hw_sectors values
* below PAGE_SIZE >> SECTOR_SHIFT. Support for these features is not enabled
* all the time because of the runtime overhead of these features.
*/
void blk_disable_sub_page_limits(struct queue_limits *lim)
{
if (!lim->sub_page_limits)
return;
lim->sub_page_limits = false;
mutex_lock(&blk_sub_page_limit_lock);
WARN_ON_ONCE(blk_nr_sub_page_limit_queues <= 0);
if (--blk_nr_sub_page_limit_queues == 0)
static_branch_disable(&blk_sub_page_limits);
mutex_unlock(&blk_sub_page_limit_lock);
}
/**
* blk_queue_max_hw_sectors - set max sectors for a request for this queue
* @q: the request queue for the device
@ -122,12 +183,17 @@ EXPORT_SYMBOL(blk_queue_bounce_limit);
void blk_queue_max_hw_sectors(struct request_queue *q, unsigned int max_hw_sectors)
{
struct queue_limits *limits = &q->limits;
unsigned int min_max_hw_sectors = PAGE_SIZE >> SECTOR_SHIFT;
unsigned int max_sectors;
if ((max_hw_sectors << 9) < PAGE_SIZE) {
max_hw_sectors = 1 << (PAGE_SHIFT - 9);
printk(KERN_INFO "%s: set to minimum %d\n",
__func__, max_hw_sectors);
if (max_hw_sectors < min_max_hw_sectors) {
blk_enable_sub_page_limits(limits);
min_max_hw_sectors = 1;
}
if (max_hw_sectors < min_max_hw_sectors) {
max_hw_sectors = min_max_hw_sectors;
pr_info("set to minimum %u\n", max_hw_sectors);
}
max_hw_sectors = round_down(max_hw_sectors,
@ -242,8 +308,7 @@ void blk_queue_max_segments(struct request_queue *q, unsigned short max_segments
{
if (!max_segments) {
max_segments = 1;
printk(KERN_INFO "%s: set to minimum %d\n",
__func__, max_segments);
pr_info("set to minimum %u\n", max_segments);
}
q->limits.max_segments = max_segments;
@ -277,10 +342,16 @@ EXPORT_SYMBOL_GPL(blk_queue_max_discard_segments);
**/
void blk_queue_max_segment_size(struct request_queue *q, unsigned int max_size)
{
if (max_size < PAGE_SIZE) {
max_size = PAGE_SIZE;
printk(KERN_INFO "%s: set to minimum %d\n",
__func__, max_size);
unsigned int min_max_segment_size = PAGE_SIZE;
if (max_size < min_max_segment_size) {
blk_enable_sub_page_limits(&q->limits);
min_max_segment_size = SECTOR_SIZE;
}
if (max_size < min_max_segment_size) {
max_size = min_max_segment_size;
pr_info("set to minimum %u\n", max_size);
}
/* see blk_queue_virt_boundary() for the explanation */
@ -734,8 +805,7 @@ void blk_queue_segment_boundary(struct request_queue *q, unsigned long mask)
{
if (mask < PAGE_SIZE - 1) {
mask = PAGE_SIZE - 1;
printk(KERN_INFO "%s: set to minimum %lx\n",
__func__, mask);
pr_info("set to minimum %lx\n", mask);
}
q->limits.seg_boundary_mask = mask;

View File

@ -770,6 +770,8 @@ static void blk_release_queue(struct kobject *kobj)
blk_free_queue_stats(q->stats);
kfree(q->poll_stat);
blk_disable_sub_page_limits(&q->limits);
if (queue_is_mq(q))
blk_mq_release(q);

View File

@ -13,6 +13,7 @@ struct elevator_type;
#define BLK_MAX_TIMEOUT (5 * HZ)
extern struct dentry *blk_debugfs_root;
DECLARE_STATIC_KEY_FALSE(blk_sub_page_limits);
struct blk_flush_queue {
unsigned int flush_pending_idx:1;
@ -37,6 +38,15 @@ struct blk_flush_queue *blk_alloc_flush_queue(int node, int cmd_size,
gfp_t flags);
void blk_free_flush_queue(struct blk_flush_queue *q);
static inline bool blk_queue_sub_page_limits(const struct queue_limits *lim)
{
return static_branch_unlikely(&blk_sub_page_limits) &&
lim->sub_page_limits;
}
int blk_sub_page_limit_queues_get(void *data, u64 *val);
void blk_disable_sub_page_limits(struct queue_limits *q);
void blk_freeze_queue(struct request_queue *q);
void __blk_mq_unfreeze_queue(struct request_queue *q, bool force_atomic);
void blk_queue_start_drain(struct request_queue *q);
@ -81,6 +91,24 @@ struct bio_vec *bvec_alloc(mempool_t *pool, unsigned short *nr_vecs,
gfp_t gfp_mask);
void bvec_free(mempool_t *pool, struct bio_vec *bv, unsigned short nr_vecs);
/* Number of DMA segments required to transfer @bytes data. */
static inline unsigned int blk_segments(const struct queue_limits *limits,
unsigned int bytes)
{
if (!blk_queue_sub_page_limits(limits))
return 1;
{
const unsigned int mss = limits->max_segment_size;
if (bytes <= mss)
return 1;
if (is_power_of_2(mss))
return round_up(bytes, mss) >> ilog2(mss);
return (bytes + mss - 1) / mss;
}
}
static inline bool biovec_phys_mergeable(struct request_queue *q,
struct bio_vec *vec1, struct bio_vec *vec2)
{

View File

@ -10,11 +10,6 @@ MAKE_GOALS="
modules
"
if [ "${LTO}" = "none" ]; then
echo "The FIPS140 module needs LTO to be enabled."
exit 1
fi
MODULES_ORDER=android/gki_aarch64_fips140_modules
KERNEL_DIR=common

View File

@ -58,6 +58,7 @@ config CRYPTO_FIPS140_MOD
tristate "Enable FIPS 140 cryptographic module"
depends on ARM64 && ARM64_MODULE_PLTS
depends on m
select CRYPTO_FIPS140_MERGE_MOD_SECTIONS
help
This option enables building a loadable module fips140.ko, which
contains various crypto algorithms that are also built into vmlinux.
@ -79,6 +80,42 @@ config CRYPTO_FIPS140_MOD_EVAL_TESTING
errors and support for a userspace interface to some of the module's
services. This option should not be enabled in production builds.
config CRYPTO_FIPS140_MERGE_MOD_SECTIONS
bool
help
This option causes the module linker script to place the delimeters
of the text and rodata sections at the appropriate places so that
the FIPS 140 integrity check can be performed. This option is required
by the Crypto FIPS 140 module, and can be enabled by other FIPS 140
modules using the same logic to perform the self integrity check.
config CRYPTO_FIPS140_MOD_DEBUG_INTEGRITY_CHECK
bool "Debug the integrity check in FIPS 140 module"
depends on CRYPTO_FIPS140_MOD
help
This option makes the FIPS 140 module provide debugfs files containing
the text and rodata that were used for the integrity check, i.e. the
runtime text and rodata with relocations and code patches unapplied.
This option also makes the module load even if the integrity check
fails so that these files can be used to debug the failure. (A
possible failure mode is that the kernel has added a new type of code
patching and the module needs to be updated to disable or unapply it.)
This option must not be enabled in production builds.
Example commands for debugging an integrity check failure:
adb root
adb shell mount debugfs -t debugfs /sys/kernel/debug
adb shell cp /sys/kernel/debug/fips140/{text,rodata} /data/local/tmp/
adb pull /data/local/tmp/text text.checked
adb pull /data/local/tmp/rodata rodata.checked
llvm-objcopy -O binary --only-section=.text fips140.ko text.orig
llvm-objcopy -O binary --only-section=.rodata fips140.ko rodata.orig
for f in {text,rodata}.{orig,checked}; do xxd -g1 $f > $f.xxd; done
vimdiff text.{orig,checked}.xxd
vimdiff rodata.{orig,checked}.xxd
config CRYPTO_ALGAPI
tristate
select CRYPTO_ALGAPI2

View File

@ -23,6 +23,7 @@
#undef __DISABLE_EXPORTS
#include <linux/ctype.h>
#include <linux/debugfs.h>
#include <linux/module.h>
#include <crypto/aead.h>
#include <crypto/aes.h>
@ -357,6 +358,94 @@ static void __init unapply_rodata_relocations(void *section, int section_size,
}
}
enum {
PACIASP = 0xd503233f,
AUTIASP = 0xd50323bf,
SCS_PUSH = 0xf800865e,
SCS_POP = 0xf85f8e5e,
};
/*
* To make the integrity check work with dynamic Shadow Call Stack (SCS),
* replace all instructions that push or pop from the SCS with the Pointer
* Authentication Code (PAC) instructions that were present originally.
*/
static void __init unapply_scs_patch(void *section, int section_size)
{
#if defined(CONFIG_ARM64) && defined(CONFIG_UNWIND_PATCH_PAC_INTO_SCS)
u32 *insns = section;
int i;
for (i = 0; i < section_size / sizeof(insns[0]); i++) {
if (insns[i] == SCS_PUSH)
insns[i] = PACIASP;
else if (insns[i] == SCS_POP)
insns[i] = AUTIASP;
}
#endif
}
#ifdef CONFIG_CRYPTO_FIPS140_MOD_DEBUG_INTEGRITY_CHECK
static struct {
const void *text;
int textsize;
const void *rodata;
int rodatasize;
} saved_integrity_check_info;
static ssize_t fips140_text_read(struct file *file, char __user *to,
size_t count, loff_t *ppos)
{
return simple_read_from_buffer(to, count, ppos,
saved_integrity_check_info.text,
saved_integrity_check_info.textsize);
}
static ssize_t fips140_rodata_read(struct file *file, char __user *to,
size_t count, loff_t *ppos)
{
return simple_read_from_buffer(to, count, ppos,
saved_integrity_check_info.rodata,
saved_integrity_check_info.rodatasize);
}
static const struct file_operations fips140_text_fops = {
.read = fips140_text_read,
};
static const struct file_operations fips140_rodata_fops = {
.read = fips140_rodata_read,
};
static void fips140_init_integrity_debug_files(const void *text, int textsize,
const void *rodata,
int rodatasize)
{
struct dentry *dir;
dir = debugfs_create_dir("fips140", NULL);
saved_integrity_check_info.text = kmemdup(text, textsize, GFP_KERNEL);
saved_integrity_check_info.textsize = textsize;
if (saved_integrity_check_info.text)
debugfs_create_file("text", 0400, dir, NULL,
&fips140_text_fops);
saved_integrity_check_info.rodata = kmemdup(rodata, rodatasize,
GFP_KERNEL);
saved_integrity_check_info.rodatasize = rodatasize;
if (saved_integrity_check_info.rodata)
debugfs_create_file("rodata", 0400, dir, NULL,
&fips140_rodata_fops);
}
#else /* CONFIG_CRYPTO_FIPS140_MOD_DEBUG_INTEGRITY_CHECK */
static void fips140_init_integrity_debug_files(const void *text, int textsize,
const void *rodata,
int rodatasize)
{
}
#endif /* !CONFIG_CRYPTO_FIPS140_MOD_DEBUG_INTEGRITY_CHECK */
extern struct {
u32 offset;
u32 count;
@ -398,6 +487,11 @@ static bool __init check_fips140_module_hmac(void)
offset_to_ptr(&fips140_rela_rodata.offset),
fips140_rela_rodata.count);
unapply_scs_patch(textcopy, textsize);
fips140_init_integrity_debug_files(textcopy, textsize,
rodatacopy, rodatasize);
fips140_inject_integrity_failure(textcopy);
tfm = crypto_alloc_shash("hmac(sha256)", 0, 0);
@ -538,10 +632,14 @@ fips140_init(void)
*/
if (!check_fips140_module_hmac()) {
pr_crit("integrity check failed -- giving up!\n");
goto panic;
if (!IS_ENABLED(CONFIG_CRYPTO_FIPS140_MOD_DEBUG_INTEGRITY_CHECK)) {
pr_crit("integrity check failed -- giving up!\n");
goto panic;
}
pr_crit("ignoring integrity check failure due to debug mode\n");
} else {
pr_info("integrity check passed\n");
}
pr_info("integrity check passed\n");
complete_all(&fips140_tests_done);

View File

@ -544,14 +544,19 @@ static bool binder_has_work_ilocked(struct binder_thread *thread,
bool do_proc_work)
{
int ret = 0;
bool has_work = false;
trace_android_vh_binder_has_work_ilocked(thread, do_proc_work, &ret);
if (ret)
return true;
return thread->process_todo ||
has_work =
thread->process_todo ||
thread->looper_need_return ||
(do_proc_work &&
!binder_worklist_empty_ilocked(&thread->proc->todo));
trace_android_vh_binder_has_special_work_ilocked(thread, do_proc_work, &has_work);
return has_work;
}
static bool binder_has_work(struct binder_thread *thread, bool do_proc_work)
@ -560,7 +565,6 @@ static bool binder_has_work(struct binder_thread *thread, bool do_proc_work)
binder_inner_proc_lock(thread->proc);
has_work = binder_has_work_ilocked(thread, do_proc_work);
trace_android_vh_binder_has_special_work_ilocked(thread, do_proc_work, &has_work);
binder_inner_proc_unlock(thread->proc);
return has_work;
@ -1891,8 +1895,10 @@ static size_t binder_get_object(struct binder_proc *proc,
size_t object_size = 0;
read_size = min_t(size_t, sizeof(*object), buffer->data_size - offset);
if (offset > buffer->data_size || read_size < sizeof(*hdr))
if (offset > buffer->data_size || read_size < sizeof(*hdr) ||
!IS_ALIGNED(offset, sizeof(u32)))
return 0;
if (u) {
if (copy_from_user(object, u + offset, read_size))
return 0;
@ -3989,12 +3995,14 @@ binder_free_buf(struct binder_proc *proc,
struct binder_buffer *buffer, bool is_failure)
{
bool enqueue_task = true;
bool has_transaction = false;
trace_android_vh_binder_free_buf(proc, thread, buffer);
binder_inner_proc_lock(proc);
if (buffer->transaction) {
buffer->transaction->buffer = NULL;
buffer->transaction = NULL;
has_transaction = true;
}
binder_inner_proc_unlock(proc);
if (buffer->async_transaction && buffer->target_node) {
@ -4018,6 +4026,8 @@ binder_free_buf(struct binder_proc *proc,
}
binder_node_inner_unlock(buf_node);
}
trace_android_vh_binder_buffer_release(proc, thread, buffer,
has_transaction);
trace_binder_transaction_buffer_release(buffer);
binder_release_entire_buffer(proc, thread, buffer, is_failure);
binder_alloc_free_buf(&proc->alloc, buffer);

View File

@ -410,7 +410,8 @@ static struct binder_buffer *binder_alloc_new_buf_locked(
}
trace_android_vh_binder_alloc_new_buf_locked(size, &alloc->free_async_space, is_async);
trace_android_vh_binder_detect_low_async_space_locked(is_async, &alloc->free_async_space, pid, &should_fail);
trace_android_vh_binder_detect_low_async_space(is_async, &alloc->free_async_space, pid,
&should_fail);
if (should_fail) {
binder_alloc_debug(BINDER_DEBUG_BUFFER_ALLOC,
"%d: binder_alloc_buf size %zd failed, not allowed to alloc more async space\n",

View File

@ -70,6 +70,10 @@
#include <trace/hooks/regmap.h>
#include <trace/hooks/compaction.h>
#include <trace/hooks/suspend.h>
#include <trace/hooks/delayacct.h>
#include <trace/hooks/usb.h>
#include <trace/hooks/sound.h>
/*
* Export tracepoints that act as a bare tracehook (ie: have no trace event
* associated with them) to allow external modules to probe them.
@ -134,8 +138,10 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_ftrace_oops_exit);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_ftrace_size_check);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_ftrace_format_check);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_ftrace_dump_buffer);
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);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_ufs_complete_init);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_ufs_prepare_command);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_ufs_update_sysfs);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_ufs_send_command);
@ -243,6 +249,7 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_try_to_freeze_todo_unfrozen);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_die_kernel_fault);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_do_sea);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_do_sp_pc_abort);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_try_fixup_sea);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_do_undefinstr);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_do_el1_bti);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_do_el1_fpac);
@ -351,6 +358,7 @@ 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);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_binder_free_buf);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_binder_buffer_release);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_compaction_exit);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_compaction_try_to_compact_pages_exit);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_mm_alloc_pages_direct_reclaim_enter);
@ -376,4 +384,24 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_binder_ioctl_end);
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_binder_detect_low_async_space_locked);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_binder_detect_low_async_space);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_delayacct_init);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_delayacct_tsk_init);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_delayacct_tsk_free);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_delayacct_blkio_start);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_delayacct_blkio_end);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_delayacct_add_tsk);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_delayacct_blkio_ticks);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_delayacct_freepages_start);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_delayacct_freepages_end);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_delayacct_thrashing_start);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_delayacct_thrashing_end);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_delayacct_swapin_start);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_delayacct_swapin_end);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_delayacct_compact_start);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_delayacct_compact_end);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_delayacct_wpcopy_start);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_delayacct_wpcopy_end);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_usb_dev_suspend);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_usb_dev_resume);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_sound_usb_support_cpu_suspend);

View File

@ -93,6 +93,7 @@ static void update_pm_runtime_accounting(struct device *dev)
static void __update_runtime_status(struct device *dev, enum rpm_status status)
{
update_pm_runtime_accounting(dev);
trace_rpm_status(dev, status);
dev->power.runtime_status = status;
}

View File

@ -362,8 +362,10 @@ void dev_pm_enable_wake_irq_complete(struct device *dev)
return;
if (wirq->status & WAKE_IRQ_DEDICATED_MANAGED &&
wirq->status & WAKE_IRQ_DEDICATED_REVERSE)
wirq->status & WAKE_IRQ_DEDICATED_REVERSE) {
enable_irq(wirq->irq);
wirq->status |= WAKE_IRQ_DEDICATED_ENABLED;
}
}
/**

View File

@ -29,7 +29,6 @@ static LIST_HEAD(icc_providers);
static int providers_count;
static bool synced_state;
static DEFINE_MUTEX(icc_lock);
static DEFINE_MUTEX(icc_bw_lock);
static struct dentry *icc_debugfs_dir;
static void icc_summary_show_one(struct seq_file *s, struct icc_node *n)
@ -636,7 +635,7 @@ int icc_set_bw(struct icc_path *path, u32 avg_bw, u32 peak_bw)
if (WARN_ON(IS_ERR(path) || !path->num_nodes))
return -EINVAL;
mutex_lock(&icc_bw_lock);
mutex_lock(&icc_lock);
old_avg = path->reqs[0].avg_bw;
old_peak = path->reqs[0].peak_bw;
@ -668,7 +667,7 @@ int icc_set_bw(struct icc_path *path, u32 avg_bw, u32 peak_bw)
apply_constraints(path);
}
mutex_unlock(&icc_bw_lock);
mutex_unlock(&icc_lock);
trace_icc_set_bw_end(path, ret);
@ -971,7 +970,6 @@ void icc_node_add(struct icc_node *node, struct icc_provider *provider)
return;
mutex_lock(&icc_lock);
mutex_lock(&icc_bw_lock);
node->provider = provider;
list_add_tail(&node->node_list, &provider->nodes);
@ -997,7 +995,6 @@ void icc_node_add(struct icc_node *node, struct icc_provider *provider)
node->avg_bw = 0;
node->peak_bw = 0;
mutex_unlock(&icc_bw_lock);
mutex_unlock(&icc_lock);
}
EXPORT_SYMBOL_GPL(icc_node_add);
@ -1137,7 +1134,6 @@ void icc_sync_state(struct device *dev)
return;
mutex_lock(&icc_lock);
mutex_lock(&icc_bw_lock);
synced_state = true;
list_for_each_entry(p, &icc_providers, provider_list) {
dev_dbg(p->dev, "interconnect provider is in synced state\n");
@ -1150,21 +1146,13 @@ void icc_sync_state(struct device *dev)
}
}
}
mutex_unlock(&icc_bw_lock);
mutex_unlock(&icc_lock);
}
EXPORT_SYMBOL_GPL(icc_sync_state);
static int __init icc_init(void)
{
struct device_node *root;
/* Teach lockdep about lock ordering wrt. shrinker: */
fs_reclaim_acquire(GFP_KERNEL);
might_lock(&icc_bw_lock);
fs_reclaim_release(GFP_KERNEL);
root = of_find_node_by_path("/");
struct device_node *root = of_find_node_by_path("/");
providers_count = of_count_icc_providers(root);
of_node_put(root);

View File

@ -1776,6 +1776,9 @@ static void probe_alloc_default_domain(struct bus_type *bus,
{
struct __group_domain_type gtype;
if (group->default_domain)
return;
memset(&gtype, 0, sizeof(gtype));
/* Ask for default domain requirements of all devices in the group */

View File

@ -51,12 +51,9 @@ struct io_stats {
#define UID_STATE_FOREGROUND 0
#define UID_STATE_BACKGROUND 1
#define UID_STATE_BUCKET_SIZE 2
#define UID_STATE_TOTAL_CURR 2
#define UID_STATE_TOTAL_LAST 3
#define UID_STATE_DEAD_TASKS 4
#define UID_STATE_SIZE 5
#define UID_STATE_TOTAL_LAST 2
#define UID_STATE_DEAD_TASKS 3
#define UID_STATE_SIZE 4
#define MAX_TASK_COMM_LEN 256
@ -71,8 +68,6 @@ struct uid_entry {
uid_t uid;
u64 utime;
u64 stime;
u64 active_utime;
u64 active_stime;
int state;
struct io_stats io[UID_STATE_SIZE];
struct hlist_node hash;
@ -173,58 +168,47 @@ static struct uid_entry *find_or_register_uid(uid_t uid)
return uid_entry;
}
static void calc_uid_cputime(struct uid_entry *uid_entry,
u64 *total_utime, u64 *total_stime)
{
struct user_namespace *user_ns = current_user_ns();
struct task_struct *p, *t;
u64 utime, stime;
uid_t uid;
rcu_read_lock();
for_each_process(p) {
uid = from_kuid_munged(user_ns, task_uid(p));
if (uid != uid_entry->uid)
continue;
for_each_thread(p, t) {
/* avoid double accounting of dying threads */
if (!(t->flags & PF_EXITING)) {
task_cputime_adjusted(t, &utime, &stime);
*total_utime += utime;
*total_stime += stime;
}
}
}
rcu_read_unlock();
}
static int uid_cputime_show(struct seq_file *m, void *v)
{
struct uid_entry *uid_entry = NULL;
struct task_struct *task, *temp;
struct user_namespace *user_ns = current_user_ns();
u64 utime;
u64 stime;
u32 bkt;
uid_t uid;
for (bkt = 0, uid_entry = NULL; uid_entry == NULL &&
bkt < HASH_SIZE(hash_table); bkt++) {
lock_uid_by_bkt(bkt);
hlist_for_each_entry(uid_entry, &hash_table[bkt], hash) {
uid_entry->active_stime = 0;
uid_entry->active_utime = 0;
}
unlock_uid_by_bkt(bkt);
}
u64 total_utime = uid_entry->utime;
u64 total_stime = uid_entry->stime;
rcu_read_lock();
do_each_thread(temp, task) {
uid = from_kuid_munged(user_ns, task_uid(task));
lock_uid(uid);
if (!uid_entry || uid_entry->uid != uid)
uid_entry = find_or_register_uid(uid);
if (!uid_entry) {
rcu_read_unlock();
unlock_uid(uid);
pr_err("%s: failed to find the uid_entry for uid %d\n",
__func__, uid);
return -ENOMEM;
}
/* avoid double accounting of dying threads */
if (!(task->flags & PF_EXITING)) {
task_cputime_adjusted(task, &utime, &stime);
uid_entry->active_utime += utime;
uid_entry->active_stime += stime;
}
unlock_uid(uid);
} while_each_thread(temp, task);
rcu_read_unlock();
for (bkt = 0, uid_entry = NULL; uid_entry == NULL &&
bkt < HASH_SIZE(hash_table); bkt++) {
lock_uid_by_bkt(bkt);
hlist_for_each_entry(uid_entry, &hash_table[bkt], hash) {
u64 total_utime = uid_entry->utime +
uid_entry->active_utime;
u64 total_stime = uid_entry->stime +
uid_entry->active_stime;
calc_uid_cputime(uid_entry, &total_utime, &total_stime);
seq_printf(m, "%d: %llu %llu\n", uid_entry->uid,
ktime_to_us(total_utime), ktime_to_us(total_stime));
}
@ -323,86 +307,52 @@ static void add_uid_io_stats(struct uid_entry *uid_entry,
__add_uid_io_stats(uid_entry, &task->ioac, slot);
}
static void update_io_stats_all(void)
static void update_io_stats_uid(struct uid_entry *uid_entry)
{
struct uid_entry *uid_entry = NULL;
struct task_struct *task, *temp;
struct user_namespace *user_ns = current_user_ns();
struct task_struct *p, *t;
struct io_stats io;
memset(&io, 0, sizeof(struct io_stats));
rcu_read_lock();
for_each_process(p) {
uid_t uid = from_kuid_munged(user_ns, task_uid(p));
if (uid != uid_entry->uid)
continue;
for_each_thread(p, t) {
/* avoid double accounting of dying threads */
if (!(t->flags & PF_EXITING)) {
io.read_bytes += t->ioac.read_bytes;
io.write_bytes += compute_write_bytes(&t->ioac);
io.rchar += t->ioac.rchar;
io.wchar += t->ioac.wchar;
io.fsync += t->ioac.syscfs;
}
}
}
rcu_read_unlock();
compute_io_bucket_stats(&uid_entry->io[uid_entry->state], &io,
&uid_entry->io[UID_STATE_TOTAL_LAST],
&uid_entry->io[UID_STATE_DEAD_TASKS]);
}
static int uid_io_show(struct seq_file *m, void *v)
{
struct uid_entry *uid_entry = NULL;
u32 bkt;
uid_t uid;
for (bkt = 0, uid_entry = NULL; uid_entry == NULL && bkt < HASH_SIZE(hash_table);
bkt++) {
lock_uid_by_bkt(bkt);
hlist_for_each_entry(uid_entry, &hash_table[bkt], hash) {
memset(&uid_entry->io[UID_STATE_TOTAL_CURR], 0,
sizeof(struct io_stats));
}
unlock_uid_by_bkt(bkt);
}
rcu_read_lock();
do_each_thread(temp, task) {
uid = from_kuid_munged(user_ns, task_uid(task));
lock_uid(uid);
if (!uid_entry || uid_entry->uid != uid)
uid_entry = find_or_register_uid(uid);
if (!uid_entry) {
unlock_uid(uid);
continue;
}
add_uid_io_stats(uid_entry, task, UID_STATE_TOTAL_CURR);
unlock_uid(uid);
} while_each_thread(temp, task);
rcu_read_unlock();
update_io_stats_uid(uid_entry);
for (bkt = 0, uid_entry = NULL; uid_entry == NULL && bkt < HASH_SIZE(hash_table);
bkt++) {
lock_uid_by_bkt(bkt);
hlist_for_each_entry(uid_entry, &hash_table[bkt], hash) {
compute_io_bucket_stats(&uid_entry->io[uid_entry->state],
&uid_entry->io[UID_STATE_TOTAL_CURR],
&uid_entry->io[UID_STATE_TOTAL_LAST],
&uid_entry->io[UID_STATE_DEAD_TASKS]);
}
unlock_uid_by_bkt(bkt);
}
}
static void update_io_stats_uid(struct uid_entry *uid_entry)
{
struct task_struct *task, *temp;
struct user_namespace *user_ns = current_user_ns();
memset(&uid_entry->io[UID_STATE_TOTAL_CURR], 0,
sizeof(struct io_stats));
rcu_read_lock();
do_each_thread(temp, task) {
if (from_kuid_munged(user_ns, task_uid(task)) != uid_entry->uid)
continue;
add_uid_io_stats(uid_entry, task, UID_STATE_TOTAL_CURR);
} while_each_thread(temp, task);
rcu_read_unlock();
compute_io_bucket_stats(&uid_entry->io[uid_entry->state],
&uid_entry->io[UID_STATE_TOTAL_CURR],
&uid_entry->io[UID_STATE_TOTAL_LAST],
&uid_entry->io[UID_STATE_DEAD_TASKS]);
}
static int uid_io_show(struct seq_file *m, void *v)
{
struct uid_entry *uid_entry;
u32 bkt;
update_io_stats_all();
for (bkt = 0, uid_entry = NULL; uid_entry == NULL && bkt < HASH_SIZE(hash_table);
bkt++) {
lock_uid_by_bkt(bkt);
hlist_for_each_entry(uid_entry, &hash_table[bkt], hash) {
seq_printf(m, "%d %llu %llu %llu %llu %llu %llu %llu %llu %llu %llu\n",
uid_entry->uid,
uid_entry->io[UID_STATE_FOREGROUND].rchar,
@ -446,7 +396,6 @@ static ssize_t uid_procstat_write(struct file *file,
uid_t uid;
int argc, state;
char input[128];
struct uid_entry uid_entry_tmp;
if (count >= sizeof(input))
return -EINVAL;
@ -475,29 +424,8 @@ static ssize_t uid_procstat_write(struct file *file,
return count;
}
/*
* Update_io_stats_uid_locked would take a long lock-time of uid_lock
* due to call do_each_thread to compute uid_entry->io, which would
* cause to lock competition sometime.
*
* Using uid_entry_tmp to get the result of Update_io_stats_uid,
* so that we can unlock_uid during update_io_stats_uid, in order
* to avoid the unnecessary lock-time of uid_lock.
*/
uid_entry_tmp = *uid_entry;
unlock_uid(uid);
update_io_stats_uid(&uid_entry_tmp);
lock_uid(uid);
hlist_for_each_entry(uid_entry, &hash_table[hash_min(uid, HASH_BITS(hash_table))], hash) {
if (uid_entry->uid == uid_entry_tmp.uid) {
memcpy(uid_entry->io, uid_entry_tmp.io,
sizeof(struct io_stats) * UID_STATE_SIZE);
uid_entry->state = state;
break;
}
}
update_io_stats_uid(uid_entry);
uid_entry->state = state;
unlock_uid(uid);
return count;

View File

@ -328,7 +328,7 @@ static int dw_pcie_msi_host_init(struct dw_pcie_rp *pp)
struct dw_pcie *pci = to_dw_pcie_from_pp(pp);
struct device *dev = pci->dev;
struct platform_device *pdev = to_platform_device(dev);
u64 *msi_vaddr;
u64 *msi_vaddr = NULL;
int ret;
u32 ctrl, num_ctrls;
@ -368,16 +368,31 @@ static int dw_pcie_msi_host_init(struct dw_pcie_rp *pp)
dw_chained_msi_isr, pp);
}
ret = dma_set_mask_and_coherent(dev, DMA_BIT_MASK(32));
if (ret)
dev_warn(dev, "Failed to set DMA mask to 32-bit. Devices with only 32-bit MSI support may not work properly\n");
/*
* Even though the iMSI-RX Module supports 64-bit addresses some
* peripheral PCIe devices may lack 64-bit message support. In
* order not to miss MSI TLPs from those devices the MSI target
* address has to be within the lowest 4GB.
*
* Note until there is a better alternative found the reservation is
* done by allocating from the artificially limited DMA-coherent
* memory.
*/
ret = dma_set_coherent_mask(dev, DMA_BIT_MASK(32));
if (!ret)
msi_vaddr = dmam_alloc_coherent(dev, sizeof(u64), &pp->msi_data,
GFP_KERNEL);
msi_vaddr = dmam_alloc_coherent(dev, sizeof(u64), &pp->msi_data,
GFP_KERNEL);
if (!msi_vaddr) {
dev_err(dev, "Failed to alloc and map MSI data\n");
dw_pcie_free_msi(pp);
return -ENOMEM;
dev_warn(dev, "Failed to allocate 32-bit MSI address\n");
dma_set_coherent_mask(dev, DMA_BIT_MASK(64));
msi_vaddr = dmam_alloc_coherent(dev, sizeof(u64), &pp->msi_data,
GFP_KERNEL);
if (!msi_vaddr) {
dev_err(dev, "Failed to allocate MSI address\n");
dw_pcie_free_msi(pp);
return -ENOMEM;
}
}
return 0;
@ -483,10 +498,12 @@ int dw_pcie_host_init(struct dw_pcie_rp *pp)
ret = dw_pcie_start_link(pci);
if (ret)
goto err_free_msi;
}
/* Ignore errors, the link may come up later */
dw_pcie_wait_for_link(pci);
if (pci->ops && pci->ops->start_link) {
/* Ignore errors, the link may come up later */
dw_pcie_wait_for_link(pci);
}
}
bridge->sysdata = pp;

View File

@ -752,6 +752,7 @@ static int sdebug_host_max_queue; /* per host */
static int sdebug_lowest_aligned = DEF_LOWEST_ALIGNED;
static int sdebug_max_luns = DEF_MAX_LUNS;
static int sdebug_max_queue = SDEBUG_CANQUEUE; /* per submit queue */
static unsigned int sdebug_max_segment_size = BLK_MAX_SEGMENT_SIZE;
static unsigned int sdebug_medium_error_start = OPT_MEDIUM_ERR_ADDR;
static int sdebug_medium_error_count = OPT_MEDIUM_ERR_NUM;
static atomic_t retired_max_queue; /* if > 0 then was prior max_queue */
@ -5843,6 +5844,7 @@ module_param_named(lowest_aligned, sdebug_lowest_aligned, int, S_IRUGO);
module_param_named(lun_format, sdebug_lun_am_i, int, S_IRUGO | S_IWUSR);
module_param_named(max_luns, sdebug_max_luns, int, S_IRUGO | S_IWUSR);
module_param_named(max_queue, sdebug_max_queue, int, S_IRUGO | S_IWUSR);
module_param_named(max_segment_size, sdebug_max_segment_size, uint, S_IRUGO);
module_param_named(medium_error_count, sdebug_medium_error_count, int,
S_IRUGO | S_IWUSR);
module_param_named(medium_error_start, sdebug_medium_error_start, int,
@ -5919,6 +5921,7 @@ MODULE_PARM_DESC(lowest_aligned, "lowest aligned lba (def=0)");
MODULE_PARM_DESC(lun_format, "LUN format: 0->peripheral (def); 1 --> flat address method");
MODULE_PARM_DESC(max_luns, "number of LUNs per target to simulate(def=1)");
MODULE_PARM_DESC(max_queue, "max number of queued commands (1 to max(def))");
MODULE_PARM_DESC(max_segment_size, "max bytes in a single segment");
MODULE_PARM_DESC(medium_error_count, "count of sectors to return follow on MEDIUM error");
MODULE_PARM_DESC(medium_error_start, "starting sector number to return MEDIUM error");
MODULE_PARM_DESC(ndelay, "response delay in nanoseconds (def=0 -> ignore)");
@ -7818,6 +7821,7 @@ static int sdebug_driver_probe(struct device *dev)
sdebug_driver_template.can_queue = sdebug_max_queue;
sdebug_driver_template.cmd_per_lun = sdebug_max_queue;
sdebug_driver_template.max_segment_size = sdebug_max_segment_size;
if (!sdebug_clustering)
sdebug_driver_template.dma_boundary = PAGE_SIZE - 1;

View File

@ -1454,6 +1454,7 @@ static int thermal_pm_notify(struct notifier_block *nb,
unsigned long mode, void *_unused)
{
struct thermal_zone_device *tz;
int irq_wakeable = 0;
switch (mode) {
case PM_HIBERNATION_PREPARE:
@ -1466,6 +1467,11 @@ static int thermal_pm_notify(struct notifier_block *nb,
case PM_POST_SUSPEND:
atomic_set(&in_suspend, 0);
list_for_each_entry(tz, &thermal_tz_list, node) {
trace_android_vh_thermal_pm_notify_suspend(tz, &irq_wakeable);
if (irq_wakeable)
continue;
thermal_zone_device_init(tz);
thermal_zone_device_update(tz,
THERMAL_EVENT_UNSPECIFIED);

View File

@ -645,6 +645,7 @@ int ufshcd_mcq_abort(struct scsi_cmnd *cmd)
int tag = scsi_cmd_to_rq(cmd)->tag;
struct ufshcd_lrb *lrbp = &hba->lrb[tag];
struct ufs_hw_queue *hwq;
unsigned long flags;
int err = FAILED;
if (!ufshcd_cmd_inflight(lrbp->cmd)) {
@ -685,8 +686,10 @@ int ufshcd_mcq_abort(struct scsi_cmnd *cmd)
}
err = SUCCESS;
spin_lock_irqsave(&hwq->cq_lock, flags);
if (ufshcd_cmd_inflight(lrbp->cmd))
ufshcd_release_scsi_cmd(hba, lrbp);
spin_unlock_irqrestore(&hwq->cq_lock, flags);
out:
return err;

View File

@ -2248,7 +2248,8 @@ void ufshcd_send_command(struct ufs_hba *hba, unsigned int task_tag,
lrbp->compl_time_stamp_local_clock = 0;
trace_android_vh_ufs_send_command(hba, lrbp);
ufshcd_add_command_trace(hba, task_tag, UFS_CMD_SEND);
ufshcd_clk_scaling_start_busy(hba);
if (lrbp->cmd)
ufshcd_clk_scaling_start_busy(hba);
if (unlikely(ufshcd_should_inform_monitor(hba, lrbp)))
ufshcd_start_monitor(hba, lrbp);
@ -5544,7 +5545,6 @@ void ufshcd_compl_one_cqe(struct ufs_hba *hba, int task_tag,
}
ufshcd_add_command_trace(hba, task_tag, UFS_DEV_COMP);
complete(hba->dev_cmd.complete);
ufshcd_clk_scaling_update_busy(hba);
}
}
}
@ -8882,6 +8882,8 @@ static int ufshcd_probe_hba(struct ufs_hba *hba, bool init_dev_params)
ufshcd_auto_hibern8_enable(hba);
ufshpb_toggle_state(hba, HPB_RESET, HPB_PRESENT);
trace_android_rvh_ufs_complete_init(hba);
out:
spin_lock_irqsave(hba->host->host_lock, flags);
if (ret)

View File

@ -34,6 +34,7 @@
#include "usb.h"
#include <trace/hooks/usb.h>
/*
* Adds a new dynamic USBdevice ID to this driver,
@ -1400,11 +1401,16 @@ static int usb_suspend_both(struct usb_device *udev, pm_message_t msg)
int status = 0;
int i = 0, n = 0;
struct usb_interface *intf;
int bypass = 0;
if (udev->state == USB_STATE_NOTATTACHED ||
udev->state == USB_STATE_SUSPENDED)
goto done;
trace_android_rvh_usb_dev_suspend(udev, msg, &bypass);
if (bypass)
goto done;
/* Suspend all the interfaces and then udev itself */
if (udev->actconfig) {
n = udev->actconfig->desc.bNumInterfaces;
@ -1501,11 +1507,17 @@ static int usb_resume_both(struct usb_device *udev, pm_message_t msg)
int status = 0;
int i;
struct usb_interface *intf;
int bypass = 0;
if (udev->state == USB_STATE_NOTATTACHED) {
status = -ENODEV;
goto done;
}
trace_android_vh_usb_dev_resume(udev, msg, &bypass);
if (bypass)
goto done;
udev->can_submit = 1;
/* Resume the device */

View File

@ -113,6 +113,11 @@ static void dwc2_set_rk_params(struct dwc2_hsotg *hsotg)
p->ahbcfg = GAHBCFG_HBSTLEN_INCR16 <<
GAHBCFG_HBSTLEN_SHIFT;
p->power_down = DWC2_POWER_DOWN_PARAM_NONE;
p->lpm = false;
p->lpm_clock_gating = false;
p->besl = false;
p->hird_threshold_en = false;
p->no_clock_gating = true;
}
static void dwc2_set_ltq_params(struct dwc2_hsotg *hsotg)

View File

@ -1074,111 +1074,6 @@ static void dwc3_set_power_down_clk_scale(struct dwc3 *dwc)
}
}
static void dwc3_config_threshold(struct dwc3 *dwc)
{
u32 reg;
u8 rx_thr_num;
u8 rx_maxburst;
u8 tx_thr_num;
u8 tx_maxburst;
/*
* Must config both number of packets and max burst settings to enable
* RX and/or TX threshold.
*/
if (!DWC3_IP_IS(DWC3) && dwc->dr_mode == USB_DR_MODE_HOST) {
rx_thr_num = dwc->rx_thr_num_pkt_prd;
rx_maxburst = dwc->rx_max_burst_prd;
tx_thr_num = dwc->tx_thr_num_pkt_prd;
tx_maxburst = dwc->tx_max_burst_prd;
if (rx_thr_num && rx_maxburst) {
reg = dwc3_readl(dwc->regs, DWC3_GRXTHRCFG);
reg |= DWC31_RXTHRNUMPKTSEL_PRD;
reg &= ~DWC31_RXTHRNUMPKT_PRD(~0);
reg |= DWC31_RXTHRNUMPKT_PRD(rx_thr_num);
reg &= ~DWC31_MAXRXBURSTSIZE_PRD(~0);
reg |= DWC31_MAXRXBURSTSIZE_PRD(rx_maxburst);
dwc3_writel(dwc->regs, DWC3_GRXTHRCFG, reg);
}
if (tx_thr_num && tx_maxburst) {
reg = dwc3_readl(dwc->regs, DWC3_GTXTHRCFG);
reg |= DWC31_TXTHRNUMPKTSEL_PRD;
reg &= ~DWC31_TXTHRNUMPKT_PRD(~0);
reg |= DWC31_TXTHRNUMPKT_PRD(tx_thr_num);
reg &= ~DWC31_MAXTXBURSTSIZE_PRD(~0);
reg |= DWC31_MAXTXBURSTSIZE_PRD(tx_maxburst);
dwc3_writel(dwc->regs, DWC3_GTXTHRCFG, reg);
}
}
rx_thr_num = dwc->rx_thr_num_pkt;
rx_maxburst = dwc->rx_max_burst;
tx_thr_num = dwc->tx_thr_num_pkt;
tx_maxburst = dwc->tx_max_burst;
if (DWC3_IP_IS(DWC3)) {
if (rx_thr_num && rx_maxburst) {
reg = dwc3_readl(dwc->regs, DWC3_GRXTHRCFG);
reg |= DWC3_GRXTHRCFG_PKTCNTSEL;
reg &= ~DWC3_GRXTHRCFG_RXPKTCNT(~0);
reg |= DWC3_GRXTHRCFG_RXPKTCNT(rx_thr_num);
reg &= ~DWC3_GRXTHRCFG_MAXRXBURSTSIZE(~0);
reg |= DWC3_GRXTHRCFG_MAXRXBURSTSIZE(rx_maxburst);
dwc3_writel(dwc->regs, DWC3_GRXTHRCFG, reg);
}
if (tx_thr_num && tx_maxburst) {
reg = dwc3_readl(dwc->regs, DWC3_GTXTHRCFG);
reg |= DWC3_GTXTHRCFG_PKTCNTSEL;
reg &= ~DWC3_GTXTHRCFG_TXPKTCNT(~0);
reg |= DWC3_GTXTHRCFG_TXPKTCNT(tx_thr_num);
reg &= ~DWC3_GTXTHRCFG_MAXTXBURSTSIZE(~0);
reg |= DWC3_GTXTHRCFG_MAXTXBURSTSIZE(tx_maxburst);
dwc3_writel(dwc->regs, DWC3_GTXTHRCFG, reg);
}
} else {
if (rx_thr_num && rx_maxburst) {
reg = dwc3_readl(dwc->regs, DWC3_GRXTHRCFG);
reg |= DWC31_GRXTHRCFG_PKTCNTSEL;
reg &= ~DWC31_GRXTHRCFG_RXPKTCNT(~0);
reg |= DWC31_GRXTHRCFG_RXPKTCNT(rx_thr_num);
reg &= ~DWC31_GRXTHRCFG_MAXRXBURSTSIZE(~0);
reg |= DWC31_GRXTHRCFG_MAXRXBURSTSIZE(rx_maxburst);
dwc3_writel(dwc->regs, DWC3_GRXTHRCFG, reg);
}
if (tx_thr_num && tx_maxburst) {
reg = dwc3_readl(dwc->regs, DWC3_GTXTHRCFG);
reg |= DWC31_GTXTHRCFG_PKTCNTSEL;
reg &= ~DWC31_GTXTHRCFG_TXPKTCNT(~0);
reg |= DWC31_GTXTHRCFG_TXPKTCNT(tx_thr_num);
reg &= ~DWC31_GTXTHRCFG_MAXTXBURSTSIZE(~0);
reg |= DWC31_GTXTHRCFG_MAXTXBURSTSIZE(tx_maxburst);
dwc3_writel(dwc->regs, DWC3_GTXTHRCFG, reg);
}
}
}
/**
* dwc3_core_init - Low-level initialization of DWC3 Core
* @dwc: Pointer to our controller context structure
@ -1349,7 +1244,54 @@ static int dwc3_core_init(struct dwc3 *dwc)
dwc3_writel(dwc->regs, DWC3_GUCTL1, reg);
}
dwc3_config_threshold(dwc);
/*
* Must config both number of packets and max burst settings to enable
* RX and/or TX threshold.
*/
if (!DWC3_IP_IS(DWC3) && dwc->dr_mode == USB_DR_MODE_HOST) {
u8 rx_thr_num = dwc->rx_thr_num_pkt_prd;
u8 rx_maxburst = dwc->rx_max_burst_prd;
u8 tx_thr_num = dwc->tx_thr_num_pkt_prd;
u8 tx_maxburst = dwc->tx_max_burst_prd;
if (rx_thr_num && rx_maxburst) {
reg = dwc3_readl(dwc->regs, DWC3_GRXTHRCFG);
reg |= DWC31_RXTHRNUMPKTSEL_PRD;
reg &= ~DWC31_RXTHRNUMPKT_PRD(~0);
reg |= DWC31_RXTHRNUMPKT_PRD(rx_thr_num);
reg &= ~DWC31_MAXRXBURSTSIZE_PRD(~0);
reg |= DWC31_MAXRXBURSTSIZE_PRD(rx_maxburst);
dwc3_writel(dwc->regs, DWC3_GRXTHRCFG, reg);
}
if (tx_thr_num && tx_maxburst) {
reg = dwc3_readl(dwc->regs, DWC3_GTXTHRCFG);
reg |= DWC31_TXTHRNUMPKTSEL_PRD;
reg &= ~DWC31_TXTHRNUMPKT_PRD(~0);
reg |= DWC31_TXTHRNUMPKT_PRD(tx_thr_num);
reg &= ~DWC31_MAXTXBURSTSIZE_PRD(~0);
reg |= DWC31_MAXTXBURSTSIZE_PRD(tx_maxburst);
dwc3_writel(dwc->regs, DWC3_GTXTHRCFG, reg);
}
}
/*
* Modify this for all supported Super Speed ports when
* multiport support is added.
*/
if (hw_mode != DWC3_GHWPARAMS0_MODE_GADGET &&
(DWC3_IP_IS(DWC31)) &&
dwc->maximum_speed == USB_SPEED_SUPER) {
reg = dwc3_readl(dwc->regs, DWC3_LLUCTL);
reg |= DWC3_LLUCTL_FORCE_GEN1;
dwc3_writel(dwc->regs, DWC3_LLUCTL, reg);
}
return 0;
@ -1498,10 +1440,6 @@ static void dwc3_get_properties(struct dwc3 *dwc)
u8 lpm_nyet_threshold;
u8 tx_de_emphasis;
u8 hird_threshold;
u8 rx_thr_num_pkt = 0;
u8 rx_max_burst = 0;
u8 tx_thr_num_pkt = 0;
u8 tx_max_burst = 0;
u8 rx_thr_num_pkt_prd = 0;
u8 rx_max_burst_prd = 0;
u8 tx_thr_num_pkt_prd = 0;
@ -1564,14 +1502,6 @@ static void dwc3_get_properties(struct dwc3 *dwc)
"snps,usb2-lpm-disable");
dwc->usb2_gadget_lpm_disable = device_property_read_bool(dev,
"snps,usb2-gadget-lpm-disable");
device_property_read_u8(dev, "snps,rx-thr-num-pkt",
&rx_thr_num_pkt);
device_property_read_u8(dev, "snps,rx-max-burst",
&rx_max_burst);
device_property_read_u8(dev, "snps,tx-thr-num-pkt",
&tx_thr_num_pkt);
device_property_read_u8(dev, "snps,tx-max-burst",
&tx_max_burst);
device_property_read_u8(dev, "snps,rx-thr-num-pkt-prd",
&rx_thr_num_pkt_prd);
device_property_read_u8(dev, "snps,rx-max-burst-prd",
@ -1651,12 +1581,6 @@ static void dwc3_get_properties(struct dwc3 *dwc)
dwc->hird_threshold = hird_threshold;
dwc->rx_thr_num_pkt = rx_thr_num_pkt;
dwc->rx_max_burst = rx_max_burst;
dwc->tx_thr_num_pkt = tx_thr_num_pkt;
dwc->tx_max_burst = tx_max_burst;
dwc->rx_thr_num_pkt_prd = rx_thr_num_pkt_prd;
dwc->rx_max_burst_prd = rx_max_burst_prd;

View File

@ -173,6 +173,8 @@
#define DWC3_OEVTEN 0xcc0C
#define DWC3_OSTS 0xcc10
#define DWC3_LLUCTL 0xd024
/* Bit fields */
/* Global SoC Bus Configuration INCRx Register 0 */
@ -212,11 +214,6 @@
#define DWC3_GRXTHRCFG_RXPKTCNT(n) (((n) & 0xf) << 24)
#define DWC3_GRXTHRCFG_PKTCNTSEL BIT(29)
/* Global TX Threshold Configuration Register */
#define DWC3_GTXTHRCFG_MAXTXBURSTSIZE(n) (((n) & 0xff) << 16)
#define DWC3_GTXTHRCFG_TXPKTCNT(n) (((n) & 0xf) << 24)
#define DWC3_GTXTHRCFG_PKTCNTSEL BIT(29)
/* Global RX Threshold Configuration Register for DWC_usb31 only */
#define DWC31_GRXTHRCFG_MAXRXBURSTSIZE(n) (((n) & 0x1f) << 16)
#define DWC31_GRXTHRCFG_RXPKTCNT(n) (((n) & 0x1f) << 21)
@ -654,6 +651,9 @@
#define DWC3_OSTS_VBUSVLD BIT(1)
#define DWC3_OSTS_CONIDSTS BIT(0)
/* Force Gen1 speed on Gen2 link */
#define DWC3_LLUCTL_FORCE_GEN1 BIT(10)
/* Structures */
struct dwc3_trb;
@ -1061,10 +1061,6 @@ struct dwc3_scratchpad_array {
* @test_mode_nr: test feature selector
* @lpm_nyet_threshold: LPM NYET response threshold
* @hird_threshold: HIRD threshold
* @rx_thr_num_pkt: USB receive packet count
* @rx_max_burst: max USB receive burst size
* @tx_thr_num_pkt: USB transmit packet count
* @tx_max_burst: max USB transmit burst size
* @rx_thr_num_pkt_prd: periodic ESS receive packet count
* @rx_max_burst_prd: max periodic ESS receive burst size
* @tx_thr_num_pkt_prd: periodic ESS transmit packet count
@ -1294,10 +1290,6 @@ struct dwc3 {
u8 test_mode_nr;
u8 lpm_nyet_threshold;
u8 hird_threshold;
u8 rx_thr_num_pkt;
u8 rx_max_burst;
u8 tx_thr_num_pkt;
u8 tx_max_burst;
u8 rx_thr_num_pkt_prd;
u8 rx_max_burst_prd;
u8 tx_thr_num_pkt_prd;

View File

@ -2548,6 +2548,11 @@ static int dwc3_gadget_soft_disconnect(struct dwc3 *dwc)
int ret;
spin_lock_irqsave(&dwc->lock, flags);
if (!dwc->pullups_connected) {
spin_unlock_irqrestore(&dwc->lock, flags);
return 0;
}
dwc->connected = false;
/*

View File

@ -66,7 +66,7 @@ static int dwc3_host_get_irq(struct dwc3 *dwc)
int dwc3_host_init(struct dwc3 *dwc)
{
struct property_entry props[4];
struct property_entry props[5];
struct platform_device *xhci;
int ret, irq;
int prop_idx = 0;
@ -94,6 +94,8 @@ int dwc3_host_init(struct dwc3 *dwc)
memset(props, 0, sizeof(struct property_entry) * ARRAY_SIZE(props));
props[prop_idx++] = PROPERTY_ENTRY_BOOL("xhci-sg-trb-cache-size-quirk");
if (dwc->usb3_lpm_capable)
props[prop_idx++] = PROPERTY_ENTRY_BOOL("usb3-lpm-capable");

View File

@ -336,6 +336,9 @@ static int xhci_plat_probe(struct platform_device *pdev)
if (device_property_read_bool(tmpdev, "quirk-broken-port-ped"))
xhci->quirks |= XHCI_BROKEN_PORT_PED;
if (device_property_read_bool(tmpdev, "xhci-sg-trb-cache-size-quirk"))
xhci->quirks |= XHCI_SG_TRB_CACHE_SIZE_QUIRK;
device_property_read_u32(tmpdev, "imod-interval-ns",
&xhci->imod_interval);
}

View File

@ -1344,6 +1344,8 @@ static int xhci_map_temp_buffer(struct usb_hcd *hcd, struct urb *urb)
temp = kzalloc_node(buf_len, GFP_ATOMIC,
dev_to_node(hcd->self.sysdev));
if (!temp)
return -ENOMEM;
if (usb_urb_dir_out(urb))
sg_pcopy_to_buffer(urb->sg, urb->num_sgs,

View File

@ -552,16 +552,21 @@ static ssize_t hpd_show(struct device *dev, struct device_attribute *attr, char
}
static DEVICE_ATTR_RO(hpd);
static struct attribute *dp_altmode_attrs[] = {
static struct attribute *displayport_attrs[] = {
&dev_attr_configuration.attr,
&dev_attr_pin_assignment.attr,
&dev_attr_hpd.attr,
NULL
};
static const struct attribute_group dp_altmode_group = {
static const struct attribute_group displayport_group = {
.name = "displayport",
.attrs = dp_altmode_attrs,
.attrs = displayport_attrs,
};
static const struct attribute_group *displayport_groups[] = {
&displayport_group,
NULL,
};
int dp_altmode_probe(struct typec_altmode *alt)
@ -569,7 +574,6 @@ int dp_altmode_probe(struct typec_altmode *alt)
const struct typec_altmode *port = typec_altmode_get_partner(alt);
struct fwnode_handle *fwnode;
struct dp_altmode *dp;
int ret;
/* FIXME: Port can only be DFP_U. */
@ -580,10 +584,6 @@ int dp_altmode_probe(struct typec_altmode *alt)
DP_CAP_PIN_ASSIGN_DFP_D(alt->vdo)))
return -ENODEV;
ret = sysfs_create_group(&alt->dev.kobj, &dp_altmode_group);
if (ret)
return ret;
dp = devm_kzalloc(&alt->dev, sizeof(*dp), GFP_KERNEL);
if (!dp)
return -ENOMEM;
@ -614,7 +614,6 @@ void dp_altmode_remove(struct typec_altmode *alt)
{
struct dp_altmode *dp = typec_altmode_get_drvdata(alt);
sysfs_remove_group(&alt->dev.kobj, &dp_altmode_group);
cancel_work_sync(&dp->work);
if (dp->connector_fwnode) {
@ -639,6 +638,7 @@ static struct typec_altmode_driver dp_altmode_driver = {
.driver = {
.name = "typec_displayport",
.owner = THIS_MODULE,
.dev_groups = displayport_groups,
},
};
module_typec_altmode_driver(dp_altmode_driver);

View File

@ -1245,6 +1245,7 @@ static ssize_t select_usb_power_delivery_store(struct device *dev,
{
struct typec_port *port = to_typec_port(dev);
struct usb_power_delivery *pd;
int ret;
if (!port->ops || !port->ops->pd_set)
return -EOPNOTSUPP;
@ -1253,7 +1254,11 @@ static ssize_t select_usb_power_delivery_store(struct device *dev,
if (!pd)
return -EINVAL;
return port->ops->pd_set(port, pd);
ret = port->ops->pd_set(port, pd);
if (ret)
return ret;
return size;
}
static ssize_t select_usb_power_delivery_show(struct device *dev,

View File

@ -6173,7 +6173,7 @@ static int tcpm_pd_set(struct typec_port *p, struct usb_power_delivery *pd)
if (data->source_desc.pdo[0]) {
for (i = 0; i < PDO_MAX_OBJECTS && data->source_desc.pdo[i]; i++)
port->snk_pdo[i] = data->source_desc.pdo[i];
port->src_pdo[i] = data->source_desc.pdo[i];
port->nr_src_pdo = i + 1;
}
@ -6222,7 +6222,9 @@ static int tcpm_pd_set(struct typec_port *p, struct usb_power_delivery *pd)
port->port_source_caps = data->source_cap;
port->port_sink_caps = data->sink_cap;
typec_port_set_usb_power_delivery(p, NULL);
port->selected_pd = pd;
typec_port_set_usb_power_delivery(p, port->selected_pd);
unlock:
mutex_unlock(&port->lock);
return ret;
@ -6255,9 +6257,7 @@ static void tcpm_port_unregister_pd(struct tcpm_port *port)
port->port_source_caps = NULL;
for (i = 0; i < port->pd_count; i++) {
usb_power_delivery_unregister_capabilities(port->pd_list[i]->sink_cap);
kfree(port->pd_list[i]->sink_cap);
usb_power_delivery_unregister_capabilities(port->pd_list[i]->source_cap);
kfree(port->pd_list[i]->source_cap);
devm_kfree(port->dev, port->pd_list[i]);
port->pd_list[i] = NULL;
usb_power_delivery_unregister(port->pds[i]);

View File

@ -567,7 +567,6 @@ static int gh_rm_send_request(struct gh_rm *rm, u32 message_id,
hdr_template.seq = cpu_to_le16(connection->reply.seq);
hdr_template.msg_id = cpu_to_le32(message_id);
mutex_lock(&rm->send_lock);
do {
msg = kmem_cache_zalloc(rm->cache, GFP_KERNEL);
if (!msg) {
@ -606,7 +605,6 @@ static int gh_rm_send_request(struct gh_rm *rm, u32 message_id,
} while (buf_size_remaining);
out:
mutex_unlock(&rm->send_lock);
return ret < 0 ? ret : 0;
}
@ -660,6 +658,7 @@ int gh_rm_call(void *_rm, u32 message_id, const void *req_buf, size_t req_buf_si
connection->reply.seq = lower_16_bits(seq_id);
/* Send the request to the Resource Manager */
mutex_lock(&rm->send_lock);
ret = gh_rm_send_request(rm, message_id, req_buf, req_buf_size, connection);
if (ret < 0)
goto out;
@ -699,6 +698,7 @@ int gh_rm_call(void *_rm, u32 message_id, const void *req_buf, size_t req_buf_si
}
out:
mutex_unlock(&rm->send_lock);
xa_erase(&rm->call_xarray, connection->reply.seq);
free:
kfree(connection);

View File

@ -59,13 +59,7 @@
* we need a lock that will allow us to sleep. This lock is a
* mutex (ep->mtx). It is acquired during the event transfer loop,
* during epoll_ctl(EPOLL_CTL_DEL) and during eventpoll_release_file().
* Then we also need a global mutex to serialize eventpoll_release_file()
* and ep_free().
* This mutex is acquired by ep_free() during the epoll file
* cleanup path and it is also acquired by eventpoll_release_file()
* if a file has been pushed inside an epoll set and it is then
* close()d without a previous call to epoll_ctl(EPOLL_CTL_DEL).
* It is also acquired when inserting an epoll fd onto another epoll
* The epmutex is acquired when inserting an epoll fd onto another epoll
* fd. We do this so that we walk the epoll tree and ensure that this
* insertion does not create a cycle of epoll file descriptors, which
* could lead to deadlock. We need a global mutex to prevent two
@ -155,6 +149,13 @@ struct epitem {
/* The file descriptor information this item refers to */
struct epoll_filefd ffd;
/*
* Protected by file->f_lock, true for to-be-released epitem already
* removed from the "struct file" items list; together with
* eventpoll->refcount orchestrates "struct eventpoll" disposal
*/
bool dying;
/* List containing poll wait queues */
struct eppoll_entry *pwqlist;
@ -219,6 +220,12 @@ struct eventpoll {
u64 gen;
struct hlist_head refs;
/*
* usage count, used together with epitem->dying to
* orchestrate the disposal of this struct
*/
refcount_t refcount;
#ifdef CONFIG_NET_RX_BUSY_POLL
/* used to track busy poll napi_id */
unsigned int napi_id;
@ -242,9 +249,7 @@ struct ep_pqueue {
/* Maximum number of epoll watched descriptors, per user */
static long max_user_watches __read_mostly;
/*
* This mutex is used to serialize ep_free() and eventpoll_release_file().
*/
/* Used for cycles detection */
static DEFINE_MUTEX(epmutex);
static u64 loop_check_gen = 0;
@ -559,8 +564,7 @@ static void ep_remove_wait_queue(struct eppoll_entry *pwq)
/*
* This function unregisters poll callbacks from the associated file
* descriptor. Must be called with "mtx" held (or "epmutex" if called from
* ep_free).
* descriptor. Must be called with "mtx" held.
*/
static void ep_unregister_pollwait(struct eventpoll *ep, struct epitem *epi)
{
@ -683,11 +687,40 @@ static void epi_rcu_free(struct rcu_head *head)
kmem_cache_free(epi_cache, epi);
}
static void ep_get(struct eventpoll *ep)
{
refcount_inc(&ep->refcount);
}
/*
* Returns true if the event poll can be disposed
*/
static bool ep_refcount_dec_and_test(struct eventpoll *ep)
{
if (!refcount_dec_and_test(&ep->refcount))
return false;
WARN_ON_ONCE(!RB_EMPTY_ROOT(&ep->rbr.rb_root));
return true;
}
static void ep_free(struct eventpoll *ep)
{
mutex_destroy(&ep->mtx);
free_uid(ep->user);
wakeup_source_unregister(ep->ws);
kfree(ep);
}
/*
* Removes a "struct epitem" from the eventpoll RB tree and deallocates
* all the associated resources. Must be called with "mtx" held.
* If the dying flag is set, do the removal only if force is true.
* This prevents ep_clear_and_put() from dropping all the ep references
* while running concurrently with eventpoll_release_file().
* Returns true if the eventpoll can be disposed.
*/
static int ep_remove(struct eventpoll *ep, struct epitem *epi)
static bool __ep_remove(struct eventpoll *ep, struct epitem *epi, bool force)
{
struct file *file = epi->ffd.file;
struct epitems_head *to_free;
@ -702,6 +735,11 @@ static int ep_remove(struct eventpoll *ep, struct epitem *epi)
/* Remove the current item from the list of epoll hooks */
spin_lock(&file->f_lock);
if (epi->dying && !force) {
spin_unlock(&file->f_lock);
return false;
}
to_free = NULL;
head = file->f_ep;
if (head->first == &epi->fllink && !epi->fllink.next) {
@ -735,28 +773,28 @@ static int ep_remove(struct eventpoll *ep, struct epitem *epi)
call_rcu(&epi->rcu, epi_rcu_free);
percpu_counter_dec(&ep->user->epoll_watches);
return 0;
return ep_refcount_dec_and_test(ep);
}
static void ep_free(struct eventpoll *ep)
/*
* ep_remove variant for callers owing an additional reference to the ep
*/
static void ep_remove_safe(struct eventpoll *ep, struct epitem *epi)
{
struct rb_node *rbp;
WARN_ON_ONCE(__ep_remove(ep, epi, false));
}
static void ep_clear_and_put(struct eventpoll *ep)
{
struct rb_node *rbp, *next;
struct epitem *epi;
bool dispose;
/* We need to release all tasks waiting for these file */
if (waitqueue_active(&ep->poll_wait))
ep_poll_safewake(ep, NULL, 0);
/*
* We need to lock this because we could be hit by
* eventpoll_release_file() while we're freeing the "struct eventpoll".
* We do not need to hold "ep->mtx" here because the epoll file
* is on the way to be removed and no one has references to it
* anymore. The only hit might come from eventpoll_release_file() but
* holding "epmutex" is sufficient here.
*/
mutex_lock(&epmutex);
mutex_lock(&ep->mtx);
/*
* Walks through the whole tree by unregistering poll callbacks.
@ -769,26 +807,25 @@ static void ep_free(struct eventpoll *ep)
}
/*
* Walks through the whole tree by freeing each "struct epitem". At this
* point we are sure no poll callbacks will be lingering around, and also by
* holding "epmutex" we can be sure that no file cleanup code will hit
* us during this operation. So we can avoid the lock on "ep->lock".
* We do not need to lock ep->mtx, either, we only do it to prevent
* a lockdep warning.
* Walks through the whole tree and try to free each "struct epitem".
* Note that ep_remove_safe() will not remove the epitem in case of a
* racing eventpoll_release_file(); the latter will do the removal.
* At this point we are sure no poll callbacks will be lingering around.
* Since we still own a reference to the eventpoll struct, the loop can't
* dispose it.
*/
mutex_lock(&ep->mtx);
while ((rbp = rb_first_cached(&ep->rbr)) != NULL) {
for (rbp = rb_first_cached(&ep->rbr); rbp; rbp = next) {
next = rb_next(rbp);
epi = rb_entry(rbp, struct epitem, rbn);
ep_remove(ep, epi);
ep_remove_safe(ep, epi);
cond_resched();
}
dispose = ep_refcount_dec_and_test(ep);
mutex_unlock(&ep->mtx);
mutex_unlock(&epmutex);
mutex_destroy(&ep->mtx);
free_uid(ep->user);
wakeup_source_unregister(ep->ws);
kfree(ep);
if (dispose)
ep_free(ep);
}
static int ep_eventpoll_release(struct inode *inode, struct file *file)
@ -796,7 +833,7 @@ static int ep_eventpoll_release(struct inode *inode, struct file *file)
struct eventpoll *ep = file->private_data;
if (ep)
ep_free(ep);
ep_clear_and_put(ep);
return 0;
}
@ -908,33 +945,34 @@ void eventpoll_release_file(struct file *file)
{
struct eventpoll *ep;
struct epitem *epi;
struct hlist_node *next;
bool dispose;
/*
* We don't want to get "file->f_lock" because it is not
* necessary. It is not necessary because we're in the "struct file"
* cleanup path, and this means that no one is using this file anymore.
* So, for example, epoll_ctl() cannot hit here since if we reach this
* point, the file counter already went to zero and fget() would fail.
* The only hit might come from ep_free() but by holding the mutex
* will correctly serialize the operation. We do need to acquire
* "ep->mtx" after "epmutex" because ep_remove() requires it when called
* from anywhere but ep_free().
*
* Besides, ep_remove() acquires the lock, so we can't hold it here.
* Use the 'dying' flag to prevent a concurrent ep_clear_and_put() from
* touching the epitems list before eventpoll_release_file() can access
* the ep->mtx.
*/
mutex_lock(&epmutex);
if (unlikely(!file->f_ep)) {
mutex_unlock(&epmutex);
return;
}
hlist_for_each_entry_safe(epi, next, file->f_ep, fllink) {
again:
spin_lock(&file->f_lock);
if (file->f_ep && file->f_ep->first) {
epi = hlist_entry(file->f_ep->first, struct epitem, fllink);
epi->dying = true;
spin_unlock(&file->f_lock);
/*
* ep access is safe as we still own a reference to the ep
* struct
*/
ep = epi->ep;
mutex_lock_nested(&ep->mtx, 0);
ep_remove(ep, epi);
mutex_lock(&ep->mtx);
dispose = __ep_remove(ep, epi, true);
mutex_unlock(&ep->mtx);
if (dispose)
ep_free(ep);
goto again;
}
mutex_unlock(&epmutex);
spin_unlock(&file->f_lock);
}
static int ep_alloc(struct eventpoll **pep)
@ -957,6 +995,7 @@ static int ep_alloc(struct eventpoll **pep)
ep->rbr = RB_ROOT_CACHED;
ep->ovflist = EP_UNACTIVE_PTR;
ep->user = user;
refcount_set(&ep->refcount, 1);
*pep = ep;
@ -1225,10 +1264,10 @@ static int ep_poll_callback(wait_queue_entry_t *wait, unsigned mode, int sync, v
*/
list_del_init(&wait->entry);
/*
* ->whead != NULL protects us from the race with ep_free()
* or ep_remove(), ep_remove_wait_queue() takes whead->lock
* held by the caller. Once we nullify it, nothing protects
* ep/epi or even wait.
* ->whead != NULL protects us from the race with
* ep_clear_and_put() or ep_remove(), ep_remove_wait_queue()
* takes whead->lock held by the caller. Once we nullify it,
* nothing protects ep/epi or even wait.
*/
smp_store_release(&ep_pwq_from_wait(wait)->whead, NULL);
}
@ -1503,16 +1542,22 @@ static int ep_insert(struct eventpoll *ep, const struct epoll_event *event,
if (tep)
mutex_unlock(&tep->mtx);
/*
* ep_remove_safe() calls in the later error paths can't lead to
* ep_free() as the ep file itself still holds an ep reference.
*/
ep_get(ep);
/* now check if we've created too many backpaths */
if (unlikely(full_check && reverse_path_check())) {
ep_remove(ep, epi);
ep_remove_safe(ep, epi);
return -EINVAL;
}
if (epi->event.events & EPOLLWAKEUP) {
error = ep_create_wakeup_source(epi);
if (error) {
ep_remove(ep, epi);
ep_remove_safe(ep, epi);
return error;
}
}
@ -1536,7 +1581,7 @@ static int ep_insert(struct eventpoll *ep, const struct epoll_event *event,
* high memory pressure.
*/
if (unlikely(!epq.epi)) {
ep_remove(ep, epi);
ep_remove_safe(ep, epi);
return -ENOMEM;
}
@ -2036,7 +2081,7 @@ static int do_epoll_create(int flags)
out_free_fd:
put_unused_fd(fd);
out_free_ep:
ep_free(ep);
ep_clear_and_put(ep);
return error;
}
@ -2178,10 +2223,16 @@ int do_epoll_ctl(int epfd, int op, int fd, struct epoll_event *epds,
error = -EEXIST;
break;
case EPOLL_CTL_DEL:
if (epi)
error = ep_remove(ep, epi);
else
if (epi) {
/*
* The eventpoll itself is still alive: the refcount
* can't go to zero here.
*/
ep_remove_safe(ep, epi);
error = 0;
} else {
error = -ENOENT;
}
break;
case EPOLL_CTL_MOD:
if (epi) {

View File

@ -173,12 +173,9 @@ static bool __is_bitmap_valid(struct f2fs_sb_info *sbi, block_t blkaddr,
return exist;
}
bool f2fs_is_valid_blkaddr(struct f2fs_sb_info *sbi,
static bool __f2fs_is_valid_blkaddr(struct f2fs_sb_info *sbi,
block_t blkaddr, int type)
{
if (time_to_inject(sbi, FAULT_BLKADDR))
return false;
switch (type) {
case META_NAT:
break;
@ -233,6 +230,20 @@ bool f2fs_is_valid_blkaddr(struct f2fs_sb_info *sbi,
return true;
}
bool f2fs_is_valid_blkaddr(struct f2fs_sb_info *sbi,
block_t blkaddr, int type)
{
if (time_to_inject(sbi, FAULT_BLKADDR_VALIDITY))
return false;
return __f2fs_is_valid_blkaddr(sbi, blkaddr, type);
}
bool f2fs_is_valid_blkaddr_raw(struct f2fs_sb_info *sbi,
block_t blkaddr, int type)
{
return __f2fs_is_valid_blkaddr(sbi, blkaddr, type);
}
/*
* Readahead CP/NAT/SIT/SSA/POR pages
*/

View File

@ -1389,6 +1389,8 @@ void f2fs_compress_write_end_io(struct bio *bio, struct page *page)
struct f2fs_sb_info *sbi = bio->bi_private;
struct compress_io_ctx *cic =
(struct compress_io_ctx *)page_private(page);
enum count_type type = WB_DATA_TYPE(page,
f2fs_is_compressed_page(page));
int i;
if (unlikely(bio->bi_status))
@ -1396,7 +1398,7 @@ void f2fs_compress_write_end_io(struct bio *bio, struct page *page)
f2fs_compress_free_page(page);
dec_page_count(sbi, F2FS_WB_DATA);
dec_page_count(sbi, type);
if (atomic_dec_return(&cic->pending_pages))
return;
@ -1412,12 +1414,14 @@ void f2fs_compress_write_end_io(struct bio *bio, struct page *page)
}
static int f2fs_write_raw_pages(struct compress_ctx *cc,
int *submitted,
int *submitted_p,
struct writeback_control *wbc,
enum iostat_type io_type)
{
struct address_space *mapping = cc->inode->i_mapping;
int _submitted, compr_blocks, ret, i;
struct f2fs_sb_info *sbi = F2FS_M_SB(mapping);
int submitted, compr_blocks, i;
int ret = 0;
compr_blocks = f2fs_compressed_blocks(cc);
@ -1432,6 +1436,10 @@ static int f2fs_write_raw_pages(struct compress_ctx *cc,
if (compr_blocks < 0)
return compr_blocks;
/* overwrite compressed cluster w/ normal cluster */
if (compr_blocks > 0)
f2fs_lock_op(sbi);
for (i = 0; i < cc->cluster_size; i++) {
if (!cc->rpages[i])
continue;
@ -1456,7 +1464,7 @@ static int f2fs_write_raw_pages(struct compress_ctx *cc,
if (!clear_page_dirty_for_io(cc->rpages[i]))
goto continue_unlock;
ret = f2fs_write_single_data_page(cc->rpages[i], &_submitted,
ret = f2fs_write_single_data_page(cc->rpages[i], &submitted,
NULL, NULL, wbc, io_type,
compr_blocks, false);
if (ret) {
@ -1464,26 +1472,29 @@ static int f2fs_write_raw_pages(struct compress_ctx *cc,
unlock_page(cc->rpages[i]);
ret = 0;
} else if (ret == -EAGAIN) {
ret = 0;
/*
* for quota file, just redirty left pages to
* avoid deadlock caused by cluster update race
* from foreground operation.
*/
if (IS_NOQUOTA(cc->inode))
return 0;
ret = 0;
goto out;
f2fs_io_schedule_timeout(DEFAULT_IO_TIMEOUT);
goto retry_write;
}
return ret;
goto out;
}
*submitted += _submitted;
*submitted_p += submitted;
}
f2fs_balance_fs(F2FS_M_SB(mapping), true);
out:
if (compr_blocks > 0)
f2fs_unlock_op(sbi);
return 0;
f2fs_balance_fs(sbi, true);
return ret;
}
int f2fs_write_multi_pages(struct compress_ctx *cc,

View File

@ -49,7 +49,7 @@ void f2fs_destroy_bioset(void)
bioset_exit(&f2fs_bioset);
}
static bool __is_cp_guaranteed(struct page *page)
bool f2fs_is_cp_guaranteed(struct page *page)
{
struct address_space *mapping = page->mapping;
struct inode *inode;
@ -66,8 +66,6 @@ static bool __is_cp_guaranteed(struct page *page)
S_ISDIR(inode->i_mode))
return true;
if (f2fs_is_compressed_page(page))
return false;
if ((S_ISREG(inode->i_mode) && IS_NOQUOTA(inode)) ||
page_private_gcing(page))
return true;
@ -339,7 +337,7 @@ static void f2fs_write_end_io(struct bio *bio)
bio_for_each_segment_all(bvec, bio, iter_all) {
struct page *page = bvec->bv_page;
enum count_type type = WB_DATA_TYPE(page);
enum count_type type = WB_DATA_TYPE(page, false);
if (page_private_dummy(page)) {
clear_page_private_dummy(page);
@ -767,7 +765,7 @@ int f2fs_submit_page_bio(struct f2fs_io_info *fio)
wbc_account_cgroup_owner(fio->io_wbc, fio->page, PAGE_SIZE);
inc_page_count(fio->sbi, is_read_io(fio->op) ?
__read_io_type(page) : WB_DATA_TYPE(fio->page));
__read_io_type(page) : WB_DATA_TYPE(fio->page, false));
if (is_read_io(bio_op(bio)))
f2fs_submit_read_bio(fio->sbi, bio, fio->type);
@ -978,7 +976,7 @@ int f2fs_merge_page_bio(struct f2fs_io_info *fio)
if (fio->io_wbc)
wbc_account_cgroup_owner(fio->io_wbc, fio->page, PAGE_SIZE);
inc_page_count(fio->sbi, WB_DATA_TYPE(page));
inc_page_count(fio->sbi, WB_DATA_TYPE(page, false));
*fio->last_block = fio->new_blkaddr;
*fio->bio = bio;
@ -1012,6 +1010,7 @@ void f2fs_submit_page_write(struct f2fs_io_info *fio)
enum page_type btype = PAGE_TYPE_OF_BIO(fio->type);
struct f2fs_bio_info *io = sbi->write_io[btype] + fio->temp;
struct page *bio_page;
enum count_type type;
f2fs_bug_on(sbi, is_read_io(fio->op));
@ -1051,7 +1050,8 @@ void f2fs_submit_page_write(struct f2fs_io_info *fio)
/* set submitted = true as a return value */
fio->submitted = 1;
inc_page_count(sbi, WB_DATA_TYPE(bio_page));
type = WB_DATA_TYPE(bio_page, fio->compressed_page);
inc_page_count(sbi, type);
if (io->bio &&
(!io_is_mergeable(sbi, io->bio, io, fio, io->last_block_in_bio,
@ -1064,7 +1064,8 @@ void f2fs_submit_page_write(struct f2fs_io_info *fio)
if (F2FS_IO_ALIGNED(sbi) &&
(fio->type == DATA || fio->type == NODE) &&
fio->new_blkaddr & F2FS_IO_SIZE_MASK(sbi)) {
dec_page_count(sbi, WB_DATA_TYPE(bio_page));
dec_page_count(sbi, WB_DATA_TYPE(bio_page,
fio->compressed_page));
fio->retry = 1;
goto skip;
}
@ -1227,7 +1228,8 @@ int f2fs_reserve_new_blocks(struct dnode_of_data *dn, blkcnt_t count)
if (unlikely(is_inode_flag_set(dn->inode, FI_NO_ALLOC)))
return -EPERM;
if (unlikely((err = inc_valid_block_count(sbi, dn->inode, &count))))
err = inc_valid_block_count(sbi, dn->inode, &count, true);
if (unlikely(err))
return err;
trace_f2fs_reserve_new_blocks(dn->inode, dn->nid,
@ -1485,7 +1487,7 @@ static int __allocate_data_block(struct dnode_of_data *dn, int seg_type)
dn->data_blkaddr = f2fs_data_blkaddr(dn);
if (dn->data_blkaddr == NULL_ADDR) {
err = inc_valid_block_count(sbi, dn->inode, &count);
err = inc_valid_block_count(sbi, dn->inode, &count, true);
if (unlikely(err))
return err;
}
@ -2860,7 +2862,7 @@ int f2fs_write_single_data_page(struct page *page, int *submitted,
.encrypted_page = NULL,
.submitted = 0,
.compr_blocks = compr_blocks,
.need_lock = LOCK_RETRY,
.need_lock = compr_blocks ? LOCK_DONE : LOCK_RETRY,
.post_read = f2fs_post_read_required(inode) ? 1 : 0,
.io_type = io_type,
.io_wbc = wbc,
@ -2940,6 +2942,7 @@ int f2fs_write_single_data_page(struct page *page, int *submitted,
if (err == -EAGAIN) {
err = f2fs_do_write_data_page(&fio);
if (err == -EAGAIN) {
f2fs_bug_on(sbi, compr_blocks);
fio.need_lock = LOCK_REQ;
err = f2fs_do_write_data_page(&fio);
}

View File

@ -74,40 +74,14 @@ static void __set_extent_info(struct extent_info *ei,
}
}
static bool __may_read_extent_tree(struct inode *inode)
{
struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
if (!test_opt(sbi, READ_EXTENT_CACHE))
return false;
if (is_inode_flag_set(inode, FI_NO_EXTENT))
return false;
if (is_inode_flag_set(inode, FI_COMPRESSED_FILE) &&
!f2fs_sb_has_readonly(sbi))
return false;
return S_ISREG(inode->i_mode);
}
static bool __may_age_extent_tree(struct inode *inode)
{
struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
if (!test_opt(sbi, AGE_EXTENT_CACHE))
return false;
if (is_inode_flag_set(inode, FI_COMPRESSED_FILE))
return false;
if (file_is_cold(inode))
return false;
return S_ISREG(inode->i_mode) || S_ISDIR(inode->i_mode);
}
static bool __init_may_extent_tree(struct inode *inode, enum extent_type type)
{
if (type == EX_READ)
return __may_read_extent_tree(inode);
else if (type == EX_BLOCK_AGE)
return __may_age_extent_tree(inode);
return test_opt(F2FS_I_SB(inode), READ_EXTENT_CACHE) &&
S_ISREG(inode->i_mode);
if (type == EX_BLOCK_AGE)
return test_opt(F2FS_I_SB(inode), AGE_EXTENT_CACHE) &&
(S_ISREG(inode->i_mode) || S_ISDIR(inode->i_mode));
return false;
}
@ -120,7 +94,22 @@ static bool __may_extent_tree(struct inode *inode, enum extent_type type)
if (list_empty(&F2FS_I_SB(inode)->s_list))
return false;
return __init_may_extent_tree(inode, type);
if (!__init_may_extent_tree(inode, type))
return false;
if (type == EX_READ) {
if (is_inode_flag_set(inode, FI_NO_EXTENT))
return false;
if (is_inode_flag_set(inode, FI_COMPRESSED_FILE) &&
!f2fs_sb_has_readonly(F2FS_I_SB(inode)))
return false;
} else if (type == EX_BLOCK_AGE) {
if (is_inode_flag_set(inode, FI_COMPRESSED_FILE))
return false;
if (file_is_cold(inode))
return false;
}
return true;
}
static void __try_update_largest_extent(struct extent_tree *et,

View File

@ -60,7 +60,8 @@ enum {
FAULT_SLAB_ALLOC,
FAULT_DQUOT_INIT,
FAULT_LOCK_OP,
FAULT_BLKADDR,
FAULT_BLKADDR_VALIDITY,
FAULT_BLKADDR_CONSISTENCE,
FAULT_MAX,
};
@ -1074,7 +1075,8 @@ struct f2fs_sm_info {
* f2fs monitors the number of several block types such as on-writeback,
* dirty dentry blocks, dirty node blocks, and dirty meta blocks.
*/
#define WB_DATA_TYPE(p) (__is_cp_guaranteed(p) ? F2FS_WB_CP_DATA : F2FS_WB_DATA)
#define WB_DATA_TYPE(p, f) \
(f || f2fs_is_cp_guaranteed(p) ? F2FS_WB_CP_DATA : F2FS_WB_DATA)
enum count_type {
F2FS_DIRTY_DENTS,
F2FS_DIRTY_DATA,
@ -2223,7 +2225,7 @@ static inline bool __allow_reserved_blocks(struct f2fs_sb_info *sbi,
static inline void f2fs_i_blocks_write(struct inode *, block_t, bool, bool);
static inline int inc_valid_block_count(struct f2fs_sb_info *sbi,
struct inode *inode, blkcnt_t *count)
struct inode *inode, blkcnt_t *count, bool partial)
{
blkcnt_t diff = 0, release = 0;
block_t avail_user_block_count;
@ -2263,6 +2265,11 @@ static inline int inc_valid_block_count(struct f2fs_sb_info *sbi,
avail_user_block_count = 0;
}
if (unlikely(sbi->total_valid_block_count > avail_user_block_count)) {
if (!partial) {
spin_unlock(&sbi->stat_lock);
goto enospc;
}
diff = sbi->total_valid_block_count - avail_user_block_count;
if (diff > *count)
diff = *count;
@ -3426,11 +3433,9 @@ bool f2fs_is_valid_blkaddr(struct f2fs_sb_info *sbi,
static inline void verify_blkaddr(struct f2fs_sb_info *sbi,
block_t blkaddr, int type)
{
if (!f2fs_is_valid_blkaddr(sbi, blkaddr, type)) {
if (!f2fs_is_valid_blkaddr(sbi, blkaddr, type))
f2fs_err(sbi, "invalid blkaddr: %u, type: %d, run fsck to fix.",
blkaddr, type);
f2fs_bug_on(sbi, 1);
}
}
static inline bool __is_valid_data_blkaddr(block_t blkaddr)
@ -3725,6 +3730,8 @@ struct page *f2fs_get_meta_page_retry(struct f2fs_sb_info *sbi, pgoff_t index);
struct page *f2fs_get_tmp_page(struct f2fs_sb_info *sbi, pgoff_t index);
bool f2fs_is_valid_blkaddr(struct f2fs_sb_info *sbi,
block_t blkaddr, int type);
bool f2fs_is_valid_blkaddr_raw(struct f2fs_sb_info *sbi,
block_t blkaddr, int type);
int f2fs_ra_meta_pages(struct f2fs_sb_info *sbi, block_t start, int nrpages,
int type, bool sync);
void f2fs_ra_meta_pages_cond(struct f2fs_sb_info *sbi, pgoff_t index,
@ -3765,6 +3772,7 @@ void f2fs_init_ckpt_req_control(struct f2fs_sb_info *sbi);
*/
int __init f2fs_init_bioset(void);
void f2fs_destroy_bioset(void);
bool f2fs_is_cp_guaranteed(struct page *page);
int f2fs_init_bio_entry_cache(void);
void f2fs_destroy_bio_entry_cache(void);
void f2fs_submit_read_bio(struct f2fs_sb_info *sbi, struct bio *bio,

View File

@ -593,9 +593,13 @@ void f2fs_truncate_data_blocks_range(struct dnode_of_data *dn, int count)
f2fs_set_data_blkaddr(dn);
if (__is_valid_data_blkaddr(blkaddr)) {
if (!f2fs_is_valid_blkaddr(sbi, blkaddr,
DATA_GENERIC_ENHANCE))
if (time_to_inject(sbi, FAULT_BLKADDR_CONSISTENCE))
continue;
if (!f2fs_is_valid_blkaddr_raw(sbi, blkaddr,
DATA_GENERIC_ENHANCE)) {
f2fs_handle_error(sbi, ERROR_INVALID_BLKADDR);
continue;
}
if (compressed_cluster)
valid_blocks++;
}
@ -3603,32 +3607,46 @@ static int reserve_compress_blocks(struct dnode_of_data *dn, pgoff_t count)
blkcnt_t reserved;
int ret;
for (i = 0; i < cluster_size; i++, dn->ofs_in_node++) {
blkaddr = f2fs_data_blkaddr(dn);
for (i = 0; i < cluster_size; i++) {
blkaddr = data_blkaddr(dn->inode, dn->node_page,
dn->ofs_in_node + i);
if (i == 0) {
if (blkaddr == COMPRESS_ADDR)
continue;
dn->ofs_in_node += cluster_size;
goto next;
}
if (__is_valid_data_blkaddr(blkaddr)) {
compr_blocks++;
if (blkaddr != COMPRESS_ADDR) {
dn->ofs_in_node += cluster_size;
goto next;
}
continue;
}
dn->data_blkaddr = NEW_ADDR;
f2fs_set_data_blkaddr(dn);
/*
* compressed cluster was not released due to it
* fails in release_compress_blocks(), so NEW_ADDR
* is a possible case.
*/
if (blkaddr == NEW_ADDR ||
__is_valid_data_blkaddr(blkaddr)) {
compr_blocks++;
continue;
}
}
reserved = cluster_size - compr_blocks;
ret = inc_valid_block_count(sbi, dn->inode, &reserved);
if (ret)
/* for the case all blocks in cluster were reserved */
if (reserved == 1)
goto next;
ret = inc_valid_block_count(sbi, dn->inode, &reserved, false);
if (unlikely(ret))
return ret;
if (reserved != cluster_size - compr_blocks)
return -ENOSPC;
for (i = 0; i < cluster_size; i++, dn->ofs_in_node++) {
if (f2fs_data_blkaddr(dn) == NULL_ADDR) {
dn->data_blkaddr = NEW_ADDR;
f2fs_set_data_blkaddr(dn);
}
}
f2fs_i_compr_blocks_update(dn->inode, compr_blocks, true);

View File

@ -248,7 +248,7 @@ static int __replace_atomic_write_block(struct inode *inode, pgoff_t index,
} else {
blkcnt_t count = 1;
err = inc_valid_block_count(sbi, inode, &count);
err = inc_valid_block_count(sbi, inode, &count, true);
if (err) {
f2fs_put_dnode(&dn);
return err;

View File

@ -45,24 +45,25 @@ static struct kmem_cache *f2fs_inode_cachep;
#ifdef CONFIG_F2FS_FAULT_INJECTION
const char *f2fs_fault_name[FAULT_MAX] = {
[FAULT_KMALLOC] = "kmalloc",
[FAULT_KVMALLOC] = "kvmalloc",
[FAULT_PAGE_ALLOC] = "page alloc",
[FAULT_PAGE_GET] = "page get",
[FAULT_ALLOC_NID] = "alloc nid",
[FAULT_ORPHAN] = "orphan",
[FAULT_BLOCK] = "no more block",
[FAULT_DIR_DEPTH] = "too big dir depth",
[FAULT_EVICT_INODE] = "evict_inode fail",
[FAULT_TRUNCATE] = "truncate fail",
[FAULT_READ_IO] = "read IO error",
[FAULT_CHECKPOINT] = "checkpoint error",
[FAULT_DISCARD] = "discard error",
[FAULT_WRITE_IO] = "write IO error",
[FAULT_SLAB_ALLOC] = "slab alloc",
[FAULT_DQUOT_INIT] = "dquot initialize",
[FAULT_LOCK_OP] = "lock_op",
[FAULT_BLKADDR] = "invalid blkaddr",
[FAULT_KMALLOC] = "kmalloc",
[FAULT_KVMALLOC] = "kvmalloc",
[FAULT_PAGE_ALLOC] = "page alloc",
[FAULT_PAGE_GET] = "page get",
[FAULT_ALLOC_NID] = "alloc nid",
[FAULT_ORPHAN] = "orphan",
[FAULT_BLOCK] = "no more block",
[FAULT_DIR_DEPTH] = "too big dir depth",
[FAULT_EVICT_INODE] = "evict_inode fail",
[FAULT_TRUNCATE] = "truncate fail",
[FAULT_READ_IO] = "read IO error",
[FAULT_CHECKPOINT] = "checkpoint error",
[FAULT_DISCARD] = "discard error",
[FAULT_WRITE_IO] = "write IO error",
[FAULT_SLAB_ALLOC] = "slab alloc",
[FAULT_DQUOT_INIT] = "dquot initialize",
[FAULT_LOCK_OP] = "lock_op",
[FAULT_BLKADDR_VALIDITY] = "invalid blkaddr",
[FAULT_BLKADDR_CONSISTENCE] = "inconsistent blkaddr",
};
void f2fs_build_fault_attr(struct f2fs_sb_info *sbi, unsigned int rate,

View File

@ -2332,8 +2332,11 @@ static bool filldir(struct dir_context *ctx, const char *name, int namelen,
return true;
}
static int parse_dirfile(char *buf, size_t nbytes, struct dir_context *ctx)
static int parse_dirfile(char *buf, size_t nbytes, struct dir_context *ctx,
loff_t next_offset)
{
char *buffstart = buf;
while (nbytes >= FUSE_NAME_OFFSET) {
struct fuse_dirent *dirent = (struct fuse_dirent *) buf;
size_t reclen = FUSE_DIRENT_SIZE(dirent);
@ -2347,12 +2350,18 @@ static int parse_dirfile(char *buf, size_t nbytes, struct dir_context *ctx)
ctx->pos = dirent->off;
if (!dir_emit(ctx, dirent->name, dirent->namelen, dirent->ino,
dirent->type))
break;
dirent->type)) {
// If we can't make any progress, user buffer is too small
if (buf == buffstart)
return -EINVAL;
else
return 0;
}
buf += reclen;
nbytes -= reclen;
}
ctx->pos = next_offset;
return 0;
}
@ -2399,13 +2408,12 @@ void *fuse_readdir_finalize(struct fuse_bpf_args *fa,
struct file *backing_dir = ff->backing_file;
int err = 0;
err = parse_dirfile(fa->out_args[1].value, fa->out_args[1].size, ctx);
err = parse_dirfile(fa->out_args[1].value, fa->out_args[1].size, ctx, fro->offset);
*force_again = !!fro->again;
if (*force_again && !*allow_force)
err = -EINVAL;
ctx->pos = fro->offset;
backing_dir->f_pos = fro->offset;
backing_dir->f_pos = ctx->pos;
free_page((unsigned long) fa->out_args[1].value);
return ERR_PTR(err);

View File

@ -319,6 +319,11 @@ struct queue_limits {
unsigned char misaligned;
unsigned char discard_misaligned;
unsigned char raid_partial_stripes_expensive;
#ifndef __GENKSYMS__
bool sub_page_limits;
#endif
enum blk_zoned_model zoned;
/*

View File

@ -216,43 +216,141 @@ static inline void delayacct_wpcopy_end(void)
}
#else
extern void _trace_android_rvh_delayacct_init(void);
extern void _trace_android_rvh_delayacct_tsk_init(struct task_struct *tsk);
extern void _trace_android_rvh_delayacct_tsk_free(struct task_struct *tsk);
extern void _trace_android_vh_delayacct_blkio_start(void);
extern void _trace_android_vh_delayacct_blkio_end(struct task_struct *p);
extern void _trace_android_vh_delayacct_add_tsk(struct taskstats *d,
struct task_struct *tsk,
int *ret);
extern void _trace_android_vh_delayacct_blkio_ticks(struct task_struct *tsk, __u64 *ret);
extern void _trace_android_vh_delayacct_freepages_start(void);
extern void _trace_android_vh_delayacct_freepages_end(void);
extern void _trace_android_vh_delayacct_thrashing_start(bool *in_thrashing);
extern void _trace_android_vh_delayacct_thrashing_end(bool *in_thrashing);
extern void _trace_android_vh_delayacct_swapin_start(void);
extern void _trace_android_vh_delayacct_swapin_end(void);
extern void _trace_android_vh_delayacct_compact_start(void);
extern void _trace_android_vh_delayacct_compact_end(void);
extern void _trace_android_vh_delayacct_wpcopy_start(void);
extern void _trace_android_vh_delayacct_wpcopy_end(void);
extern void set_delayacct_enabled(bool enabled);
extern bool get_delayacct_enabled(void);
static inline void delayacct_init(void)
{}
{
if (get_delayacct_enabled())
_trace_android_rvh_delayacct_init();
}
static inline void delayacct_tsk_init(struct task_struct *tsk)
{}
{
if (get_delayacct_enabled())
_trace_android_rvh_delayacct_tsk_init(tsk);
}
static inline void delayacct_tsk_free(struct task_struct *tsk)
{}
{
if (get_delayacct_enabled())
_trace_android_rvh_delayacct_tsk_free(tsk);
}
static inline void delayacct_blkio_start(void)
{}
{
if (get_delayacct_enabled())
_trace_android_vh_delayacct_blkio_start();
}
static inline void delayacct_blkio_end(struct task_struct *p)
{}
{
if (get_delayacct_enabled())
_trace_android_vh_delayacct_blkio_end(p);
}
static inline int delayacct_add_tsk(struct taskstats *d,
struct task_struct *tsk)
{ return 0; }
{
int ret = 0;
if (get_delayacct_enabled())
_trace_android_vh_delayacct_add_tsk(d, tsk, &ret);
return ret;
}
static inline __u64 delayacct_blkio_ticks(struct task_struct *tsk)
{ return 0; }
{
__u64 ret = 0;
if (get_delayacct_enabled())
_trace_android_vh_delayacct_blkio_ticks(tsk, &ret);
return ret;
}
static inline int delayacct_is_task_waiting_on_io(struct task_struct *p)
{ return 0; }
static inline void delayacct_freepages_start(void)
{}
{
if (get_delayacct_enabled())
_trace_android_vh_delayacct_freepages_start();
}
static inline void delayacct_freepages_end(void)
{}
{
if (get_delayacct_enabled())
_trace_android_vh_delayacct_freepages_end();
}
static inline void delayacct_thrashing_start(bool *in_thrashing)
{}
{
if (get_delayacct_enabled())
_trace_android_vh_delayacct_thrashing_start(in_thrashing);
}
static inline void delayacct_thrashing_end(bool *in_thrashing)
{}
{
if (get_delayacct_enabled())
_trace_android_vh_delayacct_thrashing_end(in_thrashing);
}
static inline void delayacct_swapin_start(void)
{}
{
if (get_delayacct_enabled())
_trace_android_vh_delayacct_swapin_start();
}
static inline void delayacct_swapin_end(void)
{}
{
if (get_delayacct_enabled())
_trace_android_vh_delayacct_swapin_end();
}
static inline void delayacct_compact_start(void)
{}
{
if (get_delayacct_enabled())
_trace_android_vh_delayacct_compact_start();
}
static inline void delayacct_compact_end(void)
{}
{
if (get_delayacct_enabled())
_trace_android_vh_delayacct_compact_end();
}
static inline void delayacct_wpcopy_start(void)
{}
{
if (get_delayacct_enabled())
_trace_android_vh_delayacct_wpcopy_start();
}
static inline void delayacct_wpcopy_end(void)
{}
{
if (get_delayacct_enabled())
_trace_android_vh_delayacct_wpcopy_end();
}
#endif /* CONFIG_TASK_DELAY_ACCT */

View File

@ -89,6 +89,7 @@ int kthread_stop(struct task_struct *k);
bool kthread_should_stop(void);
bool kthread_should_park(void);
bool __kthread_should_park(struct task_struct *k);
bool kthread_should_stop_or_park(void);
bool kthread_freezable_should_stop(bool *was_frozen);
void *kthread_func(struct task_struct *k);
void *kthread_data(struct task_struct *k);

View File

@ -304,6 +304,44 @@ TRACE_EVENT(mm_page_alloc_extfrag,
__entry->change_ownership)
);
TRACE_EVENT(mm_alloc_contig_migrate_range_info,
TP_PROTO(unsigned long start,
unsigned long end,
unsigned long nr_migrated,
unsigned long nr_reclaimed,
unsigned long nr_mapped,
int migratetype),
TP_ARGS(start, end, nr_migrated, nr_reclaimed, nr_mapped, migratetype),
TP_STRUCT__entry(
__field(unsigned long, start)
__field(unsigned long, end)
__field(unsigned long, nr_migrated)
__field(unsigned long, nr_reclaimed)
__field(unsigned long, nr_mapped)
__field(int, migratetype)
),
TP_fast_assign(
__entry->start = start;
__entry->end = end;
__entry->nr_migrated = nr_migrated;
__entry->nr_reclaimed = nr_reclaimed;
__entry->nr_mapped = nr_mapped;
__entry->migratetype = migratetype;
),
TP_printk("start=0x%lx end=0x%lx migratetype=%d nr_migrated=%lu nr_reclaimed=%lu nr_mapped=%lu",
__entry->start,
__entry->end,
__entry->migratetype,
__entry->nr_migrated,
__entry->nr_reclaimed,
__entry->nr_mapped)
);
/*
* Required for uniquely and securely identifying mm in rss_stat tracepoint.
*/

View File

@ -101,6 +101,48 @@ TRACE_EVENT(rpm_return_int,
__entry->ret)
);
#define RPM_STATUS_STRINGS \
EM(RPM_INVALID, "RPM_INVALID") \
EM(RPM_ACTIVE, "RPM_ACTIVE") \
EM(RPM_RESUMING, "RPM_RESUMING") \
EM(RPM_SUSPENDED, "RPM_SUSPENDED") \
EMe(RPM_SUSPENDING, "RPM_SUSPENDING")
/* Enums require being exported to userspace, for user tool parsing. */
#undef EM
#undef EMe
#define EM(a, b) TRACE_DEFINE_ENUM(a);
#define EMe(a, b) TRACE_DEFINE_ENUM(a);
RPM_STATUS_STRINGS
/*
* Now redefine the EM() and EMe() macros to map the enums to the strings that
* will be printed in the output.
*/
#undef EM
#undef EMe
#define EM(a, b) { a, b },
#define EMe(a, b) { a, b }
TRACE_EVENT(rpm_status,
TP_PROTO(struct device *dev, enum rpm_status status),
TP_ARGS(dev, status),
TP_STRUCT__entry(
__string(name, dev_name(dev))
__field(int, status)
),
TP_fast_assign(
__assign_str(name, dev_name(dev));
__entry->status = status;
),
TP_printk("%s status=%s", __get_str(name),
__print_symbolic(__entry->status, RPM_STATUS_STRINGS))
);
#endif /* _TRACE_RUNTIME_POWER_H */
/* This part must be outside protection */

View File

@ -83,9 +83,9 @@ DECLARE_HOOK(android_vh_binder_alloc_new_buf_locked,
TP_PROTO(size_t size, size_t *free_async_space, int is_async),
TP_ARGS(size, free_async_space, is_async));
DECLARE_HOOK(android_vh_binder_detect_low_async_space_locked,
TP_PROTO(int is_async, size_t *free_async_space, int pid, bool *should_fail),
TP_ARGS(is_async, free_async_space, pid, should_fail));
DECLARE_HOOK(android_vh_binder_detect_low_async_space,
TP_PROTO(int is_async, size_t *free_async_space, int pid, bool *should_fail),
TP_ARGS(is_async, free_async_space, pid, should_fail));
struct binder_transaction_data;
DECLARE_HOOK(android_vh_binder_reply,
TP_PROTO(struct binder_proc *target_proc, struct binder_proc *proc,
@ -126,6 +126,10 @@ DECLARE_HOOK(android_vh_binder_free_buf,
TP_PROTO(struct binder_proc *proc, struct binder_thread *thread,
struct binder_buffer *buffer),
TP_ARGS(proc, thread, buffer));
DECLARE_HOOK(android_vh_binder_buffer_release,
TP_PROTO(struct binder_proc *proc, struct binder_thread *thread,
struct binder_buffer *buffer, bool has_transaction),
TP_ARGS(proc, thread, buffer, has_transaction));
DECLARE_HOOK(android_vh_binder_ioctl_end,
TP_PROTO(struct task_struct *caller_task,

View File

@ -0,0 +1,76 @@
/* SPDX-License-Identifier: GPL-2.0 */
#ifdef PROTECT_TRACE_INCLUDE_PATH
#undef PROTECT_TRACE_INCLUDE_PATH
#else /* PROTECT_TRACE_INCLUDE_PATH */
#undef TRACE_SYSTEM
#define TRACE_SYSTEM delayacct
#define TRACE_INCLUDE_PATH trace/hooks
#if !defined(_TRACE_HOOK_DELAYACCT_H) || defined(TRACE_HEADER_MULTI_READ)
#define _TRACE_HOOK_DELAYACCT_H
#include <trace/hooks/vendor_hooks.h>
struct task_struct;
struct taskstats;
DECLARE_RESTRICTED_HOOK(android_rvh_delayacct_init,
TP_PROTO(void *unused),
TP_ARGS(unused), 1);
DECLARE_RESTRICTED_HOOK(android_rvh_delayacct_tsk_init,
TP_PROTO(struct task_struct *tsk),
TP_ARGS(tsk), 1);
DECLARE_RESTRICTED_HOOK(android_rvh_delayacct_tsk_free,
TP_PROTO(struct task_struct *tsk),
TP_ARGS(tsk), 1);
DECLARE_HOOK(android_vh_delayacct_blkio_start,
TP_PROTO(void *unused),
TP_ARGS(unused));
DECLARE_HOOK(android_vh_delayacct_blkio_end,
TP_PROTO(struct task_struct *p),
TP_ARGS(p));
DECLARE_HOOK(android_vh_delayacct_add_tsk,
TP_PROTO(struct taskstats *d, struct task_struct *tsk, int *ret),
TP_ARGS(d, tsk, ret));
DECLARE_HOOK(android_vh_delayacct_blkio_ticks,
TP_PROTO(struct task_struct *tsk, __u64 *ret),
TP_ARGS(tsk, ret));
DECLARE_HOOK(android_vh_delayacct_freepages_start,
TP_PROTO(void *unused),
TP_ARGS(unused));
DECLARE_HOOK(android_vh_delayacct_freepages_end,
TP_PROTO(void *unused),
TP_ARGS(unused));
DECLARE_HOOK(android_vh_delayacct_thrashing_start,
TP_PROTO(bool *in_thrashing),
TP_ARGS(in_thrashing));
DECLARE_HOOK(android_vh_delayacct_thrashing_end,
TP_PROTO(bool *in_thrashing),
TP_ARGS(in_thrashing));
DECLARE_HOOK(android_vh_delayacct_swapin_start,
TP_PROTO(void *unused),
TP_ARGS(unused));
DECLARE_HOOK(android_vh_delayacct_swapin_end,
TP_PROTO(void *unused),
TP_ARGS(unused));
DECLARE_HOOK(android_vh_delayacct_compact_start,
TP_PROTO(void *unused),
TP_ARGS(unused));
DECLARE_HOOK(android_vh_delayacct_compact_end,
TP_PROTO(void *unused),
TP_ARGS(unused));
DECLARE_HOOK(android_vh_delayacct_wpcopy_start,
TP_PROTO(void *unused),
TP_ARGS(unused));
DECLARE_HOOK(android_vh_delayacct_wpcopy_end,
TP_PROTO(void *unused),
TP_ARGS(unused));
#endif /* _TRACE_HOOK_DELAYACCT_H */
/* This part must be outside protection */
#include <trace/define_trace.h>
#endif /* PROTECT_TRACE_INCLUDE_PATH */

View File

@ -21,6 +21,11 @@ DECLARE_RESTRICTED_HOOK(android_rvh_do_sp_pc_abort,
TP_ARGS(addr, esr, regs),
TP_CONDITION(!user_mode(regs)));
DECLARE_HOOK(android_vh_try_fixup_sea,
TP_PROTO(unsigned long addr, unsigned long esr, struct pt_regs *regs,
bool *can_fixup),
TP_ARGS(addr, esr, regs, can_fixup));
#endif /* _TRACE_HOOK_FAULT_H */
/* This part must be outside protection */
#include <trace/define_trace.h>

View File

@ -207,6 +207,11 @@ DECLARE_RESTRICTED_HOOK(android_rvh_util_fits_cpu,
int cpu, bool *fits, bool *done),
TP_ARGS(util, uclamp_min, uclamp_max, cpu, fits, done), 1);
DECLARE_RESTRICTED_HOOK(android_rvh_update_cpus_allowed,
TP_PROTO(struct task_struct *p, cpumask_var_t cpus_requested,
const struct cpumask *new_mask, int *ret),
TP_ARGS(p, cpus_requested, new_mask, ret), 1);
DECLARE_RESTRICTED_HOOK(android_rvh_sched_fork_init,
TP_PROTO(struct task_struct *p),
TP_ARGS(p), 1);
@ -276,6 +281,11 @@ DECLARE_HOOK(android_vh_free_task,
TP_PROTO(struct task_struct *p),
TP_ARGS(p));
DECLARE_HOOK(android_vh_copy_process,
TP_PROTO(struct task_struct *p, int nr_threads, int current_signal_nr_threads),
TP_ARGS(p, nr_threads, current_signal_nr_threads));
DECLARE_HOOK(android_vh_irqtime_account_process_tick,
TP_PROTO(struct task_struct *p, struct rq *rq, int user_tick, int ticks),
TP_ARGS(p, rq, user_tick, ticks));

View File

@ -0,0 +1,18 @@
/* SPDX-License-Identifier: GPL-2.0 */
#undef TRACE_SYSTEM
#define TRACE_SYSTEM sound
#undef TRACE_INCLUDE_PATH
#define TRACE_INCLUDE_PATH trace/hooks
#if !defined(_TRACE_HOOK_SOUND_H) || defined(TRACE_HEADER_MULTI_READ)
#define _TRACE_HOOK_SOUND_H
#include <trace/hooks/vendor_hooks.h>
DECLARE_HOOK(android_vh_sound_usb_support_cpu_suspend,
TP_PROTO(struct usb_device *udev,
int direction,
bool *is_support),
TP_ARGS(udev, direction, is_support));
#endif /* _TRACE_HOOK_SOUND_H */
/* This part must be outside protection */
#include <trace/define_trace.h>

View File

@ -23,6 +23,10 @@ DECLARE_RESTRICTED_HOOK(android_rvh_ufs_reprogram_all_keys,
TP_PROTO(struct ufs_hba *hba, int *err),
TP_ARGS(hba, err), 1);
DECLARE_RESTRICTED_HOOK(android_rvh_ufs_complete_init,
TP_PROTO(struct ufs_hba *hba),
TP_ARGS(hba), 1);
DECLARE_HOOK(android_vh_ufs_prepare_command,
TP_PROTO(struct ufs_hba *hba, struct request *rq,
struct ufshcd_lrb *lrbp, int *err),

25
include/trace/hooks/usb.h Normal file
View File

@ -0,0 +1,25 @@
/* SPDX-License-Identifier: GPL-2.0 */
#undef TRACE_SYSTEM
#define TRACE_SYSTEM usb
#undef TRACE_INCLUDE_PATH
#define TRACE_INCLUDE_PATH trace/hooks
#if !defined(_TRACE_HOOK_USB_H) || defined(TRACE_HEADER_MULTI_READ)
#define _TRACE_HOOK_USB_H
#include <trace/hooks/vendor_hooks.h>
/*
* Following tracepoints are not exported in tracefs and provide a
* mechanism for vendor modules to hook and extend functionality
*/
struct usb_device;
DECLARE_RESTRICTED_HOOK(android_rvh_usb_dev_suspend,
TP_PROTO(struct usb_device *udev, pm_message_t msg, int *bypass),
TP_ARGS(udev, msg, bypass), 1);
DECLARE_HOOK(android_vh_usb_dev_resume,
TP_PROTO(struct usb_device *udev, pm_message_t msg, int *bypass),
TP_ARGS(udev, msg, bypass));
#endif /* _TRACE_HOOK_USB_H */
/* This part must be outside protection */
#include <trace/define_trace.h>

View File

@ -10,7 +10,7 @@ obj-y = fork.o exec_domain.o panic.o \
extable.o params.o \
kthread.o sys_ni.o nsproxy.o \
notifier.o ksysfs.o cred.o reboot.o \
async.o range.o smpboot.o ucount.o regset.o
async.o range.o smpboot.o ucount.o regset.o delayacct.o
obj-$(CONFIG_USERMODE_DRIVER) += usermode_driver.o
obj-$(CONFIG_MODULES) += kmod.o
@ -94,7 +94,6 @@ obj-$(CONFIG_HARDLOCKUP_DETECTOR_PERF) += watchdog_hld.o
obj-$(CONFIG_SECCOMP) += seccomp.o
obj-$(CONFIG_RELAY) += relay.o
obj-$(CONFIG_SYSCTL) += utsname_sysctl.o
obj-$(CONFIG_TASK_DELAY_ACCT) += delayacct.o
obj-$(CONFIG_TASKSTATS) += taskstats.o tsacct.o
obj-$(CONFIG_TRACEPOINTS) += tracepoint.o
obj-$(CONFIG_LATENCYTOP) += latencytop.o

View File

@ -68,6 +68,7 @@
#include <linux/wait.h>
#include <trace/hooks/cgroup.h>
#include <trace/hooks/sched.h>
DEFINE_STATIC_KEY_FALSE(cpusets_pre_enable_key);
DEFINE_STATIC_KEY_FALSE(cpusets_enabled_key);
@ -1241,6 +1242,18 @@ void rebuild_sched_domains(void)
}
EXPORT_SYMBOL_GPL(rebuild_sched_domains);
static int update_cpus_allowed(struct cpuset *cs, struct task_struct *p,
const struct cpumask *new_mask)
{
int ret = -EINVAL;
trace_android_rvh_update_cpus_allowed(p, cs->cpus_requested, new_mask, &ret);
if (!ret)
return ret;
return set_cpus_allowed_ptr(p, new_mask);
}
/**
* update_tasks_cpumask - Update the cpumasks of tasks in the cpuset.
* @cs: the cpuset in which each task's cpus_allowed mask needs to be changed
@ -1267,7 +1280,7 @@ static void update_tasks_cpumask(struct cpuset *cs, struct cpumask *new_cpus)
cpumask_and(new_cpus, cs->effective_cpus,
task_cpu_possible_mask(task));
set_cpus_allowed_ptr(task, new_cpus);
update_cpus_allowed(cs, task, new_cpus);
}
css_task_iter_end(&it);
}
@ -2640,7 +2653,7 @@ static void cpuset_attach_task(struct cpuset *cs, struct task_struct *task)
* can_attach beforehand should guarantee that this doesn't
* fail. TODO: have a better way to handle failure here
*/
WARN_ON_ONCE(set_cpus_allowed_ptr(task, cpus_attach));
WARN_ON_ONCE(update_cpus_allowed(cs, task, cpus_attach));
cpuset_change_task_nodemask(task, &cpuset_attach_nodemask_to);
cpuset_update_task_spread_flags(cs, task);

View File

@ -14,6 +14,8 @@
#include <linux/delayacct.h>
#include <linux/module.h>
#ifdef CONFIG_TASK_DELAY_ACCT
DEFINE_STATIC_KEY_FALSE(delayacct_key);
int delayacct_on __read_mostly; /* Delay accounting turned on/off */
struct kmem_cache *delayacct_cache;
@ -274,3 +276,105 @@ void __delayacct_wpcopy_end(void)
&current->delays->wpcopy_delay,
&current->delays->wpcopy_count);
}
#else
#include <trace/hooks/delayacct.h>
int delayacct_enabled __read_mostly; /* Delay accounting turned on/off */
bool get_delayacct_enabled(void)
{
return delayacct_enabled;
}
void set_delayacct_enabled(bool enabled)
{
delayacct_enabled = enabled;
}
EXPORT_SYMBOL_GPL(set_delayacct_enabled);
void _trace_android_rvh_delayacct_init(void)
{
trace_android_rvh_delayacct_init(NULL);
}
void _trace_android_rvh_delayacct_tsk_init(struct task_struct *tsk)
{
trace_android_rvh_delayacct_tsk_init(tsk);
}
void _trace_android_rvh_delayacct_tsk_free(struct task_struct *tsk)
{
trace_android_rvh_delayacct_tsk_free(tsk);
}
void _trace_android_vh_delayacct_blkio_start(void)
{
trace_android_vh_delayacct_blkio_start(NULL);
}
void _trace_android_vh_delayacct_blkio_end(struct task_struct *p)
{
trace_android_vh_delayacct_blkio_end(p);
}
void _trace_android_vh_delayacct_add_tsk(struct taskstats *d, struct task_struct *tsk, int *ret)
{
trace_android_vh_delayacct_add_tsk(d, tsk, ret);
}
void _trace_android_vh_delayacct_blkio_ticks(struct task_struct *tsk, __u64 *ret)
{
trace_android_vh_delayacct_blkio_ticks(tsk, ret);
}
void _trace_android_vh_delayacct_freepages_start(void)
{
trace_android_vh_delayacct_freepages_start(NULL);
}
void _trace_android_vh_delayacct_freepages_end(void)
{
trace_android_vh_delayacct_freepages_end(NULL);
}
void _trace_android_vh_delayacct_thrashing_start(bool *in_thrashing)
{
trace_android_vh_delayacct_thrashing_start(in_thrashing);
}
void _trace_android_vh_delayacct_thrashing_end(bool *in_thrashing)
{
trace_android_vh_delayacct_thrashing_end(in_thrashing);
}
void _trace_android_vh_delayacct_swapin_start(void)
{
trace_android_vh_delayacct_swapin_start(NULL);
}
void _trace_android_vh_delayacct_swapin_end(void)
{
trace_android_vh_delayacct_swapin_end(NULL);
}
void _trace_android_vh_delayacct_compact_start(void)
{
trace_android_vh_delayacct_compact_start(NULL);
}
void _trace_android_vh_delayacct_compact_end(void)
{
trace_android_vh_delayacct_compact_end(NULL);
}
void _trace_android_vh_delayacct_wpcopy_start(void)
{
trace_android_vh_delayacct_wpcopy_start(NULL);
}
void _trace_android_vh_delayacct_wpcopy_end(void)
{
trace_android_vh_delayacct_wpcopy_end(NULL);
}
#endif

View File

@ -2590,6 +2590,7 @@ static __latent_entropy struct task_struct *copy_process(
attach_pid(p, PIDTYPE_PID);
nr_threads++;
}
trace_android_vh_copy_process(current, nr_threads, current->signal->nr_threads);
total_forks++;
hlist_del_init(&delayed.node);
spin_unlock(&current->sighand->siglock);

View File

@ -181,6 +181,16 @@ bool kthread_should_park(void)
}
EXPORT_SYMBOL_GPL(kthread_should_park);
bool kthread_should_stop_or_park(void)
{
struct kthread *kthread = __to_kthread(current);
if (!kthread)
return false;
return kthread->flags & (BIT(KTHREAD_SHOULD_STOP) | BIT(KTHREAD_SHOULD_PARK));
}
/**
* kthread_freezable_should_stop - should this freezable kthread return now?
* @was_frozen: optional out parameter, indicates whether %current was frozen

View File

@ -37,6 +37,7 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_find_busiest_queue);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_migrate_queued_task);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_cpu_overutilized);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_sched_setaffinity);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_update_cpus_allowed);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_build_sched_domains);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_check_preempt_tick);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_check_preempt_wakeup_ignore);
@ -46,6 +47,7 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_pick_next_entity);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_check_preempt_wakeup);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_set_cpus_allowed_by_task);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_free_task);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_copy_process);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_uclamp_eff_get);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_after_enqueue_task);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_after_dequeue_task);

View File

@ -429,11 +429,6 @@ int autoremove_wake_function(struct wait_queue_entry *wq_entry, unsigned mode, i
}
EXPORT_SYMBOL(autoremove_wake_function);
static inline bool is_kthread_should_stop(void)
{
return (current->flags & PF_KTHREAD) && kthread_should_stop();
}
/*
* DEFINE_WAIT_FUNC(wait, woken_wake_func);
*
@ -463,7 +458,7 @@ long wait_woken(struct wait_queue_entry *wq_entry, unsigned mode, long timeout)
* or woken_wake_function() sees our store to current->state.
*/
set_current_state(mode); /* A */
if (!(wq_entry->flags & WQ_FLAG_WOKEN) && !is_kthread_should_stop())
if (!(wq_entry->flags & WQ_FLAG_WOKEN) && !kthread_should_stop_or_park())
timeout = schedule_timeout(timeout);
__set_current_state(TASK_RUNNING);

View File

@ -755,6 +755,7 @@ void raise_softirq(unsigned int nr)
raise_softirq_irqoff(nr);
local_irq_restore(flags);
}
EXPORT_SYMBOL_GPL(raise_softirq);
void __raise_softirq_irqoff(unsigned int nr)
{

View File

@ -38,6 +38,12 @@
#include "cma.h"
#undef CREATE_TRACE_POINTS
#include <trace/hooks/mm.h>
EXPORT_TRACEPOINT_SYMBOL_GPL(cma_alloc_start);
EXPORT_TRACEPOINT_SYMBOL_GPL(cma_alloc_finish);
struct cma cma_areas[MAX_CMA_AREAS];
unsigned cma_area_count;
static DEFINE_MUTEX(cma_mutex);

View File

@ -455,7 +455,9 @@ isolate_migratepages_range(struct compact_control *cc,
unsigned long low_pfn, unsigned long end_pfn);
int __alloc_contig_migrate_range(struct compact_control *cc,
unsigned long start, unsigned long end);
unsigned long start, unsigned long end,
int migratetype);
#endif
int find_suitable_fallback(struct free_area *area, unsigned int order,
int migratetype, bool only_stealable, bool *can_steal);

View File

@ -428,8 +428,12 @@ int folio_migrate_mapping(struct address_space *mapping,
if (folio_test_swapbacked(folio)) {
__folio_set_swapbacked(newfolio);
if (folio_test_swapcache(folio)) {
int i;
folio_set_swapcache(newfolio);
newfolio->private = folio_get_private(folio);
for (i = 0; i < nr; i++)
set_page_private(folio_page(newfolio, i),
page_private(folio_page(folio, i)));
}
entries = nr;
} else {

View File

@ -9328,9 +9328,14 @@ static inline void alloc_contig_dump_pages(struct list_head *page_list)
}
#endif
/* [start, end) must belong to a single zone. */
/*
* [start, end) must belong to a single zone.
* @migratetype: using migratetype to filter the type of migration in
* trace_mm_alloc_contig_migrate_range_info.
*/
int __alloc_contig_migrate_range(struct compact_control *cc,
unsigned long start, unsigned long end)
unsigned long start, unsigned long end,
int migratetype)
{
/* This function is based on compact_zone() from compaction.c. */
unsigned int nr_reclaimed;
@ -9342,6 +9347,10 @@ int __alloc_contig_migrate_range(struct compact_control *cc,
.nid = zone_to_nid(cc->zone),
.gfp_mask = GFP_USER | __GFP_MOVABLE | __GFP_RETRY_MAYFAIL,
};
struct page *page;
unsigned long total_mapped = 0;
unsigned long total_migrated = 0;
unsigned long total_reclaimed = 0;
if (cc->gfp_mask & __GFP_NORETRY)
max_tries = 1;
@ -9370,9 +9379,18 @@ int __alloc_contig_migrate_range(struct compact_control *cc,
&cc->migratepages);
cc->nr_migratepages -= nr_reclaimed;
if (trace_mm_alloc_contig_migrate_range_info_enabled()) {
total_reclaimed += nr_reclaimed;
list_for_each_entry(page, &cc->migratepages, lru)
total_mapped += page_mapcount(page);
}
ret = migrate_pages(&cc->migratepages, alloc_migration_target,
NULL, (unsigned long)&mtc, cc->mode, MR_CONTIG_RANGE, NULL);
if (trace_mm_alloc_contig_migrate_range_info_enabled() && !ret)
total_migrated += cc->nr_migratepages;
/*
* On -ENOMEM, migrate_pages() bails out right away. It is pointless
* to retry again over this error, so do the same here.
@ -9395,9 +9413,13 @@ int __alloc_contig_migrate_range(struct compact_control *cc,
}
}
putback_movable_pages(&cc->migratepages);
return ret;
}
return 0;
trace_mm_alloc_contig_migrate_range_info(start, end, migratetype,
total_migrated,
total_reclaimed,
total_mapped);
return (ret < 0) ? ret : 0;
}
/**
@ -9481,7 +9503,7 @@ int alloc_contig_range(unsigned long start, unsigned long end,
* allocated. So, if we fall through be sure to clear ret so that
* -EBUSY is not accidentally used or returned to caller.
*/
ret = __alloc_contig_migrate_range(&cc, start, end);
ret = __alloc_contig_migrate_range(&cc, start, end, migratetype);
if (ret && (ret != -EBUSY || (gfp_mask & __GFP_NORETRY)))
goto done;
ret = 0;

View File

@ -434,7 +434,7 @@ static int isolate_single_pageblock(unsigned long boundary_pfn, int flags,
}
ret = __alloc_contig_migrate_range(&cc, head_pfn,
head_pfn + nr_pages);
head_pfn + nr_pages, page_mt);
/*
* restore the page's migratetype so that it can

View File

@ -8,9 +8,6 @@ This module contains a full list of kernel modules
_COMMON_GKI_MODULES_LIST = [
# keep sorted
"crypto/crct10dif_common.ko",
"crypto/crct10dif_generic.ko",
"drivers/block/null_blk/null_blk.ko",
"drivers/block/zram/zram.ko",
"drivers/bluetooth/btbcm.ko",
"drivers/bluetooth/btqca.ko",
@ -38,12 +35,10 @@ _COMMON_GKI_MODULES_LIST = [
"drivers/net/usb/rtl8150.ko",
"drivers/net/usb/usbnet.ko",
"drivers/net/wwan/wwan.ko",
"drivers/scsi/scsi_debug.ko",
"drivers/usb/class/cdc-acm.ko",
"drivers/usb/serial/ftdi_sio.ko",
"drivers/usb/serial/usbserial.ko",
"kernel/kheaders.ko",
"lib/crc-t10dif.ko",
"lib/crypto/libarc4.ko",
"mm/zsmalloc.ko",
"net/6lowpan/6lowpan.ko",

View File

@ -273,13 +273,20 @@ struct sk_buff *__udp_gso_segment(struct sk_buff *gso_skb,
__sum16 check;
__be16 newlen;
if (skb_shinfo(gso_skb)->gso_type & SKB_GSO_FRAGLIST)
return __udp_gso_segment_list(gso_skb, features, is_ipv6);
mss = skb_shinfo(gso_skb)->gso_size;
if (gso_skb->len <= sizeof(*uh) + mss)
return ERR_PTR(-EINVAL);
if (skb_gso_ok(gso_skb, features | NETIF_F_GSO_ROBUST)) {
/* Packet is from an untrusted source, reset gso_segs. */
skb_shinfo(gso_skb)->gso_segs = DIV_ROUND_UP(gso_skb->len - sizeof(*uh),
mss);
return NULL;
}
if (skb_shinfo(gso_skb)->gso_type & SKB_GSO_FRAGLIST)
return __udp_gso_segment_list(gso_skb, features, is_ipv6);
skb_pull(gso_skb, sizeof(*uh));
/* clear destructor to avoid skb_segment assigning it to tail */

View File

@ -4745,6 +4745,9 @@ static int nf_tables_newset(struct sk_buff *skb, const struct nfnl_info *info,
if (!(flags & NFT_SET_TIMEOUT))
return -EINVAL;
if (flags & NFT_SET_ANONYMOUS)
return -EOPNOTSUPP;
err = nf_msecs_to_jiffies64(nla[NFTA_SET_TIMEOUT], &desc.timeout);
if (err)
return err;
@ -4753,6 +4756,10 @@ static int nf_tables_newset(struct sk_buff *skb, const struct nfnl_info *info,
if (nla[NFTA_SET_GC_INTERVAL] != NULL) {
if (!(flags & NFT_SET_TIMEOUT))
return -EINVAL;
if (flags & NFT_SET_ANONYMOUS)
return -EOPNOTSUPP;
desc.gc_int = ntohl(nla_get_be32(nla[NFTA_SET_GC_INTERVAL]));
}

View File

@ -235,7 +235,7 @@ static void nft_rbtree_gc_remove(struct net *net, struct nft_set *set,
static const struct nft_rbtree_elem *
nft_rbtree_gc_elem(const struct nft_set *__set, struct nft_rbtree *priv,
struct nft_rbtree_elem *rbe, u8 genmask)
struct nft_rbtree_elem *rbe)
{
struct nft_set *set = (struct nft_set *)__set;
struct rb_node *prev = rb_prev(&rbe->node);
@ -254,7 +254,7 @@ nft_rbtree_gc_elem(const struct nft_set *__set, struct nft_rbtree *priv,
while (prev) {
rbe_prev = rb_entry(prev, struct nft_rbtree_elem, node);
if (nft_rbtree_interval_end(rbe_prev) &&
nft_set_elem_active(&rbe_prev->ext, genmask))
nft_set_elem_active(&rbe_prev->ext, NFT_GENMASK_ANY))
break;
prev = rb_prev(prev);
@ -365,7 +365,7 @@ static int __nft_rbtree_insert(const struct net *net, const struct nft_set *set,
nft_set_elem_active(&rbe->ext, cur_genmask)) {
const struct nft_rbtree_elem *removed_end;
removed_end = nft_rbtree_gc_elem(set, priv, rbe, genmask);
removed_end = nft_rbtree_gc_elem(set, priv, rbe);
if (IS_ERR(removed_end))
return PTR_ERR(removed_end);

View File

@ -62,6 +62,7 @@ struct tls_decrypt_ctx {
u8 iv[MAX_IV_SIZE];
u8 aad[TLS_MAX_AAD_SIZE];
u8 tail;
bool free_sgout;
struct scatterlist sg[];
};
@ -186,7 +187,6 @@ static void tls_decrypt_done(crypto_completion_data_t *data, int err)
struct aead_request *aead_req = crypto_get_completion_data(data);
struct crypto_aead *aead = crypto_aead_reqtfm(aead_req);
struct scatterlist *sgout = aead_req->dst;
struct scatterlist *sgin = aead_req->src;
struct tls_sw_context_rx *ctx;
struct tls_decrypt_ctx *dctx;
struct tls_context *tls_ctx;
@ -212,7 +212,7 @@ static void tls_decrypt_done(crypto_completion_data_t *data, int err)
}
/* Free the destination pages if skb was not decrypted inplace */
if (sgout != sgin) {
if (dctx->free_sgout) {
/* Skip the first S/G entry as it points to AAD */
for_each_sg(sg_next(sgout), sg, UINT_MAX, pages) {
if (!sg)
@ -1591,6 +1591,7 @@ static int tls_decrypt_sg(struct sock *sk, struct iov_iter *out_iov,
} else if (out_sg) {
memcpy(sgout, out_sg, n_sgout * sizeof(*sgout));
}
dctx->free_sgout = !!pages;
/* Prepare and submit AEAD request */
err = tls_do_decryption(sk, sgin, sgout, dctx->iv,

View File

@ -62,7 +62,7 @@ SECTIONS {
}
#endif
#if defined(CONFIG_LTO_CLANG) || IS_ENABLED(CONFIG_CRYPTO_FIPS140_MOD)
#if defined(CONFIG_LTO_CLANG) || defined(CONFIG_CRYPTO_FIPS140_MERGE_MOD_SECTIONS)
/*
* With CONFIG_LTO_CLANG, LLD always enables -fdata-sections and
* -ffunction-sections, which increases the size of the final module.

View File

@ -14,6 +14,8 @@
#include <sound/pcm.h>
#include <sound/pcm_params.h>
#include <trace/hooks/sound.h>
#include "usbaudio.h"
#include "card.h"
#include "quirks.h"
@ -1175,6 +1177,7 @@ static int snd_usb_pcm_open(struct snd_pcm_substream *substream)
struct snd_pcm_runtime *runtime = substream->runtime;
struct snd_usb_substream *subs = &as->substream[direction];
int ret;
bool is_support = false;
ret = snd_vendor_set_pcm_connection(subs->dev, SOUND_PCM_OPEN,
direction);
@ -1204,6 +1207,11 @@ static int snd_usb_pcm_open(struct snd_pcm_substream *substream)
ret = snd_media_stream_init(subs, as->pcm, direction);
if (ret < 0)
snd_usb_autosuspend(subs->stream->chip);
trace_android_vh_sound_usb_support_cpu_suspend(subs->dev, direction, &is_support);
if (!ret && is_support)
snd_usb_autosuspend(subs->stream->chip);
return ret;
}
@ -1213,6 +1221,11 @@ static int snd_usb_pcm_close(struct snd_pcm_substream *substream)
struct snd_usb_stream *as = snd_pcm_substream_chip(substream);
struct snd_usb_substream *subs = &as->substream[direction];
int ret;
bool is_support = false;
trace_android_vh_sound_usb_support_cpu_suspend(subs->dev, direction, &is_support);
if (is_support)
snd_usb_autoresume(subs->stream->chip);
ret = snd_vendor_set_pcm_connection(subs->dev, SOUND_PCM_CLOSE,
direction);