Improves 2.4 GHz throughput Signed-off-by: Felix Fietkau <nbd@nbd.name>master
parent
55bd80f6d8
commit
d59c6b53f4
@ -0,0 +1,20 @@ |
||||
From: Felix Fietkau <nbd@nbd.name>
|
||||
Date: Thu, 1 Mar 2018 13:27:54 +0100
|
||||
Subject: [PATCH] mac80211: minstrel: fix CCK rate group streams value
|
||||
|
||||
Fixes a harmless underflow issue when CCK rates are actively being used
|
||||
|
||||
Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
---
|
||||
|
||||
--- a/net/mac80211/rc80211_minstrel_ht.c
|
||||
+++ b/net/mac80211/rc80211_minstrel_ht.c
|
||||
@@ -131,7 +131,7 @@
|
||||
|
||||
#define CCK_GROUP(_s) \
|
||||
[MINSTREL_CCK_GROUP] = { \
|
||||
- .streams = 0, \
|
||||
+ .streams = 1, \
|
||||
.flags = 0, \
|
||||
.shift = _s, \
|
||||
.duration = { \
|
@ -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;
|
Loading…
Reference in new issue