On Thu, Apr 12, 2007 at 07:52:20AM +0530, Srivatsa Vaddagiri wrote: > I wonder if there is some value in "enforcing" an order in which > processes get frozen i.e freeze A first before B. That may solve the > deadlocks we have been discussing wrt kthread_stop and flush_workqueue > as well. > > The idea is similar to how deadlock wrt multiple locks are solved - > where a ordering is enforced. Take Lock A first before Lock B. > > If process A waits on B (like in kthread_stop or flush_workqueue), then if we: > > 1. Insert A and B in a list (freeze_me_first_list)
In that case, A should insert the dependency into the freeze_me_first_list as B is unaware of the dependency yet. What if by the time A has inserted the dependency B is already frozen? Can very well happen right? A: B: freezer ------------------------------------------------------------------------------- *Check the list. don't find A/B *Mark A freezeable. *Mark B freezeable. *try_to_freeze(); *insert A, B . into the . list. . . . * wait_for_ . completion(done); . /* Freezer fails at this . * point . */ . . *complete(done); *try_to_freeze(); Example: A = a thread doing flush_workqueue. B = worker thread. Of course, we can always use the freezer_skip around this wait_for_completion as well as long as the thread A is not marked PF_NOFREEZE. But with multiple freeze events, it won't be as simple as that. > -- > Regards, > vatsa Thanks and Regards gautham. -- Gautham R Shenoy Linux Technology Center IBM India. "Freedom comes with a price tag of responsibility, which is still a bargain, because Freedom is priceless!" - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/