• Sean Christopherson's avatar
    KVM: x86/mmu: Explicitly track only a single invalid mmu generation · ca333add
    Sean Christopherson authored
    Toggle mmu_valid_gen between '0' and '1' instead of blindly incrementing
    the generation.  Because slots_lock is held for the entire duration of
    zapping obsolete pages, it's impossible for there to be multiple invalid
    generations associated with shadow pages at any given time.
    
    Toggling between the two generations (valid vs. invalid) allows changing
    mmu_valid_gen from an unsigned long to a u8, which reduces the size of
    struct kvm_mmu_page from 160 to 152 bytes on 64-bit KVM, i.e. reduces
    KVM's memory footprint by 8 bytes per shadow page.
    
    Set sp->mmu_valid_gen before it is added to active_mmu_pages.
    Functionally this has no effect as kvm_mmu_alloc_page() has a single
    caller that sets sp->mmu_valid_gen soon thereafter, but visually it is
    jarring to see a shadow page being added to the list without its
    mmu_valid_gen first being set.
    Signed-off-by: default avatarSean Christopherson <sean.j.christopherson@intel.com>
    Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
    ca333add
kvm_host.h 48.2 KB