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: c7c1806098752c1f46943d8db2c69aff07f5d4bc
> From: Rajkumar Manoharan <[email protected]>
> Date: Thu, 27 Jan 2011 18:39:38 +0530
> Subject: [PATCH] ath9k: Fix power save usage count imbalance on deinit
> 
> While unloading the driver, the ps_usecount is incremented
> before configuring gpio registers in deinit_device.
> But it is failed to restore the ps_usecount after that.
> The problem is that the chip is forcibly moved to FULL SLEEP
> by radio_disable when mac80211 is reporting as idle
> though ps_usecount is not zero.
> 
> This patch retores ps_usecount properly and ensures that
> the chip is always moved to full sleep only if ps usage
> count is zero which also helps in debugging deadbeef on
> multivif case. And also fixes the following warning.
> 
> ath: DMA failed to stop in 10 ms AR_CR=0xdeadbeef AR_DIAG_SW=0xdeadbeef
> ath: Could not stop RX, we could be confusing the DMA engine when we
> start RX up
> ------------[ cut here ]------------
> WARNING: at drivers/net/wireless/ath/ath9k/recv.c:536
> ath_stoprecv+0xf4/0x100 [ath9k]()
> 
> Cc: [email protected]
> Cc: Paul Stewart <[email protected]>
> Signed-off-by: Rajkumar Manoharan <[email protected]>
> Signed-off-by: John W. Linville <[email protected]>
> ---
>  drivers/net/wireless/ath/ath9k/init.c |    2 ++
>  drivers/net/wireless/ath/ath9k/main.c |    2 --
>  2 files changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/net/wireless/ath/ath9k/init.c 
> b/drivers/net/wireless/ath/ath9k/init.c
> index b3254a3..087a6a9 100644
> --- a/drivers/net/wireless/ath/ath9k/init.c
> +++ b/drivers/net/wireless/ath/ath9k/init.c
> @@ -819,6 +819,8 @@ void ath9k_deinit_device(struct ath_softc *sc)
>       wiphy_rfkill_stop_polling(sc->hw->wiphy);
>       ath_deinit_leds(sc);
>  
> +     ath9k_ps_restore(sc);
> +
>       for (i = 0; i < sc->num_sec_wiphy; i++) {
>               struct ath_wiphy *aphy = sc->sec_wiphy[i];
>               if (aphy == NULL)
> diff --git a/drivers/net/wireless/ath/ath9k/main.c 
> b/drivers/net/wireless/ath/ath9k/main.c
> index ace9f06..568f7be 100644
> --- a/drivers/net/wireless/ath/ath9k/main.c
> +++ b/drivers/net/wireless/ath/ath9k/main.c
> @@ -953,8 +953,6 @@ void ath_radio_disable(struct ath_softc *sc, struct 
> ieee80211_hw *hw)
>  
>       spin_unlock_bh(&sc->sc_pcu_lock);
>       ath9k_ps_restore(sc);
> -
> -     ath9k_setpower(sc, ATH9K_PM_FULL_SLEEP);
>  }
>  
>  int ath_reset(struct ath_softc *sc, bool retry_tx)
> 
> _______________________________________________
> stable mailing list
> [email protected]
> http://linux.kernel.org/mailman/listinfo/stable

_______________________________________________
stable mailing list
[email protected]
http://linux.kernel.org/mailman/listinfo/stable

Reply via email to