[PATCH] kexec: disable non-boot CPUs
From: Stephen Warren <hidden>
Date: 2012-12-20 17:59:48
Also in:
kexec, linux-tegra
On 12/20/2012 10:36 AM, Will Deacon wrote:
On Thu, Dec 20, 2012 at 05:21:56PM +0000, Stephen Warren wrote:quoted
On 12/20/2012 03:49 AM, Will Deacon wrote:quoted
If you do manage to get this merged, please can you follow up with a patch to remove the smp_kill_cpus bits from arch/arm/kernel/smp.c please? It only exists as a hook to do exactly this and currently nobody is using it afaict.I originally implemented this in arch/arm/kernel/process.c:machine_shutdown(), which currently is: void machine_shutdown(void) { #ifdef CONFIG_SMP smp_send_stop(); #endif } and I changed it to something like: void machine_shutdown(void) { #ifdef CONFIG_HOTPLUG_CPU disable_nonboot_cpus(); #elifdef CONFIG_SMP smp_send_stop(); #endif } ... but then figured that moving it up into the core kexec code would be better, so that everything always worked the same way.Hmmm, isn't this racy: requiring the secondaries to hit idle and notice they're offline and call cpu_die before the primary has replace the kernel image?
Isn't disable_nonboot_cpus() synchronous? If not, I imagine my original patch wasn't any better in this respect, except that the hotunplug happened earlier, and hence reduced the likelihood of actually seeing any such issues.
quoted
Anyway, the change above addresses Eric's concern about isolating the change to ARM. Does that seem like a reasonable thing for the ARM code to do?I think you're better off using what we currently have and hanging your code off platform_cpu_kill.
OK, I'll look into that. Joseph Lo just posted patches to implement cpu_kill() on Tegra, which was needed to fix some issues in our hotplug code anyway. Perhaps that will remove the need for any other changes...