All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] Configurable NR_CPUS for 2.5.24
@ 2002-06-24 19:06 Robert Love
  0 siblings, 0 replies; only message in thread
From: Robert Love @ 2002-06-24 19:06 UTC (permalink / raw)
  To: linux-kernel; +Cc: torvalds

This is in 2.5-dj now and thus I have gotten a couple emails for a
resync against 2.5 proper... so here we go, live from the Kernel Summit.

This patch implements a CONFIG_NR_CPUS that allows the user to specify a
sane value for NR_CPUS in an effort to save memory and cycles.  This is
especially useful for debugging or other work where you have large
per-CPU static structures.  It also has a more appreciable benefit now
that hotplug CPUs has more code using NR_CPUS vs smp_num_cpus.

This patch also allows each architecture to specify its own default
NR_CPUS, allowing 64-bit arches to set their default to 64.

We need feedback on use of other-than-default NR_CPUS values (x86 is
well tested) as well as use of the new 64 default on such architectures.

Oh, and to make Tom Rini happy I will accept patches for other
architectures Config.help entries :)

Patch is against 2.5.24.

	Robert Love

diff -urN linux-2.5.24/arch/alpha/config.in linux/arch/alpha/config.in
--- linux-2.5.24/arch/alpha/config.in	Thu Jun 20 15:53:47 2002
+++ linux/arch/alpha/config.in	Thu Jun 20 16:35:45 2002
@@ -232,6 +232,7 @@
 
 if [ "$CONFIG_SMP" = "y" ]; then
    define_bool CONFIG_HAVE_DEC_LOCK y
+   int  'Maximum number of CPUs (2-64)' CONFIG_NR_CPUS 64
 fi
 
 if [ "$CONFIG_EXPERIMENTAL" = "y" ]; then
diff -urN linux-2.5.24/arch/i386/Config.help linux/arch/i386/Config.help
--- linux-2.5.24/arch/i386/Config.help	Thu Jun 20 15:53:44 2002
+++ linux/arch/i386/Config.help	Thu Jun 20 16:35:45 2002
@@ -25,6 +25,14 @@
 
   If you don't know what to do here, say N.
 
+CONFIG_NR_CPUS
+  This allows you to specify the maximum number of CPUs which this
+  kernel will support.  The maximum supported value is 32 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_PREEMPT
   This option reduces the latency of the kernel when reacting to
   real-time or interactive events by allowing a low priority process to
diff -urN linux-2.5.24/arch/i386/config.in linux/arch/i386/config.in
--- linux-2.5.24/arch/i386/config.in	Thu Jun 20 15:53:49 2002
+++ linux/arch/i386/config.in	Thu Jun 20 16:35:45 2002
@@ -165,6 +165,7 @@
       define_bool CONFIG_X86_IO_APIC y
    fi
 else
+   int  'Maximum number of CPUs (2-32)' CONFIG_NR_CPUS 32
    bool 'Multiquad NUMA system' CONFIG_MULTIQUAD
 fi
 
diff -urN linux-2.5.24/arch/i386/defconfig linux/arch/i386/defconfig
--- linux-2.5.24/arch/i386/defconfig	Thu Jun 20 15:53:45 2002
+++ linux/arch/i386/defconfig	Thu Jun 20 16:35:45 2002
@@ -74,6 +74,7 @@
 # CONFIG_PREEMPT is not set
 # CONFIG_MULTIQUAD is not set
 CONFIG_HAVE_DEC_LOCK=y
+CONFIG_NR_CPUS=32
 
 #
 # General options
diff -urN linux-2.5.24/arch/ia64/config.in linux/arch/ia64/config.in
--- linux-2.5.24/arch/ia64/config.in	Thu Jun 20 15:53:53 2002
+++ linux/arch/ia64/config.in	Thu Jun 20 16:35:45 2002
@@ -95,6 +95,10 @@
 tristate '/proc/pal support' CONFIG_IA64_PALINFO
 tristate '/proc/efi/vars support' CONFIG_EFI_VARS
 
