mt76x0: fix remove_interface
authorStanislaw Gruszka <sgruszka@redhat.com>
Mon, 3 Sep 2018 10:26:21 +0000 (12:26 +0200)
committerKalle Valo <kvalo@codeaurora.org>
Mon, 17 Sep 2018 14:10:25 +0000 (17:10 +0300)
We wrongly use wcid_mask instead of vif_mask. This creates problems
when the interface is removed more than 8 times, for example with iw:

iw dev <devname> interface add <name> type <type>
iw dev <name> del

This caused 'ifconfig up' to fail with error:

SIOCSIFFLAGS: No space left on device

Fixes: 95e444098a7b ("mt76x0: main file")
Reported-and-tested-by: Sid Hayn <sidhayn@gmail.com>
Signed-off-by: Stanislaw Gruszka <sgruszka@redhat.com>
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
drivers/net/wireless/mediatek/mt76/mt76x0/main.c

index cf6ffb1..22bc9d3 100644 (file)
@@ -77,9 +77,8 @@ static void mt76x0_remove_interface(struct ieee80211_hw *hw,
 {
        struct mt76x0_dev *dev = hw->priv;
        struct mt76_vif *mvif = (struct mt76_vif *) vif->drv_priv;
-       unsigned int wcid = mvif->group_wcid.idx;
 
-       dev->wcid_mask[wcid / BITS_PER_LONG] &= ~BIT(wcid % BITS_PER_LONG);
+       dev->vif_mask &= ~BIT(mvif->idx);
 }
 
 static int mt76x0_config(struct ieee80211_hw *hw, u32 changed)