From: Joerg Roedel <jroedel@xxxxxxx> The feature bit will indicate whether the kernel runs as an SEV-ES guest. This can be used to apply alternatives at boot for SEV-ES guests and provides a way for user-space to detect whether it runs as an SEV-ES guest. Signed-off-by: Joerg Roedel <jroedel@xxxxxxx> --- arch/x86/include/asm/cpufeatures.h | 1 + arch/x86/kernel/cpu/amd.c | 6 +++++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/arch/x86/include/asm/cpufeatures.h b/arch/x86/include/asm/cpufeatures.h index 2fee1a2cac2f..35df826ee3fc 100644 --- a/arch/x86/include/asm/cpufeatures.h +++ b/arch/x86/include/asm/cpufeatures.h @@ -235,6 +235,7 @@ #define X86_FEATURE_VMCALL ( 8*32+18) /* "" Hypervisor supports the VMCALL instruction */ #define X86_FEATURE_VMW_VMMCALL ( 8*32+19) /* "" VMware prefers VMMCALL hypercall instruction */ #define X86_FEATURE_SEV_ES ( 8*32+20) /* AMD Secure Encrypted Virtualization - Encrypted State */ +#define X86_FEATURE_SEV_ES_GUEST ( 8*32+21) /* SEV-ES Guest */ /* Intel-defined CPU features, CPUID level 0x00000007:0 (EBX), word 9 */ #define X86_FEATURE_FSGSBASE ( 9*32+ 0) /* RDFSBASE, WRFSBASE, RDGSBASE, WRGSBASE instructions*/ diff --git a/arch/x86/kernel/cpu/amd.c b/arch/x86/kernel/cpu/amd.c index 523a6a76c6c1..8cdb190822de 100644 --- a/arch/x86/kernel/cpu/amd.c +++ b/arch/x86/kernel/cpu/amd.c @@ -485,7 +485,6 @@ static void early_init_amd_mc(struct cpuinfo_x86 *c) static void bsp_init_amd(struct cpuinfo_x86 *c) { - #ifdef CONFIG_X86_64 if (c->x86 >= 0xf) { unsigned long long tseg; @@ -614,6 +613,11 @@ static void early_detect_mem_encrypt(struct cpuinfo_x86 *c) setup_clear_cpu_cap(X86_FEATURE_SEV); setup_clear_cpu_cap(X86_FEATURE_SEV_ES); } + + if (!rdmsrl_safe(MSR_AMD64_SEV, &msr)) { + if (msr & MSR_AMD64_SEV_ES_ENABLED) + set_cpu_cap(c, X86_FEATURE_SEV_ES_GUEST); + } } static void early_init_amd(struct cpuinfo_x86 *c) -- 2.17.1