+if [ "$CONFIG_SMP" = "y" ]; then
+   int  'Maximum number of CPUs (2-64)' CONFIG_NR_CPUS 64
+fi
+
 tristate 'Kernel support for ELF binaries' CONFIG_BINFMT_ELF
 tristate 'Kernel support for MISC binaries' CONFIG_BINFMT_MISC
 
diff -urN linux-2.5.24/arch/ia64/defconfig linux/arch/ia64/defconfig
--- linux-2.5.24/arch/ia64/defconfig	Thu Jun 20 15:53:44 2002
+++ linux/arch/ia64/defconfig	Thu Jun 20 16:35:45 2002
@@ -61,6 +61,7 @@
 CONFIG_EFI_VARS=y
 CONFIG_BINFMT_ELF=y
 # CONFIG_BINFMT_MISC is not set
+CONFIG_NR_CPUS=64
 
 #
 # ACPI Support
diff -urN linux-2.5.24/arch/mips/config.in linux/arch/mips/config.in
--- linux-2.5.24/arch/mips/config.in	Thu Jun 20 15:53:54 2002
+++ linux/arch/mips/config.in	Thu Jun 20 16:35:45 2002
@@ -500,6 +500,8 @@
 bool 'Magic SysRq key' CONFIG_MAGIC_SYSRQ
 if [ "$CONFIG_SMP" != "y" ]; then
    bool 'Run uncached' CONFIG_MIPS_UNCACHED
+else
+   int  'Maximum number of CPUs (2-32)' CONFIG_NR_CPUS 32
 fi
 endmenu
 
diff -urN linux-2.5.24/arch/mips64/config.in linux/arch/mips64/config.in
--- linux-2.5.24/arch/mips64/config.in	Thu Jun 20 15:53:45 2002
+++ linux/arch/mips64/config.in	Thu Jun 20 16:35:45 2002
@@ -245,6 +245,8 @@
 bool 'Magic SysRq key' CONFIG_MAGIC_SYSRQ
 if [ "$CONFIG_SMP" != "y" ]; then
    bool 'Run uncached' CONFIG_MIPS_UNCACHED
+else
+   int  'Maximum number of CPUs (2-64)' CONFIG_NR_CPUS 64
 fi
 endmenu
 
diff -urN linux-2.5.24/arch/mips64/defconfig linux/arch/mips64/defconfig
--- linux-2.5.24/arch/mips64/defconfig	Thu Jun 20 15:53:47 2002
+++ linux/arch/mips64/defconfig	Thu Jun 20 16:35:45 2002
@@ -32,6 +32,7 @@
 # CONFIG_EISA is not set
 # CONFIG_MCA is not set
 # CONFIG_SBUS is not set
+CONFIG_NR_CPUS=64
 
 #
 # CPU selection
diff -urN linux-2.5.24/arch/parisc/config.in linux/arch/parisc/config.in
--- linux-2.5.24/arch/parisc/config.in	Thu Jun 20 15:53:57 2002
+++ linux/arch/parisc/config.in	Thu Jun 20 16:35:45 2002
@@ -18,6 +18,10 @@
 # bool 'Symmetric multi-processing support' CONFIG_SMP
 define_bool CONFIG_SMP n
 
+if [ "$CONFIG_SMP" = "y" ]; then
+   int  'Maximum number of CPUs (2-32)' CONFIG_NR_CPUS 32
+fi
+
 bool 'Kernel Debugger support' CONFIG_KWDB
 # define_bool CONFIG_KWDB n
 
diff -urN linux-2.5.24/arch/ppc/config.in linux/arch/ppc/config.in
--- linux-2.5.24/arch/ppc/config.in	Thu Jun 20 15:53:41 2002
+++ linux/arch/ppc/config.in	Thu Jun 20 16:35:45 2002
@@ -172,6 +172,7 @@
 bool 'Symmetric multi-processing support' CONFIG_SMP
 if [ "$CONFIG_SMP" = "y" ]; then
    bool '  Distribute interrupts on all CPUs by default' CONFIG_IRQ_ALL_CPUS
+   int  'Maximum number of CPUs (2-32)' CONFIG_NR_CPUS 32
 fi
 if [ "$CONFIG_SMP" != "y" ]; then
    bool 'Preemptible Kernel' CONFIG_PREEMPT
