OSDN Git Service

mt76: mt7915: run mt7915_configure_filter holding mt76 mutex
authorLorenzo Bianconi <lorenzo@kernel.org>
Sat, 12 Dec 2020 17:24:31 +0000 (18:24 +0100)
committerFelix Fietkau <nbd@nbd.name>
Tue, 26 Jan 2021 19:07:47 +0000 (20:07 +0100)
In order to avoid races, run mt7915_configure_filter routine holding
mt76 mutex

Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
Signed-off-by: Felix Fietkau <nbd@nbd.name>
drivers/net/wireless/mediatek/mt76/mt7915/main.c

index 0c82aa2..ce348c5 100644 (file)
@@ -427,7 +427,6 @@ static void mt7915_configure_filter(struct ieee80211_hw *hw,
        struct mt7915_dev *dev = mt7915_hw_dev(hw);
        struct mt7915_phy *phy = mt7915_hw_phy(hw);
        bool band = phy != &dev->phy;
-
        u32 ctl_flags = MT_WF_RFCR1_DROP_ACK |
                        MT_WF_RFCR1_DROP_BF_POLL |
                        MT_WF_RFCR1_DROP_BA |
@@ -441,6 +440,8 @@ static void mt7915_configure_filter(struct ieee80211_hw *hw,
                phy->rxfilter |= !(flags & FIF_##_flag) * (_hw);        \
        } while (0)
 
+       mutex_lock(&dev->mt76.mutex);
+
        phy->rxfilter &= ~(MT_WF_RFCR_DROP_OTHER_BSS |
                           MT_WF_RFCR_DROP_OTHER_BEACON |
                           MT_WF_RFCR_DROP_FRAME_REPORT |
@@ -471,6 +472,8 @@ static void mt7915_configure_filter(struct ieee80211_hw *hw,
                mt76_clear(dev, MT_WF_RFCR1(band), ctl_flags);
        else
                mt76_set(dev, MT_WF_RFCR1(band), ctl_flags);
+
+       mutex_unlock(&dev->mt76.mutex);
 }
 
 static void mt7915_bss_info_changed(struct ieee80211_hw *hw,