• Paolo Bonzini's avatar
    KVM: x86/mmu: look for a cached PGD when going from 32-bit to 64-bit · 5499ea73
    Paolo Bonzini authored
    Right now, PGD caching avoids placing a PAE root in the cache by using the
    old value of mmu->root_level and mmu->shadow_root_level; it does not look
    for a cached PGD if the old root is a PAE one, and then frees it using
    kvm_mmu_free_roots.
    
    Change the logic instead to free the uncacheable root early.
    This way, __kvm_new_mmu_pgd is able to look up the cache when going from
    32-bit to 64-bit (if there is a hit, the invalid root becomes the least
    recently used).  An example of this is nested virtualization with shadow
    paging, when a 64-bit L1 runs a 32-bit L2.
    
    As a side effect (which is actually the reason why this patch was
    written), PGD caching does not use the old value of mmu->root_level
    and mmu->shadow_root_level anymore.
    Reviewed-by: default avatarSean Christopherson <seanjc@google.com>
    Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
    5499ea73
mmu.c 170 KB