mac80211: change workqueue back to non-freezeable
authorBob Copeland <me@bobcopeland.com>
Sat, 24 Jan 2009 04:09:35 +0000 (23:09 -0500)
committerJohn W. Linville <linville@tuxdriver.com>
Thu, 29 Jan 2009 21:01:41 +0000 (16:01 -0500)
"mac80211: make workqueue freezable" made the mac80211
workqueue freezeable to prevent us from doing any work after the
driver went away.  This was fine before mac80211 had any suspend
support.

However, now we want to flush this workqueue in suspend().  Because
the thread for a freezeable workqueue is stopped before the device
class suspend() is called, flush_workqueue() will hang in the
suspend-to-disk case.

Converting it back to a non-freezeable queue will keep suspend from
hanging.  Moreover, since we flush the workqueue under RTNL and
userspace is stopped, there won't be any new work in the workqueue
until after resume.  Thus we still don't have to worry about pinging
the AP without hardware.

Signed-off-by: Bob Copeland <me@bobcopeland.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
net/mac80211/main.c

index 8d5c19e4a1bcb04ad734cbde093f1bb134d06b05..210dfe3cf6c3500ebb871b9e38961363b2c22baf 100644 (file)
@@ -858,7 +858,7 @@ int ieee80211_register_hw(struct ieee80211_hw *hw)
        mdev->set_multicast_list = ieee80211_master_set_multicast_list;
 
        local->hw.workqueue =
-               create_freezeable_workqueue(wiphy_name(local->hw.wiphy));
+               create_singlethread_workqueue(wiphy_name(local->hw.wiphy));
        if (!local->hw.workqueue) {
                result = -ENOMEM;
                goto fail_workqueue;