Re: [PATCH v2] drm/pagemap: no need to recheck own pagemap in migrate_to_devmem

"Zhaoyu Liu" <[email protected]>
Newsgroups org.kernel.vger.linux-kernel,org.freedesktop.lists.dri-devel
Message-ID <aoLTg6dKKQ99KcmM@hostpc>
Hi,
Could you please help review this patch?

Thanks,
zackary

> On Thu, Aug 06, 2026 at 09:21:41PM +0800, Zhaoyu Liu wrote:
> > The second loop in drm_pagemap_migrate_to_devmem() checks
> > `page_pgmap(src_page) == pagemap && !can_migrate_same_pagemap` to skip
> > pages already on the target pagemap. However, this condition is always
> > false at this point: if can_migrate_same_pagemap is false and any own
> > pages exist, the first loop already returns -EBUSY before reaching here.
> > 
> > v2:
> >   - Skip the no-op migrate_vma_pages() when all pages already reside on
> >     the target pagemap.
> > 
> > Signed-off-by: Zhaoyu Liu <[email protected]>
> > ---
> >  drivers/gpu/drm/drm_pagemap.c | 21 ++++++---------------
> >  1 file changed, 6 insertions(+), 15 deletions(-)
> > 
> > diff --git a/drivers/gpu/drm/drm_pagemap.c b/drivers/gpu/drm/drm_pagemap.c
> > index 15c78eca180b..64922b944092 100644
> > --- a/drivers/gpu/drm/drm_pagemap.c
> > +++ b/drivers/gpu/drm/drm_pagemap.c
> > @@ -698,7 +698,7 @@ int drm_pagemap_migrate_to_devmem(struct drm_pagemap_devmem *devmem_allocation,
> >  		 * nothing. Raced or unknown device pages.
> >  		 */
> >  		err = -EBUSY;
> > -		goto err_aborted_migration;
> > +		goto direct_finalize;
> >  	}
> >  
> >  	/* Count device-private pages to migrate */
> > @@ -719,19 +719,17 @@ int drm_pagemap_migrate_to_devmem(struct drm_pagemap_devmem *devmem_allocation,
> >  	if (own_pages == npages) {
> >  		err = 0;
> >  		drm_dbg(dpagemap->drm, "Migration wasn't necessary.\n");
> > -		goto err_aborted_migration;
> > +		goto direct_finalize;
> >  	} else if (own_pages && !mdetails->can_migrate_same_pagemap) {
> >  		err = -EBUSY;
> >  		drm_dbg(dpagemap->drm, "Migration aborted due to fragmentation.\n");
> > -		goto err_aborted_migration;
> > +		goto direct_finalize;
> >  	}
> >  
> >  	err = ops->populate_devmem_pfn(devmem_allocation, npages, migrate.dst);
> >  	if (err)
> >  		goto err_aborted_migration;
> >  
> > -	own_pages = 0;
> > -
> >  	for (i = 0; i < npages;) {
> >  		unsigned long j;
> >  		struct page *page = pfn_to_page(migrate.dst[i]);
> > @@ -744,12 +742,7 @@ int drm_pagemap_migrate_to_devmem(struct drm_pagemap_devmem *devmem_allocation,
> >  			struct drm_pagemap_zdd *src_zdd =
> >  				drm_pagemap_page_zone_device_data(src_page);
> >  
> > -			if (page_pgmap(src_page) == pagemap &&
> > -			    !mdetails->can_migrate_same_pagemap) {
> > -				migrate.dst[i] = 0;
> > -				own_pages++;
> > -				goto next;
> > -			}
> > +			/* Own or peer device private page */
> >  			cur.dpagemap = src_zdd->dpagemap;
> >  			cur.ops = src_zdd->devmem_allocation->ops;
> >  			cur.device = cur.dpagemap->drm->dev;
> > @@ -786,7 +779,6 @@ int drm_pagemap_migrate_to_devmem(struct drm_pagemap_devmem *devmem_allocation,
> >  			goto err_finalize;
> >  		}
> >  
> > -next:
> >  		i += NR_PAGES(order);
> >  	}
> >  
> > @@ -797,8 +789,6 @@ int drm_pagemap_migrate_to_devmem(struct drm_pagemap_devmem *devmem_allocation,
> >  	if (err)
> >  		goto err_finalize;
> >  
> > -	drm_WARN_ON(dpagemap->drm, !!own_pages);
> > -
> >  	dma_fence_put(devmem_allocation->pre_migrate_fence);
> >  	devmem_allocation->pre_migrate_fence = NULL;
> >  
> > @@ -822,11 +812,12 @@ int drm_pagemap_migrate_to_devmem(struct drm_pagemap_devmem *devmem_allocation,
> >  		i += nr_pages;
> >  	}
> >  
> > -	if (!err && migrated_pages < npages - own_pages) {
> > +	if (!err && migrated_pages < npages) {
> >  		drm_dbg(dpagemap->drm, "Raced while finalizing migration.\n");
> >  		err = -EBUSY;
> >  	}
> >  
> > +direct_finalize:
> >  	migrate_vma_finalize(&migrate);
> >  err_free:
> >  	drm_pagemap_zdd_put(zdd);
> > -- 
> > 2.34.1
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.