Module Name:    src
Committed By:   uebayasi
Date:           Wed Feb 24 04:20:45 UTC 2010

Modified Files:
        src/sys/uvm: uvm_fault.c

Log Message:
Record if "promote" is done in UVMHIST.  Do it for "upper" fault too.


To generate a diff of this commit:
cvs rdiff -u -r1.167 -r1.168 src/sys/uvm/uvm_fault.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/uvm/uvm_fault.c
diff -u src/sys/uvm/uvm_fault.c:1.167 src/sys/uvm/uvm_fault.c:1.168
--- src/sys/uvm/uvm_fault.c:1.167	Wed Feb 24 04:18:09 2010
+++ src/sys/uvm/uvm_fault.c	Wed Feb 24 04:20:45 2010
@@ -1,4 +1,4 @@
-/*	$NetBSD: uvm_fault.c,v 1.167 2010/02/24 04:18:09 uebayasi Exp $	*/
+/*	$NetBSD: uvm_fault.c,v 1.168 2010/02/24 04:20:45 uebayasi Exp $	*/
 
 /*
  *
@@ -39,7 +39,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: uvm_fault.c,v 1.167 2010/02/24 04:18:09 uebayasi Exp $");
+__KERNEL_RCSID(0, "$NetBSD: uvm_fault.c,v 1.168 2010/02/24 04:20:45 uebayasi Exp $");
 
 #include "opt_uvmhist.h"
 
@@ -704,6 +704,7 @@
 	bool wire_paging;
 	bool maxprot;
 	bool cow_now;
+	bool promote;
 };
 
 static inline int	uvm_fault_check(
@@ -912,6 +913,8 @@
 		flt->cow_now = (flt->access_type & VM_PROT_WRITE) != 0;
 	}
 
+	flt->promote = false;
+
 	/*
 	 * handle "needs_copy" case.   if we need to copy the amap we will
 	 * have to drop our readlock and relock it with a write lock.  (we
@@ -1437,6 +1440,7 @@
 	 */
 
 	if (flt->cow_now && anon->an_ref > 1) {
+		flt->promote = true;
 		error = uvm_fault_upper_promote(ufi, flt, uobj, anon);
 	} else {
 		error = uvm_fault_upper_direct(ufi, flt, uobj, anon);
@@ -1568,8 +1572,8 @@
 	 * now map the page in.
 	 */
 
-	UVMHIST_LOG(maphist, "  MAPPING: anon: pm=0x%x, va=0x%x, pg=0x%x",
-	    ufi->orig_map->pmap, ufi->orig_rvaddr, pg, 0);
+	UVMHIST_LOG(maphist, "  MAPPING: anon: pm=0x%x, va=0x%x, pg=0x%x, promote=%d",
+	    ufi->orig_map->pmap, ufi->orig_rvaddr, pg, flt->promote);
 	if (pmap_enter(ufi->orig_map->pmap, ufi->orig_rvaddr, VM_PAGE_TO_PHYS(pg),
 	    flt->enter_prot, flt->access_type | PMAP_CANFAIL | (flt->wire_mapping ? PMAP_WIRED : 0))
 	    != 0) {
@@ -1648,7 +1652,6 @@
 #ifdef DIAGNOSTIC
 	struct vm_amap * const amap = ufi->entry->aref.ar_amap;
 #endif
-	bool promote;
 	int error;
 	UVMHIST_FUNC("uvm_fault_lower1"); UVMHIST_CALLED(maphist);
 
@@ -1673,13 +1676,13 @@
 
 	if (uobj == NULL) {
 		uobjpage = PGO_DONTCARE;
-		promote = true;		/* always need anon here */
+		flt->promote = true;		/* always need anon here */
 	} else {
 		KASSERT(uobjpage != PGO_DONTCARE);
-		promote = flt->cow_now && UVM_ET_ISCOPYONWRITE(ufi->entry);
+		flt->promote = flt->cow_now && UVM_ET_ISCOPYONWRITE(ufi->entry);
 	}
 	UVMHIST_LOG(maphist, "  case 2 fault: promote=%d, zfill=%d",
-	    promote, (uobj == NULL), 0,0);
+	    flt->promote, (uobj == NULL), 0,0);
 
 	/*
 	 * if uobjpage is not null then we do not need to do I/O to get the
@@ -1719,7 +1722,7 @@
 	KASSERT(uobj == NULL || !UVM_OBJ_IS_CLEAN(uobjpage->uobject) ||
 	    (uobjpage->flags & PG_CLEAN) != 0);
 
-	if (promote == false) {
+	if (flt->promote == false) {
 		error = uvm_fault_lower_direct(ufi, flt, uobj, uobjpage);
 	} else {
 		error = uvm_fault_lower_promote(ufi, flt, uobj, uobjpage);
@@ -2050,8 +2053,8 @@
 	 */
 
 	UVMHIST_LOG(maphist,
-	    "  MAPPING: case2: pm=0x%x, va=0x%x, pg=0x%x, promote=XXX",
-	    ufi->orig_map->pmap, ufi->orig_rvaddr, pg, 0);
+	    "  MAPPING: case2: pm=0x%x, va=0x%x, pg=0x%x, promote=%d",
+	    ufi->orig_map->pmap, ufi->orig_rvaddr, pg, flt->promote);
 	KASSERT((flt->access_type & VM_PROT_WRITE) == 0 ||
 		(pg->flags & PG_RDONLY) == 0);
 	if (pmap_enter(ufi->orig_map->pmap, ufi->orig_rvaddr, VM_PAGE_TO_PHYS(pg),

Reply via email to