aboutsummaryrefslogtreecommitdiff
path: root/arch/arm64/mm/mteswap.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/arm64/mm/mteswap.c')
-rw-r--r--arch/arm64/mm/mteswap.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/arch/arm64/mm/mteswap.c b/arch/arm64/mm/mteswap.c
index 4334dec93bd4..bed803d8e158 100644
--- a/arch/arm64/mm/mteswap.c
+++ b/arch/arm64/mm/mteswap.c
@@ -53,7 +53,12 @@ bool mte_restore_tags(swp_entry_t entry, struct page *page)
if (!tags)
return false;
- mte_restore_page_tags(page_address(page), tags);
+ /*
+ * Test PG_mte_tagged again in case it was racing with another
+ * set_pte_at().
+ */
+ if (!test_and_set_bit(PG_mte_tagged, &page->flags))
+ mte_restore_page_tags(page_address(page), tags);
return true;
}