On Sat, May 17, 2025 at 06:27:10AM +0800, Edgecombe, Rick P wrote: > On Fri, 2025-05-16 at 16:03 +0800, Yan Zhao wrote: > > > > > > > > +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(). > > Yea, lack of consistency would raise other questions. > > > 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)); > > > > Hmm, let's be clear about the logic. This is essentially a mirror TDP only > function, and there we don't have the same invalid root scenarios as the more > complicated cases. I'm not exactly sure how we could hit the warning if they > didn't match. I guess a hole punch on the fd while the TD is getting torn down? In practice, the warning shoudn't be hit because mirror root should only be invalidated after gmem_fd is destroyed. > Let's comment the reasoning at least. Will do.