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: 783cd01e140d9db5c2d2279a96b81e16f9d81fef
> From: Felix Fietkau <[email protected]>
> Date: Fri, 21 Jan 2011 18:52:38 +0100
> Subject: [PATCH] ath9k: add missing ps wakeup/restore calls
> 
> There are several places where ath_reset() was called without proper
> calls to ath9k_ps_wakeup/ath9k_ps_restore. To fix this, add those calls
> directly to ath_reset and drop them from callers where it makes sense.
> 
> Also add them to the config callback around ath_update_txpow to fix a
> crash that happens when the tx power changed before any vif is brought up.
> 
> Signed-off-by: Felix Fietkau <[email protected]>
> Cc: [email protected]
> Signed-off-by: John W. Linville <[email protected]>
> ---
>  drivers/net/wireless/ath/ath9k/main.c |    8 +++++---
>  drivers/net/wireless/ath/ath9k/xmit.c |    2 --
>  2 files changed, 5 insertions(+), 5 deletions(-)
> 
> diff --git a/drivers/net/wireless/ath/ath9k/main.c 
> b/drivers/net/wireless/ath/ath9k/main.c
> index f90a6ca..c79c97b 100644
> --- a/drivers/net/wireless/ath/ath9k/main.c
> +++ b/drivers/net/wireless/ath/ath9k/main.c
> @@ -592,14 +592,12 @@ void ath9k_tasklet(unsigned long data)
>       u32 status = sc->intrstatus;
>       u32 rxmask;
>  
> -     ath9k_ps_wakeup(sc);
> -
>       if (status & ATH9K_INT_FATAL) {
>               ath_reset(sc, true);
> -             ath9k_ps_restore(sc);
>               return;
>       }
>  
> +     ath9k_ps_wakeup(sc);
>       spin_lock(&sc->sc_pcu_lock);
>  
>       if (!ath9k_hw_check_alive(ah))
> @@ -969,6 +967,7 @@ int ath_reset(struct ath_softc *sc, bool retry_tx)
>       /* Stop ANI */
>       del_timer_sync(&common->ani.timer);
>  
> +     ath9k_ps_wakeup(sc);
>       spin_lock_bh(&sc->sc_pcu_lock);
>  
>       ieee80211_stop_queues(hw);
> @@ -1015,6 +1014,7 @@ int ath_reset(struct ath_softc *sc, bool retry_tx)
>  
>       /* Start ANI */
>       ath_start_ani(common);
> +     ath9k_ps_restore(sc);
>  
>       return r;
>  }
> @@ -1701,7 +1701,9 @@ static int ath9k_config(struct ieee80211_hw *hw, u32 
> changed)
>  skip_chan_change:
>       if (changed & IEEE80211_CONF_CHANGE_POWER) {
>               sc->config.txpowlimit = 2 * conf->power_level;
> +             ath9k_ps_wakeup(sc);
>               ath_update_txpow(sc);
> +             ath9k_ps_restore(sc);
>       }
>  
>       spin_lock_bh(&sc->wiphy_lock);
> diff --git a/drivers/net/wireless/ath/ath9k/xmit.c 
> b/drivers/net/wireless/ath/ath9k/xmit.c
> index 332d1fe..33a37ed 100644
> --- a/drivers/net/wireless/ath/ath9k/xmit.c
> +++ b/drivers/net/wireless/ath/ath9k/xmit.c
> @@ -2113,9 +2113,7 @@ static void ath_tx_complete_poll_work(struct 
> work_struct *work)
>       if (needreset) {
>               ath_dbg(ath9k_hw_common(sc->sc_ah), ATH_DBG_RESET,
>                       "tx hung, resetting the chip\n");
> -             ath9k_ps_wakeup(sc);
>               ath_reset(sc, true);
> -             ath9k_ps_restore(sc);
>       }
>  
>       ieee80211_queue_delayed_work(sc->hw, &sc->tx_complete_work,
> 
> _______________________________________________
> 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