[PATCH 03/13] cpu/hotplug, x86/acpi: Disable CPU hotplug for ACPI MADT wakeup

Kuppuswamy Sathyanarayanan sathyanarayanan.kuppuswamy at linux.intel.com
Tue Oct 10 06:39:21 PDT 2023



On 10/5/2023 6:13 AM, Kirill A. Shutemov wrote:
> ACPI MADT doesn't allow to offline CPU after it got woke up.
> 

I think you can use the term "CPU hotplug" instead of just offline.

> Currently hotplug prevented based on the confidential computing
> attribute which is set for Intel TDX. But TDX is not the only possible
> user of the wake up method.
> 
> Mark CPU hotplug as "not supported" on ACPI MADT wakeup enumeration.

Looks good to me.

Reviewed-by: Kuppuswamy Sathyanarayanan <sathyanarayanan.kuppuswamy at linux.intel.com>

> 
> Signed-off-by: Kirill A. Shutemov <kirill.shutemov at linux.intel.com>
> ---
>  arch/x86/coco/core.c               |  1 -
>  arch/x86/kernel/acpi/madt_wakeup.c |  4 ++++
>  include/linux/cc_platform.h        | 10 ----------
>  kernel/cpu.c                       |  2 +-
>  4 files changed, 5 insertions(+), 12 deletions(-)
> 
> diff --git a/arch/x86/coco/core.c b/arch/x86/coco/core.c
> index eeec9986570e..f07c3bb7deab 100644
> --- a/arch/x86/coco/core.c
> +++ b/arch/x86/coco/core.c
> @@ -20,7 +20,6 @@ static bool noinstr intel_cc_platform_has(enum cc_attr attr)
>  {
>  	switch (attr) {
>  	case CC_ATTR_GUEST_UNROLL_STRING_IO:
> -	case CC_ATTR_HOTPLUG_DISABLED:
>  	case CC_ATTR_GUEST_MEM_ENCRYPT:
>  	case CC_ATTR_MEM_ENCRYPT:
>  		return true;
> diff --git a/arch/x86/kernel/acpi/madt_wakeup.c b/arch/x86/kernel/acpi/madt_wakeup.c
> index 1b9747bfd5b9..15bdf10b1393 100644
> --- a/arch/x86/kernel/acpi/madt_wakeup.c
> +++ b/arch/x86/kernel/acpi/madt_wakeup.c
> @@ -1,4 +1,5 @@
>  #include <linux/acpi.h>
> +#include <linux/cpu.h>
>  #include <asm/apic.h>
>  
>  /* Physical address of the Multiprocessor Wakeup Structure mailbox */
> @@ -74,6 +75,9 @@ int __init acpi_parse_mp_wake(union acpi_subtable_headers *header,
>  
>  	acpi_mp_wake_mailbox_paddr = mp_wake->base_address;
>  
> +	/* Disable CPU onlining/offlining */
> +	cpu_hotplug_not_supported();
> +
>  	apic_update_callback(wakeup_secondary_cpu_64, acpi_wakeup_cpu);
>  
>  	return 0;
> diff --git a/include/linux/cc_platform.h b/include/linux/cc_platform.h
> index cb0d6cd1c12f..d08dd65b5c43 100644
> --- a/include/linux/cc_platform.h
> +++ b/include/linux/cc_platform.h
> @@ -80,16 +80,6 @@ enum cc_attr {
>  	 * using AMD SEV-SNP features.
>  	 */
>  	CC_ATTR_GUEST_SEV_SNP,
> -
> -	/**
> -	 * @CC_ATTR_HOTPLUG_DISABLED: Hotplug is not supported or disabled.
> -	 *
> -	 * The platform/OS is running as a guest/virtual machine does not
> -	 * support CPU hotplug feature.
> -	 *
> -	 * Examples include TDX Guest.
> -	 */
> -	CC_ATTR_HOTPLUG_DISABLED,
>  };
>  
>  #ifdef CONFIG_ARCH_HAS_CC_PLATFORM
> diff --git a/kernel/cpu.c b/kernel/cpu.c
> index cf536fe1a88a..9d4279476b40 100644
> --- a/kernel/cpu.c
> +++ b/kernel/cpu.c
> @@ -1522,7 +1522,7 @@ static int cpu_down_maps_locked(unsigned int cpu, enum cpuhp_state target)
>  	 * If the platform does not support hotplug, report it explicitly to
>  	 * differentiate it from a transient offlining failure.
>  	 */
> -	if (cc_platform_has(CC_ATTR_HOTPLUG_DISABLED) || !cpu_hotplug_supported)
> +	if (!cpu_hotplug_supported)
>  		return -EOPNOTSUPP;
>  	if (cpu_hotplug_disabled)
>  		return -EBUSY;

-- 
Sathyanarayanan Kuppuswamy
Linux Kernel Developer



More information about the kexec mailing list