[PATCH 3/3] PSCI: Use cpuidle context helpers in psci_cpu_suspend_enter()

Sudeep Holla sudeep.holla at arm.com
Tue Jun 8 11:20:44 PDT 2021


(I see Lorenzo has replied on the other thread including me where the issue
was reported asking more details)

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(+)
>
> 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);
> +

We need similar save/restore for system suspend as well I believe
(psci_system_suspend_enter)

--
Regards,
Sudeep



More information about the linux-arm-kernel mailing list