From: Balbir Singh Date: Wed, 19 Feb 2025 23:13:37 +0000 (+1100) Subject: mm/migrate_device: do not access pgmap for non zone device pages X-Git-Tag: next-20250224~159^2~91 X-Git-Url: https://gentwo.org/gitweb/?a=commitdiff_plain;h=21e96315c2e47047226a422a2caf963b64ccf103;p=linux%2F.git mm/migrate_device: do not access pgmap for non zone device pages page_pgmap() is referenced before checking if the page is a zone device page and this triggers the warning in page_pgmap(). Refactor the code to use the helper function after relevant checks. Link: https://lkml.kernel.org/r/20250219231337.364133-1-balbirs@nvidia.com Signed-off-by: Balbir Singh Reviewed-by: Alistair Popple Acked-by: David Hildenbrand Cc: Jason Gunthorpe Cc: Dan Williams Signed-off-by: Andrew Morton --- diff --git a/mm/migrate_device.c b/mm/migrate_device.c index 6771893d4601..e0bf771edb6f 100644 --- a/mm/migrate_device.c +++ b/mm/migrate_device.c @@ -153,14 +153,17 @@ static int migrate_vma_collect_pmd(pmd_t *pmdp, goto next; } page = vm_normal_page(migrate->vma, addr, pte); - pgmap = page_pgmap(page); if (page && !is_zone_device_page(page) && !(migrate->flags & MIGRATE_VMA_SELECT_SYSTEM)) goto next; - else if (page && is_device_coherent_page(page) && - (!(migrate->flags & MIGRATE_VMA_SELECT_DEVICE_COHERENT) || - pgmap->owner != migrate->pgmap_owner)) - goto next; + else if (page && is_device_coherent_page(page)) { + pgmap = page_pgmap(page); + + if (!(migrate->flags & + MIGRATE_VMA_SELECT_DEVICE_COHERENT) || + pgmap->owner != migrate->pgmap_owner) + goto next; + } mpfn = migrate_pfn(pfn) | MIGRATE_PFN_MIGRATE; mpfn |= pte_write(pte) ? MIGRATE_PFN_WRITE : 0; }