On 09/01, Ingo Molnar wrote: > > * Oleg Nesterov <oleg@xxxxxxxxxx> wrote: > > > On 09/01, Ingo Molnar wrote: > > > > > > * Oleg Nesterov <oleg@xxxxxxxxxx> wrote: > > > > > > > Yes, this should work. But I _think_ we can make the better fix... > > > > > > > > I'll try to make the patch soon. Afaics we don't need > > > > kthreadd_task_init_done. > > > > > > ok. > > > > Just in case, the patch is ready. [...] > > yes - that's roughly the cleanup i referred to in the commit log. > > way too late for -rc8 though - the minimal fix i did _might_ be > eligible. > > agreed? Agreed. Then I will sent the patch on top of this change. But. May be your minimal patch needs a small tweak ? rest_init()->complete(&kthreadd_task_init_done) assumes that exactly _one_ caller of kthread_create() can race with kernel_thread(kthreadd). Perhap we need complete_all() ? But I must admit, now I don't understand what happens, The modification of that variable is protected by the BKL, but the _ordering_ of the initial task (which becomes the idle thread of CPU0) and the init task (which is spawned by the initial task) is not synchronized. So we can occasionally end up init running sooner than rest_init() How? rest_init() can't be preempted and it holds BKL. And kernel_init() takes BKL before anything else. Confused... Oleg. -- To unsubscribe from this list: send the line "unsubscribe linux-tip-commits" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html