mirror of
https://github.com/nxp-imx/linux-imx.git
synced 2025-07-19 07:39:54 +02:00
Merge branch 'android15-6.6' into android15-6.6-lts
Sync up with the android15-6.6 branch to fix the TH build due to recent required ABI symbol additions there. Included in here are the following commits: *ee2542f0e5
ANDROID: ABI: Update pixel symbol list *9a46e8ecf7
ANDROID: mm: add vh for kcompactd_cpu_online() *dd7de90d0e
ANDROID: sched: Add android_vh_set_task_comm *e0b348c4b8
Revert "UPSTREAM: Revert "f2fs: use flush command instead of FUA for zoned device"" *d5c1618b74
UPSTREAM: usb: gadget: uvc: queue pump work in uvcg_video_enable() *466f71925c
UPSTREAM: usb: xhci: Check for xhci->interrupters being allocated in xhci_mem_clearup() *90248f12cc
UPSTREAM: cachestat: do not flush stats in recency check *3e6bc54909
UPSTREAM: mm: shmem: fix getting incorrect lruvec when replacing a shmem folio *00079e2bce
UPSTREAM: wifi: cfg80211: validate HE operation element parsing *af3fbe448f
UPSTREAM: riscv: cpufeature: Fix extension subset checking *412ee5bcbf
UPSTREAM: memcg: fix data-race KCSAN bug in rstats *6134f98d1e
UPSTREAM: PM: EM: fix wrong utilization estimation in em_cpu_energy() *600d8fb230
UPSTREAM: exfat: fix timing of synchronizing bitmap and inode *11a6be14ae
UPSTREAM: firmware: arm_ffa: Fix the partition ID check in ffa_notification_info_get() *05181e576f
UPSTREAM: mm/damon/core: check apply interval in damon_do_apply_schemes() *49bb2617e1
UPSTREAM: firmware: arm_ffa: Check xa_load() return value *1c8bc63929
UPSTREAM: firmware: arm_ffa: Add missing rwlock_init() for the driver partition *18bbf1be19
UPSTREAM: firmware: arm_ffa: Add missing rwlock_init() in ffa_setup_partitions() *7f8ed76fc2
UPSTREAM: mm/damon/sysfs-schemes: add timeout for update_schemes_tried_regions *ba95736c5b
BACKPORT: mm/damon/core: copy nr_accesses when splitting region *a44df1cfbb
UPSTREAM: firmware: arm_ffa: Fix ffa_notification_info_get() IDs handling *7c593903ee
UPSTREAM: exfat: fix ctime is not updated *178f47033b
UPSTREAM: exfat: fix setting uninitialized time to ctime/atime *bb51ec9159
ANDROID: GKI: add symbols to symbol list *cc5fad9390
ANDROID: vendor_hooks: add hook in alloc_workqueue() *2fd50de384
ANDROID: Update the ABI symbol list and stg Change-Id: Idfeb4d556fcda753c38b23c04361132d03f62c1b Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
This commit is contained in:
commit
eb7cf642ed
|
@ -315500,6 +315500,11 @@ function {
|
|||
parameter_id: 0x3fa672fd
|
||||
parameter_id: 0x0490bb4a
|
||||
}
|
||||
function {
|
||||
id: 0x36c501fb
|
||||
return_type_id: 0x33756485
|
||||
parameter_id: 0x1da732a0
|
||||
}
|
||||
function {
|
||||
id: 0x36cad8bb
|
||||
return_type_id: 0x23f09c34
|
||||
|
@ -337538,6 +337543,14 @@ function {
|
|||
parameter_id: 0x7be80061
|
||||
parameter_id: 0x4585663f
|
||||
}
|
||||
function {
|
||||
id: 0x9bca672a
|
||||
return_type_id: 0x6720d32f
|
||||
parameter_id: 0x18bd6530
|
||||
parameter_id: 0x18db1c77
|
||||
parameter_id: 0x1bf16028
|
||||
parameter_id: 0x13580d6c
|
||||
}
|
||||
function {
|
||||
id: 0x9bca793f
|
||||
return_type_id: 0x6720d32f
|
||||
|
@ -354017,6 +354030,15 @@ elf_symbol {
|
|||
type_id: 0x9bc8472e
|
||||
full_name: "__traceiter_android_rvh_alloc_and_link_pwqs"
|
||||
}
|
||||
elf_symbol {
|
||||
id: 0xef79dd4d
|
||||
name: "__traceiter_android_rvh_alloc_workqueue"
|
||||
is_defined: true
|
||||
symbol_type: FUNCTION
|
||||
crc: 0xc0d90a3b
|
||||
type_id: 0x9bca672a
|
||||
full_name: "__traceiter_android_rvh_alloc_workqueue"
|
||||
}
|
||||
elf_symbol {
|
||||
id: 0x0b48afa1
|
||||
name: "__traceiter_android_rvh_arm64_serror_panic"
|
||||
|
@ -357293,6 +357315,15 @@ elf_symbol {
|
|||
type_id: 0x9b7ba7c5
|
||||
full_name: "__traceiter_android_vh_mm_direct_reclaim_exit"
|
||||
}
|
||||
elf_symbol {
|
||||
id: 0x6f5c8275
|
||||
name: "__traceiter_android_vh_mm_kcompactd_cpu_online"
|
||||
is_defined: true
|
||||
symbol_type: FUNCTION
|
||||
crc: 0x0e957ed4
|
||||
type_id: 0x9a33392f
|
||||
full_name: "__traceiter_android_vh_mm_kcompactd_cpu_online"
|
||||
}
|
||||
elf_symbol {
|
||||
id: 0xf182fb15
|
||||
name: "__traceiter_android_vh_mm_may_oom_exit"
|
||||
|
@ -358256,6 +358287,15 @@ elf_symbol {
|
|||
type_id: 0x9b50c8eb
|
||||
full_name: "__traceiter_android_vh_sd_setup_unmap_multi_segment"
|
||||
}
|
||||
elf_symbol {
|
||||
id: 0x0b48ad7a
|
||||
name: "__traceiter_android_vh_set_task_comm"
|
||||
is_defined: true
|
||||
symbol_type: FUNCTION
|
||||
crc: 0x01b7877e
|
||||
type_id: 0x9bdbdcc4
|
||||
full_name: "__traceiter_android_vh_set_task_comm"
|
||||
}
|
||||
elf_symbol {
|
||||
id: 0x874fcdb2
|
||||
name: "__traceiter_android_vh_set_tsk_need_resched_lazy"
|
||||
|
@ -359903,6 +359943,15 @@ elf_symbol {
|
|||
type_id: 0x18ccbd2c
|
||||
full_name: "__tracepoint_android_rvh_alloc_and_link_pwqs"
|
||||
}
|
||||
elf_symbol {
|
||||
id: 0x0b219d2b
|
||||
name: "__tracepoint_android_rvh_alloc_workqueue"
|
||||
is_defined: true
|
||||
symbol_type: OBJECT
|
||||
crc: 0xbae7d4d4
|
||||
type_id: 0x18ccbd2c
|
||||
full_name: "__tracepoint_android_rvh_alloc_workqueue"
|
||||
}
|
||||
elf_symbol {
|
||||
id: 0x748c1fd7
|
||||
name: "__tracepoint_android_rvh_arm64_serror_panic"
|
||||
|
@ -363179,6 +363228,15 @@ elf_symbol {
|
|||
type_id: 0x18ccbd2c
|
||||
full_name: "__tracepoint_android_vh_mm_direct_reclaim_exit"
|
||||
}
|
||||
elf_symbol {
|
||||
id: 0x0f593caf
|
||||
name: "__tracepoint_android_vh_mm_kcompactd_cpu_online"
|
||||
is_defined: true
|
||||
symbol_type: OBJECT
|
||||
crc: 0x7258a4a5
|
||||
type_id: 0x18ccbd2c
|
||||
full_name: "__tracepoint_android_vh_mm_kcompactd_cpu_online"
|
||||
}
|
||||
elf_symbol {
|
||||
id: 0x47bcd15f
|
||||
name: "__tracepoint_android_vh_mm_may_oom_exit"
|
||||
|
@ -364142,6 +364200,15 @@ elf_symbol {
|
|||
type_id: 0x18ccbd2c
|
||||
full_name: "__tracepoint_android_vh_sd_setup_unmap_multi_segment"
|
||||
}
|
||||
elf_symbol {
|
||||
id: 0x1f07c260
|
||||
name: "__tracepoint_android_vh_set_task_comm"
|
||||
is_defined: true
|
||||
symbol_type: OBJECT
|
||||
crc: 0xc50d6787
|
||||
type_id: 0x18ccbd2c
|
||||
full_name: "__tracepoint_android_vh_set_task_comm"
|
||||
}
|
||||
elf_symbol {
|
||||
id: 0xb6de2d88
|
||||
name: "__tracepoint_android_vh_set_tsk_need_resched_lazy"
|
||||
|
@ -423781,6 +423848,15 @@ elf_symbol {
|
|||
type_id: 0x1fc98171
|
||||
full_name: "vm_unmap_ram"
|
||||
}
|
||||
elf_symbol {
|
||||
id: 0xbbf42090
|
||||
name: "vm_unmapped_area"
|
||||
is_defined: true
|
||||
symbol_type: FUNCTION
|
||||
crc: 0x064b9739
|
||||
type_id: 0x36c501fb
|
||||
full_name: "vm_unmapped_area"
|
||||
}
|
||||
elf_symbol {
|
||||
id: 0xca7f93d5
|
||||
name: "vm_zone_stat"
|
||||
|
@ -425802,6 +425878,7 @@ interface {
|
|||
symbol_id: 0xb42422d5
|
||||
symbol_id: 0xb3d70eab
|
||||
symbol_id: 0x9ca1a40f
|
||||
symbol_id: 0xef79dd4d
|
||||
symbol_id: 0x0b48afa1
|
||||
symbol_id: 0xa927338c
|
||||
symbol_id: 0x6d4cc1a2
|
||||
|
@ -426166,6 +426243,7 @@ interface {
|
|||
symbol_id: 0x83742db6
|
||||
symbol_id: 0x9f58159a
|
||||
symbol_id: 0x29c67d40
|
||||
symbol_id: 0x6f5c8275
|
||||
symbol_id: 0xf182fb15
|
||||
symbol_id: 0xe44dacb1
|
||||
symbol_id: 0xab76d6cc
|
||||
|
@ -426273,6 +426351,7 @@ interface {
|
|||
symbol_id: 0xb841c45e
|
||||
symbol_id: 0xe3b923c8
|
||||
symbol_id: 0x8a2c7656
|
||||
symbol_id: 0x0b48ad7a
|
||||
symbol_id: 0x874fcdb2
|
||||
symbol_id: 0xaa3f6a65
|
||||
symbol_id: 0xa2fe718f
|
||||
|
@ -426456,6 +426535,7 @@ interface {
|
|||
symbol_id: 0x4b7a8fd7
|
||||
symbol_id: 0xcd36f539
|
||||
symbol_id: 0x33f0c37d
|
||||
symbol_id: 0x0b219d2b
|
||||
symbol_id: 0x748c1fd7
|
||||
symbol_id: 0xcb42202e
|
||||
symbol_id: 0xc9400cec
|
||||
|
@ -426820,6 +426900,7 @@ interface {
|
|||
symbol_id: 0x420ef2d0
|
||||
symbol_id: 0xd333a65c
|
||||
symbol_id: 0xddcff44a
|
||||
symbol_id: 0x0f593caf
|
||||
symbol_id: 0x47bcd15f
|
||||
symbol_id: 0xb6da564f
|
||||
symbol_id: 0x0403b7c6
|
||||
|
@ -426927,6 +427008,7 @@ interface {
|
|||
symbol_id: 0xff2bccb8
|
||||
symbol_id: 0x5d163d02
|
||||
symbol_id: 0x5294a07c
|
||||
symbol_id: 0x1f07c260
|
||||
symbol_id: 0xb6de2d88
|
||||
symbol_id: 0xd7ceb15f
|
||||
symbol_id: 0x923147c1
|
||||
|
@ -433543,6 +433625,7 @@ interface {
|
|||
symbol_id: 0x2570ceae
|
||||
symbol_id: 0xacc76406
|
||||
symbol_id: 0xef2c49d1
|
||||
symbol_id: 0xbbf42090
|
||||
symbol_id: 0xca7f93d5
|
||||
symbol_id: 0x3c915fdb
|
||||
symbol_id: 0x8ffd0533
|
||||
|
|
|
@ -199,6 +199,7 @@
|
|||
__traceiter_android_vh_alloc_oem_binder_struct
|
||||
__traceiter_android_vh_alloc_pages_failure_bypass
|
||||
__traceiter_android_vh_alloc_pages_reclaim_bypass
|
||||
__traceiter_android_rvh_alloc_workqueue
|
||||
__traceiter_android_vh_alter_mutex_list_add
|
||||
__traceiter_android_vh_binder_alloc_new_buf_locked
|
||||
__traceiter_android_vh_binder_buffer_release
|
||||
|
@ -345,6 +346,7 @@
|
|||
__tracepoint_android_vh_alloc_oem_binder_struct
|
||||
__tracepoint_android_vh_alloc_pages_failure_bypass
|
||||
__tracepoint_android_vh_alloc_pages_reclaim_bypass
|
||||
__tracepoint_android_rvh_alloc_workqueue
|
||||
__tracepoint_android_vh_alter_mutex_list_add
|
||||
__tracepoint_android_vh_binder_alloc_new_buf_locked
|
||||
__tracepoint_android_vh_binder_buffer_release
|
||||
|
|
|
@ -124,6 +124,7 @@
|
|||
class_unregister
|
||||
cleancache_register_ops
|
||||
clear_page
|
||||
__ClearPageMovable
|
||||
clk_disable
|
||||
clk_enable
|
||||
clk_get
|
||||
|
@ -559,6 +560,7 @@
|
|||
down_read_trylock
|
||||
down_trylock
|
||||
down_write
|
||||
d_path
|
||||
dput
|
||||
drain_workqueue
|
||||
driver_for_each_device
|
||||
|
@ -826,11 +828,13 @@
|
|||
find_pid_ns
|
||||
find_task_by_vpid
|
||||
find_vma_intersection
|
||||
find_vpid
|
||||
finish_wait
|
||||
firmware_request_nowarn
|
||||
flush_delayed_work
|
||||
flush_work
|
||||
__flush_workqueue
|
||||
__folio_lock
|
||||
__folio_put
|
||||
fortify_panic
|
||||
fput
|
||||
|
@ -899,6 +903,7 @@
|
|||
get_sg_io_hdr
|
||||
__get_task_comm
|
||||
get_task_cred
|
||||
get_task_mm
|
||||
get_thermal_instance
|
||||
get_unused_fd_flags
|
||||
get_user_pages
|
||||
|
@ -1276,6 +1281,7 @@
|
|||
loops_per_jiffy
|
||||
mac_pton
|
||||
mas_empty_area_rev
|
||||
mas_find
|
||||
max_load_balance_interval
|
||||
mbox_chan_received_data
|
||||
mbox_controller_register
|
||||
|
@ -1329,6 +1335,7 @@
|
|||
__mmap_lock_do_trace_released
|
||||
__mmap_lock_do_trace_start_locking
|
||||
__mmdrop
|
||||
mmput
|
||||
mod_delayed_work_on
|
||||
mod_timer
|
||||
__module_get
|
||||
|
@ -1493,6 +1500,7 @@
|
|||
param_array_ops
|
||||
param_get_int
|
||||
param_get_string
|
||||
param_get_uint
|
||||
param_ops_bool
|
||||
param_ops_byte
|
||||
param_ops_charp
|
||||
|
@ -1503,6 +1511,7 @@
|
|||
param_ops_ulong
|
||||
param_set_copystring
|
||||
param_set_int
|
||||
param_set_uint_minmax
|
||||
pci_alloc_irq_vectors
|
||||
pci_alloc_irq_vectors_affinity
|
||||
pci_assign_resource
|
||||
|
@ -1802,6 +1811,7 @@
|
|||
regulator_set_mode
|
||||
regulator_set_voltage
|
||||
regulator_set_voltage_sel_regmap
|
||||
regulator_sync_voltage
|
||||
regulator_unregister
|
||||
release_firmware
|
||||
__release_region
|
||||
|
@ -1903,6 +1913,7 @@
|
|||
set_normalized_timespec64
|
||||
set_page_dirty
|
||||
set_page_dirty_lock
|
||||
__SetPageMovable
|
||||
set_task_cpu
|
||||
set_user_nice
|
||||
sg_alloc_table
|
||||
|
@ -2243,6 +2254,7 @@
|
|||
__traceiter_android_rvh_set_task_cpu
|
||||
__traceiter_android_rvh_set_user_nice_locked
|
||||
__traceiter_android_rvh_tick_entry
|
||||
__traceiter_android_rvh_try_to_wake_up_success
|
||||
__traceiter_android_rvh_uclamp_eff_get
|
||||
__traceiter_android_rvh_ufs_complete_init
|
||||
__traceiter_android_rvh_ufs_reprogram_all_keys
|
||||
|
@ -2262,11 +2274,13 @@
|
|||
__traceiter_android_vh_early_resume_begin
|
||||
__traceiter_android_vh_enable_thermal_genl_check
|
||||
__traceiter_android_vh_ipi_stop
|
||||
__traceiter_android_vh_mm_kcompactd_cpu_online
|
||||
__traceiter_android_vh_prio_inheritance
|
||||
__traceiter_android_vh_prio_restore
|
||||
__traceiter_android_vh_resume_end
|
||||
__traceiter_android_vh_scheduler_tick
|
||||
__traceiter_android_vh_setscheduler_uclamp
|
||||
__traceiter_android_vh_set_task_comm
|
||||
__traceiter_android_vh_si_meminfo_adjust
|
||||
__traceiter_android_vh_sysrq_crash
|
||||
__traceiter_android_vh_uclamp_validate
|
||||
|
@ -2340,6 +2354,7 @@
|
|||
__tracepoint_android_rvh_set_task_cpu
|
||||
__tracepoint_android_rvh_set_user_nice_locked
|
||||
__tracepoint_android_rvh_tick_entry
|
||||
__tracepoint_android_rvh_try_to_wake_up_success
|
||||
__tracepoint_android_rvh_uclamp_eff_get
|
||||
__tracepoint_android_rvh_ufs_complete_init
|
||||
__tracepoint_android_rvh_ufs_reprogram_all_keys
|
||||
|
@ -2359,11 +2374,13 @@
|
|||
__tracepoint_android_vh_early_resume_begin
|
||||
__tracepoint_android_vh_enable_thermal_genl_check
|
||||
__tracepoint_android_vh_ipi_stop
|
||||
__tracepoint_android_vh_mm_kcompactd_cpu_online
|
||||
__tracepoint_android_vh_prio_inheritance
|
||||
__tracepoint_android_vh_prio_restore
|
||||
__tracepoint_android_vh_resume_end
|
||||
__tracepoint_android_vh_scheduler_tick
|
||||
__tracepoint_android_vh_setscheduler_uclamp
|
||||
__tracepoint_android_vh_set_task_comm
|
||||
__tracepoint_android_vh_si_meminfo_adjust
|
||||
__tracepoint_android_vh_sysrq_crash
|
||||
__tracepoint_android_vh_uclamp_validate
|
||||
|
@ -2454,6 +2471,7 @@
|
|||
ufshcd_remove
|
||||
ufshcd_system_resume
|
||||
ufshcd_system_suspend
|
||||
unlock_page
|
||||
unmap_mapping_range
|
||||
unpin_user_page
|
||||
__unregister_chrdev
|
||||
|
@ -2599,6 +2617,7 @@
|
|||
vmalloc_user
|
||||
vmap
|
||||
vmf_insert_pfn_prot
|
||||
vm_unmapped_area
|
||||
vprintk
|
||||
vprintk_emit
|
||||
vring_del_virtqueue
|
||||
|
|
|
@ -591,7 +591,7 @@ static int __init riscv_fill_hwcap_from_ext_list(unsigned long *isa2hwcap)
|
|||
|
||||
if (ext->subset_ext_size) {
|
||||
for (int j = 0; j < ext->subset_ext_size; j++) {
|
||||
if (riscv_isa_extension_check(ext->subset_ext_ids[i]))
|
||||
if (riscv_isa_extension_check(ext->subset_ext_ids[j]))
|
||||
set_bit(ext->subset_ext_ids[j], isainfo->isa);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -319,6 +319,7 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_exit_check);
|
|||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_freeze_whether_wake);
|
||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_percpu_rwsem_wq_add);
|
||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_alloc_oem_binder_struct);
|
||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_alloc_workqueue);
|
||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_binder_transaction_received);
|
||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_free_oem_binder_struct);
|
||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_binder_special_task);
|
||||
|
@ -381,6 +382,7 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_compaction_exit);
|
|||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_compaction_try_to_compact_exit);
|
||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_mm_direct_reclaim_enter);
|
||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_mm_direct_reclaim_exit);
|
||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_mm_kcompactd_cpu_online);
|
||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_mm_may_oom_exit);
|
||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_vmscan_kswapd_done);
|
||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_shrink_folio_list);
|
||||
|
|
|
@ -732,6 +732,11 @@ static void __do_sched_recv_cb(u16 part_id, u16 vcpu, bool is_per_vcpu)
|
|||
void *cb_data;
|
||||
|
||||
partition = xa_load(&drv_info->partition_info, part_id);
|
||||
if (!partition) {
|
||||
pr_err("%s: Invalid partition ID 0x%x\n", __func__, part_id);
|
||||
return;
|
||||
}
|
||||
|
||||
read_lock(&partition->rw_lock);
|
||||
callback = partition->callback;
|
||||
cb_data = partition->cb_data;
|
||||
|
@ -782,9 +787,9 @@ static void ffa_notification_info_get(void)
|
|||
if (ids_processed >= max_ids - 1)
|
||||
break;
|
||||
|
||||
part_id = packed_id_list[++ids_processed];
|
||||
part_id = packed_id_list[ids_processed++];
|
||||
|
||||
if (!ids_count[list]) { /* Global Notification */
|
||||
if (ids_count[list] == 1) { /* Global Notification */
|
||||
__do_sched_recv_cb(part_id, 0, false);
|
||||
continue;
|
||||
}
|
||||
|
@ -794,7 +799,7 @@ static void ffa_notification_info_get(void)
|
|||
if (ids_processed >= max_ids - 1)
|
||||
break;
|
||||
|
||||
vcpu_id = packed_id_list[++ids_processed];
|
||||
vcpu_id = packed_id_list[ids_processed++];
|
||||
|
||||
__do_sched_recv_cb(part_id, vcpu_id, true);
|
||||
}
|
||||
|
@ -909,6 +914,11 @@ static int ffa_sched_recv_cb_update(u16 part_id, ffa_sched_recv_cb callback,
|
|||
bool cb_valid;
|
||||
|
||||
partition = xa_load(&drv_info->partition_info, part_id);
|
||||
if (!partition) {
|
||||
pr_err("%s: Invalid partition ID 0x%x\n", __func__, part_id);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
write_lock(&partition->rw_lock);
|
||||
|
||||
cb_valid = !!partition->callback;
|
||||
|
@ -1211,6 +1221,7 @@ static void ffa_setup_partitions(void)
|
|||
ffa_device_unregister(ffa_dev);
|
||||
continue;
|
||||
}
|
||||
rwlock_init(&info->rw_lock);
|
||||
xa_store(&drv_info->partition_info, tpbuf->id, info, GFP_KERNEL);
|
||||
}
|
||||
drv_info->partition_count = count;
|
||||
|
@ -1221,6 +1232,7 @@ static void ffa_setup_partitions(void)
|
|||
info = kzalloc(sizeof(*info), GFP_KERNEL);
|
||||
if (!info)
|
||||
return;
|
||||
rwlock_init(&info->rw_lock);
|
||||
xa_store(&drv_info->partition_info, drv_info->vm_id, info, GFP_KERNEL);
|
||||
drv_info->partition_count++;
|
||||
}
|
||||
|
|
|
@ -759,6 +759,7 @@ int uvcg_video_enable(struct uvc_video *video)
|
|||
video->req_int_count = 0;
|
||||
|
||||
uvc_video_ep_queue_initial_requests(video);
|
||||
queue_work(video->async_wq, &video->pump);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
|
|
@ -1893,7 +1893,7 @@ void xhci_mem_cleanup(struct xhci_hcd *xhci)
|
|||
|
||||
cancel_delayed_work_sync(&xhci->cmd_timer);
|
||||
|
||||
for (i = 0; i < xhci->max_interrupters; i++) {
|
||||
for (i = 0; xhci->interrupters && i < xhci->max_interrupters; i++) {
|
||||
if (xhci->interrupters[i]) {
|
||||
xhci_remove_interrupter(xhci, xhci->interrupters[i]);
|
||||
xhci_free_interrupter(xhci, xhci->interrupters[i]);
|
||||
|
|
|
@ -1236,6 +1236,7 @@ void __set_task_comm(struct task_struct *tsk, const char *buf, bool exec)
|
|||
task_lock(tsk);
|
||||
trace_task_rename(tsk, buf);
|
||||
strscpy_pad(tsk->comm, buf, sizeof(tsk->comm));
|
||||
trace_android_vh_set_task_comm(tsk);
|
||||
task_unlock(tsk);
|
||||
perf_event_comm(tsk, exec);
|
||||
trace_android_rvh_set_task_comm(tsk, exec);
|
||||
|
|
|
@ -51,7 +51,7 @@ static int exfat_cont_expand(struct inode *inode, loff_t size)
|
|||
clu.flags = ei->flags;
|
||||
|
||||
ret = exfat_alloc_cluster(inode, new_num_clusters - num_clusters,
|
||||
&clu, IS_DIRSYNC(inode));
|
||||
&clu, inode_needs_sync(inode));
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
|
@ -77,12 +77,11 @@ out:
|
|||
ei->i_size_aligned = round_up(size, sb->s_blocksize);
|
||||
ei->i_size_ondisk = ei->i_size_aligned;
|
||||
inode->i_blocks = round_up(size, sbi->cluster_size) >> 9;
|
||||
|
||||
if (IS_DIRSYNC(inode))
|
||||
return write_inode_now(inode, 1);
|
||||
|
||||
mark_inode_dirty(inode);
|
||||
|
||||
if (IS_SYNC(inode))
|
||||
return write_inode_now(inode, 1);
|
||||
|
||||
return 0;
|
||||
|
||||
free_clu:
|
||||
|
@ -344,6 +343,7 @@ int exfat_setattr(struct mnt_idmap *idmap, struct dentry *dentry,
|
|||
if (attr->ia_valid & ATTR_SIZE)
|
||||
inode_set_mtime_to_ts(inode, inode_set_ctime_current(inode));
|
||||
|
||||
setattr_copy(&nop_mnt_idmap, inode, attr);
|
||||
exfat_truncate_inode_atime(inode);
|
||||
|
||||
if (attr->ia_valid & ATTR_SIZE) {
|
||||
|
|
|
@ -56,18 +56,18 @@ int __exfat_write_inode(struct inode *inode, int sync)
|
|||
&ep->dentry.file.create_time,
|
||||
&ep->dentry.file.create_date,
|
||||
&ep->dentry.file.create_time_cs);
|
||||
ts = inode_get_mtime(inode);
|
||||
exfat_set_entry_time(sbi, &ts,
|
||||
&ep->dentry.file.modify_tz,
|
||||
&ep->dentry.file.modify_time,
|
||||
&ep->dentry.file.modify_date,
|
||||
&ep->dentry.file.modify_time_cs);
|
||||
inode_set_mtime_to_ts(inode, ts);
|
||||
ts = inode_get_atime(inode);
|
||||
exfat_set_entry_time(sbi, &ts,
|
||||
&ep->dentry.file.access_tz,
|
||||
&ep->dentry.file.access_time,
|
||||
&ep->dentry.file.access_date,
|
||||
NULL);
|
||||
inode_set_atime_to_ts(inode, ts);
|
||||
|
||||
/* File size should be zero if there is no cluster allocated */
|
||||
on_disk_size = i_size_read(inode);
|
||||
|
|
|
@ -378,7 +378,8 @@ sync_nodes:
|
|||
f2fs_remove_ino_entry(sbi, ino, APPEND_INO);
|
||||
clear_inode_flag(inode, FI_APPEND_WRITE);
|
||||
flush_out:
|
||||
if (!atomic && F2FS_OPTION(sbi).fsync_mode != FSYNC_MODE_NOBARRIER)
|
||||
if ((!atomic && F2FS_OPTION(sbi).fsync_mode != FSYNC_MODE_NOBARRIER) ||
|
||||
(atomic && !test_opt(sbi, NOBARRIER) && f2fs_sb_has_blkzoned(sbi)))
|
||||
ret = f2fs_issue_flush(sbi, inode->i_ino);
|
||||
if (!ret) {
|
||||
f2fs_remove_ino_entry(sbi, ino, UPDATE_INO);
|
||||
|
|
|
@ -1676,7 +1676,7 @@ static int __write_node_page(struct page *page, bool atomic, bool *submitted,
|
|||
goto redirty_out;
|
||||
}
|
||||
|
||||
if (atomic && !test_opt(sbi, NOBARRIER))
|
||||
if (atomic && !test_opt(sbi, NOBARRIER) && !f2fs_sb_has_blkzoned(sbi))
|
||||
fio.op_flags |= REQ_PREFLUSH | REQ_FUA;
|
||||
|
||||
/* should add to global list before clearing PAGECACHE status */
|
||||
|
|
|
@ -253,7 +253,6 @@ static inline unsigned long em_cpu_energy(struct em_perf_domain *pd,
|
|||
* max utilization to the allowed CPU capacity before calculating
|
||||
* effective performance.
|
||||
*/
|
||||
max_util = map_util_perf(max_util);
|
||||
max_util = min(max_util, allowed_cpu_cap);
|
||||
|
||||
/*
|
||||
|
|
|
@ -368,7 +368,8 @@ static inline swp_entry_t page_swap_entry(struct page *page)
|
|||
}
|
||||
|
||||
/* linux/mm/workingset.c */
|
||||
bool workingset_test_recent(void *shadow, bool file, bool *workingset);
|
||||
bool workingset_test_recent(void *shadow, bool file, bool *workingset,
|
||||
bool flush);
|
||||
void workingset_age_nonresident(struct lruvec *lruvec, unsigned long nr_pages);
|
||||
void *workingset_eviction(struct folio *folio, struct mem_cgroup *target_memcg);
|
||||
void workingset_refault(struct folio *folio, void *shadow);
|
||||
|
|
|
@ -76,6 +76,9 @@ DECLARE_HOOK(android_vh_look_around,
|
|||
TP_PROTO(struct page_vma_mapped_walk *pvmw, struct folio *folio,
|
||||
struct vm_area_struct *vma, int *referenced),
|
||||
TP_ARGS(pvmw, folio, vma, referenced));
|
||||
DECLARE_HOOK(android_vh_mm_kcompactd_cpu_online,
|
||||
TP_PROTO(int cpu),
|
||||
TP_ARGS(cpu));
|
||||
DECLARE_HOOK(android_vh_free_unref_page_bypass,
|
||||
TP_PROTO(struct page *page, int order, int migratetype, bool *bypass),
|
||||
TP_ARGS(page, order, migratetype, bypass));
|
||||
|
|
|
@ -476,7 +476,9 @@ DECLARE_HOOK(android_vh_prio_restore,
|
|||
TP_PROTO(int saved_prio),
|
||||
TP_ARGS(saved_prio));
|
||||
|
||||
/* macro versions of hooks are no longer required */
|
||||
DECLARE_HOOK(android_vh_set_task_comm,
|
||||
TP_PROTO(struct task_struct *p),
|
||||
TP_ARGS(p));
|
||||
|
||||
#endif /* _TRACE_HOOK_SCHED_H */
|
||||
/* This part must be outside protection */
|
||||
|
|
|
@ -10,6 +10,10 @@
|
|||
* Following tracepoints are not exported in tracefs and provide a
|
||||
* mechanism for vendor modules to hook and extend functionality
|
||||
*/
|
||||
DECLARE_RESTRICTED_HOOK(android_rvh_alloc_workqueue,
|
||||
TP_PROTO(struct workqueue_struct *wq, unsigned int *flags, int *max_active),
|
||||
TP_ARGS(wq, flags, max_active), 1);
|
||||
|
||||
DECLARE_RESTRICTED_HOOK(android_rvh_create_worker,
|
||||
TP_PROTO(struct task_struct *p, struct workqueue_attrs *attrs),
|
||||
TP_ARGS(p, attrs), 1);
|
||||
|
|
|
@ -121,3 +121,4 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_set_sugov_sched_attr);
|
|||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_set_iowait);
|
||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_prio_inheritance);
|
||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_prio_restore);
|
||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_set_task_comm);
|
||||
|
|
|
@ -4732,6 +4732,7 @@ struct workqueue_struct *alloc_workqueue(const char *fmt,
|
|||
vsnprintf(wq->name, sizeof(wq->name), fmt, args);
|
||||
va_end(args);
|
||||
|
||||
trace_android_rvh_alloc_workqueue(wq, &flags, &max_active);
|
||||
max_active = max_active ?: WQ_DFL_ACTIVE;
|
||||
max_active = wq_clamp_max_active(max_active, flags, wq->name);
|
||||
|
||||
|
|
|
@ -3247,6 +3247,7 @@ static int kcompactd_cpu_online(unsigned int cpu)
|
|||
if (pgdat->kcompactd)
|
||||
set_cpus_allowed_ptr(pgdat->kcompactd, mask);
|
||||
}
|
||||
trace_android_vh_mm_kcompactd_cpu_online(cpu);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
@ -989,6 +989,9 @@ static void damon_do_apply_schemes(struct damon_ctx *c,
|
|||
damon_for_each_scheme(s, c) {
|
||||
struct damos_quota *quota = &s->quota;
|
||||
|
||||
if (c->passed_sample_intervals != s->next_apply_sis)
|
||||
continue;
|
||||
|
||||
if (!s->wmarks.activated)
|
||||
continue;
|
||||
|
||||
|
@ -1089,10 +1092,6 @@ static void kdamond_apply_schemes(struct damon_ctx *c)
|
|||
if (c->passed_sample_intervals != s->next_apply_sis)
|
||||
continue;
|
||||
|
||||
s->next_apply_sis +=
|
||||
(s->apply_interval_us ? s->apply_interval_us :
|
||||
c->attrs.aggr_interval) / sample_interval;
|
||||
|
||||
if (!s->wmarks.activated)
|
||||
continue;
|
||||
|
||||
|
@ -1108,6 +1107,14 @@ static void kdamond_apply_schemes(struct damon_ctx *c)
|
|||
damon_for_each_region_safe(r, next_r, t)
|
||||
damon_do_apply_schemes(c, t, r);
|
||||
}
|
||||
|
||||
damon_for_each_scheme(s, c) {
|
||||
if (c->passed_sample_intervals != s->next_apply_sis)
|
||||
continue;
|
||||
s->next_apply_sis +=
|
||||
(s->apply_interval_us ? s->apply_interval_us :
|
||||
c->attrs.aggr_interval) / sample_interval;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -1208,6 +1215,7 @@ static void damon_split_region_at(struct damon_target *t,
|
|||
|
||||
new->age = r->age;
|
||||
new->last_nr_accesses = r->last_nr_accesses;
|
||||
new->nr_accesses = r->nr_accesses;
|
||||
|
||||
damon_insert_region(new, r, damon_next_region(r), t);
|
||||
}
|
||||
|
|
|
@ -139,6 +139,13 @@ static const struct kobj_type damon_sysfs_scheme_region_ktype = {
|
|||
* 'finished'. Then, damon_sysfs_before_damos_apply() understands the
|
||||
* situation by showing the 'finished' status and do nothing.
|
||||
*
|
||||
* If DAMOS is not applied to any region due to any reasons including the
|
||||
* access pattern, the watermarks, the quotas, and the filters,
|
||||
* ->before_damos_apply() will not be called back. Until the situation is
|
||||
* changed, the update will not be finished. To avoid this,
|
||||
* damon_sysfs_after_sampling() set the status as 'finished' if more than two
|
||||
* apply intervals of the scheme is passed while the state is 'idle'.
|
||||
*
|
||||
* Finally, the tried regions request handling finisher function
|
||||
* (damon_sysfs_schemes_update_regions_stop()) unregisters the callbacks.
|
||||
*/
|
||||
|
@ -154,6 +161,7 @@ struct damon_sysfs_scheme_regions {
|
|||
int nr_regions;
|
||||
unsigned long total_bytes;
|
||||
enum damos_sysfs_regions_upd_status upd_status;
|
||||
unsigned long upd_timeout_jiffies;
|
||||
};
|
||||
|
||||
static struct damon_sysfs_scheme_regions *
|
||||
|
@ -1854,7 +1862,9 @@ void damos_sysfs_mark_finished_regions_updates(struct damon_ctx *ctx)
|
|||
for (i = 0; i < sysfs_schemes->nr; i++) {
|
||||
sysfs_regions = sysfs_schemes->schemes_arr[i]->tried_regions;
|
||||
if (sysfs_regions->upd_status ==
|
||||
DAMOS_TRIED_REGIONS_UPD_STARTED)
|
||||
DAMOS_TRIED_REGIONS_UPD_STARTED ||
|
||||
time_after(jiffies,
|
||||
sysfs_regions->upd_timeout_jiffies))
|
||||
sysfs_regions->upd_status =
|
||||
DAMOS_TRIED_REGIONS_UPD_FINISHED;
|
||||
}
|
||||
|
@ -1883,14 +1893,41 @@ int damon_sysfs_schemes_clear_regions(
|
|||
return 0;
|
||||
}
|
||||
|
||||
static struct damos *damos_sysfs_nth_scheme(int n, struct damon_ctx *ctx)
|
||||
{
|
||||
struct damos *scheme;
|
||||
int i = 0;
|
||||
|
||||
damon_for_each_scheme(scheme, ctx) {
|
||||
if (i == n)
|
||||
return scheme;
|
||||
i++;
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static void damos_tried_regions_init_upd_status(
|
||||
struct damon_sysfs_schemes *sysfs_schemes)
|
||||
struct damon_sysfs_schemes *sysfs_schemes,
|
||||
struct damon_ctx *ctx)
|
||||
{
|
||||
int i;
|
||||
struct damos *scheme;
|
||||
struct damon_sysfs_scheme_regions *sysfs_regions;
|
||||
|
||||
for (i = 0; i < sysfs_schemes->nr; i++)
|
||||
sysfs_schemes->schemes_arr[i]->tried_regions->upd_status =
|
||||
DAMOS_TRIED_REGIONS_UPD_IDLE;
|
||||
for (i = 0; i < sysfs_schemes->nr; i++) {
|
||||
sysfs_regions = sysfs_schemes->schemes_arr[i]->tried_regions;
|
||||
scheme = damos_sysfs_nth_scheme(i, ctx);
|
||||
if (!scheme) {
|
||||
sysfs_regions->upd_status =
|
||||
DAMOS_TRIED_REGIONS_UPD_FINISHED;
|
||||
continue;
|
||||
}
|
||||
sysfs_regions->upd_status = DAMOS_TRIED_REGIONS_UPD_IDLE;
|
||||
sysfs_regions->upd_timeout_jiffies = jiffies +
|
||||
2 * usecs_to_jiffies(scheme->apply_interval_us ?
|
||||
scheme->apply_interval_us :
|
||||
ctx->attrs.sample_interval);
|
||||
}
|
||||
}
|
||||
|
||||
/* Called from damon_sysfs_cmd_request_callback under damon_sysfs_lock */
|
||||
|
@ -1900,7 +1937,7 @@ int damon_sysfs_schemes_update_regions_start(
|
|||
{
|
||||
damon_sysfs_schemes_clear_regions(sysfs_schemes, ctx);
|
||||
damon_sysfs_schemes_for_damos_callback = sysfs_schemes;
|
||||
damos_tried_regions_init_upd_status(sysfs_schemes);
|
||||
damos_tried_regions_init_upd_status(sysfs_schemes, ctx);
|
||||
damos_regions_upd_total_bytes_only = total_bytes_only;
|
||||
ctx->callback.before_damos_apply = damon_sysfs_before_damos_apply;
|
||||
return 0;
|
||||
|
|
|
@ -4200,6 +4200,9 @@ static void filemap_cachestat(struct address_space *mapping,
|
|||
XA_STATE(xas, &mapping->i_pages, first_index);
|
||||
struct folio *folio;
|
||||
|
||||
/* Flush stats (and potentially sleep) outside the RCU read section. */
|
||||
mem_cgroup_flush_stats_ratelimited(NULL);
|
||||
|
||||
rcu_read_lock();
|
||||
xas_for_each(&xas, folio, last_index) {
|
||||
int order;
|
||||
|
@ -4263,7 +4266,7 @@ static void filemap_cachestat(struct address_space *mapping,
|
|||
goto resched;
|
||||
}
|
||||
#endif
|
||||
if (workingset_test_recent(shadow, true, &workingset))
|
||||
if (workingset_test_recent(shadow, true, &workingset, false))
|
||||
cs->nr_recently_evicted += nr_pages;
|
||||
|
||||
goto resched;
|
||||
|
|
|
@ -720,6 +720,7 @@ static inline void memcg_rstat_updated(struct mem_cgroup *memcg, int val)
|
|||
{
|
||||
struct memcg_vmstats_percpu *statc;
|
||||
int cpu = smp_processor_id();
|
||||
unsigned int stats_updates;
|
||||
|
||||
if (!val)
|
||||
return;
|
||||
|
@ -727,8 +728,9 @@ static inline void memcg_rstat_updated(struct mem_cgroup *memcg, int val)
|
|||
cgroup_rstat_updated(memcg->css.cgroup, cpu);
|
||||
statc = this_cpu_ptr(memcg->vmstats_percpu);
|
||||
for (; statc; statc = statc->parent) {
|
||||
statc->stats_updates += abs(val);
|
||||
if (statc->stats_updates < MEMCG_CHARGE_BATCH)
|
||||
stats_updates = READ_ONCE(statc->stats_updates) + abs(val);
|
||||
WRITE_ONCE(statc->stats_updates, stats_updates);
|
||||
if (stats_updates < MEMCG_CHARGE_BATCH)
|
||||
continue;
|
||||
|
||||
/*
|
||||
|
@ -736,9 +738,9 @@ static inline void memcg_rstat_updated(struct mem_cgroup *memcg, int val)
|
|||
* redundant. Avoid the overhead of the atomic update.
|
||||
*/
|
||||
if (!memcg_vmstats_needs_flush(statc->vmstats))
|
||||
atomic64_add(statc->stats_updates,
|
||||
atomic64_add(stats_updates,
|
||||
&statc->vmstats->stats_updates);
|
||||
statc->stats_updates = 0;
|
||||
WRITE_ONCE(statc->stats_updates, 0);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -5771,7 +5773,7 @@ static void mem_cgroup_css_rstat_flush(struct cgroup_subsys_state *css, int cpu)
|
|||
}
|
||||
}
|
||||
}
|
||||
statc->stats_updates = 0;
|
||||
WRITE_ONCE(statc->stats_updates, 0);
|
||||
/* We are in a per-cpu loop here, only do the atomic write once */
|
||||
if (atomic64_read(&memcg->vmstats->stats_updates))
|
||||
atomic64_set(&memcg->vmstats->stats_updates, 0);
|
||||
|
@ -7372,8 +7374,7 @@ void __mem_cgroup_uncharge_list(struct list_head *page_list)
|
|||
* @new: Replacement folio.
|
||||
*
|
||||
* Charge @new as a replacement folio for @old. @old will
|
||||
* be uncharged upon free. This is only used by the page cache
|
||||
* (in replace_page_cache_folio()).
|
||||
* be uncharged upon free.
|
||||
*
|
||||
* Both folios must be locked, @new->mapping must be set up.
|
||||
*/
|
||||
|
|
|
@ -1782,7 +1782,7 @@ static int shmem_replace_folio(struct folio **foliop, gfp_t gfp,
|
|||
xa_lock_irq(&swap_mapping->i_pages);
|
||||
error = shmem_replace_entry(swap_mapping, swap_index, old, new);
|
||||
if (!error) {
|
||||
mem_cgroup_migrate(old, new);
|
||||
mem_cgroup_replace_folio(old, new);
|
||||
__lruvec_stat_mod_folio(new, NR_FILE_PAGES, 1);
|
||||
__lruvec_stat_mod_folio(new, NR_SHMEM, 1);
|
||||
__lruvec_stat_mod_folio(old, NR_FILE_PAGES, -1);
|
||||
|
|
|
@ -412,10 +412,12 @@ void *workingset_eviction(struct folio *folio, struct mem_cgroup *target_memcg)
|
|||
* @file: whether the corresponding folio is from the file lru.
|
||||
* @workingset: where the workingset value unpacked from shadow should
|
||||
* be stored.
|
||||
* @flush: whether to flush cgroup rstat.
|
||||
*
|
||||
* Return: true if the shadow is for a recently evicted folio; false otherwise.
|
||||
*/
|
||||
bool workingset_test_recent(void *shadow, bool file, bool *workingset)
|
||||
bool workingset_test_recent(void *shadow, bool file, bool *workingset,
|
||||
bool flush)
|
||||
{
|
||||
struct mem_cgroup *eviction_memcg;
|
||||
struct lruvec *eviction_lruvec;
|
||||
|
@ -467,10 +469,16 @@ bool workingset_test_recent(void *shadow, bool file, bool *workingset)
|
|||
|
||||
/*
|
||||
* Flush stats (and potentially sleep) outside the RCU read section.
|
||||
*
|
||||
* Note that workingset_test_recent() itself might be called in RCU read
|
||||
* section (for e.g, in cachestat) - these callers need to skip flushing
|
||||
* stats (via the flush argument).
|
||||
*
|
||||
* XXX: With per-memcg flushing and thresholding, is ratelimiting
|
||||
* still needed here?
|
||||
*/
|
||||
mem_cgroup_flush_stats_ratelimited(eviction_memcg);
|
||||
if (flush)
|
||||
mem_cgroup_flush_stats_ratelimited(eviction_memcg);
|
||||
|
||||
eviction_lruvec = mem_cgroup_lruvec(eviction_memcg, pgdat);
|
||||
refault = atomic_long_read(&eviction_lruvec->nonresident_age);
|
||||
|
@ -560,7 +568,7 @@ void workingset_refault(struct folio *folio, void *shadow)
|
|||
|
||||
mod_lruvec_state(lruvec, WORKINGSET_REFAULT_BASE + file, nr);
|
||||
|
||||
if (!workingset_test_recent(shadow, file, &workingset))
|
||||
if (!workingset_test_recent(shadow, file, &workingset, true))
|
||||
return;
|
||||
|
||||
folio_set_active(folio);
|
||||
|
|
|
@ -2148,7 +2148,8 @@ static bool cfg80211_6ghz_power_type_valid(const u8 *ie, size_t ielen,
|
|||
struct ieee80211_he_operation *he_oper;
|
||||
|
||||
tmp = cfg80211_find_ext_elem(WLAN_EID_EXT_HE_OPERATION, ie, ielen);
|
||||
if (tmp && tmp->datalen >= sizeof(*he_oper) + 1) {
|
||||
if (tmp && tmp->datalen >= sizeof(*he_oper) + 1 &&
|
||||
tmp->datalen >= ieee80211_he_oper_size(tmp->data + 1)) {
|
||||
const struct ieee80211_he_6ghz_oper *he_6ghz_oper;
|
||||
|
||||
he_oper = (void *)&tmp->data[1];
|
||||
|
|
Loading…
Reference in New Issue
Block a user