Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 168958
b: refs/heads/master
c: ceb99fe
h: refs/heads/master
v: v3
  • Loading branch information
Johannes Berg authored and John W. Linville committed Nov 19, 2009
1 parent 60f6866 commit 54d77ed
Show file tree
Hide file tree
Showing 3 changed files with 18 additions and 11 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 8ade00824607fcfa8842572012d4393b40a74a94
refs/heads/master: ceb99fe071eb688255798d89be337affffa2b103
8 changes: 8 additions & 0 deletions trunk/net/mac80211/ieee80211_i.h
Original file line number Diff line number Diff line change
Expand Up @@ -661,6 +661,14 @@ struct ieee80211_local {
*/
bool suspended;

/*
* Resuming is true while suspended, but when we're reprogramming the
* hardware -- at that time it's allowed to use ieee80211_queue_work()
* again even though some other parts of the stack are still suspended
* and we still drop received frames to avoid waking the stack.
*/
bool resuming;

/*
* quiescing is true during the suspend process _only_ to
* ease timer cancelling etc.
Expand Down
19 changes: 9 additions & 10 deletions trunk/net/mac80211/util.c
Original file line number Diff line number Diff line change
Expand Up @@ -520,9 +520,9 @@ EXPORT_SYMBOL_GPL(ieee80211_iterate_active_interfaces_atomic);
*/
static bool ieee80211_can_queue_work(struct ieee80211_local *local)
{
if (WARN(local->suspended, "queueing ieee80211 work while "
"going to suspend\n"))
return false;
if (WARN(local->suspended && !local->resuming,
"queueing ieee80211 work while going to suspend\n"))
return false;

return true;
}
Expand Down Expand Up @@ -1025,13 +1025,9 @@ int ieee80211_reconfig(struct ieee80211_local *local)
struct sta_info *sta;
unsigned long flags;
int res;
bool from_suspend = local->suspended;

/*
* We're going to start the hardware, at that point
* we are no longer suspended and can RX frames.
*/
local->suspended = false;
if (local->suspended)
local->resuming = true;

/* restart hardware */
if (local->open_count) {
Expand Down Expand Up @@ -1129,11 +1125,14 @@ 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 (!from_suspend)
if (!local->suspended)
return 0;

#ifdef CONFIG_PM
/* first set suspended false, then resuming */
local->suspended = false;
mb();
local->resuming = false;

list_for_each_entry(sdata, &local->interfaces, list) {
switch(sdata->vif.type) {
Expand Down

0 comments on commit 54d77ed

Please sign in to comment.