On Mon, 7 Jul 2025 09:29:30 +0200, david@xxxxxxxxxx wrote: > > @@ -680,32 +724,47 @@ static long vfio_pin_pages_remote(struct vfio_dma *dma, unsigned long vaddr, > > * and rsvd here, and therefore continues to use the batch. > > */ > > while (true) { > > + long nr_pages, acct_pages = 0; > > + > > if (pfn != *pfn_base + pinned || > > rsvd != is_invalid_reserved_pfn(pfn)) > > goto out; > > > > + /* > > + * Using GUP with the FOLL_LONGTERM in > > + * vaddr_get_pfns() will not return invalid > > + * or reserved pages. > > + */ > > + nr_pages = num_pages_contiguous( > > + &batch->pages[batch->offset], > > + batch->size); > > + if (!rsvd) { > > + acct_pages = nr_pages; > > + acct_pages -= vpfn_pages(dma, iova, nr_pages); > > + } > > + > > /* > > * Reserved pages aren't counted against the user, > > * externally pinned pages are already counted against > > * the user. > > */ > > - if (!rsvd && !vfio_find_vpfn(dma, iova)) { > > + if (acct_pages) { > > if (!dma->lock_cap && > > - mm->locked_vm + lock_acct + 1 > limit) { > > + mm->locked_vm + lock_acct + acct_pages > limit) { > > Weird indentation change. > > It should be > > if (!dma->lock_cap && > mm->locked_vm + lock_acct + acct_pages > limit) { > > ^ aligned here Thank you! We need the following fixup code. diff --git a/drivers/vfio/vfio_iommu_type1.c b/drivers/vfio/vfio_iommu_type1.c index 03fce54e1372..6909275e46c2 100644 --- a/drivers/vfio/vfio_iommu_type1.c +++ b/drivers/vfio/vfio_iommu_type1.c @@ -750,7 +750,7 @@ static long vfio_pin_pages_remote(struct vfio_dma *dma, unsigned long vaddr, */ if (acct_pages) { if (!dma->lock_cap && - mm->locked_vm + lock_acct + acct_pages > limit) { + mm->locked_vm + lock_acct + acct_pages > limit) { pr_warn("%s: RLIMIT_MEMLOCK (%ld) exceeded\n", __func__, limit << PAGE_SHIFT); ret = -ENOMEM; > Please don't drop acks/rbs already given in previous submissions. Sorry for the inconvenience it may have caused. > Acked-by: David Hildenbrand <david@xxxxxxxxxx> Thank you once again for your review. Thanks, Zhe