aboutsummaryrefslogtreecommitdiffstats
path: root/arch/powerpc/kernel/smp.c
diff options
context:
space:
mode:
authorMichael Ellerman <michael@ozlabs.org>2011-04-11 17:46:19 -0400
committerBenjamin Herrenschmidt <benh@kernel.crashing.org>2011-04-20 03:01:18 -0400
commitde300974761d92f71cb583730ac9e1d4eb1b7156 (patch)
treebfce8daf1dec8dff5af215bcf7647f38632490d4 /arch/powerpc/kernel/smp.c
parent6c5b59b913874cae535a324a671b7ed4f17e6397 (diff)
powerpc/smp: smp_ops->kick_cpu() should be able to fail
When we start a cpu we use smp_ops->kick_cpu(), which currently returns void, it should be able to fail. Convert it to return int, and update all uses. Convert all the current error cases to return -ENOENT, which is what would eventually be returned by __cpu_up() currently when it doesn't detect the cpu as coming up in time. Signed-off-by: Michael Ellerman <michael@ellerman.id.au> Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Diffstat (limited to 'arch/powerpc/kernel/smp.c')
-rw-r--r--arch/powerpc/kernel/smp.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/arch/powerpc/kernel/smp.c b/arch/powerpc/kernel/smp.c
index cbdbb14be4b..b6083f4f39b 100644
--- a/arch/powerpc/kernel/smp.c
+++ b/arch/powerpc/kernel/smp.c
@@ -95,7 +95,7 @@ int smt_enabled_at_boot = 1;
95static void (*crash_ipi_function_ptr)(struct pt_regs *) = NULL; 95static void (*crash_ipi_function_ptr)(struct pt_regs *) = NULL;
96 96
97#ifdef CONFIG_PPC64 97#ifdef CONFIG_PPC64
98void __devinit smp_generic_kick_cpu(int nr) 98int __devinit smp_generic_kick_cpu(int nr)
99{ 99{
100 BUG_ON(nr < 0 || nr >= NR_CPUS); 100 BUG_ON(nr < 0 || nr >= NR_CPUS);
101 101
@@ -106,6 +106,8 @@ void __devinit smp_generic_kick_cpu(int nr)
106 */ 106 */
107 paca[nr].cpu_start = 1; 107 paca[nr].cpu_start = 1;
108 smp_mb(); 108 smp_mb();
109
110 return 0;
109} 111}
110#endif 112#endif
111 113
@@ -434,7 +436,11 @@ int __cpuinit __cpu_up(unsigned int cpu)
434 436
435 /* wake up cpus */ 437 /* wake up cpus */
436 DBG("smp: kicking cpu %d\n", cpu); 438 DBG("smp: kicking cpu %d\n", cpu);
437 smp_ops->kick_cpu(cpu); 439 rc = smp_ops->kick_cpu(cpu);
440 if (rc) {
441 pr_err("smp: failed starting cpu %d (rc %d)\n", cpu, rc);
442 return rc;
443 }
438 444
439 /* 445 /*
440 * wait to see if the cpu made a callin (is actually up). 446 * wait to see if the cpu made a callin (is actually up).