diff options
author | Henry Yen <[email protected]> | 2024-02-22 11:24:46 +0800 |
---|---|---|
committer | Felix Fietkau <[email protected]> | 2024-05-02 12:44:50 +0200 |
commit | 296931843a72a6bff5e10d893d4128ffd4cd9324 (patch) | |
tree | 7e299349256d9b5afcbc3bf5b9af31138bc45f1e | |
parent | b7e56fa0cc8f28fc6e21bd34e971f92e3631bf95 (diff) |
wifi: mt76: mt7915: fix bogus Tx/Rx airtime duration values
Do not report measurements if the airtime counter was cleared since the
last update (possibly by firmware)
Signed-off-by: Henry Yen <[email protected]>
Signed-off-by: Felix Fietkau <[email protected]>
-rw-r--r-- | drivers/net/wireless/mediatek/mt76/mt7915/mac.c | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/drivers/net/wireless/mediatek/mt76/mt7915/mac.c b/drivers/net/wireless/mediatek/mt76/mt7915/mac.c index e45361111f9b..f350b3f7a0bd 100644 --- a/drivers/net/wireless/mediatek/mt76/mt7915/mac.c +++ b/drivers/net/wireless/mediatek/mt76/mt7915/mac.c @@ -140,8 +140,15 @@ static void mt7915_mac_sta_poll(struct mt7915_dev *dev) msta->airtime_ac[i] = mt76_rr(dev, addr); msta->airtime_ac[i + 4] = mt76_rr(dev, addr + 4); - tx_time[i] = msta->airtime_ac[i] - tx_last; - rx_time[i] = msta->airtime_ac[i + 4] - rx_last; + if (msta->airtime_ac[i] <= tx_last) + tx_time[i] = 0; + else + tx_time[i] = msta->airtime_ac[i] - tx_last; + + if (msta->airtime_ac[i + 4] <= rx_last) + rx_time[i] = 0; + else + rx_time[i] = msta->airtime_ac[i + 4] - rx_last; if ((tx_last | rx_last) & BIT(30)) clear = true; |