| From 4047727e5ae33f9b8d2b7766d1994ea6e5ec2991 Mon Sep 17 00:00:00 2001 |
| From: Mark Lord <lkml@rtr.ca> |
| Date: Mon, 1 Oct 2007 01:20:10 -0700 |
| Subject: Fix SMP poweroff hangs |
| |
| From: Mark Lord <lkml@rtr.ca> |
| |
| commit 4047727e5ae33f9b8d2b7766d1994ea6e5ec2991 from upstream |
| |
| 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: Mark Lord <mlord@pobox.com> |
| Acked-by: Thomas Gleixner <tglx@linutronix.de> |
| Cc: "Rafael J. Wysocki" <rjw@sisk.pl> |
| Signed-off-by: Andrew Morton <akpm@linux-foundation.org> |
| Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> |
| |
| --- |
| kernel/sys.c | 2 ++ |
| 1 file changed, 2 insertions(+) |
| |
| --- a/kernel/sys.c |
| +++ b/kernel/sys.c |
| @@ -31,6 +31,7 @@ |
| #include <linux/cn_proc.h> |
| #include <linux/getcpu.h> |
| #include <linux/task_io_accounting_ops.h> |
| +#include <linux/cpu.h> |
| |
| #include <linux/compat.h> |
| #include <linux/syscalls.h> |
| @@ -865,6 +866,7 @@ EXPORT_SYMBOL_GPL(kernel_halt); |
| void kernel_power_off(void) |
| { |
| kernel_shutdown_prepare(SYSTEM_POWER_OFF); |
| + disable_nonboot_cpus(); |
| printk(KERN_EMERG "Power down.\n"); |
| machine_power_off(); |
| } |