Browse Source

rtlwifi: rtl_pci: Fix the bug when inactiveps is enabled.

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>
Tsang-Shian Lin 7 years ago
parent
commit
b7573a0a27
1 changed files with 7 additions and 0 deletions
  1. 7 0
      drivers/net/wireless/realtek/rtlwifi/pci.c

+ 7 - 0
drivers/net/wireless/realtek/rtlwifi/pci.c

@@ -1555,7 +1555,14 @@ int rtl_pci_reset_trx_ring(struct ieee80211_hw *hw)
 				dev_kfree_skb_irq(skb);
 				dev_kfree_skb_irq(skb);
 				ring->idx = (ring->idx + 1) % ring->entries;
 				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->idx = 0;
+			ring->entries = rtlpci->txringcount[i];
 		}
 		}
 	}
 	}
 	spin_unlock_irqrestore(&rtlpriv->locks.irq_th_lock, flags);
 	spin_unlock_irqrestore(&rtlpriv->locks.irq_th_lock, flags);