This patch doesn't apply to the .37 stable tree. If someone wants it applied there, please email the backport to [email protected]
thanks, greg k-h > commit: c2731b814e2aaaa40072ee761b7373c052d86e37 > From: Luis R. Rodriguez <[email protected]> > Date: Tue, 7 Dec 2010 15:13:19 -0800 > Subject: [PATCH] ath9k: Fix power save count imbalance on ath_radio_enable() > > Upon a failure we never call ath9k_ps_restore() on ath_radio_enable(), > this will throw off the sc->ps_usecount. When the sc->ps_usecount > is > 0 we never put the chip to full sleep. This drains battery, > and will also make the chip fail upon resume with: > > ath: Starting driver with initial channel: 5745 MHz > ath: timeout (100000 us) on reg 0x7000: 0xdeadbeef & 0x00000003 != 0x00000000 > > This would make the chip useless upon resume. > > I cannot prove this can happen but in theory it is so best to > avoid this race completely and not have users complain about > a broken device after resume. > > Cc: [email protected] > Cc: Paul Stewart <[email protected]> > Cc: Amod Bodas <[email protected]> > Signed-off-by: Luis R. Rodriguez <[email protected]> > Signed-off-by: John W. Linville <[email protected]> > --- > drivers/net/wireless/ath/ath9k/main.c | 4 ++-- > 1 files changed, 2 insertions(+), 2 deletions(-) > > diff --git a/drivers/net/wireless/ath/ath9k/main.c > b/drivers/net/wireless/ath/ath9k/main.c > index daa3c9f..ef298f4 100644 > --- a/drivers/net/wireless/ath/ath9k/main.c > +++ b/drivers/net/wireless/ath/ath9k/main.c > @@ -900,8 +900,7 @@ void ath_radio_enable(struct ath_softc *sc, struct > ieee80211_hw *hw) > ath_update_txpow(sc); > if (ath_startrecv(sc) != 0) { > ath_err(common, "Unable to restart recv logic\n"); > - spin_unlock_bh(&sc->sc_pcu_lock); > - return; > + goto out; > } > if (sc->sc_flags & SC_OP_BEACONS) > ath_beacon_config(sc, NULL); /* restart beacons */ > @@ -915,6 +914,7 @@ void ath_radio_enable(struct ath_softc *sc, struct > ieee80211_hw *hw) > ath9k_hw_set_gpio(ah, ah->led_pin, 0); > > ieee80211_wake_queues(hw); > +out: > spin_unlock_bh(&sc->sc_pcu_lock); > > ath9k_ps_restore(sc); > > _______________________________________________ > stable mailing list > [email protected] > http://linux.kernel.org/mailman/listinfo/stable _______________________________________________ stable mailing list [email protected] http://linux.kernel.org/mailman/listinfo/stable
