Commit 53a5d72b authored by Felix Fietkau's avatar Felix Fietkau
Browse files

wifi: mt76: fix vif link allocation

Reuse the vif deflink for link_id = 0 in order to avoid confusion with
vif->bss_conf, which also gets a link id of 0.

Link: https://patch.msgid.link/20250704-mt7996-mlo-fixes-v1-1-356456c73f43@kernel.org


Signed-off-by: default avatarFelix Fietkau <nbd@nbd.name>
parent b3a431fe
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -173,13 +173,13 @@ void mt76_unassign_vif_chanctx(struct ieee80211_hw *hw,
	if (!mlink)
		goto out;

	if (link_conf != &vif->bss_conf)
	if (mlink != (struct mt76_vif_link *)vif->drv_priv)
		rcu_assign_pointer(mvif->link[link_id], NULL);

	dev->drv->vif_link_remove(phy, vif, link_conf, mlink);
	mlink->ctx = NULL;

	if (link_conf != &vif->bss_conf)
	if (mlink != (struct mt76_vif_link *)vif->drv_priv)
		kfree_rcu(mlink, rcu_head);

out:
+4 −1
Original line number Diff line number Diff line
@@ -1865,6 +1865,9 @@ mt76_vif_link(struct mt76_dev *dev, struct ieee80211_vif *vif, int link_id)
	struct mt76_vif_link *mlink = (struct mt76_vif_link *)vif->drv_priv;
	struct mt76_vif_data *mvif = mlink->mvif;

	if (!link_id)
		return mlink;

	return mt76_dereference(mvif->link[link_id], dev);
}

@@ -1875,7 +1878,7 @@ mt76_vif_conf_link(struct mt76_dev *dev, struct ieee80211_vif *vif,
	struct mt76_vif_link *mlink = (struct mt76_vif_link *)vif->drv_priv;
	struct mt76_vif_data *mvif = mlink->mvif;

	if (link_conf == &vif->bss_conf)
	if (link_conf == &vif->bss_conf || !link_conf->link_id)
		return mlink;

	return mt76_dereference(mvif->link[link_conf->link_id], dev);