mac80211: Update to version 5.9.12-1
[openwrt/staging/hauke.git] / package / kernel / mac80211 / patches / subsys / 313-mac80211-improve-AQL-aggregation-estimation-for-low-.patch
diff --git a/package/kernel/mac80211/patches/subsys/313-mac80211-improve-AQL-aggregation-estimation-for-low-.patch b/package/kernel/mac80211/patches/subsys/313-mac80211-improve-AQL-aggregation-estimation-for-low-.patch
deleted file mode 100644 (file)
index a5df07e..0000000
+++ /dev/null
@@ -1,67 +0,0 @@
-From: Felix Fietkau <nbd@nbd.name>
-Date: Wed, 12 Aug 2020 17:07:10 +0200
-Subject: [PATCH] mac80211: improve AQL aggregation estimation for low data
- rates
-
-Links with low data rates use much smaller aggregates and are much more
-sensitive to latency added by bufferbloat.
-Tune the assumed aggregation length based on the tx rate duration.
-
-Signed-off-by: Felix Fietkau <nbd@nbd.name>
----
-
---- a/net/mac80211/airtime.c
-+++ b/net/mac80211/airtime.c
-@@ -647,27 +647,41 @@ u32 ieee80211_calc_expected_tx_airtime(s
-       if (pubsta) {
-               struct sta_info *sta = container_of(pubsta, struct sta_info,
-                                                   sta);
-+              struct ieee80211_rx_status stat;
-               struct ieee80211_tx_rate *rate = &sta->tx_stats.last_rate;
-               struct rate_info *ri = &sta->tx_stats.last_rate_info;
--              u32 airtime;
-+              u32 duration, overhead;
-+              u8 agg_shift;
--              if (!(rate->flags & (IEEE80211_TX_RC_VHT_MCS |
--                                   IEEE80211_TX_RC_MCS)))
--                      ampdu = false;
-+              if (ieee80211_fill_rx_status(&stat, hw, rate, ri, band, len))
-+                      return 0;
-+              if (stat.encoding == RX_ENC_LEGACY || !ampdu)
-+                      return ieee80211_calc_rx_airtime(hw, &stat, len);
-+
-+              duration = ieee80211_get_rate_duration(hw, &stat, &overhead);
-               /*
-                * Assume that HT/VHT transmission on any AC except VO will
-                * use aggregation. Since we don't have reliable reporting
--               * of aggregation length, assume an average of 16.
-+               * of aggregation length, assume an average size based on the
-+               * tx rate.
-                * This will not be very accurate, but much better than simply
--               * assuming un-aggregated tx.
-+               * assuming un-aggregated tx in all cases.
-                */
--              airtime = ieee80211_calc_tx_airtime_rate(hw, rate, ri, band,
--                                                       ampdu ? len * 16 : len);
--              if (ampdu)
--                      airtime /= 16;
-+              if (duration > 400) /* <= VHT20 MCS2 1S */
-+                      agg_shift = 1;
-+              else if (duration > 250) /* <= VHT20 MCS3 1S or MCS1 2S */
-+                      agg_shift = 2;
-+              else if (duration > 150) /* <= VHT20 MCS5 1S or MCS3 2S */
-+                      agg_shift = 3;
-+              else
-+                      agg_shift = 4;
-+
-+              duration *= len;
-+              duration /= AVG_PKT_SIZE;
-+              duration /= 1024;
--              return airtime;
-+              return duration + (overhead >> agg_shift);
-       }
-       if (!conf)