Hi,
during all my pmap crashes, I sometimes get this strange address.
panic: pmap_remove_pte: unmanaged page marked PG_PVLIST, va = 0x5d155753000, pa
= 0xfdfdfdfdfd000
I think we should not clear bits in a panic messages. Debugging
with the full picture is easier. While there make the panics
more consistent.
ok?
bluhm
Index: arch/amd64//amd64/pmap.c
===================================================================
RCS file: /data/mirror/openbsd/cvs/src/sys/arch/amd64/amd64/pmap.c,v
retrieving revision 1.140
diff -u -p -r1.140 pmap.c
--- arch/amd64//amd64/pmap.c 26 Oct 2020 18:35:41 -0000 1.140
+++ arch/amd64//amd64/pmap.c 16 Dec 2020 12:49:04 -0000
@@ -1626,17 +1626,18 @@ pmap_remove_ptes(struct pmap *pmap, stru
if ((opte & PG_PVLIST) == 0) {
#ifdef DIAGNOSTIC
if (pg != NULL)
- panic("%s: managed page without PG_PVLIST "
- "for 0x%lx", __func__, startva);
+ panic("%s: managed page without PG_PVLIST: "
+ "va 0x%lx, opte 0x%llx", __func__,
+ startva, opte);
#endif
continue;
}
#ifdef DIAGNOSTIC
if (pg == NULL)
- panic("%s: unmanaged page marked PG_PVLIST, "
- "va = 0x%lx, pa = 0x%lx", __func__,
- startva, (u_long)(opte & PG_FRAME));
+ panic("%s: unmanaged page marked PG_PVLIST: "
+ "va 0x%lx, opte 0x%llx", __func__,
+ startva, opte);
#endif
/* sync R/M bits */
@@ -1692,16 +1693,16 @@ pmap_remove_pte(struct pmap *pmap, struc
if ((opte & PG_PVLIST) == 0) {
#ifdef DIAGNOSTIC
if (pg != NULL)
- panic("%s: managed page without PG_PVLIST for 0x%lx",
- __func__, va);
+ panic("%s: managed page without PG_PVLIST: "
+ "va 0x%lx, opte 0x%llx", __func__, va, opte);
#endif
return 1;
}
#ifdef DIAGNOSTIC
if (pg == NULL)
- panic("%s: unmanaged page marked PG_PVLIST, va = 0x%lx, "
- "pa = 0x%lx", __func__, va, (u_long)(opte & PG_FRAME));
+ panic("%s: unmanaged page marked PG_PVLIST: "
+ "va 0x%lx, opte 0x%llx", __func__, va, opte);
#endif
/* sync R/M bits */
@@ -2724,18 +2725,19 @@ pmap_enter(struct pmap *pmap, vaddr_t va
pg = PHYS_TO_VM_PAGE(pa);
#ifdef DIAGNOSTIC
if (pg == NULL)
- panic("%s: same pa PG_PVLIST "
- "mapping with unmanaged page "
- "pa = 0x%lx (0x%lx)", __func__,
- pa, atop(pa));
+ panic("%s: same pa, PG_PVLIST "
+ "mapping with unmanaged page: "
+ "va 0x%lx, opte 0x%llx, pa 0x%lx",
+ __func__, va, opte, pa);
#endif
pmap_sync_flags_pte(pg, opte);
} else {
#ifdef DIAGNOSTIC
if (PHYS_TO_VM_PAGE(pa) != NULL)
- panic("%s: same pa, managed "
- "page, no PG_VLIST pa: 0x%lx",
- __func__, pa);
+ panic("%s: same pa, no PG_PVLIST "
+ "mapping with managed page: "
+ "va 0x%lx, opte 0x%llx, pa 0x%lx",
+ __func__, va, opte, pa);
#endif
}
goto enter_now;
@@ -2755,8 +2757,8 @@ pmap_enter(struct pmap *pmap, vaddr_t va
#ifdef DIAGNOSTIC
if (pg == NULL)
panic("%s: PG_PVLIST mapping with unmanaged "
- "page pa = 0x%lx (0x%lx)",
- __func__, pa, atop(pa));
+ "page: va 0x%lx, opte 0x%llx, pa 0x%lx",
+ __func__, va, opte, pa);
#endif
pmap_sync_flags_pte(pg, opte);
opve = pmap_remove_pv(pg, pmap, va);