Messages in this thread | | | Subject | Re: [rfc] lru_add_drain_all() vs isolation | From | Peter Zijlstra <> | Date | Mon, 07 Sep 2009 16:25:54 +0200 |
| |
On Mon, 2009-09-07 at 16:18 +0200, Oleg Nesterov wrote:
> > flush_workqueue() could limit itself to cpus that had work queued since > > the last flush_workqueue() invocation, etc. > > But "work queued since the last flush_workqueue() invocation" just means > "has work queued". Please note that flush_cpu_workqueue() does nothing > if there are no works, except it does lock/unlock of cwq->lock. > > IIRC, flush_cpu_workqueue() has to lock/unlock to avoid the races with > CPU hotplug, but _perhaps_ flush_workqueue() can do the check lockless. > > Afaics, we can add the workqueue_struct->cpu_map_has_works to help > flush_workqueue(), but this means we should complicate insert_work() > and run_workqueue() which should set/clear the bit. But given that > flush_workqueue() should be avoided anyway, I am not sure.
Ah, indeed. Then nothing new would be needed here, since it will indeed not interrupt processing on the remote cpus that never queued any work.
| |