mac80211: start queues if driver rejected wowlan
authorJohannes Berg <johannes.berg@intel.com>
Sun, 1 Mar 2015 07:10:08 +0000 (09:10 +0200)
committerJohannes Berg <johannes.berg@intel.com>
Wed, 4 Mar 2015 09:34:09 +0000 (10:34 +0100)
If the driver rejects WoWLAN, restart the queues before returning
to cfg80211. cfg80211 will return to mac80211, but not before it
disconnects all interfaces. If we don't start the queues, any of
the packets needed for disconnecting won't be transmitted, which
is strange. Fix that.

Signed-off-by: Johannes Berg <johannes.berg@intel.com>
net/mac80211/pm.c

index 46ffe3ad7c466c693cdade2cd3a551eb1eb6278b..ac6ad6238e3ad73421996bf375523df1eda164aa 100644 (file)
@@ -97,6 +97,13 @@ int __ieee80211_suspend(struct ieee80211_hw *hw, struct cfg80211_wowlan *wowlan)
                        return err;
                } else if (err > 0) {
                        WARN_ON(err != 1);
+                       /* cfg80211 will call back into mac80211 to disconnect
+                        * all interfaces, allow that to proceed properly
+                        */
+                       ieee80211_wake_queues_by_reason(hw,
+                                       IEEE80211_MAX_QUEUE_MAP,
+                                       IEEE80211_QUEUE_STOP_REASON_SUSPEND,
+                                       false);
                        return err;
                } else {
                        goto suspend;