From: Felix Fietkau Date: Tue, 12 Apr 2022 07:32:34 +0000 (+0200) Subject: mac80211: backport minstrel_ht fix for legacy rates X-Git-Tag: v22.03.0-rc1~46 X-Git-Url: http://git.openwrt.org/?p=openwrt%2Fopenwrt.git;a=commitdiff_plain;h=968c1dedc22517a2a79a1fe0ce884aaeaca32d7a mac80211: backport minstrel_ht fix for legacy rates Fixes OFDM rates on 5 GHz Signed-off-by: Felix Fietkau (cherry-picked from commit 5d5afd51772c9a992cb6bb9e0a9dce6feaa3fdef) --- diff --git a/package/kernel/mac80211/patches/subsys/329-mac80211-minstrel_ht-fix-where-rate-stats-are-stored.patch b/package/kernel/mac80211/patches/subsys/329-mac80211-minstrel_ht-fix-where-rate-stats-are-stored.patch new file mode 100644 index 0000000000..d7832acce5 --- /dev/null +++ b/package/kernel/mac80211/patches/subsys/329-mac80211-minstrel_ht-fix-where-rate-stats-are-stored.patch @@ -0,0 +1,61 @@ +From: Peter Seiderer +Date: Mon, 4 Apr 2022 18:54:14 +0200 +Subject: [PATCH] mac80211: minstrel_ht: fix where rate stats are stored (fixes + debugfs output) + +Using an ath9k card the debugfs output of minstrel_ht looks like the following +(note the zero values for the first four rates sum-of success/attempts): + + best ____________rate__________ ____statistics___ _____last____ ______sum-of________ +mode guard # rate [name idx airtime max_tp] [avg(tp) avg(prob)] [retry|suc|att] [#success | #attempts] +OFDM 1 DP 6.0M 272 1640 5.2 3.1 53.8 3 0 0 0 0 +OFDM 1 C 9.0M 273 1104 7.7 4.6 53.8 4 0 0 0 0 +OFDM 1 B 12.0M 274 836 10.0 6.0 53.8 4 0 0 0 0 +OFDM 1 A S 18.0M 275 568 14.3 8.5 53.8 5 0 0 0 0 +OFDM 1 S 24.0M 276 436 18.1 0.0 0.0 5 0 1 80 1778 +OFDM 1 36.0M 277 300 24.9 0.0 0.0 0 0 1 0 107 +OFDM 1 S 48.0M 278 236 30.4 0.0 0.0 0 0 0 0 75 +OFDM 1 54.0M 279 212 33.0 0.0 0.0 0 0 0 0 72 + +Total packet count:: ideal 16582 lookaround 885 +Average # of aggregated frames per A-MPDU: 1.0 + +Debugging showed that the rate statistics for the first four rates where +stored in the MINSTREL_CCK_GROUP instead of the MINSTREL_OFDM_GROUP because +in minstrel_ht_get_stats() the supported check was not honoured as done in +various other places, e.g net/mac80211/rc80211_minstrel_ht_debugfs.c: + + 74 if (!(mi->supported[i] & BIT(j))) + 75 continue; + +With the patch applied the output looks good: + + best ____________rate__________ ____statistics___ _____last____ ______sum-of________ +mode guard # rate [name idx airtime max_tp] [avg(tp) avg(prob)] [retry|suc|att] [#success | #attempts] +OFDM 1 D 6.0M 272 1640 5.2 5.2 100.0 3 0 0 1 1 +OFDM 1 C 9.0M 273 1104 7.7 7.7 100.0 4 0 0 38 38 +OFDM 1 B 12.0M 274 836 10.0 9.9 89.5 4 2 2 372 395 +OFDM 1 A P 18.0M 275 568 14.3 14.3 97.2 5 52 53 6956 7181 +OFDM 1 S 24.0M 276 436 18.1 0.0 0.0 0 0 1 6 163 +OFDM 1 36.0M 277 300 24.9 0.0 0.0 0 0 1 0 35 +OFDM 1 S 48.0M 278 236 30.4 0.0 0.0 0 0 0 0 38 +OFDM 1 S 54.0M 279 212 33.0 0.0 0.0 0 0 0 0 38 + +Total packet count:: ideal 7097 lookaround 287 +Average # of aggregated frames per A-MPDU: 1.0 + +Signed-off-by: Peter Seiderer +--- + +--- a/net/mac80211/rc80211_minstrel_ht.c ++++ b/net/mac80211/rc80211_minstrel_ht.c +@@ -364,6 +364,9 @@ minstrel_ht_get_stats(struct minstrel_pr + + group = MINSTREL_CCK_GROUP; + for (idx = 0; idx < ARRAY_SIZE(mp->cck_rates); idx++) { ++ if (!(mi->supported[group] & BIT(idx))) ++ continue; ++ + if (rate->idx != mp->cck_rates[idx]) + continue; +