ソースを参照

[PATCH] Configurable NODES_SHIFT

Current implementations define NODES_SHIFT in include/asm-xxx/numnodes.h for
each arch.  Its definition is sometimes configurable.  Indeed, ia64 defines 5
NODES_SHIFT values in the current git tree.  But it looks a bit messy.

SGI-SN2(ia64) system requires 1024 nodes, and the number of nodes already has
been changeable by config.  Suitable node's number may be changed in the
future even if it is other architecture.  So, I wrote configurable node's
number.

This patch set defines just default value for each arch which needs multi
nodes except ia64.  But, it is easy to change to configurable if necessary.

On ia64 the number of nodes can be already configured in generic ia64 and SN2
config.  But, NODES_SHIFT is defined for DIG64 and HP'S machine too.  So, I
changed it so that all platforms can be configured via CONFIG_NODES_SHIFT.  It
would be simpler.

See also: http://marc.theaimsgroup.com/?l=linux-kernel&m=114358010523896&w=2

Signed-off-by: Yasunori Goto <y-goto@jp.fujitsu.com>
Cc: Hirokazu Takata <takata@linux-m32r.org>
Cc: "Luck, Tony" <tony.luck@intel.com>
Cc: Andi Kleen <ak@muc.de>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Cc: Ivan Kokshaysky <ink@jurassic.park.msu.ru>
Cc: Richard Henderson <rth@twiddle.net>
Cc: Kyle McMartin <kyle@mcmartin.ca>
Cc: Russell King <rmk@arm.linux.org.uk>
Cc: Ralf Baechle <ralf@linux-mips.org>
Cc: Jack Steiner <steiner@sgi.com>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Yasunori Goto 19 年 前
コミット
c80d79d746

+ 5 - 0
arch/alpha/Kconfig

@@ -549,6 +549,11 @@ config NUMA
 	  Access).  This option is for configuring high-end multiprocessor
 	  Access).  This option is for configuring high-end multiprocessor
 	  server machines.  If in doubt, say N.
 	  server machines.  If in doubt, say N.
 
 
+config NODES_SHIFT
+	int
+	default "7"
+	depends on NEED_MULTIPLE_NODES
+
 # LARGE_VMALLOC is racy, if you *really* need it then fix it first
 # LARGE_VMALLOC is racy, if you *really* need it then fix it first
 config ALPHA_LARGE_VMALLOC
 config ALPHA_LARGE_VMALLOC
 	bool
 	bool

+ 6 - 0
arch/arm/Kconfig

@@ -512,6 +512,12 @@ config ARCH_DISCONTIGMEM_ENABLE
 	  or have huge holes in the physical address space for other reasons.
 	  or have huge holes in the physical address space for other reasons.
 	  See <file:Documentation/vm/numa> for more.
 	  See <file:Documentation/vm/numa> for more.
 
 
+config NODES_SHIFT
+	int
+	default "4" if ARCH_LH7A40X
+	default "2"
+	depends on NEED_MULTIPLE_NODES
+
 source "mm/Kconfig"
 source "mm/Kconfig"
 
 
 config LEDS
 config LEDS

+ 6 - 0
arch/i386/Kconfig

@@ -522,6 +522,12 @@ config NUMA
 comment "NUMA (Summit) requires SMP, 64GB highmem support, ACPI"
 comment "NUMA (Summit) requires SMP, 64GB highmem support, ACPI"
 	depends on X86_SUMMIT && (!HIGHMEM64G || !ACPI)
 	depends on X86_SUMMIT && (!HIGHMEM64G || !ACPI)
 
 
+config NODES_SHIFT
+	int
+	default "4" if X86_NUMAQ
+	default "3"
+	depends on NEED_MULTIPLE_NODES
+
 config HAVE_ARCH_BOOTMEM_NODE
 config HAVE_ARCH_BOOTMEM_NODE
 	bool
 	bool
 	depends on NUMA
 	depends on NUMA

+ 10 - 9
arch/ia64/Kconfig

@@ -260,15 +260,6 @@ config NR_CPUS
 	  than 64 will cause the use of a CPU mask array, causing a small
 	  than 64 will cause the use of a CPU mask array, causing a small
 	  performance hit.
 	  performance hit.
 
 
