ARM: 7405/1: kexec: call platform_cpu_kill on the killer rather than the victim
authorWill Deacon <will.deacon@arm.com>
Fri, 27 Apr 2012 11:51:43 +0000 (12:51 +0100)
committerRussell King <rmk+kernel@arm.linux.org.uk>
Sat, 28 Apr 2012 10:01:31 +0000 (11:01 +0100)
commit6fa99b7f80b4a7ed2cf616eae393bb6d9d51ba8f
treea52bc9e2d1e774125ba920ec9f269a9c3587f481
parent6a1c53124aa161eb624ce7b1e40ade728186d34c
ARM: 7405/1: kexec: call platform_cpu_kill on the killer rather than the victim

When performing a kexec on an SMP system, the secondary cores are stopped
by calling machine_shutdown(), which in turn issues IPIs to offline the
other CPUs. Unfortunately, this isn't enough to reboot the cores into
a new kernel (since they are just executing a cpu_relax loop somewhere
in memory) so we make use of platform_cpu_kill, part of the CPU hotplug
implementation, to place the cores somewhere safe. This function expects
to be called on the killing CPU for each core that it takes out.

This patch moves the platform_cpu_kill callback out of the IPI handler
and into smp_send_stop, therefore ensuring that it executes on the
killing CPU rather than on the victim, matching what the hotplug code
requires.

Cc: stable@vger.kernel.org
Reported-by: Russell King <rmk+kernel@arm.linux.org.uk>
Signed-off-by: Will Deacon <will.deacon@arm.com>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
arch/arm/kernel/smp.c