Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

parisc: Define and use set_pte_at()

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+

authored by

John David Anglin and committed by
Helge Deller
802e5548 52ce9406

+4 -3
+4 -3
arch/parisc/include/asm/pgtable.h
··· 276 276 #define pte_none(x) (pte_val(x) == 0) 277 277 #define pte_present(x) (pte_val(x) & _PAGE_PRESENT) 278 278 #define pte_user(x) (pte_val(x) & _PAGE_USER) 279 - #define pte_clear(mm, addr, xp) set_pte(xp, __pte(0)) 279 + #define pte_clear(mm, addr, xp) set_pte_at((mm), (addr), (xp), __pte(0)) 280 280 281 281 #define pmd_flag(x) (pmd_val(x) & PxD_FLAG_MASK) 282 282 #define pmd_address(x) ((unsigned long)(pmd_val(x) &~ PxD_FLAG_MASK) << PxD_VALUE_SHIFT) ··· 392 392 } 393 393 } 394 394 #define set_ptes set_ptes 395 + #define set_pte_at(mm, addr, ptep, pte) set_ptes(mm, addr, ptep, pte, 1) 395 396 396 397 /* Used for deferring calls to flush_dcache_page() */ 397 398 ··· 457 456 if (!pte_young(pte)) { 458 457 return 0; 459 458 } 460 - set_pte(ptep, pte_mkold(pte)); 459 + set_pte_at(vma->vm_mm, addr, ptep, pte_mkold(pte)); 461 460 return 1; 462 461 } 463 462 ··· 467 466 struct mm_struct; 468 467 static inline void ptep_set_wrprotect(struct mm_struct *mm, unsigned long addr, pte_t *ptep) 469 468 { 470 - set_pte(ptep, pte_wrprotect(*ptep)); 469 + set_pte_at(mm, addr, ptep, pte_wrprotect(*ptep)); 471 470 } 472 471 473 472 #define pte_same(A,B) (pte_val(A) == pte_val(B))