summaryrefslogtreecommitdiffstats
path: root/kernel/power/suspend.c
diff options
context:
space:
mode:
authorRafael J. Wysocki <rafael.j.wysocki@intel.com>2019-07-15 23:52:12 +0200
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>2019-07-23 09:46:50 +0200
commit8eb0fd3b55f084320ae511cd5a64d356cf497c83 (patch)
tree954eab7b19732b575fd55e296b65a7c32d2c3225 /kernel/power/suspend.c
parentPM: sleep: Simplify suspend-to-idle control flow (diff)
downloadlinux-8eb0fd3b55f084320ae511cd5a64d356cf497c83.tar.xz
linux-8eb0fd3b55f084320ae511cd5a64d356cf497c83.zip
PM: sleep: Integrate suspend-to-idle with generig suspend flow
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>
Diffstat (limited to 'kernel/power/suspend.c')
-rw-r--r--kernel/power/suspend.c21
1 files changed, 5 insertions, 16 deletions
diff --git a/kernel/power/suspend.c b/kernel/power/suspend.c
index 907b2be0372f..2b6057853b33 100644
--- a/kernel/power/suspend.c
+++ b/kernel/power/suspend.c
@@ -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;