• Sean Christopherson's avatar
    KVM: x86/mmu: Use EMULTYPE flag to track write #PFs to shadow pages · 258d985f
    Sean Christopherson authored
    Use a new EMULTYPE flag, EMULTYPE_WRITE_PF_TO_SP, to track page faults
    on self-changing writes to shadowed page tables instead of propagating
    that information to the emulator via a semi-persistent vCPU flag.  Using
    a flag in "struct kvm_vcpu_arch" is confusing, especially as implemented,
    as it's not at all obvious that clearing the flag only when emulation
    actually occurs is correct.
    
    E.g. if KVM sets the flag and then retries the fault without ever getting
    to the emulator, the flag will be left set for future calls into the
    emulator.  But because the flag is consumed if and only if both
    EMULTYPE_PF and EMULTYPE_ALLOW_RETRY_PF are set, and because
    EMULTYPE_ALLOW_RETRY_PF is deliberately not set for direct MMUs, emulated
    MMIO, or while L2 is active, KVM avoids false positives on a stale flag
    since FNAME(page_fault) is guaranteed to be run and refresh the flag
    before it's ultimately consumed by the tail end of reexecute_instruction().
    Signed-off-by: default avatarSean Christopherson <seanjc@google.com>
    Message-Id: <20230202182817.407394-2-seanjc@google.com>
    Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
    258d985f
mmu_internal.h 10.7 KB