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>
This commit is contained in:
@@ -119,13 +119,6 @@ static void s2idle_enter(void)
|
|||||||
|
|
||||||
static void s2idle_loop(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");
|
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");
|
pm_pr_dbg("resume from suspend-to-idle\n");
|
||||||
|
|
||||||
resume:
|
|
||||||
dpm_noirq_resume_devices(PMSG_RESUME);
|
|
||||||
dpm_noirq_end();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void s2idle_wake(void)
|
void s2idle_wake(void)
|
||||||
@@ -408,11 +397,6 @@ static int suspend_enter(suspend_state_t state, bool *wakeup)
|
|||||||
if (error)
|
if (error)
|
||||||
goto Devices_early_resume;
|
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);
|
error = dpm_suspend_noirq(PMSG_SUSPEND);
|
||||||
if (error) {
|
if (error) {
|
||||||
pr_err("noirq suspend of devices failed\n");
|
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))
|
if (suspend_test(TEST_PLATFORM))
|
||||||
goto Platform_wake;
|
goto Platform_wake;
|
||||||
|
|
||||||
|
if (state == PM_SUSPEND_TO_IDLE) {
|
||||||
|
s2idle_loop();
|
||||||
|
goto Platform_wake;
|
||||||
|
}
|
||||||
|
|
||||||
error = suspend_disable_secondary_cpus();
|
error = suspend_disable_secondary_cpus();
|
||||||
if (error || suspend_test(TEST_CPUS))
|
if (error || suspend_test(TEST_CPUS))
|
||||||
goto Enable_cpus;
|
goto Enable_cpus;
|
||||||
|
|||||||
Reference in New Issue
Block a user