On Fri, May 16, 2025 at 03:46:53PM +0800, Yan Zhao wrote: > On Wed, May 14, 2025 at 06:56:26AM +0800, Edgecombe, Rick P wrote: > > On Thu, 2025-04-24 at 11:08 +0800, Yan Zhao wrote: > > > /* > > > * If can_yield is true, will release the MMU lock and reschedule if the > > > * scheduler needs the CPU or there is contention on the MMU lock. If this > > > @@ -991,6 +1006,8 @@ static bool tdp_mmu_zap_leafs(struct kvm *kvm, struct kvm_mmu_page *root, > > > !is_last_spte(iter.old_spte, iter.level)) > > > continue; > > > > > > + WARN_ON_ONCE(iter_split_required(kvm, root, &iter, start, end)); > > > + > > > > Kind of unrelated change? But good idea. Maybe for another patch. > Yes, will move it to a separate patch in a formal version. > As initial RFC, I hoped to show related changes in one patch to allow a whole > picture. > > > > +int kvm_tdp_mmu_gfn_range_split_boundary(struct kvm *kvm, struct kvm_gfn_range *range) > > > +{ > > > + enum kvm_tdp_mmu_root_types types; > > > + struct kvm_mmu_page *root; > > > + bool flush = false; > > > + int ret; > > > + > > > + types = kvm_gfn_range_filter_to_root_types(kvm, range->attr_filter) | KVM_INVALID_ROOTS; > > > > What is the reason for KVM_INVALID_ROOTS in this case? > I wanted to keep consistent with that in kvm_tdp_mmu_unmap_gfn_range(). With this consistency, we can warn in tdp_mmu_zap_leafs() as below though there should be no invalid mirror root. WARN_ON_ONCE(iter_split_required(kvm, root, &iter, start, end));