cpuidle: drivers: firmware: psci: Dont instrument suspend code
authorMark Rutland <mark.rutland@arm.com>
Thu, 26 Jan 2023 15:08:30 +0000 (16:08 +0100)
committerIngo Molnar <mingo@kernel.org>
Tue, 31 Jan 2023 14:01:45 +0000 (15:01 +0100)
commit393e2ea30aec634b37004d401863428e120d5e1b
tree76b46ceae641116cb10e42836e29a56afb354c77
parent57a30218fa25c469ed507964bbf028b7a064309a
cpuidle: drivers: firmware: psci: Dont instrument suspend code

The PSCI suspend code is currently instrumentable, which is not safe as
instrumentation (e.g. ftrace) may try to make use of RCU during idle
periods when RCU is not watching.

To fix this we need to ensure that psci_suspend_finisher() and anything
it calls are not instrumented. We can do this fairly simply by marking
psci_suspend_finisher() and the psci*_cpu_suspend() functions as
noinstr, and the underlying helper functions as __always_inline.

When CONFIG_DEBUG_VIRTUAL=y, __pa_symbol() can expand to an out-of-line
instrumented function, so we must use __pa_symbol_nodebug() within
psci_suspend_finisher().

The raw SMCCC invocation functions are written in assembly, and are not
subject to compiler instrumentation.

Signed-off-by: Mark Rutland <mark.rutland@arm.com>
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Link: https://lore.kernel.org/r/20230126151323.349423061@infradead.org
drivers/firmware/psci/psci.c