wifi: rtw88: TX report with long timeout for non-PCIE devices
Ping-Ke Shih
maintainerPATCH 1/1 wifi: rtw88: TX report with long timeout for non-PCIE devices
Many USB and SDIO devices can't report TX status within 500 ms, and extending to 2500 ms as tested USB/SDIO devices can fix the problem [1]. To avoid adding chip ID one by one, and this change looks harmless. Keep PCIE using short timeout, and others use long timeout.
[1] https://lore.kernel.org/linux-wireless/[email protected]/
--- drivers/net/wireless/realtek/rtw88/tx.c | 10 +++++----- drivers/net/wireless/realtek/rtw88/tx.h | 3 ++- 2 files changed, 7 insertions(+), 6 deletions(-)
drivers/net/wireless/realtek/rtw88/tx.c +5 -5
@@ -196,7 +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 =RTW_TX_PROBE_TIMEOUT ; +unsigned long timeout;unsigned long flags;u8 *drv_data;
@@ -208,10 +208,10 @@ 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); -if ((rtwdev->chip->id ==RTW_CHIP_TYPE_8723D && - rtwdev->hci.type ==RTW_HCI_TYPE_USB ) || -rtw_is_8723bs (rtwdev)) - timeout =msecs_to_jiffies (2500 ); +if (rtwdev->hci.type ==RTW_HCI_TYPE_PCIE ) + timeout =RTW_TX_PROBE_TIMEOUT_SHORT ; +else + timeout =RTW_TX_PROBE_TIMEOUT_LONG ;mod_timer (&tx_report->purge_timer, jiffies + timeout); }
drivers/net/wireless/realtek/rtw88/tx.h +2 -1
@@ -7,7 +7,8 @@#define RTK_TX_MAX_AGG_NUM_MASK 0x1f -#define RTW_TX_PROBE_TIMEOUT msecs_to_jiffies(500) +#define RTW_TX_PROBE_TIMEOUT_SHORT msecs_to_jiffies(500) +#define RTW_TX_PROBE_TIMEOUT_LONG msecs_to_jiffies(2500)struct rtw_tx_desc {__le32 w0;
base-commit: 2f77c66694108785a1f6ae6c5de06453e7f7a91f
Signature · 1 line
2.25.1
Quoted 57 lines · Ping-Ke Shih
Many USB and SDIO devices can't report TX status within 500 ms, and extending to 2500 ms as tested USB/SDIO devices can fix the problem [1]. To avoid adding chip ID one by one, and this change looks harmless. Keep PCIE using short timeout, and others use long timeout.
[1] https://lore.kernel.org/linux-wireless/[email protected]/
Signed-off-by Ping-Ke Shih <[email protected]>--- drivers/net/wireless/realtek/rtw88/tx.c | 10 +++++----- drivers/net/wireless/realtek/rtw88/tx.h | 3 ++- 2 files changed, 7 insertions(+), 6 deletions(-)drivers/net/wireless/realtek/rtw88/tx.c +5
-5@@ -196,7 +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 =RTW_TX_PROBE_TIMEOUT ; +unsigned long timeout;unsigned long flags;u8 *drv_data;@@ -208,10 +208,10 @@ 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); -if ((rtwdev->chip->id ==RTW_CHIP_TYPE_8723D && - rtwdev->hci.type ==RTW_HCI_TYPE_USB ) || -rtw_is_8723bs (rtwdev)) - timeout =msecs_to_jiffies (2500 ); +if (rtwdev->hci.type ==RTW_HCI_TYPE_PCIE ) + timeout =RTW_TX_PROBE_TIMEOUT_SHORT ; +else + timeout =RTW_TX_PROBE_TIMEOUT_LONG ;mod_timer (&tx_report->purge_timer, jiffies + timeout); }drivers/net/wireless/realtek/rtw88/tx.h +2
-1@@ -7,7 +7,8 @@#define RTK_TX_MAX_AGG_NUM_MASK 0x1f -#define RTW_TX_PROBE_TIMEOUT msecs_to_jiffies(500) +#define RTW_TX_PROBE_TIMEOUT_SHORT msecs_to_jiffies(500) +#define RTW_TX_PROBE_TIMEOUT_LONG msecs_to_jiffies(2500)struct rtw_tx_desc {__le32 w0;
Quoted 4 lines
base-commit:
2f77c66694108785a1f6ae6c5de06453e7f7a91fSignature · 1 line
2.25.1
Hi Ping-Ke,
I support this change and have tested it on my rtl8723bs.
Best regards,
Luka Gejak
Quoted 9 lines · Ping-Ke Shih
Many USB and SDIO devices can't report TX status within 500 ms, and extending to 2500 ms as tested USB/SDIO devices can fix the problem [1]. To avoid adding chip ID one by one, and this change looks harmless. Keep PCIE using short timeout, and others use long timeout.
[1] https://lore.kernel.org/linux-wireless/[email protected]/
Signed-off-by Ping-Ke Shih <[email protected]>
Pick Tested-by from [2].
and Cc stable by request. However, it'd be conflict with previous commits. If so, I'll send a patch after this patch becomes mainland.
[2] https://lore.kernel.org/linux-wireless/[email protected]/
Ping-Ke Shih
maintainerQuoted 10 lines · Ping-Ke Shih
Many USB and SDIO devices can't report TX status within 500 ms, and extending to 2500 ms as tested USB/SDIO devices can fix the problem [1]. To avoid adding chip ID one by one, and this change looks harmless. Keep PCIE using short timeout, and others use long timeout.
[1] https://lore.kernel.org/linux-wireless/[email protected]/
Signed-off-by Ping-Ke Shih <[email protected]>Reviewed-by Luka Gejak <[email protected]>Tested-by Josef Schlehofer <[email protected]>
1 patch(es) applied to rtw-next branch of rtw.git, thanks.
7cde94dab0e7 wifi: rtw88: TX report with long timeout for non-PCIE devices