Commit ea0c9253 authored by Ivo van Doorn's avatar Ivo van Doorn Committed by John W. Linville

mac80211: Only flush workqueue when last interface was removed

Currently the ieee80211_hw->workqueue is flushed each time
an interface is being removed. However most scheduled work
is not interface specific but device specific, for example things like
periodic work for link tuners.

This patch will move the flush_workqueue() call to directly behind
the call to ops->stop() to make sure the workqueue is only flushed
when all interfaces are gone and there really shouldn't be any scheduled
work in the drivers left.
Signed-off-by: default avatarIvo van Doorn <IvDoorn@gmail.com>
Acked-by: default avatarJohannes Berg <johannes@sipsolutions.net>
Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
parent 8db9369f
...@@ -530,8 +530,6 @@ static int ieee80211_stop(struct net_device *dev) ...@@ -530,8 +530,6 @@ static int ieee80211_stop(struct net_device *dev)
local->sta_hw_scanning = 0; local->sta_hw_scanning = 0;
} }
flush_workqueue(local->hw.workqueue);
sdata->u.sta.flags &= ~IEEE80211_STA_PRIVACY_INVOKED; sdata->u.sta.flags &= ~IEEE80211_STA_PRIVACY_INVOKED;
kfree(sdata->u.sta.extra_ie); kfree(sdata->u.sta.extra_ie);
sdata->u.sta.extra_ie = NULL; sdata->u.sta.extra_ie = NULL;
...@@ -555,6 +553,8 @@ static int ieee80211_stop(struct net_device *dev) ...@@ -555,6 +553,8 @@ static int ieee80211_stop(struct net_device *dev)
ieee80211_led_radio(local, 0); ieee80211_led_radio(local, 0);
flush_workqueue(local->hw.workqueue);
tasklet_disable(&local->tx_pending_tasklet); tasklet_disable(&local->tx_pending_tasklet);
tasklet_disable(&local->tasklet); tasklet_disable(&local->tasklet);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment