diff options
| author | Karl Beldan <karl.beldan@rivierawaves.com> | 2013-11-13 23:07:07 +0100 | 
|---|---|---|
| committer | Johannes Berg <johannes.berg@intel.com> | 2013-11-25 16:50:10 +0100 | 
| commit | 351df099721e02e1a25a498268e52c0378c0e272 (patch) | |
| tree | 9ae6fb4e7ae55b58ac3476c32b3fea9734aebfe1 | |
| parent | 6c751ef8a1a15d633cd755eafa86ede9c32b2617 (diff) | |
mac80211: minstrel_ht: fix rates selection
When initializing rates selections starting indexes upon stats update,
the minstrel_sta->max_* rates should be 'group * MCS_GROUP_RATES + i'
not 'i'. This affects settings where one of the peers does not support
any of the rates of the group 0 (i.e. when ht_cap.mcs.rx_mask[0] == 0).
Signed-off-by: Karl Beldan <karl.beldan@rivierawaves.com>
Acked-by: Felix Fietkau <nbd@openwrt.org>
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
| -rw-r--r-- | net/mac80211/rc80211_minstrel_ht.c | 5 | 
1 files changed, 3 insertions, 2 deletions
| diff --git a/net/mac80211/rc80211_minstrel_ht.c b/net/mac80211/rc80211_minstrel_ht.c index 5d60779a0c1b..47aa6f81566b 100644 --- a/net/mac80211/rc80211_minstrel_ht.c +++ b/net/mac80211/rc80211_minstrel_ht.c @@ -277,13 +277,15 @@ minstrel_ht_update_stats(struct minstrel_priv *mp, struct minstrel_ht_sta *mi)  			if (!(mg->supported & BIT(i)))  				continue; +			index = MCS_GROUP_RATES * group + i; +  			/* initialize rates selections starting indexes */  			if (!mg_rates_valid) {  				mg->max_tp_rate = mg->max_tp_rate2 =  					mg->max_prob_rate = i;  				if (!mi_rates_valid) {  					mi->max_tp_rate = mi->max_tp_rate2 = -						mi->max_prob_rate = i; +						mi->max_prob_rate = index;  					mi_rates_valid = true;  				}  				mg_rates_valid = true; @@ -291,7 +293,6 @@ minstrel_ht_update_stats(struct minstrel_priv *mp, struct minstrel_ht_sta *mi)  			mr = &mg->rates[i];  			mr->retry_updated = false; -			index = MCS_GROUP_RATES * group + i;  			minstrel_calc_rate_ewma(mr);  			minstrel_ht_calc_tp(mi, group, i); | 
