Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
torvalds
GitHub Repository: torvalds/linux
Path: blob/master/arch/powerpc/mm/ptdump/book3s64.c
26481 views
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_PRIVILEGED,
15
.val = 0,
16
.set = "user",
17
.clear = " ",
18
}, {
19
.mask = _PAGE_READ,
20
.val = _PAGE_READ,
21
.set = "r",
22
.clear = " ",
23
}, {
24
.mask = _PAGE_WRITE,
25
.val = _PAGE_WRITE,
26
.set = "w",
27
.clear = " ",
28
}, {
29
.mask = _PAGE_EXEC,
30
.val = _PAGE_EXEC,
31
.set = " X ",
32
.clear = " ",
33
}, {
34
.mask = _PAGE_PTE,
35
.val = _PAGE_PTE,
36
.set = "pte",
37
.clear = " ",
38
}, {
39
.mask = _PAGE_PRESENT,
40
.val = _PAGE_PRESENT,
41
.set = "valid",
42
.clear = " ",
43
}, {
44
.mask = _PAGE_PRESENT | _PAGE_INVALID,
45
.val = 0,
46
.set = " ",
47
.clear = "present",
48
}, {
49
.mask = H_PAGE_HASHPTE,
50
.val = H_PAGE_HASHPTE,
51
.set = "hpte",
52
.clear = " ",
53
}, {
54
.mask = _PAGE_DIRTY,
55
.val = _PAGE_DIRTY,
56
.set = "dirty",
57
.clear = " ",
58
}, {
59
.mask = _PAGE_ACCESSED,
60
.val = _PAGE_ACCESSED,
61
.set = "accessed",
62
.clear = " ",
63
}, {
64
.mask = _PAGE_NON_IDEMPOTENT,
65
.val = _PAGE_NON_IDEMPOTENT,
66
.set = "non-idempotent",
67
.clear = " ",
68
}, {
69
.mask = _PAGE_TOLERANT,
70
.val = _PAGE_TOLERANT,
71
.set = "tolerant",
72
.clear = " ",
73
}, {
74
.mask = H_PAGE_BUSY,
75
.val = H_PAGE_BUSY,
76
.set = "busy",
77
}, {
78
#ifdef CONFIG_PPC_64K_PAGES
79
.mask = H_PAGE_COMBO,
80
.val = H_PAGE_COMBO,
81
.set = "combo",
82
}, {
83
.mask = H_PAGE_4K_PFN,
84
.val = H_PAGE_4K_PFN,
85
.set = "4K_pfn",
86
}, {
87
#else /* CONFIG_PPC_64K_PAGES */
88
.mask = H_PAGE_F_GIX,
89
.val = H_PAGE_F_GIX,
90
.set = "f_gix",
91
.is_val = true,
92
.shift = H_PAGE_F_GIX_SHIFT,
93
}, {
94
.mask = H_PAGE_F_SECOND,
95
.val = H_PAGE_F_SECOND,
96
.set = "f_second",
97
}, {
98
#endif /* CONFIG_PPC_64K_PAGES */
99
.mask = _PAGE_SPECIAL,
100
.val = _PAGE_SPECIAL,
101
.set = "special",
102
}
103
};
104
105
struct pgtable_level pg_level[5] = {
106
{ /* pgd */
107
.flag = flag_array,
108
.num = ARRAY_SIZE(flag_array),
109
}, { /* p4d */
110
.flag = flag_array,
111
.num = ARRAY_SIZE(flag_array),
112
}, { /* pud */
113
.flag = flag_array,
114
.num = ARRAY_SIZE(flag_array),
115
}, { /* pmd */
116
.flag = flag_array,
117
.num = ARRAY_SIZE(flag_array),
118
}, { /* pte */
119
.flag = flag_array,
120
.num = ARRAY_SIZE(flag_array),
121
},
122
};
123
124