Handling deferred, uncorrected MCEs on AMD guests is now possible with additional support in qemu. Ensure that the SUCCOR and OVERFLOW_RECOV bits are advertised to the guest in KVM. Suggested-by: Paolo Bonzini <pbonzini@xxxxxxxxxx> Signed-off-by: John Allen <john.allen@xxxxxxx> --- v2: - Add cpuid_entry_override for CPUID_8000_0007_EBX. - Handle masking bits in arch/x86/kvm/cpuid.c --- arch/x86/kvm/cpuid.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/arch/x86/kvm/cpuid.c b/arch/x86/kvm/cpuid.c index 2617be544480..f8e1fd409cee 100644 --- a/arch/x86/kvm/cpuid.c +++ b/arch/x86/kvm/cpuid.c @@ -743,6 +743,11 @@ void kvm_set_cpu_caps(void) if (!tdp_enabled && IS_ENABLED(CONFIG_X86_64)) kvm_cpu_cap_set(X86_FEATURE_GBPAGES); + kvm_cpu_cap_mask(CPUID_8000_0007_EBX, + F(OVERFLOW_RECOV) | + F(SUCCOR) + ); + kvm_cpu_cap_init_kvm_defined(CPUID_8000_0007_EDX, SF(CONSTANT_TSC) ); @@ -1237,11 +1242,12 @@ static inline int __do_cpuid_func(struct kvm_cpuid_array *array, u32 function) entry->edx &= ~GENMASK(17, 16); break; case 0x80000007: /* Advanced power management */ + cpuid_entry_override(entry, CPUID_8000_0007_EBX); cpuid_entry_override(entry, CPUID_8000_0007_EDX); /* mask against host */ entry->edx &= boot_cpu_data.x86_power; - entry->eax = entry->ebx = entry->ecx = 0; + entry->eax = entry->ecx = 0; break; case 0x80000008: { /* -- 2.34.1