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