• Vitaly Kuznetsov's avatar
    x86/kvm/hyper-v: move VMX controls sanitization out of nested_enable_evmcs() · 31de3d25
    Vitaly Kuznetsov authored
    With fine grained VMX feature enablement QEMU>=4.2 tries to do KVM_SET_MSRS
    with default (matching CPU model) values and in case eVMCS is also enabled,
    fails.
    
    It would be possible to drop VMX feature filtering completely and make
    this a guest's responsibility: if it decides to use eVMCS it should know
    which fields are available and which are not. Hyper-V mostly complies to
    this, however, there are some problematic controls:
    SECONDARY_EXEC_VIRTUALIZE_APIC_ACCESSES
    VM_{ENTRY,EXIT}_LOAD_IA32_PERF_GLOBAL_CTRL
    
    which Hyper-V enables. As there are no corresponding fields in eVMCS, we
    can't handle this properly in KVM. This is a Hyper-V issue.
    
    Move VMX controls sanitization from nested_enable_evmcs() to vmx_get_msr(),
    and do the bare minimum (only clear controls which are known to cause issues).
    This allows userspace to keep setting controls it wants and at the same
    time hides them from the guest.
    Signed-off-by: default avatarVitaly Kuznetsov <vkuznets@redhat.com>
    Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
    31de3d25
vmx.c 219 KB