[PATCH] wifi: mt76: mt7921: fix a potential scan no APs

Sean Wang sean.wang at kernel.org
Tue Sep 10 14:06:11 PDT 2024


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 at mediatek.com>

         Sean



On Thu, Jul 18, 2024 at 6:51 AM Quan Zhou <quan.zhou at 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 at 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
>
>



More information about the Linux-mediatek mailing list