Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e1957dba authored by Johannes Berg's avatar Johannes Berg
Browse files

cfg80211: process events caused by suspend before suspending



When suspending without WoWLAN, cfg80211 will ask drivers to
disconnect. Even when the driver does this synchronously, and
immediately returns with a notification, cfg80211 schedules
the handling thereof to a workqueue, and may then call back
into the driver when the driver was already suspended/ing.

Fix this by processing all events caused by cfg80211_leave_all()
directly after that function returns. The driver still needs to
do the right thing here and wait for the firmware response, but
that is - at least - true for mwifiex where this occurred.

Reported-by: default avatarAmitkumar Karwar <akarwar@marvell.com>
Tested-by: default avatarAmitkumar Karwar <akarwar@marvell.com>
Signed-off-by: default avatarJohannes Berg <johannes.berg@intel.com>
parent b4f0fd4b
Loading
Loading
Loading
Loading
+4 −1
Original line number Diff line number Diff line
@@ -104,13 +104,16 @@ static int wiphy_suspend(struct device *dev)

	rtnl_lock();
	if (rdev->wiphy.registered) {
		if (!rdev->wiphy.wowlan_config)
		if (!rdev->wiphy.wowlan_config) {
			cfg80211_leave_all(rdev);
			cfg80211_process_rdev_events(rdev);
		}
		if (rdev->ops->suspend)
			ret = rdev_suspend(rdev, rdev->wiphy.wowlan_config);
		if (ret == 1) {
			/* Driver refuse to configure wowlan */
			cfg80211_leave_all(rdev);
			cfg80211_process_rdev_events(rdev);
			ret = rdev_suspend(rdev, NULL);
		}
	}