Commit 5ed54896 authored by Quan Zhou's avatar Quan Zhou Committed by Felix Fietkau
Browse files

wifi: mt76: mt7921: fix a potential scan no APs



In multi-channel scenarios, the granted channel must be aborted before
station remove. Otherwise, the firmware will be put into a wrong state,
resulting in have chance to make subsequence scan no APs.
With this patch, the granted channel will be always aborted before
station remove.

Signed-off-by: default avatarQuan Zhou <quan.zhou@mediatek.com>
Reviewed-by: default avatarSean Wang <sean.wang@mediatek.com>
Tested-by: default avatarDavid Ruth <druth@chromium.org>
Reviewed-by: default avatarDavid Ruth <druth@chromium.org>
Link: https://patch.msgid.link/1ac1ae779db86d4012199a24ea2ca74050ed4af6.1721300411.git.quan.zhou@mediatek.com


Signed-off-by: default avatarFelix Fietkau <nbd@nbd.name>
parent 512e26db
Loading
Loading
Loading
Loading
+4 −3
Original line number Diff line number Diff line
@@ -360,7 +360,7 @@ void mt7921_roc_abort_sync(struct mt792x_dev *dev)
	del_timer_sync(&phy->roc_timer);
	cancel_work_sync(&phy->roc_work);
	if (test_and_clear_bit(MT76_STATE_ROC, &phy->mt76->state))
		ieee80211_iterate_active_interfaces(mt76_hw(dev),
		ieee80211_iterate_interfaces(mt76_hw(dev),
					     IEEE80211_IFACE_ITER_RESUME_ALL,
					     mt7921_roc_iter, (void *)phy);
}
@@ -858,6 +858,7 @@ void mt7921_mac_sta_remove(struct mt76_dev *mdev, struct ieee80211_vif *vif,
	struct mt792x_dev *dev = container_of(mdev, struct mt792x_dev, mt76);
	struct mt792x_sta *msta = (struct mt792x_sta *)sta->drv_priv;

	mt7921_roc_abort_sync(dev);
	mt76_connac_free_pending_tx_skbs(&dev->pm, &msta->deflink.wcid);
	mt76_connac_pm_wake(&dev->mphy, &dev->pm);