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);

Reply via email to