Bitterblue Smith <rtl8821cerfe2@xxxxxxxxx> wrote: > diff --git a/drivers/net/wireless/realtek/rtlwifi/pci.c b/drivers/net/wireless/realtek/rtlwifi/pci.c > index 0eafc4d125f9..9614a9e752b9 100644 > --- a/drivers/net/wireless/realtek/rtlwifi/pci.c > +++ b/drivers/net/wireless/realtek/rtlwifi/pci.c > @@ -520,7 +520,7 @@ static void _rtl_pci_tx_isr(struct ieee80211_hw *hw, int prio) > rtl_tx_ackqueue(hw, skb); > } > > - if ((ring->entries - skb_queue_len(&ring->queue)) <= 4) { > + if ((ring->entries - skb_queue_len(&ring->queue)) >= 4) { > rtl_dbg(rtlpriv, COMP_ERR, DBG_DMESG, > "more desc left, wake skb_queue@%d, ring->idx = %d, skb_queue_len = > 0x%x\n", > prio, ring->idx, Reading the code about calling ieee80211_stop_queue() and ieee80211_wake_queue() again. It looks like In TX path (rtl_pci_tx): if (remaining < 2) ieee80211_stop_queue(); In TX completion path (_rtl_pci_tx_isr): if (remaining <= 4) ieee80211_wake_queue(); I guess it uses "<= 4" in TX completion path because origin patch doesn't want to call ieee80211_wake_queue() redundantly, but looks not so reasonable. The better way may use ieee80211_queue_stopped() instead.