]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
wifi: rtw88: fix stopping queues in wrong timing when HW scan
authorChih-Kang Chang <gary.chang@realtek.com>
Wed, 27 Jul 2022 06:50:01 +0000 (14:50 +0800)
committerKalle Valo <kvalo@kernel.org>
Tue, 9 Aug 2022 05:48:08 +0000 (08:48 +0300)
HW scan need to start queues after switch to OP channel, and stop queues
before leaving op channel. However, in original code, driver will start
queues after switch to OP channel, but stop queues until switch to OP
channel next time, that will cause packets transmitted in wrong channel.
So we fix the stop queues timing.

Signed-off-by: Chih-Kang Chang <gary.chang@realtek.com>
Signed-off-by: Ping-Ke Shih <pkshih@realtek.com>
Signed-off-by: Kalle Valo <kvalo@kernel.org>
Link: https://lore.kernel.org/r/20220727065003.28340-3-pkshih@realtek.com
drivers/net/wireless/realtek/rtw88/fw.c

index efa51b2f53025d0af23ab47f823b21b1be78d0a4..a644e2b617a144cebccabe496156c892e4f0f03a 100644 (file)
@@ -2227,7 +2227,12 @@ void rtw_hw_scan_chan_switch(struct rtw_dev *rtwdev, struct sk_buff *skb)
                                chan_type = COEX_SWITCH_TO_24G_NOFORSCAN;
                        rtw_coex_switchband_notify(rtwdev, chan_type);
                }
-               if (rtw_is_op_chan(rtwdev, chan))
+               /* The channel of C2H RTW_SCAN_NOTIFY_ID_PRESWITCH is next
+                * channel that hardware will switch. We need to stop queue
+                * if next channel is non-op channel.
+                */
+               if (!rtw_is_op_chan(rtwdev, chan) &&
+                   rtw_is_op_chan(rtwdev, hal->current_channel))
                        ieee80211_stop_queues(rtwdev->hw);
        }