wifi: rtw88: use ieee80211_purge_tx_queue() to purge TX skb
Subsystems (2)
PATCH 1/1 wifi: rtw88: use ieee80211_purge_tx_queue() to purge TX skb
From: Ladislav Michl <[email protected]>
corresponding upstream commit 3e5e4a801aaf4283390cc34959c6c48f910ca5ea
When removing kernel modules driver uses skb_queue_purge() to purge TX skb, but not report tx status causing "Have pending ack frames!" warning. Use ieee80211_purge_tx_queue() to correct this.
As upstream commit mentioned above does not apply on linux-6.1.y tree it has been rewritten.
------------[ cut here ]------------
WARNING: CPU: 0 PID: 4072 at net/mac80211/main.c:1506 ieee80211_free_ack_frame+0x74/0xa0 [mac80211]
Have pending ack frames!
Modules linked in: rtw88_8822ce rtw88_8822c rtw88_pci rtw88_core mac80211 libarc4 cfg80211 qmi_wwan usbnet mii cdc_acm [last unloaded: cfg80211]
CPU: 0 PID: 4072 Comm: sh Not tainted 6.1.104 #2
Stack : 0000000000000000 000000000000068d 0000000000000008 000b24caa995d315
000b24caa995d315 0000000000000000 8000000002813958 ffffffff818f4a30
ffffffff81a673c8 0000000000000001 0000000000000001 0000000000000000
00000000000817bd 0000000000000010 ffffffff817f3720 0000000000000002
800000000281384f ffffffff81a20000 ffffffff818f4a30 0000000000000009
ffffffff81a20000 8000000003a41df8 ffffffff81a20000 0000000000000001
8000000002651570 8000000082813847 ffffffff8143a6c0 0000000000000000
ffffffff81b10000 8000000002810000 8000000002813950 0000000000000030
ffffffff817ca460 0000000000000000 ffffffff818f4a30 ffffffff817ca3e0
0000000000000001 ffffffff818f4a30 ffffffff811198b8 0000000000000000
...
Call Trace:
[<ffffffff811198b8>] show_stack+0x38/0x118
[<ffffffff817ca460>] dump_stack_lvl+0x30/0x54
[<ffffffff81130f6c>] __warn+0x9c/0xe4
[<ffffffff81131054>] warn_slowpath_fmt+0xa0/0xd4
[<ffffffffc02770ec>] ieee80211_free_ack_frame+0x74/0xa0 [mac80211]
[<ffffffff817ccfd8>] idr_for_each+0x88/0x150
[<ffffffffc0277538>] ieee80211_free_hw+0x48/0xf8 [mac80211]
[<ffffffff813f2a54>] pci_device_remove+0x2c/0x78
[<ffffffff8144c7dc>] device_release_driver_internal+0x1e4/0x288
[<ffffffff813e8998>] pci_stop_bus_device+0x88/0xb8
[<ffffffff813e8a84>] pci_stop_and_remove_bus_device_locked+0x1c/0x38
[<ffffffff813f52d0>] remove_store+0xa0/0xb0
[<ffffffff81279be4>] kernfs_fop_write_iter+0x10c/0x230
[<ffffffff811fc49c>] vfs_write+0x1cc/0x388
[<ffffffff811fc7f8>] ksys_write+0x78/0x120
[<ffffffff81121420>] syscall_common+0x34/0x58
---[ end trace 0000000000000000 ]------ drivers/net/wireless/realtek/rtw88/main.c | 2 +- drivers/net/wireless/realtek/rtw88/tx.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-)
drivers/net/wireless/realtek/rtw88/main.c +1 -1
@@ -2146,7 +2146,7 @@ void rtw_core_deinit(struct rtw_dev *rtwdev)destroy_workqueue (rtwdev->tx_wq);spin_lock_irqsave (&rtwdev->tx_report.q_lock, flags); -skb_queue_purge (&rtwdev->tx_report.queue); +ieee80211_purge_tx_queue (rtwdev->hw, &rtwdev->tx_report.queue);skb_queue_purge (&rtwdev->coex.queue);spin_unlock_irqrestore (&rtwdev->tx_report.q_lock, flags);
drivers/net/wireless/realtek/rtw88/tx.c +1 -1
@@ -169,7 +169,7 @@ void rtw_tx_report_purge_timer(struct timer_list *t)rtw_warn (rtwdev,"failed to get tx report from firmware\n" );spin_lock_irqsave (&tx_report->q_lock, flags); -skb_queue_purge (&tx_report->queue); +ieee80211_purge_tx_queue (rtwdev->hw, &tx_report->queue);spin_unlock_irqrestore (&tx_report->q_lock, flags); }
Signature · 1 line
2.39.5
Sasha Levin
maintainer[ Sasha's backport helper bot ]
Hi,
Summary of potential issues:
❌ Build failures detected
⚠️ Found matching upstream commit but patch is missing proper reference to it
Found matching upstream commit: 3e5e4a801aaf4283390cc34959c6c48f910ca5ea
WARNING: Author mismatch between patch and found commit:
Backport author: Ladislav Michl<[email protected]> Commit author: Ping-Ke Shih<[email protected]>
Note: The patch differs from the upstream commit:
---
1: 3e5e4a801aaf4 < -: ------------- wifi: rtw88: use ieee80211_purge_tx_queue() to purge TX skb -: ------------- > 1: d12acd7bc3d4c Linux 6.14.3
---
Results of testing on various branches:
| Branch | Patch Apply | Build Test | |---------------------------|-------------|------------| | stable/linux-6.14.y | Success | Success | | stable/linux-6.12.y | Success | Success | | stable/linux-6.6.y | Success | Success | | stable/linux-6.1.y | Success | Failed | | stable/linux-5.15.y | Success | Failed | | stable/linux-5.10.y | Success | Success | | stable/linux-5.4.y | Success | Success |
Build Errors:
Build error for stable/linux-6.1.y:
drivers/net/wireless/realtek/rtw88/main.c: In function 'rtw_core_deinit':
drivers/net/wireless/realtek/rtw88/main.c:2149:9: error: implicit declaration of function 'ieee80211_purge_tx_queue'; did you mean 'ieee80211_wake_queue'? [-Wimplicit-function-declaration]
2149 | ieee80211_purge_tx_queue(rtwdev->hw, &rtwdev->tx_report.queue);
| ^~~~~~~~~~~~~~~~~~~~~~~~
| ieee80211_wake_queue
make[6]: *** [scripts/Makefile.build:250: drivers/net/wireless/realtek/rtw88/main.o] Error 1
drivers/net/wireless/realtek/rtw88/tx.c: In function 'rtw_tx_report_purge_timer':
drivers/net/wireless/realtek/rtw88/tx.c:172:9: error: implicit declaration of function 'ieee80211_purge_tx_queue'; did you mean 'ieee80211_wake_queue'? [-Wimplicit-function-declaration]
172 | ieee80211_purge_tx_queue(rtwdev->hw, &tx_report->queue);
| ^~~~~~~~~~~~~~~~~~~~~~~~
| ieee80211_wake_queue
make[6]: *** [scripts/Makefile.build:250: drivers/net/wireless/realtek/rtw88/tx.o] Error 1
make[6]: Target 'drivers/net/wireless/realtek/rtw88/' not remade because of errors.
make[5]: *** [scripts/Makefile.build:503: drivers/net/wireless/realtek/rtw88] Error 2
make[5]: Target 'drivers/net/wireless/realtek/' not remade because of errors.
make[4]: *** [scripts/Makefile.build:503: drivers/net/wireless/realtek] Error 2
make[4]: Target 'drivers/net/wireless/' not remade because of errors.
make[3]: *** [scripts/Makefile.build:503: drivers/net/wireless] Error 2
make[3]: Target 'drivers/net/' not remade because of errors.
make[2]: *** [scripts/Makefile.build:503: drivers/net] Error 2
make[2]: Target 'drivers/' not remade because of errors.
make[1]: *** [scripts/Makefile.build:503: drivers] Error 2
make[1]: Target './' not remade because of errors.
make: *** [Makefile:2010: .] Error 2
make: Target '__all' not remade because of errors.Build error for stable/linux-5.15.y:
drivers/net/wireless/realtek/rtw88/main.c: In function 'rtw_core_deinit':
drivers/net/wireless/realtek/rtw88/main.c:1912:9: error: implicit declaration of function 'ieee80211_purge_tx_queue'; did you mean 'ieee80211_wake_queue'? [-Werror=implicit-function-declaration]
1912 | ieee80211_purge_tx_queue(rtwdev->hw, &rtwdev->tx_report.queue);
| ^~~~~~~~~~~~~~~~~~~~~~~~
| ieee80211_wake_queue
cc1: some warnings being treated as errors
make[5]: *** [scripts/Makefile.build:289: drivers/net/wireless/realtek/rtw88/main.o] Error 1
drivers/net/wireless/realtek/rtw88/tx.c: In function 'rtw_tx_report_purge_timer':
drivers/net/wireless/realtek/rtw88/tx.c:168:9: error: implicit declaration of function 'ieee80211_purge_tx_queue'; did you mean 'ieee80211_wake_queue'? [-Werror=implicit-function-declaration]
168 | ieee80211_purge_tx_queue(rtwdev->hw, &tx_report->queue);
| ^~~~~~~~~~~~~~~~~~~~~~~~
| ieee80211_wake_queue
cc1: some warnings being treated as errors
make[5]: *** [scripts/Makefile.build:289: drivers/net/wireless/realtek/rtw88/tx.o] Error 1
make[5]: Target '__build' not remade because of errors.
make[4]: *** [scripts/Makefile.build:552: drivers/net/wireless/realtek/rtw88] Error 2
make[4]: Target '__build' not remade because of errors.
make[3]: *** [scripts/Makefile.build:552: drivers/net/wireless/realtek] Error 2
make[3]: Target '__build' not remade because of errors.
make[2]: *** [scripts/Makefile.build:552: drivers/net/wireless] Error 2
make[2]: Target '__build' not remade because of errors.
make[1]: *** [scripts/Makefile.build:552: drivers/net] Error 2
make[1]: Target '__build' not remade because of errors.
make: *** [Makefile:1911: drivers] Error 2
make: Target '__all' not remade because of errors.Hi,
Quoted 1 line · Sasha Levin
[ Sasha's backport helper bot ]
Hopefully this reply can reach also non-bots...
Quoted 5 lines
Hi,
Summary of potential issues:
❌ Build failures detected
⚠️ Found matching upstream commit but patch is missing proper reference to it
Patch was intended for 6.1. branch only and this intention is expressed in the Cc: tags where also additional patch prerequisite was specified, but obviously not picked up.
Quoted 5 lines
Found matching upstream commit:
3e5e4a801aaf4283390cc34959c6c48f910ca5eaWARNING: Author mismatch between patch and found commit:
Backport author: Ladislav Michl<[email protected]> Commit author: Ping-Ke Shih<[email protected]>
Also noted in the patch description. Driver undergone significant rewrite after 6.1 so change needed to be done different way. Backtrace also mine from 6.1 kernel.
Quoted 72 lines
Note: The patch differs from the upstream commit:
---1: 3e5e4a801aaf4 < -: ------------- wifi: rtw88: use ieee80211_purge_tx_queue() to purge TX skb -: ------------- > 1: d12acd7bc3d4c Linux 6.14.3---
Results of testing on various branches:
| Branch | Patch Apply | Build Test | |---------------------------|-------------|------------| | stable/linux-6.14.y | Success | Success | | stable/linux-6.12.y | Success | Success | | stable/linux-6.6.y | Success | Success | | stable/linux-6.1.y | Success | Failed | | stable/linux-5.15.y | Success | Failed | | stable/linux-5.10.y | Success | Success | | stable/linux-5.4.y | Success | Success |Build Errors:
Build error for stable/linux-6.1.y:drivers/net/wireless/realtek/rtw88/main.c: In function 'rtw_core_deinit': drivers/net/wireless/realtek/rtw88/main.c:2149:9: error: implicit declaration of function 'ieee80211_purge_tx_queue'; did you mean 'ieee80211_wake_queue'? [-Wimplicit-function-declaration] 2149 | ieee80211_purge_tx_queue(rtwdev->hw, &rtwdev->tx_report.queue); | ^~~~~~~~~~~~~~~~~~~~~~~~ | ieee80211_wake_queue make[6]: *** [scripts/Makefile.build:250: drivers/net/wireless/realtek/rtw88/main.o] Error 1 drivers/net/wireless/realtek/rtw88/tx.c: In function 'rtw_tx_report_purge_timer': drivers/net/wireless/realtek/rtw88/tx.c:172:9: error: implicit declaration of function 'ieee80211_purge_tx_queue'; did you mean 'ieee80211_wake_queue'? [-Wimplicit-function-declaration] 172 | ieee80211_purge_tx_queue(rtwdev->hw, &tx_report->queue); | ^~~~~~~~~~~~~~~~~~~~~~~~ | ieee80211_wake_queue make[6]: *** [scripts/Makefile.build:250: drivers/net/wireless/realtek/rtw88/tx.o] Error 1 make[6]: Target 'drivers/net/wireless/realtek/rtw88/' not remade because of errors. make[5]: *** [scripts/Makefile.build:503: drivers/net/wireless/realtek/rtw88] Error 2 make[5]: Target 'drivers/net/wireless/realtek/' not remade because of errors. make[4]: *** [scripts/Makefile.build:503: drivers/net/wireless/realtek] Error 2 make[4]: Target 'drivers/net/wireless/' not remade because of errors. make[3]: *** [scripts/Makefile.build:503: drivers/net/wireless] Error 2 make[3]: Target 'drivers/net/' not remade because of errors. make[2]: *** [scripts/Makefile.build:503: drivers/net] Error 2 make[2]: Target 'drivers/' not remade because of errors. make[1]: *** [scripts/Makefile.build:503: drivers] Error 2 make[1]: Target './' not remade because of errors. make: *** [Makefile:2010: .] Error 2 make: Target '__all' not remade because of errors.Build error for stable/linux-5.15.y:
drivers/net/wireless/realtek/rtw88/main.c: In function 'rtw_core_deinit': drivers/net/wireless/realtek/rtw88/main.c:1912:9: error: implicit declaration of function 'ieee80211_purge_tx_queue'; did you mean 'ieee80211_wake_queue'? [-Werror=implicit-function-declaration] 1912 | ieee80211_purge_tx_queue(rtwdev->hw, &rtwdev->tx_report.queue); | ^~~~~~~~~~~~~~~~~~~~~~~~ | ieee80211_wake_queue cc1: some warnings being treated as errors make[5]: *** [scripts/Makefile.build:289: drivers/net/wireless/realtek/rtw88/main.o] Error 1 drivers/net/wireless/realtek/rtw88/tx.c: In function 'rtw_tx_report_purge_timer': drivers/net/wireless/realtek/rtw88/tx.c:168:9: error: implicit declaration of function 'ieee80211_purge_tx_queue'; did you mean 'ieee80211_wake_queue'? [-Werror=implicit-function-declaration] 168 | ieee80211_purge_tx_queue(rtwdev->hw, &tx_report->queue); | ^~~~~~~~~~~~~~~~~~~~~~~~ | ieee80211_wake_queue cc1: some warnings being treated as errors make[5]: *** [scripts/Makefile.build:289: drivers/net/wireless/realtek/rtw88/tx.o] Error 1 make[5]: Target '__build' not remade because of errors. make[4]: *** [scripts/Makefile.build:552: drivers/net/wireless/realtek/rtw88] Error 2 make[4]: Target '__build' not remade because of errors. make[3]: *** [scripts/Makefile.build:552: drivers/net/wireless/realtek] Error 2 make[3]: Target '__build' not remade because of errors. make[2]: *** [scripts/Makefile.build:552: drivers/net/wireless] Error 2 make[2]: Target '__build' not remade because of errors. make[1]: *** [scripts/Makefile.build:552: drivers/net] Error 2 make[1]: Target '__build' not remade because of errors. make: *** [Makefile:1911: drivers] Error 2 make: Target '__all' not remade because of errors.