Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 02b73e2e authored by Will Deacon's avatar Will Deacon
Browse files

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: default avatarWill Deacon <will.deacon@arm.com>
parent 290130a1
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -2001,7 +2001,7 @@ config XIP_PHYS_ADDR

config KEXEC
	bool "Kexec system call (EXPERIMENTAL)"
	depends on EXPERIMENTAL
	depends on EXPERIMENTAL && (!SMP || HOTPLUG_CPU)
	help
	  kexec is a system call that implements the ability to shutdown your
	  current kernel, and to start another kernel.  It is like a reboot
+4 −0
Original line number Diff line number Diff line
@@ -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();
}