Back to home page

OSCL-LXR

 
 

    


0001 // SPDX-License-Identifier: GPL-2.0
0002 /*
0003  * From split of dump_linuxpagetables.c
0004  * Copyright 2016, Rashmica Gupta, IBM Corp.
0005  *
0006  */
0007 #include <linux/kernel.h>
0008 #include <linux/pgtable.h>
0009 
0010 #include "ptdump.h"
0011 
0012 static const struct flag_info flag_array[] = {
0013     {
0014         .mask   = _PAGE_PRIVILEGED,
0015         .val    = 0,
0016         .set    = "user",
0017         .clear  = "    ",
0018     }, {
0019         .mask   = _PAGE_READ,
0020         .val    = _PAGE_READ,
0021         .set    = "r",
0022         .clear  = " ",
0023     }, {
0024         .mask   = _PAGE_WRITE,
0025         .val    = _PAGE_WRITE,
0026         .set    = "w",
0027         .clear  = " ",
0028     }, {
0029         .mask   = _PAGE_EXEC,
0030         .val    = _PAGE_EXEC,
0031         .set    = " X ",
0032         .clear  = "   ",
0033     }, {
0034         .mask   = _PAGE_PTE,
0035         .val    = _PAGE_PTE,
0036         .set    = "pte",
0037         .clear  = "   ",
0038     }, {
0039         .mask   = _PAGE_PRESENT,
0040         .val    = _PAGE_PRESENT,
0041         .set    = "valid",
0042         .clear  = "     ",
0043     }, {
0044         .mask   = _PAGE_PRESENT | _PAGE_INVALID,
0045         .val    = 0,
0046         .set    = "       ",
0047         .clear  = "present",
0048     }, {
0049         .mask   = H_PAGE_HASHPTE,
0050         .val    = H_PAGE_HASHPTE,
0051         .set    = "hpte",
0052         .clear  = "    ",
0053     }, {
0054         .mask   = _PAGE_DIRTY,
0055         .val    = _PAGE_DIRTY,
0056         .set    = "dirty",
0057         .clear  = "     ",
0058     }, {
0059         .mask   = _PAGE_ACCESSED,
0060         .val    = _PAGE_ACCESSED,
0061         .set    = "accessed",
0062         .clear  = "        ",
0063     }, {
0064         .mask   = _PAGE_NON_IDEMPOTENT,
0065         .val    = _PAGE_NON_IDEMPOTENT,
0066         .set    = "non-idempotent",
0067         .clear  = "              ",
0068     }, {
0069         .mask   = _PAGE_TOLERANT,
0070         .val    = _PAGE_TOLERANT,
0071         .set    = "tolerant",
0072         .clear  = "        ",
0073     }, {
0074         .mask   = H_PAGE_BUSY,
0075         .val    = H_PAGE_BUSY,
0076         .set    = "busy",
0077     }, {
0078 #ifdef CONFIG_PPC_64K_PAGES
0079         .mask   = H_PAGE_COMBO,
0080         .val    = H_PAGE_COMBO,
0081         .set    = "combo",
0082     }, {
0083         .mask   = H_PAGE_4K_PFN,
0084         .val    = H_PAGE_4K_PFN,
0085         .set    = "4K_pfn",
0086     }, {
0087 #else /* CONFIG_PPC_64K_PAGES */
0088         .mask   = H_PAGE_F_GIX,
0089         .val    = H_PAGE_F_GIX,
0090         .set    = "f_gix",
0091         .is_val = true,
0092         .shift  = H_PAGE_F_GIX_SHIFT,
0093     }, {
0094         .mask   = H_PAGE_F_SECOND,
0095         .val    = H_PAGE_F_SECOND,
0096         .set    = "f_second",
0097     }, {
0098 #endif /* CONFIG_PPC_64K_PAGES */
0099         .mask   = _PAGE_SPECIAL,
0100         .val    = _PAGE_SPECIAL,
0101         .set    = "special",
0102     }
0103 };
0104 
0105 struct pgtable_level pg_level[5] = {
0106     { /* pgd */
0107         .flag   = flag_array,
0108         .num    = ARRAY_SIZE(flag_array),
0109     }, { /* p4d */
0110         .flag   = flag_array,
0111         .num    = ARRAY_SIZE(flag_array),
0112     }, { /* pud */
0113         .flag   = flag_array,
0114         .num    = ARRAY_SIZE(flag_array),
0115     }, { /* pmd */
0116         .flag   = flag_array,
0117         .num    = ARRAY_SIZE(flag_array),
0118     }, { /* pte */
0119         .flag   = flag_array,
0120         .num    = ARRAY_SIZE(flag_array),
0121     },
0122 };