diff options
author | Tejun Heo <tj@kernel.org> | 2009-03-30 06:07:44 -0400 |
---|---|---|
committer | Tejun Heo <tj@kernel.org> | 2009-06-24 02:13:35 -0400 |
commit | e74e396204bfcb67570ba4517b08f5918e69afea (patch) | |
tree | df57c859e10f7fcbe5790e9b51a106d5bccfe8dc /arch | |
parent | 0017c869ddcb73069905d09f9e98e68627466237 (diff) |
percpu: use dynamic percpu allocator as the default percpu allocator
This patch makes most !CONFIG_HAVE_SETUP_PER_CPU_AREA archs use
dynamic percpu allocator. The first chunk is allocated using
embedding helper and 8k is reserved for modules. This ensures that
the new allocator behaves almost identically to the original allocator
as long as static percpu variables are concerned, so it shouldn't
introduce much breakage.
s390 and alpha use custom SHIFT_PERCPU_PTR() to work around addressing
range limit the addressing model imposes. Unfortunately, this breaks
if the address is specified using a variable, so for now, the two
archs aren't converted.
The following architectures are affected by this change.
* sh
* arm
* cris
* mips
* sparc(32)
* blackfin
* avr32
* parisc (broken, under investigation)
* m32r
* powerpc(32)
As this change makes the dynamic allocator the default one,
CONFIG_HAVE_DYNAMIC_PER_CPU_AREA is replaced with its invert -
CONFIG_HAVE_LEGACY_PER_CPU_AREA, which is added to yet-to-be converted
archs. These archs implement their own setup_per_cpu_areas() and the
conversion is not trivial.
* powerpc(64)
* sparc(64)
* ia64
* alpha
* s390
Boot and batch alloc/free tests on x86_32 with debug code (x86_32
doesn't use default first chunk initialization). Compile tested on
sparc(32), powerpc(32), arm and alpha.
Kyle McMartin reported that this change breaks parisc. The problem is
still under investigation and he is okay with pushing this patch
forward and fixing parisc later.
[ Impact: use dynamic allocator for most archs w/o custom percpu setup ]
Signed-off-by: Tejun Heo <tj@kernel.org>
Acked-by: Rusty Russell <rusty@rustcorp.com.au>
Acked-by: David S. Miller <davem@davemloft.net>
Acked-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Acked-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
Reviewed-by: Christoph Lameter <cl@linux.com>
Cc: Paul Mundt <lethal@linux-sh.org>
Cc: Russell King <rmk@arm.linux.org.uk>
Cc: Mikael Starvik <starvik@axis.com>
Cc: Ralf Baechle <ralf@linux-mips.org>
Cc: Bryan Wu <cooloney@kernel.org>
Cc: Kyle McMartin <kyle@mcmartin.ca>
Cc: Matthew Wilcox <matthew@wil.cx>
Cc: Grant Grundler <grundler@parisc-linux.org>
Cc: Hirokazu Takata <takata@linux-m32r.org>
Cc: Richard Henderson <rth@twiddle.net>
Cc: Ivan Kokshaysky <ink@jurassic.park.msu.ru>
Cc: Heiko Carstens <heiko.carstens@de.ibm.com>
Cc: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to 'arch')
-rw-r--r-- | arch/alpha/Kconfig | 3 | ||||
-rw-r--r-- | arch/ia64/Kconfig | 3 | ||||
-rw-r--r-- | arch/powerpc/Kconfig | 3 | ||||
-rw-r--r-- | arch/s390/Kconfig | 3 | ||||
-rw-r--r-- | arch/sparc/Kconfig | 3 | ||||
-rw-r--r-- | arch/x86/Kconfig | 3 |
6 files changed, 15 insertions, 3 deletions
diff --git a/arch/alpha/Kconfig b/arch/alpha/Kconfig index 9fb8aae5c391..05d86407188c 100644 --- a/arch/alpha/Kconfig +++ b/arch/alpha/Kconfig | |||
@@ -70,6 +70,9 @@ config AUTO_IRQ_AFFINITY | |||
70 | depends on SMP | 70 | depends on SMP |
71 | default y | 71 | default y |
72 | 72 | ||
73 | config HAVE_LEGACY_PER_CPU_AREA | ||
74 | def_bool y | ||
75 | |||
73 | source "init/Kconfig" | 76 | source "init/Kconfig" |
74 | source "kernel/Kconfig.freezer" | 77 | source "kernel/Kconfig.freezer" |
75 | 78 | ||
diff --git a/arch/ia64/Kconfig b/arch/ia64/Kconfig index 170042b420d4..328d2f8b8c3f 100644 --- a/arch/ia64/Kconfig +++ b/arch/ia64/Kconfig | |||
@@ -89,6 +89,9 @@ config GENERIC_TIME_VSYSCALL | |||
89 | bool | 89 | bool |
90 | default y | 90 | default y |
91 | 91 | ||
92 | config HAVE_LEGACY_PER_CPU_AREA | ||
93 | def_bool y | ||
94 | |||
92 | config HAVE_SETUP_PER_CPU_AREA | 95 | config HAVE_SETUP_PER_CPU_AREA |
93 | def_bool y | 96 | def_bool y |
94 | 97 | ||
diff --git a/arch/powerpc/Kconfig b/arch/powerpc/Kconfig index bf6cedfa05db..a774c2acbe69 100644 --- a/arch/powerpc/Kconfig +++ b/arch/powerpc/Kconfig | |||
@@ -46,6 +46,9 @@ config GENERIC_HARDIRQS_NO__DO_IRQ | |||
46 | bool | 46 | bool |
47 | default y | 47 | default y |
48 | 48 | ||
49 | config HAVE_LEGACY_PER_CPU_AREA | ||
50 | def_bool PPC64 | ||
51 | |||
49 | config HAVE_SETUP_PER_CPU_AREA | 52 | config HAVE_SETUP_PER_CPU_AREA |
50 | def_bool PPC64 | 53 | def_bool PPC64 |
51 | 54 | ||
diff --git a/arch/s390/Kconfig b/arch/s390/Kconfig index a14dba0e4d67..f4a3cc62d28f 100644 --- a/arch/s390/Kconfig +++ b/arch/s390/Kconfig | |||
@@ -75,6 +75,9 @@ config VIRT_CPU_ACCOUNTING | |||
75 | config ARCH_SUPPORTS_DEBUG_PAGEALLOC | 75 | config ARCH_SUPPORTS_DEBUG_PAGEALLOC |
76 | def_bool y | 76 | def_bool y |
77 | 77 | ||
78 | config HAVE_LEGACY_PER_CPU_AREA | ||
79 | def_bool y | ||
80 | |||
78 | mainmenu "Linux Kernel Configuration" | 81 | mainmenu "Linux Kernel Configuration" |
79 | 82 | ||
80 | config S390 | 83 | config S390 |
diff --git a/arch/sparc/Kconfig b/arch/sparc/Kconfig index 3f8b6a92eabd..7a8698b913fe 100644 --- a/arch/sparc/Kconfig +++ b/arch/sparc/Kconfig | |||
@@ -92,6 +92,9 @@ config AUDIT_ARCH | |||
92 | bool | 92 | bool |
93 | default y | 93 | default y |
94 | 94 | ||
95 | config HAVE_LEGACY_PER_CPU_AREA | ||
96 | def_bool y if SPARC64 | ||
97 | |||
95 | config HAVE_SETUP_PER_CPU_AREA | 98 | config HAVE_SETUP_PER_CPU_AREA |
96 | def_bool y if SPARC64 | 99 | def_bool y if SPARC64 |
97 | 100 | ||
diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig index d1430ef6b4f9..a48a90076d83 100644 --- a/arch/x86/Kconfig +++ b/arch/x86/Kconfig | |||
@@ -149,9 +149,6 @@ config ARCH_HAS_CACHE_LINE_SIZE | |||
149 | config HAVE_SETUP_PER_CPU_AREA | 149 | config HAVE_SETUP_PER_CPU_AREA |
150 | def_bool y | 150 | def_bool y |
151 | 151 | ||
152 | config HAVE_DYNAMIC_PER_CPU_AREA | ||
153 | def_bool y | ||
154 | |||
155 | config HAVE_CPUMASK_OF_CPU_MAP | 152 | config HAVE_CPUMASK_OF_CPU_MAP |
156 | def_bool X86_64_SMP | 153 | def_bool X86_64_SMP |
157 | 154 | ||