Module Name: src
Committed By: uebayasi
Date: Sun Jan 31 07:32:35 UTC 2010
Modified Files:
src/sys/uvm: uvm_fault.c
Log Message:
uvm_fault_internal: Put a goto label "Case1" as well as "Case2". Clarify
that if the faulting page is shadowed, we don't care the lower layer at all.
To generate a diff of this commit:
cvs rdiff -u -r1.132 -r1.133 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.132 src/sys/uvm/uvm_fault.c:1.133
--- src/sys/uvm/uvm_fault.c:1.132 Sun Jan 31 01:40:12 2010
+++ src/sys/uvm/uvm_fault.c Sun Jan 31 07:32:35 2010
@@ -1,4 +1,4 @@
-/* $NetBSD: uvm_fault.c,v 1.132 2010/01/31 01:40:12 uebayasi Exp $ */
+/* $NetBSD: uvm_fault.c,v 1.133 2010/01/31 07:32:35 uebayasi Exp $ */
/*
*
@@ -39,7 +39,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: uvm_fault.c,v 1.132 2010/01/31 01:40:12 uebayasi Exp $");
+__KERNEL_RCSID(0, "$NetBSD: uvm_fault.c,v 1.133 2010/01/31 07:32:35 uebayasi Exp $");
#include "opt_uvmhist.h"
@@ -1010,6 +1010,9 @@
* XXX case. --thorpej
*/
+ if (shadowed == true)
+ goto Case1;
+
/*
* if the desired page is not shadowed by the amap and we have a
* backing object, then we check to see if the backing object would
@@ -1018,7 +1021,7 @@
* providing a pgo_fault routine.
*/
- if (uobj && shadowed == false && uobj->pgops->pgo_fault != NULL) {
+ if (uobj && uobj->pgops->pgo_fault != NULL) {
mutex_enter(&uobj->vmobjlock);
/* locked: maps(read), amap (if there), uobj */
error = uobj->pgops->pgo_fault(&ufi, startva, pages, npages,
@@ -1042,7 +1045,7 @@
* (PGO_LOCKED).
*/
- if (uobj && shadowed == false) {
+ if (uobj) {
mutex_enter(&uobj->vmobjlock);
/* locked (!shadowed): maps(read), amap (if there), uobj */
/*
@@ -1145,16 +1148,11 @@
uobjpage = NULL;
}
- /* locked (shadowed): maps(read), amap */
- /* locked (!shadowed): maps(read), amap(if there),
- uobj(if !null), uobjpage(if !null) */
- if (shadowed) {
- KASSERT(mutex_owned(&amap->am_l));
- } else {
- KASSERT(amap == NULL || mutex_owned(&amap->am_l));
- KASSERT(uobj == NULL || mutex_owned(&uobj->vmobjlock));
- KASSERT(uobjpage == NULL || (uobjpage->flags & PG_BUSY) != 0);
- }
+ /* locked: maps(read), amap(if there), uobj(if !null), uobjpage(if !null) */
+ KASSERT(!shadowed);
+ KASSERT(amap == NULL || mutex_owned(&amap->am_l));
+ KASSERT(uobj == NULL || mutex_owned(&uobj->vmobjlock));
+ KASSERT(uobjpage == NULL || (uobjpage->flags & PG_BUSY) != 0);
/*
* note that at this point we are done with any front or back pages.
@@ -1175,10 +1173,11 @@
* redirect case 2: if we are not shadowed, go to case 2.
*/
- if (shadowed == false)
- goto Case2;
+ goto Case2;
+Case1:
/* locked: maps(read), amap */
+ KASSERT(mutex_owned(&amap->am_l));
/*
* handle case 1: fault on an anon in our amap