Ping-Ke Shih <pkshih@xxxxxxxxxxx> wrote: > The ieee80211_ops::sta_rc_update must be atomic, because > ieee80211_chan_bw_change() holds rcu_read lock while calling > drv_sta_rc_update(), so create a work to do original things. > > Voluntary context switch within RCU read-side critical section! > WARNING: CPU: 0 PID: 4621 at kernel/rcu/tree_plugin.h:318 > rcu_note_context_switch+0x571/0x5d0 > CPU: 0 PID: 4621 Comm: kworker/u16:2 Tainted: G W OE > Workqueue: phy3 ieee80211_chswitch_work [mac80211] > RIP: 0010:rcu_note_context_switch+0x571/0x5d0 > Call Trace: > <TASK> > __schedule+0xb0/0x1460 > ? __mod_timer+0x116/0x360 > schedule+0x5a/0xc0 > schedule_timeout+0x87/0x150 > ? trace_raw_output_tick_stop+0x60/0x60 > wait_for_completion_timeout+0x7b/0x140 > usb_start_wait_urb+0x82/0x160 [usbcore > usb_control_msg+0xe3/0x140 [usbcore > rtw_usb_read+0x88/0xe0 [rtw_usb > rtw_usb_read8+0xf/0x10 [rtw_usb > rtw_fw_send_h2c_command+0xa0/0x170 [rtw_core > rtw_fw_send_ra_info+0xc9/0xf0 [rtw_core > drv_sta_rc_update+0x7c/0x160 [mac80211 > ieee80211_chan_bw_change+0xfb/0x110 [mac80211 > ieee80211_change_chanctx+0x38/0x130 [mac80211 > ieee80211_vif_use_reserved_switch+0x34e/0x900 [mac80211 > ieee80211_link_use_reserved_context+0x88/0xe0 [mac80211 > ieee80211_chswitch_work+0x95/0x170 [mac80211 > process_one_work+0x201/0x410 > worker_thread+0x4a/0x3b0 > ? process_one_work+0x410/0x410 > kthread+0xe1/0x110 > ? kthread_complete_and_exit+0x20/0x20 > ret_from_fork+0x1f/0x30 > </TASK> > > Cc: stable@xxxxxxxxxxxxxxx > Fixes: c1edc86472fc ("rtw88: add ieee80211:sta_rc_update ops") > Reported-by: Larry Finger <Larry.Finger@xxxxxxxxxxxx> > Link: https://lore.kernel.org/linux-wireless/f1e31e8e-f84e-3791-50fb-663a83c5c6e9@xxxxxxxxxxxx/T/#t > Signed-off-by: Ping-Ke Shih <pkshih@xxxxxxxxxxx> > Tested-by: Larry Finger <Larry.Finger@xxxxxxxxxxxx> Patch applied to wireless.git, thanks. bcafcb959a57 wifi: rtw88: use work to update rate to avoid RCU warning -- https://patchwork.kernel.org/project/linux-wireless/patch/20230508085429.46653-1-pkshih@xxxxxxxxxxx/ https://wireless.wiki.kernel.org/en/developers/documentation/submittingpatches