mm: migrate_device: unify migrate folio for MIGRATE_SYNC_NO_COPY

The __migrate_device_pages() won't copy page so MIGRATE_SYNC_NO_COPY
passed into migrate_folio()/migrate_folio_extra(), actually a easy way is
just to call folio_migrate_mapping()/folio_migrate_flags(), converting it
to unify and simplify the migrate device pages, which also remove the only
call for MIGRATE_SYNC_NO_COPY.

Link: https://lkml.kernel.org/r/20240524052843.182275-4-wangkefeng.wang@huawei.com
Signed-off-by: Kefeng Wang <wangkefeng.wang@huawei.com>
Reviewed-by: Jane Chu <jane.chu@oracle.com>
Cc: Alistair Popple <apopple@nvidia.com>
Cc: Benjamin LaHaise <bcrl@kvack.org>
Cc: David Hildenbrand <david@redhat.com>
Cc: Hugh Dickins <hughd@google.com>
Cc: Jérôme Glisse <jglisse@redhat.com>
Cc: Jiaqi Yan <jiaqiyan@google.com>
Cc: Matthew Wilcox (Oracle) <willy@infradead.org>
Cc: Miaohe Lin <linmiaohe@huawei.com>
Cc: Muchun Song <muchun.song@linux.dev>
Cc: Naoya Horiguchi <nao.horiguchi@gmail.com>
Cc: Tony Luck <tony.luck@intel.com>
Cc: Vishal Moola (Oracle) <vishal.moola@gmail.com>
Cc: Zi Yan <ziy@nvidia.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
This commit is contained in:
Kefeng Wang 2024-05-24 13:28:41 +08:00 committed by Andrew Morton
parent 6aaaef5b6f
commit 15b0c79cfa

View File

@ -693,7 +693,7 @@ static void __migrate_device_pages(unsigned long *src_pfns,
struct page *page = migrate_pfn_to_page(src_pfns[i]); struct page *page = migrate_pfn_to_page(src_pfns[i]);
struct address_space *mapping; struct address_space *mapping;
struct folio *newfolio, *folio; struct folio *newfolio, *folio;
int r; int r, extra_cnt = 0;
if (!newpage) { if (!newpage) {
src_pfns[i] &= ~MIGRATE_PFN_MIGRATE; src_pfns[i] &= ~MIGRATE_PFN_MIGRATE;
@ -754,14 +754,15 @@ static void __migrate_device_pages(unsigned long *src_pfns,
continue; continue;
} }
BUG_ON(folio_test_writeback(folio));
if (migrate && migrate->fault_page == page) if (migrate && migrate->fault_page == page)
r = migrate_folio_extra(mapping, newfolio, folio, extra_cnt = 1;
MIGRATE_SYNC_NO_COPY, 1); r = folio_migrate_mapping(mapping, newfolio, folio, extra_cnt);
else
r = migrate_folio(mapping, newfolio, folio,
MIGRATE_SYNC_NO_COPY);
if (r != MIGRATEPAGE_SUCCESS) if (r != MIGRATEPAGE_SUCCESS)
src_pfns[i] &= ~MIGRATE_PFN_MIGRATE; src_pfns[i] &= ~MIGRATE_PFN_MIGRATE;
else
folio_migrate_flags(newfolio, folio);
} }
if (notified) if (notified)