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