mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2025-01-01 02:36:02 +00:00
66e48e491d
ACPI MADT doesn't allow to offline a CPU after it has been woken up. Currently, CPU hotplug is 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. Any platform that uses ACPI MADT wakeup method cannot offline CPU. Disable CPU offlining on ACPI MADT wakeup enumeration. This has no visible effects for users: currently, TDX guest is the only platform that uses the ACPI MADT wakeup method. Signed-off-by: Kirill A. Shutemov <kirill.shutemov@linux.intel.com> Signed-off-by: Borislav Petkov (AMD) <bp@alien8.de> Reviewed-by: Thomas Gleixner <tglx@linutronix.de> Acked-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com> Tested-by: Tao Liu <ltao@redhat.com> Link: https://lore.kernel.org/r/20240614095904.1345461-5-kirill.shutemov@linux.intel.com
120 lines
3.2 KiB
C
120 lines
3.2 KiB
C
/* SPDX-License-Identifier: GPL-2.0-only */
|
|
/*
|
|
* Confidential Computing Platform Capability checks
|
|
*
|
|
* Copyright (C) 2021 Advanced Micro Devices, Inc.
|
|
*
|
|
* Author: Tom Lendacky <thomas.lendacky@amd.com>
|
|
*/
|
|
|
|
#ifndef _LINUX_CC_PLATFORM_H
|
|
#define _LINUX_CC_PLATFORM_H
|
|
|
|
#include <linux/types.h>
|
|
#include <linux/stddef.h>
|
|
|
|
/**
|
|
* enum cc_attr - Confidential computing attributes
|
|
*
|
|
* These attributes represent confidential computing features that are
|
|
* currently active.
|
|
*/
|
|
enum cc_attr {
|
|
/**
|
|
* @CC_ATTR_MEM_ENCRYPT: Memory encryption is active
|
|
*
|
|
* The platform/OS is running with active memory encryption. This
|
|
* includes running either as a bare-metal system or a hypervisor
|
|
* and actively using memory encryption or as a guest/virtual machine
|
|
* and actively using memory encryption.
|
|
*
|
|
* Examples include SME, SEV and SEV-ES.
|
|
*/
|
|
CC_ATTR_MEM_ENCRYPT,
|
|
|
|
/**
|
|
* @CC_ATTR_HOST_MEM_ENCRYPT: Host memory encryption is active
|
|
*
|
|
* The platform/OS is running as a bare-metal system or a hypervisor
|
|
* and actively using memory encryption.
|
|
*
|
|
* Examples include SME.
|
|
*/
|
|
CC_ATTR_HOST_MEM_ENCRYPT,
|
|
|
|
/**
|
|
* @CC_ATTR_GUEST_MEM_ENCRYPT: Guest memory encryption is active
|
|
*
|
|
* The platform/OS is running as a guest/virtual machine and actively
|
|
* using memory encryption.
|
|
*
|
|
* Examples include SEV and SEV-ES.
|
|
*/
|
|
CC_ATTR_GUEST_MEM_ENCRYPT,
|
|
|
|
/**
|
|
* @CC_ATTR_GUEST_STATE_ENCRYPT: Guest state encryption is active
|
|
*
|
|
* The platform/OS is running as a guest/virtual machine and actively
|
|
* using memory encryption and register state encryption.
|
|
*
|
|
* Examples include SEV-ES.
|
|
*/
|
|
CC_ATTR_GUEST_STATE_ENCRYPT,
|
|
|
|
/**
|
|
* @CC_ATTR_GUEST_UNROLL_STRING_IO: String I/O is implemented with
|
|
* IN/OUT instructions
|
|
*
|
|
* The platform/OS is running as a guest/virtual machine and uses
|
|
* IN/OUT instructions in place of string I/O.
|
|
*
|
|
* Examples include TDX guest & SEV.
|
|
*/
|
|
CC_ATTR_GUEST_UNROLL_STRING_IO,
|
|
|
|
/**
|
|
* @CC_ATTR_SEV_SNP: Guest SNP is active.
|
|
*
|
|
* The platform/OS is running as a guest/virtual machine and actively
|
|
* using AMD SEV-SNP features.
|
|
*/
|
|
CC_ATTR_GUEST_SEV_SNP,
|
|
|
|
/**
|
|
* @CC_ATTR_HOST_SEV_SNP: AMD SNP enabled on the host.
|
|
*
|
|
* The host kernel is running with the necessary features
|
|
* enabled to run SEV-SNP guests.
|
|
*/
|
|
CC_ATTR_HOST_SEV_SNP,
|
|
};
|
|
|
|
#ifdef CONFIG_ARCH_HAS_CC_PLATFORM
|
|
|
|
/**
|
|
* cc_platform_has() - Checks if the specified cc_attr attribute is active
|
|
* @attr: Confidential computing attribute to check
|
|
*
|
|
* The cc_platform_has() function will return an indicator as to whether the
|
|
* specified Confidential Computing attribute is currently active.
|
|
*
|
|
* Context: Any context
|
|
* Return:
|
|
* * TRUE - Specified Confidential Computing attribute is active
|
|
* * FALSE - Specified Confidential Computing attribute is not active
|
|
*/
|
|
bool cc_platform_has(enum cc_attr attr);
|
|
void cc_platform_set(enum cc_attr attr);
|
|
void cc_platform_clear(enum cc_attr attr);
|
|
|
|
#else /* !CONFIG_ARCH_HAS_CC_PLATFORM */
|
|
|
|
static inline bool cc_platform_has(enum cc_attr attr) { return false; }
|
|
static inline void cc_platform_set(enum cc_attr attr) { }
|
|
static inline void cc_platform_clear(enum cc_attr attr) { }
|
|
|
|
#endif /* CONFIG_ARCH_HAS_CC_PLATFORM */
|
|
|
|
#endif /* _LINUX_CC_PLATFORM_H */
|