Hi Andrew, Today's linux-next merge of the akpm tree got a conflict in arch/arm/kernel/process.c between commit 19ab428f4b79 ("ARM: 7759/1: decouple CPU offlining from reboot/shutdown") from the tree and commit ("reboot: move arch/x86 reboot= handling to generic kernel") from the akpm tree. I fixed it up (see below) and can carry the fix as necessary (no action is required). -- Cheers, Stephen Rothwell sfr@xxxxxxxxxxxxxxxx diff --cc arch/arm/kernel/process.c index 4f569dc,5cbd139..0000000 --- a/arch/arm/kernel/process.c +++ b/arch/arm/kernel/process.c @@@ -175,39 -176,16 +175,29 @@@ void arch_cpu_idle(void default_idle(); } - enum reboot_mode reboot_mode = REBOOT_HARD; - - static int __init reboot_setup(char *str) - { - if ('s' == str[0]) - reboot_mode = REBOOT_SOFT; - return 1; - } - __setup("reboot=", reboot_setup); - +/* + * Called by kexec, immediately prior to machine_kexec(). + * + * This must completely disable all secondary CPUs; simply causing those CPUs + * to execute e.g. a RAM-based pin loop is not sufficient. This allows the + * kexec'd kernel to use any and all RAM as it sees fit, without having to + * avoid any code or data used by any SW CPU pin loop. The CPU hotplug + * functionality embodied in disable_nonboot_cpus() to achieve this. + */ void machine_shutdown(void) { -#ifdef CONFIG_SMP - smp_send_stop(); -#endif + disable_nonboot_cpus(); } +/* + * Halting simply requires that the secondary CPUs stop performing any + * activity (executing tasks, handling interrupts). smp_send_stop() + * achieves this. + */ void machine_halt(void) { - machine_shutdown(); + smp_send_stop(); + local_irq_disable(); while (1); }
Attachment:
pgp91yfzIAwrO.pgp
Description: PGP signature