Re: [PATCH] fix-flush_workqueue-vs-cpu_dead-race-update

Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]
From: Srivatsa Vaddagiri
Date: Monday, January 8, 2007 - 8:22 am

On Mon, Jan 08, 2007 at 12:51:03AM +0300, Oleg Nesterov wrote:

This is head-spinning :)

Spotted atleast these problems:

1. run_workqueue()->work.func()->flush_work()->mutex_lock(workqueue_mutex)
   deadlocks if we are blocked in cleanup_workqueue_thread()->kthread_stop() 
   for the same worker thread to exit.

   Looks possible in practice to me.

2. 
     
CPU_DEAD->cleanup_workqueue_thread->(cwq->thread = NULL)->kthread_stop() ..
				    ^^^^^^^^^^^^^^^^^^^^
						|___ Problematic

Now while we are blocked here, if a work->func() calls
flush_workqueue->flush_cpu_workqueue, we clearly cant identify that event 
thread is trying to flush its own queue (cwq->thread == current test
fails) and hence we will deadlock.

A lock_cpu_hotplug(), or any other ability to block concurrent hotplug 
operations from happening, in run_workqueue would have avoided both the above
races.

Alternatively, for the second race, I guess we can avoid setting 
cwq->thread = NULL in cleanup_workqueue_thread() till the thread has exited, 
but I am not sure if that opens up any other race. The first race seems
harder to fix ..

I wonder if spin (spinroot.com) or some other formal model can make this job of
spotting-races easier for us ..

-- 
Regards,
vatsa
-
Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]

