Skip to content

Commit

Permalink
mac80211: minstrel_ht: pick only supported rates for sta and group ma…
Browse files Browse the repository at this point in the history
…x*rates

minstrel_ht initializes max_tp_rate max_tp_rate2 and max_prob_rate to
zero both for minstrel_ht_sta and minstrel_mcs_group_data.
This is wrong since there is no guarantee that the 1st rate of any
group is supported.

Signed-off-by: Karl Beldan <karl.beldan@rivierawaves.com>
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
  • Loading branch information
Karl Beldan authored and Johannes Berg committed Apr 22, 2013
1 parent 06f95e6 commit c2eb5b0
Showing 1 changed file with 15 additions and 6 deletions.
21 changes: 15 additions & 6 deletions net/mac80211/rc80211_minstrel_ht.c
Original file line number Diff line number Diff line change
Expand Up @@ -244,6 +244,7 @@ minstrel_ht_update_stats(struct minstrel_priv *mp, struct minstrel_ht_sta *mi)
struct minstrel_rate_stats *mr;
int cur_prob, cur_prob_tp, cur_tp, cur_tp2;
int group, i, index;
bool mi_rates_valid = false;

if (mi->ampdu_packets > 0) {
mi->avg_ampdu_len = minstrel_ewma(mi->avg_ampdu_len,
Expand All @@ -254,11 +255,10 @@ minstrel_ht_update_stats(struct minstrel_priv *mp, struct minstrel_ht_sta *mi)

mi->sample_slow = 0;
mi->sample_count = 0;
mi->max_tp_rate = 0;
mi->max_tp_rate2 = 0;
mi->max_prob_rate = 0;

for (group = 0; group < ARRAY_SIZE(minstrel_mcs_groups); group++) {
bool mg_rates_valid = false;

cur_prob = 0;
cur_prob_tp = 0;
cur_tp = 0;
Expand All @@ -268,15 +268,24 @@ minstrel_ht_update_stats(struct minstrel_priv *mp, struct minstrel_ht_sta *mi)
if (!mg->supported)
continue;

mg->max_tp_rate = 0;
mg->max_tp_rate2 = 0;
mg->max_prob_rate = 0;
mi->sample_count++;

for (i = 0; i < MCS_GROUP_RATES; i++) {
if (!(mg->supported & BIT(i)))
continue;

/* 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_rates_valid = true;
}
mg_rates_valid = true;
}

mr = &mg->rates[i];
mr->retry_updated = false;
index = MCS_GROUP_RATES * group + i;
Expand Down

0 comments on commit c2eb5b0

Please sign in to comment.