mirror of
https://github.com/torvalds/linux.git
synced 2025-12-07 20:06:24 +00:00
We want to make use of "pgtable_level" for an enum in core-mm. Other architectures seem to call "struct pgtable_level" either: * "struct pg_level" when not exposed in a header (riscv, arm) * "struct ptdump_pg_level" when expose in a header (arm64) So let's follow what arm64 does. Link: https://lkml.kernel.org/r/20250811112631.759341-7-david@redhat.com Signed-off-by: David Hildenbrand <david@redhat.com> Reviewed-by: Lorenzo Stoakes <lorenzo.stoakes@oracle.com> Reviewed-by: Ritesh Harjani (IBM) <ritesh.list@gmail.com> Cc: Alistair Popple <apopple@nvidia.com> Cc: Al Viro <viro@zeniv.linux.org.uk> Cc: Baolin Wang <baolin.wang@linux.alibaba.com> Cc: Barry Song <baohua@kernel.org> Cc: Christian Brauner <brauner@kernel.org> Cc: Christophe Leroy <christophe.leroy@csgroup.eu> Cc: Dan Williams <dan.j.williams@intel.com> Cc: David Vrabel <david.vrabel@citrix.com> Cc: Dev Jain <dev.jain@arm.com> Cc: Hugh Dickins <hughd@google.com> Cc: Jan Kara <jack@suse.cz> Cc: Jann Horn <jannh@google.com> Cc: Juegren Gross <jgross@suse.com> Cc: Lance Yang <lance.yang@linux.dev> Cc: Liam Howlett <liam.howlett@oracle.com> Cc: Madhavan Srinivasan <maddy@linux.ibm.com> Cc: Mariano Pache <npache@redhat.com> Cc: Matthew Wilcox (Oracle) <willy@infradead.org> Cc: Michael Ellerman <mpe@ellerman.id.au> Cc: Michal Hocko <mhocko@suse.com> Cc: Mike Rapoport <rppt@kernel.org> Cc: Nicholas Piggin <npiggin@gmail.com> Cc: Oleksandr Tyshchenko <oleksandr_tyshchenko@epam.com> Cc: Oscar Salvador <osalvador@suse.de> Cc: Ryan Roberts <ryan.roberts@arm.com> Cc: Stefano Stabellini <sstabellini@kernel.org> Cc: Suren Baghdasaryan <surenb@google.com> Cc: Vlastimil Babka <vbabka@suse.cz> Cc: Wei Yang <richard.weiyang@gmail.com> Cc: Zi Yan <ziy@nvidia.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
123 lines
2.3 KiB
C
123 lines
2.3 KiB
C
// SPDX-License-Identifier: GPL-2.0
|
|
/*
|
|
* From split of dump_linuxpagetables.c
|
|
* Copyright 2016, Rashmica Gupta, IBM Corp.
|
|
*
|
|
*/
|
|
#include <linux/kernel.h>
|
|
#include <linux/pgtable.h>
|
|
|
|
#include "ptdump.h"
|
|
|
|
static const struct flag_info flag_array[] = {
|
|
{
|
|
.mask = _PAGE_PRIVILEGED,
|
|
.val = 0,
|
|
.set = "user",
|
|
.clear = " ",
|
|
}, {
|
|
.mask = _PAGE_READ,
|
|
.val = _PAGE_READ,
|
|
.set = "r",
|
|
.clear = " ",
|
|
}, {
|
|
.mask = _PAGE_WRITE,
|
|
.val = _PAGE_WRITE,
|
|
.set = "w",
|
|
.clear = " ",
|
|
}, {
|
|
.mask = _PAGE_EXEC,
|
|
.val = _PAGE_EXEC,
|
|
.set = " X ",
|
|
.clear = " ",
|
|
}, {
|
|
.mask = _PAGE_PTE,
|
|
.val = _PAGE_PTE,
|
|
.set = "pte",
|
|
.clear = " ",
|
|
}, {
|
|
.mask = _PAGE_PRESENT,
|
|
.val = _PAGE_PRESENT,
|
|
.set = "valid",
|
|
.clear = " ",
|
|
}, {
|
|
.mask = _PAGE_PRESENT | _PAGE_INVALID,
|
|
.val = 0,
|
|
.set = " ",
|
|
.clear = "present",
|
|
}, {
|
|
.mask = H_PAGE_HASHPTE,
|
|
.val = H_PAGE_HASHPTE,
|
|
.set = "hpte",
|
|
.clear = " ",
|
|
}, {
|
|
.mask = _PAGE_DIRTY,
|
|
.val = _PAGE_DIRTY,
|
|
.set = "dirty",
|
|
.clear = " ",
|
|
}, {
|
|
.mask = _PAGE_ACCESSED,
|
|
.val = _PAGE_ACCESSED,
|
|
.set = "accessed",
|
|
.clear = " ",
|
|
}, {
|
|
.mask = _PAGE_NON_IDEMPOTENT,
|
|
.val = _PAGE_NON_IDEMPOTENT,
|
|
.set = "non-idempotent",
|
|
.clear = " ",
|
|
}, {
|
|
.mask = _PAGE_TOLERANT,
|
|
.val = _PAGE_TOLERANT,
|
|
.set = "tolerant",
|
|
.clear = " ",
|
|
}, {
|
|
.mask = H_PAGE_BUSY,
|
|
.val = H_PAGE_BUSY,
|
|
.set = "busy",
|
|
}, {
|
|
#ifdef CONFIG_PPC_64K_PAGES
|
|
.mask = H_PAGE_COMBO,
|
|
.val = H_PAGE_COMBO,
|
|
.set = "combo",
|
|
}, {
|
|
.mask = H_PAGE_4K_PFN,
|
|
.val = H_PAGE_4K_PFN,
|
|
.set = "4K_pfn",
|
|
}, {
|
|
#else /* CONFIG_PPC_64K_PAGES */
|
|
.mask = H_PAGE_F_GIX,
|
|
.val = H_PAGE_F_GIX,
|
|
.set = "f_gix",
|
|
.is_val = true,
|
|
.shift = H_PAGE_F_GIX_SHIFT,
|
|
}, {
|
|
.mask = H_PAGE_F_SECOND,
|
|
.val = H_PAGE_F_SECOND,
|
|
.set = "f_second",
|
|
}, {
|
|
#endif /* CONFIG_PPC_64K_PAGES */
|
|
.mask = _PAGE_SPECIAL,
|
|
.val = _PAGE_SPECIAL,
|
|
.set = "special",
|
|
}
|
|
};
|
|
|
|
struct ptdump_pg_level pg_level[5] = {
|
|
{ /* pgd */
|
|
.flag = flag_array,
|
|
.num = ARRAY_SIZE(flag_array),
|
|
}, { /* p4d */
|
|
.flag = flag_array,
|
|
.num = ARRAY_SIZE(flag_array),
|
|
}, { /* pud */
|
|
.flag = flag_array,
|
|
.num = ARRAY_SIZE(flag_array),
|
|
}, { /* pmd */
|
|
.flag = flag_array,
|
|
.num = ARRAY_SIZE(flag_array),
|
|
}, { /* pte */
|
|
.flag = flag_array,
|
|
.num = ARRAY_SIZE(flag_array),
|
|
},
|
|
};
|