• Sean Christopherson's avatar
    KVM: x86/mmu: Don't drop level/direct from MMU role calculation · a102a674
    Sean Christopherson authored
    Use the calculated role as-is when propagating it to kvm_mmu.mmu_role,
    i.e. stop masking off meaningful fields.  The concept of masking off
    fields came from kvm_mmu_pte_write(), which (correctly) ignores certain
    fields when comparing kvm_mmu_page.role against kvm_mmu.mmu_role, e.g.
    the current mmu's access and level have no relation to a shadow page's
    access and level.
    
    Masking off the level causes problems for 5-level paging, e.g. CR4.LA57
    has its own redundant flag in the extended role, and nested EPT would
    need a similar hack to support 5-level paging for L2.
    
    Opportunistically rework the mask for kvm_mmu_pte_write() to define the
    fields that should be ignored as opposed to the fields that should be
    checked, i.e. make it opt-out instead of opt-in so that new fields are
    automatically picked up.  While doing so, stop ignoring "direct".  The
    field is effectively ignored anyways because kvm_mmu_pte_write() is only
    reached with an indirect mmu and the loop only walks indirect shadow
    pages, but double checking "direct" literally costs nothing.
    Signed-off-by: default avatarSean Christopherson <sean.j.christopherson@intel.com>
    Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
    a102a674
mmu.c 169 KB