]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
riscv: mm: ptep_get_and_clear(): avoid atomic ops when !CONFIG_SMP
authorPaul Walmsley <pjw@kernel.org>
Tue, 18 Nov 2025 04:19:27 +0000 (21:19 -0700)
committerPaul Walmsley <pjw@kernel.org>
Fri, 19 Dec 2025 07:18:33 +0000 (00:18 -0700)
When !CONFIG_SMP, there's no need for atomic operations in
ptep_get_and_clear(), so, similar to x86, let's not use atomics in
this case.

Cc: Alexandre Ghiti <alex@ghiti.fr>
Signed-off-by: Paul Walmsley <pjw@kernel.org>
arch/riscv/include/asm/pgtable.h

index 1df8a6adb407e0c8ed54a545402fbb5b1098e19f..ebab8ecd78b203978e76b5cf6b1979b09b1318a8 100644 (file)
@@ -660,7 +660,13 @@ extern int ptep_test_and_clear_young(struct vm_area_struct *vma, unsigned long a
 static inline pte_t ptep_get_and_clear(struct mm_struct *mm,
                                       unsigned long address, pte_t *ptep)
 {
+#ifdef CONFIG_SMP
        pte_t pte = __pte(atomic_long_xchg((atomic_long_t *)ptep, 0));
+#else
+       pte_t pte = *ptep;
+
+       set_pte(ptep, __pte(0));
+#endif
 
        page_table_check_pte_clear(mm, pte);