mt76: mt7915: add sta_rec with EXTRA_INFO_NEW for the first time only
authorShayne Chen <shayne.chen@mediatek.com>
Wed, 22 Jun 2022 01:24:49 +0000 (09:24 +0800)
committerFelix Fietkau <nbd@nbd.name>
Mon, 11 Jul 2022 11:40:02 +0000 (13:40 +0200)
Set EXTRA_INFO_NEW for the first time only to prevent adding the same
starec entry, otherwise the entry might be removed in fw.

Reviewed-by: Ryder Lee <ryder.lee@mediatek.com>
Signed-off-by: Peter Chiu <chui-hao.chiu@mediatek.com>
Signed-off-by: Shayne Chen <shayne.chen@mediatek.com>
Signed-off-by: Felix Fietkau <nbd@nbd.name>
drivers/net/wireless/mediatek/mt76/mt7915/main.c
drivers/net/wireless/mediatek/mt76/mt7915/mcu.c

index 8a114da..b1a5aab 100644 (file)
@@ -235,7 +235,6 @@ static int mt7915_add_interface(struct ieee80211_hw *hw,
        mt7915_mac_wtbl_update(dev, idx,
                               MT_WTBL_UPDATE_ADM_COUNT_CLEAR);
 
-       rcu_assign_pointer(dev->mt76.wcid[idx], &mvif->sta.wcid);
        if (vif->txq) {
                mtxq = (struct mt76_txq *)vif->txq->drv_priv;
                mtxq->wcid = idx;
@@ -251,6 +250,7 @@ static int mt7915_add_interface(struct ieee80211_hw *hw,
 
        mt7915_mcu_add_bss_info(phy, vif, true);
        mt7915_mcu_add_sta(dev, vif, NULL, true);
+       rcu_assign_pointer(dev->mt76.wcid[idx], &mvif->sta.wcid);
 
 out:
        mutex_unlock(&dev->mt76.mutex);
index 6b0b9a8..3902479 100644 (file)
@@ -1620,7 +1620,8 @@ int mt7915_mcu_add_sta(struct mt7915_dev *dev, struct ieee80211_vif *vif,
                return PTR_ERR(skb);
 
        /* starec basic */
-       mt76_connac_mcu_sta_basic_tlv(skb, vif, sta, enable, true);
+       mt76_connac_mcu_sta_basic_tlv(skb, vif, sta, enable,
+                       !rcu_access_pointer(dev->mt76.wcid[msta->wcid.idx]));
        if (!enable)
                goto out;