mac80211: add missing return code checks in AQL improvements

Fixes throughput issues with some drivers (e.g. ath10k)

Signed-off-by: Felix Fietkau <nbd@nbd.name>
This commit is contained in:
Felix Fietkau 2020-08-21 18:06:50 +02:00
parent 734a8c46e7
commit 010682067b
2 changed files with 8 additions and 6 deletions

View File

@ -104,7 +104,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
} }
EXPORT_SYMBOL_GPL(ieee80211_calc_rx_airtime); EXPORT_SYMBOL_GPL(ieee80211_calc_rx_airtime);
@@ -530,46 +546,56 @@ static bool ieee80211_fill_rate_info(str @@ -530,46 +546,57 @@ static bool ieee80211_fill_rate_info(str
return false; return false;
} }
@ -179,7 +179,8 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
+{ +{
+ struct ieee80211_rx_status stat; + struct ieee80211_rx_status stat;
+ +
+ ieee80211_fill_rx_status(&stat, hw, rate, ri, band, len); + if (ieee80211_fill_rx_status(&stat, hw, rate, ri, band, len))
+ return 0;
+ +
return ieee80211_calc_rx_airtime(hw, &stat, len); return ieee80211_calc_rx_airtime(hw, &stat, len);
} }

View File

@ -12,7 +12,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
--- a/net/mac80211/airtime.c --- a/net/mac80211/airtime.c
+++ b/net/mac80211/airtime.c +++ b/net/mac80211/airtime.c
@@ -646,27 +646,40 @@ u32 ieee80211_calc_expected_tx_airtime(s @@ -647,27 +647,41 @@ u32 ieee80211_calc_expected_tx_airtime(s
if (pubsta) { if (pubsta) {
struct sta_info *sta = container_of(pubsta, struct sta_info, struct sta_info *sta = container_of(pubsta, struct sta_info,
sta); sta);
@ -26,11 +26,12 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
- if (!(rate->flags & (IEEE80211_TX_RC_VHT_MCS | - if (!(rate->flags & (IEEE80211_TX_RC_VHT_MCS |
- IEEE80211_TX_RC_MCS))) - IEEE80211_TX_RC_MCS)))
- ampdu = false; - ampdu = false;
+ ieee80211_fill_rx_status(&stat, hw, rate, ri, band, len); + if (ieee80211_fill_rx_status(&stat, hw, rate, ri, band, len))
+ + return 0;
+ if (stat.encoding == RX_ENC_LEGACY || !ampdu) + if (stat.encoding == RX_ENC_LEGACY || !ampdu)
+ return ieee80211_calc_rx_airtime(hw, &stat, len); + return ieee80211_calc_rx_airtime(hw, &stat, len);
+
+ duration = ieee80211_get_rate_duration(hw, &stat, &overhead); + duration = ieee80211_get_rate_duration(hw, &stat, &overhead);
/* /*
* Assume that HT/VHT transmission on any AC except VO will * Assume that HT/VHT transmission on any AC except VO will