]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
wifi: mt76: mt7996: Add all active links to poll list in mt7996_mac_tx_free()
authorLorenzo Bianconi <lorenzo@kernel.org>
Thu, 4 Sep 2025 07:56:40 +0000 (09:56 +0200)
committerFelix Fietkau <nbd@nbd.name>
Mon, 15 Sep 2025 07:47:40 +0000 (09:47 +0200)
Add all valid links to poll list for Airtime Fairness/AQL accounting when
tx-free event occurs.

Co-developed-by: Bo Jiao <Bo.Jiao@mediatek.com>
Signed-off-by: Bo Jiao <Bo.Jiao@mediatek.com>
Co-developed-by: Shayne Chen <shayne.chen@mediatek.com>
Signed-off-by: Shayne Chen <shayne.chen@mediatek.com>
Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
Link: https://patch.msgid.link/20250904-mt7996-mlo-more-fixes-v1-2-89d8fed67f20@kernel.org
Signed-off-by: Felix Fietkau <nbd@nbd.name>
drivers/net/wireless/mediatek/mt76/mt7996/mac.c

index f9514444f93d71e00327343fcfe016dd88bee4ec..45d621f5fe2210b30997a9001334627bd7d6e8bb 100644 (file)
@@ -1253,6 +1253,9 @@ mt7996_mac_tx_free(struct mt7996_dev *dev, void *data, int len)
                info = le32_to_cpu(*cur_info);
                if (info & MT_TXFREE_INFO_PAIR) {
                        struct ieee80211_sta *sta;
+                       unsigned long valid_links;
+                       struct mt7996_sta *msta;
+                       unsigned int id;
                        u16 idx;
 
                        idx = FIELD_GET(MT_TXFREE_INFO_WLAN_ID, info);
@@ -1267,7 +1270,21 @@ mt7996_mac_tx_free(struct mt7996_dev *dev, void *data, int len)
                        if (!link_sta)
                                goto next;
 
-                       mt76_wcid_add_poll(&dev->mt76, wcid);
+                       msta = (struct mt7996_sta *)sta->drv_priv;
+                       valid_links = sta->valid_links ?: BIT(0);
+
+                       /* For MLD STA, add all link's wcid to sta_poll_list */
+                       for_each_set_bit(id, &valid_links,
+                                        IEEE80211_MLD_MAX_NUM_LINKS) {
+                               struct mt7996_sta_link *msta_link;
+
+                               msta_link = rcu_dereference(msta->link[id]);
+                               if (!msta_link)
+                                       continue;
+
+                               mt76_wcid_add_poll(&dev->mt76,
+                                                  &msta_link->wcid);
+                       }
 next:
                        /* ver 7 has a new DW with pair = 1, skip it */
                        if (ver == 7 && ((void *)(cur_info + 1) < end) &&