Skip to content

Commit

Permalink
mac80211: avoid reconfig if no interfaces are up
Browse files Browse the repository at this point in the history
If there are no interfaces up, there is no reason
to continue the reconfig flow.

The current code might end up calling driver
callbacks (e.g. resume(), reconfig_complete())
while the driver is already stopped.

Signed-off-by: Eliad Peller <eliadx.peller@intel.com>
Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
  • Loading branch information
Eliad Peller authored and Johannes Berg committed Dec 17, 2014
1 parent 1a952c9 commit 0f8b824
Showing 1 changed file with 6 additions and 5 deletions.
11 changes: 6 additions & 5 deletions net/mac80211/util.c
Original file line number Diff line number Diff line change
Expand Up @@ -1735,6 +1735,10 @@ int ieee80211_reconfig(struct ieee80211_local *local)
struct cfg80211_sched_scan_request *sched_scan_req;
bool sched_scan_stopped = false;

/* nothing to do if HW shouldn't run */
if (!local->open_count)
goto wake_up;

#ifdef CONFIG_PM
if (local->suspended)
local->resuming = true;
Expand All @@ -1756,9 +1760,6 @@ int ieee80211_reconfig(struct ieee80211_local *local)
reconfig_due_to_wowlan = true;
}
#endif
/* everything else happens only if HW was up & running */
if (!local->open_count)
goto wake_up;

/*
* Upon resume hardware can sometimes be goofy due to
Expand Down Expand Up @@ -2042,7 +2043,7 @@ int ieee80211_reconfig(struct ieee80211_local *local)
* If this is for hw restart things are still running.
* We may want to change that later, however.
*/
if (!local->suspended || reconfig_due_to_wowlan)
if (local->open_count && (!local->suspended || reconfig_due_to_wowlan))
drv_reconfig_complete(local, IEEE80211_RECONFIG_TYPE_RESTART);

if (!local->suspended)
Expand All @@ -2054,7 +2055,7 @@ int ieee80211_reconfig(struct ieee80211_local *local)
mb();
local->resuming = false;

if (!reconfig_due_to_wowlan)
if (local->open_count && !reconfig_due_to_wowlan)
drv_reconfig_complete(local, IEEE80211_RECONFIG_TYPE_SUSPEND);

list_for_each_entry(sdata, &local->interfaces, list) {
Expand Down

0 comments on commit 0f8b824

Please sign in to comment.