@@ -43,6 +43,7 @@ void kvm_mmu_uninit_tdp_mmu(struct kvm *kvm)
4343 if (!kvm -> arch .tdp_mmu_enabled )
4444 return ;
4545
46+ WARN_ON (!list_empty (& kvm -> arch .tdp_mmu_pages ));
4647 WARN_ON (!list_empty (& kvm -> arch .tdp_mmu_roots ));
4748
4849 /*
@@ -81,8 +82,6 @@ static void tdp_mmu_free_sp_rcu_callback(struct rcu_head *head)
8182void kvm_tdp_mmu_put_root (struct kvm * kvm , struct kvm_mmu_page * root ,
8283 bool shared )
8384{
84- gfn_t max_gfn = 1ULL << (shadow_phys_bits - PAGE_SHIFT );
85-
8685 kvm_lockdep_assert_mmu_lock_held (kvm , shared );
8786
8887 if (!refcount_dec_and_test (& root -> tdp_mmu_root_count ))
@@ -94,7 +93,7 @@ void kvm_tdp_mmu_put_root(struct kvm *kvm, struct kvm_mmu_page *root,
9493 list_del_rcu (& root -> link );
9594 spin_unlock (& kvm -> arch .tdp_mmu_pages_lock );
9695
97- zap_gfn_range (kvm , root , 0 , max_gfn , false, false, shared );
96+ zap_gfn_range (kvm , root , 0 , -1ull , false, false, shared );
9897
9998 call_rcu (& root -> rcu_head , tdp_mmu_free_sp_rcu_callback );
10099}
@@ -724,13 +723,29 @@ static bool zap_gfn_range(struct kvm *kvm, struct kvm_mmu_page *root,
724723 gfn_t start , gfn_t end , bool can_yield , bool flush ,
725724 bool shared )
726725{
726+ gfn_t max_gfn_host = 1ULL << (shadow_phys_bits - PAGE_SHIFT );
727+ bool zap_all = (start == 0 && end >= max_gfn_host );
727728 struct tdp_iter iter ;
728729
730+ /*
731+ * No need to try to step down in the iterator when zapping all SPTEs,
732+ * zapping the top-level non-leaf SPTEs will recurse on their children.
733+ */
734+ int min_level = zap_all ? root -> role .level : PG_LEVEL_4K ;
735+
736+ /*
737+ * Bound the walk at host.MAXPHYADDR, guest accesses beyond that will
738+ * hit a #PF(RSVD) and never get to an EPT Violation/Misconfig / #NPF,
739+ * and so KVM will never install a SPTE for such addresses.
740+ */
741+ end = min (end , max_gfn_host );
742+
729743 kvm_lockdep_assert_mmu_lock_held (kvm , shared );
730744
731745 rcu_read_lock ();
732746
733- tdp_root_for_each_pte (iter , root , start , end ) {
747+ for_each_tdp_pte_min_level (iter , root -> spt , root -> role .level ,
748+ min_level , start , end ) {
734749retry :
735750 if (can_yield &&
736751 tdp_mmu_iter_cond_resched (kvm , & iter , flush , shared )) {
@@ -744,9 +759,10 @@ static bool zap_gfn_range(struct kvm *kvm, struct kvm_mmu_page *root,
744759 /*
745760 * If this is a non-last-level SPTE that covers a larger range
746761 * than should be zapped, continue, and zap the mappings at a
747- * lower level.
762+ * lower level, except when zapping all SPTEs .
748763 */
749- if ((iter .gfn < start ||
764+ if (!zap_all &&
765+ (iter .gfn < start ||
750766 iter .gfn + KVM_PAGES_PER_HPAGE (iter .level ) > end ) &&
751767 !is_last_spte (iter .old_spte , iter .level ))
752768 continue ;
@@ -794,12 +810,11 @@ bool __kvm_tdp_mmu_zap_gfn_range(struct kvm *kvm, int as_id, gfn_t start,
794810
795811void kvm_tdp_mmu_zap_all (struct kvm * kvm )
796812{
797- gfn_t max_gfn = 1ULL << (shadow_phys_bits - PAGE_SHIFT );
798813 bool flush = false;
799814 int i ;
800815
801816 for (i = 0 ; i < KVM_ADDRESS_SPACE_NUM ; i ++ )
802- flush = kvm_tdp_mmu_zap_gfn_range (kvm , i , 0 , max_gfn ,
817+ flush = kvm_tdp_mmu_zap_gfn_range (kvm , i , 0 , -1ull ,
803818 flush , false);
804819
805820 if (flush )
@@ -838,7 +853,6 @@ static struct kvm_mmu_page *next_invalidated_root(struct kvm *kvm,
838853 */
839854void kvm_tdp_mmu_zap_invalidated_roots (struct kvm * kvm )
840855{
841- gfn_t max_gfn = 1ULL << (shadow_phys_bits - PAGE_SHIFT );
842856 struct kvm_mmu_page * next_root ;
843857 struct kvm_mmu_page * root ;
844858 bool flush = false;
@@ -854,8 +868,7 @@ void kvm_tdp_mmu_zap_invalidated_roots(struct kvm *kvm)
854868
855869 rcu_read_unlock ();
856870
857- flush = zap_gfn_range (kvm , root , 0 , max_gfn , true, flush ,
858- true);
871+ flush = zap_gfn_range (kvm , root , 0 , -1ull , true, flush , true);
859872
860873 /*
861874 * Put the reference acquired in
0 commit comments