summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPatrick Mochel <mochel@osdl.org>2003-08-12 20:03:47 -0700
committerPatrick Mochel <mochel@osdl.org>2003-08-12 20:03:47 -0700
commit86aa5b107fca2ecd606cc9a4f5b81b4f05790c1b (patch)
tree7f5791f2159f2bc2258c9494cab86937ffcf07c4
parentcad2b8ef9633861df70a6791a34e55d24022b998 (diff)
[power] Check device_suspend() return value in swsusp.
From Pavel Machek.
-rw-r--r--kernel/power/swsusp.c20
1 files changed, 12 insertions, 8 deletions
diff --git a/kernel/power/swsusp.c b/kernel/power/swsusp.c
index b9cd4bd18358..4ef3892bc04b 100644
--- a/kernel/power/swsusp.c
+++ b/kernel/power/swsusp.c
@@ -479,19 +479,23 @@ static void drivers_unsuspend(void)
/* Called from process context */
static int drivers_suspend(void)
{
- device_suspend(4, SUSPEND_NOTIFY);
- device_suspend(4, SUSPEND_SAVE_STATE);
- device_suspend(4, SUSPEND_DISABLE);
- if(!pm_suspend_state) {
+ if (device_suspend(4, SUSPEND_NOTIFY))
+ return -EIO;
+ if (device_suspend(4, SUSPEND_SAVE_STATE)) {
+ device_resume(RESUME_RESTORE_STATE);
+ return -EIO;
+ }
+ if (!pm_suspend_state) {
if(pm_send_all(PM_SUSPEND,(void *)3)) {
printk(KERN_WARNING "Problem while sending suspend event\n");
- return(1);
+ return -EIO;
}
pm_suspend_state=1;
} else
printk(KERN_WARNING "PM suspend state already raised\n");
+ device_suspend(4, SUSPEND_DISABLE);
- return(0);
+ return 0;
}
#define RESUME_PHASE1 1 /* Called from interrupts disabled */
@@ -504,7 +508,7 @@ static void drivers_resume(int flags)
device_resume(RESUME_ENABLE);
}
if (flags & RESUME_PHASE2) {
- if(pm_suspend_state) {
+ if (pm_suspend_state) {
if(pm_send_all(PM_RESUME,(void *)0))
printk(KERN_WARNING "Problem while sending resume event\n");
pm_suspend_state=0;
@@ -715,7 +719,7 @@ static void do_software_suspend(void)
blk_run_queues();
/* Save state of all device drivers, and stop them. */
- if(drivers_suspend()==0)
+ if (drivers_suspend()==0)
/* If stopping device drivers worked, we proceed basically into
* suspend_save_image.
*