diff -urp a/kernel/power/disk.c b/kernel/power/disk.c --- a/kernel/power/disk.c 2004-11-12 05:45:35.000000000 +0800 +++ b/kernel/power/disk.c 2004-11-21 06:21:28.162720936 +0800 @@ -113,6 +113,11 @@ static inline void platform_finish(void) static void finish(void) { + unsigned long flags; + + local_irq_save(flags); + device_power_up(); + local_irq_restore(flags); device_resume(); platform_finish(); enable_nonboot_cpus(); @@ -124,6 +129,7 @@ static void finish(void) static int prepare(void) { int error; + unsigned long flags; pm_prepare_console(); @@ -147,7 +153,14 @@ static int prepare(void) if ((error = device_suspend(PM_SUSPEND_DISK))) goto Finish; + local_irq_save(flags); + if ((error = device_power_down(PM_SUSPEND_DISK))) { + local_irq_restore(flags); + goto Finish; + } + local_irq_restore(flags); return 0; + Finish: platform_finish(); Thaw: diff -urp a/kernel/power/swsusp.c b/kernel/power/swsusp.c --- a/kernel/power/swsusp.c 2004-11-12 05:45:35.000000000 +0800 +++ b/kernel/power/swsusp.c 2004-11-21 06:18:55.734893488 +0800 @@ -829,6 +829,11 @@ int suspend_prepare_image(void) int swsusp_write(void) { int error; + unsigned long flags; + + local_irq_save(flags); + device_power_up(); + local_irq_restore(flags); device_resume(); lock_swapdevices(); error = write_suspend_image();