--- arch/i386/kernel/reboot.c | 5 +++++ drivers/acpi/sleep/poweroff.c | 13 ++++++++++++- include/linux/pm.h | 1 + 3 files changed, 18 insertions(+), 1 deletion(-) Index: linux-2.6.22-rc3/include/linux/pm.h =================================================================== --- linux-2.6.22-rc3.orig/include/linux/pm.h +++ linux-2.6.22-rc3/include/linux/pm.h @@ -101,6 +101,7 @@ struct pm_dev */ extern void (*pm_idle)(void); extern void (*pm_power_off)(void); +extern void (*pm_restart_prepare)(void); typedef int __bitwise suspend_state_t; Index: linux-2.6.22-rc3/drivers/acpi/sleep/poweroff.c =================================================================== --- linux-2.6.22-rc3.orig/drivers/acpi/sleep/poweroff.c +++ linux-2.6.22-rc3/drivers/acpi/sleep/poweroff.c @@ -72,6 +72,15 @@ static struct sys_device device_acpi = { .cls = &acpi_sysclass, }; +/** + * acpi_restart_prepare - on some systems we need to switch back to the + * legacy mode before reboot if we have resumed from RAM previously + */ +static void acpi_restart_prepare(void) +{ + acpi_disable(); +} + static int acpi_poweroff_init(void) { if (!acpi_disabled) { @@ -85,8 +94,10 @@ static int acpi_poweroff_init(void) error = sysdev_class_register(&acpi_sysclass); if (!error) error = sysdev_register(&device_acpi); - if (!error) + if (!error) { pm_power_off = acpi_power_off; + pm_restart_prepare = acpi_restart_prepare; + } return error; } } Index: linux-2.6.22-rc3/arch/i386/kernel/reboot.c =================================================================== --- linux-2.6.22-rc3.orig/arch/i386/kernel/reboot.c +++ linux-2.6.22-rc3/arch/i386/kernel/reboot.c @@ -26,6 +26,9 @@ void (*pm_power_off)(void); EXPORT_SYMBOL(pm_power_off); +void (*pm_restart_prepare)(void); +EXPORT_SYMBOL(pm_restart_prepare); + static int reboot_mode; static int reboot_thru_bios; @@ -346,6 +349,8 @@ static void native_machine_emergency_res static void native_machine_restart(char * __unused) { machine_shutdown(); + if (pm_restart_prepare) + pm_restart_prepare(); machine_emergency_restart(); }