cpuidle: dt: Return the correct numbers of parsed idle states
authorUlf Hansson <ulf.hansson@linaro.org>
Fri, 21 Oct 2022 15:10:12 +0000 (17:10 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sat, 7 Jan 2023 11:07:13 +0000 (12:07 +0100)
[ Upstream commit ee3c2c8ad6ba6785f14a60e4081d7c82e88162a2 ]

While we correctly skips to initialize an idle state from a disabled idle
state node in DT, the returned value from dt_init_idle_driver() don't get
adjusted accordingly. Instead the number of found idle state nodes are
returned, while the callers are expecting the number of successfully
initialized idle states from DT.

This leads to cpuidle drivers unnecessarily continues to initialize their
idle state specific data. Moreover, in the case when all idle states have
been disabled in DT, we would end up registering a cpuidle driver, rather
than relying on the default arch specific idle call.

Fixes: 9f14da345599 ("drivers: cpuidle: implement DT based idle states infrastructure")
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
Reviewed-by: Sudeep Holla <sudeep.holla@arm.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/cpuidle/dt_idle_states.c

index ea11a33e7fff4383e6f333e52393e0b984c3549d..1a79ac569770c2449ae71dc09aebef0506c6d2a5 100644 (file)
@@ -218,6 +218,6 @@ int dt_init_idle_driver(struct cpuidle_driver *drv,
         * also be 0 on platforms with missing DT idle states or legacy DT
         * configuration predating the DT idle states bindings.
         */
-       return i;
+       return state_idx - start_idx;
 }
 EXPORT_SYMBOL_GPL(dt_init_idle_driver);