On Thu, 2008-07-03 at 19:02 +0200, Ivo van Doorn wrote: > 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. Yeah I think that's what we always wanted. > Signed-off-by: Ivo van Doorn <IvDoorn@xxxxxxxxx> Acked-by: Johannes Berg <johannes@xxxxxxxxxxxxxxxx> > --- > diff --git a/net/mac80211/main.c b/net/mac80211/main.c > index 074f71a..577845e 100644 > --- a/net/mac80211/main.c > +++ b/net/mac80211/main.c > @@ -533,8 +533,6 @@ static int ieee80211_stop(struct net_device *dev) > local->sta_hw_scanning = 0; > } > > - flush_workqueue(local->hw.workqueue); > - > sdata->u.sta.flags &= ~IEEE80211_STA_PRIVACY_INVOKED; > kfree(sdata->u.sta.extra_ie); > sdata->u.sta.extra_ie = NULL; > @@ -558,6 +556,8 @@ static int ieee80211_stop(struct net_device *dev) > > ieee80211_led_radio(local, 0); > > + flush_workqueue(local->hw.workqueue); > + > tasklet_disable(&local->tx_pending_tasklet); > tasklet_disable(&local->tasklet); > } >
Attachment:
signature.asc
Description: This is a digitally signed message part