1 // SPDX-License-Identifier: GPL-2.0 2 /* 3 * From split of dump_linuxpagetables.c 4 * Copyright 2016, Rashmica Gupta, IBM Corp. 5 * 6 */ 7 #include <linux/kernel.h> 8 #include <linux/pgtable.h> 9 10 #include "ptdump.h" 11 12 static const struct flag_info flag_array[] = { 13 { 14 .mask = _PAGE_USER, 15 .val = _PAGE_USER, 16 .set = "user", 17 .clear = " ", 18 }, { 19 .mask = _PAGE_RW, 20 .val = _PAGE_RW, 21 .set = "rw", 22 .clear = "r ", 23 }, { 24 .mask = _PAGE_EXEC, 25 .val = _PAGE_EXEC, 26 .set = " X ", 27 .clear = " ", 28 }, { 29 .mask = _PAGE_PRESENT, 30 .val = _PAGE_PRESENT, 31 .set = "present", 32 .clear = " ", 33 }, { 34 .mask = _PAGE_COHERENT, 35 .val = _PAGE_COHERENT, 36 .set = "coherent", 37 .clear = " ", 38 }, { 39 .mask = _PAGE_GUARDED, 40 .val = _PAGE_GUARDED, 41 .set = "guarded", 42 .clear = " ", 43 }, { 44 .mask = _PAGE_DIRTY, 45 .val = _PAGE_DIRTY, 46 .set = "dirty", 47 .clear = " ", 48 }, { 49 .mask = _PAGE_ACCESSED, 50 .val = _PAGE_ACCESSED, 51 .set = "accessed", 52 .clear = " ", 53 }, { 54 .mask = _PAGE_WRITETHRU, 55 .val = _PAGE_WRITETHRU, 56 .set = "write through", 57 .clear = " ", 58 }, { 59 .mask = _PAGE_NO_CACHE, 60 .val = _PAGE_NO_CACHE, 61 .set = "no cache", 62 .clear = " ", 63 }, { 64 .mask = _PAGE_SPECIAL, 65 .val = _PAGE_SPECIAL, 66 .set = "special", 67 } 68 }; 69 70 struct pgtable_level pg_level[5] = { 71 { /* pgd */ 72 .flag = flag_array, 73 .num = ARRAY_SIZE(flag_array), 74 }, { /* p4d */ 75 .flag = flag_array, 76 .num = ARRAY_SIZE(flag_array), 77 }, { /* pud */ 78 .flag = flag_array, 79 .num = ARRAY_SIZE(flag_array), 80 }, { /* pmd */ 81 .flag = flag_array, 82 .num = ARRAY_SIZE(flag_array), 83 }, { /* pte */ 84 .flag = flag_array, 85 .num = ARRAY_SIZE(flag_array), 86 }, 87 }; 88