diff -urN linux-2.5.24/arch/ppc64/config.in linux/arch/ppc64/config.in
--- linux-2.5.24/arch/ppc64/config.in	Thu Jun 20 15:53:45 2002
+++ linux/arch/ppc64/config.in	Thu Jun 20 16:35:45 2002
@@ -21,6 +21,7 @@
 bool 'Symmetric multi-processing support' CONFIG_SMP
 if [ "$CONFIG_SMP" = "y" ]; then
   bool '  Distribute interrupts on all CPUs by default' CONFIG_IRQ_ALL_CPUS
+  int  'Maximum number of CPUs (2-64)' CONFIG_NR_CPUS 64
   if [ "$CONFIG_PPC_PSERIES" = "y" ]; then
     bool '  Hardware multithreading' CONFIG_HMT
   fi
diff -urN linux-2.5.24/arch/ppc64/defconfig linux/arch/ppc64/defconfig
--- linux-2.5.24/arch/ppc64/defconfig	Thu Jun 20 15:53:48 2002
+++ linux/arch/ppc64/defconfig	Thu Jun 20 16:35:45 2002
@@ -38,6 +38,7 @@
 CONFIG_IRQ_ALL_CPUS=y
 # CONFIG_HMT is not set
 # CONFIG_PREEMPT is not set
+CONFIG_NR_CPUS=64
 
 #
 # General setup
diff -urN linux-2.5.24/arch/s390/config.in linux/arch/s390/config.in
--- linux-2.5.24/arch/s390/config.in	Thu Jun 20 15:53:47 2002
+++ linux/arch/s390/config.in	Thu Jun 20 16:35:45 2002
@@ -20,6 +20,9 @@
 comment 'Processor type and features'
 bool 'Symmetric multi-processing support' CONFIG_SMP
 bool 'IEEE FPU emulation' CONFIG_MATHEMU
+if [ "$CONFIG_SMP" = "y" ]; then
+   int  'Maximum number of CPUs (2-32)' CONFIG_NR_CPUS 32
+fi
 endmenu
 
 mainmenu_option next_comment
diff -urN linux-2.5.24/arch/s390/defconfig linux/arch/s390/defconfig
--- linux-2.5.24/arch/s390/defconfig	Thu Jun 20 15:53:56 2002
+++ linux/arch/s390/defconfig	Thu Jun 20 16:35:45 2002
@@ -35,6 +35,7 @@
 #
 CONFIG_SMP=y
 CONFIG_MATHEMU=y
+CONFIG_NR_CPUS=64
 
 #
 # Base setup
diff -urN linux-2.5.24/arch/s390x/config.in linux/arch/s390x/config.in
--- linux-2.5.24/arch/s390x/config.in	Thu Jun 20 15:53:44 2002
+++ linux/arch/s390x/config.in	Thu Jun 20 16:35:45 2002
@@ -19,6 +19,9 @@
 mainmenu_option next_comment
 comment 'Processor type and features'
 bool 'Symmetric multi-processing support' CONFIG_SMP
+if [ "$CONFIG_SMP" = "y" ]; then
+   int  'Maximum number of CPUs (2-64)' CONFIG_NR_CPUS 64
+fi
 bool 'Kernel support for 31 bit emulation' CONFIG_S390_SUPPORT
 if [ "$CONFIG_S390_SUPPORT" = "y" ]; then
   tristate 'Kernel support for 31 bit ELF binaries' CONFIG_BINFMT_ELF32 
diff -urN linux-2.5.24/arch/s390x/defconfig linux/arch/s390x/defconfig
--- linux-2.5.24/arch/s390x/defconfig	Thu Jun 20 15:53:41 2002
+++ linux/arch/s390x/defconfig	Thu Jun 20 16:35:45 2002
@@ -36,6 +36,7 @@
 CONFIG_SMP=y
 CONFIG_S390_SUPPORT=y
 CONFIG_BINFMT_ELF32=y
+CONFIG_NR_CPUS=64
 
 #
 # Base setup