-config IA64_NR_NODES
-	int "Maximum number of NODEs (256-1024)" if (IA64_SGI_SN2 || IA64_GENERIC)
-	range 256 1024
-	depends on IA64_SGI_SN2 || IA64_GENERIC
-	default "256"
-	help
-	  This option specifies the maximum number of nodes in your SSI system.
-	  If in doubt, use the default.
-
 config HOTPLUG_CPU
 config HOTPLUG_CPU
 	bool "Support for hot-pluggable CPUs (EXPERIMENTAL)"
 	bool "Support for hot-pluggable CPUs (EXPERIMENTAL)"
 	depends on SMP && EXPERIMENTAL
 	depends on SMP && EXPERIMENTAL
@@ -352,6 +343,16 @@ config NUMA
 	  Access).  This option is for configuring high-end multiprocessor
 	  Access).  This option is for configuring high-end multiprocessor
 	  server systems.  If in doubt, say N.
 	  server systems.  If in doubt, say N.
 
 
+config NODES_SHIFT
+	int "Max num nodes shift(3-10)"
+	range 3 10
+	default "8"
+	depends on NEED_MULTIPLE_NODES
+	help
+	  This option specifies the maximum number of nodes in your SSI system.
+	  MAX_NUMNODES will be 2^(This value).
+	  If in doubt, use the default.
+
 # VIRTUAL_MEM_MAP and FLAT_NODE_MEM_MAP are functionally equivalent.
 # VIRTUAL_MEM_MAP and FLAT_NODE_MEM_MAP are functionally equivalent.
 # VIRTUAL_MEM_MAP has been retained for historical reasons.
 # VIRTUAL_MEM_MAP has been retained for historical reasons.
 config VIRTUAL_MEM_MAP
 config VIRTUAL_MEM_MAP

+ 5 - 0
arch/m32r/Kconfig

@@ -285,6 +285,11 @@ config NUMA
 	depends on SMP && BROKEN
 	depends on SMP && BROKEN
 	default n
 	default n
 
 
+config NODES_SHIFT
+	int
+	default "1"
+	depends on NEED_MULTIPLE_NODES
+
 # turning this on wastes a bunch of space.
 # turning this on wastes a bunch of space.
 # Summit needs it only when NUMA is on
 # Summit needs it only when NUMA is on
 config BOOT_IOREMAP
 config BOOT_IOREMAP

+ 5 - 0
arch/mips/Kconfig

@@ -1590,6 +1590,11 @@ config ARCH_FLATMEM_ENABLE
 	def_bool y
 	def_bool y
 	depends on !NUMA
 	depends on !NUMA
 
 
+config NODES_SHIFT
+	int
+	default "6"
+	depends on NEED_MULTIPLE_NODES
+
 source "mm/Kconfig"
 source "mm/Kconfig"
 
 
 config SMP
 config SMP

+ 5 - 0
arch/parisc/Kconfig

@@ -177,6 +177,11 @@ config ARCH_DISCONTIGMEM_DEFAULT
 	def_bool y
 	def_bool y
 	depends on ARCH_DISCONTIGMEM_ENABLE
 	depends on ARCH_DISCONTIGMEM_ENABLE
 
 
+config NODES_SHIFT
+	int
+	default "3"
+	depends on NEED_MULTIPLE_NODES
+
 source "kernel/Kconfig.preempt"
 source "kernel/Kconfig.preempt"
 source "kernel/Kconfig.hz"
 source "kernel/Kconfig.hz"
 source "mm/Kconfig"
 source "mm/Kconfig"

+ 5 - 0
arch/powerpc/Kconfig

@@ -649,6 +649,11 @@ config NUMA
 	depends on PPC64
 	depends on PPC64
 	default y if SMP && PPC_PSERIES
 	default y if SMP && PPC_PSERIES
 
 
+config NODES_SHIFT
+	int
+	default "4"
+	depends on NEED_MULTIPLE_NODES
+
 config ARCH_SELECT_MEMORY_MODEL
 config ARCH_SELECT_MEMORY_MODEL
 	def_bool y
 	def_bool y
 	depends on PPC64
 	depends on PPC64

