]> git.karo-electronics.de Git - linux-beck.git/blobdiff - kernel/power/suspend.c
Merge branches 'x86-fixes-for-linus', 'perf-fixes-for-linus' and 'sched-fixes-for...
[linux-beck.git] / kernel / power / suspend.c
index f37cb7dd44025ebbe6bcee2f9fc62ef5aeb8974f..ecf770509d0d1bb9dce2381716d6e7583ee6c492 100644 (file)
@@ -136,19 +136,19 @@ static int suspend_enter(suspend_state_t state)
        if (suspend_ops->prepare) {
                error = suspend_ops->prepare();
                if (error)
-                       return error;
+                       goto Platform_finish;
        }
 
        error = dpm_suspend_noirq(PMSG_SUSPEND);
        if (error) {
                printk(KERN_ERR "PM: Some devices failed to power down\n");
-               goto Platfrom_finish;
+               goto Platform_finish;
        }
 
        if (suspend_ops->prepare_late) {
                error = suspend_ops->prepare_late();
                if (error)
-                       goto Power_up_devices;
+                       goto Platform_wake;
        }
 
        if (suspend_test(TEST_PLATFORM))
@@ -163,8 +163,10 @@ static int suspend_enter(suspend_state_t state)
 
        error = sysdev_suspend(PMSG_SUSPEND);
        if (!error) {
-               if (!suspend_test(TEST_CORE))
+               if (!suspend_test(TEST_CORE) && pm_check_wakeup_events()) {
                        error = suspend_ops->enter(state);
+                       events_check_enabled = false;
+               }
                sysdev_resume();
        }
 
@@ -178,10 +180,9 @@ static int suspend_enter(suspend_state_t state)
        if (suspend_ops->wake)
                suspend_ops->wake();
 
- Power_up_devices:
        dpm_resume_noirq(PMSG_RESUME);
 
- Platfrom_finish:
+ Platform_finish:
        if (suspend_ops->finish)
                suspend_ops->finish();
 
@@ -196,7 +197,6 @@ static int suspend_enter(suspend_state_t state)
 int suspend_devices_and_enter(suspend_state_t state)
 {
        int error;
-       gfp_t saved_mask;
 
        if (!suspend_ops)
                return -ENOSYS;
@@ -207,7 +207,7 @@ int suspend_devices_and_enter(suspend_state_t state)
                        goto Close;
        }
        suspend_console();
-       saved_mask = clear_gfp_allowed_mask(GFP_IOFS);
+       pm_restrict_gfp_mask();
        suspend_test_start();
        error = dpm_suspend_start(PMSG_SUSPEND);
        if (error) {
@@ -224,7 +224,7 @@ int suspend_devices_and_enter(suspend_state_t state)
        suspend_test_start();
        dpm_resume_end(PMSG_RESUME);
        suspend_test_finish("resume devices");
-       set_gfp_allowed_mask(saved_mask);
+       pm_restore_gfp_mask();
        resume_console();
  Close:
        if (suspend_ops->end)