ath9k: Fix rx overrun interrupt storm
authorRajkumar Manoharan <rmanohar@qca.qualcomm.com>
Sat, 13 Aug 2011 04:58:09 +0000 (10:28 +0530)
committerJohn W. Linville <linville@tuxdriver.com>
Wed, 24 Aug 2011 17:59:44 +0000 (13:59 -0400)
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>
drivers/net/wireless/ath/ath9k/main.c

index 781af25f440d81898b99934aaceef455f9a325cb..3c5db3063877bc9704ea10cc25ad50f8b2d3aa67 100644 (file)
@@ -826,11 +826,9 @@ irqreturn_t ath_isr(int irq, void *dev)
        if (status & ATH9K_INT_TXURN)
                ath9k_hw_updatetxtriglevel(ah, true);
 
-       if (ah->caps.hw_caps & ATH9K_HW_CAP_EDMA) {
-               if (status & ATH9K_INT_RXEOL) {
-                       ah->imask &= ~(ATH9K_INT_RXEOL | ATH9K_INT_RXORN);
-                       ath9k_hw_set_interrupts(ah, ah->imask);
-               }
+       if (status & ATH9K_INT_RXEOL) {
+               ah->imask &= ~(ATH9K_INT_RXEOL | ATH9K_INT_RXORN);
+               ath9k_hw_set_interrupts(ah, ah->imask);
        }
 
        if (status & ATH9K_INT_MIB) {