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

mm: add folio_mc_copy()

mainline inclusion
from mainline-v6.11-rc1
commit 02f4ee5a144cef6b26421cb42cca64bb4138d459
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=02f4ee5a144cef6b26421cb42cca64bb4138d459

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

Add a #MC variant of folio_copy() which uses copy_mc_highpage() to support

Link: https://lkml.kernel.org/r/20240626085328.608006-3-wangkefeng.wang@huawei.com


Signed-off-by: default avatarKefeng Wang <wangkefeng.wang@huawei.com>
Reviewed-by: default avatarJane Chu <jane.chu@oracle.com>
Reviewed-by: default avatarMiaohe Lin <linmiaohe@huawei.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: Lance Yang <ioworker0@gmail.com>
Cc: Matthew Wilcox (Oracle) <willy@infradead.org>
Cc: Muchun Song <muchun.song@linux.dev>
Cc: Naoya Horiguchi <nao.horiguchi@gmail.com>
Cc: Oscar Salvador <osalvador@suse.de>
Cc: Tony Luck <tony.luck@intel.com>
Cc: Vishal Moola (Oracle) <vishal.moola@gmail.com>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>

Conflicts:
	mm/util.c
[Conflicts due to is folio_copy() is exported by 4093602d6bb ("nilfs2:
convert nilfs_copy_page() to nilfs_copy_folio()")]
Signed-off-by: default avatarTong Tiangen <tongtiangen@huawei.com>
parent 4d6e03a7
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -1318,6 +1318,7 @@ void put_pages_list(struct list_head *pages);

void split_page(struct page *page, unsigned int order);
void folio_copy(struct folio *dst, struct folio *src);
int folio_mc_copy(struct folio *dst, struct folio *src);

unsigned long nr_free_buffer_pages(void);

+17 −0
Original line number Diff line number Diff line
@@ -815,6 +815,23 @@ void folio_copy(struct folio *dst, struct folio *src)
	}
}

int folio_mc_copy(struct folio *dst, struct folio *src)
{
	long nr = folio_nr_pages(src);
	long i = 0;

	for (;;) {
		if (copy_mc_highpage(folio_page(dst, i), folio_page(src, i)))
			return -EHWPOISON;
		if (++i == nr)
			break;
		cond_resched();
	}

	return 0;
}
EXPORT_SYMBOL(folio_mc_copy);

int sysctl_overcommit_memory __read_mostly = OVERCOMMIT_GUESS;
int sysctl_overcommit_ratio __read_mostly = 50;
unsigned long sysctl_overcommit_kbytes __read_mostly;