]> www.infradead.org Git - users/dwmw2/linux.git/commitdiff
riscv: Implement pte_accessible()
authorAlexandre Ghiti <alexghiti@rivosinc.com>
Sun, 28 Jan 2024 11:59:53 +0000 (12:59 +0100)
committerPalmer Dabbelt <palmer@rivosinc.com>
Wed, 26 Jun 2024 14:56:26 +0000 (07:56 -0700)
Like other architectures, a pte is accessible if it is present or if
there is a pending tlb flush and the pte is protnone (which could be the
case when a pte is downgraded to protnone before a flush tlb is
executed).

Signed-off-by: Alexandre Ghiti <alexghiti@rivosinc.com>
Link: https://lore.kernel.org/r/20240128115953.25085-1-alexghiti@rivosinc.com
Signed-off-by: Palmer Dabbelt <palmer@rivosinc.com>
arch/riscv/include/asm/pgtable.h

index aad8b8ca51f1202d547e23736a459e404d03158d..4dbfaa629df797a29060dce98072b1dcc98750d6 100644 (file)
@@ -350,6 +350,19 @@ static inline int pte_present(pte_t pte)
        return (pte_val(pte) & (_PAGE_PRESENT | _PAGE_PROT_NONE));
 }
 
+#define pte_accessible pte_accessible
+static inline unsigned long pte_accessible(struct mm_struct *mm, pte_t a)
+{
+       if (pte_val(a) & _PAGE_PRESENT)
+               return true;
+
+       if ((pte_val(a) & _PAGE_PROT_NONE) &&
+           atomic_read(&mm->tlb_flush_pending))
+               return true;
+
+       return false;
+}
+
 static inline int pte_none(pte_t pte)
 {
        return (pte_val(pte) == 0);