aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFelix Fietkau <nbd@nbd.name>2020-08-27 13:02:42 +0200
committerFelix Fietkau <nbd@nbd.name>2020-09-01 17:01:56 +0200
commit2c14710c54befc69e70fff52240875b2bbf94cd1 (patch)
tree1e74251b1c2068bb21e436b023d69e30c45b30f9
parentb5d425af237dc03327078d6b9be178a38b5f8723 (diff)
downloadupstream-2c14710c54befc69e70fff52240875b2bbf94cd1.tar.gz
upstream-2c14710c54befc69e70fff52240875b2bbf94cd1.tar.bz2
upstream-2c14710c54befc69e70fff52240875b2bbf94cd1.zip
mac80211: add more AQL fixes/improvements
Fix aggregation length estimation, add HE and VHT160 support Signed-off-by: Felix Fietkau <nbd@nbd.name>
-rw-r--r--package/kernel/mac80211/patches/subsys/327-mac80211-extend-AQL-aggregation-estimation-to-HE-and.patch49
-rw-r--r--package/kernel/mac80211/patches/subsys/328-mac80211-add-AQL-support-for-VHT160-tx-rates.patch23
2 files changed, 72 insertions, 0 deletions
diff --git a/package/kernel/mac80211/patches/subsys/327-mac80211-extend-AQL-aggregation-estimation-to-HE-and.patch b/package/kernel/mac80211/patches/subsys/327-mac80211-extend-AQL-aggregation-estimation-to-HE-and.patch
new file mode 100644
index 0000000000..3d687f8341
--- /dev/null
+++ b/package/kernel/mac80211/patches/subsys/327-mac80211-extend-AQL-aggregation-estimation-to-HE-and.patch
@@ -0,0 +1,49 @@
+From: Felix Fietkau <nbd@nbd.name>
+Date: Thu, 27 Aug 2020 12:44:36 +0200
+Subject: [PATCH] mac80211: extend AQL aggregation estimation to HE and fix
+ unit mismatch
+
+The unit of the return value of ieee80211_get_rate_duration is nanoseconds, not
+milliseconds. Adjust the duration checks to account for that.
+For higher data rates, allow larger estimated aggregation sizes, and add some
+values for HE as well, which can use much larger aggregates.
+Since small packets with high data rates can now lead to duration values too
+small for info->tx_time_est, return a minimum of 4us.
+
+Signed-off-by: Felix Fietkau <nbd@nbd.name>
+---
+
+--- a/net/mac80211/airtime.c
++++ b/net/mac80211/airtime.c
+@@ -668,20 +668,26 @@ u32 ieee80211_calc_expected_tx_airtime(s
+ * This will not be very accurate, but much better than simply
+ * assuming un-aggregated tx in all cases.
+ */
+- if (duration > 400) /* <= VHT20 MCS2 1S */
++ if (duration > 400 * 1024) /* <= VHT20 MCS2 1S */
+ agg_shift = 1;
+- else if (duration > 250) /* <= VHT20 MCS3 1S or MCS1 2S */
++ else if (duration > 250 * 1024) /* <= VHT20 MCS3 1S or MCS1 2S */
+ agg_shift = 2;
+- else if (duration > 150) /* <= VHT20 MCS5 1S or MCS3 2S */
++ else if (duration > 150 * 1024) /* <= VHT20 MCS5 1S or MCS2 2S */
+ agg_shift = 3;
+- else
++ else if (duration > 70 * 1024) /* <= VHT20 MCS5 2S */
+ agg_shift = 4;
++ else if (stat.encoding != RX_ENC_HE ||
++ duration > 20 * 1024) /* <= HE40 MCS6 2S */
++ agg_shift = 5;
++ else
++ agg_shift = 6;
+
+ duration *= len;
+ duration /= AVG_PKT_SIZE;
+ duration /= 1024;
++ duration += (overhead >> agg_shift);
+
+- return duration + (overhead >> agg_shift);
++ return max_t(u32, duration, 4);
+ }
+
+ if (!conf)
diff --git a/package/kernel/mac80211/patches/subsys/328-mac80211-add-AQL-support-for-VHT160-tx-rates.patch b/package/kernel/mac80211/patches/subsys/328-mac80211-add-AQL-support-for-VHT160-tx-rates.patch
new file mode 100644
index 0000000000..e22a09e711
--- /dev/null
+++ b/package/kernel/mac80211/patches/subsys/328-mac80211-add-AQL-support-for-VHT160-tx-rates.patch
@@ -0,0 +1,23 @@
+From: Felix Fietkau <nbd@nbd.name>
+Date: Thu, 27 Aug 2020 12:47:48 +0200
+Subject: [PATCH] mac80211: add AQL support for VHT160 tx rates
+
+When converting from struct ieee80211_tx_rate to ieee80211_rx_status,
+there was one check missing to fill in the bandwidth for 160 MHz
+
+Signed-off-by: Felix Fietkau <nbd@nbd.name>
+---
+
+--- a/net/mac80211/airtime.c
++++ b/net/mac80211/airtime.c
+@@ -560,7 +560,9 @@ static int ieee80211_fill_rx_status(stru
+ if (rate->idx < 0 || !rate->count)
+ return -1;
+
+- if (rate->flags & IEEE80211_TX_RC_80_MHZ_WIDTH)
++ if (rate->flags & IEEE80211_TX_RC_160_MHZ_WIDTH)
++ stat->bw = RATE_INFO_BW_160;
++ else if (rate->flags & IEEE80211_TX_RC_80_MHZ_WIDTH)
+ stat->bw = RATE_INFO_BW_80;
+ else if (rate->flags & IEEE80211_TX_RC_40_MHZ_WIDTH)
+ stat->bw = RATE_INFO_BW_40;