diff options
author | Robert Shade <robert.shade@gmail.com> | 2013-04-03 03:52:45 +0400 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2013-04-03 22:31:57 +0400 |
commit | f50b1cd37446ad32c432f0f73bbed67a1c076eae (patch) | |
tree | 230d7dcf3fc0d4ebb7a4419d7689f1e92e9e2b6c /drivers/net/wireless/ath | |
parent | 3eaa956c5b18b9c955ae5a4e6e6909cae23f38e0 (diff) | |
download | linux-f50b1cd37446ad32c432f0f73bbed67a1c076eae.tar.xz |
ath9k: Re-enable interrupts after a channel change failure
ath_complete_reset will not be called if ath9k_hw_reset
is unsuccessful, so we need to re-enable intertupts to
balence the previous ath_prepare_reset call. Also schedule a
reset as a best effort method to recover the chip from
whatever state caused the channel change failure.
Fixes https://bugzilla.kernel.org/show_bug.cgi?id=55771
Signed-off-by: Robert Shade <robert.shade@gmail.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers/net/wireless/ath')
-rw-r--r-- | drivers/net/wireless/ath/ath9k/main.c | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/drivers/net/wireless/ath/ath9k/main.c b/drivers/net/wireless/ath/ath9k/main.c index 6e66f9c6782b..988372d218a4 100644 --- a/drivers/net/wireless/ath/ath9k/main.c +++ b/drivers/net/wireless/ath/ath9k/main.c @@ -280,6 +280,10 @@ static int ath_reset_internal(struct ath_softc *sc, struct ath9k_channel *hchan) if (r) { ath_err(common, "Unable to reset channel, reset status %d\n", r); + + ath9k_hw_enable_interrupts(ah); + ath9k_queue_reset(sc, RESET_TYPE_BB_HANG); + goto out; } |