Commit e3927007 authored by Felix Fietkau's avatar Felix Fietkau Committed by John W. Linville

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: default avatarFelix Fietkau <nbd@openwrt.org>
Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
parent c5d2593b
...@@ -669,15 +669,15 @@ void ath9k_tasklet(unsigned long data) ...@@ -669,15 +669,15 @@ void ath9k_tasklet(unsigned long data)
u32 status = sc->intrstatus; u32 status = sc->intrstatus;
u32 rxmask; u32 rxmask;
ath9k_ps_wakeup(sc);
spin_lock(&sc->sc_pcu_lock);
if ((status & ATH9K_INT_FATAL) || if ((status & ATH9K_INT_FATAL) ||
(status & ATH9K_INT_BB_WATCHDOG)) { (status & ATH9K_INT_BB_WATCHDOG)) {
ieee80211_queue_work(sc->hw, &sc->hw_reset_work); ieee80211_queue_work(sc->hw, &sc->hw_reset_work);
return; goto out;
} }
ath9k_ps_wakeup(sc);
spin_lock(&sc->sc_pcu_lock);
/* /*
* Only run the baseband hang check if beacons stop working in AP or * Only run the baseband hang check if beacons stop working in AP or
* IBSS mode, because it has a high false positive rate. For station * IBSS mode, because it has a high false positive rate. For station
...@@ -725,6 +725,7 @@ void ath9k_tasklet(unsigned long data) ...@@ -725,6 +725,7 @@ void ath9k_tasklet(unsigned long data)
if (status & ATH9K_INT_GENTIMER) if (status & ATH9K_INT_GENTIMER)
ath_gen_timer_isr(sc->sc_ah); ath_gen_timer_isr(sc->sc_ah);
out:
/* re-enable hardware interrupt */ /* re-enable hardware interrupt */
ath9k_hw_enable_interrupts(ah); ath9k_hw_enable_interrupts(ah);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment