Module Name:    src
Committed By:   uebayasi
Date:           Mon Feb  1 10:22:40 UTC 2010

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

Log Message:
uvm_fault: Clarify when to wire what.


To generate a diff of this commit:
cvs rdiff -u -r1.145 -r1.146 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.145 src/sys/uvm/uvm_fault.c:1.146
--- src/sys/uvm/uvm_fault.c:1.145	Mon Feb  1 09:18:41 2010
+++ src/sys/uvm/uvm_fault.c	Mon Feb  1 10:22:40 2010
@@ -1,4 +1,4 @@
-/*	$NetBSD: uvm_fault.c,v 1.145 2010/02/01 09:18:41 uebayasi Exp $	*/
+/*	$NetBSD: uvm_fault.c,v 1.146 2010/02/01 10:22:40 uebayasi Exp $	*/
 
 /*
  *
@@ -39,7 +39,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: uvm_fault.c,v 1.145 2010/02/01 09:18:41 uebayasi Exp $");
+__KERNEL_RCSID(0, "$NetBSD: uvm_fault.c,v 1.146 2010/02/01 10:22:40 uebayasi Exp $");
 
 #include "opt_uvmhist.h"
 
@@ -695,9 +695,9 @@
 struct uvm_faultctx {
 	vm_prot_t access_type;
 	vm_prot_t enter_prot;
-	bool wired;
+	bool wire_mapping;
 	bool narrow;
-	bool wire_fault;
+	bool wire_paging;
 	bool maxprot;
 	bool cow_now;
 	int npages;
@@ -731,7 +731,14 @@
 	struct uvm_faultinfo ufi;
 	struct uvm_faultctx flt = {
 		.access_type = access_type,
-		.wire_fault = (fault_flag & UVM_FAULT_WIRE) != 0,
+
+		/* don't look for neighborhood * pages on "wire" fault */
+		.narrow = (fault_flag & UVM_FAULT_WIRE) != 0,
+
+		/* "wire" fault causes wiring of both mapping and paging */
+		.wire_mapping = (fault_flag & UVM_FAULT_WIRE) != 0,
+		.wire_paging = (fault_flag & UVM_FAULT_WIRE) != 0,
+
 		.maxprot = (fault_flag & UVM_FAULT_MAXPROT) != 0,
 	};
 	struct vm_anon *anons_store[UVM_MAXRANGE], **anons;
@@ -751,11 +758,6 @@
 	ufi.orig_map = orig_map;
 	ufi.orig_rvaddr = trunc_page(vaddr);
 	ufi.orig_size = PAGE_SIZE;	/* can't get any smaller than this */
-	if (flt.wire_fault)
-		flt.narrow = true;	/* don't look for neighborhood
-					 * pages on wire */
-	else
-		flt.narrow = false;	/* normal fault */
 
 	error = ERESTART;
 	while (error == ERESTART) {
@@ -835,8 +837,10 @@
 	 */
 
 	flt->enter_prot = ufi->entry->protection;
-	flt->wired = VM_MAPENT_ISWIRED(ufi->entry) || flt->wire_fault;
-	if (flt->wired) {
+	if (VM_MAPENT_ISWIRED(ufi->entry))
+		flt->wire_mapping = true;
+
+	if (flt->wire_mapping) {
 		flt->access_type = flt->enter_prot; /* full access for wired */
 		flt->cow_now = (check_prot & VM_PROT_WRITE) != 0;
 	} else {
@@ -1252,7 +1256,7 @@
 		    VM_PAGE_TO_PHYS(curpg),
 		    readonly ?  flt->enter_prot & ~VM_PROT_WRITE :
 		    flt->enter_prot & MASK(ufi->entry),
-		    PMAP_CANFAIL | (flt->wired ? PMAP_WIRED : 0));
+		    PMAP_CANFAIL | (flt->wire_mapping ? PMAP_WIRED : 0));
 
 		/*
 		 * NOTE: page can't be PG_WANTED or PG_RELEASED because we've
@@ -1528,7 +1532,7 @@
 	UVMHIST_LOG(maphist, "  MAPPING: anon: pm=0x%x, va=0x%x, pg=0x%x",
 	    ufi->orig_map->pmap, ufi->orig_rvaddr, pg, 0);
 	if (pmap_enter(ufi->orig_map->pmap, ufi->orig_rvaddr, VM_PAGE_TO_PHYS(pg),
-	    flt->enter_prot, flt->access_type | PMAP_CANFAIL | (flt->wired ? PMAP_WIRED : 0))
+	    flt->enter_prot, flt->access_type | PMAP_CANFAIL | (flt->wire_mapping ? PMAP_WIRED : 0))
 	    != 0) {
 
 		/*
@@ -1559,7 +1563,7 @@
 	 */
 
 	mutex_enter(&uvm_pageqlock);
-	if (flt->wire_fault) {
+	if (flt->wire_paging) {
 		uvm_pagewire(pg);
 
 		/*
@@ -1929,7 +1933,7 @@
 		(pg->flags & PG_RDONLY) == 0);
 	if (pmap_enter(ufi->orig_map->pmap, ufi->orig_rvaddr, VM_PAGE_TO_PHYS(pg),
 	    pg->flags & PG_RDONLY ? flt->enter_prot & ~VM_PROT_WRITE : flt->enter_prot,
-	    flt->access_type | PMAP_CANFAIL | (flt->wired ? PMAP_WIRED : 0)) != 0) {
+	    flt->access_type | PMAP_CANFAIL | (flt->wire_mapping ? PMAP_WIRED : 0)) != 0) {
 
 		/*
 		 * No need to undo what we did; we can simply think of
@@ -1964,7 +1968,7 @@
 	}
 
 	mutex_enter(&uvm_pageqlock);
-	if (flt->wire_fault) {
+	if (flt->wire_paging) {
 		uvm_pagewire(pg);
 		if (pg->pqflags & PQ_AOBJ) {
 

Reply via email to