mm: add folio_mc_copy()
Add a #MC variant of folio_copy() which uses copy_mc_highpage() to support #MC handled during folio copy, it will be used in folio migration soon. Link: https://lkml.kernel.org/r/20240626085328.608006-3-wangkefeng.wang@huawei.com Signed-off-by: Kefeng Wang <wangkefeng.wang@huawei.com> Reviewed-by: Jane Chu <jane.chu@oracle.com> Reviewed-by: Miaohe 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: Andrew Morton <akpm@linux-foundation.org>
This commit is contained in:
parent
28bdacbcb3
commit
02f4ee5a14
@ -1291,6 +1291,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
mm/util.c
17
mm/util.c
@ -828,6 +828,23 @@ void folio_copy(struct folio *dst, struct folio *src)
|
||||
}
|
||||
EXPORT_SYMBOL(folio_copy);
|
||||
|
||||
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;
|
||||
|
Loading…
Reference in New Issue
Block a user