ath9k: Fix rx overrun interrupt storm
Whenever RXEOL is received, both RXORN and RXEOL got cleared to avoid rx overrun interrupt storm. This was handled only for edma chips. The same scenario was also observered with AR9280, doing frequent channel type switch b/w HT20/40 with bidi traffic that is causing failure to stop rx dma. This patch clears the RXEOL & RXORN interrupts for all chips. ath: DMA failed to stop in 10 ms AR_CR=0x00000024 AR_DIAG_SW=0x42000020 DMADBG_7=0x000062c0 ath: Could not stop RX, we could be confusing the DMA engine when we start RX up ------------[ cut here ]------------ WARNING: at drivers/net/wireless/ath/ath9k/recv.c:532 ath_stoprecv+0x110/0x120 [ath9k]() Call Trace: [<ffffffff8104a55a>] warn_slowpath_common+0x7a/0xb0 [<ffffffff8104a5a5>] warn_slowpath_null+0x15/0x20 [<ffffffffa0560380>] ath_stoprecv+0x110/0x120 [ath9k] [<ffffffffa055e6fa>] ath_reset+0x6a/0x200 [ath9k] Signed-off-by: Rajkumar Manoharan <rmanohar@qca.qualcomm.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:
parent
7a12dfdbf5
commit
0682c9b52b
|
@ -826,12 +826,10 @@ irqreturn_t ath_isr(int irq, void *dev)
|
||||||
if (status & ATH9K_INT_TXURN)
|
if (status & ATH9K_INT_TXURN)
|
||||||
ath9k_hw_updatetxtriglevel(ah, true);
|
ath9k_hw_updatetxtriglevel(ah, true);
|
||||||
|
|
||||||
if (ah->caps.hw_caps & ATH9K_HW_CAP_EDMA) {
|
|
||||||
if (status & ATH9K_INT_RXEOL) {
|
if (status & ATH9K_INT_RXEOL) {
|
||||||
ah->imask &= ~(ATH9K_INT_RXEOL | ATH9K_INT_RXORN);
|
ah->imask &= ~(ATH9K_INT_RXEOL | ATH9K_INT_RXORN);
|
||||||
ath9k_hw_set_interrupts(ah, ah->imask);
|
ath9k_hw_set_interrupts(ah, ah->imask);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if (status & ATH9K_INT_MIB) {
|
if (status & ATH9K_INT_MIB) {
|
||||||
/*
|
/*
|
||||||
|
|
Loading…
Reference in New Issue