[PATCH] ARM: reboot: disable nonboot CPUs
From: Russell King - ARM Linux <hidden>
Date: 2012-07-04 09:50:53
On Wed, Jul 04, 2012 at 09:51:02AM +0200, Per Forlin wrote:
Disable the nonboot CPUs to safely migrate tasks and interrupts to the boot CPU. This will prevent the nonboot CPUs to interfer or block the boot CPU from being able to reboot the system successfully. This reboot issue was detected on u8500 when using ab8500 to initaite a system restart. The issue happens because smp_send_stop() stops the CPUs wihouth migrating all resources. If not issuing smp_send_stop() u8500 reboots successfully. It's optional to support CONFIG_PM_SLEEP_SMP therefore smp_send_stop() can't simply be replaced by disable_nonboot_cpus()
I don't understand what or why you're trying to do this, it seems to be unreliable to rely upon conditional sleep support to make system reboot to work. Yes, we know at the moment that smp_send_stop() results in the secondary CPUs ending up spinning in the kernel, which is then potentially replaced buy whatever happens after boot, but short of creating a new per-subarch function, I don't see much other alternative. Doesn't your kernel restart trigger a system hardware reset in any case? That's about the only reliable way to do a system restart with SMP.