Search Linux Wireless

Re: [PATCH 2/2] iwlagn: fix iwlagn_check_needed_chains

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Johannes,

On Fri, 2011-02-25 at 03:24 -0800, Johannes Berg wrote:
> From: Johannes Berg <johannes.berg@xxxxxxxxx>
> 
> This function was intended to calculate the
> number of RX chains needed, but could only
> work where the AP's streams were asymmetric,
> i.e. 2 TX and 3 RX or similar. In the case
> where IEEE80211_HT_MCS_TX_RX_DIFF was not
> set, this function would calculate the wrong
> information.
> 
> Additionally, mac80211 didn't pass through
> the required values at all, so it couldn't
> work anyway.
> 
> Rewrite the logic in this function and add
> appropriate comments to make it readable.
> 
> Signed-off-by: Johannes Berg <johannes.berg@xxxxxxxxx>
> ---
>  drivers/net/wireless/iwlwifi/iwl-agn-rxon.c |   58 +++++++++++++++++++---------
>  1 file changed, 41 insertions(+), 17 deletions(-)
> 
> --- wireless-testing.orig/drivers/net/wireless/iwlwifi/iwl-agn-rxon.c	2011-02-25 11:03:37.000000000 +0100
> +++ wireless-testing/drivers/net/wireless/iwlwifi/iwl-agn-rxon.c	2011-02-25 12:21:18.000000000 +0100
> @@ -471,6 +471,7 @@ static void iwlagn_check_needed_chains(s
>  	struct iwl_rxon_context *tmp;
>  	struct ieee80211_sta *sta;
>  	struct iwl_ht_config *ht_conf = &priv->current_ht_config;
> +	struct ieee80211_sta_ht_cap *ht_cap;
>  	bool need_multiple;
>  
>  	lockdep_assert_held(&priv->mutex);
> @@ -479,23 +480,7 @@ static void iwlagn_check_needed_chains(s
>  	case NL80211_IFTYPE_STATION:
>  		rcu_read_lock();
>  		sta = ieee80211_find_sta(vif, bss_conf->bssid);
> -		if (sta) {
> -			struct ieee80211_sta_ht_cap *ht_cap = &sta->ht_cap;
> -			int maxstreams;
> -
> -			maxstreams = (ht_cap->mcs.tx_params &
> -				      IEEE80211_HT_MCS_TX_MAX_STREAMS_MASK)
> -					>> IEEE80211_HT_MCS_TX_MAX_STREAMS_SHIFT;
> -			maxstreams += 1;
> -
> -			need_multiple = true;
> -
> -			if ((ht_cap->mcs.rx_mask[1] == 0) &&
> -			    (ht_cap->mcs.rx_mask[2] == 0))
> -				need_multiple = false;
> -			if (maxstreams <= 1)
> -				need_multiple = false;
> -		} else {
> +		if (!sta) {
>  			/*
>  			 * If at all, this can only happen through a race
>  			 * when the AP disconnects us while we're still
> @@ -503,7 +488,46 @@ static void iwlagn_check_needed_chains(s
>  			 * will soon tell us about that.
>  			 */
>  			need_multiple = false;
> +			rcu_read_unlock();
> +			break;

why unlock and break here instead stay do it later like before?

Wey




--
To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux Host AP]     [ATH6KL]     [Linux Bluetooth]     [Linux Netdev]     [Kernel Newbies]     [Linux Kernel]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Samba]     [Device Mapper]
  Powered by Linux