wifi: mt76: fix rate reporting / throughput regression on mt7915 and newer
authorFelix Fietkau <nbd@nbd.name>
Tue, 27 Sep 2022 09:38:23 +0000 (11:38 +0200)
committerKalle Valo <kvalo@kernel.org>
Thu, 6 Oct 2022 05:19:04 +0000 (08:19 +0300)
mt7915 and newer need to report the rate_info that's stored in wcid->rate,
since they don't fill info->status.rates.

Cc: Jonas Jelonek <jelonek.jonas@gmail.com>
Reported-by: Mikhail Gavrilov <mikhail.v.gavrilov@gmail.com>
Link: https://lore.kernel.org/all/CABXGCsP0znm9pS-MiKtyxTXR7XiyFVqen0qzNpicGHDZKCzbwg@mail.gmail.com/
Fixes: 44fa75f207d8 ("mac80211: extend current rate control tx status API")
Signed-off-by: Felix Fietkau <nbd@nbd.name>
Tested-by: Mikhail Gavrilov <mikhail.v.gavrilov@gmail.com>
Signed-off-by: Kalle Valo <kvalo@kernel.org>
Link: https://lore.kernel.org/r/20220927093823.6007-1-nbd@nbd.name
drivers/net/wireless/mediatek/mt76/tx.c

index e67cc79..6c05485 100644 (file)
@@ -60,14 +60,20 @@ mt76_tx_status_unlock(struct mt76_dev *dev, struct sk_buff_head *list)
                        .skb = skb,
                        .info = IEEE80211_SKB_CB(skb),
                };
+               struct ieee80211_rate_status rs = {};
                struct mt76_tx_cb *cb = mt76_tx_skb_cb(skb);
                struct mt76_wcid *wcid;
 
                wcid = rcu_dereference(dev->wcid[cb->wcid]);
                if (wcid) {
                        status.sta = wcid_to_sta(wcid);
-                       status.rates = NULL;
-                       status.n_rates = 0;
+                       if (status.sta && (wcid->rate.flags || wcid->rate.legacy)) {
+                               rs.rate_idx = wcid->rate;
+                               status.rates = &rs;
+                               status.n_rates = 1;
+                       } else {
+                               status.n_rates = 0;
+                       }
                }
 
                hw = mt76_tx_status_get_hw(dev, skb);