aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/b43legacy
diff options
context:
space:
mode:
authorLuis R. Rodriguez <lrodriguez@atheros.com>2009-07-29 20:08:07 -0400
committerJohn W. Linville <linville@tuxdriver.com>2009-08-04 16:44:14 -0400
commit42935ecaf4e784d0815afa9a7e5fe7e141157ca3 (patch)
treedc0a0dcfff761e98d8a2a23a7edc8f9182c2774c /drivers/net/wireless/b43legacy
parent64344d78228f6346a0462ba2d5fc03494aef4e6b (diff)
mac80211: redefine usage of the mac80211 workqueue
The mac80211 workqueue exists to enable mac80211 and drivers to queue their own work on a single threaded workqueue. mac80211 takes care to flush the workqueue during suspend but we never really had requirements on drivers for how they should use the workqueue in consideration for suspend. We extend mac80211 to document how the mac80211 workqueue should be used, how it should not be used and finally move raw access to the workqueue to mac80211 only. Drivers and mac80211 use helpers to queue work onto the mac80211 workqueue: * ieee80211_queue_work() * ieee80211_queue_delayed_work() These helpers will now warn if mac80211 already completed its suspend cycle and someone is trying to queue work. mac80211 flushes the mac80211 workqueue prior to suspend a few times, but we haven't taken the care to ensure drivers won't add more work after suspend. To help with this we add a warning when someone tries to add work and mac80211 already completed the suspend cycle. Drivers should ensure they cancel any work or delayed work in the mac80211 stop() callback. Signed-off-by: Luis R. Rodriguez <lrodriguez@atheros.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers/net/wireless/b43legacy')
-rw-r--r--drivers/net/wireless/b43legacy/main.c8
1 files changed, 4 insertions, 4 deletions
diff --git a/drivers/net/wireless/b43legacy/main.c b/drivers/net/wireless/b43legacy/main.c
index c4973c1942b..b1435594921 100644
--- a/drivers/net/wireless/b43legacy/main.c
+++ b/drivers/net/wireless/b43legacy/main.c
@@ -1252,7 +1252,7 @@ static void b43legacy_update_templates(struct b43legacy_wl *wl)
1252 wl->current_beacon = beacon; 1252 wl->current_beacon = beacon;
1253 wl->beacon0_uploaded = 0; 1253 wl->beacon0_uploaded = 0;
1254 wl->beacon1_uploaded = 0; 1254 wl->beacon1_uploaded = 0;
1255 queue_work(wl->hw->workqueue, &wl->beacon_update_trigger); 1255 ieee80211_queue_work(wl->hw, &wl->beacon_update_trigger);
1256} 1256}
1257 1257
1258static void b43legacy_set_beacon_int(struct b43legacy_wldev *dev, 1258static void b43legacy_set_beacon_int(struct b43legacy_wldev *dev,
@@ -2300,7 +2300,7 @@ out_requeue:
2300 delay = msecs_to_jiffies(50); 2300 delay = msecs_to_jiffies(50);
2301 else 2301 else
2302 delay = round_jiffies_relative(HZ * 15); 2302 delay = round_jiffies_relative(HZ * 15);
2303 queue_delayed_work(wl->hw->workqueue, &dev->periodic_work, delay); 2303 ieee80211_queue_delayed_work(wl->hw, &dev->periodic_work, delay);
2304out: 2304out:
2305 mutex_unlock(&wl->mutex); 2305 mutex_unlock(&wl->mutex);
2306} 2306}
@@ -2311,7 +2311,7 @@ static void b43legacy_periodic_tasks_setup(struct b43legacy_wldev *dev)
2311 2311
2312 dev->periodic_state = 0; 2312 dev->periodic_state = 0;
2313 INIT_DELAYED_WORK(work, b43legacy_periodic_work_handler); 2313 INIT_DELAYED_WORK(work, b43legacy_periodic_work_handler);
2314 queue_delayed_work(dev->wl->hw->workqueue, work, 0); 2314 ieee80211_queue_delayed_work(dev->wl->hw, work, 0);
2315} 2315}
2316 2316
2317/* Validate access to the chip (SHM) */ 2317/* Validate access to the chip (SHM) */
@@ -3885,7 +3885,7 @@ void b43legacy_controller_restart(struct b43legacy_wldev *dev,
3885 if (b43legacy_status(dev) < B43legacy_STAT_INITIALIZED) 3885 if (b43legacy_status(dev) < B43legacy_STAT_INITIALIZED)
3886 return; 3886 return;
3887 b43legacyinfo(dev->wl, "Controller RESET (%s) ...\n", reason); 3887 b43legacyinfo(dev->wl, "Controller RESET (%s) ...\n", reason);
3888 queue_work(dev->wl->hw->workqueue, &dev->restart_work); 3888 ieee80211_queue_work(dev->wl->hw, &dev->restart_work);
3889} 3889}
3890 3890
3891#ifdef CONFIG_PM 3891#ifdef CONFIG_PM