crash: print actual PTE in lookup mode
Change-Id: Ie2c1b97780347d6172ef8961ed62258117cbf115
This commit is contained in:
committed by
Masamichi Takagi
parent
5224551782
commit
bb725f5f50
@ -1220,7 +1220,7 @@ ptl_shift(int level)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
pte_print_(ulong pte, ulong virt, int level)
|
pte_print_(ulong pte, ulong virt, int level, int lookup)
|
||||||
{
|
{
|
||||||
int others = 0;
|
int others = 0;
|
||||||
int pgshift = level ? ptl_shift(level) : 0;
|
int pgshift = level ? ptl_shift(level) : 0;
|
||||||
@ -1290,10 +1290,14 @@ pte_print_(ulong pte, ulong virt, int level)
|
|||||||
fprintf(fp, "%016lx", pte);
|
fprintf(fp, "%016lx", pte);
|
||||||
#endif
|
#endif
|
||||||
fprintf(fp, ")\n");
|
fprintf(fp, ")\n");
|
||||||
|
|
||||||
|
if (lookup && pte) {
|
||||||
|
fprintf(fp, "PTE: %lx\n", pte);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
pte_print(ulong pte, ulong virt, int level)
|
pte_print(ulong pte, ulong virt, int level, int lookup)
|
||||||
{
|
{
|
||||||
static ulong prev_pte, prev_virt;
|
static ulong prev_pte, prev_virt;
|
||||||
static int prev_pgshift, prev_level, skipped_pte;
|
static int prev_pgshift, prev_level, skipped_pte;
|
||||||
@ -1313,14 +1317,14 @@ pte_print(ulong pte, ulong virt, int level)
|
|||||||
if (skipped_pte > 1)
|
if (skipped_pte > 1)
|
||||||
fprintf(fp, "...\n");
|
fprintf(fp, "...\n");
|
||||||
if (skipped_pte)
|
if (skipped_pte)
|
||||||
pte_print_(prev_pte, prev_virt, prev_level);
|
pte_print_(prev_pte, prev_virt, prev_level, lookup);
|
||||||
prev_pte = skipped_pte = 0;
|
prev_pte = skipped_pte = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!pte)
|
if (!pte)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
pte_print_(pte, virt, level);
|
pte_print_(pte, virt, level, lookup);
|
||||||
prev_pte = pte;
|
prev_pte = pte;
|
||||||
prev_virt = virt;
|
prev_virt = virt;
|
||||||
prev_pgshift = pgshift;
|
prev_pgshift = pgshift;
|
||||||
@ -1353,7 +1357,7 @@ pte_do_walk(ulong pt, ulong virt, int level, int lookup,
|
|||||||
continue;
|
continue;
|
||||||
if (pte_is_type_page(pte, level)) {
|
if (pte_is_type_page(pte, level)) {
|
||||||
pte_print(pte, (virt | prefix) +
|
pte_print(pte, (virt | prefix) +
|
||||||
(i << ptl_shift(level)), level);
|
(i << ptl_shift(level)), level, lookup);
|
||||||
if (lookup)
|
if (lookup)
|
||||||
return;
|
return;
|
||||||
} else if (level > 1) {
|
} else if (level > 1) {
|
||||||
@ -1375,7 +1379,7 @@ pte_walk(ulong pt, int lookup, ulong addr, ulong prefix)
|
|||||||
{
|
{
|
||||||
fprintf(fp, "%-16s %-16s %s %s\n", "VIRT", "PHYS", "SIZE", "FLAGS");
|
fprintf(fp, "%-16s %-16s %s %s\n", "VIRT", "PHYS", "SIZE", "FLAGS");
|
||||||
pte_do_walk(pt, 0, PGTABLE_LEVELS, lookup, addr, prefix);
|
pte_do_walk(pt, 0, PGTABLE_LEVELS, lookup, addr, prefix);
|
||||||
pte_print(0, 0, 0); // flush last one if any
|
pte_print(0, 0, 0, lookup); // flush last one if any
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
|||||||
Reference in New Issue
Block a user