Messages in this thread Patch in this message | | | From | Kuppuswamy Sathyanarayanan <> | Subject | [PATCH v2 04/12] x86/x86: Add early_is_tdx_guest() interface | Date | Sat, 12 Jun 2021 14:04:45 -0700 |
| |
Add helper function to detect TDX feature support. It will be used to protect TDX specific code in decompression code.
Reviewed-by: Andi Kleen <ak@linux.intel.com> Reviewed-by: Tony Luck <tony.luck@intel.com> Signed-off-by: Kuppuswamy Sathyanarayanan <sathyanarayanan.kuppuswamy@linux.intel.com> ---
Changes since v1: * Removed is_tdx_guest() interface. We will rely on prot_guest_has(PR_GUEST_TDX) for TDX related checks. * Renamed is_tdx_guest() to early_is_tdx_guest() as per review suggestion. * Fixed commit title and log to reflect above changes. * Simplified native_cpuid_has_tdx_guest() as per review suggestion.
arch/x86/boot/compressed/Makefile | 1 + arch/x86/boot/compressed/tdx.c | 28 ++++++++++++++++++++++++++++ 2 files changed, 29 insertions(+) create mode 100644 arch/x86/boot/compressed/tdx.c
diff --git a/arch/x86/boot/compressed/Makefile b/arch/x86/boot/compressed/Makefile index 431bf7f846c3..22a2a6cc2ab4 100644 --- a/arch/x86/boot/compressed/Makefile +++ b/arch/x86/boot/compressed/Makefile @@ -98,6 +98,7 @@ ifdef CONFIG_X86_64 endif vmlinux-objs-$(CONFIG_ACPI) += $(obj)/acpi.o +vmlinux-objs-$(CONFIG_INTEL_TDX_GUEST) += $(obj)/tdx.o vmlinux-objs-$(CONFIG_EFI_MIXED) += $(obj)/efi_thunk_$(BITS).o efi-obj-$(CONFIG_EFI_STUB) = $(objtree)/drivers/firmware/efi/libstub/lib.a diff --git a/arch/x86/boot/compressed/tdx.c b/arch/x86/boot/compressed/tdx.c new file mode 100644 index 000000000000..ddfa4a6d1939 --- /dev/null +++ b/arch/x86/boot/compressed/tdx.c @@ -0,0 +1,28 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * tdx.c - Early boot code for TDX + */ + +#include <asm/tdx.h> + +static int __ro_after_init tdx_guest = -1; + +static inline bool native_cpuid_has_tdx_guest(void) +{ + u32 eax = TDX_CPUID_LEAF_ID, sig[3] = {0}; + + if (native_cpuid_eax(0) < TDX_CPUID_LEAF_ID) + return false; + + native_cpuid(&eax, &sig[0], &sig[1], &sig[2]); + + return !memcmp("IntelTDX ", sig, 12); +} + +bool early_is_tdx_guest(void) +{ + if (tdx_guest < 0) + tdx_guest = native_cpuid_has_tdx_guest(); + + return !!tdx_guest; +} -- 2.25.1
| |