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:
commit
63040ce8e9
@ -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 = [
|
||||
|
@ -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
|
||||
|
@ -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
@ -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
|
||||
|
@ -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
|
||||
|
145
android/abi_gki_aarch64_fips140
Normal file
145
android/abi_gki_aarch64_fips140
Normal 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
|
3
android/abi_gki_aarch64_moto
Normal file
3
android/abi_gki_aarch64_moto
Normal file
@ -0,0 +1,3 @@
|
||||
[abi_symbol_list]
|
||||
__traceiter_android_vh_tune_mmap_readaround
|
||||
__tracepoint_android_vh_tune_mmap_readaround
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
37
android/abi_gki_aarch64_transsion
Normal file
37
android/abi_gki_aarch64_transsion
Normal 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
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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;
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
@ -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);
|
||||
|
||||
|
@ -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
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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)
|
||||
{
|
||||
}
|
||||
|
@ -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;
|
||||
|
@ -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);
|
||||
|
||||
|
28
block/blk.h
28
block/blk.h
@ -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)
|
||||
{
|
||||
|
@ -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
|
||||
|
||||
|
@ -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
|
||||
|
@ -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);
|
||||
|
||||
|
@ -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);
|
||||
|
@ -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",
|
||||
|
@ -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);
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -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);
|
||||
|
@ -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(>ype, 0, sizeof(gtype));
|
||||
|
||||
/* Ask for default domain requirements of all devices in the group */
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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);
|
||||
|
@ -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;
|
||||
|
@ -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)
|
||||
|
@ -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 */
|
||||
|
@ -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)
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
||||
/*
|
||||
|
@ -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");
|
||||
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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,
|
||||
|
@ -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);
|
||||
|
@ -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,
|
||||
|
@ -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]);
|
||||
|
@ -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);
|
||||
|
197
fs/eventpoll.c
197
fs/eventpoll.c
@ -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) {
|
||||
|
@ -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
|
||||
*/
|
||||
|
@ -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,
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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,
|
||||
|
@ -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,
|
||||
|
@ -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);
|
||||
|
||||
|
@ -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;
|
||||
|
@ -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,
|
||||
|
@ -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);
|
||||
|
@ -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;
|
||||
|
||||
/*
|
||||
|
@ -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 */
|
||||
|
||||
|
@ -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);
|
||||
|
@ -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.
|
||||
*/
|
||||
|
@ -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 */
|
||||
|
@ -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,
|
||||
|
76
include/trace/hooks/delayacct.h
Normal file
76
include/trace/hooks/delayacct.h
Normal 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 */
|
@ -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>
|
||||
|
@ -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));
|
||||
|
18
include/trace/hooks/sound.h
Normal file
18
include/trace/hooks/sound.h
Normal 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>
|
@ -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
25
include/trace/hooks/usb.h
Normal 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>
|
@ -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
|
||||
|
@ -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);
|
||||
|
@ -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)
|
||||
¤t->delays->wpcopy_delay,
|
||||
¤t->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
|
||||
|
||||
|
@ -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(¤t->sighand->siglock);
|
||||
|
@ -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
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
|
||||
|
@ -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)
|
||||
{
|
||||
|
6
mm/cma.c
6
mm/cma.c
@ -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);
|
||||
|
@ -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);
|
||||
|
@ -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 {
|
||||
|
@ -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;
|
||||
|
@ -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
|
||||
|
@ -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",
|
||||
|
@ -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 */
|
||||
|
@ -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]));
|
||||
}
|
||||
|
||||
|
@ -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);
|
||||
|
||||
|
@ -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,
|
||||
|
@ -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.
|
||||
|
@ -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);
|
||||
|
Loading…
Reference in New Issue
Block a user