[PATCH] ath5k: Disable fast channel switching by default

Herton Ronaldo Krzesinski herton.krzesinski at canonical.com
Fri Jun 17 15:40:55 UTC 2011


On Fri, Jun 17, 2011 at 09:29:22AM -0500, Seth Forshee wrote:
> From: Nick Kossifidis <mickflemm at gmail.com>
> 
> BugLink: http://bugs.launchpad.net/bugs/767192
> 
> Disable fast channel change by default on AR2413/AR5413 due to
> some bug reports (it still works for me but it's better to be safe).
> Add a module parameter "fastchanswitch" in case anyone wants to enable
> it and play with it.
> 
> Signed-off-by: Nick Kossifidis <mickflemm at gmail.com>
> Tested-by: Sedat Dilek <sedat.dilek at gmail.com>
> Signed-off-by: John W. Linville <linville at tuxdriver.com>
> (backported from commit a99168eece601d2a79ecfcb968ce226f2f30cf98 upstream)
> 
> Signed-off-by: Seth Forshee <seth.forshee at canonical.com>
> ---
>  drivers/net/wireless/ath/ath5k/base.c  |   11 ++++++++++-
>  drivers/net/wireless/ath/ath5k/reset.c |    5 ++++-
>  2 files changed, 14 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/net/wireless/ath/ath5k/base.c b/drivers/net/wireless/ath/ath5k/base.c
> index 09ae4ef..f6814f0 100644
> --- a/drivers/net/wireless/ath/ath5k/base.c
> +++ b/drivers/net/wireless/ath/ath5k/base.c
> @@ -69,6 +69,11 @@ static int modparam_all_channels;
>  module_param_named(all_channels, modparam_all_channels, bool, S_IRUGO);
>  MODULE_PARM_DESC(all_channels, "Expose all channels the device can use.");
>  
> +static int modparam_fastchanswitch;
> +module_param_named(fastchanswitch, modparam_fastchanswitch, bool, S_IRUGO);
> +MODULE_PARM_DESC(fastchanswitch, "Enable fast channel switching for AR2413/AR5413 radios.");
> +
> +
>  /* Module info */
>  MODULE_AUTHOR("Jiri Slaby");
>  MODULE_AUTHOR("Nick Kossifidis");
> @@ -2664,6 +2669,7 @@ ath5k_reset(struct ath5k_softc *sc, struct ieee80211_channel *chan,
>  	struct ath5k_hw *ah = sc->ah;
>  	struct ath_common *common = ath5k_hw_common(ah);
>  	int ret, ani_mode;
> +	bool fast;
>  
>  	ATH5K_DBG(sc, ATH5K_DEBUG_RESET, "resetting\n");
>  
> @@ -2685,7 +2691,10 @@ ath5k_reset(struct ath5k_softc *sc, struct ieee80211_channel *chan,
>  		sc->curchan = chan;
>  		sc->curband = &sc->sbands[chan->band];
>  	}
> -	ret = ath5k_hw_reset(ah, sc->opmode, sc->curchan, chan != NULL,
> +
> +	fast = ((chan != NULL) && modparam_fastchanswitch) ? 1 : 0;
> +
> +	ret = ath5k_hw_reset(ah, sc->opmode, sc->curchan, fast,
>  								skip_pcu);
>  	if (ret) {
>  		ATH5K_ERR(sc, "can't reset hardware (%d)\n", ret);
> diff --git a/drivers/net/wireless/ath/ath5k/reset.c b/drivers/net/wireless/ath/ath5k/reset.c
> index 8420689..6f53d2b 100644
> --- a/drivers/net/wireless/ath/ath5k/reset.c
> +++ b/drivers/net/wireless/ath/ath5k/reset.c
> @@ -1119,8 +1119,11 @@ int ath5k_hw_reset(struct ath5k_hw *ah, enum nl80211_iftype op_mode,
>  			/* Non fatal, can happen eg.
>  			 * on mode change */
>  			ret = 0;
> -		} else
> +		} else {
> +			ATH5K_DBG(ah->ah_sc, ATH5K_DEBUG_RESET,
> +				"fast chan change successful\n");
>  			return 0;
> +		}
>  	}
>  
>  	/*

It looks ok, although from poking at bug 767192 it seems users tested
this with a 2.6.39 based build and not the natty kernel. But the bug
which this fixes is on 2.6.38 too, others confirmed this fix, and the SRU
process will require verification of this anyway. Also, the fix is simple and a
lot of users seems hitting it so:

Acked-by: Herton Ronaldo Krzesinski <herton.krzesinski at canonical.com>

> -- 
> 1.7.4.1
> 
> 
> -- 
> kernel-team mailing list
> kernel-team at lists.ubuntu.com
> https://lists.ubuntu.com/mailman/listinfo/kernel-team
> 

-- 
[]'s
Herton




More information about the kernel-team mailing list