svn commit: r267072 - user/attilio/rm_vmobj_cache/sys/vm

Attilio Rao attilio at FreeBSD.org
Wed Jun 4 18:16:47 UTC 2014


Author: attilio
Date: Wed Jun  4 18:16:46 2014
New Revision: 267072
URL: http://svnweb.freebsd.org/changeset/base/267072

Log:
  Force VM_ALLOC_WIRED on pagefaults for unamanged objects.

Modified:
  user/attilio/rm_vmobj_cache/sys/vm/vm_fault.c

Modified: user/attilio/rm_vmobj_cache/sys/vm/vm_fault.c
==============================================================================
--- user/attilio/rm_vmobj_cache/sys/vm/vm_fault.c	Wed Jun  4 18:08:08 2014	(r267071)
+++ user/attilio/rm_vmobj_cache/sys/vm/vm_fault.c	Wed Jun  4 18:16:46 2014	(r267072)
@@ -426,6 +426,8 @@ RetryFault:;
 				if (fs.object->type != OBJT_VNODE &&
 				    fs.object->backing_object == NULL)
 					alloc_req |= VM_ALLOC_ZERO;
+				if ((fs.object->flags & OBJ_UNMANAGED) != 0)
+					alloc_req |= VM_ALLOC_WIRED;
 				fs.m = vm_page_alloc(fs.object, fs.pindex,
 				    alloc_req);
 			}
@@ -1440,7 +1442,7 @@ vm_fault_additional_pages(m, rbehind, ra
 	vm_object_t object;
 	vm_pindex_t pindex, startpindex, endpindex, tpindex;
 	vm_page_t rtm;
-	int cbehind, cahead;
+	int alloc_req, cbehind, cahead;
 
 	VM_OBJECT_ASSERT_WLOCKED(m->object);
 
@@ -1469,6 +1471,10 @@ vm_fault_additional_pages(m, rbehind, ra
 		rbehind = cbehind;
 	}
 
+	alloc_req = VM_ALLOC_NORMAL | VM_ALLOC_IFNOTCACHED;
+	if ((object->flags & OBJ_UNMANAGED) != 0)
+		alloc_req |= VM_ALLOC_WIRED;
+
 	/*
 	 * scan backward for the read behind pages -- in memory 
 	 */
@@ -1488,8 +1494,7 @@ vm_fault_additional_pages(m, rbehind, ra
 		for (i = 0, tpindex = pindex - 1; tpindex >= startpindex &&
 		    tpindex < pindex; i++, tpindex--) {
 
-			rtm = vm_page_alloc(object, tpindex, VM_ALLOC_NORMAL |
-			    VM_ALLOC_IFNOTCACHED);
+			rtm = vm_page_alloc(object, tpindex, alloc_req);
 			if (rtm == NULL) {
 				/*
 				 * Shift the allocated pages to the
@@ -1527,8 +1532,7 @@ vm_fault_additional_pages(m, rbehind, ra
 
 	for (; tpindex < endpindex; i++, tpindex++) {
 
-		rtm = vm_page_alloc(object, tpindex, VM_ALLOC_NORMAL |
-		    VM_ALLOC_IFNOTCACHED);
+		rtm = vm_page_alloc(object, tpindex, alloc_req);
 		if (rtm == NULL) {
 			break;
 		}


More information about the svn-src-user mailing list