On Tue, Feb 08, 2011 at 04:18:07PM -0800, maksim.rayskiy@xxxxxxxxx wrote: > If kernel starts with maxcpus= option which does not bring all > available cpus online at boot time, idle tasks for offline cpus > are not created. If later offline cpus are hotplugged through sysfs, > __cpu_up is called in the context of the user task, and fork_idle > copies its non-zero mm pointer. This causes BUG() in per_cpu_trap_init. > > To avoid this, release mm for idle task and reset the pointer after > fork_idle(). Nice catch, applied. x86 avoid this problem by forking the idle threads in a worker thread which also avoids other potencial issues; we probably should take the same path. Ralf