[PATCH] make pm_suspend_disk suspend/resume sysdev and dpm_off_irq

From: Zhu, Yi
Date: Wed Nov 24 2004 - 05:21:49 EST



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@xxxxxxxxx>

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();

Attachment: swsusp-sysdev.patch
Description: swsusp-sysdev.patch