Module Name:    src
Committed By:   uebayasi
Date:           Wed Feb 24 04:32:58 UTC 2010

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

Log Message:
Slightly clean up uvm_fault() code path after pmap_enter().  Now tasks
needed for page cache are concentrated in own functions (uvm_fault_*_done()).


To generate a diff of this commit:
cvs rdiff -u -r1.168 -r1.169 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.168 src/sys/uvm/uvm_fault.c:1.169
--- src/sys/uvm/uvm_fault.c:1.168	Wed Feb 24 04:20:45 2010
+++ src/sys/uvm/uvm_fault.c	Wed Feb 24 04:32:58 2010
@@ -1,4 +1,4 @@
-/*	$NetBSD: uvm_fault.c,v 1.168 2010/02/24 04:20:45 uebayasi Exp $	*/
+/*	$NetBSD: uvm_fault.c,v 1.169 2010/02/24 04:32:58 uebayasi Exp $	*/
 
 /*
  *
@@ -39,7 +39,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: uvm_fault.c,v 1.168 2010/02/24 04:20:45 uebayasi Exp $");
+__KERNEL_RCSID(0, "$NetBSD: uvm_fault.c,v 1.169 2010/02/24 04:32:58 uebayasi Exp $");
 
 #include "opt_uvmhist.h"
 
@@ -733,7 +733,7 @@
 			    struct uvm_faultinfo *, struct uvm_faultctx *,
 			    struct uvm_object *, struct vm_anon *,
 			    struct vm_page *, struct vm_anon *);
-static inline int	uvm_fault_upper_done(
+static inline void	uvm_fault_upper_done(
 			    struct uvm_faultinfo *, struct uvm_faultctx *,
 			    struct uvm_object *, struct vm_anon *,
 			    struct vm_page *, struct vm_anon *);
@@ -768,7 +768,7 @@
 			    struct uvm_object *,
 			    struct vm_anon *, struct vm_page *,
 			    struct vm_page *);
-static inline int	uvm_fault_lower_done(
+static inline void	uvm_fault_lower_done(
 			    struct uvm_faultinfo *, struct uvm_faultctx *,
 			    struct uvm_object *,
 			    struct vm_anon *, struct vm_page *);
@@ -1600,16 +1600,25 @@
 		return ERESTART;
 	}
 
-	return uvm_fault_upper_done(ufi, flt, uobj, anon, pg, oanon);
+	uvm_fault_upper_done(ufi, flt, uobj, anon, pg, oanon);
+
+	/*
+	 * done case 1!  finish up by unlocking everything and returning success
+	 */
+
+	if (anon != oanon)
+		mutex_exit(&anon->an_lock);
+	uvmfault_unlockall(ufi, amap, uobj, oanon);
+	pmap_update(ufi->orig_map->pmap);
+	return 0;
 }
 
-static int
+static void
 uvm_fault_upper_done(
 	struct uvm_faultinfo *ufi, struct uvm_faultctx *flt,
 	struct uvm_object *uobj, struct vm_anon *anon,
 	struct vm_page *pg, struct vm_anon *oanon)
 {
-	struct vm_amap * const amap = ufi->entry->aref.ar_amap;
 
 	/*
 	 * ... update the page queues.
@@ -1632,16 +1641,6 @@
 		uvm_pageactivate(pg);
 	}
 	mutex_exit(&uvm_pageqlock);
-
-	/*
-	 * done case 1!  finish up by unlocking everything and returning success
-	 */
-
-	if (anon != oanon)
-		mutex_exit(&anon->an_lock);
-	uvmfault_unlockall(ufi, amap, uobj, oanon);
-	pmap_update(ufi->orig_map->pmap);
-	return 0;
 }
 
 static int
@@ -2093,15 +2092,19 @@
 		return ERESTART;
 	}
 
-	return uvm_fault_lower_done(ufi, flt, uobj, anon, pg);
+	uvm_fault_lower_done(ufi, flt, uobj, anon, pg);
+
+	uvmfault_unlockall(ufi, amap, uobj, anon);
+	pmap_update(ufi->orig_map->pmap);
+	UVMHIST_LOG(maphist, "<- done (SUCCESS!)",0,0,0,0);
+	return 0;
 }
 
-int
+void
 uvm_fault_lower_done(
 	struct uvm_faultinfo *ufi, struct uvm_faultctx *flt,
 	struct uvm_object *uobj, struct vm_anon *anon, struct vm_page *pg)
 {
-	struct vm_amap * const amap = ufi->entry->aref.ar_amap;
 	UVMHIST_FUNC("uvm_fault_lower_done"); UVMHIST_CALLED(maphist);
 
 	mutex_enter(&uvm_pageqlock);
@@ -2135,10 +2138,6 @@
 
 	pg->flags &= ~(PG_BUSY|PG_FAKE|PG_WANTED);
 	UVM_PAGE_OWN(pg, NULL);
-	uvmfault_unlockall(ufi, amap, uobj, anon);
-	pmap_update(ufi->orig_map->pmap);
-	UVMHIST_LOG(maphist, "<- done (SUCCESS!)",0,0,0,0);
-	return 0;
 }
 
 

Reply via email to