summaryrefslogtreecommitdiff
path: root/drivers
diff options
context:
space:
mode:
Diffstat (limited to 'drivers')
-rw-r--r--drivers/net/wireless/mediatek/mt76/channel.c9
-rw-r--r--drivers/net/wireless/mediatek/mt76/mt7996/main.c6
2 files changed, 6 insertions, 9 deletions
diff --git a/drivers/net/wireless/mediatek/mt76/channel.c b/drivers/net/wireless/mediatek/mt76/channel.c
index cf3fc09e5d5a..05eee64706ea 100644
--- a/drivers/net/wireless/mediatek/mt76/channel.c
+++ b/drivers/net/wireless/mediatek/mt76/channel.c
@@ -158,8 +158,6 @@ void mt76_unassign_vif_chanctx(struct ieee80211_hw *hw,
{
struct mt76_chanctx *ctx = (struct mt76_chanctx *)conf->drv_priv;
struct mt76_vif_link *mlink = (struct mt76_vif_link *)vif->drv_priv;
- struct mt76_vif_data *mvif = mlink->mvif;
- int link_id = link_conf->link_id;
struct mt76_phy *phy = ctx->phy;
struct mt76_dev *dev = phy->dev;
@@ -176,15 +174,8 @@ void mt76_unassign_vif_chanctx(struct ieee80211_hw *hw,
if (!mlink)
goto out;
- 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 (mlink != (struct mt76_vif_link *)vif->drv_priv)
- kfree_rcu(mlink, rcu_head);
-
out:
mutex_unlock(&dev->mutex);
}
diff --git a/drivers/net/wireless/mediatek/mt76/mt7996/main.c b/drivers/net/wireless/mediatek/mt76/mt7996/main.c
index 07a266f7670c..feee93340a6c 100644
--- a/drivers/net/wireless/mediatek/mt76/mt7996/main.c
+++ b/drivers/net/wireless/mediatek/mt76/mt7996/main.c
@@ -459,6 +459,12 @@ void mt7996_vif_link_remove(struct mt76_phy *mphy, struct ieee80211_vif *vif,
spin_unlock_bh(&dev->mt76.sta_poll_lock);
mt76_wcid_cleanup(&dev->mt76, &msta_link->wcid);
+
+ if (mlink != (struct mt76_vif_link *)vif->drv_priv &&
+ !mlink->wcid->offchannel) {
+ rcu_assign_pointer(mlink->mvif->link[link_id], NULL);
+ kfree_rcu(mlink, rcu_head);
+ }
}
static void mt7996_phy_set_rxfilter(struct mt7996_phy *phy)