diff options
author | Felix Fietkau <nbd@nbd.name> | 2018-03-01 13:34:41 +0100 |
---|---|---|
committer | Felix Fietkau <nbd@nbd.name> | 2018-03-01 13:35:11 +0100 |
commit | d59c6b53f495b22e09563c848bb21dadee575e95 (patch) | |
tree | 29789c77130e43a47f92c93d785effdce6fb5197 /package/kernel/mac80211/patches/337-mac80211-minstrel-fix-sampling-reporting-of-CCK-rate.patch | |
parent | 55bd80f6d871d1c6c70101579524c42cdb73ed7d (diff) | |
download | upstream-d59c6b53f495b22e09563c848bb21dadee575e95.tar.gz upstream-d59c6b53f495b22e09563c848bb21dadee575e95.tar.bz2 upstream-d59c6b53f495b22e09563c848bb21dadee575e95.zip |
mac80211: add more minstrel fixes
Improves 2.4 GHz throughput
Signed-off-by: Felix Fietkau <nbd@nbd.name>
Diffstat (limited to 'package/kernel/mac80211/patches/337-mac80211-minstrel-fix-sampling-reporting-of-CCK-rate.patch')
-rw-r--r-- | package/kernel/mac80211/patches/337-mac80211-minstrel-fix-sampling-reporting-of-CCK-rate.patch | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/package/kernel/mac80211/patches/337-mac80211-minstrel-fix-sampling-reporting-of-CCK-rate.patch b/package/kernel/mac80211/patches/337-mac80211-minstrel-fix-sampling-reporting-of-CCK-rate.patch new file mode 100644 index 0000000000..ff2f3450b2 --- /dev/null +++ b/package/kernel/mac80211/patches/337-mac80211-minstrel-fix-sampling-reporting-of-CCK-rate.patch @@ -0,0 +1,57 @@ +From: Felix Fietkau <nbd@nbd.name> +Date: Thu, 1 Mar 2018 13:28:48 +0100 +Subject: [PATCH] mac80211: minstrel: fix sampling/reporting of CCK rates + in HT mode + +Long/short preamble selection cannot be sampled separately, since it +depends on the BSS state. Because of that, sampling attempts to +currently not used preamble modes are not counted in the statistics, +which leads to CCK rates being sampled too often. + +Fix statistics accounting for long/short preamble by increasing the +index where necessary. +Fix excessive CCK rate sampling by dropping unsupported sample attempts. + +This improves throughput on 2.4 GHz channels + +Signed-off-by: Felix Fietkau <nbd@nbd.name> +--- + +--- a/net/mac80211/rc80211_minstrel_ht.c ++++ b/net/mac80211/rc80211_minstrel_ht.c +@@ -281,7 +281,8 @@ minstrel_ht_get_stats(struct minstrel_pr + break; + + /* short preamble */ +- if (!(mi->supported[group] & BIT(idx))) ++ if ((mi->supported[group] & BIT(idx + 4)) && ++ (rate->flags & IEEE80211_TX_RC_USE_SHORT_PREAMBLE)) + idx += 4; + } + return &mi->groups[group].rates[idx]; +@@ -1080,18 +1081,22 @@ minstrel_ht_get_rate(void *priv, struct + return; + + sample_group = &minstrel_mcs_groups[sample_idx / MCS_GROUP_RATES]; ++ sample_idx %= MCS_GROUP_RATES; ++ ++ if ((sample_idx >= 4) != txrc->short_preamble) ++ return; ++ + info->flags |= IEEE80211_TX_CTL_RATE_CTRL_PROBE; + rate->count = 1; + +- if (sample_idx / MCS_GROUP_RATES == MINSTREL_CCK_GROUP) { ++ if (sample_group == &minstrel_mcs_groups[MINSTREL_CCK_GROUP]) { + int idx = sample_idx % ARRAY_SIZE(mp->cck_rates); + rate->idx = mp->cck_rates[idx]; + } else if (sample_group->flags & IEEE80211_TX_RC_VHT_MCS) { + ieee80211_rate_set_vht(rate, sample_idx % MCS_GROUP_RATES, + sample_group->streams); + } else { +- rate->idx = sample_idx % MCS_GROUP_RATES + +- (sample_group->streams - 1) * 8; ++ rate->idx = sample_idx + (sample_group->streams - 1) * 8; + } + + rate->flags = sample_group->flags; |