diff mbox series

[6.0] wifi: mt76: fix rate reporting / throughput regression on mt7915 and newer

Message ID 20220927093823.6007-1-nbd@nbd.name (mailing list archive)
State Accepted
Commit 6b430f72b2bc14fd0ac922dda92eaa51c82e15a4
Delegated to: Kalle Valo
Headers show
Series [6.0] wifi: mt76: fix rate reporting / throughput regression on mt7915 and newer | expand

Commit Message

Felix Fietkau Sept. 27, 2022, 9:38 a.m. UTC
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>
---
 drivers/net/wireless/mediatek/mt76/tx.c | 10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)

Comments

Mikhail Gavrilov Sept. 27, 2022, noon UTC | #1
On Tue, Sep 27, 2022 at 2:38 PM Felix Fietkau <nbd@nbd.name> wrote:
>
> 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>
> ---
>  drivers/net/wireless/mediatek/mt76/tx.c | 10 ++++++++--
>  1 file changed, 8 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/net/wireless/mediatek/mt76/tx.c b/drivers/net/wireless/mediatek/mt76/tx.c
> index e67cc7909bce..6c054850363f 100644
> --- a/drivers/net/wireless/mediatek/mt76/tx.c
> +++ b/drivers/net/wireless/mediatek/mt76/tx.c
> @@ -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);
> --
> 2.36.1
>


Thanks, the issue is solved.
Tested-by: Mikhail Gavrilov <mikhail.v.gavrilov@gmail.com>
Kalle Valo Oct. 6, 2022, 5:20 a.m. UTC | #2
Felix Fietkau <nbd@nbd.name> wrote:

> 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>

Patch applied to wireless.git, thanks.

6b430f72b2bc wifi: mt76: fix rate reporting / throughput regression on mt7915 and newer
diff mbox series

Patch

diff --git a/drivers/net/wireless/mediatek/mt76/tx.c b/drivers/net/wireless/mediatek/mt76/tx.c
index e67cc7909bce..6c054850363f 100644
--- a/drivers/net/wireless/mediatek/mt76/tx.c
+++ b/drivers/net/wireless/mediatek/mt76/tx.c
@@ -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);