race in smp idle task startup
I think it was there before, but I now noticed it:
The 2.5 SMP bootup path does now:
idle = fork_by_hand();
if (IS_ERR(idle))
panic("failed fork for CPU %d", cpu);
wake_up_forked_process(idle);
<----------- process on run queue ---------------->
/*
* We remove it from the pidhash and the runqueue * once we got the process:
*/
init_idle(idle,cpu);
But sched_init has been called before and the load balance timers are already running. If you have multiple CPUs to start another CPU could come and balance the idle thread away. Its registers contain random values from fork_by_hand so it would likely crash.
It probably needs a __wake_up_forked_process that does not actually put it onto an runqueue. Or did I miss something?
-Andi