> > +#ifdef CONFIG_HOTPLUG_CPU > > + if (cpu_online(cpu)) { > > +#else > > if (cpu_online(cpu) || !cpu_present(cpu)) { > > +#endif > > ret = -EINVAL; > > goto out; > > } > > Why this change? I think the cpu_present check is needed for > ppc64 since it has non-present cpus in sysfs. > The new processor was never brought up, its bit is only set in cpu_possible_map, but not in present map. ... if (boot_error) { /* Try to put things back the way they were before ... */ unmap_cpu_to_logical_apicid(cpu); cpu_clear(cpu, cpu_callout_map); /* was set here (do_boot_cpu()) */ cpu_clear(cpu, cpu_initialized); /* was set by cpu_init() */ cpucount--; } else { x86_cpu_to_apicid[cpu] = apicid; cpu_set(cpu, cpu_present_map); <===================== } ... So if someone tries to boot a CPU up first time during runtime it always fails this check. Thanks, --Natalie