diff options
| author | Thomas Gleixner <tglx@linutronix.de> | 2012-04-20 09:05:44 -0400 |
|---|---|---|
| committer | Thomas Gleixner <tglx@linutronix.de> | 2012-04-26 06:06:09 -0400 |
| commit | 38498a67aa2cf8c80754b8d304bfacc10bc582b5 (patch) | |
| tree | 5d1d5ff7fd9b847454f9d5053ad0709ffb3cc32c /kernel | |
| parent | 8239c25f47d2b318156993b15f33900a86ea5e17 (diff) | |
smp: Add generic smpboot facility
Start a new file, which will hold SMP and CPU hotplug related generic
infrastructure.
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Rusty Russell <rusty@rustcorp.com.au>
Cc: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
Cc: Srivatsa S. Bhat <srivatsa.bhat@linux.vnet.ibm.com>
Cc: Matt Turner <mattst88@gmail.com>
Cc: Russell King <linux@arm.linux.org.uk>
Cc: Mike Frysinger <vapier@gentoo.org>
Cc: Jesper Nilsson <jesper.nilsson@axis.com>
Cc: Richard Kuo <rkuo@codeaurora.org>
Cc: Tony Luck <tony.luck@intel.com>
Cc: Hirokazu Takata <takata@linux-m32r.org>
Cc: Ralf Baechle <ralf@linux-mips.org>
Cc: David Howells <dhowells@redhat.com>
Cc: James E.J. Bottomley <jejb@parisc-linux.org>
Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Cc: Martin Schwidefsky <schwidefsky@de.ibm.com>
Cc: Paul Mundt <lethal@linux-sh.org>
Cc: David S. Miller <davem@davemloft.net>
Cc: Chris Metcalf <cmetcalf@tilera.com>
Cc: Richard Weinberger <richard@nod.at>
Cc: x86@kernel.org
Link: http://lkml.kernel.org/r/20120420124557.035417523@linutronix.de
Diffstat (limited to 'kernel')
| -rw-r--r-- | kernel/Makefile | 1 | ||||
| -rw-r--r-- | kernel/cpu.c | 8 | ||||
| -rw-r--r-- | kernel/smpboot.c | 14 | ||||
| -rw-r--r-- | kernel/smpboot.h | 6 |
4 files changed, 29 insertions, 0 deletions
diff --git a/kernel/Makefile b/kernel/Makefile index cb41b9547c9f..6c07f30fa9b7 100644 --- a/kernel/Makefile +++ b/kernel/Makefile | |||
| @@ -43,6 +43,7 @@ obj-$(CONFIG_DEBUG_RT_MUTEXES) += rtmutex-debug.o | |||
| 43 | obj-$(CONFIG_RT_MUTEX_TESTER) += rtmutex-tester.o | 43 | obj-$(CONFIG_RT_MUTEX_TESTER) += rtmutex-tester.o |
| 44 | obj-$(CONFIG_GENERIC_ISA_DMA) += dma.o | 44 | obj-$(CONFIG_GENERIC_ISA_DMA) += dma.o |
| 45 | obj-$(CONFIG_SMP) += smp.o | 45 | obj-$(CONFIG_SMP) += smp.o |
| 46 | obj-$(CONFIG_SMP) += smpboot.o | ||
| 46 | ifneq ($(CONFIG_SMP),y) | 47 | ifneq ($(CONFIG_SMP),y) |
| 47 | obj-y += up.o | 48 | obj-y += up.o |
| 48 | endif | 49 | endif |
diff --git a/kernel/cpu.c b/kernel/cpu.c index e711aef0fb3c..e58b99ada3d8 100644 --- a/kernel/cpu.c +++ b/kernel/cpu.c | |||
| @@ -17,6 +17,8 @@ | |||
| 17 | #include <linux/gfp.h> | 17 | #include <linux/gfp.h> |
| 18 | #include <linux/suspend.h> | 18 | #include <linux/suspend.h> |
| 19 | 19 | ||
| 20 | #include "smpboot.h" | ||
| 21 | |||
| 20 | #ifdef CONFIG_SMP | 22 | #ifdef CONFIG_SMP |
| 21 | /* Serializes the updates to cpu_online_mask, cpu_present_mask */ | 23 | /* Serializes the updates to cpu_online_mask, cpu_present_mask */ |
| 22 | static DEFINE_MUTEX(cpu_add_remove_lock); | 24 | static DEFINE_MUTEX(cpu_add_remove_lock); |
| @@ -300,6 +302,11 @@ static int __cpuinit _cpu_up(unsigned int cpu, int tasks_frozen) | |||
| 300 | return -EINVAL; | 302 | return -EINVAL; |
| 301 | 303 | ||
| 302 | cpu_hotplug_begin(); | 304 | cpu_hotplug_begin(); |
| 305 | |||
| 306 | ret = smpboot_prepare(cpu); | ||
| 307 | if (ret) | ||
| 308 | goto out; | ||
| 309 | |||
| 303 | ret = __cpu_notify(CPU_UP_PREPARE | mod, hcpu, -1, &nr_calls); | 310 | ret = __cpu_notify(CPU_UP_PREPARE | mod, hcpu, -1, &nr_calls); |
| 304 | if (ret) { | 311 | if (ret) { |
| 305 | nr_calls--; | 312 | nr_calls--; |
| @@ -320,6 +327,7 @@ static int __cpuinit _cpu_up(unsigned int cpu, int tasks_frozen) | |||
| 320 | out_notify: | 327 | out_notify: |
| 321 | if (ret != 0) | 328 | if (ret != 0) |
| 322 | __cpu_notify(CPU_UP_CANCELED | mod, hcpu, nr_calls, NULL); | 329 | __cpu_notify(CPU_UP_CANCELED | mod, hcpu, nr_calls, NULL); |
| 330 | out: | ||
| 323 | cpu_hotplug_done(); | 331 | cpu_hotplug_done(); |
| 324 | 332 | ||
| 325 | return ret; | 333 | return ret; |
diff --git a/kernel/smpboot.c b/kernel/smpboot.c new file mode 100644 index 000000000000..6dae6a3d2d59 --- /dev/null +++ b/kernel/smpboot.c | |||
| @@ -0,0 +1,14 @@ | |||
| 1 | /* | ||
| 2 | * Common SMP CPU bringup/teardown functions | ||
| 3 | */ | ||
| 4 | #include <linux/init.h> | ||
| 5 | |||
| 6 | #include "smpboot.h" | ||
| 7 | |||
| 8 | /** | ||
| 9 | * smpboot_prepare - generic smpboot preparation | ||
| 10 | */ | ||
| 11 | int __cpuinit smpboot_prepare(unsigned int cpu) | ||
| 12 | { | ||
| 13 | return 0; | ||
| 14 | } | ||
diff --git a/kernel/smpboot.h b/kernel/smpboot.h new file mode 100644 index 000000000000..d88e77165086 --- /dev/null +++ b/kernel/smpboot.h | |||
| @@ -0,0 +1,6 @@ | |||
| 1 | #ifndef SMPBOOT_H | ||
| 2 | #define SMPBOOT_H | ||
| 3 | |||
| 4 | int smpboot_prepare(unsigned int cpu); | ||
| 5 | |||
| 6 | #endif | ||
