[PATCH 14/21] x86: mm: use pgtable_level enum in effective_prot_pXd()
From: Yeoreum Yun
Date: Mon Sep 21 2026 - 07:43:57 EST
Instead of using hard-coded integers in effective_prot_pXd(), use the
page-table level enum so that architecture code does not need to know
the numeric value of each page-table level, while also providing type
safety.
This also prepares for using generic MM helpers, mm_first_pgtable_level()
which use symbolic names for page-table levels rather than integers.
There should be no functional change.
Reviewed-by: David Hildenbrand (Arm) <david@xxxxxxxxxx>
Acked-by: Dave Hansen <dave.hansen@xxxxxxxxxxxxxxx>
Signed-off-by: Yeoreum Yun <yeoreum.yun@xxxxxxx>
---
arch/x86/mm/dump_pagetables.c | 14 +++++++-------
1 file changed, 7 insertions(+), 7 deletions(-)
diff --git a/arch/x86/mm/dump_pagetables.c b/arch/x86/mm/dump_pagetables.c
index 2afa7a23340e9..a18a61e732c3d 100644
--- a/arch/x86/mm/dump_pagetables.c
+++ b/arch/x86/mm/dump_pagetables.c
@@ -248,13 +248,13 @@ static void note_wx(struct pg_state *st, unsigned long addr)
(void *)st->start_address);
}
-static void effective_prot(struct ptdump_state *pt_st, int level, u64 val)
+static void effective_prot(struct ptdump_state *pt_st, enum pgtable_level level, u64 val)
{
struct pg_state *st = container_of(pt_st, struct pg_state, ptdump);
pgprotval_t prot = val & PTE_FLAGS_MASK;
pgprotval_t effective;
- if (level > 0) {
+ if (level > PGTABLE_LEVEL_PGD) {
pgprotval_t higher_prot = st->prot_levels[level - 1];
effective = (higher_prot & prot & (_PAGE_USER | _PAGE_RW)) |
@@ -268,27 +268,27 @@ static void effective_prot(struct ptdump_state *pt_st, int level, u64 val)
static void effective_prot_pte(struct ptdump_state *st, pte_t pte)
{
- effective_prot(st, 4, pte_val(pte));
+ effective_prot(st, PGTABLE_LEVEL_PTE, pte_val(pte));
}
static void effective_prot_pmd(struct ptdump_state *st, pmd_t pmd)
{
- effective_prot(st, 3, pmd_val(pmd));
+ effective_prot(st, PGTABLE_LEVEL_PMD, pmd_val(pmd));
}
static void effective_prot_pud(struct ptdump_state *st, pud_t pud)
{
- effective_prot(st, 2, pud_val(pud));
+ effective_prot(st, PGTABLE_LEVEL_PUD, pud_val(pud));
}
static void effective_prot_p4d(struct ptdump_state *st, p4d_t p4d)
{
- effective_prot(st, 1, p4d_val(p4d));
+ effective_prot(st, PGTABLE_LEVEL_P4D, p4d_val(p4d));
}
static void effective_prot_pgd(struct ptdump_state *st, pgd_t pgd)
{
- effective_prot(st, 0, pgd_val(pgd));
+ effective_prot(st, PGTABLE_LEVEL_PGD, pgd_val(pgd));
}
--
2.43.0