• S
    KVM: SVM: Clear MSR_TSC_AUX[63:32] on write · dbd61273
    Sean Christopherson 提交于
    Force clear bits 63:32 of MSR_TSC_AUX on write to emulate current AMD
    CPUs, which completely ignore the upper 32 bits, including dropping them
    on write.  Emulating AMD hardware will also allow migrating a vCPU from
    AMD hardware to Intel hardware without requiring userspace to manually
    clear the upper bits, which are reserved on Intel hardware.
    
    Presumably, MSR_TSC_AUX[63:32] are intended to be reserved on AMD, but
    sadly the APM doesn't say _anything_ about those bits in the context of
    MSR access.  The RDTSCP entry simply states that RCX contains bits 31:0
    of the MSR, zero extended.  And even worse is that the RDPID description
    implies that it can consume all 64 bits of the MSR:
    
      RDPID reads the value of TSC_AUX MSR used by the RDTSCP instruction
      into the specified destination register. Normal operand size prefixes
      do not apply and the update is either 32 bit or 64 bit based on the
      current mode.
    
    Emulate current hardware behavior to give KVM the best odds of playing
    nice with whatever the behavior of future AMD CPUs happens to be.
    Signed-off-by: NSean Christopherson <seanjc@google.com>
    Message-Id: <20210423223404.3860547-3-seanjc@google.com>
    [Fix broken patch. - Paolo]
    Signed-off-by: NPaolo Bonzini <pbonzini@redhat.com>
    dbd61273
svm.c 124.0 KB