[RFC PATCH 07/34] mm/pgtable: define (pgd|p4d|pud)_offset_lockless() for folded page tables
Yeoreum Yun
yeoreum.yun at arm.com
Mon Jul 13 06:55:46 PDT 2026
From: "David Hildenbrand (Arm)" <david at kernel.org>
The default helpers fallback to pud_offset(), passing a pointer to the
stack value.
Let's provide variants that do exactly what (pgd|p4d|pud)_offset() do,
but ignore the passed pgd_t/p4d_t/pud_t, consequently not working on a
pointer to the stack value like the default handlers would.
Signed-off-by: David Hildenbrand (Arm) <david at kernel.org>
Signed-off-by: Yeoreum Yun <yeoreum.yun at arm.com>
---
include/asm-generic/pgtable-nop4d.h | 7 +++++++
include/asm-generic/pgtable-nopmd.h | 7 +++++++
include/asm-generic/pgtable-nopud.h | 7 +++++++
3 files changed, 21 insertions(+)
diff --git a/include/asm-generic/pgtable-nop4d.h b/include/asm-generic/pgtable-nop4d.h
index c6a5a43899b50..019c3f074b771 100644
--- a/include/asm-generic/pgtable-nop4d.h
+++ b/include/asm-generic/pgtable-nop4d.h
@@ -39,6 +39,13 @@ static inline p4d_t *p4d_offset(pgd_t *pgd, unsigned long address)
return (p4d_t *)pgd;
}
+static inline p4d_t *p4d_offset_lockless(pgd_t *pgdp, pgd_t pgd,
+ unsigned long address)
+{
+ return (p4d_t *)pgdp;
+}
+#define p4d_offset_lockless p4d_offset_lockless
+
#define p4d_val(x) (pgd_val((x).pgd))
#define __p4d(x) ((p4d_t) { __pgd(x) })
diff --git a/include/asm-generic/pgtable-nopmd.h b/include/asm-generic/pgtable-nopmd.h
index dbd38b4c3a056..ae2eff44889ac 100644
--- a/include/asm-generic/pgtable-nopmd.h
+++ b/include/asm-generic/pgtable-nopmd.h
@@ -50,6 +50,13 @@ static inline pmd_t * pmd_offset(pud_t * pud, unsigned long address)
}
#define pmd_offset pmd_offset
+static inline pmd_t *pmd_offset_lockless(pud_t *pudp, pud_t pud,
+ unsigned long address)
+{
+ return (pmd_t *)pudp;
+}
+#define pmd_offset_lockless pmd_offset_lockless
+
#define pmd_val(x) (pud_val((x).pud))
#define __pmd(x) ((pmd_t) { __pud(x) } )
diff --git a/include/asm-generic/pgtable-nopud.h b/include/asm-generic/pgtable-nopud.h
index 6c9bca78047c4..5a2b0a81ae197 100644
--- a/include/asm-generic/pgtable-nopud.h
+++ b/include/asm-generic/pgtable-nopud.h
@@ -47,6 +47,13 @@ static inline pud_t *pud_offset(p4d_t *p4d, unsigned long address)
}
#define pud_offset pud_offset
+static inline pud_t *pud_offset_lockless(p4d_t *p4dp, p4d_t p4d,
+ unsigned long address)
+{
+ return (pud_t *)p4dp;
+}
+#define pud_offset_lockless pud_offset_lockless
+
#define pud_val(x) (p4d_val((x).p4d))
#define __pud(x) ((pud_t) { __p4d(x) })
--
LEVI:{C3F47F37-75D8-414A-A8BA-3980EC8A46D7}
More information about the kvm-riscv
mailing list