Messages in current thread:
Re: [PATCH, RFC] reimplement flush_workqueue(), Srivatsa Vaddagiri, (Thu Jan 4, 4:32 am)
Re: [PATCH, RFC] reimplement flush_workqueue(), Oleg Nesterov, (Thu Jan 4, 7:29 am)
Re: [PATCH, RFC] reimplement flush_workqueue(), Srivatsa Vaddagiri, (Thu Jan 4, 8:56 am)
Re: [PATCH, RFC] reimplement flush_workqueue(), Oleg Nesterov, (Thu Jan 4, 9:31 am)
Re: [PATCH, RFC] reimplement flush_workqueue(), Srivatsa Vaddagiri, (Thu Jan 4, 9:57 am)
Re: [PATCH, RFC] reimplement flush_workqueue(), Andrew Morton, (Thu Jan 4, 10:18 am)
Re: [PATCH, RFC] reimplement flush_workqueue(), Oleg Nesterov, (Thu Jan 4, 11:09 am)
Re: [PATCH, RFC] reimplement flush_workqueue(), Andrew Morton, (Thu Jan 4, 11:31 am)
Re: [PATCH, RFC] reimplement flush_workqueue(), Srivatsa Vaddagiri, (Fri Jan 5, 1:56 am)
Re: [PATCH, RFC] reimplement flush_workqueue(), Srivatsa Vaddagiri, (Fri Jan 5, 2:03 am)
Re: [PATCH, RFC] reimplement flush_workqueue(), Oleg Nesterov, (Fri Jan 5, 5:42 am)
Re: [PATCH, RFC] reimplement flush_workqueue(), Oleg Nesterov, (Fri Jan 5, 7:07 am)
[PATCH] fix-flush_workqueue-vs-cpu_dead-race-update, Oleg Nesterov, (Sat Jan 6, 8:10 am)
Re: [PATCH, RFC] reimplement flush_workqueue(), Srivatsa Vaddagiri, (Sat Jan 6, 8:11 am)
Re: [PATCH, RFC] reimplement flush_workqueue(), Srivatsa Vaddagiri, (Sat Jan 6, 8:24 am)
Re: [PATCH] fix-flush_workqueue-vs-cpu_dead-race-update, Srivatsa Vaddagiri, (Sat Jan 6, 8:45 am)
Re: [PATCH] fix-flush_workqueue-vs-cpu_dead-race-update, Oleg Nesterov, (Sat Jan 6, 9:30 am)
Re: [PATCH] fix-flush_workqueue-vs-cpu_dead-race-update, Srivatsa Vaddagiri, (Sat Jan 6, 9:38 am)
Re: [PATCH] fix-flush_workqueue-vs-cpu_dead-race-update, Oleg Nesterov, (Sat Jan 6, 10:34 am)
Re: [PATCH] fix-flush_workqueue-vs-cpu_dead-race-update, Andrew Morton, (Sat Jan 6, 12:11 pm)
Re: [PATCH] fix-flush_workqueue-vs-cpu_dead-race-update, Srivatsa Vaddagiri, (Sun Jan 7, 3:43 am)
Re: [PATCH] fix-flush_workqueue-vs-cpu_dead-race-update, Srivatsa Vaddagiri, (Sun Jan 7, 4:00 am)
Re: [PATCH] fix-flush_workqueue-vs-cpu_dead-race-update, Oleg Nesterov, (Sun Jan 7, 5:56 am)
Re: [PATCH] fix-flush_workqueue-vs-cpu_dead-race-update, Oleg Nesterov, (Sun Jan 7, 7:22 am)
Re: [PATCH] fix-flush_workqueue-vs-cpu_dead-race-update, Oleg Nesterov, (Sun Jan 7, 7:42 am)
Re: [PATCH] fix-flush_workqueue-vs-cpu_dead-race-update, Srivatsa Vaddagiri, (Sun Jan 7, 9:21 am)
Re: [PATCH] fix-flush_workqueue-vs-cpu_dead-race-update, Srivatsa Vaddagiri, (Sun Jan 7, 9:43 am)
Re: [PATCH] fix-flush_workqueue-vs-cpu_dead-race-update, Srivatsa Vaddagiri, (Sun Jan 7, 10:01 am)
Re: [PATCH] fix-flush_workqueue-vs-cpu_dead-race-update, Oleg Nesterov, (Sun Jan 7, 10:09 am)
Re: [PATCH] fix-flush_workqueue-vs-cpu_dead-race-update, Oleg Nesterov, (Sun Jan 7, 10:18 am)
Re: [PATCH] fix-flush_workqueue-vs-cpu_dead-race-update, Oleg Nesterov, (Sun Jan 7, 10:33 am)
Re: [PATCH] fix-flush_workqueue-vs-cpu_dead-race-update, Andrew Morton, (Sun Jan 7, 12:59 pm)
Re: [PATCH] fix-flush_workqueue-vs-cpu_dead-race-update, Oleg Nesterov, (Sun Jan 7, 2:51 pm)
Re: [PATCH] fix-flush_workqueue-vs-cpu_dead-race-update, Srivatsa Vaddagiri, (Mon Jan 8, 8:22 am)
Re: [PATCH] fix-flush_workqueue-vs-cpu_dead-race-update, Srivatsa Vaddagiri, (Mon Jan 8, 8:37 am)
Re: [PATCH] fix-flush_workqueue-vs-cpu_dead-race-update, Oleg Nesterov, (Mon Jan 8, 8:56 am)
Re: [PATCH] fix-flush_workqueue-vs-cpu_dead-race-update, Srivatsa Vaddagiri, (Mon Jan 8, 9:31 am)
Re: [PATCH] fix-flush_workqueue-vs-cpu_dead-race-update, Oleg Nesterov, (Mon Jan 8, 10:06 am)
RE: [PATCH] fix-flush_workqueue-vs-cpu_dead-race-update, Pallipadi, Venkatesh, (Mon Jan 8, 11:37 am)
Re: [PATCH] fix-flush_workqueue-vs-cpu_dead-race-update, Srivatsa Vaddagiri, (Mon Jan 8, 6:11 pm)
Re: [PATCH] fix-flush_workqueue-vs-cpu_dead-race-update, Srivatsa Vaddagiri, (Mon Jan 8, 9:39 pm)
Re: [PATCH] fix-flush_workqueue-vs-cpu_dead-race-update, Oleg Nesterov, (Tue Jan 9, 7:38 am)