]> git.baikalelectronics.ru Git - kernel.git/commit
KVM: x86: work around QEMU issue with synthetic CPUID leaves
authorPaolo Bonzini <pbonzini@redhat.com>
Fri, 29 Apr 2022 18:43:04 +0000 (14:43 -0400)
committerPaolo Bonzini <pbonzini@redhat.com>
Fri, 29 Apr 2022 19:24:58 +0000 (15:24 -0400)
commit6c396d9d289f40b28fec14bf5b51b5ef605bf00d
treeb75ec91ec9ede7ff337470e7e3a021837dccee7a
parentc8cc0738ab1129bb47ff213c607260ab4ee03adf
KVM: x86: work around QEMU issue with synthetic CPUID leaves

Synthesizing AMD leaves up to 0x80000021 caused problems with QEMU,
which assumes the *host* CPUID[0x80000000].EAX is higher or equal
to what KVM_GET_SUPPORTED_CPUID reports.

This causes QEMU to issue bogus host CPUIDs when preparing the input
to KVM_SET_CPUID2.  It can even get into an infinite loop, which is
only terminated by an abort():

   cpuid_data is full, no space for cpuid(eax:0x8000001d,ecx:0x3e)

To work around this, only synthesize those leaves if 0x8000001d exists
on the host.  The synthetic 0x80000021 leaf is mostly useful on Zen2,
which satisfies the condition.

Fixes: d6dd57e0c4a3 ("KVM: x86: synthesize CPUID leaf 0x80000021h if useful")
Reported-by: Maxim Levitsky <mlevitsk@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
arch/x86/kvm/cpuid.c