From: "David Hildenbrand (Arm)" <[email protected]>

Let's define (pgd|p4d|pud)_leaf(), hard-coding it to "false". Note
that we missed to define pud_leaf() before, allowing architectures to
unknowingly overwrite it.

Still use static inline functions (type checking), and while at it, just
use "bool" as a return value.

We can now drop the arm64 custom variant that did that. As it documents:

        Note: reusing the original pointer means that we may
        dereference the same (live) page-table entry multiple times.
        This is safe because it is still only loaded once in the
        context of each level and the CPU guarantees same-address
        read-after-read ordering.

We now have the same situation. Don't document that, as we will be
removing the double read next.

Signed-off-by: David Hildenbrand (Arm) <[email protected]>
Signed-off-by: Yeoreum Yun <[email protected]>
---
 arch/arm64/include/asm/pgtable.h    | 23 -----------------------
 include/asm-generic/pgtable-nop4d.h |  2 ++
 include/asm-generic/pgtable-nopmd.h |  3 ++-
 include/asm-generic/pgtable-nopud.h |  2 ++
 4 files changed, 6 insertions(+), 24 deletions(-)

diff --git a/arch/arm64/include/asm/pgtable.h b/arch/arm64/include/asm/pgtable.h
index a2681d7553584..6185fc291fd7d 100644
--- a/arch/arm64/include/asm/pgtable.h
+++ b/arch/arm64/include/asm/pgtable.h
@@ -1188,29 +1188,6 @@ static inline bool pgtable_l5_enabled(void) { return 
false; }
 #define p4d_clear_fixmap()
 
 #define p4d_offset_kimg(dir,addr)      ((p4d_t *)dir)
-
-static inline
-p4d_t *p4d_offset_lockless_folded(pgd_t *pgdp, pgd_t pgd, unsigned long addr)
-{
-       /*
-        * With runtime folding of the pud, pud_offset_lockless() passes
-        * the 'pgd_t *' we return here to p4d_to_folded_pud(), which
-        * will offset the pointer assuming that it points into
-        * a page-table page. However, the fast GUP path passes us a
-        * pgd_t allocated on the stack and so we must use the original
-        * pointer in 'pgdp' to construct the p4d pointer instead of
-        * using the generic p4d_offset_lockless() implementation.
-        *
-        * Note: reusing the original pointer means that we may
-        * dereference the same (live) page-table entry multiple times.
-        * This is safe because it is still only loaded once in the
-        * context of each level and the CPU guarantees same-address
-        * read-after-read ordering.
-        */
-       return p4d_offset(pgdp, addr);
-}
-#define p4d_offset_lockless p4d_offset_lockless_folded
-
 #endif  /* CONFIG_PGTABLE_LEVELS > 4 */
 
 #define pgd_ERROR(e)   \
diff --git a/include/asm-generic/pgtable-nop4d.h 
b/include/asm-generic/pgtable-nop4d.h
index 89c21f84cffbe..c6a5a43899b50 100644
--- a/include/asm-generic/pgtable-nop4d.h
+++ b/include/asm-generic/pgtable-nop4d.h
@@ -22,6 +22,8 @@ static inline int pgd_none(pgd_t pgd)         { return 0; }
 static inline int pgd_bad(pgd_t pgd)           { return 0; }
 static inline int pgd_present(pgd_t pgd)       { return 1; }
 static inline void pgd_clear(pgd_t *pgd)       { }
+static inline bool pgd_leaf(pgd_t pgd)         { return false; }
+#define pgd_leaf pgd_leaf
 #define p4d_ERROR(p4d)                         (pgd_ERROR((p4d).pgd))
 
 #define pgd_populate(mm, pgd, p4d)             do { } while (0)
diff --git a/include/asm-generic/pgtable-nopmd.h 
b/include/asm-generic/pgtable-nopmd.h
index 36b6490ed1808..dbd38b4c3a056 100644
--- a/include/asm-generic/pgtable-nopmd.h
+++ b/include/asm-generic/pgtable-nopmd.h
@@ -31,7 +31,8 @@ static inline int pud_none(pud_t pud)         { return 0; }
 static inline int pud_bad(pud_t pud)           { return 0; }
 static inline int pud_present(pud_t pud)       { return 1; }
 static inline int pud_user(pud_t pud)          { return 0; }
-static inline int pud_leaf(pud_t pud)          { return 0; }
+static inline bool pud_leaf(pud_t pud)         { return false; }
+#define pud_leaf pud_leaf
 static inline void pud_clear(pud_t *pud)       { }
 #define pmd_ERROR(pmd)                         (pud_ERROR((pmd).pud))
 
diff --git a/include/asm-generic/pgtable-nopud.h 
b/include/asm-generic/pgtable-nopud.h
index 356cbfbaab247..6c9bca78047c4 100644
--- a/include/asm-generic/pgtable-nopud.h
+++ b/include/asm-generic/pgtable-nopud.h
@@ -29,6 +29,8 @@ static inline int p4d_none(p4d_t p4d)         { return 0; }
 static inline int p4d_bad(p4d_t p4d)           { return 0; }
 static inline int p4d_present(p4d_t p4d)       { return 1; }
 static inline void p4d_clear(p4d_t *p4d)       { }
+static inline bool p4d_leaf(p4d_t p4d)         { return false; }
+#define p4d_leaf p4d_leaf
 #define pud_ERROR(pud)                         (p4d_ERROR((pud).p4d))
 
 #define p4d_populate(mm, p4d, pud)             do { } while (0)
-- 
LEVI:{C3F47F37-75D8-414A-A8BA-3980EC8A46D7}


Reply via email to