lkml.org 
[lkml]   [2003]   [Aug]   [7]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
Date
From
Subject[PM] Gracefully handle errors from device_suspend()
Hi!

This makes drivers_suspend() correctly fail when some driver vetoes
the suspend. Device disable is moved after pm_send_all; that looks
more correct to me as pm_send_all may expect some mainboard devices to
still work. Few small whitespace/codingstyle fixes.

[Sorry, filename is wrong, but it should be easy to fix.]

Please apply,
Pavel

--- /usr/src/tmp/linux/kernel/suspend.c 2003-08-08 01:19:01.000000000 +0200
+++ /usr/src/linux/kernel/suspend.c 2003-08-08 01:14:26.000000000 +0200
@@ -636,19 +637,23 @@
/* 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 */
@@ -661,7 +666,7 @@
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;
@@ -868,7 +873,7 @@
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.
*
--
When do you have a heart between your knees?
[Johanka's followup: and *two* hearts?]
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/

\
 
 \ /
  Last update: 2005-03-22 13:47    [W:0.014 / U:0.104 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site