Commit 4047727e authored by Mark Lord's avatar Mark Lord Committed by Linus Torvalds

Fix SMP poweroff hangs

We need to disable all CPUs other than the boot CPU (usually 0) before
attempting to power-off modern SMP machines.  This fixes the
hang-on-poweroff issue on my MythTV SMP box, and also on Thomas Gleixner's
new toybox.
Signed-off-by: default avatarMark Lord <mlord@pobox.com>
Acked-by: default avatarThomas Gleixner <tglx@linutronix.de>
Cc: "Rafael J. Wysocki" <rjw@sisk.pl>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent 281e0e3b
...@@ -32,6 +32,7 @@ ...@@ -32,6 +32,7 @@
#include <linux/getcpu.h> #include <linux/getcpu.h>
#include <linux/task_io_accounting_ops.h> #include <linux/task_io_accounting_ops.h>
#include <linux/seccomp.h> #include <linux/seccomp.h>
#include <linux/cpu.h>
#include <linux/compat.h> #include <linux/compat.h>
#include <linux/syscalls.h> #include <linux/syscalls.h>
...@@ -878,6 +879,7 @@ void kernel_power_off(void) ...@@ -878,6 +879,7 @@ void kernel_power_off(void)
kernel_shutdown_prepare(SYSTEM_POWER_OFF); kernel_shutdown_prepare(SYSTEM_POWER_OFF);
if (pm_power_off_prepare) if (pm_power_off_prepare)
pm_power_off_prepare(); pm_power_off_prepare();
disable_nonboot_cpus();
sysdev_shutdown(); sysdev_shutdown();
printk(KERN_EMERG "Power down.\n"); printk(KERN_EMERG "Power down.\n");
machine_power_off(); machine_power_off();
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment