Skip to content
  • Sean Christopherson's avatar
    KVM: x86/mmu: Micro-optimize nEPT's bad memptype/XWR checks · b5c3c1b3
    Sean Christopherson authored
    Rework the handling of nEPT's bad memtype/XWR checks to micro-optimize
    the checks as much as possible.  Move the check to a separate helper,
    __is_bad_mt_xwr(), which allows the guest_rsvd_check usage in
    paging_tmpl.h to omit the check entirely for paging32/64 (bad_mt_xwr is
    always zero for non-nEPT) while retaining the bitwise-OR of the current
    code for the shadow_zero_check in walk_shadow_page_get_mmio_spte().
    
    Add a comment for the bitwise-OR usage in the mmio spte walk to avoid
    future attempts to "fix" the code, which is what prompted this
    optimization in the first place[*].
    
    Opportunistically remove the superfluous '!= 0' and parantheses, and
    use BIT_ULL() instead of open coding its equivalent.
    
    The net effect is that code generation is largely unchanged for
    walk_shadow_page_get_mmio_spte(), marginally better for
    ept_prefetch_invalid_gpte(), and significantly improved for
    paging32/64_prefetch_invalid_gpte().
    
    Note, walk_shadow_page_get_mmio_spte() can't use a templated version of
    the memtype/XRW as it works on the host's shadow PTEs, e.g. checks that
    KVM hasn't borked its EPT tables.  Even if it could be templated, the
    benefits of having a single implementation far outweight the few uops
    that would be saved for NPT or non-TDP paging, e.g. most compilers
    inline it all the way to up kvm_mmu_page_fault().
    
    [*] https://lkml.kernel.org/r/20200108001859.25254-1-sean.j.christopherson@intel.com
    
    
    
    Cc: Jim Mattson <jmattson@google.com>
    Cc: David Laight <David.Laight@ACULAB.COM>
    Cc: Arvind Sankar <nivedita@alum.mit.edu>
    Signed-off-by: default avatarSean Christopherson <sean.j.christopherson@intel.com>
    Reviewed-by: default avatarVitaly Kuznetsov <vkuznets@redhat.com>
    Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
    b5c3c1b3