From 8199daf9ed11c869b2e29b3008df3f63462b8c30 Mon Sep 17 00:00:00 2001 From: Mark Johnston Date: Fri, 27 Jan 2023 16:53:06 -0500 Subject: [PATCH 41/52] mips: Add some debug prints to the pmap code --- sys/mips/mips/pmap_mips64.c | 29 ++++++++++++++++++++++------- 1 file changed, 22 insertions(+), 7 deletions(-) diff --git a/sys/mips/mips/pmap_mips64.c b/sys/mips/mips/pmap_mips64.c index 6fed0e9260aa..e694904ed159 100644 --- a/sys/mips/mips/pmap_mips64.c +++ b/sys/mips/mips/pmap_mips64.c @@ -1473,6 +1473,7 @@ retry: */ if (pd != NULL && (pde_is_1m_superpage(pd) && pte_is_valid((pt_entry_t *)pd))) { + printf("%s:%d va %#lx\n", __func__, __LINE__, va); if (!pmap_demote_pde_locked(pmap, pd, va, lockp != NULL ? lockp : &local_lock)) { /* * Invalidation of the 2MB page mapping may have caused @@ -2595,6 +2596,7 @@ pmap_remove(pmap_t pmap, vm_offset_t sva, vm_offset_t eva) continue; } else if (!pmap_demote_pde_locked(pmap, pde, sva, &lock)) { + printf("%s:%d va %#lx\n", __func__, __LINE__, sva); /* The superpage mapping was destroyed. */ continue; } else { @@ -2678,6 +2680,7 @@ pmap_remove_all(vm_page_t m) PMAP_LOCK(pmap); va = pv->pv_va; pde = pmap_pde(pmap, va); + printf("%s:%d va %#lx\n", __func__, __LINE__, va); (void)pmap_demote_pde(pmap, pde, va); PMAP_UNLOCK(pmap); } @@ -2844,6 +2847,7 @@ resume: goto resume; } } + printf("%s:%d va %#lx\n", __func__, __LINE__, sva); if (!pmap_demote_pde(pmap, pde, sva)) { /* * The superpage mapping was destroyed. @@ -3166,6 +3170,7 @@ pmap_enter(pmap_t pmap, vm_offset_t va, vm_page_t m, vm_prot_t prot, if (psind == 1) { KASSERT((va & PDRMASK) == 0, ("pmap_enter: va unaligned")); KASSERT(m->psind > 0, ("pmap_enter: m->psind < psind")); + printf("%s:%d va %#lx prot %x flags %x\n", __func__, __LINE__, va, prot, flags); rv = pmap_enter_pde(pmap, va, m, prot, flags, &lock); goto out; } @@ -3738,12 +3743,16 @@ pmap_enter_object(pmap_t pmap, vm_offset_t start, vm_offset_t end, while (m != NULL && (diff = m->pindex - m_start->pindex) < psize) { va = start + ptoa(diff); if ((va & PDRMASK) == 0 && va + NBPDR <= end && - m->psind == 1 && pg_ps_enabled && - pmap_enter_pde(pmap, va, m, prot & ~VM_PROT_WRITE, - PMAP_ENTER_NOSLEEP | PMAP_ENTER_NORECLAIM, &lock) == - KERN_SUCCESS) - m = &m[NBPDR / PAGE_SIZE - 1]; - else + m->psind == 1 && pg_ps_enabled) { + printf("%s:%d va %#lx prot %x\n", __func__, __LINE__, va, prot); + if (pmap_enter_pde(pmap, va, m, prot & ~VM_PROT_WRITE, + PMAP_ENTER_NOSLEEP | PMAP_ENTER_NORECLAIM, &lock) == + KERN_SUCCESS) + m = &m[NBPDR / PAGE_SIZE - 1]; + else + mpte = pmap_enter_quick_locked(pmap, va, m, prot, + mpte, &lock); + } else mpte = pmap_enter_quick_locked(pmap, va, m, prot, mpte, &lock); m = TAILQ_NEXT(m, listq); @@ -3921,6 +3930,7 @@ resume: goto resume; } } + printf("%s:%d va %#lx\n", __func__, __LINE__, sva); if (!pmap_demote_pde(pmap, pde, sva)) panic("pmap_unwire: demotion failed"); } @@ -4761,8 +4771,10 @@ retry_pv_loop: } va = pv->pv_va; pde = pmap_pde(pmap, va); - if (pde_is_1m_superpage(pde) && !pde_test(pde, PTE_RO)) + if (pde_is_1m_superpage(pde) && !pde_test(pde, PTE_RO)) { + printf("%s:%d va %#lx\n", __func__, __LINE__, va); (void)pmap_demote_pde_locked(pmap, pde, va, &lock); + } KASSERT(lock == VM_PAGE_TO_PV_LIST_LOCK(m), ("inconsistent pv lock %p %p for page %p", lock, VM_PAGE_TO_PV_LIST_LOCK(m), m)); @@ -4887,6 +4899,7 @@ retry: if ((((pa >> PAGE_SHIFT) ^ (pv->pv_va >> PDRSHIFT) ^ (uintptr_t)pmap) & (NPTEPG - 1)) == 0 && !pde_test(pde, PTE_W)) { + printf("%s:%d va %#lx\n", __func__, __LINE__, pv->pv_va); atomic_clear_long((pt_entry_t *)pde, PTE_REF); pmap_invalidate_page(pmap, pv->pv_va); cleared++; @@ -5147,6 +5160,7 @@ resume: } } lock = NULL; + printf("%s:%d va %#lx\n", __func__, __LINE__, sva); if (!pmap_demote_pde_locked(pmap, pde, sva, &lock)) { if (lock != NULL) rw_wunlock(lock); @@ -5270,6 +5284,7 @@ restart: pde = pmap_pde(pmap, va); oldpde = *pde; if (!pde_test(pde, PTE_RO)) { + printf("%s:%d va %#lx\n", __func__, __LINE__, va); if (pmap_demote_pde_locked(pmap, pde, va, &lock)) { if (!pde_test(&oldpde, PTE_W)) { /* -- 2.41.0