diff options
author | Will Deacon <will.deacon@arm.com> | 2011-06-06 15:49:23 +0100 |
---|---|---|
committer | Will Deacon <will.deacon@arm.com> | 2011-12-12 16:07:35 +0000 |
commit | 02b73e2e9c288cbbb6ec96bef628cf08e29824c4 (patch) | |
tree | 0cf7662397eee9f2f2059c5bef8fedbdacad360a /arch/arm/kernel | |
parent | 290130a17718c1451bb8a77a5e2510e0279bd5f3 (diff) | |
download | linux-02b73e2e9c288cbbb6ec96bef628cf08e29824c4.tar.bz2 |
ARM: stop: execute platform callback from cpu_stop code
Sending IPI_CPU_STOP to a CPU causes it to execute a busy cpu_relax
loop forever. This makes it impossible to kexec successfully on an SMP
system since the secondary CPUs do not reset.
This patch adds a callback to platform_cpu_kill, defined when
CONFIG_HOTPLUG_CPU=y, from the ipi_cpu_stop handling code. This function
currently just returns 1 on all platforms that define it but allows them
to do something more sophisticated in the future.
Signed-off-by: Will Deacon <will.deacon@arm.com>
Diffstat (limited to 'arch/arm/kernel')
-rw-r--r-- | arch/arm/kernel/smp.c | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/arch/arm/kernel/smp.c b/arch/arm/kernel/smp.c index 76ff28d87bf3..57db122a4f62 100644 --- a/arch/arm/kernel/smp.c +++ b/arch/arm/kernel/smp.c @@ -522,6 +522,10 @@ static void ipi_cpu_stop(unsigned int cpu) local_fiq_disable(); local_irq_disable(); +#ifdef CONFIG_HOTPLUG_CPU + platform_cpu_kill(cpu); +#endif + while (1) cpu_relax(); } |