RE: [PATCH rtw-next v4] wifi: rtw88: pci: wake the TX queues after restart_hw and interface up

From: Ping-Ke Shih

Date: Wed Oct 21 2026 - 21:37:00 EST


Abdurrahman Karadag <abdurrahmankaradag19@xxxxxxxxx> wrote:
> diff --git a/drivers/net/wireless/realtek/rtw88/pci.c b/drivers/net/wireless/realtek/rtw88/pci.c
> index 66d2e5f..fd84ace 100644
> --- a/drivers/net/wireless/realtek/rtw88/pci.c
> +++ b/drivers/net/wireless/realtek/rtw88/pci.c
> @@ -571,12 +571,20 @@ static void rtw_pci_napi_stop(struct rtw_dev *rtwdev)
> static int rtw_pci_start(struct rtw_dev *rtwdev)
> {
> struct rtw_pci *rtwpci = (struct rtw_pci *)rtwdev->priv;
> + enum rtw_tx_queue_type queue;
> + bool wake = false;
>
> rtw_pci_napi_start(rtwdev);
>
> spin_lock_bh(&rtwpci->irq_lock);

It would look natural to clear queue_stopped before enabling interrupt,
since it is intended to reset. More, add a function to be clear that we
are resetting queue_stopped, like rtw_pci_reset_tx_{ring or queue}_state().

For scanning from idle case, we have an assistant
'test_bit(RTW_FLAG_SCANNING, rtwdev->flags)' if you want.

Add an empty line before 'running = true'.

> rtwpci->running = true;
> rtw_pci_enable_interrupt(rtwdev, rtwpci, false);
> + for (queue = 0; queue < RTK_MAX_TX_QUEUE_NUM; queue++) {
> + wake |= rtwpci->tx_rings[queue].queue_stopped;
> + rtwpci->tx_rings[queue].queue_stopped = false;
> + }
> + if (wake)
> + ieee80211_wake_queues(rtwdev->hw);
> spin_unlock_bh(&rtwpci->irq_lock);
>
> return 0;
> base-commit: 9b0be45d4d52fd223994e151f169743a97abd290
> --
> 2.56.0