PM: Rework handling of interrupts during suspend-resume
[deliverable/linux.git] / kernel / power / main.c
index c9632f841f646fbfc146ecee855fd04068a548ae..f0a466736c011aa3b3d09091d6c1abad7242d3c5 100644 (file)
@@ -287,17 +287,19 @@ void __attribute__ ((weak)) arch_suspend_enable_irqs(void)
  */
 static int suspend_enter(suspend_state_t state)
 {
-       int error = 0;
+       int error;
 
        device_pm_lock();
-       arch_suspend_disable_irqs();
-       BUG_ON(!irqs_disabled());
 
-       if ((error = device_power_down(PMSG_SUSPEND))) {
+       error = device_power_down(PMSG_SUSPEND);
+       if (error) {
                printk(KERN_ERR "PM: Some devices failed to power down\n");
                goto Done;
        }
 
+       arch_suspend_disable_irqs();
+       BUG_ON(!irqs_disabled());
+
        error = sysdev_suspend(PMSG_SUSPEND);
        if (!error) {
                if (!suspend_test(TEST_CORE))
@@ -305,11 +307,14 @@ static int suspend_enter(suspend_state_t state)
                sysdev_resume();
        }
 
-       device_power_up(PMSG_RESUME);
- Done:
        arch_suspend_enable_irqs();
        BUG_ON(irqs_disabled());
+
+       device_power_up(PMSG_RESUME);
+
+ Done:
        device_pm_unlock();
+
        return error;
 }
 
This page took 0.026812 seconds and 5 git commands to generate.