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/
This archive was generated by hypermail 2b29 : Thu Aug 07 2003 - 22:00:41 EST