diff -urN linux-2.5.24/arch/sparc/config.in linux/arch/sparc/config.in
--- linux-2.5.24/arch/sparc/config.in	Thu Jun 20 15:53:44 2002
+++ linux/arch/sparc/config.in	Thu Jun 20 16:35:45 2002
@@ -17,6 +17,10 @@
 
 bool 'Symmetric multi-processing support (does not work on sun4/sun4c)' CONFIG_SMP
 
+if [ "$CONFIG_SMP" = "y" ]; then
+   int  'Maximum number of CPUs (2-32)' CONFIG_NR_CPUS 32
+fi
+
 # Identify this as a Sparc32 build
 define_bool CONFIG_SPARC32 y
 
diff -urN linux-2.5.24/arch/sparc64/config.in linux/arch/sparc64/config.in
--- linux-2.5.24/arch/sparc64/config.in	Thu Jun 20 15:53:49 2002
+++ linux/arch/sparc64/config.in	Thu Jun 20 16:35:45 2002
@@ -17,6 +17,10 @@
 bool 'Symmetric multi-processing support' CONFIG_SMP
 bool 'Preemptible Kernel' CONFIG_PREEMPT
 
+if [ "$CONFIG_SMP" = "y" ]; then
+   int  'Maximum number of CPUs (2-64)' CONFIG_NR_CPUS 64
+fi
+
 # Identify this as a Sparc64 build
 define_bool CONFIG_SPARC64 y
 
diff -urN linux-2.5.24/arch/sparc64/defconfig linux/arch/sparc64/defconfig
--- linux-2.5.24/arch/sparc64/defconfig	Thu Jun 20 15:53:49 2002
+++ linux/arch/sparc64/defconfig	Thu Jun 20 16:35:45 2002
@@ -63,6 +63,7 @@
 CONFIG_BINFMT_MISC=m
 # CONFIG_SUNOS_EMUL is not set
 CONFIG_SOLARIS_EMUL=m
+CONFIG_NR_CPUS=64
 
 #
 # Parallel port support
diff -urN linux-2.5.24/arch/x86_64/config.in linux/arch/x86_64/config.in
--- linux-2.5.24/arch/x86_64/config.in	Thu Jun 20 15:53:47 2002
+++ linux/arch/x86_64/config.in	Thu Jun 20 16:35:45 2002
@@ -54,6 +54,7 @@
 fi
 if [ "$CONFIG_SMP" = "y" ]; then
     define_bool CONFIG_HAVE_DEC_LOCK y
+    int  'Maximum number of CPUs (2-64)' CONFIG_NR_CPUS 64
 fi
 
 define_bool CONFIG_X86_MCE y
diff -urN linux-2.5.24/arch/x86_64/defconfig linux/arch/x86_64/defconfig
--- linux-2.5.24/arch/x86_64/defconfig	Thu Jun 20 15:53:55 2002
+++ linux/arch/x86_64/defconfig	Thu Jun 20 16:35:45 2002
@@ -51,6 +51,7 @@
 CONFIG_HAVE_DEC_LOCK=y
 CONFIG_X86_MCE=y
 # CONFIG_X86_MCE_NONFATAL is not set
+CONFIG_NR_CPUS=64
 
 #
 # Power management options
diff -urN linux-2.5.24/include/linux/threads.h linux/include/linux/threads.h
--- linux-2.5.24/include/linux/threads.h	Thu Jun 20 15:53:42 2002
+++ linux/include/linux/threads.h	Thu Jun 20 16:35:45 2002
@@ -8,10 +8,16 @@
  * /proc/sys/kernel/threads-max.
  */
  
+/*
+ * Maximum supported processors that can run under SMP.  This value is
+ * set via configure setting.  The maximum is equal to the size of the
+ * bitmasks used on that platform, i.e. 32 or 64.  Setting this smaller
+ * saves quite a bit of memory.
+ */
 #ifdef CONFIG_SMP
-#define NR_CPUS	32		/* Max processors that can be running in SMP */
+#define NR_CPUS		CONFIG_NR_CPUS
 #else
-#define NR_CPUS 1
+#define NR_CPUS		1
 #endif
 
 #define MIN_THREADS_LEFT_FOR_ROOT 4


^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2002-06-24 19:12 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2002-06-24 19:06 [PATCH] Configurable NR_CPUS for 2.5.24 Robert Love

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.