The Linux Kernel Mailing List
 help / color / mirror / Atom feed
* [PATCH v2] arm64: Disallow disabling boot CPU based on config
@ 2026-07-03 11:20 Sneh Mankad
  2026-07-03 14:28 ` Mark Rutland
  2026-07-03 15:51 ` Sudeep Holla
  0 siblings, 2 replies; 5+ messages in thread
From: Sneh Mankad @ 2026-07-03 11:20 UTC (permalink / raw)
  To: Thomas Gleixner, Daniel Lezcano, Peter Zijlstra,
	Rafael J. Wysocki, Pavel Machek, Len Brown, Catalin Marinas,
	Will Deacon
  Cc: linux-arm-msm, linux-kernel, linux-pm, linux-arm-kernel,
	Sneh Mankad

The Qualcomm SoCs like LeMans, Monaco support suspend to ram which leads
the SoC to ACPI S3 similar state where SoC is turned off and DDR is
retained. The hardware design on these SoCs forces a constraint to suspend
and resume the system on boot CPU / CPU0.

If CPU0 is already offline before starting suspend to ram the
freeze_secondary_cpus() picks alternate CPU as primary / last CPU and
proceed further to invoke PSCI SYSTEM_SUSPEND.
This leads to a system crash.

In order to prevent such an issue introduce PM_SLEEP_SMP_CPU_ZERO_STRICT
config and when enabled prohibit the CPU0 from getting disabled.

Signed-off-by: Sneh Mankad <sneh.mankad@oss.qualcomm.com>
---
Changes in v2:
- Moved the check to arm64 specific code.
- Link to v1: https://lore.kernel.org/r/20260605-disable_boot_cpu_offline-v1-1-4c68fe1a6cf8@oss.qualcomm.com
---
 arch/arm64/Kconfig       | 9 +++++++++
 arch/arm64/kernel/psci.c | 6 ++++++
 2 files changed, 15 insertions(+)

diff --git a/arch/arm64/Kconfig b/arch/arm64/Kconfig
index fe60738e5943ba279e5571862423df4fed3db661..21697a535a25d286a2f8afe4921a41b13cc32c0a 100644
--- a/arch/arm64/Kconfig
+++ b/arch/arm64/Kconfig
@@ -263,6 +263,15 @@ config ARM64
 	help
 	  ARM 64-bit (AArch64) Linux support.
 
+config PM_SLEEP_SMP_CPU_ZERO_STRICT
+       bool "Disallow boot CPU (CPU0) offline"
+       depends on ARCH_QCOM
+       depends on HOTPLUG_CPU
+       depends on SUSPEND
+       help
+         Disallow boot CPU (CPU0) offline when the suspend_ops->enter()
+         has to be executed by boot CPU.
+
 config RUSTC_SUPPORTS_ARM64
 	def_bool y
 	depends on CPU_LITTLE_ENDIAN
diff --git a/arch/arm64/kernel/psci.c b/arch/arm64/kernel/psci.c
index fabd732d0a2dfee37074ef4ebb6ce5894871c8bd..4ad90ae6f8bacf0cbd3203d66580107d467ea232 100644
--- a/arch/arm64/kernel/psci.c
+++ b/arch/arm64/kernel/psci.c
@@ -49,6 +49,12 @@ static int cpu_psci_cpu_boot(unsigned int cpu)
 #ifdef CONFIG_HOTPLUG_CPU
 static bool cpu_psci_cpu_can_disable(unsigned int cpu)
 {
+#ifdef CONFIG_PM_SLEEP_SMP_CPU_ZERO_STRICT
+	if (cpu == get_boot_cpu_id()) {
+		pr_info("Disabling boot CPU is not supported\n");
+		return false;
+	}
+#endif
 	return !psci_tos_resident_on(cpu);
 }
 

---
base-commit: ba3e43a9e601636f5edb54e259a74f96ca3b8fd8
change-id: 20260603-disable_boot_cpu_offline-eb4f55ac96f2

Best regards,
-- 
Sneh Mankad <sneh.mankad@oss.qualcomm.com>


^ permalink raw reply related	[flat|nested] 5+ messages in thread

* Re: [PATCH v2] arm64: Disallow disabling boot CPU based on config
  2026-07-03 11:20 [PATCH v2] arm64: Disallow disabling boot CPU based on config Sneh Mankad
