Hi, While working on an issue that marvell module stops connecting to AP, bisect reveals that the issue starts to happen from commit 0711d638, which uses wdev->ssid_len instead of wdev->current_bss to determine if driver's .disconnect() should be called. It happens because mwifiex_cfg80211_connect() returns -EALREADY when it finds wdev->current_bss is valid: if (priv->wdev.current_bss) { [PRINT LOG] return -EALREADY; } This would make cfg80211_connect() set wdev->ssid_len to 0, and thus mwifiex_cfg80211_disconnect() won't be called by cfg80211_disconnect(). The easiest way to overcome this is diff --git a/net/wireless/sme.c b/net/wireless/sme.c index 0a49b88..104edb4 100644 --- a/net/wireless/sme.c +++ b/net/wireless/sme.c @@ -1142,7 +1142,7 @@ int cfg80211_disconnect(struct cfg80211_registered_device *rdev, err = cfg80211_sme_disconnect(wdev, reason); else if (!rdev->ops->disconnect) cfg80211_mlme_down(rdev, dev); - else if (wdev->ssid_len) + else if (wdev->ssid_len || wdev->current_bss) err = rdev_disconnect(rdev, dev, reason); return err; but I'm not sure if this is a proper fix for this issue. Thanks, Jesse