Messages in this thread Patch in this message | | | From | Ikjoon Jang <> | Subject | [PATCH] cpuidle: undelaying cpuidle in dpm_{suspend|resume}() | Date | Tue, 29 Oct 2019 15:31:45 +0800 |
| |
cpuidle is paused only during dpm_suspend_noirq() ~ dpm_resume_noirq(). But some device drivers need random sized IOs in dpm_{suspend|resume}() stage (e.g. re-downloading firmware in resume). And with such a device, cpuidle's latencies could be critical to response time of system suspend/resume.
To minimize those latencies, we could apply pm_qos to such device drivers, but simply undelaying cpuidle from dpm_suspend_noirq() to dpm suspend() seems no harm. --- drivers/base/power/main.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-)
diff --git a/drivers/base/power/main.c b/drivers/base/power/main.c index 134a8af51511..5928dd2139e8 100644 --- a/drivers/base/power/main.c +++ b/drivers/base/power/main.c @@ -773,8 +773,6 @@ void dpm_resume_noirq(pm_message_t state) resume_device_irqs(); device_wakeup_disarm_wake_irqs(); - - cpuidle_resume(); } static pm_callback_t dpm_subsys_resume_early_cb(struct device *dev, @@ -1069,6 +1067,7 @@ void dpm_resume(pm_message_t state) cpufreq_resume(); devfreq_resume(); + cpuidle_resume(); trace_suspend_resume(TPS("dpm_resume"), state.event, false); } @@ -1411,8 +1410,6 @@ int dpm_suspend_noirq(pm_message_t state) { int ret; - cpuidle_pause(); - device_wakeup_arm_wake_irqs(); suspend_device_irqs(); @@ -1830,6 +1827,7 @@ int dpm_suspend(pm_message_t state) trace_suspend_resume(TPS("dpm_suspend"), state.event, true); might_sleep(); + cpuidle_pause(); devfreq_suspend(); cpufreq_suspend(); -- 2.24.0.rc0.303.g954a862665-goog
| |