• Paolo Bonzini's avatar
    KVM: x86: work around QEMU issue with synthetic CPUID leaves · f751d8ea
    Paolo Bonzini authored
    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: f144c49e ("KVM: x86: synthesize CPUID leaf 0x80000021h if useful")
    Reported-by: default avatarMaxim Levitsky <mlevitsk@redhat.com>
    Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
    f751d8ea
cpuid.c 40 KB