• Maciej S. Szmigiero's avatar
    KVM: x86: Ignore MSR_AMD64_TW_CFG access · 2770d472
    Maciej S. Szmigiero authored
    Hyper-V enabled Windows Server 2022 KVM VM cannot be started on Zen1 Ryzen
    since it crashes at boot with SYSTEM_THREAD_EXCEPTION_NOT_HANDLED +
    STATUS_PRIVILEGED_INSTRUCTION (in other words, because of an unexpected #GP
    in the guest kernel).
    
    This is because Windows tries to set bit 8 in MSR_AMD64_TW_CFG and can't
    handle receiving a #GP when doing so.
    
    Give this MSR the same treatment that commit 2e32b719
    ("x86, kvm: Add MSR_AMD64_BU_CFG2 to the list of ignored MSRs") gave
    MSR_AMD64_BU_CFG2 under justification that this MSR is baremetal-relevant
    only.
    Although apparently it was then needed for Linux guests, not Windows as in
    this case.
    
    With this change, the aforementioned guest setup is able to finish booting
    successfully.
    
    This issue can be reproduced either on a Summit Ridge Ryzen (with
    just "-cpu host") or on a Naples EPYC (with "-cpu host,stepping=1" since
    EPYC is ordinarily stepping 2).
    
    Alternatively, userspace could solve the problem by using MSR filters, but
    forcing every userspace to define a filter isn't very friendly and doesn't
    add much, if any, value.  The only potential hiccup is if one of these
    "baremetal-only" MSRs ever requires actual emulation and/or has F/M/S
    specific behavior.  But if that happens, then KVM can still punt *that*
    handling to userspace since userspace MSR filters "win" over KVM's default
    handling.
    Signed-off-by: default avatarMaciej S. Szmigiero <maciej.szmigiero@oracle.com>
    Cc: stable@vger.kernel.org
    Link: https://lore.kernel.org/r/1ce85d9c7c9e9632393816cf19c902e0a3f411f1.1697731406.git.maciej.szmigiero@oracle.com
    [sean: call out MSR filtering alternative]
    Signed-off-by: default avatarSean Christopherson <seanjc@google.com>
    2770d472
msr-index.h 42.6 KB