rtlwifi: rtl_pci: Fix the bug when inactiveps is enabled.
authorTsang-Shian Lin <thlin@realtek.com>
Sat, 9 Dec 2017 17:37:10 +0000 (11:37 -0600)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sat, 24 Mar 2018 10:01:22 +0000 (11:01 +0100)
[ Upstream commit b7573a0a27bfa8270dea9b145448f6884b7cacc1 ]

Reset the driver current tx read/write index to zero when inactiveps
nic out of sync with HW state. Wrong driver tx read/write index will
cause Tx fail.

Signed-off-by: Tsang-Shian Lin <thlin@realtek.com>
Signed-off-by: Ping-Ke Shih <pkshih@realtek.com>
Signed-off-by: Larry Finger <Larry.Finger@lwfinger.net>
Cc: Yan-Hsuan Chuang <yhchuang@realtek.com>
Cc: Birming Chiu <birming@realtek.com>
Cc: Shaofu <shaofu@realtek.com>
Cc: Steven Ting <steventing@realtek.com>
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/net/wireless/realtek/rtlwifi/pci.c

index 08dc8919ef60e213b8fa34ad30378fc94168cc2a..d7331225c5f3df1d9a018cf796acb52d50fa47b6 100644 (file)
@@ -1568,7 +1568,14 @@ int rtl_pci_reset_trx_ring(struct ieee80211_hw *hw)
                                dev_kfree_skb_irq(skb);
                                ring->idx = (ring->idx + 1) % ring->entries;
                        }
+
+                       if (rtlpriv->use_new_trx_flow) {
+                               rtlpci->tx_ring[i].cur_tx_rp = 0;
+                               rtlpci->tx_ring[i].cur_tx_wp = 0;
+                       }
+
                        ring->idx = 0;
+                       ring->entries = rtlpci->txringcount[i];
                }
        }
        spin_unlock_irqrestore(&rtlpriv->locks.irq_th_lock, flags);