[PATCH 3/3] PSCI: Use cpuidle context helpers in psci_cpu_suspend_enter()
Lorenzo Pieralisi
lorenzo.pieralisi at arm.com
Fri Jun 11 09:49:37 PDT 2021
On Tue, Jun 08, 2021 at 06:27:15PM +0100, Marc Zyngier wrote:
> The PSCI CPU suspend code isn't aware of the PMR vs DAIF game,
> resulting in a system that locks up if entering CPU suspend
> with GICv3 pNMI enabled.
>
> To save the day, teach the suspend code about our new cpuidle
> context helpers, which will do everything that's required just
> like the usual WFI cpuidle code.
>
> This fixes my Altra system, which would otherwise lock-up at
> boot time when booted with irqchip.gicv3_pseudo_nmi=1.
>
> Signed-off-by: Marc Zyngier <maz at kernel.org>
> ---
> drivers/firmware/psci/psci.c | 5 +++++
> 1 file changed, 5 insertions(+)
We need an additional patch for PSCI suspend, regardless:
Reviewed-by: Lorenzo Pieralisi <lorenzo.pieralisi at arm.com>
> diff --git a/drivers/firmware/psci/psci.c b/drivers/firmware/psci/psci.c
> index 3c1c5daf6df2..d10675bdd9d0 100644
> --- a/drivers/firmware/psci/psci.c
> +++ b/drivers/firmware/psci/psci.c
> @@ -333,13 +333,18 @@ static int psci_suspend_finisher(unsigned long state)
>
> int psci_cpu_suspend_enter(u32 state)
> {
> + struct arm_cpuidle_context context;
> int ret;
>
> + arm_cpuidle_save_context(&context);
> +
> if (!psci_power_state_loses_context(state))
> ret = psci_ops.cpu_suspend(state, 0);
> else
> ret = cpu_suspend(state, psci_suspend_finisher);
>
> + arm_cpuidle_restore_context(&context);
> +
> return ret;
> }
> #endif
> --
> 2.30.2
>
More information about the linux-arm-kernel
mailing list