x86: allow number of additional hotplug CPUs to be set at compile time, V2
authorChuck Ebbert <cebbert@redhat.com>
Thu, 2 Oct 2008 19:30:07 +0000 (15:30 -0400)
committerIngo Molnar <mingo@elte.hu>
Mon, 13 Oct 2008 08:33:14 +0000 (10:33 +0200)
x86: allow number of additional hotplug CPUs to be set at compile time, V2

The default number of additional CPU IDs for hotplugging is determined
by asking ACPI or mptables how many "disabled" CPUs there are in the
system, but many systems get this wrong so that e.g. a uniprocessor
machine gets an extra CPU allocated and never switches to single CPU
mode.

And sometimes CPU hotplugging is enabled only for suspend/hibernate
anyway, so the additional CPU IDs are not wanted. Allow the number
to be set to zero at compile time.

Also, force the number of extra CPUs to zero if hotplugging is disabled
which allows removing some conditional code.

Tested on uniprocessor x86_64 that ACPI claims has a disabled processor,
with CPU hotplugging configured.

("After" has the number of additional CPUs set to 0)
Before: NR_CPUS: 512, nr_cpu_ids: 2, nr_node_ids 1
After: NR_CPUS: 512, nr_cpu_ids: 1, nr_node_ids 1

[Changed the name of the option and the prompt according to Ingo's
 suggestion.]

Signed-off-by: Ingo Molnar <mingo@elte.hu>
arch/x86/Kconfig
arch/x86/kernel/smpboot.c

index fc8351f374fd466b8f9b287a6f5d4a2ec3b0fd32..adaca6fa927d976ce0c7f1d21c630c31a1857cec 100644 (file)
@@ -1438,6 +1438,24 @@ config HOTPLUG_CPU
            automatically on SMP systems. )
          Say N if you want to disable CPU hotplug.
 
+config HOTPLUG_RESTRICT_TO_BOOTUP_CPUS
+       def_bool n
+       prompt "Restrict CPU hotplugging to processors found during boot" if HOTPLUG_CPU
+       ---help---
+         Say no here to use the default, which allows as many CPUs as are marked
+         "disabled" by ACPI or MPTABLES to be hotplugged after bootup.
+
+         Say yes if you do not want to allow CPUs to be added after booting, for
+         example if you only need CPU hotplugging enabled for suspend/resume.
+
+         If CPU_HOTPLUG is enabled this value may be overridden at boot time
+         with the "additional_cpus" kernel parameter.
+
+config HOTPLUG_ADDITIONAL_CPUS
+       int
+       default  0 if !HOTPLUG_CPU || HOTPLUG_RESTRICT_TO_BOOTUP_CPUS
+       default -1
+
 config COMPAT_VDSO
        def_bool y
        prompt "Compat VDSO support"
index 23913785c26244b4d5648a9b6722b19bb55b716c..857a88bb9195a25d231fe34821eb56f8d7674a0a 100644 (file)
@@ -1261,7 +1261,7 @@ void __init native_smp_cpus_done(unsigned int max_cpus)
        check_nmi_watchdog();
 }
 
-static int additional_cpus __initdata = -1;
+static int additional_cpus __initdata = CONFIG_HOTPLUG_ADDITIONAL_CPUS;
 
 /*
  * cpu_possible_map should be static, it cannot change as cpu's