mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-08 04:42:04 -04:00
Merge "Merge android11-5.4.61+ (874de1d) into msm-5.4"
This commit is contained in:
commit
c0d9738fcd
20 changed files with 5605 additions and 3055 deletions
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
|
|
@ -3,6 +3,7 @@
|
|||
add_timer_on
|
||||
add_uevent_var
|
||||
add_wait_queue
|
||||
add_wait_queue_exclusive
|
||||
adjust_managed_page_count
|
||||
alarm_cancel
|
||||
alarm_init
|
||||
|
|
@ -18,6 +19,7 @@
|
|||
amba_driver_register
|
||||
amba_driver_unregister
|
||||
anon_inode_getfd
|
||||
__arch_clear_user
|
||||
__arch_copy_from_user
|
||||
__arch_copy_in_user
|
||||
__arch_copy_to_user
|
||||
|
|
@ -34,6 +36,7 @@
|
|||
_bcd2bin
|
||||
bcmp
|
||||
_bin2bcd
|
||||
bin2hex
|
||||
bio_crypt_should_process
|
||||
__bitmap_clear
|
||||
__bitmap_parse
|
||||
|
|
@ -56,6 +59,7 @@
|
|||
bpf_trace_run6
|
||||
bpf_trace_run7
|
||||
bpf_trace_run9
|
||||
__break_lease
|
||||
build_skb
|
||||
bus_find_device
|
||||
bus_for_each_dev
|
||||
|
|
@ -78,9 +82,11 @@
|
|||
__cfg80211_alloc_event_skb
|
||||
__cfg80211_alloc_reply_skb
|
||||
cfg80211_chandef_create
|
||||
cfg80211_chandef_valid
|
||||
cfg80211_ch_switch_notify
|
||||
cfg80211_classify8021d
|
||||
cfg80211_connect_done
|
||||
cfg80211_conn_failed
|
||||
cfg80211_del_sta_sinfo
|
||||
cfg80211_disconnected
|
||||
cfg80211_external_auth_request
|
||||
|
|
@ -93,6 +99,7 @@
|
|||
cfg80211_new_sta
|
||||
cfg80211_put_bss
|
||||
cfg80211_ready_on_channel
|
||||
cfg80211_ref_bss
|
||||
cfg80211_remain_on_channel_expired
|
||||
cfg80211_roamed
|
||||
cfg80211_rx_mgmt
|
||||
|
|
@ -106,9 +113,13 @@
|
|||
__class_create
|
||||
class_create_file_ns
|
||||
class_destroy
|
||||
class_dev_iter_exit
|
||||
class_dev_iter_init
|
||||
class_dev_iter_next
|
||||
class_find_device
|
||||
__class_register
|
||||
class_unregister
|
||||
clear_inode
|
||||
clear_page
|
||||
clk_bulk_disable
|
||||
clk_bulk_enable
|
||||
|
|
@ -155,6 +166,7 @@
|
|||
config_ep_by_speed
|
||||
config_group_init_type_name
|
||||
console_lock
|
||||
console_stop
|
||||
console_trylock
|
||||
console_unlock
|
||||
__const_udelay
|
||||
|
|
@ -206,14 +218,18 @@
|
|||
csum_partial
|
||||
csum_tcpudp_nofold
|
||||
_ctype
|
||||
d_add
|
||||
dapm_pinctrl_event
|
||||
dapm_regulator_event
|
||||
datagram_poll
|
||||
d_drop
|
||||
deactivate_locked_super
|
||||
default_llseek
|
||||
default_wake_function
|
||||
delayed_work_timer_fn
|
||||
del_timer
|
||||
del_timer_sync
|
||||
dentry_open
|
||||
destroy_workqueue
|
||||
dev_alloc_name
|
||||
_dev_crit
|
||||
|
|
@ -311,6 +327,7 @@
|
|||
devm_request_threaded_irq
|
||||
devm_reset_control_array_get
|
||||
__devm_reset_control_get
|
||||
devm_rtc_allocate_device
|
||||
devm_rtc_device_register
|
||||
devm_snd_dmaengine_pcm_register
|
||||
devm_snd_soc_register_card
|
||||
|
|
@ -341,7 +358,10 @@
|
|||
devres_release
|
||||
dev_set_mac_address
|
||||
dev_set_name
|
||||
dev_vprintk_emit
|
||||
_dev_warn
|
||||
dget_parent
|
||||
d_instantiate
|
||||
disable_irq
|
||||
disable_irq_nosync
|
||||
disable_percpu_irq
|
||||
|
|
@ -394,6 +414,7 @@
|
|||
dma_free_attrs
|
||||
dma_get_slave_caps
|
||||
dma_get_slave_channel
|
||||
d_make_root
|
||||
dmam_alloc_attrs
|
||||
dma_mmap_attrs
|
||||
dma_pool_alloc
|
||||
|
|
@ -414,6 +435,7 @@
|
|||
down_trylock
|
||||
down_write
|
||||
d_path
|
||||
dput
|
||||
driver_find
|
||||
driver_find_device
|
||||
driver_register
|
||||
|
|
@ -465,10 +487,19 @@
|
|||
freq_qos_add_request
|
||||
freq_qos_remove_request
|
||||
freq_qos_update_request
|
||||
fs_kobj
|
||||
fsstack_copy_attr_all
|
||||
fwnode_property_present
|
||||
fwnode_property_read_u16_array
|
||||
generic_file_llseek
|
||||
generic_file_mmap
|
||||
generic_file_read_iter
|
||||
generic_file_splice_read
|
||||
generic_handle_irq
|
||||
generic_read_dir
|
||||
generic_shutdown_super
|
||||
genl_family_attrbuf
|
||||
genlmsg_multicast_allns
|
||||
genlmsg_put
|
||||
genl_register_family
|
||||
genl_unregister_family
|
||||
|
|
@ -542,6 +573,7 @@
|
|||
i2c_del_driver
|
||||
i2c_for_each_dev
|
||||
i2c_get_adapter
|
||||
i2c_new_device
|
||||
i2c_new_dummy
|
||||
i2c_put_adapter
|
||||
i2c_register_driver
|
||||
|
|
@ -564,13 +596,17 @@
|
|||
ieee80211_channel_to_freq_khz
|
||||
ieee80211_freq_khz_to_channel
|
||||
ieee80211_get_channel_khz
|
||||
iget5_locked
|
||||
ignore_console_lock_warning
|
||||
ihold
|
||||
iio_channel_get
|
||||
iio_channel_release
|
||||
iio_convert_raw_to_processed
|
||||
iio_device_alloc
|
||||
iio_device_free
|
||||
__iio_device_register
|
||||
iio_device_unregister
|
||||
iio_get_channel_type
|
||||
iio_read_channel_processed
|
||||
iio_read_channel_raw
|
||||
in4_pton
|
||||
|
|
@ -582,6 +618,8 @@
|
|||
init_timer_key
|
||||
init_wait_entry
|
||||
__init_waitqueue_head
|
||||
inode_init_once
|
||||
inode_init_owner
|
||||
input_allocate_device
|
||||
input_event
|
||||
input_free_device
|
||||
|
|
@ -639,6 +677,7 @@
|
|||
iounmap
|
||||
__iowrite32_copy
|
||||
ip_send_check
|
||||
iput
|
||||
__irq_alloc_descs
|
||||
irq_create_mapping
|
||||
__irq_domain_add
|
||||
|
|
@ -664,6 +703,7 @@
|
|||
irq_to_desc
|
||||
irq_work_queue
|
||||
is_console_locked
|
||||
iterate_dir
|
||||
jiffies
|
||||
jiffies_64
|
||||
jiffies_64_to_clock_t
|
||||
|
|
@ -673,7 +713,9 @@
|
|||
kasprintf
|
||||
kernel_kobj
|
||||
kernel_read
|
||||
kernel_restart
|
||||
kernel_write
|
||||
kern_path
|
||||
keyslot_manager_create_passthrough
|
||||
keyslot_manager_private
|
||||
__kfifo_alloc
|
||||
|
|
@ -752,10 +794,16 @@
|
|||
llist_add_batch
|
||||
__local_bh_enable_ip
|
||||
__lock_buffer
|
||||
lockref_get
|
||||
lock_rename
|
||||
lock_sock_nested
|
||||
lookup_one_len
|
||||
loops_per_jiffy
|
||||
LZ4_decompress_safe
|
||||
map_vm_area
|
||||
match_int
|
||||
match_string
|
||||
match_token
|
||||
media_create_intf_link
|
||||
media_create_pad_link
|
||||
media_device_register_entity
|
||||
|
|
@ -841,6 +889,7 @@
|
|||
no_llseek
|
||||
nonseekable_open
|
||||
noop_llseek
|
||||
notify_change
|
||||
nr_cpu_ids
|
||||
nr_irqs
|
||||
nsecs_to_jiffies
|
||||
|
|
@ -916,6 +965,7 @@
|
|||
of_usb_get_phy_mode
|
||||
of_usb_host_tpl_support
|
||||
oops_in_progress
|
||||
pagecache_get_page
|
||||
panic
|
||||
panic_notifier_list
|
||||
param_array_ops
|
||||
|
|
@ -929,6 +979,8 @@
|
|||
param_ops_ullong
|
||||
param_ops_ulong
|
||||
param_set_uint
|
||||
path_get
|
||||
path_put
|
||||
pci_alloc_irq_vectors_affinity
|
||||
pci_bus_type
|
||||
pci_d3cold_disable
|
||||
|
|
@ -1121,6 +1173,7 @@
|
|||
register_chrdev_region
|
||||
register_console
|
||||
register_die_notifier
|
||||
register_filesystem
|
||||
register_inet6addr_notifier
|
||||
register_inetaddr_notifier
|
||||
register_netdev
|
||||
|
|
@ -1177,13 +1230,17 @@
|
|||
reset_control_reset
|
||||
return_address
|
||||
rfkill_alloc
|
||||
rfkill_blocked
|
||||
rfkill_destroy
|
||||
rfkill_register
|
||||
rfkill_unregister
|
||||
rps_needed
|
||||
rtc_add_group
|
||||
rtc_class_close
|
||||
rtc_class_open
|
||||
rtc_read_time
|
||||
__rtc_register_device
|
||||
rtc_set_time
|
||||
rtc_time64_to_tm
|
||||
rtc_tm_to_time64
|
||||
rtc_update_irq
|
||||
|
|
@ -1211,6 +1268,7 @@
|
|||
seq_printf
|
||||
seq_puts
|
||||
seq_read
|
||||
set_anon_super
|
||||
set_cpus_allowed_ptr
|
||||
set_normalized_timespec64
|
||||
set_page_dirty_lock
|
||||
|
|
@ -1218,6 +1276,7 @@
|
|||
sg_alloc_table
|
||||
sg_alloc_table_from_pages
|
||||
sg_copy_to_buffer
|
||||
sget
|
||||
sg_free_table
|
||||
sg_init_one
|
||||
sg_init_table
|
||||
|
|
@ -1230,8 +1289,11 @@
|
|||
__sg_page_iter_start
|
||||
sg_pcopy_from_buffer
|
||||
sg_pcopy_to_buffer
|
||||
simple_getattr
|
||||
simple_open
|
||||
simple_read_from_buffer
|
||||
simple_setattr
|
||||
simple_statfs
|
||||
simple_strtol
|
||||
simple_strtoul
|
||||
simple_write_to_buffer
|
||||
|
|
@ -1301,6 +1363,7 @@
|
|||
snd_soc_dai_set_fmt
|
||||
snd_soc_dai_set_sysclk
|
||||
snd_soc_dai_set_tdm_slot
|
||||
snd_soc_dai_set_tristate
|
||||
snd_soc_dapm_add_routes
|
||||
snd_soc_dapm_disable_pin
|
||||
snd_soc_dapm_enable_pin
|
||||
|
|
@ -1369,6 +1432,8 @@
|
|||
sock_no_shutdown
|
||||
sock_no_socketpair
|
||||
sock_queue_rcv_skb
|
||||
__sock_recv_timestamp
|
||||
__sock_recv_wifi_status
|
||||
sock_register
|
||||
sock_unregister
|
||||
softnet_data
|
||||
|
|
@ -1412,11 +1477,13 @@
|
|||
strncat
|
||||
strncmp
|
||||
strncpy
|
||||
strndup_user
|
||||
strnlen
|
||||
strnstr
|
||||
strpbrk
|
||||
strrchr
|
||||
strsep
|
||||
strspn
|
||||
strstr
|
||||
submit_bh
|
||||
subsys_system_register
|
||||
|
|
@ -1425,6 +1492,7 @@
|
|||
__sync_dirty_buffer
|
||||
sync_file_create
|
||||
sync_file_get_fence
|
||||
sync_filesystem
|
||||
synchronize_irq
|
||||
synchronize_rcu
|
||||
syscon_regmap_lookup_by_phandle
|
||||
|
|
@ -1481,6 +1549,7 @@
|
|||
__tracepoint_android_vh_is_fpsimd_save
|
||||
__tracepoint_device_pm_callback_end
|
||||
__tracepoint_device_pm_callback_start
|
||||
__tracepoint_gpu_mem_total
|
||||
__tracepoint_pelt_cfs_tp
|
||||
tracepoint_probe_register
|
||||
__tracepoint_suspend_resume
|
||||
|
|
@ -1490,6 +1559,7 @@
|
|||
__trace_puts
|
||||
trace_raw_output_prep
|
||||
trace_seq_printf
|
||||
truncate_inode_pages
|
||||
try_module_get
|
||||
__tty_alloc_driver
|
||||
tty_flip_buffer_push
|
||||
|
|
@ -1529,14 +1599,19 @@
|
|||
ufshcd_dme_get_attr
|
||||
ufshcd_dme_set_attr
|
||||
ufshcd_pltfrm_init
|
||||
ufshcd_query_descriptor_retry
|
||||
ufshcd_remove
|
||||
ufshcd_shutdown
|
||||
ufshcd_system_resume
|
||||
ufshcd_system_suspend
|
||||
ufshcd_wb_ctrl
|
||||
unlock_new_inode
|
||||
unlock_page
|
||||
unlock_rename
|
||||
unmap_mapping_range
|
||||
__unregister_chrdev
|
||||
unregister_chrdev_region
|
||||
unregister_filesystem
|
||||
unregister_inet6addr_notifier
|
||||
unregister_inetaddr_notifier
|
||||
unregister_netdev
|
||||
|
|
@ -1642,6 +1717,7 @@
|
|||
usb_unregister_notify
|
||||
usb_wakeup_notification
|
||||
__usecs_to_jiffies
|
||||
user_path_at_empty
|
||||
usleep_range
|
||||
v4l2_ctrl_handler_free
|
||||
v4l2_ctrl_handler_init_class
|
||||
|
|
@ -1692,9 +1768,20 @@
|
|||
vb2_streamon
|
||||
vb2_wait_for_all_buffers
|
||||
vfree
|
||||
vfs_create
|
||||
vfs_fallocate
|
||||
vfs_fsync
|
||||
vfs_getattr
|
||||
vfs_getxattr
|
||||
vfs_link
|
||||
vfs_listxattr
|
||||
vfs_llseek
|
||||
vfs_mkdir
|
||||
vfs_rename
|
||||
vfs_rmdir
|
||||
vfs_setxattr
|
||||
vfs_statx
|
||||
vfs_unlink
|
||||
video_devdata
|
||||
video_device_alloc
|
||||
video_device_release
|
||||
|
|
@ -1703,6 +1790,7 @@
|
|||
video_unregister_device
|
||||
vmalloc
|
||||
vmalloc_to_page
|
||||
vmalloc_to_pfn
|
||||
vmalloc_user
|
||||
vmap
|
||||
vmemmap
|
||||
|
|
@ -1712,6 +1800,7 @@
|
|||
vm_map_pages
|
||||
vm_map_ram
|
||||
vm_unmap_ram
|
||||
vprintk_emit
|
||||
vscnprintf
|
||||
vsnprintf
|
||||
vsprintf
|
||||
|
|
@ -1724,12 +1813,14 @@
|
|||
wait_for_completion_timeout
|
||||
__wait_on_buffer
|
||||
__wake_up
|
||||
__wake_up_locked_key
|
||||
wake_up_process
|
||||
wakeup_source_add
|
||||
wakeup_source_create
|
||||
wakeup_source_destroy
|
||||
wakeup_source_register
|
||||
wakeup_source_unregister
|
||||
__wake_up_sync
|
||||
__warn_printk
|
||||
watchdog_init_timeout
|
||||
watchdog_register_device
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load diff
|
|
@ -254,6 +254,7 @@
|
|||
cpufreq_freq_attr_scaling_boost_freqs
|
||||
cpufreq_generic_attr
|
||||
cpufreq_generic_frequency_table_verify
|
||||
cpufreq_get_policy
|
||||
cpufreq_quick_get_max
|
||||
cpufreq_register_driver
|
||||
cpufreq_register_notifier
|
||||
|
|
@ -872,6 +873,7 @@
|
|||
find_next_zero_bit
|
||||
find_snd_usb_substream
|
||||
find_vma
|
||||
find_vpid
|
||||
finish_wait
|
||||
firmware_request_nowarn
|
||||
flow_keys_basic_dissector
|
||||
|
|
@ -956,6 +958,7 @@
|
|||
get_random_bytes
|
||||
get_random_u32
|
||||
__get_task_comm
|
||||
get_task_pid
|
||||
get_tree_single
|
||||
get_unmapped_area
|
||||
get_unused_fd_flags
|
||||
|
|
@ -1668,6 +1671,7 @@
|
|||
phy_start
|
||||
phy_stop
|
||||
physvirt_offset
|
||||
pid_task
|
||||
pinconf_generic_dt_node_to_map
|
||||
pinctrl_dev_get_drvdata
|
||||
pinctrl_force_default
|
||||
|
|
@ -1775,6 +1779,7 @@
|
|||
put_device
|
||||
put_disk
|
||||
__put_page
|
||||
put_pid
|
||||
__put_task_struct
|
||||
put_unused_fd
|
||||
put_vaddr_frames
|
||||
|
|
@ -1979,6 +1984,7 @@
|
|||
sched_clock
|
||||
sched_setattr
|
||||
sched_setscheduler
|
||||
sched_setscheduler_nocheck
|
||||
schedule
|
||||
schedule_timeout
|
||||
schedule_timeout_interruptible
|
||||
|
|
|
|||
|
|
@ -16,6 +16,10 @@
|
|||
regcache_drop_region
|
||||
snd_soc_dapm_del_routes
|
||||
|
||||
# required by tfa98xx_dlkm.ko
|
||||
device_remove_bin_file
|
||||
snd_pcm_hw_constraint_mask64
|
||||
|
||||
# required by q6_dlkm.ko
|
||||
down_interruptible
|
||||
__kfifo_alloc
|
||||
|
|
|
|||
|
|
@ -606,6 +606,7 @@ endchoice
|
|||
config CFI_CLANG
|
||||
bool "Use Clang's Control Flow Integrity (CFI)"
|
||||
depends on LTO_CLANG && KALLSYMS
|
||||
depends on !GCOV_KERNEL
|
||||
help
|
||||
This option enables Clang's Control Flow Integrity (CFI), which adds
|
||||
runtime checking for indirect function calls.
|
||||
|
|
|
|||
|
|
@ -68,6 +68,7 @@ CONFIG_CPU_IDLE=y
|
|||
CONFIG_ARM_CPUIDLE=y
|
||||
CONFIG_ARM_PSCI_CPUIDLE=y
|
||||
CONFIG_CPU_FREQ=y
|
||||
CONFIG_CPU_FREQ_STAT=y
|
||||
CONFIG_CPU_FREQ_TIMES=y
|
||||
CONFIG_CPU_FREQ_DEFAULT_GOV_SCHEDUTIL=y
|
||||
CONFIG_CPU_FREQ_GOV_POWERSAVE=y
|
||||
|
|
@ -228,8 +229,10 @@ CONFIG_PCI=y
|
|||
CONFIG_PCIEPORTBUS=y
|
||||
# CONFIG_PCIEAER is not set
|
||||
CONFIG_PCI_HOST_GENERIC=y
|
||||
CONFIG_PCIE_DW_PLAT_EP=y
|
||||
CONFIG_PCIE_QCOM=y
|
||||
CONFIG_PCIE_KIRIN=y
|
||||
CONFIG_PCI_ENDPOINT=y
|
||||
CONFIG_FW_LOADER_USER_HELPER=y
|
||||
CONFIG_FW_LOADER_USER_HELPER_FALLBACK=y
|
||||
# CONFIG_FW_CACHE is not set
|
||||
|
|
@ -340,10 +343,13 @@ CONFIG_POWER_AVS=y
|
|||
CONFIG_POWER_RESET_HISI=y
|
||||
# CONFIG_HWMON is not set
|
||||
CONFIG_THERMAL=y
|
||||
CONFIG_THERMAL_STATISTICS=y
|
||||
CONFIG_THERMAL_WRITABLE_TRIPS=y
|
||||
CONFIG_THERMAL_GOV_USER_SPACE=y
|
||||
CONFIG_THERMAL_GOV_POWER_ALLOCATOR=y
|
||||
CONFIG_CPU_THERMAL=y
|
||||
CONFIG_DEVFREQ_THERMAL=y
|
||||
CONFIG_THERMAL_EMULATION=y
|
||||
CONFIG_WATCHDOG=y
|
||||
CONFIG_WATCHDOG_CORE=y
|
||||
CONFIG_MFD_ACT8945A=y
|
||||
|
|
@ -441,6 +447,7 @@ CONFIG_HWSPINLOCK=y
|
|||
CONFIG_MTK_TIMER=y
|
||||
CONFIG_MAILBOX=y
|
||||
CONFIG_IOMMU_LIMIT_IOVA_ALIGNMENT=y
|
||||
CONFIG_IOMMU_IO_PGTABLE_ARMV7S=y
|
||||
CONFIG_REMOTEPROC=y
|
||||
CONFIG_RPMSG_CHAR=y
|
||||
CONFIG_DEVFREQ_GOV_PERFORMANCE=y
|
||||
|
|
|
|||
|
|
@ -47,6 +47,7 @@ CONFIG_SLAB_FREELIST_HARDENED=y
|
|||
CONFIG_SHUFFLE_PAGE_ALLOCATOR=y
|
||||
CONFIG_PROFILING=y
|
||||
CONFIG_SMP=y
|
||||
CONFIG_X86_X2APIC=y
|
||||
CONFIG_HYPERVISOR_GUEST=y
|
||||
CONFIG_PARAVIRT=y
|
||||
CONFIG_NR_CPUS=32
|
||||
|
|
@ -54,6 +55,7 @@ CONFIG_EFI=y
|
|||
CONFIG_PM_WAKELOCKS=y
|
||||
CONFIG_PM_WAKELOCKS_LIMIT=0
|
||||
# CONFIG_PM_WAKELOCKS_GC is not set
|
||||
CONFIG_CPU_FREQ_STAT=y
|
||||
CONFIG_CPU_FREQ_TIMES=y
|
||||
CONFIG_CPU_FREQ_DEFAULT_GOV_SCHEDUTIL=y
|
||||
CONFIG_CPU_FREQ_GOV_POWERSAVE=y
|
||||
|
|
@ -203,6 +205,8 @@ CONFIG_PCI=y
|
|||
CONFIG_PCIEPORTBUS=y
|
||||
# CONFIG_PCIEAER is not set
|
||||
CONFIG_PCI_MSI=y
|
||||
CONFIG_PCIE_DW_PLAT_EP=y
|
||||
CONFIG_PCI_ENDPOINT=y
|
||||
CONFIG_FW_LOADER_USER_HELPER=y
|
||||
CONFIG_FW_LOADER_USER_HELPER_FALLBACK=y
|
||||
# CONFIG_FW_CACHE is not set
|
||||
|
|
@ -291,8 +295,13 @@ CONFIG_HPET=y
|
|||
CONFIG_SPI=y
|
||||
CONFIG_GPIOLIB=y
|
||||
# CONFIG_HWMON is not set
|
||||
CONFIG_THERMAL_STATISTICS=y
|
||||
CONFIG_THERMAL_WRITABLE_TRIPS=y
|
||||
CONFIG_THERMAL_GOV_USER_SPACE=y
|
||||
CONFIG_THERMAL_GOV_POWER_ALLOCATOR=y
|
||||
CONFIG_CPU_THERMAL=y
|
||||
CONFIG_DEVFREQ_THERMAL=y
|
||||
CONFIG_THERMAL_EMULATION=y
|
||||
# CONFIG_X86_PKG_TEMP_THERMAL is not set
|
||||
CONFIG_WATCHDOG=y
|
||||
CONFIG_WATCHDOG_CORE=y
|
||||
|
|
|
|||
|
|
@ -230,7 +230,7 @@ static struct binder_transaction_log_entry *binder_transaction_log_add(
|
|||
struct binder_work {
|
||||
struct list_head entry;
|
||||
|
||||
enum {
|
||||
enum binder_work_type {
|
||||
BINDER_WORK_TRANSACTION = 1,
|
||||
BINDER_WORK_TRANSACTION_COMPLETE,
|
||||
BINDER_WORK_RETURN_ERROR,
|
||||
|
|
@ -917,27 +917,6 @@ static struct binder_work *binder_dequeue_work_head_ilocked(
|
|||
return w;
|
||||
}
|
||||
|
||||
/**
|
||||
* binder_dequeue_work_head() - Dequeues the item at head of list
|
||||
* @proc: binder_proc associated with list
|
||||
* @list: list to dequeue head
|
||||
*
|
||||
* Removes the head of the list if there are items on the list
|
||||
*
|
||||
* Return: pointer dequeued binder_work, NULL if list was empty
|
||||
*/
|
||||
static struct binder_work *binder_dequeue_work_head(
|
||||
struct binder_proc *proc,
|
||||
struct list_head *list)
|
||||
{
|
||||
struct binder_work *w;
|
||||
|
||||
binder_inner_proc_lock(proc);
|
||||
w = binder_dequeue_work_head_ilocked(list);
|
||||
binder_inner_proc_unlock(proc);
|
||||
return w;
|
||||
}
|
||||
|
||||
static void
|
||||
binder_defer_work(struct binder_proc *proc, enum binder_deferred_state defer);
|
||||
static void binder_free_thread(struct binder_thread *thread);
|
||||
|
|
@ -4769,13 +4748,17 @@ static void binder_release_work(struct binder_proc *proc,
|
|||
struct list_head *list)
|
||||
{
|
||||
struct binder_work *w;
|
||||
enum binder_work_type wtype;
|
||||
|
||||
while (1) {
|
||||
w = binder_dequeue_work_head(proc, list);
|
||||
binder_inner_proc_lock(proc);
|
||||
w = binder_dequeue_work_head_ilocked(list);
|
||||
wtype = w ? w->type : 0;
|
||||
binder_inner_proc_unlock(proc);
|
||||
if (!w)
|
||||
return;
|
||||
|
||||
switch (w->type) {
|
||||
switch (wtype) {
|
||||
case BINDER_WORK_TRANSACTION: {
|
||||
struct binder_transaction *t;
|
||||
|
||||
|
|
@ -4809,9 +4792,11 @@ static void binder_release_work(struct binder_proc *proc,
|
|||
kfree(death);
|
||||
binder_stats_deleted(BINDER_STAT_DEATH);
|
||||
} break;
|
||||
case BINDER_WORK_NODE:
|
||||
break;
|
||||
default:
|
||||
pr_err("unexpected work type, %d, not freed\n",
|
||||
w->type);
|
||||
wtype);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -62,3 +62,4 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_printk_store);
|
|||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_show_regs);
|
||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_wq_lockup_pool);
|
||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_sysrq_crash);
|
||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_find_busiest_group);
|
||||
|
|
@ -50,20 +50,26 @@
|
|||
*/
|
||||
#define ARM_V7S_ADDR_BITS 32
|
||||
#define _ARM_V7S_LVL_BITS(lvl) (16 - (lvl) * 4)
|
||||
/* MediaTek: totally 34bits, 14bits at lvl1 and 8bits at lvl2. */
|
||||
#define _ARM_V7S_LVL_BITS_MTK(lvl) (20 - (lvl) * 6)
|
||||
#define ARM_V7S_LVL_SHIFT(lvl) (ARM_V7S_ADDR_BITS - (4 + 8 * (lvl)))
|
||||
#define ARM_V7S_TABLE_SHIFT 10
|
||||
|
||||
#define ARM_V7S_PTES_PER_LVL(lvl) (1 << _ARM_V7S_LVL_BITS(lvl))
|
||||
#define ARM_V7S_TABLE_SIZE(lvl) \
|
||||
(ARM_V7S_PTES_PER_LVL(lvl) * sizeof(arm_v7s_iopte))
|
||||
#define ARM_V7S_PTES_PER_LVL(lvl, cfg) ({ \
|
||||
!arm_v7s_is_mtk_enabled(cfg) ? \
|
||||
(1 << _ARM_V7S_LVL_BITS(lvl)) : (1 << _ARM_V7S_LVL_BITS_MTK(lvl));\
|
||||
})
|
||||
|
||||
#define ARM_V7S_TABLE_SIZE(lvl, cfg) \
|
||||
(ARM_V7S_PTES_PER_LVL(lvl, cfg) * sizeof(arm_v7s_iopte))
|
||||
|
||||
#define ARM_V7S_BLOCK_SIZE(lvl) (1UL << ARM_V7S_LVL_SHIFT(lvl))
|
||||
#define ARM_V7S_LVL_MASK(lvl) ((u32)(~0U << ARM_V7S_LVL_SHIFT(lvl)))
|
||||
#define ARM_V7S_TABLE_MASK ((u32)(~0U << ARM_V7S_TABLE_SHIFT))
|
||||
#define _ARM_V7S_IDX_MASK(lvl) (ARM_V7S_PTES_PER_LVL(lvl) - 1)
|
||||
#define ARM_V7S_LVL_IDX(addr, lvl) ({ \
|
||||
#define _ARM_V7S_IDX_MASK(lvl, cfg) (ARM_V7S_PTES_PER_LVL(lvl, cfg) - 1)
|
||||
#define ARM_V7S_LVL_IDX(addr, lvl, cfg) ({ \
|
||||
int _l = lvl; \
|
||||
((u32)(addr) >> ARM_V7S_LVL_SHIFT(_l)) & _ARM_V7S_IDX_MASK(_l); \
|
||||
((addr) >> ARM_V7S_LVL_SHIFT(_l)) & _ARM_V7S_IDX_MASK(_l, cfg); \
|
||||
})
|
||||
|
||||
/*
|
||||
|
|
@ -112,9 +118,10 @@
|
|||
#define ARM_V7S_TEX_MASK 0x7
|
||||
#define ARM_V7S_ATTR_TEX(val) (((val) & ARM_V7S_TEX_MASK) << ARM_V7S_TEX_SHIFT)
|
||||
|
||||
/* MediaTek extend the two bits for PA 32bit/33bit */
|
||||
/* MediaTek extend the bits below for PA 32bit/33bit/34bit */
|
||||
#define ARM_V7S_ATTR_MTK_PA_BIT32 BIT(9)
|
||||
#define ARM_V7S_ATTR_MTK_PA_BIT33 BIT(4)
|
||||
#define ARM_V7S_ATTR_MTK_PA_BIT34 BIT(5)
|
||||
|
||||
/* *well, except for TEX on level 2 large pages, of course :( */
|
||||
#define ARM_V7S_CONT_PAGE_TEX_SHIFT 6
|
||||
|
|
@ -196,6 +203,8 @@ static arm_v7s_iopte paddr_to_iopte(phys_addr_t paddr, int lvl,
|
|||
pte |= ARM_V7S_ATTR_MTK_PA_BIT32;
|
||||
if (paddr & BIT_ULL(33))
|
||||
pte |= ARM_V7S_ATTR_MTK_PA_BIT33;
|
||||
if (paddr & BIT_ULL(34))
|
||||
pte |= ARM_V7S_ATTR_MTK_PA_BIT34;
|
||||
return pte;
|
||||
}
|
||||
|
||||
|
|
@ -220,6 +229,8 @@ static phys_addr_t iopte_to_paddr(arm_v7s_iopte pte, int lvl,
|
|||
paddr |= BIT_ULL(32);
|
||||
if (pte & ARM_V7S_ATTR_MTK_PA_BIT33)
|
||||
paddr |= BIT_ULL(33);
|
||||
if (pte & ARM_V7S_ATTR_MTK_PA_BIT34)
|
||||
paddr |= BIT_ULL(34);
|
||||
return paddr;
|
||||
}
|
||||
|
||||
|
|
@ -236,7 +247,7 @@ static void *__arm_v7s_alloc_table(int lvl, gfp_t gfp,
|
|||
struct device *dev = cfg->iommu_dev;
|
||||
phys_addr_t phys;
|
||||
dma_addr_t dma;
|
||||
size_t size = ARM_V7S_TABLE_SIZE(lvl);
|
||||
size_t size = ARM_V7S_TABLE_SIZE(lvl, cfg);
|
||||
void *table = NULL;
|
||||
|
||||
if (lvl == 1)
|
||||
|
|
@ -282,7 +293,7 @@ static void __arm_v7s_free_table(void *table, int lvl,
|
|||
{
|
||||
struct io_pgtable_cfg *cfg = &data->iop.cfg;
|
||||
struct device *dev = cfg->iommu_dev;
|
||||
size_t size = ARM_V7S_TABLE_SIZE(lvl);
|
||||
size_t size = ARM_V7S_TABLE_SIZE(lvl, cfg);
|
||||
|
||||
if (!cfg->coherent_walk)
|
||||
dma_unmap_single(dev, __arm_v7s_dma_addr(table), size,
|
||||
|
|
@ -426,7 +437,7 @@ static int arm_v7s_init_pte(struct arm_v7s_io_pgtable *data,
|
|||
arm_v7s_iopte *tblp;
|
||||
size_t sz = ARM_V7S_BLOCK_SIZE(lvl);
|
||||
|
||||
tblp = ptep - ARM_V7S_LVL_IDX(iova, lvl);
|
||||
tblp = ptep - ARM_V7S_LVL_IDX(iova, lvl, cfg);
|
||||
if (WARN_ON(__arm_v7s_unmap(data, NULL, iova + i * sz,
|
||||
sz, lvl, tblp) != sz))
|
||||
return -EINVAL;
|
||||
|
|
@ -479,7 +490,7 @@ static int __arm_v7s_map(struct arm_v7s_io_pgtable *data, unsigned long iova,
|
|||
int num_entries = size >> ARM_V7S_LVL_SHIFT(lvl);
|
||||
|
||||
/* Find our entry at the current level */
|
||||
ptep += ARM_V7S_LVL_IDX(iova, lvl);
|
||||
ptep += ARM_V7S_LVL_IDX(iova, lvl, cfg);
|
||||
|
||||
/* If we can install a leaf entry at this level, then do so */
|
||||
if (num_entries)
|
||||
|
|
@ -552,7 +563,7 @@ static void arm_v7s_free_pgtable(struct io_pgtable *iop)
|
|||
struct arm_v7s_io_pgtable *data = io_pgtable_to_data(iop);
|
||||
int i;
|
||||
|
||||
for (i = 0; i < ARM_V7S_PTES_PER_LVL(1); i++) {
|
||||
for (i = 0; i < ARM_V7S_PTES_PER_LVL(1, &data->iop.cfg); i++) {
|
||||
arm_v7s_iopte pte = data->pgd[i];
|
||||
|
||||
if (ARM_V7S_PTE_IS_TABLE(pte, 1))
|
||||
|
|
@ -604,9 +615,9 @@ static size_t arm_v7s_split_blk_unmap(struct arm_v7s_io_pgtable *data,
|
|||
if (!tablep)
|
||||
return 0; /* Bytes unmapped */
|
||||
|
||||
num_ptes = ARM_V7S_PTES_PER_LVL(2);
|
||||
num_ptes = ARM_V7S_PTES_PER_LVL(2, cfg);
|
||||
num_entries = size >> ARM_V7S_LVL_SHIFT(2);
|
||||
unmap_idx = ARM_V7S_LVL_IDX(iova, 2);
|
||||
unmap_idx = ARM_V7S_LVL_IDX(iova, 2, cfg);
|
||||
|
||||
pte = arm_v7s_prot_to_pte(arm_v7s_pte_to_prot(blk_pte, 1), 2, cfg);
|
||||
if (num_entries > 1)
|
||||
|
|
@ -648,7 +659,7 @@ static size_t __arm_v7s_unmap(struct arm_v7s_io_pgtable *data,
|
|||
if (WARN_ON(lvl > 2))
|
||||
return 0;
|
||||
|
||||
idx = ARM_V7S_LVL_IDX(iova, lvl);
|
||||
idx = ARM_V7S_LVL_IDX(iova, lvl, &iop->cfg);
|
||||
ptep += idx;
|
||||
do {
|
||||
pte[i] = READ_ONCE(ptep[i]);
|
||||
|
|
@ -719,7 +730,7 @@ static size_t arm_v7s_unmap(struct io_pgtable_ops *ops, unsigned long iova,
|
|||
{
|
||||
struct arm_v7s_io_pgtable *data = io_pgtable_ops_to_data(ops);
|
||||
|
||||
if (WARN_ON(upper_32_bits(iova)))
|
||||
if (WARN_ON(iova >= (1ULL << data->iop.cfg.ias)))
|
||||
return 0;
|
||||
|
||||
return __arm_v7s_unmap(data, gather, iova, size, 1, data->pgd);
|
||||
|
|
@ -734,7 +745,7 @@ static phys_addr_t arm_v7s_iova_to_phys(struct io_pgtable_ops *ops,
|
|||
u32 mask;
|
||||
|
||||
do {
|
||||
ptep += ARM_V7S_LVL_IDX(iova, ++lvl);
|
||||
ptep += ARM_V7S_LVL_IDX(iova, ++lvl, &data->iop.cfg);
|
||||
pte = READ_ONCE(*ptep);
|
||||
ptep = iopte_deref(pte, lvl, data);
|
||||
} while (ARM_V7S_PTE_IS_TABLE(pte, lvl));
|
||||
|
|
@ -753,10 +764,10 @@ static struct io_pgtable *arm_v7s_alloc_pgtable(struct io_pgtable_cfg *cfg,
|
|||
{
|
||||
struct arm_v7s_io_pgtable *data;
|
||||
|
||||
if (cfg->ias > ARM_V7S_ADDR_BITS)
|
||||
if (cfg->ias > (arm_v7s_is_mtk_enabled(cfg) ? 34 : ARM_V7S_ADDR_BITS))
|
||||
return NULL;
|
||||
|
||||
if (cfg->oas > (arm_v7s_is_mtk_enabled(cfg) ? 34 : ARM_V7S_ADDR_BITS))
|
||||
if (cfg->oas > (arm_v7s_is_mtk_enabled(cfg) ? 35 : ARM_V7S_ADDR_BITS))
|
||||
return NULL;
|
||||
|
||||
if (cfg->quirks & ~(IO_PGTABLE_QUIRK_ARM_NS |
|
||||
|
|
@ -777,8 +788,8 @@ static struct io_pgtable *arm_v7s_alloc_pgtable(struct io_pgtable_cfg *cfg,
|
|||
|
||||
spin_lock_init(&data->split_lock);
|
||||
data->l2_tables = kmem_cache_create("io-pgtable_armv7s_l2",
|
||||
ARM_V7S_TABLE_SIZE(2),
|
||||
ARM_V7S_TABLE_SIZE(2),
|
||||
ARM_V7S_TABLE_SIZE(2, cfg),
|
||||
ARM_V7S_TABLE_SIZE(2, cfg),
|
||||
ARM_V7S_TABLE_SLAB_FLAGS, NULL);
|
||||
if (!data->l2_tables)
|
||||
goto out_free_data;
|
||||
|
|
|
|||
|
|
@ -18,6 +18,7 @@ void dw_pcie_ep_linkup(struct dw_pcie_ep *ep)
|
|||
|
||||
pci_epc_linkup(epc);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(dw_pcie_ep_linkup);
|
||||
|
||||
static void __dw_pcie_ep_reset_bar(struct dw_pcie *pci, enum pci_barno bar,
|
||||
int flags)
|
||||
|
|
@ -607,3 +608,4 @@ int dw_pcie_ep_init(struct dw_pcie_ep *ep)
|
|||
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(dw_pcie_ep_init);
|
||||
|
|
|
|||
|
|
@ -100,8 +100,8 @@ struct io_pgtable_cfg {
|
|||
* TLB maintenance when mapping as well as when unmapping.
|
||||
*
|
||||
* IO_PGTABLE_QUIRK_ARM_MTK_EXT: (ARM v7s format) MediaTek IOMMUs extend
|
||||
* to support up to 34 bits PA where the bit32 and bit33 are
|
||||
* encoded in the bit9 and bit4 of the PTE respectively.
|
||||
* to support up to 35 bits PA where the bit32, bit33 and bit34 are
|
||||
* encoded in the bit9, bit4 and bit5 of the PTE respectively.
|
||||
*
|
||||
* IO_PGTABLE_QUIRK_NON_STRICT: Skip issuing synchronous leaf TLBIs
|
||||
* on unmap, for DMA domains using the flush queue mechanism for
|
||||
|
|
|
|||
|
|
@ -346,6 +346,11 @@ struct klp_modinfo {
|
|||
};
|
||||
#endif
|
||||
|
||||
struct module_kabi_preserve_1 {
|
||||
u64 using_gplonly_symbols:1;
|
||||
u64 free:63;
|
||||
};
|
||||
|
||||
struct module {
|
||||
enum module_state state;
|
||||
|
||||
|
|
@ -515,7 +520,7 @@ struct module {
|
|||
struct error_injection_entry *ei_funcs;
|
||||
unsigned int num_ei_funcs;
|
||||
#endif
|
||||
ANDROID_KABI_RESERVE(1);
|
||||
ANDROID_KABI_USE(1, struct module_kabi_preserve_1 m1);
|
||||
ANDROID_KABI_RESERVE(2);
|
||||
ANDROID_KABI_RESERVE(3);
|
||||
ANDROID_KABI_RESERVE(4);
|
||||
|
|
@ -573,34 +578,14 @@ struct module *find_module(const char *name);
|
|||
struct symsearch {
|
||||
const struct kernel_symbol *start, *stop;
|
||||
const s32 *crcs;
|
||||
enum {
|
||||
enum mod_license {
|
||||
NOT_GPL_ONLY,
|
||||
GPL_ONLY,
|
||||
WILL_BE_GPL_ONLY,
|
||||
} licence;
|
||||
} license;
|
||||
bool unused;
|
||||
};
|
||||
|
||||
/*
|
||||
* Search for an exported symbol by name.
|
||||
*
|
||||
* Must be called with module_mutex held or preemption disabled.
|
||||
*/
|
||||
const struct kernel_symbol *find_symbol(const char *name,
|
||||
struct module **owner,
|
||||
const s32 **crc,
|
||||
bool gplok,
|
||||
bool warn);
|
||||
|
||||
/*
|
||||
* Walk the exported symbol table
|
||||
*
|
||||
* Must be called with module_mutex held or preemption disabled.
|
||||
*/
|
||||
bool each_symbol_section(bool (*fn)(const struct symsearch *arr,
|
||||
struct module *owner,
|
||||
void *data), void *data);
|
||||
|
||||
/* Returns 0 and fills in value, defined and namebuf, or -ERANGE if
|
||||
symnum out of range. */
|
||||
int module_get_kallsym(unsigned int symnum, unsigned long *value, char *type,
|
||||
|
|
@ -648,7 +633,6 @@ static inline void __module_get(struct module *module)
|
|||
#define symbol_put_addr(p) do { } while (0)
|
||||
|
||||
#endif /* CONFIG_MODULE_UNLOAD */
|
||||
int ref_module(struct module *a, struct module *b);
|
||||
|
||||
/* This is a #define so the string doesn't get put in every .o file */
|
||||
#define module_name(mod) \
|
||||
|
|
|
|||
|
|
@ -65,6 +65,11 @@ DECLARE_RESTRICTED_HOOK(android_rvh_set_user_nice,
|
|||
DECLARE_RESTRICTED_HOOK(android_rvh_setscheduler,
|
||||
TP_PROTO(struct task_struct *p),
|
||||
TP_ARGS(p), 1);
|
||||
|
||||
struct sched_group;
|
||||
DECLARE_RESTRICTED_HOOK(android_rvh_find_busiest_group,
|
||||
TP_PROTO(struct sched_group *busiest, struct rq *dst_rq, int *out_balance),
|
||||
TP_ARGS(busiest, dst_rq, out_balance), 1);
|
||||
#else
|
||||
#define trace_android_rvh_select_task_rq_fair(p, prev_cpu, sd_flag, wake_flags, new_cpu)
|
||||
#define trace_android_rvh_select_task_rq_rt(p, prev_cpu, sd_flag, wake_flags, new_cpu)
|
||||
|
|
@ -79,6 +84,7 @@ DECLARE_RESTRICTED_HOOK(android_rvh_setscheduler,
|
|||
#define trace_android_rvh_rtmutex_prepare_setprio(p, pi_task)
|
||||
#define trace_android_rvh_set_user_nice(p, nice)
|
||||
#define trace_android_rvh_setscheduler(p)
|
||||
#define trace_android_rvh_find_busiest_group(busiest, dst_rq, out_balance)
|
||||
#endif
|
||||
#endif /* _TRACE_HOOK_SCHED_H */
|
||||
/* This part must be outside protection */
|
||||
|
|
|
|||
|
|
@ -419,7 +419,7 @@ static bool each_symbol_in_section(const struct symsearch *arr,
|
|||
}
|
||||
|
||||
/* Returns true as soon as fn returns true, otherwise false. */
|
||||
bool each_symbol_section(bool (*fn)(const struct symsearch *arr,
|
||||
static bool each_symbol_section(bool (*fn)(const struct symsearch *arr,
|
||||
struct module *owner,
|
||||
void *data),
|
||||
void *data)
|
||||
|
|
@ -481,7 +481,6 @@ bool each_symbol_section(bool (*fn)(const struct symsearch *arr,
|
|||
}
|
||||
return false;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(each_symbol_section);
|
||||
|
||||
struct find_symbol_arg {
|
||||
/* Input */
|
||||
|
|
@ -493,6 +492,7 @@ struct find_symbol_arg {
|
|||
struct module *owner;
|
||||
const s32 *crc;
|
||||
const struct kernel_symbol *sym;
|
||||
enum mod_license license;
|
||||
};
|
||||
|
||||
static bool check_exported_symbol(const struct symsearch *syms,
|
||||
|
|
@ -502,9 +502,9 @@ static bool check_exported_symbol(const struct symsearch *syms,
|
|||
struct find_symbol_arg *fsa = data;
|
||||
|
||||
if (!fsa->gplok) {
|
||||
if (syms->licence == GPL_ONLY)
|
||||
if (syms->license == GPL_ONLY)
|
||||
return false;
|
||||
if (syms->licence == WILL_BE_GPL_ONLY && fsa->warn) {
|
||||
if (syms->license == WILL_BE_GPL_ONLY && fsa->warn) {
|
||||
pr_warn("Symbol %s is being used by a non-GPL module, "
|
||||
"which will not be allowed in the future\n",
|
||||
fsa->name);
|
||||
|
|
@ -526,6 +526,7 @@ static bool check_exported_symbol(const struct symsearch *syms,
|
|||
fsa->owner = owner;
|
||||
fsa->crc = symversion(syms->crcs, symnum);
|
||||
fsa->sym = &syms->start[symnum];
|
||||
fsa->license = syms->license;
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
@ -582,9 +583,10 @@ static bool find_exported_symbol_in_section(const struct symsearch *syms,
|
|||
|
||||
/* Find an exported symbol and return it, along with, (optional) crc and
|
||||
* (optional) module which owns it. Needs preempt disabled or module_mutex. */
|
||||
const struct kernel_symbol *find_symbol(const char *name,
|
||||
static const struct kernel_symbol *find_symbol(const char *name,
|
||||
struct module **owner,
|
||||
const s32 **crc,
|
||||
enum mod_license *license,
|
||||
bool gplok,
|
||||
bool warn)
|
||||
{
|
||||
|
|
@ -599,13 +601,14 @@ const struct kernel_symbol *find_symbol(const char *name,
|
|||
*owner = fsa.owner;
|
||||
if (crc)
|
||||
*crc = fsa.crc;
|
||||
if (license)
|
||||
*license = fsa.license;
|
||||
return fsa.sym;
|
||||
}
|
||||
|
||||
pr_debug("Failed to find symbol %s\n", name);
|
||||
return NULL;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(find_symbol);
|
||||
|
||||
/*
|
||||
* Search for module by name: must hold module_mutex (or preempt disabled
|
||||
|
|
@ -866,7 +869,7 @@ static int add_module_usage(struct module *a, struct module *b)
|
|||
}
|
||||
|
||||
/* Module a uses b: caller needs module_mutex() */
|
||||
int ref_module(struct module *a, struct module *b)
|
||||
static int ref_module(struct module *a, struct module *b)
|
||||
{
|
||||
int err;
|
||||
|
||||
|
|
@ -885,7 +888,6 @@ int ref_module(struct module *a, struct module *b)
|
|||
}
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(ref_module);
|
||||
|
||||
/* Clear the unload stuff of the module. */
|
||||
static void module_unload_free(struct module *mod)
|
||||
|
|
@ -1074,7 +1076,7 @@ void __symbol_put(const char *symbol)
|
|||
struct module *owner;
|
||||
|
||||
preempt_disable();
|
||||
if (!find_symbol(symbol, &owner, NULL, true, false))
|
||||
if (!find_symbol(symbol, &owner, NULL, NULL, true, false))
|
||||
BUG();
|
||||
module_put(owner);
|
||||
preempt_enable();
|
||||
|
|
@ -1165,11 +1167,10 @@ static inline void module_unload_free(struct module *mod)
|
|||
{
|
||||
}
|
||||
|
||||
int ref_module(struct module *a, struct module *b)
|
||||
static int ref_module(struct module *a, struct module *b)
|
||||
{
|
||||
return strong_try_module_get(b);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(ref_module);
|
||||
|
||||
static inline int module_unload_init(struct module *mod)
|
||||
{
|
||||
|
|
@ -1352,7 +1353,7 @@ static inline int check_modstruct_version(const struct load_info *info,
|
|||
* locking is necessary -- use preempt_disable() to placate lockdep.
|
||||
*/
|
||||
preempt_disable();
|
||||
if (!find_symbol("module_layout", NULL, &crc, true, false)) {
|
||||
if (!find_symbol("module_layout", NULL, &crc, NULL, true, false)) {
|
||||
preempt_enable();
|
||||
BUG();
|
||||
}
|
||||
|
|
@ -1426,6 +1427,24 @@ static int verify_namespace_is_imported(const struct load_info *info,
|
|||
return 0;
|
||||
}
|
||||
|
||||
static bool inherit_taint(struct module *mod, struct module *owner)
|
||||
{
|
||||
if (!owner || !test_bit(TAINT_PROPRIETARY_MODULE, &owner->taints))
|
||||
return true;
|
||||
|
||||
if (mod->m1.using_gplonly_symbols) {
|
||||
pr_err("%s: module using GPL-only symbols uses symbols from proprietary module %s.\n",
|
||||
mod->name, owner->name);
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!test_bit(TAINT_PROPRIETARY_MODULE, &mod->taints)) {
|
||||
pr_warn("%s: module uses symbols from proprietary module %s, inheriting taint.\n",
|
||||
mod->name, owner->name);
|
||||
set_bit(TAINT_PROPRIETARY_MODULE, &mod->taints);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
/* Resolve a symbol for this module. I.e. if we find one, record usage. */
|
||||
static const struct kernel_symbol *resolve_symbol(struct module *mod,
|
||||
|
|
@ -1436,6 +1455,7 @@ static const struct kernel_symbol *resolve_symbol(struct module *mod,
|
|||
struct module *owner;
|
||||
const struct kernel_symbol *sym;
|
||||
const s32 *crc;
|
||||
enum mod_license license;
|
||||
int err;
|
||||
|
||||
/*
|
||||
|
|
@ -1445,11 +1465,19 @@ static const struct kernel_symbol *resolve_symbol(struct module *mod,
|
|||
*/
|
||||
sched_annotate_sleep();
|
||||
mutex_lock(&module_mutex);
|
||||
sym = find_symbol(name, &owner, &crc,
|
||||
sym = find_symbol(name, &owner, &crc, &license,
|
||||
!(mod->taints & (1 << TAINT_PROPRIETARY_MODULE)), true);
|
||||
if (!sym)
|
||||
goto unlock;
|
||||
|
||||
if (license == GPL_ONLY)
|
||||
mod->m1.using_gplonly_symbols = true;
|
||||
|
||||
if (!inherit_taint(mod, owner)) {
|
||||
sym = NULL;
|
||||
goto getname;
|
||||
}
|
||||
|
||||
if (!check_version(info, name, mod, crc)) {
|
||||
sym = ERR_PTR(-EINVAL);
|
||||
goto getname;
|
||||
|
|
@ -2271,7 +2299,7 @@ void *__symbol_get(const char *symbol)
|
|||
const struct kernel_symbol *sym;
|
||||
|
||||
preempt_disable();
|
||||
sym = find_symbol(symbol, &owner, NULL, true, true);
|
||||
sym = find_symbol(symbol, &owner, NULL, NULL, true, true);
|
||||
if (sym && strong_try_module_get(owner))
|
||||
sym = NULL;
|
||||
preempt_enable();
|
||||
|
|
@ -2306,7 +2334,7 @@ static int verify_exported_symbols(struct module *mod)
|
|||
for (i = 0; i < ARRAY_SIZE(arr); i++) {
|
||||
for (s = arr[i].sym; s < arr[i].sym + arr[i].num; s++) {
|
||||
if (find_symbol(kernel_symbol_name(s), &owner, NULL,
|
||||
true, false)) {
|
||||
NULL, true, false)) {
|
||||
pr_err("%s: exports duplicate symbol %s"
|
||||
" (owned by %s)\n",
|
||||
mod->name, kernel_symbol_name(s),
|
||||
|
|
@ -4324,10 +4352,10 @@ int module_kallsyms_on_each_symbol(int (*fn)(void *, const char *,
|
|||
static void cfi_init(struct module *mod)
|
||||
{
|
||||
#ifdef CONFIG_CFI_CLANG
|
||||
rcu_read_lock();
|
||||
rcu_read_lock_sched();
|
||||
mod->cfi_check = (cfi_check_fn)find_kallsyms_symbol_value(mod,
|
||||
CFI_CHECK_FN_NAME);
|
||||
rcu_read_unlock();
|
||||
rcu_read_unlock_sched();
|
||||
cfi_module_add(mod, module_addr_min, module_addr_max);
|
||||
#endif
|
||||
}
|
||||
|
|
@ -4530,7 +4558,6 @@ struct module *__module_address(unsigned long addr)
|
|||
}
|
||||
return mod;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(__module_address);
|
||||
|
||||
/*
|
||||
* is_module_text_address - is this address inside module code?
|
||||
|
|
@ -4569,7 +4596,6 @@ struct module *__module_text_address(unsigned long addr)
|
|||
}
|
||||
return mod;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(__module_text_address);
|
||||
|
||||
/* Don't grab lock, we're oopsing. */
|
||||
void print_modules(void)
|
||||
|
|
|
|||
|
|
@ -3799,11 +3799,22 @@ util_est_dequeue(struct cfs_rq *cfs_rq, struct task_struct *p, bool task_sleep)
|
|||
if (ue.enqueued & UTIL_AVG_UNCHANGED)
|
||||
return;
|
||||
|
||||
/*
|
||||
* Reset EWMA on utilization increases, the moving average is used only
|
||||
* to smooth utilization decreases.
|
||||
*/
|
||||
ue.enqueued = (task_util(p) | UTIL_AVG_UNCHANGED);
|
||||
if (sched_feat(UTIL_EST_FASTUP)) {
|
||||
if (ue.ewma < ue.enqueued) {
|
||||
ue.ewma = ue.enqueued;
|
||||
goto done;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Skip update of task's estimated utilization when its EWMA is
|
||||
* already ~1% close to its last activation value.
|
||||
*/
|
||||
ue.enqueued = (task_util(p) | UTIL_AVG_UNCHANGED);
|
||||
last_ewma_diff = ue.enqueued - ue.ewma;
|
||||
if (within_margin(last_ewma_diff, (SCHED_CAPACITY_SCALE / 100)))
|
||||
return;
|
||||
|
|
@ -3836,6 +3847,7 @@ util_est_dequeue(struct cfs_rq *cfs_rq, struct task_struct *p, bool task_sleep)
|
|||
ue.ewma <<= UTIL_EST_WEIGHT_SHIFT;
|
||||
ue.ewma += last_ewma_diff;
|
||||
ue.ewma >>= UTIL_EST_WEIGHT_SHIFT;
|
||||
done:
|
||||
WRITE_ONCE(p->se.avg.util_est, ue);
|
||||
}
|
||||
|
||||
|
|
@ -9764,7 +9776,12 @@ static struct sched_group *find_busiest_group(struct lb_env *env)
|
|||
#ifdef CONFIG_SCHED_WALT
|
||||
if (rcu_dereference(rd->pd) && !sd_overutilized(env->sd)) {
|
||||
#else
|
||||
if (rcu_dereference(rd->pd) && !READ_ONCE(rd->overutilized)) {
|
||||
int out_balance = 1;
|
||||
|
||||
trace_android_rvh_find_busiest_group(sds.busiest, env->dst_rq,
|
||||
&out_balance);
|
||||
if (rcu_dereference(rd->pd) && !READ_ONCE(rd->overutilized)
|
||||
&& out_balance) {
|
||||
#endif
|
||||
int cpu_local, cpu_busiest;
|
||||
unsigned long capacity_local, capacity_busiest;
|
||||
|
|
|
|||
|
|
@ -94,3 +94,4 @@ SCHED_FEAT(UTIL_EST, true)
|
|||
* Request max frequency from schedutil whenever a RT task is running.
|
||||
*/
|
||||
SCHED_FEAT(SUGOV_RT_MAX_FREQ, false)
|
||||
SCHED_FEAT(UTIL_EST_FASTUP, true)
|
||||
|
|
|
|||
|
|
@ -529,6 +529,9 @@ static int find_secsym_ndx(unsigned const txtndx,
|
|||
if (txtndx == get_symindex(symp, symtab, symtab_shndx)
|
||||
/* avoid STB_WEAK */
|
||||
&& (STB_LOCAL == st_bind || STB_GLOBAL == st_bind)) {
|
||||
/* avoid file symbols */
|
||||
if (ELF_ST_TYPE(symp->st_info) == STT_FILE)
|
||||
continue;
|
||||
/* function symbols on ARM have quirks, avoid them */
|
||||
if (w2(ehdr->e_machine) == EM_ARM
|
||||
&& ELF_ST_TYPE(symp->st_info) == STT_FUNC)
|
||||
|
|
|
|||
Loading…
Reference in a new issue