Commit d25e26b6 authored by Linus Torvalds's avatar Linus Torvalds

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

This fixes a regression that was indirectly caused by commit
1184dc2f ("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: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent 426e1eaf
...@@ -577,35 +577,29 @@ config SWIOTLB ...@@ -577,35 +577,29 @@ config SWIOTLB
config IOMMU_HELPER config IOMMU_HELPER
def_bool (CALGARY_IOMMU || GART_IOMMU || SWIOTLB || AMD_IOMMU) def_bool (CALGARY_IOMMU || GART_IOMMU || SWIOTLB || AMD_IOMMU)
config MAXSMP config MAXSMP
bool "Configure Maximum number of SMP Processors and NUMA Nodes" bool "Configure Maximum number of SMP Processors and NUMA Nodes"
depends on X86_64 && SMP depends on X86_64 && SMP && BROKEN
default n default n
help help
Configure maximum number of CPUS and NUMA Nodes for this architecture. Configure maximum number of CPUS and NUMA Nodes for this architecture.
If unsure, say N. If unsure, say N.
if MAXSMP
config NR_CPUS
int
default "4096"
endif
if !MAXSMP
config NR_CPUS config NR_CPUS
int "Maximum number of CPUs (2-4096)" int "Maximum number of CPUs (2-512)" if !MAXSMP
range 2 4096 range 2 512
depends on SMP depends on SMP
default "4096" if MAXSMP
default "32" if X86_NUMAQ || X86_SUMMIT || X86_BIGSMP || X86_ES7000 default "32" if X86_NUMAQ || X86_SUMMIT || X86_BIGSMP || X86_ES7000
default "8" default "8"
help help
This allows you to specify the maximum number of CPUs which this This allows you to specify the maximum number of CPUs which this
kernel will support. The maximum supported value is 4096 and the kernel will support. The maximum supported value is 512 and the
minimum value which makes sense is 2. minimum value which makes sense is 2.
This is purely to save memory - each supported CPU adds This is purely to save memory - each supported CPU adds
approximately eight kilobytes to the kernel image. approximately eight kilobytes to the kernel image.
endif
config SCHED_SMT config SCHED_SMT
bool "SMT (Hyperthreading) scheduler support" bool "SMT (Hyperthreading) scheduler support"
...@@ -996,17 +990,10 @@ config NUMA_EMU ...@@ -996,17 +990,10 @@ config NUMA_EMU
into virtual nodes when booted with "numa=fake=N", where N is the into virtual nodes when booted with "numa=fake=N", where N is the
number of nodes. This is only useful for debugging. number of nodes. This is only useful for debugging.
if MAXSMP
config NODES_SHIFT config NODES_SHIFT
int int "Maximum NUMA Nodes (as a power of 2)" if !MAXSMP
default "9"
endif
if !MAXSMP
config NODES_SHIFT
int "Maximum NUMA Nodes (as a power of 2)"
range 1 9 if X86_64 range 1 9 if X86_64
default "9" if MAXSMP
default "6" if X86_64 default "6" if X86_64
default "4" if X86_NUMAQ default "4" if X86_NUMAQ
default "3" default "3"
...@@ -1014,7 +1001,6 @@ config NODES_SHIFT ...@@ -1014,7 +1001,6 @@ config NODES_SHIFT
help help
Specify the maximum number of NUMA Nodes available on the target Specify the maximum number of NUMA Nodes available on the target
system. Increases memory reserved to accomodate various tables. system. Increases memory reserved to accomodate various tables.
endif
config HAVE_ARCH_BOOTMEM_NODE config HAVE_ARCH_BOOTMEM_NODE
def_bool y def_bool y
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment