[PATCH 4/5] x86: Add config variables for SMP_MAX

From: travis
Date: Fri Jan 18 2008 - 13:34:41 EST


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 <travis@xxxxxxx>
---
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@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/