On Thu, 2012-12-13 at 09:46 -0800, Ben Greear wrote: > As previously posted, there can be cases where the RTNL is held for a > very long time when trying to do the: flush_workqueue(local->workqueue); > in mac80211_do_stop because there are lots of 'slow' work-items queued up. > > I'd like to work on making this faster... > > My first idea is to add a second work-queue to the 'local' for high-priority > items that can be executed independently from the current local->workqueue, > and put the free_sta_rcu work() in that queue. > > I'm guessing that to be safe, the do_stop() code would need to selectively > purge any work items in the local->workqueue that relate to the sdata > being destroyed, as well. I'm not sure how possible that would be... I don't think that's easy, but you're welcome to try. The free_sta_work() function references the sdata so it absolutely must run at this point. The only/easiest thing that seems vaguely safe would be a per-vif workqueue for this? But that's really annoying too, since it needs an extra thread etc. johannes -- 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