mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-09-12 13:55:32 +00:00
mac80211: minstrel_ht: pick only supported rates for sta and group max*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>
This commit is contained in:
parent
06f95e66de
commit
c2eb5b0f34
1 changed files with 15 additions and 6 deletions
|
@ -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,
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
|
Loading…
Reference in a new issue