Messages in this thread Patch in this message | | | Subject | [PATCH] make pm_suspend_disk suspend/resume sysdev and dpm_off_irq | Date | Wed, 24 Nov 2004 18:18:18 +0800 | From | "Zhu, Yi" <> |
| |
Hi,
This patch makes the new swsusp code ( pm_suspend_disk since 2.6.9-rc3) call suspend/resume functions for sysdev and devices in dpm_off_irq list. Otherwise, PCI link device in the system won't provide correct interrupt for PCI devices during resume.
See the real bug report here: http://www.bughost.org/bugzilla/show_bug.cgi?id=363
Thanks, -yi
Signed-off-by: Zhu Yi <yi.zhu@intel.com>
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();[unhandled content-type:application/octet-stream]
| |