]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
KVM: x86: add support for CPUID leaf 0x80000021
authorBorislav Petkov <bp@kernel.org>
Tue, 15 Jul 2025 12:37:47 +0000 (14:37 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 17 Jul 2025 16:28:01 +0000 (18:28 +0200)
From: Paolo Bonzini <pbonzini@redhat.com>

Commit 58b3d12c0a860cda34ed9d2378078ea5134e6812 upstream.

CPUID leaf 0x80000021 defines some features (or lack of bugs) of AMD
processors.  Expose the ones that make sense via KVM_GET_SUPPORTED_CPUID.

Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Signed-off-by: Borislav Petkov (AMD) <bp@alien8.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
arch/x86/kvm/cpuid.c

index 8b07e48612d7d92c037fa40a81e1203da6eb5952..8ec86d2c1a4144e401e7b8939b7820e05d5bbbe9 100644 (file)
@@ -810,7 +810,7 @@ static inline int __do_cpuid_func(struct kvm_cpuid_array *array, u32 function)
                entry->edx = 0;
                break;
        case 0x80000000:
-               entry->eax = min(entry->eax, 0x8000001f);
+               entry->eax = min(entry->eax, 0x80000021);
                break;
        case 0x80000001:
                entry->ebx &= ~GENMASK(27, 16);
@@ -875,6 +875,23 @@ static inline int __do_cpuid_func(struct kvm_cpuid_array *array, u32 function)
                if (!boot_cpu_has(X86_FEATURE_SEV))
                        entry->eax = entry->ebx = entry->ecx = entry->edx = 0;
                break;
+       case 0x80000020:
+               entry->eax = entry->ebx = entry->ecx = entry->edx = 0;
+               break;
+       case 0x80000021:
+               entry->ebx = entry->ecx = entry->edx = 0;
+               /*
+                * Pass down these bits:
+                *    EAX      0      NNDBP, Processor ignores nested data breakpoints
+                *    EAX      2      LAS, LFENCE always serializing
+                *    EAX      6      NSCB, Null selector clear base
+                *
+                * Other defined bits are for MSRs that KVM does not expose:
+                *   EAX      3      SPCL, SMM page configuration lock
+                *   EAX      13     PCMSR, Prefetch control MSR
+                */
+               entry->eax &= BIT(0) | BIT(2) | BIT(6);
+               break;
        /*Add support for Centaur's CPUID instruction*/
        case 0xC0000000:
                /*Just support up to 0xC0000004 now*/