From 2841d9faabe4c86665d799156297878ec3720e51 Mon Sep 17 00:00:00 2001 From: Miod Vallat Date: Mon, 9 Jun 2008 20:30:26 +0000 Subject: Define a new flag, UVM_FLAG_HOLE, for uvm_map to create a vm_map_entry of a new etype, UVM_ET_HOLE, meaning it has no backend. UVM_ET_HOLE entries (which should be created as UVM_PROT_NONE and with UVM_FLAG_NOMERGE and UVM_FLAG_HOLE) are skipped in uvm_unmap_remove(), so that pmap_{k,}remove() is not called on the entry. This is intended to save time, and behave better, on pmaps with MMU holes at process exit time. ok art@, kettenis@ provided feedback as well. --- usr.sbin/procmap/procmap.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) (limited to 'usr.sbin/procmap/procmap.c') diff --git a/usr.sbin/procmap/procmap.c b/usr.sbin/procmap/procmap.c index fc0cad510d6..2140d7423ba 100644 --- a/usr.sbin/procmap/procmap.c +++ b/usr.sbin/procmap/procmap.c @@ -1,4 +1,4 @@ -/* $OpenBSD: procmap.c,v 1.27 2007/10/02 14:50:49 kettenis Exp $ */ +/* $OpenBSD: procmap.c,v 1.28 2008/06/09 20:30:25 miod Exp $ */ /* $NetBSD: pmap.c,v 1.1 2002/09/01 20:32:44 atatat Exp $ */ /* @@ -552,11 +552,12 @@ dump_vm_map_entry(kvm_t *kd, struct kbit *vmspace, printf(" end = %lx,", vme->end); printf(" object.uvm_obj/sub_map = %p,\n", vme->object.uvm_obj); printf(" offset = %lx,", (unsigned long)vme->offset); - printf(" etype = %x <%s%s%s%s >,", vme->etype, + printf(" etype = %x <%s%s%s%s%s >,", vme->etype, vme->etype & UVM_ET_OBJ ? " OBJ" : "", vme->etype & UVM_ET_SUBMAP ? " SUBMAP" : "", vme->etype & UVM_ET_COPYONWRITE ? " COW" : "", - vme->etype & UVM_ET_NEEDSCOPY ? " NEEDSCOPY" : ""); + vme->etype & UVM_ET_NEEDSCOPY ? " NEEDSCOPY" : "", + vme->etype & UVM_ET_HOLE ? " HOLE" : ""); printf(" protection = %x,\n", vme->protection); printf(" max_protection = %x,", vme->max_protection); printf(" inheritance = %d,", vme->inheritance); @@ -811,7 +812,9 @@ findname(kvm_t *kd, struct kbit *vmspace, D(vmspace, vmspace)->vm_dsize * getpagesize() / 2 < (vme->end - vme->start)) { name = " [ heap ]"; - } else + } else if (UVM_ET_ISHOLE(vme)) + name = " [ hole ]"; + else name = " [ anon ]"; return (name); -- cgit v1.2.3