On Thu, Apr 24, 2025 at 12:19:32PM +0200, Francesco Lavra wrote: > On 2025-04-24 at 3:08, Yan Zhao wrote: > > diff --git a/virt/kvm/guest_memfd.c b/virt/kvm/guest_memfd.c > > index 4bb140e7f30d..008061734ac5 100644 > > --- a/virt/kvm/guest_memfd.c > > +++ b/virt/kvm/guest_memfd.c > > @@ -292,13 +292,14 @@ static struct folio *kvm_gmem_get_folio(struct > > inode *inode, pgoff_t index, int > > return folio; > > } > > > > -static void kvm_gmem_invalidate_begin(struct kvm_gmem *gmem, pgoff_t > > start, > > - pgoff_t end) > > +static int kvm_gmem_invalidate_begin(struct kvm_gmem *gmem, pgoff_t > > start, > > + pgoff_t end, bool need_split) > > { > > bool flush = false, found_memslot = false; > > struct kvm_memory_slot *slot; > > struct kvm *kvm = gmem->kvm; > > unsigned long index; > > + int ret = 0; > > > > xa_for_each_range(&gmem->bindings, index, slot, start, end - > > 1) { > > pgoff_t pgoff = slot->gmem.pgoff; > > @@ -319,14 +320,23 @@ static void kvm_gmem_invalidate_begin(struct > > kvm_gmem *gmem, pgoff_t start, > > kvm_mmu_invalidate_begin(kvm); > > } > > > > + if (need_split) { > > + ret = kvm_split_boundary_leafs(kvm, > > &gfn_range); > > + if (ret < 0) > > + goto out; > > + > > + flush |= ret; > > + } > > flush |= kvm_mmu_unmap_gfn_range(kvm, &gfn_range); > > } > > > > +out: > > if (flush) > > kvm_flush_remote_tlbs(kvm); > > > > if (found_memslot) > > KVM_MMU_UNLOCK(kvm); > > + return 0; > > Should return ret, not 0 Yes, thank you for the correction!