[PATCH] Driver core: Don't "lose" devices on suspend on failure
authorBenjamin Herrenschmidt <benh@kernel.crashing.org>
Tue, 31 May 2005 07:08:49 +0000 (17:08 +1000)
committerGreg Kroah-Hartman <gregkh@suse.de>
Mon, 20 Jun 2005 22:15:37 +0000 (15:15 -0700)
I think we need this patch or we might "lose" devices to the dpm_irq_off
list if a failure occurs during the suspend process.

Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
drivers/base/power/suspend.c

index 807e13fb205b92c51c9e51407f2e553e40f1ed0a..2ccee3763acfae23a3d1de899179dd5ac0ca9419 100644 (file)
@@ -114,8 +114,19 @@ int device_suspend(pm_message_t state)
                put_device(dev);
        }
        up(&dpm_list_sem);
-       if (error)
+       if (error) {
+               /* we failed... before resuming, bring back devices from
+                * dpm_off_irq list back to main dpm_off list, we do want
+                * to call resume() on them, in case they partially suspended
+                * despite returning -EAGAIN
+                */
+               while (!list_empty(&dpm_off_irq)) {
+                       struct list_head * entry = dpm_off_irq.next;
+                       list_del(entry);
+                       list_add(entry, &dpm_off);
+               }
                dpm_resume();
+       }
        up(&dpm_sem);
        return error;
 }