Module Name: src
Committed By: skrll
Date: Wed Apr 15 15:50:16 UTC 2020
Modified Files:
src/sys/arch/hppa/gsc: if_ie_gsc.c
src/sys/arch/hppa/hppa: machdep.c pmap.c
Log Message:
Convert PMAPDEBUG to UVMHIST
To generate a diff of this commit:
cvs rdiff -u -r1.4 -r1.5 src/sys/arch/hppa/gsc/if_ie_gsc.c
cvs rdiff -u -r1.12 -r1.13 src/sys/arch/hppa/hppa/machdep.c
cvs rdiff -u -r1.108 -r1.109 src/sys/arch/hppa/hppa/pmap.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/sys/arch/hppa/gsc/if_ie_gsc.c
diff -u src/sys/arch/hppa/gsc/if_ie_gsc.c:1.4 src/sys/arch/hppa/gsc/if_ie_gsc.c:1.5
--- src/sys/arch/hppa/gsc/if_ie_gsc.c:1.4 Thu Apr 25 10:08:45 2019
+++ src/sys/arch/hppa/gsc/if_ie_gsc.c Wed Apr 15 15:50:15 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: if_ie_gsc.c,v 1.4 2019/04/25 10:08:45 msaitoh Exp $ */
+/* $NetBSD: if_ie_gsc.c,v 1.5 2020/04/15 15:50:15 skrll Exp $ */
/* $OpenBSD: if_ie_gsc.c,v 1.6 2001/01/12 22:57:04 mickey Exp $ */
@@ -38,7 +38,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_ie_gsc.c,v 1.4 2019/04/25 10:08:45 msaitoh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_ie_gsc.c,v 1.5 2020/04/15 15:50:15 skrll Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -378,11 +378,6 @@ ie_gsc_attach(device_t parent, device_t
int rseg;
int rv;
uint8_t myaddr[ETHER_ADDR_LEN];
-#ifdef PMAPDEBUG
- extern int pmapdebug;
- int opmapdebug = pmapdebug;
- pmapdebug = 0;
-#endif
if (ga->ga_type.iodc_sv_model == HPPA_FIO_GLAN)
gsc->flags |= IEGSC_GECKO;
@@ -506,9 +501,6 @@ ie_gsc_attach(device_t parent, device_t
bus_dmamem_free(gsc->iemt, &seg, rseg);
return;
}
-#ifdef PMAPDEBUG
- pmapdebug = opmapdebug;
-#endif
if (!rv)
return;
Index: src/sys/arch/hppa/hppa/machdep.c
diff -u src/sys/arch/hppa/hppa/machdep.c:1.12 src/sys/arch/hppa/hppa/machdep.c:1.13
--- src/sys/arch/hppa/hppa/machdep.c:1.12 Tue Dec 31 13:07:10 2019
+++ src/sys/arch/hppa/hppa/machdep.c Wed Apr 15 15:50:15 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: machdep.c,v 1.12 2019/12/31 13:07:10 ad Exp $ */
+/* $NetBSD: machdep.c,v 1.13 2020/04/15 15:50:15 skrll Exp $ */
/*-
* Copyright (c) 2001, 2002 The NetBSD Foundation, Inc.
@@ -58,7 +58,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.12 2019/12/31 13:07:10 ad Exp $");
+__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.13 2020/04/15 15:50:15 skrll Exp $");
#include "opt_cputype.h"
#include "opt_ddb.h"
@@ -126,10 +126,6 @@ __KERNEL_RCSID(0, "$NetBSD: machdep.c,v
#include <hppa/hppa/pim.h>
#include <hppa/dev/cpudevs.h>
-#ifdef PMAPDEBUG
-#include <hppa/hppa/hpt.h>
-#endif
-
#include "ksyms.h"
#include "lcd.h"
@@ -898,12 +894,7 @@ cpu_startup(void)
{
vaddr_t minaddr, maxaddr;
char pbuf[3][9];
-#ifdef PMAPDEBUG
- extern int pmapdebug;
- int opmapdebug = pmapdebug;
- pmapdebug = 0;
-#endif
/* Initialize the message buffer. */
initmsgbuf(msgbufaddr, MSGBUFSIZE);
@@ -940,9 +931,6 @@ cpu_startup(void)
phys_map = uvm_km_suballoc(kernel_map, &minaddr, &maxaddr,
VM_PHYS_SIZE, 0, false, NULL);
-#ifdef PMAPDEBUG
- pmapdebug = opmapdebug;
-#endif
format_bytes(pbuf[0], sizeof(pbuf[0]), ptoa(uvm_availmem()));
printf("avail mem = %s\n", pbuf[0]);
}
Index: src/sys/arch/hppa/hppa/pmap.c
diff -u src/sys/arch/hppa/hppa/pmap.c:1.108 src/sys/arch/hppa/hppa/pmap.c:1.109
--- src/sys/arch/hppa/hppa/pmap.c:1.108 Wed Apr 15 15:22:37 2020
+++ src/sys/arch/hppa/hppa/pmap.c Wed Apr 15 15:50:15 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: pmap.c,v 1.108 2020/04/15 15:22:37 skrll Exp $ */
+/* $NetBSD: pmap.c,v 1.109 2020/04/15 15:50:15 skrll Exp $ */
/*-
* Copyright (c) 2001, 2002 The NetBSD Foundation, Inc.
@@ -65,7 +65,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.108 2020/04/15 15:22:37 skrll Exp $");
+__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.109 2020/04/15 15:50:15 skrll Exp $");
#include "opt_cputype.h"
@@ -94,52 +94,6 @@ __KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.1
#include <ddb/db_output.h>
#endif
-#ifdef PMAPDEBUG
-
-#define static /**/
-#define inline /**/
-
-#define DPRINTF(l,s) do { \
- if ((pmapdebug & (l)) == (l)) \
- printf s; \
-} while(0)
-
-#define PDB_FOLLOW 0x00000001
-#define PDB_INIT 0x00000002
-#define PDB_ENTER 0x00000004
-#define PDB_REMOVE 0x00000008
-#define PDB_CREATE 0x00000010
-#define PDB_PTPAGE 0x00000020
-#define PDB_CACHE 0x00000040
-#define PDB_BITS 0x00000080
-#define PDB_COLLECT 0x00000100
-#define PDB_PROTECT 0x00000200
-#define PDB_EXTRACT 0x00000400
-#define PDB_VP 0x00000800
-#define PDB_PV 0x00001000
-#define PDB_PARANOIA 0x00002000
-#define PDB_WIRING 0x00004000
-#define PDB_PMAP 0x00008000
-#define PDB_STEAL 0x00010000
-#define PDB_PHYS 0x00020000
-#define PDB_POOL 0x00040000
-#define PDB_ALIAS 0x00080000
-int pmapdebug = 0
- | PDB_INIT
- | PDB_FOLLOW
- | PDB_VP
- | PDB_PV
- | PDB_ENTER
- | PDB_REMOVE
- | PDB_STEAL
- | PDB_PROTECT
- | PDB_PHYS
- | PDB_ALIAS
- ;
-#else
-#define DPRINTF(l,s) /* */
-#endif
-
int pmap_hptsize = 16 * PAGE_SIZE; /* patchable */
vaddr_t pmap_hpt;
@@ -331,9 +285,9 @@ pmap_pde_get(volatile uint32_t *pd, vadd
static inline void
pmap_pde_set(pmap_t pm, vaddr_t va, paddr_t ptp)
{
-
- DPRINTF(PDB_FOLLOW|PDB_VP,
- ("%s(%p, 0x%lx, 0x%lx)\n", __func__, pm, va, ptp));
+ UVMHIST_FUNC(__func__);
+ UVMHIST_CALLARGS(maphist, "pm %#jx va %#jx ptp %#jx", (uintptr_t)pm,
+ va, ptp, 0);
KASSERT((ptp & PGOFSET) == 0);
@@ -346,8 +300,9 @@ pmap_pde_alloc(pmap_t pm, vaddr_t va, st
struct vm_page *pg;
paddr_t pa;
- DPRINTF(PDB_FOLLOW|PDB_VP,
- ("%s(%p, 0x%lx, %p)\n", __func__, pm, va, pdep));
+ UVMHIST_FUNC(__func__);
+ UVMHIST_CALLARGS(maphist, "pm %#jx va %#jx pdep %#jx", (uintptr_t)pm,
+ va, (uintptr_t)pdep, 0);
KASSERT(pm != pmap_kernel());
KASSERT(rw_write_held(pm->pm_lock));
@@ -359,7 +314,7 @@ pmap_pde_alloc(pmap_t pm, vaddr_t va, st
pa = VM_PAGE_TO_PHYS(pg);
- DPRINTF(PDB_FOLLOW|PDB_VP, ("%s: pde %lx\n", __func__, pa));
+ UVMHIST_LOG(maphist, "pde %#jx", pa, 0, 0, 0);
pg->flags &= ~PG_BUSY; /* never busy */
pg->wire_count = 1; /* no mappings yet */
@@ -376,12 +331,15 @@ pmap_pde_ptp(pmap_t pm, volatile pt_entr
{
paddr_t pa = (paddr_t)pde;
- DPRINTF(PDB_FOLLOW|PDB_PV, ("%s(%p, %p)\n", __func__, pm, pde));
+ UVMHIST_FUNC(__func__);
+ UVMHIST_CALLARGS(maphist, "pm %#jx va %#jx pdep %#jx", (uintptr_t)pm,
+ (uintptr_t)pde, 0, 0);
if (pm->pm_ptphint && VM_PAGE_TO_PHYS(pm->pm_ptphint) == pa)
return (pm->pm_ptphint);
- DPRINTF(PDB_FOLLOW|PDB_PV, ("%s: lookup 0x%lx\n", __func__, pa));
+ UVMHIST_LOG(maphist, "<--- done (%#jx)",
+ (uintptr_t)PHYS_TO_VM_PAGE(pa), 0, 0, 0);
return (PHYS_TO_VM_PAGE(pa));
}
@@ -389,14 +347,14 @@ pmap_pde_ptp(pmap_t pm, volatile pt_entr
static inline void
pmap_pde_release(pmap_t pmap, vaddr_t va, struct vm_page *ptp)
{
-
- DPRINTF(PDB_FOLLOW|PDB_PV,
- ("%s(%p, 0x%lx, %p)\n", __func__, pmap, va, ptp));
+ UVMHIST_FUNC(__func__);
+ UVMHIST_CALLARGS(maphist, "pm %#jx va %#jx ptp %#jx", (uintptr_t)pmap,
+ va, (uintptr_t)ptp, 0);
KASSERT(pmap != pmap_kernel());
if (--ptp->wire_count <= 1) {
- DPRINTF(PDB_FOLLOW|PDB_PV,
- ("%s: disposing ptp %p\n", __func__, ptp));
+ UVMHIST_LOG(maphist, "disposing ptp %#jx", (uintptr_t)ptp, 0,
+ 0, 0);
pmap_pde_set(pmap, va, 0);
pmap->pm_stats.resident_count--;
if (pmap->pm_ptphint == ptp)
@@ -420,8 +378,12 @@ static inline void
pmap_pte_set(volatile pt_entry_t *pde, vaddr_t va, pt_entry_t pte)
{
- DPRINTF(PDB_FOLLOW|PDB_VP, ("%s(%p, 0x%lx, 0x%x)\n",
- __func__, pde, va, pte));
+ /* too verbose due to hppa_pagezero_{,un}map */
+#if 0
+ UVMHIST_FUNC(__func__);
+ UVMHIST_CALLARGS(maphist, "pdep %#jx va %#jx pte %#jx", (uintptr_t)pde,
+ va, pte, 0);
+#endif
KASSERT(pde != NULL);
KASSERT(((paddr_t)pde & PGOFSET) == 0);
@@ -433,6 +395,12 @@ void
pmap_pte_flush(pmap_t pmap, vaddr_t va, pt_entry_t pte)
{
+ UVMHIST_FUNC(__func__);
+ if (pmap != pmap_kernel() && va != 0) {
+ UVMHIST_CALLARGS(maphist, "pm %#jx va %#jx pte %#jx",
+ (uintptr_t)pmap, va, (uintptr_t)pte, 0);
+ }
+
fdcache(pmap->pm_space, va, PAGE_SIZE);
if (pte & PTE_PROT(TLB_EXECUTE)) {
ficache(pmap->pm_space, va, PAGE_SIZE);
@@ -528,21 +496,30 @@ pmap_check_alias(struct vm_page *pg, vad
struct pv_entry *pve;
int ret = 0;
+ UVMHIST_FUNC(__func__);
+ UVMHIST_CALLARGS(maphist, "pg %#jx va %#jx pte %#jx", (uintptr_t)pg,
+ va, pte, 0);
+
/* check for non-equ aliased mappings */
for (pve = md->pvh_list; pve; pve = pve->pv_next) {
vaddr_t pva = pve->pv_va & PV_VAMASK;
+ UVMHIST_LOG(maphist, "... pm %#jx va %#jx",
+ (uintptr_t)pve->pv_pmap, pva, 0, 0);
+
pte |= pmap_vp_find(pve->pv_pmap, pva);
if ((va & HPPA_PGAOFF) != (pva & HPPA_PGAOFF) &&
(pte & PTE_PROT(TLB_WRITE))) {
+ UVMHIST_LOG(maphist,
+ "aliased writable mapping %#jx:%#jx",
+ pve->pv_pmap->pm_space, pve->pv_va, 0, 0);
- DPRINTF(PDB_FOLLOW|PDB_ALIAS,
- ("%s: aliased writable mapping 0x%x:0x%lx\n",
- __func__, pve->pv_pmap->pm_space, pve->pv_va));
ret++;
}
}
+ UVMHIST_LOG(maphist, "<--- done (%jd)", ret, 0, 0, 0);
+
return (ret);
}
@@ -554,12 +531,8 @@ pmap_pv_alloc(void)
{
struct pv_entry *pv;
- DPRINTF(PDB_FOLLOW|PDB_PV, ("%s()\n", __func__));
-
pv = pool_get(&pmap_pv_pool, PR_NOWAIT);
- DPRINTF(PDB_FOLLOW|PDB_PV, ("%s: %p\n", __func__, pv));
-
return (pv);
}
@@ -580,8 +553,11 @@ pmap_pv_enter(struct vm_page *pg, struct
{
struct vm_page_md * const md = VM_PAGE_TO_MD(pg);
- DPRINTF(PDB_FOLLOW|PDB_PV, ("%s(%p, %p, %p, 0x%lx, %p, 0x%x)\n",
- __func__, pg, pve, pm, va, pdep, flags));
+ UVMHIST_FUNC(__func__);
+ UVMHIST_CALLARGS(maphist, "pg %#jx pve %#jx pm %#jx va %#jx",
+ (uintptr_t)pg, (uintptr_t)pve, (uintptr_t)pm, va);
+ UVMHIST_LOG(maphist, "...pdep %#jx flags %#jx",
+ (uintptr_t)pdep, flags, 0, 0);
KASSERT(pm == pmap_kernel() || uvm_page_owner_locked_p(pg, true));
@@ -595,6 +571,10 @@ pmap_pv_enter(struct vm_page *pg, struct
static inline struct pv_entry *
pmap_pv_remove(struct vm_page *pg, pmap_t pmap, vaddr_t va)
{
+ UVMHIST_FUNC(__func__);
+ UVMHIST_CALLARGS(maphist, "pg %#jx pm %#jx va %#jx",
+ (uintptr_t)pg, (uintptr_t)pmap, va, 0);
+
struct vm_page_md * const md = VM_PAGE_TO_MD(pg);
struct pv_entry **pve, *pv;
@@ -626,26 +606,13 @@ pmap_page_physload(paddr_t spa, paddr_t
{
if (spa < FIRST_16M && epa <= FIRST_16M) {
- DPRINTF(PDB_INIT, ("%s: phys segment 0x%05lx 0x%05lx\n",
- __func__, spa, epa));
-
uvm_page_physload(spa, epa, spa, epa, VM_FREELIST_ISADMA);
} else if (spa < FIRST_16M && epa > FIRST_16M) {
- DPRINTF(PDB_INIT, ("%s: phys segment 0x%05lx 0x%05lx\n",
- __func__, spa, FIRST_16M));
-
uvm_page_physload(spa, FIRST_16M, spa, FIRST_16M,
VM_FREELIST_ISADMA);
-
- DPRINTF(PDB_INIT, ("%s: phys segment 0x%05lx 0x%05lx\n",
- __func__, FIRST_16M, epa));
-
uvm_page_physload(FIRST_16M, epa, FIRST_16M, epa,
VM_FREELIST_DEFAULT);
} else {
- DPRINTF(PDB_INIT, ("%s: phys segment 0x%05lx 0x%05lx\n",
- __func__, spa, epa));
-
uvm_page_physload(spa, epa, spa, epa, VM_FREELIST_DEFAULT);
}
@@ -663,6 +630,9 @@ pmap_page_physload(paddr_t spa, paddr_t
void
pmap_bootstrap(vaddr_t vstart)
{
+ UVMHIST_FUNC(__func__);
+ UVMHIST_CALLED(maphist);
+
vaddr_t va, addr;
vsize_t size;
extern paddr_t hppa_vtop;
@@ -678,8 +648,6 @@ pmap_bootstrap(vaddr_t vstart)
extern int __rodata_start, __rodata_end;
extern int __data_start;
- DPRINTF(PDB_FOLLOW|PDB_INIT, ("%s(0x%lx)\n", __func__, vstart));
-
uvm_md_init();
hppa_prot[UVM_PROT_NONE] = TLB_AR_NA;
@@ -719,8 +687,6 @@ pmap_bootstrap(vaddr_t vstart)
size = round_page((hppa_sid_max + 1) * 4);
memset((void *)addr, 0, size);
fdcache(HPPA_SID_KERNEL, addr, size);
- DPRINTF(PDB_INIT, ("%s: vtop 0x%lx @ 0x%lx\n", __func__, size,
- addr));
addr += size;
pmap_sdir_set(HPPA_SID_KERNEL, kpm->pm_pdir);
@@ -749,18 +715,19 @@ pmap_bootstrap(vaddr_t vstart)
pmap_hpt = addr;
addr += pmap_hptsize;
- DPRINTF(PDB_INIT, ("%s: hpt_table 0x%x @ 0x%lx\n", __func__,
- pmap_hptsize, addr));
+ UVMHIST_LOG(maphist, "hpt_table %#jx @ %#jx\n",
+ pmap_hptsize, addr, 0, 0);
if ((error = (cpu_hpt_init)(pmap_hpt, pmap_hptsize)) < 0) {
printf("WARNING: HPT init error %d -- DISABLED\n",
error);
pmap_hpt = 0;
- } else
- DPRINTF(PDB_INIT,
- ("%s: HPT installed for %ld entries @ 0x%lx\n",
- __func__, pmap_hptsize / sizeof(struct hpt_entry),
- addr));
+ } else {
+ UVMHIST_LOG(maphist,
+ "HPT installed for %jd entries @ %#jx",
+ pmap_hptsize / sizeof(struct hpt_entry), addr, 0,
+ 0);
+ }
}
#endif
@@ -774,7 +741,7 @@ pmap_bootstrap(vaddr_t vstart)
/* ... and all physmem (VA == PA) */
npdes = nkpdes + (physmem + atop(PDE_SIZE) - 1) / atop(PDE_SIZE);
- DPRINTF(PDB_INIT, ("%s: npdes %d\n", __func__, npdes));
+ UVMHIST_LOG(maphist, "npdes %jd", npdes, 0, 0, 0);
/* map the pdes */
for (va = 0; npdes--; va += PDE_SIZE, addr += PAGE_SIZE) {
@@ -785,9 +752,9 @@ pmap_bootstrap(vaddr_t vstart)
va = HPPA_IOBEGIN;
/* now map the pde for the physmem */
memset((void *)addr, 0, PAGE_SIZE);
- DPRINTF(PDB_INIT|PDB_VP,
- ("%s: pde premap 0x%08lx 0x%08lx\n", __func__, va,
- addr));
+
+ UVMHIST_LOG(maphist, "pde premap 0x%08jx 0x%08jx", va,
+ addr, 0, 0);
pmap_pde_set(kpm, va, addr);
kpm->pm_stats.resident_count++; /* count PTP as resident */
}
@@ -856,9 +823,9 @@ pmap_bootstrap(vaddr_t vstart)
*/
addr = ksrx;
- DPRINTF(PDB_INIT,
- ("%s: BTLB mapping text and rodata @ %p - %p\n", __func__,
- (void *)addr, (void *)kero));
+ UVMHIST_LOG(maphist,
+ "BTLB mapping text and rodata @ %#jx - %#jx", addr, kero,
+ 0, 0);
btlb_j = 0;
while (addr < (vaddr_t) kero) {
@@ -903,8 +870,8 @@ pmap_bootstrap(vaddr_t vstart)
* which is plentiful.
*/
- DPRINTF(PDB_INIT, ("%s: mapping data, bss, etc @ %p - %p\n",
- __func__, (void *)addr, (void *)kerw));
+ UVMHIST_LOG(maphist, "mapping data, bss, etc @ %#jx - %#jx",
+ addr, kerw, 0, 0);
while (addr < kerw) {
@@ -984,10 +951,8 @@ pmap_bootstrap(vaddr_t vstart)
}
/* XXXNH update */
- DPRINTF(PDB_INIT, ("%s: mapped 0x%lx - 0x%lx\n", __func__, ksro,
- kero));
- DPRINTF(PDB_INIT, ("%s: mapped 0x%lx - 0x%lx\n", __func__, ksrw,
- kerw));
+ UVMHIST_LOG(maphist, "mapped %#jx - %#jx", ksro, kero, 0, 0);
+ UVMHIST_LOG(maphist, "mapped %#jx - %#jx", ksrw, kerw, 0, 0);
}
@@ -1003,7 +968,8 @@ pmap_init(void)
extern void gateway_page(void);
volatile pt_entry_t *pde;
- DPRINTF(PDB_FOLLOW|PDB_INIT, ("%s()\n", __func__));
+ UVMHIST_FUNC(__func__)
+ UVMHIST_CALLED(maphist);
sid_counter = HPPA_SID_KERNEL;
@@ -1031,7 +997,7 @@ pmap_init(void)
pmap_initialized = true;
- DPRINTF(PDB_FOLLOW|PDB_INIT, ("%s(): done\n", __func__));
+ UVMHIST_LOG(maphist, "<--- done", 0, 0, 0, 0);
}
/*
@@ -1057,9 +1023,12 @@ pmap_create(void)
pmap_t pmap;
pa_space_t space;
+ UVMHIST_FUNC(__func__)
+ UVMHIST_CALLED(maphist);
+
pmap = pool_get(&pmap_pool, PR_WAITOK);
- DPRINTF(PDB_FOLLOW|PDB_PMAP, ("%s: pmap = %p\n", __func__, pmap));
+ UVMHIST_LOG(maphist, "pm %#jx", (uintptr_t)pmap, 0, 0, 0);
rw_init(&pmap->pm_obj_lock);
uvm_obj_init(&pmap->pm_obj, &pmap_pager, false, 1);
@@ -1090,8 +1059,8 @@ pmap_create(void)
mutex_exit(&pmaps_lock);
- DPRINTF(PDB_FOLLOW|PDB_PMAP, ("%s: pm = %p, space = %d, pid = %d\n",
- __func__, pmap, space, pmap->pm_pid));
+ UVMHIST_LOG(maphist, "pm %#jx, space %jd, pid %jd",
+ (uintptr_t)pmap, space, pmap->pm_pid, 0);
return (pmap);
}
@@ -1105,6 +1074,9 @@ pmap_create(void)
void
pmap_destroy(pmap_t pmap)
{
+ UVMHIST_FUNC(__func__)
+ UVMHIST_CALLARGS(maphist, "pm %#jx", (uintptr_t)pmap, 0, 0, 0);
+
#ifdef DIAGNOSTIC
struct uvm_page_array a;
struct vm_page *pg;
@@ -1112,8 +1084,6 @@ pmap_destroy(pmap_t pmap)
#endif
int refs;
- DPRINTF(PDB_FOLLOW|PDB_PMAP, ("%s(%p)\n", __func__, pmap));
-
rw_enter(pmap->pm_lock, RW_WRITER);
refs = --pmap->pm_obj.uo_refs;
rw_exit(pmap->pm_lock);
@@ -1137,9 +1107,8 @@ pmap_destroy(pmap_t pmap)
KASSERT(pg != pmap->pm_pdir_pg);
pa = VM_PAGE_TO_PHYS(pg);
- DPRINTF(PDB_FOLLOW, ("%s(%p): stray ptp "
- "0x%lx w/ %d ents:", __func__, pmap, pa,
- pg->wire_count - 1));
+ UVMHIST_LOG(maphist, "pm %#jx: stray ptp %#jx w/ %jd entries:",
+ (uintptr_t)pmap, pa, pg->wire_count - 1, 0);
pde = (pt_entry_t *)pa;
epde = (pt_entry_t *)(pa + PAGE_SIZE);
@@ -1157,13 +1126,13 @@ pmap_destroy(pmap_t pmap)
if (pv->pv_pmap != pmap)
continue;
- DPRINTF(PDB_FOLLOW, (" 0x%lx", pv->pv_va));
+ UVMHIST_LOG(maphist, " %#jx", pv->pv_va, 0, 0,
+ 0);
pmap_remove(pmap, pv->pv_va & PV_VAMASK,
(pv->pv_va & PV_VAMASK) + PAGE_SIZE);
}
}
- DPRINTF(PDB_FOLLOW, ("\n"));
}
rw_exit(pmap->pm_lock);
uvm_page_array_fini(&a);
@@ -1184,8 +1153,8 @@ pmap_destroy(pmap_t pmap)
void
pmap_reference(pmap_t pmap)
{
-
- DPRINTF(PDB_FOLLOW|PDB_PMAP, ("%s(%p)\n", __func__, pmap));
+ UVMHIST_FUNC(__func__)
+ UVMHIST_CALLARGS(maphist, "pm %#jx", (uintptr_t)pmap, 0, 0, 0);
rw_enter(pmap->pm_lock, RW_WRITER);
pmap->pm_obj.uo_refs++;
@@ -1233,9 +1202,10 @@ pmap_enter(pmap_t pmap, vaddr_t va, padd
struct pv_entry *pve = NULL;
bool wired = (flags & PMAP_WIRED) != 0;
- DPRINTF(PDB_FOLLOW|PDB_ENTER,
- ("%s(%p, 0x%lx, 0x%lx, 0x%x, 0x%x)\n", __func__, pmap, va, pa,
- prot, flags));
+ UVMHIST_FUNC(__func__);
+ UVMHIST_CALLARGS(maphist, "pm %#jx va %#jx pa %#jx prot %#jx",
+ (uintptr_t)pmap, va, pa, prot);
+ UVMHIST_LOG(maphist, "...flags %#jx", flags, 0, 0, 0);
PMAP_LOCK(pmap);
@@ -1253,9 +1223,7 @@ pmap_enter(pmap_t pmap, vaddr_t va, padd
ptp = pmap_pde_ptp(pmap, pde);
if ((pte = pmap_pte_get(pde, va))) {
-
- DPRINTF(PDB_ENTER,
- ("%s: remapping 0x%x -> 0x%lx\n", __func__, pte, pa));
+ UVMHIST_LOG(maphist, "remapping %#jx -> %#jx", pte, pa, 0, 0);
pmap_pte_flush(pmap, va, pte);
if (wired && !(pte & PTE_PROT(TLB_WIRED)))
@@ -1265,8 +1233,7 @@ pmap_enter(pmap_t pmap, vaddr_t va, padd
pg = PHYS_TO_VM_PAGE(PTE_PAGE(pte));
if (PTE_PAGE(pte) == pa) {
- DPRINTF(PDB_FOLLOW|PDB_ENTER,
- ("%s: same page\n", __func__));
+ UVMHIST_LOG(maphist, "same page", 0, 0, 0, 0);
goto enter;
}
@@ -1277,8 +1244,8 @@ pmap_enter(pmap_t pmap, vaddr_t va, padd
md->pvh_attrs |= pmap_pvh_attrs(pte);
}
} else {
- DPRINTF(PDB_ENTER, ("%s: new mapping 0x%lx -> 0x%lx\n",
- __func__, va, pa));
+ UVMHIST_LOG(maphist, "new mapping %#jx -> %#jx",
+ va, pa, 0, 0);
pte = PTE_PROT(TLB_REFTRAP);
pmap->pm_stats.resident_count++;
if (wired)
@@ -1326,7 +1293,7 @@ enter:
PMAP_UNLOCK(pmap);
- DPRINTF(PDB_FOLLOW|PDB_ENTER, ("%s: leaving\n", __func__));
+ UVMHIST_LOG(maphist, "<--- done (0)", 0, 0, 0, 0);
return (0);
}
@@ -1341,6 +1308,10 @@ enter:
void
pmap_remove(pmap_t pmap, vaddr_t sva, vaddr_t eva)
{
+
+ UVMHIST_FUNC(__func__);
+ UVMHIST_CALLARGS(maphist, "sva %#jx eva %#jx", sva, eva, 0, 0);
+
struct pv_entry *pve;
volatile pt_entry_t *pde = NULL;
pt_entry_t pte;
@@ -1348,9 +1319,6 @@ pmap_remove(pmap_t pmap, vaddr_t sva, va
vaddr_t pdemask;
int batch;
- DPRINTF(PDB_FOLLOW|PDB_REMOVE,
- ("%s(%p, 0x%lx, 0x%lx)\n", __func__, pmap, sva, eva));
-
PMAP_LOCK(pmap);
for (batch = 0; sva < eva; sva += PAGE_SIZE) {
@@ -1399,20 +1367,21 @@ pmap_remove(pmap_t pmap, vaddr_t sva, va
PMAP_UNLOCK(pmap);
- DPRINTF(PDB_FOLLOW|PDB_REMOVE, ("%s: leaving\n", __func__));
+ UVMHIST_LOG(maphist, "<--- done", 0, 0, 0, 0);
}
void
pmap_write_protect(pmap_t pmap, vaddr_t sva, vaddr_t eva, vm_prot_t prot)
{
+ UVMHIST_FUNC(__func__);
+ UVMHIST_CALLARGS(maphist, "pm %#jx sva %#jx eva %#jx prot %#jx",
+ (uintptr_t)pmap, sva, eva, prot);
+
struct vm_page *pg;
volatile pt_entry_t *pde = NULL;
pt_entry_t pte;
u_int pteprot, pdemask;
- DPRINTF(PDB_FOLLOW|PDB_PMAP,
- ("%s(%p, %lx, %lx, %x)\n", __func__, pmap, sva, eva, prot));
-
sva = trunc_page(sva);
pteprot = PTE_PROT(pmap_prot(pmap, prot));
@@ -1427,9 +1396,8 @@ pmap_write_protect(pmap_t pmap, vaddr_t
}
}
if ((pte = pmap_pte_get(pde, sva))) {
-
- DPRINTF(PDB_PMAP,
- ("%s: va=0x%lx pte=0x%x\n", __func__, sva, pte));
+ UVMHIST_LOG(maphist, "va% #jx pte %#jx", sva, pte,
+ 0, 0);
/*
* Determine if mapping is changing.
* If not, nothing to do.
@@ -1459,11 +1427,12 @@ pmap_write_protect(pmap_t pmap, vaddr_t
void
pmap_page_remove(struct vm_page *pg)
{
+ UVMHIST_FUNC(__func__)
+ UVMHIST_CALLARGS(maphist, "pg %#jx", (uintptr_t)pg, 0, 0, 0);
+
struct vm_page_md * const md = VM_PAGE_TO_MD(pg);
struct pv_entry *pve, *npve, **pvp;
- DPRINTF(PDB_FOLLOW|PDB_PV, ("%s(%p)\n", __func__, pg));
-
if (md->pvh_list == NULL) {
KASSERT((md->pvh_attrs & PVF_EXEC) == 0);
return;
@@ -1506,7 +1475,7 @@ pmap_page_remove(struct vm_page *pg)
md->pvh_attrs &= ~PVF_EXEC;
*pvp = NULL;
- DPRINTF(PDB_FOLLOW|PDB_PV, ("%s: leaving\n", __func__));
+ UVMHIST_LOG(maphist, "<--- done", 0, 0, 0, 0);
}
/*
@@ -1522,11 +1491,12 @@ pmap_page_remove(struct vm_page *pg)
void
pmap_unwire(pmap_t pmap, vaddr_t va)
{
+ UVMHIST_FUNC(__func__);
+ UVMHIST_CALLARGS(maphist, "pm %#jx va %#jx", (uintptr_t)pmap, va, 0, 0);
+
volatile pt_entry_t *pde;
pt_entry_t pte = 0;
- DPRINTF(PDB_FOLLOW|PDB_PMAP, ("%s(%p, 0x%lx)\n", __func__, pmap, va));
-
PMAP_LOCK(pmap);
if ((pde = pmap_pde_get(pmap->pm_pdir, va))) {
pte = pmap_pte_get(pde, va);
@@ -1541,19 +1511,20 @@ pmap_unwire(pmap_t pmap, vaddr_t va)
}
PMAP_UNLOCK(pmap);
- DPRINTF(PDB_FOLLOW|PDB_PMAP, ("%s: leaving\n", __func__));
+ UVMHIST_LOG(maphist, "<--- done", 0, 0, 0, 0);
}
bool
pmap_changebit(struct vm_page *pg, u_int set, u_int clear)
{
+ UVMHIST_FUNC(__func__);
+ UVMHIST_CALLARGS(maphist, "pg %#jx (md %#jx) set %#jx clear %#jx",
+ (uintptr_t)pg, (uintptr_t)VM_PAGE_TO_MD(pg), set, clear);
+
struct vm_page_md * const md = VM_PAGE_TO_MD(pg);
struct pv_entry *pve;
int res;
- DPRINTF(PDB_FOLLOW|PDB_BITS,
- ("%s(%p, %x, %x)\n", __func__, pg, set, clear));
-
KASSERT((set & clear) == 0);
KASSERT((set & ~(PVF_REF|PVF_UNCACHEABLE)) == 0);
KASSERT((clear & ~(PVF_MOD|PVF_WRITE|PVF_UNCACHEABLE)) == 0);
@@ -1570,11 +1541,10 @@ pmap_changebit(struct vm_page *pg, u_int
if ((pde = pmap_pde_get(pmap->pm_pdir, va))) {
opte = pte = pmap_pte_get(pde, va);
-#ifdef PMAPDEBUG
+#ifdef DEBUG
if (!pte) {
- DPRINTF(PDB_FOLLOW|PDB_BITS,
- ("%s: zero pte for 0x%lx\n", __func__,
- va));
+ UVMHIST_LOG(maphist, "zero pte for %#jx",
+ va, 0, 0, 0);
continue;
}
#endif
@@ -1599,13 +1569,15 @@ pmap_changebit(struct vm_page *pg, u_int
bool
pmap_testbit(struct vm_page *pg, u_int bit)
{
+ UVMHIST_FUNC(__func__);
+ UVMHIST_CALLARGS(maphist, "pg %#jx (md %#jx) bit %#jx",
+ (uintptr_t)pg, (uintptr_t)VM_PAGE_TO_MD(pg), bit, 0);
+
struct vm_page_md * const md = VM_PAGE_TO_MD(pg);
struct pv_entry *pve;
pt_entry_t pte;
int ret;
- DPRINTF(PDB_FOLLOW|PDB_BITS, ("%s(%p, %x)\n", __func__, pg, bit));
-
for (pve = md->pvh_list; !(md->pvh_attrs & bit) && pve;
pve = pve->pv_next) {
pmap_t pm = pve->pv_pmap;
@@ -1631,9 +1603,10 @@ pmap_testbit(struct vm_page *pg, u_int b
bool
pmap_extract(pmap_t pmap, vaddr_t va, paddr_t *pap)
{
- pt_entry_t pte;
+ UVMHIST_FUNC(__func__);
+ UVMHIST_CALLARGS(maphist, "pm %#jx va %#jx", (uintptr_t)pmap, va, 0, 0);
- DPRINTF(PDB_FOLLOW|PDB_EXTRACT, ("%s(%p, %lx)\n", __func__, pmap, va));
+ pt_entry_t pte;
PMAP_LOCK(pmap);
pte = pmap_vp_find(pmap, va);
@@ -1682,11 +1655,13 @@ pmap_procwr(struct proc *p, vaddr_t va,
static inline void
pmap_flush_page(struct vm_page *pg, bool purge)
{
+ UVMHIST_FUNC(__func__);
+ UVMHIST_CALLARGS(maphist, "pg %#jx (md %#jx) purge %jd",
+ (uintptr_t)pg, (uintptr_t)VM_PAGE_TO_MD(pg), purge, 0);
+
struct vm_page_md * const md = VM_PAGE_TO_MD(pg);
struct pv_entry *pve;
- DPRINTF(PDB_FOLLOW|PDB_CACHE, ("%s(%p, %d)\n", __func__, pg, purge));
-
/* purge cache for all possible mappings for the pa */
for (pve = md->pvh_list; pve; pve = pve->pv_next) {
vaddr_t va = pve->pv_va & PV_VAMASK;
@@ -1714,7 +1689,9 @@ void
pmap_zero_page(paddr_t pa)
{
- DPRINTF(PDB_FOLLOW|PDB_PHYS, ("%s(%lx)\n", __func__, pa));
+ UVMHIST_FUNC(__func__);
+ UVMHIST_CALLARGS(maphist, "pa %#jx (pg %#jx)", pa,
+ (uintptr_t)PHYS_TO_VM_PAGE(pa), 0, 0);
KASSERT(VM_PAGE_TO_MD(PHYS_TO_VM_PAGE(pa))->pvh_list == NULL);
KASSERT((VM_PAGE_TO_MD(PHYS_TO_VM_PAGE(pa))->pvh_attrs & PVF_EXEC) == 0);
@@ -1738,9 +1715,12 @@ pmap_zero_page(paddr_t pa)
void
pmap_copy_page(paddr_t spa, paddr_t dpa)
{
- struct vm_page *srcpg = PHYS_TO_VM_PAGE(spa);
+ UVMHIST_FUNC(__func__);
+ UVMHIST_CALLARGS(maphist, "spa %#jx (pg %#jx) dpa %#jx (pg %#jx)",
+ spa, (uintptr_t)PHYS_TO_VM_PAGE(spa),
+ dpa, (uintptr_t)PHYS_TO_VM_PAGE(dpa));
- DPRINTF(PDB_FOLLOW|PDB_PHYS, ("%s(%lx, %lx)\n", __func__, spa, dpa));
+ struct vm_page *srcpg = PHYS_TO_VM_PAGE(spa);
KASSERT(VM_PAGE_TO_MD(PHYS_TO_VM_PAGE(dpa))->pvh_list == NULL);
KASSERT((VM_PAGE_TO_MD(PHYS_TO_VM_PAGE(dpa))->pvh_attrs & PVF_EXEC) == 0);
@@ -1765,25 +1745,16 @@ pmap_copy_page(paddr_t spa, paddr_t dpa)
void
pmap_kenter_pa(vaddr_t va, paddr_t pa, vm_prot_t prot, u_int flags)
{
+ UVMHIST_FUNC(__func__);
+ if (va != 0) {
+ UVMHIST_CALLARGS(maphist, "va %#jx pa %#jx prot %#jx flags %#jx",
+ va, pa, prot, flags);
+ }
+
volatile pt_entry_t *pde;
pt_entry_t pte, opte;
struct vm_page *pg;
-#ifdef PMAPDEBUG
- int opmapdebug = pmapdebug;
-
- /*
- * If we're being told to map page zero, we can't call printf() at all,
- * because doing so would lead to an infinite recursion on this call.
- * (printf requires page zero to be mapped).
- */
- if (va == 0)
- pmapdebug = 0;
-#endif /* PMAPDEBUG */
-
- DPRINTF(PDB_FOLLOW|PDB_ENTER,
- ("%s(%lx, %lx, %x)\n", __func__, va, pa, prot));
-
if (!(pde = pmap_pde_get(pmap_kernel()->pm_pdir, va)) &&
!(pde = pmap_pde_alloc(pmap_kernel(), va, NULL)))
panic("pmap_kenter_pa: cannot allocate pde for va=0x%lx", va);
@@ -1806,8 +1777,8 @@ pmap_kenter_pa(vaddr_t va, paddr_t pa, v
pve = pmap_pv_alloc();
if (!pve)
panic("%s: no pv entries available", __func__);
- DPRINTF(PDB_FOLLOW|PDB_ENTER, ("%s(%lx, %lx, %x) TLB_KENTER\n",
- __func__, va, pa, pte));
+ UVMHIST_LOG(maphist, "va %#jx pa %#jx pte %#jx TLB_KENTER",
+ va, pa, pte, 0);
if (pmap_check_alias(pg, va, pte))
pmap_page_remove(pg);
@@ -1816,37 +1787,31 @@ pmap_kenter_pa(vaddr_t va, paddr_t pa, v
}
pmap_pte_set(pde, va, pte);
- DPRINTF(PDB_FOLLOW|PDB_ENTER, ("%s: leaving\n", __func__));
+ if (va != 0) {
+ UVMHIST_LOG(maphist, "<--- done", 0, 0, 0, 0);
+ }
-#ifdef PMAPDEBUG
- pmapdebug = opmapdebug;
-#endif /* PMAPDEBUG */
}
void
pmap_kremove(vaddr_t va, vsize_t size)
{
+ UVMHIST_FUNC(__func__);
+ bool pzero = false;
+ if (va != 0) {
+ UVMHIST_CALLARGS(maphist, "va %#jx...%#jx", va, va + size, 0,
+ 0);
+ pzero = true;
+ }
+
struct pv_entry *pve;
vaddr_t eva, pdemask;
volatile pt_entry_t *pde = NULL;
pt_entry_t pte;
struct vm_page *pg;
pmap_t pmap = pmap_kernel();
-#ifdef PMAPDEBUG
- int opmapdebug = pmapdebug;
-
- /*
- * If we're being told to unmap page zero, we can't call printf() at
- * all as printf requires page zero to be mapped.
- */
- if (va == 0)
- pmapdebug = 0;
-#endif /* PMAPDEBUG */
-
- DPRINTF(PDB_FOLLOW|PDB_REMOVE,
- ("%s(%lx, %lx)\n", __func__, va, size));
-#ifdef PMAPDEBUG
+#ifdef DEBUG
/*
* Don't allow the VA == PA mappings, apart from page zero, to be
* removed. Page zero is given special treatment so that we get TLB
@@ -1854,10 +1819,8 @@ pmap_kremove(vaddr_t va, vsize_t size)
* in the first page when it shouldn't.
*/
if (va != 0 && va < ptoa(physmem)) {
- DPRINTF(PDB_FOLLOW|PDB_REMOVE,
- ("%s(%lx, %lx): unmapping physmem\n", __func__, va,
- size));
- pmapdebug = opmapdebug;
+ UVMHIST_LOG(maphist, "va %#jx size %#jx: unmapping physmem", va,
+ size, 0, 0);
return;
}
#endif
@@ -1871,9 +1834,8 @@ pmap_kremove(vaddr_t va, vsize_t size)
}
}
if (!(pte = pmap_pte_get(pde, va))) {
- DPRINTF(PDB_FOLLOW|PDB_REMOVE,
- ("%s: unmapping unmapped 0x%lx\n", __func__,
- va));
+ UVMHIST_LOG(maphist, "unmapping unmapped %#jx",
+ va, 0, 0, 0);
continue;
}
@@ -1888,11 +1850,9 @@ pmap_kremove(vaddr_t va, vsize_t size)
pmap_pv_free(pve);
}
}
- DPRINTF(PDB_FOLLOW|PDB_REMOVE, ("%s: leaving\n", __func__));
-
-#ifdef PMAPDEBUG
- pmapdebug = opmapdebug;
-#endif /* PMAPDEBUG */
+ if (pzero) {
+ UVMHIST_LOG(maphist, "<--- done", 0, 0, 0, 0);
+ }
}
#if defined(USE_HPT)