@ 2026-07-03 14:28 ` Mark Rutland
  2026-07-03 21:09   ` Thomas Gleixner
  2026-07-03 15:51 ` Sudeep Holla
  1 sibling, 1 reply; 5+ messages in thread
From: Mark Rutland @ 2026-07-03 14:28 UTC (permalink / raw)
  To: Sneh Mankad
  Cc: Thomas Gleixner, Daniel Lezcano, Peter Zijlstra,
	Rafael J. Wysocki, Pavel Machek, Len Brown, Catalin Marinas,
	Will Deacon, linux-arm-msm, linux-kernel, linux-pm,
	linux-arm-kernel

On Fri, Jul 03, 2026 at 04:50:02PM +0530, Sneh Mankad wrote:
> The Qualcomm SoCs like LeMans, Monaco 

Are those released products?

Are those mobile phone parts, or somthing else?

> support suspend to ram which leads the SoC to ACPI S3 similar state
> where SoC is turned off and DDR is retained. The hardware design on
> these SoCs forces a constraint to suspend and resume the system on
> boot CPU / CPU0.
> 
> If CPU0 is already offline before starting suspend to ram the
> freeze_secondary_cpus() picks alternate CPU as primary / last CPU and
> proceed further to invoke PSCI SYSTEM_SUSPEND.
> This leads to a system crash.

Ok, so that's a firmware bug.

Why does the FW permit CPU0 to be offlined in the first place if it
can't handle this?

What does PSCI_MIGRATE_INFO_TYPE report?

Ideally it'd report Uniprocessor (UP) not migrate capable (1), which
would prevent CPU_OFF on that CPU, and would force suspend to happen
there...

> In order to prevent such an issue introduce PM_SLEEP_SMP_CPU_ZERO_STRICT
> config and when enabled prohibit the CPU0 from getting disabled.

I don't think it makes sense for this to be a config option.

This is a platform-specific property, and it's possible to build a
kernel that boots on this platform and/or other platforms.

> Signed-off-by: Sneh Mankad <sneh.mankad@oss.qualcomm.com>
> ---
> Changes in v2:
> - Moved the check to arm64 specific code.
> - Link to v1: https://lore.kernel.org/r/20260605-disable_boot_cpu_offline-v1-1-4c68fe1a6cf8@oss.qualcomm.com
> ---
>  arch/arm64/Kconfig       | 9 +++++++++
>  arch/arm64/kernel/psci.c | 6 ++++++
>  2 files changed, 15 insertions(+)
> 
> diff --git a/arch/arm64/Kconfig b/arch/arm64/Kconfig
> index fe60738e5943ba279e5571862423df4fed3db661..21697a535a25d286a2f8afe4921a41b13cc32c0a 100644
> --- a/arch/arm64/Kconfig
> +++ b/arch/arm64/Kconfig
> @@ -263,6 +263,15 @@ config ARM64
>  	help
>  	  ARM 64-bit (AArch64) Linux support.
>  
> +config PM_SLEEP_SMP_CPU_ZERO_STRICT
> +       bool "Disallow boot CPU (CPU0) offline"
> +       depends on ARCH_QCOM

Why can't others select this?

> +       depends on HOTPLUG_CPU
> +       depends on SUSPEND
> +       help
> +         Disallow boot CPU (CPU0) offline when the suspend_ops->enter()
> +         has to be executed by boot CPU.

As above, I don't think this makse sense as a config option.

Either we handle the FW bug, or we do not.

Mark.

> +
>  config RUSTC_SUPPORTS_ARM64
>  	def_bool y
>  	depends on CPU_LITTLE_ENDIAN
> diff --git a/arch/arm64/kernel/psci.c b/arch/arm64/kernel/psci.c
> index fabd732d0a2dfee37074ef4ebb6ce5894871c8bd..4ad90ae6f8bacf0cbd3203d66580107d467ea232 100644
> --- a/arch/arm64/kernel/psci.c
> +++ b/arch/arm64/kernel/psci.c
> @@ -49,6 +49,12 @@ static int cpu_psci_cpu_boot(unsigned int cpu)
>  #ifdef CONFIG_HOTPLUG_CPU
>  static bool cpu_psci_cpu_can_disable(unsigned int cpu)
>  {
> +#ifdef CONFIG_PM_SLEEP_SMP_CPU_ZERO_STRICT
> +	if (cpu == get_boot_cpu_id()) {
> +		pr_info("Disabling boot CPU is not supported\n");
> +		return false;
> +	}
> +#endif
>  	return !psci_tos_resident_on(cpu);
>  }
>  
> 
> ---
> base-commit: ba3e43a9e601636f5edb54e259a74f96ca3b8fd8
> change-id: 20260603-disable_boot_cpu_offline-eb4f55ac96f2
> 
> Best regards,
> -- 
> Sneh Mankad <sneh.mankad@oss.qualcomm.com>
> 
> 

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH v2] arm64: Disallow disabling boot CPU based on config
  2026-07-03 11:20 [PATCH v2] arm64: Disallow disabling boot CPU based on config Sneh Mankad
  2026-07-03 14:28 ` Mark Rutland
