diff options
author | Sujith Manoharan <c_manoha@qca.qualcomm.com> | 2013-09-16 07:07:00 +0200 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2013-09-26 21:13:49 +0200 |
commit | c6cc47b101c547c328cae06c2d8813a8e69549bf (patch) | |
tree | b377b713ef97cdc9f8ecc1d19080253b95fc7b09 /drivers/net/wireless/ath/ath9k | |
parent | ath9k: Fix NF calibration for single stream cards (diff) | |
download | linux-c6cc47b101c547c328cae06c2d8813a8e69549bf.tar.xz linux-c6cc47b101c547c328cae06c2d8813a8e69549bf.zip |
ath9k: Handle FATAL interrupts correctly
When a FATAL interrupt is received, a full chip reset is
required, which is done in the main tasklet. But since
the reset routine is scheduled as a work item, make sure
that interrupts are not enabled in the tasklet before the
reset is done.
Signed-off-by: Sujith Manoharan <c_manoha@qca.qualcomm.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers/net/wireless/ath/ath9k')
-rw-r--r-- | drivers/net/wireless/ath/ath9k/main.c | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/drivers/net/wireless/ath/ath9k/main.c b/drivers/net/wireless/ath/ath9k/main.c index e4f65900132d..cdb3b1e10b95 100644 --- a/drivers/net/wireless/ath/ath9k/main.c +++ b/drivers/net/wireless/ath/ath9k/main.c @@ -362,6 +362,13 @@ void ath9k_tasklet(unsigned long data) type = RESET_TYPE_BB_WATCHDOG; ath9k_queue_reset(sc, type); + + /* + * Increment the ref. counter here so that + * interrupts are enabled in the reset routine. + */ + atomic_inc(&ah->intr_ref_cnt); + ath_dbg(common, ANY, "FATAL: Skipping interrupts\n"); goto out; } @@ -400,10 +407,9 @@ void ath9k_tasklet(unsigned long data) ath9k_btcoex_handle_interrupt(sc, status); -out: /* re-enable hardware interrupt */ ath9k_hw_enable_interrupts(ah); - +out: spin_unlock(&sc->sc_pcu_lock); ath9k_ps_restore(sc); } |