Commit e8aa0fd6 authored by Kefeng Wang's avatar Kefeng Wang Committed by Tong Tiangen
Browse files

mm: migrate_device: unify migrate folio for MIGRATE_SYNC_NO_COPY

mainline inclusion
from mainline-v6.11-rc1
commit 15b0c79cfadad6f84ad773b9e4bd95e8a93a0846
category: feature
bugzilla: https://gitee.com/openeuler/kernel/issues/IAROKE
CVE: NA

Reference: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=15b0c79cfadad6f84ad773b9e4bd95e8a93a0846

--------------------------------

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: default avatarKefeng Wang <wangkefeng.wang@huawei.com>
Reviewed-by: default avatarJane 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: default avatarAndrew Morton <akpm@linux-foundation.org>

Conflicts:
	mm/migrate_device.c
[Conflicts due to folio convert in __migrate_device_pages()]

Signed-off-by: default avatarTong Tiangen <tongtiangen@huawei.com>
parent 4d17ed81
Loading
Loading
Loading
Loading
+9 −7
Original line number Diff line number Diff line
@@ -695,7 +695,7 @@ static void __migrate_device_pages(unsigned long *src_pfns,
		struct page *newpage = migrate_pfn_to_page(dst_pfns[i]);
		struct page *page = migrate_pfn_to_page(src_pfns[i]);
		struct address_space *mapping;
		int r;
		int r, extra_cnt = 0;

		if (!newpage) {
			src_pfns[i] &= ~MIGRATE_PFN_MIGRATE;
@@ -758,15 +758,17 @@ static void __migrate_device_pages(unsigned long *src_pfns,
			continue;
		}

		BUG_ON(folio_test_writeback(page_folio(page)));

		if (migrate && migrate->fault_page == page)
			r = migrate_folio_extra(mapping, page_folio(newpage),
						page_folio(page),
						MIGRATE_SYNC_NO_COPY, 1);
		else
			r = migrate_folio(mapping, page_folio(newpage),
					page_folio(page), MIGRATE_SYNC_NO_COPY);
			extra_cnt = 1;
		r = folio_migrate_mapping(mapping, page_folio(newpage),
						page_folio(page), extra_cnt);
		if (r != MIGRATEPAGE_SUCCESS)
			src_pfns[i] &= ~MIGRATE_PFN_MIGRATE;
		else
			folio_migrate_flags(page_folio(newpage),
					    page_folio(page));
	}

	if (notified)