All of lore.kernel.org
 help / color / mirror / Atom feed
From: Ping-Ke Shih <pkshih@realtek.com>
To: "luka.gejak@linux.dev" <luka.gejak@linux.dev>,
	Kalle Valo <kvalo@kernel.org>
Cc: Stanislaw Gruszka <sgruszka@redhat.com>,
	Yan-Hsuan Chuang <yhchuang@realtek.com>,
	Brian Norris <briannorris@chromium.org>,
	"linux-wireless@vger.kernel.org" <linux-wireless@vger.kernel.org>,
	"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
	"stable@vger.kernel.org" <stable@vger.kernel.org>
Subject: RE: [PATCH v2] wifi: rtw88: increase TX report timeout to fix race condition
Date: Fri, 8 May 2026 03:12:41 +0000	[thread overview]
Message-ID: <924a011d3be6497dbaaf399c366d995d@realtek.com> (raw)
In-Reply-To: <20260507163621.73295-1-luka.gejak@linux.dev>

luka.gejak@linux.dev <luka.gejak@linux.dev> wrote:
> From: Luka Gejak <luka.gejak@linux.dev>
> 
> The driver expects the firmware to report TX status within 500ms.
> However, a timeout can be triggered when the hardware performs
> background scans while under TX load. During these scans, the firmware
> stays off-channel for periods exceeding 500ms, delaying the delivery of
> TX reports back to the driver.
> 
> When this occurs, the purge timer fires prematurely and drops the
> tracking skbs from the queue. This results in the host stack
> interpreting the missing status as packet loss, leading to TCP window
> collapse. In testing with iperf3, this causes throughput to drop from
> ~90 Mbps to near-zero for approximately 2 seconds until the connection
> recovers.
> 
> Increase RTW_TX_PROBE_TIMEOUT to 2500ms for RTL8723DU. This duration is
> sufficient to accommodate off-channel dwell time during full background
> scans, ensuring the purge timer only trips during genuine firmware
> lockups and preventing unnecessary TCP retransmission cycles.
> 
> Fixes: e3037485c68e ("rtw88: new Realtek 802.11ac driver")

I don't think this commit introduce USB support. 

> Cc: stable@vger.kernel.org
> Tested-by: Luka Gejak <luka.gejak@linux.dev>
> Signed-off-by: Luka Gejak <luka.gejak@linux.dev>
> ---
> Changes in v2:
>  -Isolated the change to RTL8723DU as requested by Ping-Ke
> 
>  drivers/net/wireless/realtek/rtw88/tx.c | 9 ++++++++-
>  1 file changed, 8 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/net/wireless/realtek/rtw88/tx.c b/drivers/net/wireless/realtek/rtw88/tx.c
> index 3106edb84fb4..7fab83c3f6b5 100644
> --- a/drivers/net/wireless/realtek/rtw88/tx.c
> +++ b/drivers/net/wireless/realtek/rtw88/tx.c
> @@ -196,6 +196,7 @@ void rtw_tx_report_purge_timer(struct timer_list *t)
>  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;

Declare RTW_TX_PROBE_TIMEOUT as default value.

unsigned long timeout = RTW_TX_PROBE_TIMEOUT;

>         unsigned long flags;
>         u8 *drv_data;
> 
> @@ -207,7 +208,13 @@ void rtw_tx_report_enqueue(struct rtw_dev *rtwdev, struct sk_buff *skb, u8 sn)
>         __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->hci.type == RTW_HCI_TYPE_USB)
> +               timeout = msecs_to_jiffies(2500);

Only RTL8723DU uses different setting treated as an exception by if-condition.

> +       else
> +               timeout = RTW_TX_PROBE_TIMEOUT;
> +
> +       mod_timer(&tx_report->purge_timer, jiffies + timeout);
>  }
>  EXPORT_SYMBOL(rtw_tx_report_enqueue);
> 
> --
> 2.54.0


      reply	other threads:[~2026-05-08  3:13 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-05-07 16:36 [PATCH v2] wifi: rtw88: increase TX report timeout to fix race condition luka.gejak
2026-05-08  3:12 ` Ping-Ke Shih [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=924a011d3be6497dbaaf399c366d995d@realtek.com \
    --to=pkshih@realtek.com \
    --cc=briannorris@chromium.org \
    --cc=kvalo@kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-wireless@vger.kernel.org \
    --cc=luka.gejak@linux.dev \
    --cc=sgruszka@redhat.com \
    --cc=stable@vger.kernel.org \
    --cc=yhchuang@realtek.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.