ARM: 7466/1: disable interrupt before spinning endlessly
authorShawn Guo <shawn.guo@linaro.org>
Fri, 13 Jul 2012 07:19:34 +0000 (08:19 +0100)
committerBen Hutchings <ben@decadent.org.uk>
Thu, 9 Aug 2012 23:25:03 +0000 (00:25 +0100)
commit 98bd8b96b26db3399a48202318dca4aaa2515355 upstream.

The CPU will endlessly spin at the end of machine_halt and
machine_restart calls.  However, this will lead to a soft lockup
warning after about 20 seconds, if CONFIG_LOCKUP_DETECTOR is enabled,
as system timer is still alive.

Disable interrupt before going to spin endlessly, so that the lockup
warning will never be seen.

Reported-by: Marek Vasut <marex@denx.de>
Signed-off-by: Shawn Guo <shawn.guo@linaro.org>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
[bwh: Backported to 3.2: adjust context]
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
arch/arm/kernel/process.c

index 3d0c6fb..e68d251 100644 (file)
@@ -125,6 +125,7 @@ void arm_machine_restart(char mode, const char *cmd)
         */
        mdelay(1000);
        printk("Reboot failed -- System halted\n");
+       local_irq_disable();
        while (1);
 }
 
@@ -240,6 +241,7 @@ void machine_shutdown(void)
 void machine_halt(void)
 {
        machine_shutdown();
+       local_irq_disable();
        while (1);
 }