On Wed, Jan 07, 2026 at 10:27:15AM -0800, Matthew Brost wrote: > Avoid unlocking and putting device pages unless they were successfully > locked, and do not calculate migrated_pages on error paths. > > Cc: Thomas Hellström <[email protected]> > Fixes: 75af93b3f5d0 ("drm/pagemap, drm/xe: Support destination migration over > interconnect") > Signed-off-by: Matthew Brost <[email protected]>
Reviewed-by: Francois Dugast <[email protected]> > --- > drivers/gpu/drm/drm_pagemap.c | 8 +++++--- > 1 file changed, 5 insertions(+), 3 deletions(-) > > diff --git a/drivers/gpu/drm/drm_pagemap.c b/drivers/gpu/drm/drm_pagemap.c > index ba099aa7c52f..aa43a8475100 100644 > --- a/drivers/gpu/drm/drm_pagemap.c > +++ b/drivers/gpu/drm/drm_pagemap.c > @@ -582,7 +582,7 @@ int drm_pagemap_migrate_to_devmem(struct > drm_pagemap_devmem *devmem_allocation, > > err = ops->populate_devmem_pfn(devmem_allocation, npages, migrate.dst); > if (err) > - goto err_finalize; > + goto err_aborted_migration; > > own_pages = 0; > > @@ -621,8 +621,10 @@ int drm_pagemap_migrate_to_devmem(struct > drm_pagemap_devmem *devmem_allocation, > err = drm_pagemap_migrate_range(devmem_allocation, migrate.src, > migrate.dst, > pages, pagemap_addr, &last, > &cur, > mdetails); > - if (err) > + if (err) { > + npages = i + 1; > goto err_finalize; > + } > } > cur.start = npages; > cur.ops = NULL; /* Force migration */ > @@ -646,7 +648,7 @@ int drm_pagemap_migrate_to_devmem(struct > drm_pagemap_devmem *devmem_allocation, > err_aborted_migration: > migrate_vma_pages(&migrate); > > - for (i = 0; i < npages;) { > + for (i = 0; !err && i < npages;) { > struct page *page = migrate_pfn_to_page(migrate.src[i]); > unsigned long nr_pages = page ? > NR_PAGES(folio_order(page_folio(page))) : 1; > > -- > 2.34.1 >
