[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