+ 5 - 0
arch/sh/Kconfig

@@ -527,6 +527,11 @@ config CPU_HAS_SR_RB
 	  See <file:Documentation/sh/register-banks.txt> for further
 	  See <file:Documentation/sh/register-banks.txt> for further
 	  information on SR.RB and register banking in the kernel in general.
 	  information on SR.RB and register banking in the kernel in general.
 
 
+config NODES_SHIFT
+	int
+	default "1"
+	depends on NEED_MULTIPLE_NODES
+
 endmenu
 endmenu
 
 
 menu "Boot options"
 menu "Boot options"

+ 5 - 0
arch/x86_64/Kconfig

@@ -288,6 +288,11 @@ config K8_NUMA
 	 Northbridge of Opteron. It is recommended to use X86_64_ACPI_NUMA
 	 Northbridge of Opteron. It is recommended to use X86_64_ACPI_NUMA
 	 instead, which also takes priority if both are compiled in.   
 	 instead, which also takes priority if both are compiled in.   
 
 
+config NODES_SHIFT
+	int
+	default "6"
+	depends on NEED_MULTIPLE_NODES
+
 # Dummy CONFIG option to select ACPI_NUMA from drivers/acpi/Kconfig.
 # Dummy CONFIG option to select ACPI_NUMA from drivers/acpi/Kconfig.
 
 
 config X86_64_ACPI_NUMA
 config X86_64_ACPI_NUMA

+ 0 - 7
include/asm-alpha/numnodes.h

@@ -1,7 +0,0 @@
-#ifndef _ASM_MAX_NUMNODES_H
-#define _ASM_MAX_NUMNODES_H
-
-/* Max 128 Nodes - Marvel */
-#define NODES_SHIFT	7
-
-#endif /* _ASM_MAX_NUMNODES_H */

+ 0 - 2
include/asm-arm/arch-lh7a40x/memory.h

@@ -31,8 +31,6 @@
 
 
 #ifdef CONFIG_DISCONTIGMEM
 #ifdef CONFIG_DISCONTIGMEM
 
 
-#define NODES_SHIFT	4	/* Up to 16 nodes */
-
 /*
 /*
  * Given a kernel address, find the home node of the underlying memory.
  * Given a kernel address, find the home node of the underlying memory.
  */
  */

+ 0 - 26
include/asm-arm/numnodes.h

@@ -1,26 +0,0 @@
-/*
- *  linux/include/asm-arm/numnodes.h
- *
- *  Copyright (C) 2002 Russell King
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation.
- */
-
-/* This declaration for the size of the NUMA (CONFIG_DISCONTIGMEM)
- * memory node table is the default.
- *
- * A good place to override this value is include/asm/arch/memory.h.
- */
-
-#ifndef __ASM_ARM_NUMNODES_H
-#define __ASM_ARM_NUMNODES_H
-
-#include <asm/memory.h>
-
-#ifndef NODES_SHIFT
-# define NODES_SHIFT	2	/* Normally, Max 4 Nodes */
-#endif
-
-#endif

+ 0 - 18
include/asm-i386/numnodes.h

@@ -1,18 +0,0 @@
-#ifndef _ASM_MAX_NUMNODES_H
-#define _ASM_MAX_NUMNODES_H
-
-#include <linux/config.h>
-
-#ifdef CONFIG_X86_NUMAQ
-
-/* Max 16 Nodes */
-#define NODES_SHIFT	4
-
-#elif defined(CONFIG_ACPI_SRAT)
-
-/* Max 8 Nodes */
-#define NODES_SHIFT	3
-
-#endif /* CONFIG_X86_NUMAQ */
-
-#endif /* _ASM_MAX_NUMNODES_H */

+ 0 - 20
include/asm-ia64/numnodes.h

