Merge branch 'android12-5.10' into android12-5.10-lts
Sync up with android12-5.10 for the following commits:b781144f8a
ANDROID: GKI: update xiaomi symbol list7ed18b3da9
ANDROID: GKI: Update symbols to symbol list70fb50176e
UPSTREAM: kasan, slub: reset tag when printing addressbd5c75ce7b
UPSTREAM: kasan, kmemleak: reset tags when scanning blockb683931b2a
ANDROID: gki_defconfig: set DEFAULT_MMAP_MIN_ADDR=32768c0cce1da8b
UPSTREAM: kasan, slub: reset tag when printing address3b6f980a85
UPSTREAM: KVM: arm64: Fix off-by-one in range_is_memory3649d38887
UPSTREAM: mm: fix the deadlock in finish_fault()09ec66de84
UPSTREAM: arm64: mte: fix restoration of GCR_EL1 from suspend1e8a0d84dc
UPSTREAM: firmware: arm_scmi: Avoid padding in sensor message structureea6f697c3d
UPSTREAM: media: s5p-mfc: Fix display delay control creation2f13bd8f39
UPSTREAM: software node: Handle software node injection to an existing device properly2f34733fae
UPSTREAM: usb: dwc3: Fix debugfs creation flowd42ca898a6
UPSTREAM: usb: dwc3: core: fix kernel panic when do reboot71710d40d9
UPSTREAM: kfence: use TASK_IDLE when awaiting allocation1ea718cd9e
UPSTREAM: regulator: scmi: Fix off-by-one for linear regulators .n_voltages settingbe7c2833df
UPSTREAM: clk: Skip clk provider registration when np is NULLf20cbf56db
FROMGIT: usb: typec: tcpm: Raise vdm_sm_running flag only when VDM SM is runningb58b8007b1
FROMGIT: usb: typec: tcpm: Fix VDMs sometimes not being forwarded to alt-mode drivers Note, takes the .xml file from the `android12-5.10` branch, will need to be updated again in a follow-on commit to pick up the missing symbol. Change-Id: Ic579951cb27d50feb2987cc91a3f58170562eed1 Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
This commit is contained in:
File diff suppressed because it is too large
Load Diff
@@ -26,6 +26,7 @@
|
|||||||
__arch_copy_from_user
|
__arch_copy_from_user
|
||||||
__arch_copy_in_user
|
__arch_copy_in_user
|
||||||
__arch_copy_to_user
|
__arch_copy_to_user
|
||||||
|
arch_mmap_rnd
|
||||||
arch_timer_read_counter
|
arch_timer_read_counter
|
||||||
argv_free
|
argv_free
|
||||||
argv_split
|
argv_split
|
||||||
@@ -70,9 +71,9 @@
|
|||||||
blocking_notifier_call_chain
|
blocking_notifier_call_chain
|
||||||
blocking_notifier_chain_register
|
blocking_notifier_chain_register
|
||||||
blocking_notifier_chain_unregister
|
blocking_notifier_chain_unregister
|
||||||
|
bpf_trace_run1
|
||||||
bpf_trace_run10
|
bpf_trace_run10
|
||||||
bpf_trace_run12
|
bpf_trace_run12
|
||||||
bpf_trace_run1
|
|
||||||
bpf_trace_run2
|
bpf_trace_run2
|
||||||
bpf_trace_run3
|
bpf_trace_run3
|
||||||
bpf_trace_run4
|
bpf_trace_run4
|
||||||
@@ -595,6 +596,7 @@
|
|||||||
get_pid_task
|
get_pid_task
|
||||||
get_random_bytes
|
get_random_bytes
|
||||||
get_random_u32
|
get_random_u32
|
||||||
|
get_random_u64
|
||||||
get_sg_io_hdr
|
get_sg_io_hdr
|
||||||
get_slabinfo
|
get_slabinfo
|
||||||
__get_task_comm
|
__get_task_comm
|
||||||
@@ -603,6 +605,7 @@
|
|||||||
get_unmapped_area
|
get_unmapped_area
|
||||||
get_unused_fd_flags
|
get_unused_fd_flags
|
||||||
get_user_pages
|
get_user_pages
|
||||||
|
get_user_pages_remote
|
||||||
gic_nonsecure_priorities
|
gic_nonsecure_priorities
|
||||||
gov_attr_set_init
|
gov_attr_set_init
|
||||||
gov_attr_set_put
|
gov_attr_set_put
|
||||||
@@ -771,6 +774,7 @@
|
|||||||
iounmap
|
iounmap
|
||||||
__iowrite32_copy
|
__iowrite32_copy
|
||||||
ipi_desc_get
|
ipi_desc_get
|
||||||
|
ip_route_me_harder
|
||||||
iput
|
iput
|
||||||
ipv6_find_hdr
|
ipv6_find_hdr
|
||||||
irq_chip_ack_parent
|
irq_chip_ack_parent
|
||||||
@@ -911,6 +915,7 @@
|
|||||||
ktime_get_mono_fast_ns
|
ktime_get_mono_fast_ns
|
||||||
ktime_get_real_seconds
|
ktime_get_real_seconds
|
||||||
ktime_get_real_ts64
|
ktime_get_real_ts64
|
||||||
|
ktime_get_with_offset
|
||||||
kvfree
|
kvfree
|
||||||
kvmalloc_node
|
kvmalloc_node
|
||||||
led_classdev_flash_register_ext
|
led_classdev_flash_register_ext
|
||||||
@@ -959,8 +964,8 @@
|
|||||||
mempool_free
|
mempool_free
|
||||||
mempool_free_slab
|
mempool_free_slab
|
||||||
memremap
|
memremap
|
||||||
memset64
|
|
||||||
memset
|
memset
|
||||||
|
memset64
|
||||||
__memset_io
|
__memset_io
|
||||||
memstart_addr
|
memstart_addr
|
||||||
memunmap
|
memunmap
|
||||||
@@ -995,12 +1000,13 @@
|
|||||||
netlink_kernel_release
|
netlink_kernel_release
|
||||||
netlink_unicast
|
netlink_unicast
|
||||||
net_namespace_list
|
net_namespace_list
|
||||||
|
nf_ct_delete
|
||||||
nf_register_net_hooks
|
nf_register_net_hooks
|
||||||
nf_unregister_net_hooks
|
nf_unregister_net_hooks
|
||||||
nla_find
|
nla_find
|
||||||
nla_put
|
nla_put
|
||||||
nla_reserve_64bit
|
|
||||||
nla_reserve
|
nla_reserve
|
||||||
|
nla_reserve_64bit
|
||||||
__nla_validate
|
__nla_validate
|
||||||
__nlmsg_put
|
__nlmsg_put
|
||||||
no_llseek
|
no_llseek
|
||||||
@@ -1343,6 +1349,7 @@
|
|||||||
register_kretprobe
|
register_kretprobe
|
||||||
register_memory_notifier
|
register_memory_notifier
|
||||||
register_module_notifier
|
register_module_notifier
|
||||||
|
register_net_sysctl
|
||||||
register_pm_notifier
|
register_pm_notifier
|
||||||
register_reboot_notifier
|
register_reboot_notifier
|
||||||
register_restart_handler
|
register_restart_handler
|
||||||
@@ -1690,6 +1697,7 @@
|
|||||||
__task_pid_nr_ns
|
__task_pid_nr_ns
|
||||||
__task_rq_lock
|
__task_rq_lock
|
||||||
task_rq_lock
|
task_rq_lock
|
||||||
|
tcp_parse_options
|
||||||
thermal_cooling_device_register
|
thermal_cooling_device_register
|
||||||
thermal_cooling_device_unregister
|
thermal_cooling_device_unregister
|
||||||
thermal_of_cooling_device_register
|
thermal_of_cooling_device_register
|
||||||
@@ -1781,12 +1789,16 @@
|
|||||||
__traceiter_android_vh_cpu_idle_enter
|
__traceiter_android_vh_cpu_idle_enter
|
||||||
__traceiter_android_vh_cpu_idle_exit
|
__traceiter_android_vh_cpu_idle_exit
|
||||||
__traceiter_android_vh_do_send_sig_info
|
__traceiter_android_vh_do_send_sig_info
|
||||||
|
__traceiter_android_vh_exclude_reserved_zone
|
||||||
|
__traceiter_android_vh_exit_mm
|
||||||
__traceiter_android_vh_ftrace_dump_buffer
|
__traceiter_android_vh_ftrace_dump_buffer
|
||||||
__traceiter_android_vh_ftrace_format_check
|
__traceiter_android_vh_ftrace_format_check
|
||||||
__traceiter_android_vh_ftrace_oops_enter
|
__traceiter_android_vh_ftrace_oops_enter
|
||||||
__traceiter_android_vh_ftrace_oops_exit
|
__traceiter_android_vh_ftrace_oops_exit
|
||||||
__traceiter_android_vh_ftrace_size_check
|
__traceiter_android_vh_ftrace_size_check
|
||||||
|
__traceiter_android_vh_get_from_fragment_pool
|
||||||
__traceiter_android_vh_gpio_block_read
|
__traceiter_android_vh_gpio_block_read
|
||||||
|
__traceiter_android_vh_include_reserved_zone
|
||||||
__traceiter_android_vh_iommu_setup_dma_ops
|
__traceiter_android_vh_iommu_setup_dma_ops
|
||||||
__traceiter_android_vh_ipi_stop
|
__traceiter_android_vh_ipi_stop
|
||||||
__traceiter_android_vh_jiffies_update
|
__traceiter_android_vh_jiffies_update
|
||||||
@@ -1799,12 +1811,15 @@
|
|||||||
__traceiter_android_vh_rwsem_wake
|
__traceiter_android_vh_rwsem_wake
|
||||||
__traceiter_android_vh_rwsem_wake_finish
|
__traceiter_android_vh_rwsem_wake_finish
|
||||||
__traceiter_android_vh_scheduler_tick
|
__traceiter_android_vh_scheduler_tick
|
||||||
|
__traceiter_android_vh_show_max_freq
|
||||||
__traceiter_android_vh_show_resume_epoch_val
|
__traceiter_android_vh_show_resume_epoch_val
|
||||||
__traceiter_android_vh_show_suspend_epoch_val
|
__traceiter_android_vh_show_suspend_epoch_val
|
||||||
__traceiter_android_vh_sync_txn_recvd
|
__traceiter_android_vh_sync_txn_recvd
|
||||||
__traceiter_android_vh_timer_calc_index
|
__traceiter_android_vh_timer_calc_index
|
||||||
__traceiter_android_vh_tune_inactive_ratio
|
__traceiter_android_vh_tune_inactive_ratio
|
||||||
__traceiter_android_vh_tune_swappiness
|
__traceiter_android_vh_tune_swappiness
|
||||||
|
__traceiter_android_vh_ufs_compl_command
|
||||||
|
__traceiter_android_vh_ufs_send_command
|
||||||
__traceiter_android_vh_update_topology_flags_workfn
|
__traceiter_android_vh_update_topology_flags_workfn
|
||||||
__traceiter_binder_transaction_received
|
__traceiter_binder_transaction_received
|
||||||
__traceiter_cpu_frequency_limits
|
__traceiter_cpu_frequency_limits
|
||||||
@@ -1886,12 +1901,16 @@
|
|||||||
__tracepoint_android_vh_cpu_idle_enter
|
__tracepoint_android_vh_cpu_idle_enter
|
||||||
__tracepoint_android_vh_cpu_idle_exit
|
__tracepoint_android_vh_cpu_idle_exit
|
||||||
__tracepoint_android_vh_do_send_sig_info
|
__tracepoint_android_vh_do_send_sig_info
|
||||||
|
__tracepoint_android_vh_exclude_reserved_zone
|
||||||
|
__tracepoint_android_vh_exit_mm
|
||||||
__tracepoint_android_vh_ftrace_dump_buffer
|
__tracepoint_android_vh_ftrace_dump_buffer
|
||||||
__tracepoint_android_vh_ftrace_format_check
|
__tracepoint_android_vh_ftrace_format_check
|
||||||
__tracepoint_android_vh_ftrace_oops_enter
|
__tracepoint_android_vh_ftrace_oops_enter
|
||||||
__tracepoint_android_vh_ftrace_oops_exit
|
__tracepoint_android_vh_ftrace_oops_exit
|
||||||
__tracepoint_android_vh_ftrace_size_check
|
__tracepoint_android_vh_ftrace_size_check
|
||||||
|
__tracepoint_android_vh_get_from_fragment_pool
|
||||||
__tracepoint_android_vh_gpio_block_read
|
__tracepoint_android_vh_gpio_block_read
|
||||||
|
__tracepoint_android_vh_include_reserved_zone
|
||||||
__tracepoint_android_vh_iommu_setup_dma_ops
|
__tracepoint_android_vh_iommu_setup_dma_ops
|
||||||
__tracepoint_android_vh_ipi_stop
|
__tracepoint_android_vh_ipi_stop
|
||||||
__tracepoint_android_vh_jiffies_update
|
__tracepoint_android_vh_jiffies_update
|
||||||
@@ -1904,12 +1923,15 @@
|
|||||||
__tracepoint_android_vh_rwsem_wake
|
__tracepoint_android_vh_rwsem_wake
|
||||||
__tracepoint_android_vh_rwsem_wake_finish
|
__tracepoint_android_vh_rwsem_wake_finish
|
||||||
__tracepoint_android_vh_scheduler_tick
|
__tracepoint_android_vh_scheduler_tick
|
||||||
|
__tracepoint_android_vh_show_max_freq
|
||||||
__tracepoint_android_vh_show_resume_epoch_val
|
__tracepoint_android_vh_show_resume_epoch_val
|
||||||
__tracepoint_android_vh_show_suspend_epoch_val
|
__tracepoint_android_vh_show_suspend_epoch_val
|
||||||
__tracepoint_android_vh_sync_txn_recvd
|
__tracepoint_android_vh_sync_txn_recvd
|
||||||
__tracepoint_android_vh_timer_calc_index
|
__tracepoint_android_vh_timer_calc_index
|
||||||
__tracepoint_android_vh_tune_inactive_ratio
|
__tracepoint_android_vh_tune_inactive_ratio
|
||||||
__tracepoint_android_vh_tune_swappiness
|
__tracepoint_android_vh_tune_swappiness
|
||||||
|
__tracepoint_android_vh_ufs_compl_command
|
||||||
|
__tracepoint_android_vh_ufs_send_command
|
||||||
__tracepoint_android_vh_update_topology_flags_workfn
|
__tracepoint_android_vh_update_topology_flags_workfn
|
||||||
__tracepoint_binder_transaction_received
|
__tracepoint_binder_transaction_received
|
||||||
__tracepoint_cpu_frequency_limits
|
__tracepoint_cpu_frequency_limits
|
||||||
@@ -1998,6 +2020,7 @@
|
|||||||
unregister_ftrace_export
|
unregister_ftrace_export
|
||||||
unregister_kretprobe
|
unregister_kretprobe
|
||||||
unregister_module_notifier
|
unregister_module_notifier
|
||||||
|
unregister_net_sysctl_table
|
||||||
unregister_pm_notifier
|
unregister_pm_notifier
|
||||||
unregister_reboot_notifier
|
unregister_reboot_notifier
|
||||||
unregister_restart_handler
|
unregister_restart_handler
|
||||||
@@ -2080,6 +2103,7 @@
|
|||||||
vm_iomap_memory
|
vm_iomap_memory
|
||||||
vm_map_pages
|
vm_map_pages
|
||||||
vm_node_stat
|
vm_node_stat
|
||||||
|
vm_unmapped_area
|
||||||
vm_zone_stat
|
vm_zone_stat
|
||||||
vscnprintf
|
vscnprintf
|
||||||
vsnprintf
|
vsnprintf
|
||||||
|
@@ -139,6 +139,8 @@
|
|||||||
__traceiter_android_vh_free_task
|
__traceiter_android_vh_free_task
|
||||||
__tracepoint_android_vh_free_task
|
__tracepoint_android_vh_free_task
|
||||||
jiffies_64
|
jiffies_64
|
||||||
|
free_uid
|
||||||
|
find_user
|
||||||
|
|
||||||
#required by pm8941-pwrkey.ko module
|
#required by pm8941-pwrkey.ko module
|
||||||
console_printk
|
console_printk
|
||||||
|
@@ -108,6 +108,7 @@ CONFIG_GKI_HACKS_TO_FIX=y
|
|||||||
CONFIG_BINFMT_MISC=y
|
CONFIG_BINFMT_MISC=y
|
||||||
CONFIG_MEMORY_HOTPLUG=y
|
CONFIG_MEMORY_HOTPLUG=y
|
||||||
CONFIG_MEMORY_HOTREMOVE=y
|
CONFIG_MEMORY_HOTREMOVE=y
|
||||||
|
CONFIG_DEFAULT_MMAP_MIN_ADDR=32768
|
||||||
CONFIG_TRANSPARENT_HUGEPAGE=y
|
CONFIG_TRANSPARENT_HUGEPAGE=y
|
||||||
CONFIG_TRANSPARENT_HUGEPAGE_MADVISE=y
|
CONFIG_TRANSPARENT_HUGEPAGE_MADVISE=y
|
||||||
CONFIG_CLEANCACHE=y
|
CONFIG_CLEANCACHE=y
|
||||||
|
@@ -188,18 +188,6 @@ void mte_check_tfsr_el1(void)
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static void update_gcr_el1_excl(u64 excl)
|
|
||||||
{
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Note that the mask controlled by the user via prctl() is an
|
|
||||||
* include while GCR_EL1 accepts an exclude mask.
|
|
||||||
* No need for ISB since this only affects EL0 currently, implicit
|
|
||||||
* with ERET.
|
|
||||||
*/
|
|
||||||
sysreg_clear_set_s(SYS_GCR_EL1, SYS_GCR_EL1_EXCL_MASK, excl);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void mte_update_sctlr_user(struct task_struct *task)
|
static void mte_update_sctlr_user(struct task_struct *task)
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
@@ -271,7 +259,8 @@ void mte_suspend_exit(void)
|
|||||||
if (!system_supports_mte())
|
if (!system_supports_mte())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
update_gcr_el1_excl(gcr_kernel_excl);
|
sysreg_clear_set_s(SYS_GCR_EL1, SYS_GCR_EL1_EXCL_MASK, gcr_kernel_excl);
|
||||||
|
isb();
|
||||||
}
|
}
|
||||||
|
|
||||||
long set_mte_ctrl(struct task_struct *task, unsigned long arg)
|
long set_mte_ctrl(struct task_struct *task, unsigned long arg)
|
||||||
|
@@ -190,7 +190,7 @@ static bool range_is_memory(u64 start, u64 end)
|
|||||||
{
|
{
|
||||||
struct kvm_mem_range r1, r2;
|
struct kvm_mem_range r1, r2;
|
||||||
|
|
||||||
if (!find_mem_range(start, &r1) || !find_mem_range(end, &r2))
|
if (!find_mem_range(start, &r1) || !find_mem_range(end - 1, &r2))
|
||||||
return false;
|
return false;
|
||||||
if (r1.start != r2.start)
|
if (r1.start != r2.start)
|
||||||
return false;
|
return false;
|
||||||
|
@@ -85,6 +85,7 @@ CONFIG_GKI_HACKS_TO_FIX=y
|
|||||||
CONFIG_BINFMT_MISC=y
|
CONFIG_BINFMT_MISC=y
|
||||||
CONFIG_MEMORY_HOTPLUG=y
|
CONFIG_MEMORY_HOTPLUG=y
|
||||||
CONFIG_MEMORY_HOTREMOVE=y
|
CONFIG_MEMORY_HOTREMOVE=y
|
||||||
|
CONFIG_DEFAULT_MMAP_MIN_ADDR=32768
|
||||||
CONFIG_TRANSPARENT_HUGEPAGE=y
|
CONFIG_TRANSPARENT_HUGEPAGE=y
|
||||||
CONFIG_TRANSPARENT_HUGEPAGE_MADVISE=y
|
CONFIG_TRANSPARENT_HUGEPAGE_MADVISE=y
|
||||||
CONFIG_CLEANCACHE=y
|
CONFIG_CLEANCACHE=y
|
||||||
|
@@ -893,6 +893,14 @@ int device_add_software_node(struct device *dev, const struct software_node *nod
|
|||||||
}
|
}
|
||||||
|
|
||||||
set_secondary_fwnode(dev, &swnode->fwnode);
|
set_secondary_fwnode(dev, &swnode->fwnode);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* If the device has been fully registered by the time this function is
|
||||||
|
* called, software_node_notify() must be called separately so that the
|
||||||
|
* symlinks get created and the reference count of the node is kept in
|
||||||
|
* balance.
|
||||||
|
*/
|
||||||
|
if (device_is_registered(dev))
|
||||||
software_node_notify(dev, KOBJ_ADD);
|
software_node_notify(dev, KOBJ_ADD);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
@@ -913,6 +921,7 @@ void device_remove_software_node(struct device *dev)
|
|||||||
if (!swnode)
|
if (!swnode)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
if (device_is_registered(dev))
|
||||||
software_node_notify(dev, KOBJ_REMOVE);
|
software_node_notify(dev, KOBJ_REMOVE);
|
||||||
set_secondary_fwnode(dev, NULL);
|
set_secondary_fwnode(dev, NULL);
|
||||||
kobject_put(&swnode->kobj);
|
kobject_put(&swnode->kobj);
|
||||||
@@ -930,8 +939,7 @@ int software_node_notify(struct device *dev, unsigned long action)
|
|||||||
|
|
||||||
switch (action) {
|
switch (action) {
|
||||||
case KOBJ_ADD:
|
case KOBJ_ADD:
|
||||||
ret = sysfs_create_link_nowarn(&dev->kobj, &swnode->kobj,
|
ret = sysfs_create_link(&dev->kobj, &swnode->kobj, "software_node");
|
||||||
"software_node");
|
|
||||||
if (ret)
|
if (ret)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@@ -4601,6 +4601,9 @@ int of_clk_add_provider(struct device_node *np,
|
|||||||
struct of_clk_provider *cp;
|
struct of_clk_provider *cp;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
|
if (!np)
|
||||||
|
return 0;
|
||||||
|
|
||||||
cp = kzalloc(sizeof(*cp), GFP_KERNEL);
|
cp = kzalloc(sizeof(*cp), GFP_KERNEL);
|
||||||
if (!cp)
|
if (!cp)
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
@@ -4640,6 +4643,9 @@ int of_clk_add_hw_provider(struct device_node *np,
|
|||||||
struct of_clk_provider *cp;
|
struct of_clk_provider *cp;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
|
if (!np)
|
||||||
|
return 0;
|
||||||
|
|
||||||
cp = kzalloc(sizeof(*cp), GFP_KERNEL);
|
cp = kzalloc(sizeof(*cp), GFP_KERNEL);
|
||||||
if (!cp)
|
if (!cp)
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
@@ -4735,6 +4741,9 @@ void of_clk_del_provider(struct device_node *np)
|
|||||||
{
|
{
|
||||||
struct of_clk_provider *cp;
|
struct of_clk_provider *cp;
|
||||||
|
|
||||||
|
if (!np)
|
||||||
|
return;
|
||||||
|
|
||||||
mutex_lock(&of_clk_mutex);
|
mutex_lock(&of_clk_mutex);
|
||||||
list_for_each_entry(cp, &of_clk_providers, link) {
|
list_for_each_entry(cp, &of_clk_providers, link) {
|
||||||
if (cp->node == np) {
|
if (cp->node == np) {
|
||||||
|
@@ -166,7 +166,8 @@ struct scmi_msg_sensor_reading_get {
|
|||||||
|
|
||||||
struct scmi_resp_sensor_reading_complete {
|
struct scmi_resp_sensor_reading_complete {
|
||||||
__le32 id;
|
__le32 id;
|
||||||
__le64 readings;
|
__le32 readings_low;
|
||||||
|
__le32 readings_high;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct scmi_sensor_reading_resp {
|
struct scmi_sensor_reading_resp {
|
||||||
@@ -717,7 +718,8 @@ static int scmi_sensor_reading_get(const struct scmi_protocol_handle *ph,
|
|||||||
|
|
||||||
resp = t->rx.buf;
|
resp = t->rx.buf;
|
||||||
if (le32_to_cpu(resp->id) == sensor_id)
|
if (le32_to_cpu(resp->id) == sensor_id)
|
||||||
*value = get_unaligned_le64(&resp->readings);
|
*value =
|
||||||
|
get_unaligned_le64(&resp->readings_low);
|
||||||
else
|
else
|
||||||
ret = -EPROTO;
|
ret = -EPROTO;
|
||||||
}
|
}
|
||||||
|
@@ -172,6 +172,7 @@ static struct mfc_control controls[] = {
|
|||||||
.type = V4L2_CTRL_TYPE_INTEGER,
|
.type = V4L2_CTRL_TYPE_INTEGER,
|
||||||
.minimum = 0,
|
.minimum = 0,
|
||||||
.maximum = 16383,
|
.maximum = 16383,
|
||||||
|
.step = 1,
|
||||||
.default_value = 0,
|
.default_value = 0,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@@ -173,7 +173,7 @@ scmi_config_linear_regulator_mappings(struct scmi_regulator *sreg,
|
|||||||
sreg->desc.uV_step =
|
sreg->desc.uV_step =
|
||||||
vinfo->levels_uv[SCMI_VOLTAGE_SEGMENT_STEP];
|
vinfo->levels_uv[SCMI_VOLTAGE_SEGMENT_STEP];
|
||||||
sreg->desc.linear_min_sel = 0;
|
sreg->desc.linear_min_sel = 0;
|
||||||
sreg->desc.n_voltages = delta_uV / sreg->desc.uV_step;
|
sreg->desc.n_voltages = (delta_uV / sreg->desc.uV_step) + 1;
|
||||||
sreg->desc.ops = &scmi_reg_linear_ops;
|
sreg->desc.ops = &scmi_reg_linear_ops;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -342,6 +342,7 @@ struct tcpm_port {
|
|||||||
bool vbus_source;
|
bool vbus_source;
|
||||||
bool vbus_charge;
|
bool vbus_charge;
|
||||||
|
|
||||||
|
/* Set to true when Discover_Identity Command is expected to be sent in Ready states. */
|
||||||
bool send_discover;
|
bool send_discover;
|
||||||
bool op_vsafe5v;
|
bool op_vsafe5v;
|
||||||
|
|
||||||
@@ -371,6 +372,7 @@ struct tcpm_port {
|
|||||||
struct hrtimer send_discover_timer;
|
struct hrtimer send_discover_timer;
|
||||||
struct kthread_work send_discover_work;
|
struct kthread_work send_discover_work;
|
||||||
bool state_machine_running;
|
bool state_machine_running;
|
||||||
|
/* Set to true when VDM State Machine has following actions. */
|
||||||
bool vdm_sm_running;
|
bool vdm_sm_running;
|
||||||
|
|
||||||
struct completion tx_complete;
|
struct completion tx_complete;
|
||||||
@@ -1453,6 +1455,7 @@ static void tcpm_queue_vdm(struct tcpm_port *port, const u32 header,
|
|||||||
/* Set ready, vdm state machine will actually send */
|
/* Set ready, vdm state machine will actually send */
|
||||||
port->vdm_retries = 0;
|
port->vdm_retries = 0;
|
||||||
port->vdm_state = VDM_STATE_READY;
|
port->vdm_state = VDM_STATE_READY;
|
||||||
|
port->vdm_sm_running = true;
|
||||||
|
|
||||||
mod_vdm_delayed_work(port, 0);
|
mod_vdm_delayed_work(port, 0);
|
||||||
}
|
}
|
||||||
@@ -1695,7 +1698,6 @@ static int tcpm_pd_svdm(struct tcpm_port *port, struct typec_altmode *adev,
|
|||||||
rlen = 1;
|
rlen = 1;
|
||||||
} else {
|
} else {
|
||||||
tcpm_register_partner_altmodes(port);
|
tcpm_register_partner_altmodes(port);
|
||||||
port->vdm_sm_running = false;
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case CMD_ENTER_MODE:
|
case CMD_ENTER_MODE:
|
||||||
@@ -1743,14 +1745,12 @@ static int tcpm_pd_svdm(struct tcpm_port *port, struct typec_altmode *adev,
|
|||||||
(VDO_SVDM_VERS(svdm_version));
|
(VDO_SVDM_VERS(svdm_version));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
port->vdm_sm_running = false;
|
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
response[0] = p[0] | VDO_CMDT(CMDT_RSP_NAK);
|
response[0] = p[0] | VDO_CMDT(CMDT_RSP_NAK);
|
||||||
rlen = 1;
|
rlen = 1;
|
||||||
response[0] = (response[0] & ~VDO_SVDM_VERS_MASK) |
|
response[0] = (response[0] & ~VDO_SVDM_VERS_MASK) |
|
||||||
(VDO_SVDM_VERS(svdm_version));
|
(VDO_SVDM_VERS(svdm_version));
|
||||||
port->vdm_sm_running = false;
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1759,6 +1759,10 @@ static int tcpm_pd_svdm(struct tcpm_port *port, struct typec_altmode *adev,
|
|||||||
return rlen;
|
return rlen;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void tcpm_pd_handle_msg(struct tcpm_port *port,
|
||||||
|
enum pd_msg_request message,
|
||||||
|
enum tcpm_ams ams);
|
||||||
|
|
||||||
static void tcpm_handle_vdm_request(struct tcpm_port *port,
|
static void tcpm_handle_vdm_request(struct tcpm_port *port,
|
||||||
const __le32 *payload, int cnt)
|
const __le32 *payload, int cnt)
|
||||||
{
|
{
|
||||||
@@ -1786,11 +1790,25 @@ static void tcpm_handle_vdm_request(struct tcpm_port *port,
|
|||||||
port->vdm_state = VDM_STATE_DONE;
|
port->vdm_state = VDM_STATE_DONE;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (PD_VDO_SVDM(p[0])) {
|
if (PD_VDO_SVDM(p[0]) && (adev || tcpm_vdm_ams(port) || port->nr_snk_vdo)) {
|
||||||
|
/*
|
||||||
|
* Here a SVDM is received (INIT or RSP or unknown). Set the vdm_sm_running in
|
||||||
|
* advance because we are dropping the lock but may send VDMs soon.
|
||||||
|
* For the cases of INIT received:
|
||||||
|
* - If no response to send, it will be cleared later in this function.
|
||||||
|
* - If there are responses to send, it will be cleared in the state machine.
|
||||||
|
* For the cases of RSP received:
|
||||||
|
* - If no further INIT to send, it will be cleared later in this function.
|
||||||
|
* - Otherwise, it will be cleared in the state machine if timeout or it will go
|
||||||
|
* back here until no further INIT to send.
|
||||||
|
* For the cases of unknown type received:
|
||||||
|
* - We will send NAK and the flag will be cleared in the state machine.
|
||||||
|
*/
|
||||||
|
port->vdm_sm_running = true;
|
||||||
rlen = tcpm_pd_svdm(port, adev, p, cnt, response, &adev_action);
|
rlen = tcpm_pd_svdm(port, adev, p, cnt, response, &adev_action);
|
||||||
} else {
|
} else {
|
||||||
if (port->negotiated_rev >= PD_REV30)
|
if (port->negotiated_rev >= PD_REV30)
|
||||||
tcpm_queue_message(port, PD_MSG_CTRL_NOT_SUPP);
|
tcpm_pd_handle_msg(port, PD_MSG_CTRL_NOT_SUPP, NONE_AMS);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -1855,6 +1873,8 @@ static void tcpm_handle_vdm_request(struct tcpm_port *port,
|
|||||||
|
|
||||||
if (rlen > 0)
|
if (rlen > 0)
|
||||||
tcpm_queue_vdm(port, response[0], &response[1], rlen - 1);
|
tcpm_queue_vdm(port, response[0], &response[1], rlen - 1);
|
||||||
|
else
|
||||||
|
port->vdm_sm_running = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void tcpm_send_vdm(struct tcpm_port *port, u32 vid, int cmd,
|
static void tcpm_send_vdm(struct tcpm_port *port, u32 vid, int cmd,
|
||||||
@@ -1920,8 +1940,10 @@ static void vdm_run_state_machine(struct tcpm_port *port)
|
|||||||
* if there's traffic or we're not in PDO ready state don't send
|
* if there's traffic or we're not in PDO ready state don't send
|
||||||
* a VDM.
|
* a VDM.
|
||||||
*/
|
*/
|
||||||
if (port->state != SRC_READY && port->state != SNK_READY)
|
if (port->state != SRC_READY && port->state != SNK_READY) {
|
||||||
|
port->vdm_sm_running = false;
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
/* TODO: AMS operation for Unstructured VDM */
|
/* TODO: AMS operation for Unstructured VDM */
|
||||||
if (PD_VDO_SVDM(vdo_hdr) && PD_VDO_CMDT(vdo_hdr) == CMDT_INIT) {
|
if (PD_VDO_SVDM(vdo_hdr) && PD_VDO_CMDT(vdo_hdr) == CMDT_INIT) {
|
||||||
@@ -2496,10 +2518,7 @@ static void tcpm_pd_data_request(struct tcpm_port *port,
|
|||||||
NONE_AMS);
|
NONE_AMS);
|
||||||
break;
|
break;
|
||||||
case PD_DATA_VENDOR_DEF:
|
case PD_DATA_VENDOR_DEF:
|
||||||
if (tcpm_vdm_ams(port) || port->nr_snk_vdo)
|
|
||||||
tcpm_handle_vdm_request(port, msg->payload, cnt);
|
tcpm_handle_vdm_request(port, msg->payload, cnt);
|
||||||
else if (port->negotiated_rev > PD_REV20)
|
|
||||||
tcpm_pd_handle_msg(port, PD_MSG_CTRL_NOT_SUPP, NONE_AMS);
|
|
||||||
break;
|
break;
|
||||||
case PD_DATA_BIST:
|
case PD_DATA_BIST:
|
||||||
port->bist_request = le32_to_cpu(msg->payload[0]);
|
port->bist_request = le32_to_cpu(msg->payload[0]);
|
||||||
@@ -2580,10 +2599,6 @@ static void tcpm_pd_ctrl_request(struct tcpm_port *port,
|
|||||||
TYPEC_PWR_MODE_PD,
|
TYPEC_PWR_MODE_PD,
|
||||||
port->pps_data.active,
|
port->pps_data.active,
|
||||||
port->supply_voltage);
|
port->supply_voltage);
|
||||||
/* Set VDM running flag ASAP */
|
|
||||||
if (port->data_role == TYPEC_HOST &&
|
|
||||||
port->send_discover)
|
|
||||||
port->vdm_sm_running = true;
|
|
||||||
tcpm_set_state(port, SNK_READY, 0);
|
tcpm_set_state(port, SNK_READY, 0);
|
||||||
} else {
|
} else {
|
||||||
/*
|
/*
|
||||||
@@ -2621,14 +2636,10 @@ static void tcpm_pd_ctrl_request(struct tcpm_port *port,
|
|||||||
switch (port->state) {
|
switch (port->state) {
|
||||||
case SNK_NEGOTIATE_CAPABILITIES:
|
case SNK_NEGOTIATE_CAPABILITIES:
|
||||||
/* USB PD specification, Figure 8-43 */
|
/* USB PD specification, Figure 8-43 */
|
||||||
if (port->explicit_contract) {
|
if (port->explicit_contract)
|
||||||
next_state = SNK_READY;
|
next_state = SNK_READY;
|
||||||
if (port->data_role == TYPEC_HOST &&
|
else
|
||||||
port->send_discover)
|
|
||||||
port->vdm_sm_running = true;
|
|
||||||
} else {
|
|
||||||
next_state = SNK_WAIT_CAPABILITIES;
|
next_state = SNK_WAIT_CAPABILITIES;
|
||||||
}
|
|
||||||
|
|
||||||
/* Threshold was relaxed before sending Request. Restore it back. */
|
/* Threshold was relaxed before sending Request. Restore it back. */
|
||||||
tcpm_set_auto_vbus_discharge_threshold(port, TYPEC_PWR_MODE_PD,
|
tcpm_set_auto_vbus_discharge_threshold(port, TYPEC_PWR_MODE_PD,
|
||||||
@@ -2643,10 +2654,6 @@ static void tcpm_pd_ctrl_request(struct tcpm_port *port,
|
|||||||
port->pps_status = (type == PD_CTRL_WAIT ?
|
port->pps_status = (type == PD_CTRL_WAIT ?
|
||||||
-EAGAIN : -EOPNOTSUPP);
|
-EAGAIN : -EOPNOTSUPP);
|
||||||
|
|
||||||
if (port->data_role == TYPEC_HOST &&
|
|
||||||
port->send_discover)
|
|
||||||
port->vdm_sm_running = true;
|
|
||||||
|
|
||||||
/* Threshold was relaxed before sending Request. Restore it back. */
|
/* Threshold was relaxed before sending Request. Restore it back. */
|
||||||
tcpm_set_auto_vbus_discharge_threshold(port, TYPEC_PWR_MODE_PD,
|
tcpm_set_auto_vbus_discharge_threshold(port, TYPEC_PWR_MODE_PD,
|
||||||
port->pps_data.active,
|
port->pps_data.active,
|
||||||
@@ -2722,10 +2729,6 @@ static void tcpm_pd_ctrl_request(struct tcpm_port *port,
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case DR_SWAP_SEND:
|
case DR_SWAP_SEND:
|
||||||
if (port->data_role == TYPEC_DEVICE &&
|
|
||||||
port->send_discover)
|
|
||||||
port->vdm_sm_running = true;
|
|
||||||
|
|
||||||
tcpm_set_state(port, DR_SWAP_CHANGE_DR, 0);
|
tcpm_set_state(port, DR_SWAP_CHANGE_DR, 0);
|
||||||
break;
|
break;
|
||||||
case PR_SWAP_SEND:
|
case PR_SWAP_SEND:
|
||||||
@@ -2763,7 +2766,7 @@ static void tcpm_pd_ctrl_request(struct tcpm_port *port,
|
|||||||
PD_MSG_CTRL_NOT_SUPP,
|
PD_MSG_CTRL_NOT_SUPP,
|
||||||
NONE_AMS);
|
NONE_AMS);
|
||||||
} else {
|
} else {
|
||||||
if (port->vdm_sm_running) {
|
if (port->send_discover) {
|
||||||
tcpm_queue_message(port, PD_MSG_CTRL_WAIT);
|
tcpm_queue_message(port, PD_MSG_CTRL_WAIT);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -2779,7 +2782,7 @@ static void tcpm_pd_ctrl_request(struct tcpm_port *port,
|
|||||||
PD_MSG_CTRL_NOT_SUPP,
|
PD_MSG_CTRL_NOT_SUPP,
|
||||||
NONE_AMS);
|
NONE_AMS);
|
||||||
} else {
|
} else {
|
||||||
if (port->vdm_sm_running) {
|
if (port->send_discover) {
|
||||||
tcpm_queue_message(port, PD_MSG_CTRL_WAIT);
|
tcpm_queue_message(port, PD_MSG_CTRL_WAIT);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -2788,7 +2791,7 @@ static void tcpm_pd_ctrl_request(struct tcpm_port *port,
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case PD_CTRL_VCONN_SWAP:
|
case PD_CTRL_VCONN_SWAP:
|
||||||
if (port->vdm_sm_running) {
|
if (port->send_discover) {
|
||||||
tcpm_queue_message(port, PD_MSG_CTRL_WAIT);
|
tcpm_queue_message(port, PD_MSG_CTRL_WAIT);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -4582,18 +4585,20 @@ static void run_state_machine(struct tcpm_port *port)
|
|||||||
/* DR_Swap states */
|
/* DR_Swap states */
|
||||||
case DR_SWAP_SEND:
|
case DR_SWAP_SEND:
|
||||||
tcpm_pd_send_control(port, PD_CTRL_DR_SWAP);
|
tcpm_pd_send_control(port, PD_CTRL_DR_SWAP);
|
||||||
|
if (port->data_role == TYPEC_DEVICE || port->negotiated_rev > PD_REV20)
|
||||||
|
port->send_discover = true;
|
||||||
tcpm_set_state_cond(port, DR_SWAP_SEND_TIMEOUT,
|
tcpm_set_state_cond(port, DR_SWAP_SEND_TIMEOUT,
|
||||||
PD_T_SENDER_RESPONSE);
|
PD_T_SENDER_RESPONSE);
|
||||||
break;
|
break;
|
||||||
case DR_SWAP_ACCEPT:
|
case DR_SWAP_ACCEPT:
|
||||||
tcpm_pd_send_control(port, PD_CTRL_ACCEPT);
|
tcpm_pd_send_control(port, PD_CTRL_ACCEPT);
|
||||||
/* Set VDM state machine running flag ASAP */
|
if (port->data_role == TYPEC_DEVICE || port->negotiated_rev > PD_REV20)
|
||||||
if (port->data_role == TYPEC_DEVICE && port->send_discover)
|
port->send_discover = true;
|
||||||
port->vdm_sm_running = true;
|
|
||||||
tcpm_set_state_cond(port, DR_SWAP_CHANGE_DR, 0);
|
tcpm_set_state_cond(port, DR_SWAP_CHANGE_DR, 0);
|
||||||
break;
|
break;
|
||||||
case DR_SWAP_SEND_TIMEOUT:
|
case DR_SWAP_SEND_TIMEOUT:
|
||||||
tcpm_swap_complete(port, -ETIMEDOUT);
|
tcpm_swap_complete(port, -ETIMEDOUT);
|
||||||
|
port->send_discover = false;
|
||||||
tcpm_ams_finish(port);
|
tcpm_ams_finish(port);
|
||||||
tcpm_set_state(port, ready_state(port), 0);
|
tcpm_set_state(port, ready_state(port), 0);
|
||||||
break;
|
break;
|
||||||
@@ -4605,7 +4610,6 @@ static void run_state_machine(struct tcpm_port *port)
|
|||||||
} else {
|
} else {
|
||||||
tcpm_set_roles(port, true, port->pwr_role,
|
tcpm_set_roles(port, true, port->pwr_role,
|
||||||
TYPEC_HOST);
|
TYPEC_HOST);
|
||||||
port->send_discover = true;
|
|
||||||
}
|
}
|
||||||
tcpm_ams_finish(port);
|
tcpm_ams_finish(port);
|
||||||
tcpm_set_state(port, ready_state(port), 0);
|
tcpm_set_state(port, ready_state(port), 0);
|
||||||
@@ -4756,8 +4760,6 @@ static void run_state_machine(struct tcpm_port *port)
|
|||||||
break;
|
break;
|
||||||
case VCONN_SWAP_SEND_TIMEOUT:
|
case VCONN_SWAP_SEND_TIMEOUT:
|
||||||
tcpm_swap_complete(port, -ETIMEDOUT);
|
tcpm_swap_complete(port, -ETIMEDOUT);
|
||||||
if (port->data_role == TYPEC_HOST && port->send_discover)
|
|
||||||
port->vdm_sm_running = true;
|
|
||||||
tcpm_set_state(port, ready_state(port), 0);
|
tcpm_set_state(port, ready_state(port), 0);
|
||||||
break;
|
break;
|
||||||
case VCONN_SWAP_START:
|
case VCONN_SWAP_START:
|
||||||
@@ -4773,14 +4775,10 @@ static void run_state_machine(struct tcpm_port *port)
|
|||||||
case VCONN_SWAP_TURN_ON_VCONN:
|
case VCONN_SWAP_TURN_ON_VCONN:
|
||||||
tcpm_set_vconn(port, true);
|
tcpm_set_vconn(port, true);
|
||||||
tcpm_pd_send_control(port, PD_CTRL_PS_RDY);
|
tcpm_pd_send_control(port, PD_CTRL_PS_RDY);
|
||||||
if (port->data_role == TYPEC_HOST && port->send_discover)
|
|
||||||
port->vdm_sm_running = true;
|
|
||||||
tcpm_set_state(port, ready_state(port), 0);
|
tcpm_set_state(port, ready_state(port), 0);
|
||||||
break;
|
break;
|
||||||
case VCONN_SWAP_TURN_OFF_VCONN:
|
case VCONN_SWAP_TURN_OFF_VCONN:
|
||||||
tcpm_set_vconn(port, false);
|
tcpm_set_vconn(port, false);
|
||||||
if (port->data_role == TYPEC_HOST && port->send_discover)
|
|
||||||
port->vdm_sm_running = true;
|
|
||||||
tcpm_set_state(port, ready_state(port), 0);
|
tcpm_set_state(port, ready_state(port), 0);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@@ -4788,8 +4786,6 @@ static void run_state_machine(struct tcpm_port *port)
|
|||||||
case PR_SWAP_CANCEL:
|
case PR_SWAP_CANCEL:
|
||||||
case VCONN_SWAP_CANCEL:
|
case VCONN_SWAP_CANCEL:
|
||||||
tcpm_swap_complete(port, port->swap_status);
|
tcpm_swap_complete(port, port->swap_status);
|
||||||
if (port->data_role == TYPEC_HOST && port->send_discover)
|
|
||||||
port->vdm_sm_running = true;
|
|
||||||
if (port->pwr_role == TYPEC_SOURCE)
|
if (port->pwr_role == TYPEC_SOURCE)
|
||||||
tcpm_set_state(port, SRC_READY, 0);
|
tcpm_set_state(port, SRC_READY, 0);
|
||||||
else
|
else
|
||||||
@@ -5142,9 +5138,6 @@ static void _tcpm_pd_vbus_on(struct tcpm_port *port)
|
|||||||
switch (port->state) {
|
switch (port->state) {
|
||||||
case SNK_TRANSITION_SINK_VBUS:
|
case SNK_TRANSITION_SINK_VBUS:
|
||||||
port->explicit_contract = true;
|
port->explicit_contract = true;
|
||||||
/* Set the VDM flag ASAP */
|
|
||||||
if (port->data_role == TYPEC_HOST && port->send_discover)
|
|
||||||
port->vdm_sm_running = true;
|
|
||||||
tcpm_set_state(port, SNK_READY, 0);
|
tcpm_set_state(port, SNK_READY, 0);
|
||||||
break;
|
break;
|
||||||
case SNK_DISCOVERY:
|
case SNK_DISCOVERY:
|
||||||
@@ -5545,14 +5538,17 @@ static void tcpm_send_discover_work(struct kthread_work *work)
|
|||||||
if (!port->send_discover)
|
if (!port->send_discover)
|
||||||
goto unlock;
|
goto unlock;
|
||||||
|
|
||||||
|
if (port->data_role == TYPEC_DEVICE && port->negotiated_rev < PD_REV30) {
|
||||||
|
port->send_discover = false;
|
||||||
|
goto unlock;
|
||||||
|
}
|
||||||
|
|
||||||
/* Retry if the port is not idle */
|
/* Retry if the port is not idle */
|
||||||
if ((port->state != SRC_READY && port->state != SNK_READY) || port->vdm_sm_running) {
|
if ((port->state != SRC_READY && port->state != SNK_READY) || port->vdm_sm_running) {
|
||||||
mod_send_discover_delayed_work(port, SEND_DISCOVER_RETRY_MS);
|
mod_send_discover_delayed_work(port, SEND_DISCOVER_RETRY_MS);
|
||||||
goto unlock;
|
goto unlock;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Only send the Message if the port is host for PD rev2.0 */
|
|
||||||
if (port->data_role == TYPEC_HOST || port->negotiated_rev > PD_REV20)
|
|
||||||
tcpm_send_vdm(port, USB_SID_PD, CMD_DISCOVER_IDENT, NULL, 0);
|
tcpm_send_vdm(port, USB_SID_PD, CMD_DISCOVER_IDENT, NULL, 0);
|
||||||
|
|
||||||
unlock:
|
unlock:
|
||||||
|
@@ -627,10 +627,10 @@ static void toggle_allocation_gate(struct work_struct *work)
|
|||||||
* During low activity with no allocations we might wait a
|
* During low activity with no allocations we might wait a
|
||||||
* while; let's avoid the hung task warning.
|
* while; let's avoid the hung task warning.
|
||||||
*/
|
*/
|
||||||
wait_event_timeout(allocation_wait, atomic_read(&kfence_allocation_gate),
|
wait_event_idle_timeout(allocation_wait, atomic_read(&kfence_allocation_gate),
|
||||||
sysctl_hung_task_timeout_secs * HZ / 2);
|
sysctl_hung_task_timeout_secs * HZ / 2);
|
||||||
} else {
|
} else {
|
||||||
wait_event(allocation_wait, atomic_read(&kfence_allocation_gate));
|
wait_event_idle(allocation_wait, atomic_read(&kfence_allocation_gate));
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Disable static key and reset timer. */
|
/* Disable static key and reset timer. */
|
||||||
|
@@ -290,7 +290,7 @@ static void hex_dump_object(struct seq_file *seq,
|
|||||||
warn_or_seq_printf(seq, " hex dump (first %zu bytes):\n", len);
|
warn_or_seq_printf(seq, " hex dump (first %zu bytes):\n", len);
|
||||||
kasan_disable_current();
|
kasan_disable_current();
|
||||||
warn_or_seq_hex_dump(seq, DUMP_PREFIX_NONE, HEX_ROW_SIZE,
|
warn_or_seq_hex_dump(seq, DUMP_PREFIX_NONE, HEX_ROW_SIZE,
|
||||||
HEX_GROUP_SIZE, ptr, len, HEX_ASCII);
|
HEX_GROUP_SIZE, kasan_reset_tag((void *)ptr), len, HEX_ASCII);
|
||||||
kasan_enable_current();
|
kasan_enable_current();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1171,7 +1171,7 @@ static bool update_checksum(struct kmemleak_object *object)
|
|||||||
|
|
||||||
kasan_disable_current();
|
kasan_disable_current();
|
||||||
kcsan_disable_current();
|
kcsan_disable_current();
|
||||||
object->checksum = crc32(0, (void *)object->pointer, object->size);
|
object->checksum = crc32(0, kasan_reset_tag((void *)object->pointer), object->size);
|
||||||
kasan_enable_current();
|
kasan_enable_current();
|
||||||
kcsan_enable_current();
|
kcsan_enable_current();
|
||||||
|
|
||||||
@@ -1246,7 +1246,7 @@ static void scan_block(void *_start, void *_end,
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
kasan_disable_current();
|
kasan_disable_current();
|
||||||
pointer = *ptr;
|
pointer = *(unsigned long *)kasan_reset_tag((void *)ptr);
|
||||||
kasan_enable_current();
|
kasan_enable_current();
|
||||||
|
|
||||||
untagged_ptr = (unsigned long)kasan_reset_tag((void *)pointer);
|
untagged_ptr = (unsigned long)kasan_reset_tag((void *)pointer);
|
||||||
|
11
mm/memory.c
11
mm/memory.c
@@ -4159,9 +4159,18 @@ vm_fault_t finish_fault(struct vm_fault *vmf)
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (unlikely(pte_alloc(vma->vm_mm, vmf->pmd)))
|
if (vmf->prealloc_pte) {
|
||||||
|
vmf->ptl = pmd_lock(vma->vm_mm, vmf->pmd);
|
||||||
|
if (likely(pmd_none(*vmf->pmd))) {
|
||||||
|
mm_inc_nr_ptes(vma->vm_mm);
|
||||||
|
pmd_populate(vma->vm_mm, vmf->pmd, vmf->prealloc_pte);
|
||||||
|
vmf->prealloc_pte = NULL;
|
||||||
|
}
|
||||||
|
spin_unlock(vmf->ptl);
|
||||||
|
} else if (unlikely(pte_alloc(vma->vm_mm, vmf->pmd))) {
|
||||||
return VM_FAULT_OOM;
|
return VM_FAULT_OOM;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* See comment in handle_pte_fault() */
|
/* See comment in handle_pte_fault() */
|
||||||
if (pmd_devmap_trans_unstable(vmf->pmd))
|
if (pmd_devmap_trans_unstable(vmf->pmd))
|
||||||
|
@@ -535,8 +535,8 @@ static void print_section(char *level, char *text, u8 *addr,
|
|||||||
unsigned int length)
|
unsigned int length)
|
||||||
{
|
{
|
||||||
metadata_access_enable();
|
metadata_access_enable();
|
||||||
print_hex_dump(level, kasan_reset_tag(text), DUMP_PREFIX_ADDRESS,
|
print_hex_dump(level, text, DUMP_PREFIX_ADDRESS,
|
||||||
16, 1, addr, length, 1);
|
16, 1, kasan_reset_tag((void *)addr), length, 1);
|
||||||
metadata_access_disable();
|
metadata_access_disable();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user