Adds and increases some config variables to accomodate larger SMP configurations: NR_CPUS: max limit now 4096 NODES_SHIFT: max limit now 9 THREAD_ORDER: max limit now 3 X86_SMP_MAX: say Y to enable possible cpus == NR_CPUS Signed-off-by: Mike Travis --- arch/x86/Kconfig | 17 ++++++++++++++--- arch/x86/Kconfig.debug | 9 +++++++++ arch/x86/kernel/smpboot_64.c | 4 ++++ include/asm-x86/page_64.h | 4 ++++ 4 files changed, 31 insertions(+), 3 deletions(-) --- a/arch/x86/Kconfig +++ b/arch/x86/Kconfig @@ -487,19 +487,29 @@ config ARCH_SUPPORTS_KVM config NR_CPUS - int "Maximum number of CPUs (2-255)" - range 2 255 + int "Maximum number of CPUs (2-4096)" + range 2 4096 depends on SMP + default "1024" if X86_SMP_MAX default "32" if X86_NUMAQ || X86_SUMMIT || X86_BIGSMP || X86_ES7000 default "8" help This allows you to specify the maximum number of CPUs which this - kernel will support. The maximum supported value is 255 and the + kernel will support. The maximum supported value is 4096 and the minimum value which makes sense is 2. This is purely to save memory - each supported CPU adds approximately eight kilobytes to the kernel image. +config THREAD_ORDER + int "Kernel stack size (in page order)" + range 1 3 + depends on X86_64_SMP + default "3" if X86_SMP_MAX + default "1" + help + Increases kernel stack size. + config SCHED_SMT bool "SMT (Hyperthreading) scheduler support" depends on (X86_64 && SMP) || (X86_32 && X86_HT) @@ -882,6 +892,7 @@ config NUMA_EMU config NODES_SHIFT int + default "9" if X86_SMP_MAX default "6" if X86_64 default "4" if X86_NUMAQ default "3" --- a/arch/x86/Kconfig.debug +++ b/arch/x86/Kconfig.debug @@ -73,6 +73,15 @@ config X86_FIND_SMP_CONFIG depends on X86_LOCAL_APIC || X86_VOYAGER depends on X86_32 +config X86_SMP_MAX + bool "Enable Maximum SMP configuration" + def_bool n + depends on X86_64_SMP + help + Say Y here to enable a "large" SMP configuration for testing + purposes. It does this by increasing the number of possible + cpus to the NR_CPUS count. + config X86_MPPARSE def_bool y depends on (X86_32 && (X86_LOCAL_APIC && !X86_VISWS)) || X86_64 --- a/arch/x86/kernel/smpboot_64.c +++ b/arch/x86/kernel/smpboot_64.c @@ -784,6 +784,10 @@ __init void prefill_possible_map(void) possible = num_processors + additional_cpus; if (possible > NR_CPUS) possible = NR_CPUS; +#ifdef CONFIG_SMP_MAX + if (possible < NR_CPUS) + possible = NR_CPUS; +#endif printk(KERN_INFO "SMP: Allowing %d CPUs, %d hotplug CPUs\n", possible, --- a/include/asm-x86/page_64.h +++ b/include/asm-x86/page_64.h @@ -3,7 +3,11 @@ #define PAGETABLE_LEVELS 4 +#ifdef CONFIG_THREAD_ORDER +#define THREAD_ORDER CONFIG_THREAD_ORDER +#else #define THREAD_ORDER 1 +#endif #define THREAD_SIZE (PAGE_SIZE << THREAD_ORDER) #define CURRENT_MASK (~(THREAD_SIZE-1)) -- -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/