[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