cpuidle, ARM/imx6: Push RCU-idle into driver
authorPeter Zijlstra <peterz@infradead.org>
Thu, 12 Jan 2023 19:43:22 +0000 (20:43 +0100)
committerIngo Molnar <mingo@kernel.org>
Fri, 13 Jan 2023 10:46:40 +0000 (11:46 +0100)
Doing RCU-idle outside the driver, only to then temporarily enable it
again, at least twice, before going idle is suboptimal.

Notably both cpu_pm_enter() and cpu_cluster_pm_enter() implicity
re-enable RCU.

Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Tested-by: Tony Lindgren <tony@atomide.com>
Tested-by: Ulf Hansson <ulf.hansson@linaro.org>
Reviewed-by: Frederic Weisbecker <frederic@kernel.org>
Acked-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Link: https://lore.kernel.org/r/20230112195539.821714572@infradead.org
arch/arm/mach-imx/cpuidle-imx6sx.c

index 74ea172..1dc01f6 100644 (file)
@@ -47,7 +47,9 @@ static int imx6sx_enter_wait(struct cpuidle_device *dev,
                cpu_pm_enter();
                cpu_cluster_pm_enter();
 
+               ct_idle_enter();
                cpu_suspend(0, imx6sx_idle_finish);
+               ct_idle_exit();
 
                cpu_cluster_pm_exit();
                cpu_pm_exit();
@@ -87,7 +89,8 @@ static struct cpuidle_driver imx6sx_cpuidle_driver = {
                         */
                        .exit_latency = 300,
                        .target_residency = 500,
-                       .flags = CPUIDLE_FLAG_TIMER_STOP,
+                       .flags = CPUIDLE_FLAG_TIMER_STOP |
+                                CPUIDLE_FLAG_RCU_IDLE,
                        .enter = imx6sx_enter_wait,
                        .name = "LOW-POWER-IDLE",
                        .desc = "ARM power off",