Hi Zong,
First bad commit (maybe != root cause):
tree:
https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git master
head: 30e2206e11ce27ae910cc0dab21472429e400a87
commit: c0eba2d72e70b4208ca6fd82820ba7428090e350 [7592/7905] riscv: support DEBUG_WX
config: riscv-randconfig-r003-20200509 (attached as .config)
compiler: riscv64-linux-gcc (GCC) 9.3.0
reproduce:
wget
https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O
~/bin/make.cross
chmod +x ~/bin/make.cross
git checkout c0eba2d72e70b4208ca6fd82820ba7428090e350
# save the attached .config to linux build tree
COMPILER_INSTALL_PATH=$HOME/0day GCC_VERSION=9.3.0 make.cross ARCH=riscv
If you fix the issue, kindly add following tag as appropriate
Reported-by: kbuild test robot <lkp(a)intel.com>
All error/warnings (new ones prefixed by >>):
> arch/riscv/mm/ptdump.c:57:3: error: 'FIXADDR_START'
undeclared here (not in a function); did you mean 'XAS_RESTART'?
57 |
{FIXADDR_START, "Fixmap start"},
| ^~~~~~~~~~~~~
| XAS_RESTART
> arch/riscv/mm/ptdump.c:58:3: error: 'FIXADDR_TOP'
undeclared here (not in a function)
58 | {FIXADDR_TOP, "Fixmap
end"},
| ^~~~~~~~~~~
> arch/riscv/mm/ptdump.c:59:3: error: 'PCI_IO_START'
undeclared here (not in a function)
59 | {PCI_IO_START, "PCI I/O
start"},
| ^~~~~~~~~~~~
> arch/riscv/mm/ptdump.c:60:3: error: 'PCI_IO_END'
undeclared here (not in a function)
60 | {PCI_IO_END, "PCI I/O
end"},
| ^~~~~~~~~~
In file included from arch/riscv/include/asm/page.h:12,
from arch/riscv/include/asm/thread_info.h:11,
from include/linux/thread_info.h:38,
from include/asm-generic/preempt.h:5,
from ./arch/riscv/include/generated/asm/preempt.h:1,
from include/linux/preempt.h:78,
from include/linux/spinlock.h:51,
from include/linux/wait.h:9,
from include/linux/wait_bit.h:8,
from include/linux/fs.h:6,
from include/linux/debugfs.h:15,
from arch/riscv/mm/ptdump.c:7:
arch/riscv/mm/ptdump.c: In function 'note_page':
> arch/riscv/mm/ptdump.c:210:20: error: implicit declaration of
function 'pte_pfn' [-Werror=implicit-function-declaration]
210 | u64
pa = PFN_PHYS(pte_pfn(__pte(val)));
| ^~~~~~~
include/linux/pfn.h:21:36: note: in definition of macro 'PFN_PHYS'
21 | #define PFN_PHYS(x) ((phys_addr_t)(x) << PAGE_SHIFT)
| ^
arch/riscv/mm/ptdump.c: In function 'ptdump_walk':
> arch/riscv/mm/ptdump.c:257:6: error: 'KERN_VIRT_START'
undeclared (first use in this function); did you mean 'KERN_VIRT_SIZE'?
257 | {KERN_VIRT_START, ULONG_MAX},
| ^~~~~~~~~~~~~~~
| KERN_VIRT_SIZE
arch/riscv/mm/ptdump.c:257:6: note: each undeclared identifier is reported only once
for each function it appears in
> arch/riscv/mm/ptdump.c:257:6: warning: initialization of
'long unsigned int' from 'struct addr_marker *' makes integer from pointer
without a cast [-Wint-conversion]
arch/riscv/mm/ptdump.c:257:6: note: (near
initialization for '(anonymous)[0].start')
arch/riscv/mm/ptdump.c: In function 'ptdump_check_wx':
arch/riscv/mm/ptdump.c:279:6: error: 'KERN_VIRT_START' undeclared (first use in
this function); did you mean 'KERN_VIRT_SIZE'?
279 | {KERN_VIRT_START, ULONG_MAX},
| ^~~~~~~~~~~~~~~
| KERN_VIRT_SIZE
arch/riscv/mm/ptdump.c:279:6: warning: initialization of 'long unsigned int'
from 'struct addr_marker *' makes integer from pointer without a cast
[-Wint-conversion]
arch/riscv/mm/ptdump.c:279:6: note: (near initialization for
'(anonymous)[0].start')
cc1: some warnings being treated as errors
vim +57 arch/riscv/mm/ptdump.c
59c4da8640ccf4 Zong Li 2020-03-12 @7 #include <linux/debugfs.h>
59c4da8640ccf4 Zong Li 2020-03-12 8 #include <linux/seq_file.h>
59c4da8640ccf4 Zong Li 2020-03-12 9 #include <linux/ptdump.h>
59c4da8640ccf4 Zong Li 2020-03-12 10
59c4da8640ccf4 Zong Li 2020-03-12 11 #include <asm/ptdump.h>
59c4da8640ccf4 Zong Li 2020-03-12 12 #include <asm/pgtable.h>
59c4da8640ccf4 Zong Li 2020-03-12 13 #include <asm/kasan.h>
59c4da8640ccf4 Zong Li 2020-03-12 14
59c4da8640ccf4 Zong Li 2020-03-12 15 #define pt_dump_seq_printf(m, fmt, args...) \
59c4da8640ccf4 Zong Li 2020-03-12 16 ({ \
59c4da8640ccf4 Zong Li 2020-03-12 17 if (m) \
59c4da8640ccf4 Zong Li 2020-03-12 18 seq_printf(m, fmt, ##args); \
59c4da8640ccf4 Zong Li 2020-03-12 19 })
59c4da8640ccf4 Zong Li 2020-03-12 20
59c4da8640ccf4 Zong Li 2020-03-12 21 #define pt_dump_seq_puts(m, fmt) \
59c4da8640ccf4 Zong Li 2020-03-12 22 ({ \
59c4da8640ccf4 Zong Li 2020-03-12 23 if (m) \
59c4da8640ccf4 Zong Li 2020-03-12 24 seq_printf(m, fmt); \
59c4da8640ccf4 Zong Li 2020-03-12 25 })
59c4da8640ccf4 Zong Li 2020-03-12 26
59c4da8640ccf4 Zong Li 2020-03-12 27 /*
59c4da8640ccf4 Zong Li 2020-03-12 28 * The page dumper groups page table entries of
the same type into a single
59c4da8640ccf4 Zong Li 2020-03-12 29 * description. It uses pg_state to track the
range information while
59c4da8640ccf4 Zong Li 2020-03-12 30 * iterating over the pte entries. When the
continuity is broken it then
59c4da8640ccf4 Zong Li 2020-03-12 31 * dumps out a description of the range.
59c4da8640ccf4 Zong Li 2020-03-12 32 */
59c4da8640ccf4 Zong Li 2020-03-12 33 struct pg_state {
59c4da8640ccf4 Zong Li 2020-03-12 34 struct ptdump_state ptdump;
59c4da8640ccf4 Zong Li 2020-03-12 35 struct seq_file *seq;
59c4da8640ccf4 Zong Li 2020-03-12 36 const struct addr_marker *marker;
59c4da8640ccf4 Zong Li 2020-03-12 37 unsigned long start_address;
59c4da8640ccf4 Zong Li 2020-03-12 38 unsigned long start_pa;
59c4da8640ccf4 Zong Li 2020-03-12 39 unsigned long last_pa;
59c4da8640ccf4 Zong Li 2020-03-12 40 int level;
59c4da8640ccf4 Zong Li 2020-03-12 41 u64 current_prot;
59c4da8640ccf4 Zong Li 2020-03-12 42 bool check_wx;
59c4da8640ccf4 Zong Li 2020-03-12 43 unsigned long wx_pages;
59c4da8640ccf4 Zong Li 2020-03-12 44 };
59c4da8640ccf4 Zong Li 2020-03-12 45
59c4da8640ccf4 Zong Li 2020-03-12 46 /* Address marker */
59c4da8640ccf4 Zong Li 2020-03-12 47 struct addr_marker {
59c4da8640ccf4 Zong Li 2020-03-12 48 unsigned long start_address;
59c4da8640ccf4 Zong Li 2020-03-12 49 const char *name;
59c4da8640ccf4 Zong Li 2020-03-12 50 };
59c4da8640ccf4 Zong Li 2020-03-12 51
59c4da8640ccf4 Zong Li 2020-03-12 52 static struct addr_marker address_markers[] = {
59c4da8640ccf4 Zong Li 2020-03-12 53 #ifdef CONFIG_KASAN
59c4da8640ccf4 Zong Li 2020-03-12 54 {KASAN_SHADOW_START, "Kasan shadow
start"},
59c4da8640ccf4 Zong Li 2020-03-12 55 {KASAN_SHADOW_END, "Kasan shadow
end"},
59c4da8640ccf4 Zong Li 2020-03-12 56 #endif
59c4da8640ccf4 Zong Li 2020-03-12 @57 {FIXADDR_START, "Fixmap start"},
59c4da8640ccf4 Zong Li 2020-03-12 @58 {FIXADDR_TOP, "Fixmap end"},
59c4da8640ccf4 Zong Li 2020-03-12 @59 {PCI_IO_START, "PCI I/O start"},
59c4da8640ccf4 Zong Li 2020-03-12 @60 {PCI_IO_END, "PCI I/O end"},
59c4da8640ccf4 Zong Li 2020-03-12 61 #ifdef CONFIG_SPARSEMEM_VMEMMAP
59c4da8640ccf4 Zong Li 2020-03-12 62 {VMEMMAP_START, "vmemmap start"},
59c4da8640ccf4 Zong Li 2020-03-12 63 {VMEMMAP_END, "vmemmap end"},
59c4da8640ccf4 Zong Li 2020-03-12 64 #endif
59c4da8640ccf4 Zong Li 2020-03-12 65 {VMALLOC_START, "vmalloc() area"},
59c4da8640ccf4 Zong Li 2020-03-12 66 {VMALLOC_END, "vmalloc() end"},
59c4da8640ccf4 Zong Li 2020-03-12 67 {PAGE_OFFSET, "Linear mapping"},
59c4da8640ccf4 Zong Li 2020-03-12 68 {-1, NULL},
59c4da8640ccf4 Zong Li 2020-03-12 69 };
59c4da8640ccf4 Zong Li 2020-03-12 70
59c4da8640ccf4 Zong Li 2020-03-12 71 /* Page Table Entry */
59c4da8640ccf4 Zong Li 2020-03-12 72 struct prot_bits {
59c4da8640ccf4 Zong Li 2020-03-12 73 u64 mask;
59c4da8640ccf4 Zong Li 2020-03-12 74 u64 val;
59c4da8640ccf4 Zong Li 2020-03-12 75 const char *set;
59c4da8640ccf4 Zong Li 2020-03-12 76 const char *clear;
59c4da8640ccf4 Zong Li 2020-03-12 77 };
59c4da8640ccf4 Zong Li 2020-03-12 78
59c4da8640ccf4 Zong Li 2020-03-12 79 static const struct prot_bits pte_bits[] = {
59c4da8640ccf4 Zong Li 2020-03-12 80 {
59c4da8640ccf4 Zong Li 2020-03-12 81 .mask = _PAGE_SOFT,
59c4da8640ccf4 Zong Li 2020-03-12 82 .val = _PAGE_SOFT,
59c4da8640ccf4 Zong Li 2020-03-12 83 .set = "RSW",
59c4da8640ccf4 Zong Li 2020-03-12 84 .clear = " ",
59c4da8640ccf4 Zong Li 2020-03-12 85 }, {
59c4da8640ccf4 Zong Li 2020-03-12 86 .mask = _PAGE_DIRTY,
59c4da8640ccf4 Zong Li 2020-03-12 87 .val = _PAGE_DIRTY,
59c4da8640ccf4 Zong Li 2020-03-12 88 .set = "D",
59c4da8640ccf4 Zong Li 2020-03-12 89 .clear = ".",
59c4da8640ccf4 Zong Li 2020-03-12 90 }, {
59c4da8640ccf4 Zong Li 2020-03-12 91 .mask = _PAGE_ACCESSED,
59c4da8640ccf4 Zong Li 2020-03-12 92 .val = _PAGE_ACCESSED,
59c4da8640ccf4 Zong Li 2020-03-12 93 .set = "A",
59c4da8640ccf4 Zong Li 2020-03-12 94 .clear = ".",
59c4da8640ccf4 Zong Li 2020-03-12 95 }, {
59c4da8640ccf4 Zong Li 2020-03-12 96 .mask = _PAGE_GLOBAL,
59c4da8640ccf4 Zong Li 2020-03-12 97 .val = _PAGE_GLOBAL,
59c4da8640ccf4 Zong Li 2020-03-12 98 .set = "G",
59c4da8640ccf4 Zong Li 2020-03-12 99 .clear = ".",
59c4da8640ccf4 Zong Li 2020-03-12 100 }, {
59c4da8640ccf4 Zong Li 2020-03-12 101 .mask = _PAGE_USER,
59c4da8640ccf4 Zong Li 2020-03-12 102 .val = _PAGE_USER,
59c4da8640ccf4 Zong Li 2020-03-12 103 .set = "U",
59c4da8640ccf4 Zong Li 2020-03-12 104 .clear = ".",
59c4da8640ccf4 Zong Li 2020-03-12 105 }, {
59c4da8640ccf4 Zong Li 2020-03-12 106 .mask = _PAGE_EXEC,
59c4da8640ccf4 Zong Li 2020-03-12 107 .val = _PAGE_EXEC,
59c4da8640ccf4 Zong Li 2020-03-12 108 .set = "X",
59c4da8640ccf4 Zong Li 2020-03-12 109 .clear = ".",
59c4da8640ccf4 Zong Li 2020-03-12 110 }, {
59c4da8640ccf4 Zong Li 2020-03-12 111 .mask = _PAGE_WRITE,
59c4da8640ccf4 Zong Li 2020-03-12 112 .val = _PAGE_WRITE,
59c4da8640ccf4 Zong Li 2020-03-12 113 .set = "W",
59c4da8640ccf4 Zong Li 2020-03-12 114 .clear = ".",
59c4da8640ccf4 Zong Li 2020-03-12 115 }, {
59c4da8640ccf4 Zong Li 2020-03-12 116 .mask = _PAGE_READ,
59c4da8640ccf4 Zong Li 2020-03-12 117 .val = _PAGE_READ,
59c4da8640ccf4 Zong Li 2020-03-12 118 .set = "R",
59c4da8640ccf4 Zong Li 2020-03-12 119 .clear = ".",
59c4da8640ccf4 Zong Li 2020-03-12 120 }, {
59c4da8640ccf4 Zong Li 2020-03-12 121 .mask = _PAGE_PRESENT,
59c4da8640ccf4 Zong Li 2020-03-12 122 .val = _PAGE_PRESENT,
59c4da8640ccf4 Zong Li 2020-03-12 123 .set = "V",
59c4da8640ccf4 Zong Li 2020-03-12 124 .clear = ".",
59c4da8640ccf4 Zong Li 2020-03-12 125 }
59c4da8640ccf4 Zong Li 2020-03-12 126 };
59c4da8640ccf4 Zong Li 2020-03-12 127
59c4da8640ccf4 Zong Li 2020-03-12 128 /* Page Level */
59c4da8640ccf4 Zong Li 2020-03-12 129 struct pg_level {
59c4da8640ccf4 Zong Li 2020-03-12 130 const char *name;
59c4da8640ccf4 Zong Li 2020-03-12 131 u64 mask;
59c4da8640ccf4 Zong Li 2020-03-12 132 };
59c4da8640ccf4 Zong Li 2020-03-12 133
59c4da8640ccf4 Zong Li 2020-03-12 134 static struct pg_level pg_level[] = {
59c4da8640ccf4 Zong Li 2020-03-12 135 { /* pgd */
59c4da8640ccf4 Zong Li 2020-03-12 136 .name = "PGD",
59c4da8640ccf4 Zong Li 2020-03-12 137 }, { /* p4d */
59c4da8640ccf4 Zong Li 2020-03-12 138 .name = (CONFIG_PGTABLE_LEVELS > 4) ?
"P4D" : "PGD",
59c4da8640ccf4 Zong Li 2020-03-12 139 }, { /* pud */
59c4da8640ccf4 Zong Li 2020-03-12 140 .name = (CONFIG_PGTABLE_LEVELS > 3) ?
"PUD" : "PGD",
59c4da8640ccf4 Zong Li 2020-03-12 141 }, { /* pmd */
59c4da8640ccf4 Zong Li 2020-03-12 142 .name = (CONFIG_PGTABLE_LEVELS > 2) ?
"PMD" : "PGD",
59c4da8640ccf4 Zong Li 2020-03-12 143 }, { /* pte */
59c4da8640ccf4 Zong Li 2020-03-12 144 .name = "PTE",
59c4da8640ccf4 Zong Li 2020-03-12 145 },
59c4da8640ccf4 Zong Li 2020-03-12 146 };
59c4da8640ccf4 Zong Li 2020-03-12 147
59c4da8640ccf4 Zong Li 2020-03-12 148 static void dump_prot(struct pg_state *st)
59c4da8640ccf4 Zong Li 2020-03-12 149 {
59c4da8640ccf4 Zong Li 2020-03-12 150 unsigned int i;
59c4da8640ccf4 Zong Li 2020-03-12 151
59c4da8640ccf4 Zong Li 2020-03-12 152 for (i = 0; i < ARRAY_SIZE(pte_bits); i++) {
59c4da8640ccf4 Zong Li 2020-03-12 153 const char *s;
59c4da8640ccf4 Zong Li 2020-03-12 154
59c4da8640ccf4 Zong Li 2020-03-12 155 if ((st->current_prot & pte_bits[i].mask)
== pte_bits[i].val)
59c4da8640ccf4 Zong Li 2020-03-12 156 s = pte_bits[i].set;
59c4da8640ccf4 Zong Li 2020-03-12 157 else
59c4da8640ccf4 Zong Li 2020-03-12 158 s = pte_bits[i].clear;
59c4da8640ccf4 Zong Li 2020-03-12 159
59c4da8640ccf4 Zong Li 2020-03-12 160 if (s)
59c4da8640ccf4 Zong Li 2020-03-12 161 pt_dump_seq_printf(st->seq, " %s",
s);
59c4da8640ccf4 Zong Li 2020-03-12 162 }
59c4da8640ccf4 Zong Li 2020-03-12 163 }
59c4da8640ccf4 Zong Li 2020-03-12 164
59c4da8640ccf4 Zong Li 2020-03-12 165 #ifdef CONFIG_64BIT
59c4da8640ccf4 Zong Li 2020-03-12 166 #define ADDR_FORMAT "0x%016lx"
59c4da8640ccf4 Zong Li 2020-03-12 167 #else
59c4da8640ccf4 Zong Li 2020-03-12 168 #define ADDR_FORMAT "0x%08lx"
59c4da8640ccf4 Zong Li 2020-03-12 169 #endif
59c4da8640ccf4 Zong Li 2020-03-12 170 static void dump_addr(struct pg_state *st,
unsigned long addr)
59c4da8640ccf4 Zong Li 2020-03-12 171 {
59c4da8640ccf4 Zong Li 2020-03-12 172 static const char units[] = "KMGTPE";
59c4da8640ccf4 Zong Li 2020-03-12 173 const char *unit = units;
59c4da8640ccf4 Zong Li 2020-03-12 174 unsigned long delta;
59c4da8640ccf4 Zong Li 2020-03-12 175
59c4da8640ccf4 Zong Li 2020-03-12 176 pt_dump_seq_printf(st->seq, ADDR_FORMAT
"-" ADDR_FORMAT " ",
59c4da8640ccf4 Zong Li 2020-03-12 177 st->start_address, addr);
59c4da8640ccf4 Zong Li 2020-03-12 178
59c4da8640ccf4 Zong Li 2020-03-12 179 pt_dump_seq_printf(st->seq, " "
ADDR_FORMAT " ", st->start_pa);
59c4da8640ccf4 Zong Li 2020-03-12 180 delta = (addr - st->start_address) >>
10;
59c4da8640ccf4 Zong Li 2020-03-12 181
59c4da8640ccf4 Zong Li 2020-03-12 182 while (!(delta & 1023) && unit[1]) {
59c4da8640ccf4 Zong Li 2020-03-12 183 delta >>= 10;
59c4da8640ccf4 Zong Li 2020-03-12 184 unit++;
59c4da8640ccf4 Zong Li 2020-03-12 185 }
59c4da8640ccf4 Zong Li 2020-03-12 186
59c4da8640ccf4 Zong Li 2020-03-12 187 pt_dump_seq_printf(st->seq, "%9lu%c
%s", delta, *unit,
59c4da8640ccf4 Zong Li 2020-03-12 188 pg_level[st->level].name);
59c4da8640ccf4 Zong Li 2020-03-12 189 }
59c4da8640ccf4 Zong Li 2020-03-12 190
59c4da8640ccf4 Zong Li 2020-03-12 191 static void note_prot_wx(struct pg_state *st,
unsigned long addr)
59c4da8640ccf4 Zong Li 2020-03-12 192 {
59c4da8640ccf4 Zong Li 2020-03-12 193 if (!st->check_wx)
59c4da8640ccf4 Zong Li 2020-03-12 194 return;
59c4da8640ccf4 Zong Li 2020-03-12 195
59c4da8640ccf4 Zong Li 2020-03-12 196 if ((st->current_prot & (_PAGE_WRITE |
_PAGE_EXEC)) !=
59c4da8640ccf4 Zong Li 2020-03-12 197 (_PAGE_WRITE | _PAGE_EXEC))
59c4da8640ccf4 Zong Li 2020-03-12 198 return;
59c4da8640ccf4 Zong Li 2020-03-12 199
59c4da8640ccf4 Zong Li 2020-03-12 200 WARN_ONCE(1, "riscv/mm: Found insecure W+X
mapping at address %p/%pS\n",
59c4da8640ccf4 Zong Li 2020-03-12 201 (void *)st->start_address, (void
*)st->start_address);
59c4da8640ccf4 Zong Li 2020-03-12 202
59c4da8640ccf4 Zong Li 2020-03-12 203 st->wx_pages += (addr - st->start_address)
/ PAGE_SIZE;
59c4da8640ccf4 Zong Li 2020-03-12 204 }
59c4da8640ccf4 Zong Li 2020-03-12 205
59c4da8640ccf4 Zong Li 2020-03-12 206 static void note_page(struct ptdump_state *pt_st,
unsigned long addr,
59c4da8640ccf4 Zong Li 2020-03-12 207 int level, unsigned long val)
59c4da8640ccf4 Zong Li 2020-03-12 208 {
59c4da8640ccf4 Zong Li 2020-03-12 209 struct pg_state *st = container_of(pt_st, struct
pg_state, ptdump);
59c4da8640ccf4 Zong Li 2020-03-12 @210 u64 pa = PFN_PHYS(pte_pfn(__pte(val)));
59c4da8640ccf4 Zong Li 2020-03-12 211 u64 prot = 0;
59c4da8640ccf4 Zong Li 2020-03-12 212
59c4da8640ccf4 Zong Li 2020-03-12 213 if (level >= 0)
59c4da8640ccf4 Zong Li 2020-03-12 214 prot = val & pg_level[level].mask;
59c4da8640ccf4 Zong Li 2020-03-12 215
59c4da8640ccf4 Zong Li 2020-03-12 216 if (st->level == -1) {
59c4da8640ccf4 Zong Li 2020-03-12 217 st->level = level;
59c4da8640ccf4 Zong Li 2020-03-12 218 st->current_prot = prot;
59c4da8640ccf4 Zong Li 2020-03-12 219 st->start_address = addr;
59c4da8640ccf4 Zong Li 2020-03-12 220 st->start_pa = pa;
59c4da8640ccf4 Zong Li 2020-03-12 221 st->last_pa = pa;
59c4da8640ccf4 Zong Li 2020-03-12 222 pt_dump_seq_printf(st->seq, "---[ %s
]---\n", st->marker->name);
59c4da8640ccf4 Zong Li 2020-03-12 223 } else if (prot != st->current_prot ||
59c4da8640ccf4 Zong Li 2020-03-12 224 level != st->level || addr >=
st->marker[1].start_address) {
59c4da8640ccf4 Zong Li 2020-03-12 225 if (st->current_prot) {
59c4da8640ccf4 Zong Li 2020-03-12 226 note_prot_wx(st, addr);
59c4da8640ccf4 Zong Li 2020-03-12 227 dump_addr(st, addr);
59c4da8640ccf4 Zong Li 2020-03-12 228 dump_prot(st);
59c4da8640ccf4 Zong Li 2020-03-12 229 pt_dump_seq_puts(st->seq, "\n");
59c4da8640ccf4 Zong Li 2020-03-12 230 }
59c4da8640ccf4 Zong Li 2020-03-12 231
59c4da8640ccf4 Zong Li 2020-03-12 232 while (addr >=
st->marker[1].start_address) {
59c4da8640ccf4 Zong Li 2020-03-12 233 st->marker++;
59c4da8640ccf4 Zong Li 2020-03-12 234 pt_dump_seq_printf(st->seq, "---[ %s
]---\n",
59c4da8640ccf4 Zong Li 2020-03-12 235 st->marker->name);
59c4da8640ccf4 Zong Li 2020-03-12 236 }
59c4da8640ccf4 Zong Li 2020-03-12 237
59c4da8640ccf4 Zong Li 2020-03-12 238 st->start_address = addr;
59c4da8640ccf4 Zong Li 2020-03-12 239 st->start_pa = pa;
59c4da8640ccf4 Zong Li 2020-03-12 240 st->last_pa = pa;
59c4da8640ccf4 Zong Li 2020-03-12 241 st->current_prot = prot;
59c4da8640ccf4 Zong Li 2020-03-12 242 st->level = level;
59c4da8640ccf4 Zong Li 2020-03-12 243 } else {
59c4da8640ccf4 Zong Li 2020-03-12 244 st->last_pa = pa;
59c4da8640ccf4 Zong Li 2020-03-12 245 }
59c4da8640ccf4 Zong Li 2020-03-12 246 }
59c4da8640ccf4 Zong Li 2020-03-12 247
:::::: The code at line 57 was first introduced by commit
:::::: 59c4da8640ccf4721d54d36835706f3eefb521a4 riscv: Add support to dump the kernel page
tables
:::::: TO: Zong Li <zong.li(a)sifive.com>
:::::: CC: Palmer Dabbelt <palmerdabbelt(a)google.com>
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org