Re: [PATCH v2 0/7] pmdomain/cpuidle-psci: Support s2idle/s2ram on PREEMPT_RT

Raghavendra Kakarla
2024-07-25T10:33:03Z

On 5/27/2024 7:55 PM, Ulf Hansson wrote:
> Updates in v2:
> - Rebased and fixed a small issue in genpd, see patch3.
> - Re-tested on v6.9-rt5 (PREEMPT_RT enabled)
> - Re-tested on v6.10-rc1 (for regressions, PREEMPT_RT disabled)
>
> The hierarchical PM domain topology and the corresponding domain-idle-states
> are currently disabled on a PREEMPT_RT based configuration. The main reason is
> because spinlocks are turned into sleepable locks on PREEMPT_RT, which means
> genpd and runtime PM can't be use in the atomic idle-path when
> selecting/entering an idle-state.
>
> For s2idle/s2ram this is an unnecessary limitation that this series intends to
> address. Note that, the support for cpuhotplug is left to future improvements.
> More information about this are available in the commit messages.
>
> I have tested this on a Dragonboard 410c.
This series is tested on qcm6490 with PREEMPT_RT enabled. For the series,

Tested-by: Raghavendra Kakarla <quic_rkakarla@quicinc.com> # qcm6490
with PREEMPT_RT enabled

Tested APSS suspend and then SoC power collapse through s2idle and s2ram
paths.
APSS and soc power collapse stats are incremented.
/sys/kernel/debug/pm_genpd/power-domain-cluster/idle_states
/sys/kernel/debug/qcom_stats/cxsd

Without this series, they are not incremented.

Thanks,
Raghavendra K.
>
> Kind regards
> Ulf Hansson
>
>
> Ulf Hansson (7):
> pmdomain: core: Enable s2idle for CPU PM domains on PREEMPT_RT
> pmdomain: core: Don't hold the genpd-lock when calling
> dev_pm_domain_set()
> pmdomain: core: Use dev_name() instead of kobject_get_path() in
> debugfs
> cpuidle: psci-domain: Enable system-wide suspend on PREEMPT_RT
> cpuidle: psci: Drop redundant assignment of CPUIDLE_FLAG_RCU_IDLE
> cpuidle: psci: Enable the hierarchical topology for s2ram on
> PREEMPT_RT
> cpuidle: psci: Enable the hierarchical topology for s2idle on
> PREEMPT_RT
>
> drivers/cpuidle/cpuidle-psci-domain.c | 10 ++--
> drivers/cpuidle/cpuidle-psci.c | 26 ++++++----
> drivers/pmdomain/core.c | 75 +++++++++++++++++++--------
> include/linux/pm_domain.h | 5 +-
> 4 files changed, 80 insertions(+), 36 deletions(-)
>