@ 2026-07-03 15:51 ` Sudeep Holla
  2026-07-04  6:43   ` Daniel Lezcano
  1 sibling, 1 reply; 5+ messages in thread
From: Sudeep Holla @ 2026-07-03 15:51 UTC (permalink / raw)
  To: Sneh Mankad
  Cc: Thomas Gleixner, Daniel Lezcano, Peter Zijlstra,
	Rafael J. Wysocki, Pavel Machek, Len Brown, Catalin Marinas,
	Mark Rutland, Lorenzo Pieralisi, Will Deacon, linux-arm-msm,
	linux-kernel, linux-pm, linux-arm-kernel

(It is always good to cc all PSCI maintainer for any ARM64 CPU
hotpug/suspend related changes)

On Fri, Jul 03, 2026 at 04:50:02PM +0530, Sneh Mankad wrote:
> The Qualcomm SoCs like LeMans, Monaco support suspend to ram which leads
> the SoC to ACPI S3 similar state where SoC is turned off and DDR is
> retained. The hardware design on these SoCs forces a constraint to suspend
> and resume the system on boot CPU / CPU0.
>
And you fail to explain why they have that constraint.

Is it because some secure context is not allowed to migrate ?

We already have a mechanism for that in place and this hack is not at all
required.

-- 
Regards,
Sudeep

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH v2] arm64: Disallow disabling boot CPU based on config
  2026-07-03 14:28 ` Mark Rutland
@ 2026-07-03 21:09   ` Thomas Gleixner
  0 siblings, 0 replies; 5+ messages in thread
From: Thomas Gleixner @ 2026-07-03 21:09 UTC (permalink / raw)
  To: Mark Rutland, Sneh Mankad
  Cc: Daniel Lezcano, Peter Zijlstra, Rafael J. Wysocki, Pavel Machek,
	Len Brown, Catalin Marinas, Will Deacon, linux-arm-msm,
	linux-kernel, linux-pm, linux-arm-kernel

On Fri, Jul 03 2026 at 15:28, Mark Rutland wrote:
> On Fri, Jul 03, 2026 at 04:50:02PM +0530, Sneh Mankad wrote:
>> +       depends on HOTPLUG_CPU
>> +       depends on SUSPEND
>> +       help
>> +         Disallow boot CPU (CPU0) offline when the suspend_ops->enter()
>> +         has to be executed by boot CPU.
>
> As above, I don't think this makse sense as a config option.

Correct. That's pointless as it can be determined at boot time either
through firmware (ACPI/DT) or if that's not possible for whatever
reasons then a runtime detection quirk which depends on that particular
platform.


^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH v2] arm64: Disallow disabling boot CPU based on config
  2026-07-03 15:51 ` Sudeep Holla
@ 2026-07-04  6:43   ` Daniel Lezcano
  0 siblings, 0 replies; 5+ messages in thread
From: Daniel Lezcano @ 2026-07-04  6:43 UTC (permalink / raw)
  To: Sudeep Holla, Sneh Mankad
  Cc: Thomas Gleixner, Peter Zijlstra, Rafael J. Wysocki, Pavel Machek,
	Len Brown, Catalin Marinas, Mark Rutland, Lorenzo Pieralisi,
	Will Deacon, linux-arm-msm, linux-kernel, linux-pm,
	linux-arm-kernel


Hi Sudeep,

Le 03/07/2026 à 17:51, Sudeep Holla a écrit :
> (It is always good to cc all PSCI maintainer for any ARM64 CPU
> hotpug/suspend related changes)
> 
> On Fri, Jul 03, 2026 at 04:50:02PM +0530, Sneh Mankad wrote:
>> The Qualcomm SoCs like LeMans, Monaco support suspend to ram which leads
>> the SoC to ACPI S3 similar state where SoC is turned off and DDR is
>> retained. The hardware design on these SoCs forces a constraint to suspend
>> and resume the system on boot CPU / CPU0.
>>
> And you fail to explain why they have that constraint.
> 
> Is it because some secure context is not allowed to migrate ?
> 
> We already have a mechanism for that in place and this hack is not at all
> required.
Do you mean a mechanism for the secure context or for preventing CPU0 ?

Can you clarify ?


^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2026-07-04  6:43 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-07-03 11:20 [PATCH v2] arm64: Disallow disabling boot CPU based on config Sneh Mankad
2026-07-03 14:28 ` Mark Rutland
2026-07-03 21:09   ` Thomas Gleixner
2026-07-03 15:51 ` Sudeep Holla
2026-07-04  6:43   ` Daniel Lezcano

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox