diff mbox series

[v2,5/5] mt76: mt7603: enable/disable pre_tbtt_tasklet in mt7603_set_channel

Message ID ad6f286f30e8d9080320164a5551c2ee37bd6a95.1556525110.git.lorenzo@kernel.org (mailing list archive)
State Changes Requested
Delegated to: Felix Fietkau
Headers show
Series mt76: move common beacon code in mt76 module | expand

Commit Message

Lorenzo Bianconi April 29, 2019, 8:13 a.m. UTC
Disable pre_tbtt_tasklet tasklet before setting the operating channel.
Enable/disable beacon_timer in mt7603_set_channel

Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
---
 drivers/net/wireless/mediatek/mt76/mt7603/main.c | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

Comments

Felix Fietkau April 30, 2019, 9:34 a.m. UTC | #1
On 2019-04-29 10:13, Lorenzo Bianconi wrote:
> Disable pre_tbtt_tasklet tasklet before setting the operating channel.
> Enable/disable beacon_timer in mt7603_set_channel
> 
> Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
This doesn't seem right to me - I don't think we should send beacons
while off-channel.

- Felix
Lorenzo Bianconi April 30, 2019, 9:57 a.m. UTC | #2
>
> On 2019-04-29 10:13, Lorenzo Bianconi wrote:
> > Disable pre_tbtt_tasklet tasklet before setting the operating channel.
> > Enable/disable beacon_timer in mt7603_set_channel
> >
> > Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
> This doesn't seem right to me - I don't think we should send beacons
> while off-channel.

Yes, right. I will rework this patch and even patch 1/5

Regards,
Lorenzo

>
> - Felix
diff mbox series

Patch

diff --git a/drivers/net/wireless/mediatek/mt76/mt7603/main.c b/drivers/net/wireless/mediatek/mt76/mt7603/main.c
index be5d43050100..d879efc5a216 100644
--- a/drivers/net/wireless/mediatek/mt76/mt7603/main.c
+++ b/drivers/net/wireless/mediatek/mt76/mt7603/main.c
@@ -133,10 +133,12 @@  mt7603_set_channel(struct mt7603_dev *dev, struct cfg80211_chan_def *def)
 	bool failed = false;
 
 	cancel_delayed_work_sync(&dev->mt76.mac_work);
+	tasklet_disable(&dev->mt76.pre_tbtt_tasklet);
 
 	mutex_lock(&dev->mt76.mutex);
 	set_bit(MT76_RESET, &dev->mt76.state);
 
+	mt7603_beacon_set_timer(dev, -1, 0);
 	mt76_set_channel(&dev->mt76);
 	mt7603_mac_stop(dev);
 
@@ -186,8 +188,11 @@  mt7603_set_channel(struct mt7603_dev *dev, struct cfg80211_chan_def *def)
 	mt7603_init_edcca(dev);
 
 out:
+	mt7603_beacon_set_timer(dev, -1, dev->mt76.beacon_int);
 	mutex_unlock(&dev->mt76.mutex);
 
+	tasklet_enable(&dev->mt76.pre_tbtt_tasklet);
+
 	if (failed)
 		mt7603_mac_work(&dev->mt76.mac_work.work);
 
@@ -535,7 +540,6 @@  mt7603_sw_scan(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
 	struct mt7603_dev *dev = hw->priv;
 
 	set_bit(MT76_SCANNING, &dev->mt76.state);
-	mt7603_beacon_set_timer(dev, -1, 0);
 }
 
 static void
@@ -544,7 +548,6 @@  mt7603_sw_scan_complete(struct ieee80211_hw *hw, struct ieee80211_vif *vif)
 	struct mt7603_dev *dev = hw->priv;
 
 	clear_bit(MT76_SCANNING, &dev->mt76.state);
-	mt7603_beacon_set_timer(dev, -1, dev->mt76.beacon_int);
 }
 
 static void