aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorFelix Fietkau <nbd@openwrt.org>2011-09-14 15:23:01 -0400
committerJohn W. Linville <linville@tuxdriver.com>2011-09-16 16:45:36 -0400
commite392700741a4a5f061f3fcc9f5f2ceb0e0b0953e (patch)
tree93fa2813c5c182042dc510bf0c4de35d210196e0 /drivers
parentc5d2593bad0d3440ce3b464d9e3c514d364820f8 (diff)
ath9k: fix enabling interrupts after a hardware error interrupt
The interrupt handler increases the interrupt disable refcount, so the tasklet needs to always call ath9k_hw_enable_interrupts. Signed-off-by: Felix Fietkau <nbd@openwrt.org> Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/net/wireless/ath/ath9k/main.c9
1 files changed, 5 insertions, 4 deletions
diff --git a/drivers/net/wireless/ath/ath9k/main.c b/drivers/net/wireless/ath/ath9k/main.c
index c8ac2ce61ffe..03b402bb9c4e 100644
--- a/drivers/net/wireless/ath/ath9k/main.c
+++ b/drivers/net/wireless/ath/ath9k/main.c
@@ -669,15 +669,15 @@ void ath9k_tasklet(unsigned long data)
669 u32 status = sc->intrstatus; 669 u32 status = sc->intrstatus;
670 u32 rxmask; 670 u32 rxmask;
671 671
672 ath9k_ps_wakeup(sc);
673 spin_lock(&sc->sc_pcu_lock);
674
672 if ((status & ATH9K_INT_FATAL) || 675 if ((status & ATH9K_INT_FATAL) ||
673 (status & ATH9K_INT_BB_WATCHDOG)) { 676 (status & ATH9K_INT_BB_WATCHDOG)) {
674 ieee80211_queue_work(sc->hw, &sc->hw_reset_work); 677 ieee80211_queue_work(sc->hw, &sc->hw_reset_work);
675 return; 678 goto out;
676 } 679 }
677 680
678 ath9k_ps_wakeup(sc);
679 spin_lock(&sc->sc_pcu_lock);
680
681 /* 681 /*
682 * Only run the baseband hang check if beacons stop working in AP or 682 * Only run the baseband hang check if beacons stop working in AP or
683 * IBSS mode, because it has a high false positive rate. For station 683 * IBSS mode, because it has a high false positive rate. For station
@@ -725,6 +725,7 @@ void ath9k_tasklet(unsigned long data)
725 if (status & ATH9K_INT_GENTIMER) 725 if (status & ATH9K_INT_GENTIMER)
726 ath_gen_timer_isr(sc->sc_ah); 726 ath_gen_timer_isr(sc->sc_ah);
727 727
728out:
728 /* re-enable hardware interrupt */ 729 /* re-enable hardware interrupt */
729 ath9k_hw_enable_interrupts(ah); 730 ath9k_hw_enable_interrupts(ah);
730 731