• Vitaly Kuznetsov's avatar
    x86: kvm: hyper-v: deal with buggy TLB flush requests from WS2012 · da66761c
    Vitaly Kuznetsov authored
    It was reported that with some special Multi Processor Group configuration,
    e.g:
     bcdedit.exe /set groupsize 1
     bcdedit.exe /set maxgroup on
     bcdedit.exe /set groupaware on
    for a 16-vCPU guest WS2012 shows BSOD on boot when PV TLB flush mechanism
    is in use.
    
    Tracing kvm_hv_flush_tlb immediately reveals the issue:
    
     kvm_hv_flush_tlb: processor_mask 0x0 address_space 0x0 flags 0x2
    
    The only flag set in this request is HV_FLUSH_ALL_VIRTUAL_ADDRESS_SPACES,
    however, processor_mask is 0x0 and no HV_FLUSH_ALL_PROCESSORS is specified.
    We don't flush anything and apparently it's not what Windows expects.
    
    TLFS doesn't say anything about such requests and newer Windows versions
    seem to be unaffected. This all feels like a WS2012 bug, which is, however,
    easy to workaround in KVM: let's flush everything when we see an empty
    flush request, over-flushing doesn't hurt.
    Signed-off-by: default avatarVitaly Kuznetsov <vkuznets@redhat.com>
    Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
    da66761c
hyperv.c 49.5 KB