]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
PM: sleep: Integrate suspend-to-idle with generig suspend flow
authorRafael J. Wysocki <rafael.j.wysocki@intel.com>
Mon, 15 Jul 2019 21:52:12 +0000 (23:52 +0200)
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>
Tue, 23 Jul 2019 07:46:50 +0000 (09:46 +0200)
After previous changes the suspend-to-idle code flow can be
integrated more tightly with the generic system suspend code flow
by making suspend_enter() call s2idle_loop() later and removing
the direct invocations of dpm_noirq_begin(),
dpm_noirq_suspend_devices(), dpm_noirq_end(), and
dpm_noirq_resume_devices() from the latter, so do that.

This change is not expected to alter functionality.

Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Acked-by: Thomas Gleixner <tglx@linutronix.de>
kernel/power/suspend.c

index 907b2be0372fbbe2d584323b2ad5627291f8977a..2b6057853b3343ea566abefdca2ac8bb6fefae4d 100644 (file)
@@ -119,13 +119,6 @@ static void s2idle_enter(void)
 
 static void s2idle_loop(void)
 {
-       int error;
-
-       dpm_noirq_begin();
-       error = dpm_noirq_suspend_devices(PMSG_SUSPEND);
-       if (error)
-               goto resume;
-
        pm_pr_dbg("suspend-to-idle\n");
 
        /*
@@ -150,10 +143,6 @@ static void s2idle_loop(void)
        }
 
        pm_pr_dbg("resume from suspend-to-idle\n");
-
-resume:
-       dpm_noirq_resume_devices(PMSG_RESUME);
-       dpm_noirq_end();
 }
 
 void s2idle_wake(void)
@@ -408,11 +397,6 @@ static int suspend_enter(suspend_state_t state, bool *wakeup)
        if (error)
                goto Devices_early_resume;
 
-       if (state == PM_SUSPEND_TO_IDLE && pm_test_level != TEST_PLATFORM) {
-               s2idle_loop();
-               goto Platform_early_resume;
-       }
-
        error = dpm_suspend_noirq(PMSG_SUSPEND);
        if (error) {
                pr_err("noirq suspend of devices failed\n");
@@ -425,6 +409,11 @@ static int suspend_enter(suspend_state_t state, bool *wakeup)
        if (suspend_test(TEST_PLATFORM))
                goto Platform_wake;
 
+       if (state == PM_SUSPEND_TO_IDLE) {
+               s2idle_loop();
+               goto Platform_wake;
+       }
+
        error = suspend_disable_secondary_cpus();
        if (error || suspend_test(TEST_CPUS))
                goto Enable_cpus;