Skip to content

Commit 5ff5765

Browse files
ctmarinasgregkh
authored andcommitted
arm64: mte: Do not warn if the page is already tagged in copy_highpage()
[ Upstream commit b98c94e ] The arm64 copy_highpage() assumes that the destination page is newly allocated and not MTE-tagged (PG_mte_tagged unset) and warns accordingly. However, following commit 0609139 ("mm: migrate: support poisoned recover from migrate folio"), folio_mc_copy() is called before __folio_migrate_mapping(). If the latter fails (-EAGAIN), the copy will be done again to the same destination page. Since copy_highpage() already set the PG_mte_tagged flag, this second copy will warn. Replace the WARN_ON_ONCE(page already tagged) in the arm64 copy_highpage() with a comment. Reported-by: [email protected] Link: https://lore.kernel.org/r/[email protected] Reviewed-by: David Hildenbrand <[email protected]> Cc: Will Deacon <[email protected]> Cc: Kefeng Wang <[email protected]> Cc: [email protected] # 6.12.x Reviewed-by: Yang Shi <[email protected]> Signed-off-by: Catalin Marinas <[email protected]> [ omitted hugetlb MTE changes ] Signed-off-by: Sasha Levin <[email protected]> Signed-off-by: Greg Kroah-Hartman <[email protected]>
1 parent 1a1b13e commit 5ff5765

File tree

1 file changed

+7
-2
lines changed

1 file changed

+7
-2
lines changed

arch/arm64/mm/copypage.c

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,13 @@ void copy_highpage(struct page *to, struct page *from)
2525
page_kasan_tag_reset(to);
2626

2727
if (system_supports_mte() && page_mte_tagged(from)) {
28-
/* It's a new page, shouldn't have been tagged yet */
29-
WARN_ON_ONCE(!try_page_mte_tagging(to));
28+
/*
29+
* Most of the time it's a new page that shouldn't have been
30+
* tagged yet. However, folio migration can end up reusing the
31+
* same page without untagging it. Ignore the warning if the
32+
* page is already tagged.
33+
*/
34+
try_page_mte_tagging(to);
3035
mte_copy_page_tags(kto, kfrom);
3136
set_page_mte_tagged(to);
3237
}

0 commit comments

Comments
 (0)