Prev: tpm_tis: Fix subsequent suspend failures
Next: [PATCH 0/3 v3] msm: Add gpiolib devices to MSM7x30 and QSD8x50.
From: Ilya Loginov on 23 Jun 2010 16:20 There is a bug in rest_init function. The problem is that kernel_init thread starts before initialization of kthreadd_task when CONFIG_PREEMPT_VOLUNTARY is enabled. kernel_init thread do wake_up_process(kthreadd_task) and I have kernel Oops in try_to_wake_up when I try to get p->state. I found this problem on 2.6.34 on FPGA. It is very slow, and find_task_by_pid is done after reschenduling. I have no this problem on 2.6.35-rc3 because kernel code is moved. But if I write simple loop like volatile int tmp; for(i = 0; i < preset_lpj; i++) tmp++; right after kernel_thread(kernel_init,.... , I have this problem on 2.6.35-rc3 too. I understand that real problem is reschenduling in init code, but I have no ability to fix it. Signed-off-by: Ilya Loginov <isloginov(a)gmail.com> --- diff --git a/init/main.c b/init/main.c index 3bdb152..9febd69 100644 --- a/init/main.c +++ b/init/main.c @@ -428,12 +428,12 @@ static noinline void __init_refok rest_init(void) int pid; rcu_scheduler_starting(); - kernel_thread(kernel_init, NULL, CLONE_FS | CLONE_SIGHAND); numa_default_policy(); pid = kernel_thread(kthreadd, NULL, CLONE_FS | CLONE_FILES); rcu_read_lock(); kthreadd_task = find_task_by_pid_ns(pid, &init_pid_ns); rcu_read_unlock(); + kernel_thread(kernel_init, NULL, CLONE_FS | CLONE_SIGHAND); unlock_kernel(); /* -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo(a)vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/ |