diff mbox series

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

Message ID 1ac1ae779db86d4012199a24ea2ca74050ed4af6.1721300411.git.quan.zhou@mediatek.com
State New
Headers show
Series wifi: mt76: mt7921: fix a potential scan no APs | expand

Commit Message

Quan Zhou July 18, 2024, 1:49 p.m. UTC
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: Quan Zhou <quan.zhou@mediatek.com>
---
 drivers/net/wireless/mediatek/mt76/mt7921/main.c | 7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)

Comments

David Ruth Sept. 10, 2024, 3:57 p.m. UTC | #1
Tested-by: David Ruth <druth@chromium.org>
Reviewed-by: David Ruth <druth@chromium.org>
Sean Wang Sept. 10, 2024, 9:06 p.m. UTC | #2
Hi nbd,

It seems the patch hasn't been merged into the current tree yet. The
patch is beneficial for improving scan stability since we’ve applied
ROC. If there's any opportunity for further improvement from your
perspective, please let us know.

    Reviewed-by: Sean Wang <sean.wang@mediatek.com>

         Sean



On Thu, Jul 18, 2024 at 6:51 AM Quan Zhou <quan.zhou@mediatek.com> wrote:
>
> 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: Quan Zhou <quan.zhou@mediatek.com>
> ---
>  drivers/net/wireless/mediatek/mt76/mt7921/main.c | 7 ++++---
>  1 file changed, 4 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/net/wireless/mediatek/mt76/mt7921/main.c b/drivers/net/wireless/mediatek/mt76/mt7921/main.c
> index 2e6268cb06c0..84d6881eb4c9 100644
> --- a/drivers/net/wireless/mediatek/mt76/mt7921/main.c
> +++ b/drivers/net/wireless/mediatek/mt76/mt7921/main.c
> @@ -359,9 +359,9 @@ 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_IFACE_ITER_RESUME_ALL,
> -                                                   mt7921_roc_iter, (void *)phy);
> +               ieee80211_iterate_interfaces(mt76_hw(dev),
> +                                            IEEE80211_IFACE_ITER_RESUME_ALL,
> +                                            mt7921_roc_iter, (void *)phy);
>  }
>  EXPORT_SYMBOL_GPL(mt7921_roc_abort_sync);
>
> @@ -861,6 +861,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);
>
> --
> 2.18.0
>
>
diff mbox series

Patch

diff --git a/drivers/net/wireless/mediatek/mt76/mt7921/main.c b/drivers/net/wireless/mediatek/mt76/mt7921/main.c
index 2e6268cb06c0..84d6881eb4c9 100644
--- a/drivers/net/wireless/mediatek/mt76/mt7921/main.c
+++ b/drivers/net/wireless/mediatek/mt76/mt7921/main.c
@@ -359,9 +359,9 @@  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_IFACE_ITER_RESUME_ALL,
-						    mt7921_roc_iter, (void *)phy);
+		ieee80211_iterate_interfaces(mt76_hw(dev),
+					     IEEE80211_IFACE_ITER_RESUME_ALL,
+					     mt7921_roc_iter, (void *)phy);
 }
 EXPORT_SYMBOL_GPL(mt7921_roc_abort_sync);
 
@@ -861,6 +861,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);