On 01/10/2013 11:28 PM, Eric W. Biederman wrote: ... > I don't have any problem with generic code in the reboot path > doing: > if (cpu_online(0)) > set_cpus_allowed_ptr(current, cpumask_of(0)); It looks like that API just affects the scheduler, and not whether the other CPUs are actually active/hot-plugged-in. At least for my use-case, I need something that really disables the other CPUs so they aren't executing code, hence my tendency to hot-un-plug them using disable_nonboot_cpus(), rather than just shift task execution off them using the code above. I wonder if all architectures shouldn't always do the following in all reboot/shutdown/kexec cases: * set_cpus_allowed_ptr() to limit code execution to a single CPU. * disable_nonboot_cpus() (or equivalent) if it's available to turn off all the other CPUs. The issue here would be that disable_nonboot_cpus() isn't always available; I assume that's part of the reason that there are arch-specific machine_xxx() hooks, so that architectures can power-off/reset their CPUs even when hotplug isn't enabled? I wonder if that can be refactored so that reboot/poweroff/kexec can share some CPU-disable code with CPU hotplug?