Skip to content

Commit d25e26b

Browse files
committed
[x86] Clean up MAXSMP Kconfig, and limit NR_CPUS to 512
This fixes a regression that was indirectly caused by commit 1184dc2 ("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>
1 parent 426e1ea commit d25e26b

File tree

1 file changed

+8
-22
lines changed

1 file changed

+8
-22
lines changed

arch/x86/Kconfig

Lines changed: 8 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -577,35 +577,29 @@ config SWIOTLB
577577

578578
config IOMMU_HELPER
579579
def_bool (CALGARY_IOMMU || GART_IOMMU || SWIOTLB || AMD_IOMMU)
580+
580581
config MAXSMP
581582
bool "Configure Maximum number of SMP Processors and NUMA Nodes"
582-
depends on X86_64 && SMP
583+
depends on X86_64 && SMP && BROKEN
583584
default n
584585
help
585586
Configure maximum number of CPUS and NUMA Nodes for this architecture.
586587
If unsure, say N.
587588

588-
if MAXSMP
589-
config NR_CPUS
590-
int
591-
default "4096"
592-
endif
593-
594-
if !MAXSMP
595589
config NR_CPUS
596-
int "Maximum number of CPUs (2-4096)"
597-
range 2 4096
590+
int "Maximum number of CPUs (2-512)" if !MAXSMP
591+
range 2 512
598592
depends on SMP
593+
default "4096" if MAXSMP
599594
default "32" if X86_NUMAQ || X86_SUMMIT || X86_BIGSMP || X86_ES7000
600595
default "8"
601596
help
602597
This allows you to specify the maximum number of CPUs which this
603-
kernel will support. The maximum supported value is 4096 and the
598+
kernel will support. The maximum supported value is 512 and the
604599
minimum value which makes sense is 2.
605600

606601
This is purely to save memory - each supported CPU adds
607602
approximately eight kilobytes to the kernel image.
608-
endif
609603

610604
config SCHED_SMT
611605
bool "SMT (Hyperthreading) scheduler support"
@@ -996,25 +990,17 @@ config NUMA_EMU
996990
into virtual nodes when booted with "numa=fake=N", where N is the
997991
number of nodes. This is only useful for debugging.
998992

999-
if MAXSMP
1000-
1001993
config NODES_SHIFT
1002-
int
1003-
default "9"
1004-
endif
1005-
1006-
if !MAXSMP
1007-
config NODES_SHIFT
1008-
int "Maximum NUMA Nodes (as a power of 2)"
994+
int "Maximum NUMA Nodes (as a power of 2)" if !MAXSMP
1009995
range 1 9 if X86_64
996+
default "9" if MAXSMP
1010997
default "6" if X86_64
1011998
default "4" if X86_NUMAQ
1012999
default "3"
10131000
depends on NEED_MULTIPLE_NODES
10141001
help
10151002
Specify the maximum number of NUMA Nodes available on the target
10161003
system. Increases memory reserved to accomodate various tables.
1017-
endif
10181004

10191005
config HAVE_ARCH_BOOTMEM_NODE
10201006
def_bool y

0 commit comments

Comments
 (0)