diff -Nru -p1 linux-2.6.11-rc2-mm1/drivers/acpi/sleep/poweroff.c linux-2.6.11-rc2-mm1-mbn1/drivers/acpi/sleep/poweroff.c --- linux-2.6.11-rc2-mm1/drivers/acpi/sleep/poweroff.c 2004-12-24 22:35:39.000000000 +0100 +++ linux-2.6.11-rc2-mm1-mbn1/drivers/acpi/sleep/poweroff.c 2005-01-26 00:25:04.000000000 +0100 @@ -9,2 +9,3 @@ #include +#include #include @@ -13,2 +14,20 @@ +static void +acpi_power_off_prepare(void) +{ + if (system_state == SYSTEM_POWER_OFF) { + acpi_wakeup_gpe_poweroff_prepare(); + acpi_enter_sleep_state_prep(ACPI_STATE_S5); + } +} + +void +do_acpi_power_off_prepare(void) +{ + if (!acpi_disabled) { + acpi_power_off_prepare(); + } +} + + static void @@ -17,6 +36,6 @@ acpi_power_off (void) printk("%s called\n",__FUNCTION__); +#if 0 /* This should be made redundant by other patches.. */ /* Some SMP machines only can poweroff in boot CPU */ set_cpus_allowed(current, cpumask_of_cpu(0)); - acpi_wakeup_gpe_poweroff_prepare(); - acpi_enter_sleep_state_prep(ACPI_STATE_S5); +#endif ACPI_DISABLE_IRQS(); diff -Nru -p1 linux-2.6.11-rc2-mm1/drivers/base/power/shutdown.c linux-2.6.11-rc2-mm1-mbn1/drivers/base/power/shutdown.c --- linux-2.6.11-rc2-mm1/drivers/base/power/shutdown.c 2004-12-24 22:35:01.000000000 +0100 +++ linux-2.6.11-rc2-mm1-mbn1/drivers/base/power/shutdown.c 2005-01-26 00:26:54.000000000 +0100 @@ -64,2 +64,9 @@ void device_shutdown(void) +#if 1 + { + extern void do_acpi_power_off_prepare(void); + do_acpi_power_off_prepare(); + } +#endif + sysdev_shutdown();