0001
0002
0003
0004
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
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
0099 .mask = _PAGE_SPECIAL,
0100 .val = _PAGE_SPECIAL,
0101 .set = "special",
0102 }
0103 };
0104
0105 struct pgtable_level pg_level[5] = {
0106 {
0107 .flag = flag_array,
0108 .num = ARRAY_SIZE(flag_array),
0109 }, {
0110 .flag = flag_array,
0111 .num = ARRAY_SIZE(flag_array),
0112 }, {
0113 .flag = flag_array,
0114 .num = ARRAY_SIZE(flag_array),
0115 }, {
0116 .flag = flag_array,
0117 .num = ARRAY_SIZE(flag_array),
0118 }, {
0119 .flag = flag_array,
0120 .num = ARRAY_SIZE(flag_array),
0121 },
0122 };