| From 802e55488bc2cc1ab6423b720255a785ccac42ce Mon Sep 17 00:00:00 2001 |
| From: John David Anglin <dave.anglin@bell.net> |
| Date: Mon, 21 Jul 2025 16:06:21 -0400 |
| Subject: parisc: Define and use set_pte_at() |
| |
| From: John David Anglin <dave.anglin@bell.net> |
| |
| commit 802e55488bc2cc1ab6423b720255a785ccac42ce upstream. |
| |
| When a PTE is changed, we need to flush the PTE. set_pte_at() |
| was lost in the folio update. PA-RISC version is the same as |
| the generic version. |
| |
| Signed-off-by: John David Anglin <dave.anglin@bell.net> |
| Signed-off-by: Helge Deller <deller@gmx.de> |
| Cc: stable@vger.kernel.org # v5.12+ |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| arch/parisc/include/asm/pgtable.h | 7 ++++--- |
| 1 file changed, 4 insertions(+), 3 deletions(-) |
| |
| --- a/arch/parisc/include/asm/pgtable.h |
| +++ b/arch/parisc/include/asm/pgtable.h |
| @@ -276,7 +276,7 @@ extern unsigned long *empty_zero_page; |
| #define pte_none(x) (pte_val(x) == 0) |
| #define pte_present(x) (pte_val(x) & _PAGE_PRESENT) |
| #define pte_user(x) (pte_val(x) & _PAGE_USER) |
| -#define pte_clear(mm, addr, xp) set_pte(xp, __pte(0)) |
| +#define pte_clear(mm, addr, xp) set_pte_at((mm), (addr), (xp), __pte(0)) |
| |
| #define pmd_flag(x) (pmd_val(x) & PxD_FLAG_MASK) |
| #define pmd_address(x) ((unsigned long)(pmd_val(x) &~ PxD_FLAG_MASK) << PxD_VALUE_SHIFT) |
| @@ -398,6 +398,7 @@ static inline void set_ptes(struct mm_st |
| } |
| } |
| #define set_ptes set_ptes |
| +#define set_pte_at(mm, addr, ptep, pte) set_ptes(mm, addr, ptep, pte, 1) |
| |
| /* Used for deferring calls to flush_dcache_page() */ |
| |
| @@ -462,7 +463,7 @@ static inline int ptep_test_and_clear_yo |
| if (!pte_young(pte)) { |
| return 0; |
| } |
| - set_pte(ptep, pte_mkold(pte)); |
| + set_pte_at(vma->vm_mm, addr, ptep, pte_mkold(pte)); |
| return 1; |
| } |
| |
| @@ -472,7 +473,7 @@ pte_t ptep_clear_flush(struct vm_area_st |
| struct mm_struct; |
| static inline void ptep_set_wrprotect(struct mm_struct *mm, unsigned long addr, pte_t *ptep) |
| { |
| - set_pte(ptep, pte_wrprotect(*ptep)); |
| + set_pte_at(mm, addr, ptep, pte_wrprotect(*ptep)); |
| } |
| |
| #define pte_same(A,B) (pte_val(A) == pte_val(B)) |