Skip to content

Commit

Permalink
ath9k: fix enabling interrupts after a hardware error interrupt
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Felix Fietkau authored and John W. Linville committed Sep 16, 2011
1 parent c5d2593 commit e392700
Showing 1 changed file with 5 additions and 4 deletions.
9 changes: 5 additions & 4 deletions drivers/net/wireless/ath/ath9k/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -669,15 +669,15 @@ void ath9k_tasklet(unsigned long data)
u32 status = sc->intrstatus;
u32 rxmask;

ath9k_ps_wakeup(sc);
spin_lock(&sc->sc_pcu_lock);

if ((status & ATH9K_INT_FATAL) ||
(status & ATH9K_INT_BB_WATCHDOG)) {
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
* IBSS mode, because it has a high false positive rate. For station
Expand Down Expand Up @@ -725,6 +725,7 @@ void ath9k_tasklet(unsigned long data)
if (status & ATH9K_INT_GENTIMER)
ath_gen_timer_isr(sc->sc_ah);

out:
/* re-enable hardware interrupt */
ath9k_hw_enable_interrupts(ah);

Expand Down

0 comments on commit e392700

Please sign in to comment.