[PATCH] wifi: rtw88: extend USB TX report timeout to RTL8822BU

VolcomIlluminated posted 1 patch 1 week ago
[PATCH] wifi: rtw88: extend USB TX report timeout to RTL8822BU
Posted by VolcomIlluminated 1 week ago
Luka Gejak's patch increased the TX report timeout for RTL8723DU to
accommodate off-channel dwell time during background scans. The same
issue affects RTL8822BU (tested on Edimax EW-7822ULC) where background
scans cause the firmware to stay off-channel for periods exceeding the
default 500ms timeout, causing the purge timer to fire prematurely and
drop TX tracking skbs.

Extend the 2500ms timeout to also cover RTL8822BU USB devices.

Tested on RTL8822BU (Edimax EW-7822ULC) with 17,706 packets over 24+
hours with zero drops.

Fixes: a82dfd33d123 ("wifi: rtw88: Add common USB chip support")
Cc: stable@vger.kernel.org
Signed-off-by: VolcomIlluminated <Volcomilluminated@airmail.cc>
---
--- /tmp/linux-6.18/drivers/net/wireless/realtek/rtw88/tx.c	2025-11-30 17:42:10.000000000 -0500
+++ /home/ptpx86mm1/kernelbuild/linux-6.18/drivers/net/wireless/realtek/rtw88/tx.c	2026-05-31 16:00:37.125645594 -0400
@@ -196,6 +196,7 @@
 void rtw_tx_report_enqueue(struct rtw_dev *rtwdev, struct sk_buff *skb, u8 sn)
 {
 	struct rtw_tx_report *tx_report = &rtwdev->tx_report;
+	unsigned long timeout = RTW_TX_PROBE_TIMEOUT;
 	unsigned long flags;
 	u8 *drv_data;
 
@@ -207,7 +208,12 @@
 	__skb_queue_tail(&tx_report->queue, skb);
 	spin_unlock_irqrestore(&tx_report->q_lock, flags);
 
-	mod_timer(&tx_report->purge_timer, jiffies + RTW_TX_PROBE_TIMEOUT);
+	if ((rtwdev->chip->id == RTW_CHIP_TYPE_8723D ||
+	     rtwdev->chip->id == RTW_CHIP_TYPE_8822B) &&
+	    rtwdev->hci.type == RTW_HCI_TYPE_USB)
+		timeout = msecs_to_jiffies(2500);
+
+	mod_timer(&tx_report->purge_timer, jiffies + timeout);
 }
 EXPORT_SYMBOL(rtw_tx_report_enqueue);
RE: [PATCH] wifi: rtw88: extend USB TX report timeout to RTL8822BU
Posted by Ping-Ke Shih 1 week ago
VolcomIlluminated <Volcomilluminated@airmail.cc> wrote:
> Luka Gejak's patch increased the TX report timeout for RTL8723DU to
> accommodate off-channel dwell time during background scans. The same
> issue affects RTL8822BU (tested on Edimax EW-7822ULC) where background
> scans cause the firmware to stay off-channel for periods exceeding the
> default 500ms timeout, causing the purge timer to fire prematurely and
> drop TX tracking skbs.
> 
> Extend the 2500ms timeout to also cover RTL8822BU USB devices.
> 
> Tested on RTL8822BU (Edimax EW-7822ULC) with 17,706 packets over 24+
> hours with zero drops.
> 
> Fixes: a82dfd33d123 ("wifi: rtw88: Add common USB chip support")
> Cc: stable@vger.kernel.org
> Signed-off-by: VolcomIlluminated <Volcomilluminated@airmail.cc>
> ---
> --- /tmp/linux-6.18/drivers/net/wireless/realtek/rtw88/tx.c     2025-11-30 17:42:10.000000000 -0500
> +++ /home/ptpx86mm1/kernelbuild/linux-6.18/drivers/net/wireless/realtek/rtw88/tx.c      2026-05-31

Just clone git repository and use 'git format-patch' to generate patch file
and send out.

> 16:00:37.125645594 -0400
> @@ -196,6 +196,7 @@
>  void rtw_tx_report_enqueue(struct rtw_dev *rtwdev, struct sk_buff *skb, u8 sn)
>  {
>         struct rtw_tx_report *tx_report = &rtwdev->tx_report;
> +       unsigned long timeout = RTW_TX_PROBE_TIMEOUT;
>         unsigned long flags;
>         u8 *drv_data;
> 
> @@ -207,7 +208,12 @@
>         __skb_queue_tail(&tx_report->queue, skb);
>         spin_unlock_irqrestore(&tx_report->q_lock, flags);
> 
> -       mod_timer(&tx_report->purge_timer, jiffies + RTW_TX_PROBE_TIMEOUT);
> +       if ((rtwdev->chip->id == RTW_CHIP_TYPE_8723D ||
> +            rtwdev->chip->id == RTW_CHIP_TYPE_8822B) &&

Please use https://github.com/pkshih/rtw.git rtw-next branch as your base. 

> +           rtwdev->hci.type == RTW_HCI_TYPE_USB)
> +               timeout = msecs_to_jiffies(2500);
> +
> +       mod_timer(&tx_report->purge_timer, jiffies + timeout);
>  }
>  EXPORT_SYMBOL(rtw_tx_report_enqueue);
>