• Paolo Bonzini's avatar
    KVM: x86/mmu: remove ept_ad field · ec283cb1
    Paolo Bonzini authored
    The ept_ad field is used during page walk to determine if the guest PTEs
    have accessed and dirty bits.  In the MMU role, the ad_disabled
    bit represents whether the *shadow* PTEs have the bits, so it
    would be incorrect to replace PT_HAVE_ACCESSED_DIRTY with just
    !mmu->mmu_role.base.ad_disabled.
    
    However, the similar field in the CPU mode, ad_disabled, is initialized
    correctly: to the opposite value of ept_ad for shadow EPT, and zero
    for non-EPT guest paging modes (which always have A/D bits).  It is
    therefore possible to compute PT_HAVE_ACCESSED_DIRTY from the CPU mode,
    like other page-format fields; it just has to be inverted to account
    for the different polarity.
    
    In fact, now that the CPU mode is distinct from the MMU roles, it would
    even be possible to remove PT_HAVE_ACCESSED_DIRTY macro altogether, and
    use !mmu->cpu_role.base.ad_disabled instead.  I am not doing this because
    the macro has a small effect in terms of dead code elimination:
    
       text	   data	    bss	    dec	    hex
     103544	  16665	    112	 120321	  1d601    # as of this patch
     103746	  16665	    112	 120523	  1d6cb    # without PT_HAVE_ACCESSED_DIRTY
    Reviewed-by: default avatarSean Christopherson <seanjc@google.com>
    Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
    ec283cb1
mmu.c 176 KB