lkml.org 
[lkml]   [2023]   [May]   [25]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    SubjectRe: [PATCH v2 5/6] KVM: x86: Keep a per-VM MTRR state
    From
    On Thu, May 25, 2023, Robert Hoo wrote:
    > On 5/23/2023 2:21 PM, Yan Zhao wrote:
    > IIUC, your saving comes from skips the intermediate state during boot, when
    > APs goes through setting MTRR, which would cause SPTE zap before your this
    > patch set.
    >
    > MHO was, now that your ignores other vCPU's MTRR settings (unless it is
    > different from BP's MTRR?), why not let each vCPU's MTRR set/update directly
    > set to the per-VM MTRR states (if differs from current value). It's guest
    > OS/BIOS's responsibility to keep the consistency anyway. And even if the
    > malfunction caused by the inconsistency might differ from that of native,
    > SDM doesn't clearly state how the malfunction should be, does it?
    > that's to say, anyone knows, when inconsistency happens, does it cause that
    > logical processor malfunction or in fact it impacts the global MTRR
    > settings? If the latter, I think leaving only the per-VM MTRR state aligns
    > with native.

    The MTRRs are not system wide or per-package though, they are per logical CPU.
    Yes, they "need" to be consistent with respect to one another, but only when the
    CPU is actually accessing memory. This is a big reason why trying to track MTRRs
    as a per-VM asset in KVM is so difficult/messy. Software doesn't rendezvous all
    CPUs and then do the write on just one CPU, each CPU does its own writes more or
    less independently.

    > BTW, with regard to KVM_X86_QUIRK_CD_NW_CLEARED, I see svm honors it while
    > vmx doesn't before it clear CR0.CD/NW.
    >
    > svm_set_cr0():
    >
    > if (kvm_check_has_quirk(vcpu->kvm, KVM_X86_QUIRK_CD_NW_CLEARED))
    > hcr0 &= ~(X86_CR0_CD | X86_CR0_NW);
    >
    >
    > vmx_set_cr0():
    >
    > hw_cr0 = (cr0 & ~KVM_VM_CR0_ALWAYS_OFF);
    >
    > Perhaps vmx side can be fixed passingly?

    Sadly, no. SVM and VMX manage guest memtype completely differently. VMX doesn't
    allow CR0.CD=1 when VMX is enabled, and so KVM needs to emulate CR0.CD via the EPT
    memtype.

    \
     
     \ /
      Last update: 2023-05-25 17:01    [W:4.823 / U:0.028 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site