OSDN Git Service

cpuidle: psci: Do not suspend topology CPUs on PREEMPT_RT
authorKrzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
Wed, 25 Jan 2023 11:34:18 +0000 (12:34 +0100)
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>
Mon, 13 Feb 2023 16:15:42 +0000 (17:15 +0100)
commitf9901f64536c39f699e6ed228c5e64e7e7ce8708
tree9235f2f0f8b6d839cffc3250ab44ea5a26e0770a
parent41204a607679ccca7eabff9f2871b969d6ef2ce3
cpuidle: psci: Do not suspend topology CPUs on PREEMPT_RT

The runtime Power Management of CPU topology is not compatible with
PREEMPT_RT:

 1. Core cpuidle path disables IRQs.
 2. Core cpuidle calls cpuidle-psci.
 3. cpuidle-psci in __psci_enter_domain_idle_state() calls
    pm_runtime_put_sync_suspend() and pm_runtime_get_sync() which use
    spinlocks (which are sleeping on PREEMPT_RT).

Deep sleep modes are not a priority of Realtime kernels because the
latencies might become unpredictable.  On the other hand the PSCI CPU
idle power domain is a parent of other devices and power domain
controllers, thus it cannot be simply skipped (e.g. on Qualcomm SM8250).

Disable the idle callbacks in cpuidle-psci and mark the domain as
always on.  This is a trade-off between making PREEMPT_RT working and
still having a proper power domain hierarchy in the system.

Signed-off-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
Reviewed-by: Ulf Hansson <ulf.hansson@linaro.org>
Tested-by: Adrien Thierry <athierry@redhat.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
drivers/cpuidle/Kconfig.arm
drivers/cpuidle/cpuidle-psci-domain.c
drivers/cpuidle/cpuidle-psci.c