mac80211: add more AQL fixes/improvements
Fix aggregation length estimation, add HE and VHT160 support Signed-off-by: Felix Fietkau <nbd@nbd.name>
This commit is contained in:
parent
b5d425af23
commit
2c14710c54
2 changed files with 72 additions and 0 deletions
|
@ -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)
|
|
@ -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;
|
Loading…
Reference in a new issue