Index: sys/uvm/pmap/pmap_segtab.c =================================================================== RCS file: /cvsroot/src/sys/uvm/pmap/pmap_segtab.c,v retrieving revision 1.15 diff -p -u -r1.15 pmap_segtab.c --- sys/uvm/pmap/pmap_segtab.c 7 Aug 2020 07:19:45 -0000 1.15 +++ sys/uvm/pmap/pmap_segtab.c 17 Aug 2020 04:23:38 -0000 @@ -137,11 +137,11 @@ pmap_check_stp(pmap_segtab_t *stp, const #ifdef DEBUG for (size_t i = 0; i < PMAP_SEGTABSIZE; i++) { if (stp->seg_tab[i] != 0) { -#ifdef DEBUG_NOISY +//#ifdef DEBUG_NOISY for (size_t j = i; j < PMAP_SEGTABSIZE; j++) printf("%s: pm_segtab.seg_tab[%zu] = %p\n", caller, j, stp->seg_tab[j]); -#endif +//#endif panic("%s: pm_segtab.seg_tab[%zu] != 0 (%p): %s", caller, i, stp->seg_tab[i], why); } @@ -210,12 +210,18 @@ pmap_segtab_release(pmap_t pmap, pmap_se { pmap_segtab_t *stp = *stp_p; + UVMHIST_FUNC(__func__); + UVMHIST_CALLARGS(pmaphist, "pm=%#jx stpp=%#jx free=%jd", + (uintptr_t)pmap, (uintptr_t)stp_p, free_stp, 0); + UVMHIST_LOG(pmaphist, " callback=%jx flags=%jx va=%jx vinc=%jx", + (uintptr_t)callback, flags, (uintptr_t)va, (uintptr_t)vinc); for (size_t i = (va / vinc) & (PMAP_SEGTABSIZE - 1); i < PMAP_SEGTABSIZE; i++, va += vinc) { #ifdef _LP64 if (vinc > NBSEG) { if (stp->seg_seg[i] != NULL) { + UVMHIST_LOG(pmaphist, " recursing", 0, 0, 0, 0); pmap_segtab_release(pmap, &stp->seg_seg[i], true, callback, flags, va, vinc / NSEGPG); KASSERT(stp->seg_seg[i] == NULL); @@ -255,6 +261,7 @@ pmap_segtab_release(pmap_t pmap, pmap_se #endif stp->seg_tab[i] = NULL; + UVMHIST_LOG(pmaphist, " zeroing tab[%jd]", i, 0, 0, 0); } if (free_stp) { @@ -448,6 +455,10 @@ pmap_pte_reserve(pmap_t pmap, vaddr_t va pmap_segtab_t *stp = pmap->pm_segtab; pt_entry_t *pte; + UVMHIST_FUNC(__func__); + UVMHIST_CALLARGS(pmaphist, "pm=%#jx va=%#jx flags=%jx", + (uintptr_t)pmap, (uintptr_t)va, flags, 0); + pte = pmap_pte_lookup(pmap, va); if (__predict_false(pte == NULL)) { #ifdef _LP64 @@ -513,6 +524,8 @@ pmap_pte_reserve(pmap_t pmap, vaddr_t va *pte_p = pte; #endif KASSERT(pte == stp->seg_tab[(va >> SEGSHIFT) & (PMAP_SEGTABSIZE - 1)]); + UVMHIST_LOG(pmaphist, " set tab[%jd]=%jx", + (va >> SEGSHIFT) & (PMAP_SEGTABSIZE - 1), pte, 0, 0); #ifdef DEBUG for (size_t i = 0; i < NPTEPG; i++) {