@@ -1,20 +0,0 @@
-#ifndef _ASM_MAX_NUMNODES_H
-#define _ASM_MAX_NUMNODES_H
-
-#ifdef CONFIG_IA64_DIG
-/* Max 8 Nodes */
-#  define NODES_SHIFT	3
-#elif defined(CONFIG_IA64_HP_ZX1) || defined(CONFIG_IA64_HP_ZX1_SWIOTLB)
-/* Max 32 Nodes */
-#  define NODES_SHIFT	5
-#elif defined(CONFIG_IA64_SGI_SN2) || defined(CONFIG_IA64_GENERIC)
-#  if CONFIG_IA64_NR_NODES == 256
-#    define NODES_SHIFT	8
-#  elif CONFIG_IA64_NR_NODES <= 512
-#    define NODES_SHIFT    9
-#  elif CONFIG_IA64_NR_NODES <= 1024
-#    define NODES_SHIFT    10
-#  endif
-#endif
-
-#endif /* _ASM_MAX_NUMNODES_H */

+ 0 - 15
include/asm-m32r/numnodes.h

@@ -1,15 +0,0 @@
-#ifndef _ASM_NUMNODES_H_
-#define _ASM_NUMNODES_H_
-
-#include <linux/config.h>
-
-#ifdef CONFIG_DISCONTIGMEM
-
-#if defined(CONFIG_CHIP_M32700)
-#define	NODES_SHIFT	1	/* Max 2 Nodes */
-#endif	/* CONFIG_CHIP_M32700 */
-
-#endif	/* CONFIG_DISCONTIGMEM */
-
-#endif	/* _ASM_NUMNODES_H_ */
-

+ 0 - 7
include/asm-mips/numnodes.h

@@ -1,7 +0,0 @@
-#ifndef _ASM_MAX_NUMNODES_H
-#define _ASM_MAX_NUMNODES_H
-
-/* Max 128 Nodes */
-#define NODES_SHIFT	6
-
-#endif /* _ASM_MAX_NUMNODES_H */

+ 0 - 7
include/asm-parisc/numnodes.h

@@ -1,7 +0,0 @@
-#ifndef _ASM_MAX_NUMNODES_H
-#define _ASM_MAX_NUMNODES_H
-
-/* Max 8 Nodes */
-#define NODES_SHIFT	3
-
-#endif /* _ASM_MAX_NUMNODES_H */

+ 0 - 9
include/asm-powerpc/numnodes.h

@@ -1,9 +0,0 @@
-#ifndef _ASM_POWERPC_MAX_NUMNODES_H
-#define _ASM_POWERPC_MAX_NUMNODES_H
-#ifdef __KERNEL__
-
-/* Max 16 Nodes */
-#define NODES_SHIFT	4
-
-#endif /* __KERNEL__ */
-#endif /* _ASM_POWERPC_MAX_NUMNODES_H */

+ 0 - 7
include/asm-sh/numnodes.h

@@ -1,7 +0,0 @@
-#ifndef _ASM_MAX_NUMNODES_H
-#define _ASM_MAX_NUMNODES_H
-
-/* Max 2 Nodes */
-#define NODES_SHIFT	1
-
-#endif /* _ASM_MAX_NUMNODES_H */

+ 0 - 1
include/asm-x86_64/numa.h

@@ -2,7 +2,6 @@
 #define _ASM_X8664_NUMA_H 1
 #define _ASM_X8664_NUMA_H 1
 
 
 #include <linux/nodemask.h>
 #include <linux/nodemask.h>
-#include <asm/numnodes.h>
 
 
 struct bootnode {
 struct bootnode {
 	u64 start,end; 
 	u64 start,end; 

+ 0 - 10
include/asm-x86_64/numnodes.h

@@ -1,10 +0,0 @@
-#ifndef _ASM_X8664_NUMNODES_H
-#define _ASM_X8664_NUMNODES_H 1
-
-#include <linux/config.h>
-
-#ifdef CONFIG_NUMA
-#define NODES_SHIFT	6
-#endif
-
-#endif

+ 3 - 5
include/linux/numa.h

@@ -3,11 +3,9 @@
 
 
 #include <linux/config.h>
 #include <linux/config.h>
 
 
-#ifndef CONFIG_FLATMEM
-#include <asm/numnodes.h>
-#endif
-
-#ifndef NODES_SHIFT
+#ifdef CONFIG_NODES_SHIFT
+#define NODES_SHIFT     CONFIG_NODES_SHIFT
+#else
 #define NODES_SHIFT     0
 #define NODES_SHIFT     0
 #endif
 #endif