From: David Matlack <dmatlack@xxxxxxxxxx> Stop calling make_mmu_pages_available() when handling TDP MMU faults and when allocating TDP MMU roots. The TDP MMU does not participate in the "available MMU pages" tracking and limiting so calling this function is unnecessary work when handling TDP MMU faults. Signed-off-by: David Matlack <dmatlack@xxxxxxxxxx> [sean: apply to root allocation too] Signed-off-by: Sean Christopherson <seanjc@xxxxxxxxxx> --- arch/x86/kvm/mmu/mmu.c | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/arch/x86/kvm/mmu/mmu.c b/arch/x86/kvm/mmu/mmu.c index a5ba7b41263d..0fcf4560f4d8 100644 --- a/arch/x86/kvm/mmu/mmu.c +++ b/arch/x86/kvm/mmu/mmu.c @@ -3569,9 +3569,12 @@ static int mmu_alloc_direct_roots(struct kvm_vcpu *vcpu) int r; write_lock(&vcpu->kvm->mmu_lock); - r = make_mmu_pages_available(vcpu); - if (r < 0) - goto out_unlock; + + if (!is_tdp_mmu_enabled()) { + r = make_mmu_pages_available(vcpu); + if (r < 0) + goto out_unlock; + } if (is_tdp_mmu_enabled()) { root = kvm_tdp_mmu_get_vcpu_root_hpa(vcpu); @@ -4289,14 +4292,15 @@ static int direct_page_fault(struct kvm_vcpu *vcpu, struct kvm_page_fault *fault if (is_page_fault_stale(vcpu, fault)) goto out_unlock; - r = make_mmu_pages_available(vcpu); - if (r) - goto out_unlock; - - if (is_tdp_mmu_enabled()) + if (is_tdp_mmu_enabled()) { r = kvm_tdp_mmu_map(vcpu, fault); - else + } else { + r = make_mmu_pages_available(vcpu); + if (r) + goto out_unlock; + r = __direct_map(vcpu, fault); + } out_unlock: if (is_tdp_mmu_enabled()) -- 2.38.0.rc1.362.ged0d419d3c-goog