[x86] Clean up MAXSMP Kconfig, and limit NR_CPUS to 512

This fixes a regression that was indirectly caused by commit
1184dc2ffe2c8fb9afb766d870850f2c3165ef25 ("x86: modify Kconfig to allow
up to 4096 cpus").

Allowing 4k CPU's is not practical at this time, because we still have a
number of places that have several 'cpumask_t's on the stack, and a
4k-bit cpumask is 512 bytes of stack-space for each such variable. This
literally caused functions like 'smp_call_function_mask' to have a 2.5kB
stack frame, and several functions to have 2kB stackframes.

With an 8kB stack total, smashing the stack was simply much too likely.
At least bugzilla entry

http://bugzilla.kernel.org/show_bug.cgi?id=11342

was due to this.

The earlier commit to not inline load_module() into sys_init_module()
fixed the particular symptoms of this that Alan Brunelle saw in that
bugzilla entry, but the huge stack waste by cpumask_t's was the more
direct cause.

Some day we'll have allocation helpers that allocate large CPU masks
dynamically, but in the meantime we simply cannot allow cpumasks this
large.

Cc: Alan D. Brunelle <Alan.Brunelle@hp.com>
Cc: Mike Travis <travis@sgi.com>
Cc: Ingo Molnar <mingo@elte.hu>
Cc: Thomas Gleixner <tglx@linutronix.de>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>

+8 -22
+8 -22
arch/x86/Kconfig
··· 577 578 config IOMMU_HELPER 579 def_bool (CALGARY_IOMMU || GART_IOMMU || SWIOTLB || AMD_IOMMU) 580 config MAXSMP 581 bool "Configure Maximum number of SMP Processors and NUMA Nodes" 582 - depends on X86_64 && SMP 583 default n 584 help 585 Configure maximum number of CPUS and NUMA Nodes for this architecture. 586 If unsure, say N. 587 588 - if MAXSMP 589 config NR_CPUS 590 - int 591 - default "4096" 592 - endif 593 - 594 - if !MAXSMP 595 - config NR_CPUS 596 - int "Maximum number of CPUs (2-4096)" 597 - range 2 4096 598 depends on SMP 599 default "32" if X86_NUMAQ || X86_SUMMIT || X86_BIGSMP || X86_ES7000 600 default "8" 601 help 602 This allows you to specify the maximum number of CPUs which this 603 - kernel will support. The maximum supported value is 4096 and the 604 minimum value which makes sense is 2. 605 606 This is purely to save memory - each supported CPU adds 607 approximately eight kilobytes to the kernel image. 608 - endif 609 610 config SCHED_SMT 611 bool "SMT (Hyperthreading) scheduler support" ··· 990 into virtual nodes when booted with "numa=fake=N", where N is the 991 number of nodes. This is only useful for debugging. 992 993 - if MAXSMP 994 - 995 config NODES_SHIFT 996 - int 997 - default "9" 998 - endif 999 - 1000 - if !MAXSMP 1001 - config NODES_SHIFT 1002 - int "Maximum NUMA Nodes (as a power of 2)" 1003 range 1 9 if X86_64 1004 default "6" if X86_64 1005 default "4" if X86_NUMAQ 1006 default "3" ··· 1001 help 1002 Specify the maximum number of NUMA Nodes available on the target 1003 system. Increases memory reserved to accomodate various tables. 1004 - endif 1005 1006 config HAVE_ARCH_BOOTMEM_NODE 1007 def_bool y
··· 577 578 config IOMMU_HELPER 579 def_bool (CALGARY_IOMMU || GART_IOMMU || SWIOTLB || AMD_IOMMU) 580 + 581 config MAXSMP 582 bool "Configure Maximum number of SMP Processors and NUMA Nodes" 583 + depends on X86_64 && SMP && BROKEN 584 default n 585 help 586 Configure maximum number of CPUS and NUMA Nodes for this architecture. 587 If unsure, say N. 588 589 config NR_CPUS 590 + int "Maximum number of CPUs (2-512)" if !MAXSMP 591 + range 2 512 592 depends on SMP 593 + default "4096" if MAXSMP 594 default "32" if X86_NUMAQ || X86_SUMMIT || X86_BIGSMP || X86_ES7000 595 default "8" 596 help 597 This allows you to specify the maximum number of CPUs which this 598 + kernel will support. The maximum supported value is 512 and the 599 minimum value which makes sense is 2. 600 601 This is purely to save memory - each supported CPU adds 602 approximately eight kilobytes to the kernel image. 603 604 config SCHED_SMT 605 bool "SMT (Hyperthreading) scheduler support" ··· 996 into virtual nodes when booted with "numa=fake=N", where N is the 997 number of nodes. This is only useful for debugging. 998 999 config NODES_SHIFT 1000 + int "Maximum NUMA Nodes (as a power of 2)" if !MAXSMP 1001 range 1 9 if X86_64 1002 + default "9" if MAXSMP 1003 default "6" if X86_64 1004 default "4" if X86_NUMAQ 1005 default "3" ··· 1014 help 1015 Specify the maximum number of NUMA Nodes available on the target 1016 system. Increases memory reserved to accomodate various tables. 1017 1018 config HAVE_ARCH_BOOTMEM_NODE 1019 def_bool y