[v2.6.34-stable,091/213] kernel/sys.c: call disable_nonboot_cpus() in kernel_restart()

Message ID 1391630568-49251-92-git-send-email-paul.gortmaker@windriver.com
State New
Headers show

Commit Message

Paul Gortmaker Feb. 5, 2014, 8 p.m.
From: Shawn Guo <shawn.guo@linaro.org>

                   -------------------
    This is a commit scheduled for the next v2.6.34 longterm release.
    http://git.kernel.org/?p=linux/kernel/git/paulg/longterm-queue-2.6.34.git
    If you see a problem with using this for longterm, please comment.
                   -------------------

commit f96972f2dc6365421cf2366ebd61ee4cf060c8d5 upstream.

As kernel_power_off() calls disable_nonboot_cpus(), we may also want to
have kernel_restart() call disable_nonboot_cpus().  Doing so can help
machines that require boot cpu be the last alive cpu during reboot to
survive with kernel restart.

This fixes one reboot issue seen on imx6q (Cortex-A9 Quad).  The machine
requires that the restart routine be run on the primary cpu rather than
secondary ones.  Otherwise, the secondary core running the restart
routine will fail to come to online after reboot.

Signed-off-by: Shawn Guo <shawn.guo@linaro.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com>
---
 kernel/sys.c | 1 +
 1 file changed, 1 insertion(+)

Patch

diff --git a/kernel/sys.c b/kernel/sys.c
index 0324c1cd8e7b..006883113861 100644
--- a/kernel/sys.c
+++ b/kernel/sys.c
@@ -308,6 +308,7 @@  void kernel_restart_prepare(char *cmd)
 void kernel_restart(char *cmd)
 {
 	kernel_restart_prepare(cmd);
+	disable_nonboot_cpus();
 	if (!cmd)
 		printk(KERN_EMERG "Restarting system.\n");
 	else