A queue stopped by the ring-full path keeps IEEE80211_QUEUE_STOP_REASON_DRIVER across a hardware restart. ieee80211_reconfig() wakes only IEEE80211_QUEUE_STOP_REASON_SUSPEND, and the driver's own wake waits for a descriptor completion that the restart leaves nothing to deliver. TX stays dead although the restart itself succeeded. Wake the queues once mac80211 reports the restart complete. Signed-off-by: Abdurrahman Karadag --- v3: - wake from rtw_reconfig_complete() rather than rtw_pci_reset_trx_ring(), so the queues are released once the restart is complete (Ping-Ke Shih) - name ieee80211_restart_hw() in the subject (Ping-Ke Shih) - cut the commit message to the restart case, and drop the measurement paragraph, which belongs to the still-open stall (Ping-Ke Shih) - drop the comment (Ping-Ke Shih) v1: https://lore.kernel.org/linux-wireless/20261002231013.11792-1-abdurrahmankaradag19@gmail.com/ drivers/net/wireless/realtek/rtw88/mac80211.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/drivers/net/wireless/realtek/rtw88/mac80211.c b/drivers/net/wireless/realtek/rtw88/mac80211.c index 2a9b09f..b02017a 100644 --- a/drivers/net/wireless/realtek/rtw88/mac80211.c +++ b/drivers/net/wireless/realtek/rtw88/mac80211.c @@ -882,8 +882,10 @@ static void rtw_reconfig_complete(struct ieee80211_hw *hw, struct rtw_dev *rtwdev = hw->priv; mutex_lock(&rtwdev->mutex); - if (reconfig_type == IEEE80211_RECONFIG_TYPE_RESTART) + if (reconfig_type == IEEE80211_RECONFIG_TYPE_RESTART) { clear_bit(RTW_FLAG_RESTARTING, rtwdev->flags); + ieee80211_wake_queues(hw); + } mutex_unlock(&rtwdev->mutex); } -- 2.55.0 base-commit: fbfa27d9b06f025c5f2cfa79d0e01e6400eeff2a