]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
wifi: mt76: mt7996: Reset mtxq->idx if primary link is removed in mt7996_vif_link_rem...
authorLorenzo Bianconi <lorenzo@kernel.org>
Fri, 5 Dec 2025 10:24:37 +0000 (11:24 +0100)
committerFelix Fietkau <nbd@nbd.name>
Mon, 23 Mar 2026 09:21:24 +0000 (09:21 +0000)
Reset WCID index in mt76_txq struct if primary link is removed in
mt7996_vif_link_remove routine.

Fixes: a3316d2fc669f ("wifi: mt76: mt7996: set vif default link_id adding/removing vif links")
Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
Link: https://patch.msgid.link/20251205-mt76-txq-wicd-fix-v2-2-f19ba48af7c1@kernel.org
Signed-off-by: Felix Fietkau <nbd@nbd.name>
drivers/net/wireless/mediatek/mt76/mt7996/main.c

index d646d1ef8f82b473f7e9c44d65f84afb52b7c34a..8a610e0e9bae7301af4f421f83d2916ada5ebb1d 100644 (file)
@@ -402,17 +402,28 @@ void mt7996_vif_link_remove(struct mt76_phy *mphy, struct ieee80211_vif *vif,
 
        rcu_assign_pointer(dev->mt76.wcid[idx], NULL);
 
-       if (!mlink->wcid->offchannel &&
+       if (vif->txq && !mlink->wcid->offchannel &&
            mvif->mt76.deflink_id == link_conf->link_id) {
                struct ieee80211_bss_conf *iter;
+               struct mt76_txq *mtxq;
                unsigned int link_id;
 
                mvif->mt76.deflink_id = IEEE80211_LINK_UNSPECIFIED;
+               mtxq = (struct mt76_txq *)vif->txq->drv_priv;
+               /* Primary link will be removed, look for a new one */
                for_each_vif_active_link(vif, iter, link_id) {
-                       if (link_id != IEEE80211_LINK_UNSPECIFIED) {
-                               mvif->mt76.deflink_id = link_id;
-                               break;
-                       }
+                       struct mt7996_vif_link *link;
+
+                       if (link_id == link_conf->link_id)
+                               continue;
+
+                       link = mt7996_vif_link(dev, vif, link_id);
+                       if (!link)
+                               continue;
+
+                       mtxq->wcid = link->msta_link.wcid.idx;
+                       mvif->mt76.deflink_id = link_id;
+                       break;
                }
        }