[PATCH v2] KVM: x86: Advertise SUCCOR and OVERFLOW_RECOV cpuid bits

John Allen posted 1 patch 1 year, 4 months ago
arch/x86/kvm/cpuid.c | 8 +++++++-
1 file changed, 7 insertions(+), 1 deletion(-)
[PATCH v2] KVM: x86: Advertise SUCCOR and OVERFLOW_RECOV cpuid bits
Posted by John Allen 1 year, 4 months ago
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@redhat.com>
Signed-off-by: John Allen <john.allen@amd.com>
---
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
Re: [PATCH v2] KVM: x86: Advertise SUCCOR and OVERFLOW_RECOV cpuid bits
Posted by Sean Christopherson 1 year, 4 months ago
s/cpuid/CPUID

On Wed, Jul 31, 2024, John Allen wrote:
> 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.

To host userspace, not the guest.

Please add a paragraph explaining (a) what these features do, (b) why
KVM doesn't need additional enabling, and (c) why KVM can't emulate these features
in software (though this can be omitted if it's quite obvious from (a)).