On Monday 23 June 2008 10:30:47 Ivo Van Doorn wrote: > On 6/23/08, Michael Buesch <mb@xxxxxxxxx> wrote: > > On Monday 23 June 2008 00:42:41 Ivo van Doorn wrote: > >> That function calls flush_workqueue() > > > > Uh wait. It shouldn't call that. Where exactly is this function called? > > It is called right before local->ops->remove_interface() which means the > workqueue is flushed when it isn't even guaranteed that all interfaces are gone. > > net/mac80211/main.c:553 > > static int ieee80211_stop(struct net_device *dev) > { > <snip> > switch (sdata->vif.type) { > case IEEE80211_IF_TYPE_MESH_POINT: > case IEEE80211_IF_TYPE_STA: > case IEEE80211_IF_TYPE_IBSS: > <snip> > flush_workqueue(local->hw.workqueue); > <snip> > } > <snip> > } Oh right. I see. This is actually OK. I thought it would flush the global wq. The local mac80211 wq was introduced to workaround this rtnl deadlock, so I'm surprised it happens again. -- Greetings Michael. -- To unsubscribe from this list: send the line "unsubscribe linux-wireless" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html