diff options
author | Jakub Kicinski <kuba@kernel.org> | 2022-10-20 17:49:10 -0700 |
---|---|---|
committer | Jakub Kicinski <kuba@kernel.org> | 2022-10-20 17:49:10 -0700 |
commit | 94adb5e29e0e583283183dbaa852ee9d7d0c4c26 (patch) | |
tree | 3038a63f3ed9632711100f1187c4c53c304b785b /arch/arm64/kernel/mte.c | |
parent | 36875a063b5e3618b42f7bace850473bb88a7c24 (diff) | |
parent | 6d36c728bc2e2d632f4b0dea00df5532e20dfdab (diff) | |
download | linux-94adb5e29e0e583283183dbaa852ee9d7d0c4c26.tar.gz linux-94adb5e29e0e583283183dbaa852ee9d7d0c4c26.tar.bz2 linux-94adb5e29e0e583283183dbaa852ee9d7d0c4c26.zip |
Merge git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net
No conflicts.
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Diffstat (limited to 'arch/arm64/kernel/mte.c')
-rw-r--r-- | arch/arm64/kernel/mte.c | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/arch/arm64/kernel/mte.c b/arch/arm64/kernel/mte.c index aca88470fb69..7467217c1eaf 100644 --- a/arch/arm64/kernel/mte.c +++ b/arch/arm64/kernel/mte.c @@ -48,7 +48,12 @@ static void mte_sync_page_tags(struct page *page, pte_t old_pte, if (!pte_is_tagged) return; - mte_clear_page_tags(page_address(page)); + /* + * 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_clear_page_tags(page_address(page)); } void mte_sync_tags(pte_t old_pte, pte_t pte) @@ -64,7 +69,7 @@ void mte_sync_tags(pte_t old_pte, pte_t pte) /* if PG_mte_tagged is set, tags have already been initialised */ for (i = 0; i < nr_pages; i++, page++) { - if (!test_and_set_bit(PG_mte_tagged, &page->flags)) + if (!test_bit(PG_mte_tagged, &page->flags)) mte_sync_page_tags(page, old_pte, check_swap, pte_is_tagged); } |