Re: [PATCH v3 4/6] drm/pagemap: dma-unmap pages before handling migration errors
"Ghimiray, Himal Prasad" <[email protected]>
| Newsgroups | org.freedesktop.lists.intel-xe,org.freedesktop.lists.dri-devel,org.kernel.vger.linux-kernel,org.kernel.vger.stable,org.kvack.linux-mm |
|---|---|
| Message-ID | <[email protected]> |
On 06-08-2026 04:40, Matthew Brost wrote: > drm_pagemap_migrate_unmap_pages() relies on the pages array to determine > which pages require DMA unmapping. However, > drm_pagemap_migration_unlock_put_pages() clears the array as part of its > cleanup, leaving drm_pagemap_migrate_unmap_pages() with no valid page > information if it is called afterward. > > Call drm_pagemap_migrate_unmap_pages() before > drm_pagemap_migration_unlock_put_pages() so the pages array remains > valid during DMA unmapping. > > Reported-by: Sashiko <[email protected]> > Fixes: f86ad0ed620c ("drm/gpusvm, drm/pagemap: Move migration functionality to drm_pagemap") > Cc: Andrew Morton <[email protected]> > Cc: David Hildenbrand <[email protected]> > Cc: Lorenzo Stoakes <[email protected]> > Cc: Zi Yan <[email protected]> > Cc: Baolin Wang <[email protected]> > Cc: Liam R. Howlett <[email protected]> > Cc: Nico Pache <[email protected]> > Cc: Ryan Roberts <[email protected]> > Cc: Dev Jain <[email protected]> > Cc: Barry Song <[email protected]> > Cc: Lance Yang <[email protected]> > Cc: Usama Arif <[email protected]> > Cc: Joshua Hahn <[email protected]> > Cc: Rakie Kim <[email protected]> > Cc: Byungchul Park <[email protected]> > Cc: Gregory Price <[email protected]> > Cc: Ying Huang <[email protected]> > Cc: Alistair Popple <[email protected]> > Cc: Balbir Singh <[email protected]> > Cc: Maarten Lankhorst <[email protected]> > Cc: Maxime Ripard <[email protected]> > Cc: Thomas Zimmermann <[email protected]> > Cc: David Airlie <[email protected]> > Cc: Simona Vetter <[email protected]> > Cc: Thomas Hellström <[email protected]> > Cc: Francois Dugast <[email protected]> > Cc: [email protected] > Cc: [email protected] > Cc: [email protected] > Cc: [email protected] > Signed-off-by: Matthew Brost <[email protected]> > --- > drivers/gpu/drm/drm_pagemap.c | 12 ++++++------ > 1 file changed, 6 insertions(+), 6 deletions(-) > > diff --git a/drivers/gpu/drm/drm_pagemap.c b/drivers/gpu/drm/drm_pagemap.c > index 892b325fa99b..aef1fcea663d 100644 > --- a/drivers/gpu/drm/drm_pagemap.c > +++ b/drivers/gpu/drm/drm_pagemap.c > @@ -1175,12 +1175,12 @@ int drm_pagemap_evict_to_ram(struct drm_pagemap_devmem *devmem_allocation) > goto err_finalize; > > err_finalize: > + drm_pagemap_migrate_unmap_pages(devmem_allocation->dev, pagemap_addr, dst, npages, > + DMA_FROM_DEVICE, &state); > if (err) > drm_pagemap_migration_unlock_put_pages(npages, dst); > migrate_device_pages(src, dst, npages); > migrate_device_finalize(src, dst, npages); > - drm_pagemap_migrate_unmap_pages(devmem_allocation->dev, pagemap_addr, dst, npages, > - DMA_FROM_DEVICE, &state); > > err_free: > kvfree(buf); > @@ -1305,14 +1305,14 @@ static int __drm_pagemap_migrate_to_ram(struct vm_area_struct *vas, > goto err_finalize; > > err_finalize: > - if (err) > - drm_pagemap_migration_unlock_put_pages(npages, migrate.dst); > - migrate_vma_pages(&migrate); > - migrate_vma_finalize(&migrate); > if (dev) > drm_pagemap_migrate_unmap_pages(dev, pagemap_addr, migrate.dst, > npages, DMA_FROM_DEVICE, > &state); > + if (err) > + drm_pagemap_migration_unlock_put_pages(npages, migrate.dst); > + migrate_vma_pages(&migrate); > + migrate_vma_finalize(&migrate); LGTM Reviewed-by: Himal Prasad Ghimiray <[email protected]> > err_free: > kvfree(buf); > err_out: