Commit 4911e4cb authored by Ming Yen Hsieh's avatar Ming Yen Hsieh Committed by Felix Fietkau
Browse files

wifi: mt76: mt7925: Fix incorrect WCID assignment for MLO



For MLO, each link must have a corresponding WCID.

Fixes: 86c051f2 ("wifi: mt76: mt7925: enabling MLO when the firmware supports it")
Signed-off-by: default avatarMing Yen Hsieh <mingyen.hsieh@mediatek.com>
Signed-off-by: default avatarSean Wang <sean.wang@mediatek.com>
Link: https://patch.msgid.link/20241211011926.5002-3-sean.wang@kernel.org


Signed-off-by: default avatarFelix Fietkau <nbd@nbd.name>
parent 4d542744
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -49,7 +49,7 @@ static void mt7925_mac_sta_poll(struct mt792x_dev *dev)
			break;
		mlink = list_first_entry(&sta_poll_list,
					 struct mt792x_link_sta, wcid.poll_list);
		msta = container_of(mlink, struct mt792x_sta, deflink);
		msta = mlink->sta;
		spin_lock_bh(&dev->mt76.sta_poll_lock);
		list_del_init(&mlink->wcid.poll_list);
		spin_unlock_bh(&dev->mt76.sta_poll_lock);
+10 −9
Original line number Diff line number Diff line
@@ -837,6 +837,7 @@ static int mt7925_mac_link_sta_add(struct mt76_dev *mdev,
	u8 link_id = link_sta->link_id;
	struct mt792x_link_sta *mlink;
	struct mt792x_sta *msta;
	struct mt76_wcid *wcid;
	int ret, idx;

	msta = (struct mt792x_sta *)link_sta->sta->drv_priv;
@@ -855,6 +856,15 @@ static int mt7925_mac_link_sta_add(struct mt76_dev *mdev,
	mlink->last_txs = jiffies;
	mlink->wcid.link_id = link_sta->link_id;
	mlink->wcid.link_valid = !!link_sta->sta->valid_links;
	mlink->sta = msta;

	wcid = &mlink->wcid;
	ewma_signal_init(&wcid->rssi);
	rcu_assign_pointer(dev->mt76.wcid[wcid->idx], wcid);
	mt76_wcid_init(wcid);
	ewma_avg_signal_init(&mlink->avg_ack_signal);
	memset(mlink->airtime_ac, 0,
	       sizeof(msta->deflink.airtime_ac));

	ret = mt76_connac_pm_wake(&dev->mphy, &dev->pm);
	if (ret)
@@ -904,7 +914,6 @@ mt7925_mac_sta_add_links(struct mt792x_dev *dev, struct ieee80211_vif *vif,
			 struct ieee80211_sta *sta, unsigned long new_links)
{
	struct mt792x_sta *msta = (struct mt792x_sta *)sta->drv_priv;
	struct mt76_wcid *wcid;
	unsigned int link_id;
	int err = 0;

@@ -921,14 +930,6 @@ mt7925_mac_sta_add_links(struct mt792x_dev *dev, struct ieee80211_vif *vif,
				err = -ENOMEM;
				break;
			}

			wcid = &mlink->wcid;
			ewma_signal_init(&wcid->rssi);
			rcu_assign_pointer(dev->mt76.wcid[wcid->idx], wcid);
			mt76_wcid_init(wcid);
			ewma_avg_signal_init(&mlink->avg_ack_signal);
			memset(mlink->airtime_ac, 0,
			       sizeof(msta->deflink.airtime_ac));
		}

		msta->valid_links |= BIT(link_id);