Sat Aug 27 09:11:53 2011 UTC ()
Add an optional pglist argument to uvm_obj_wirepages, to be
filled with the list of pages that were wired.


(christos)
diff -r1.121 -r1.122 src/sys/kern/sysv_shm.c
diff -r1.174 -r1.175 src/sys/uvm/uvm_extern.h
diff -r1.10 -r1.11 src/sys/uvm/uvm_object.c

cvs diff -r1.121 -r1.122 src/sys/kern/sysv_shm.c (expand / switch to context diff)
--- src/sys/kern/sysv_shm.c 2011/07/30 06:19:02 1.121
+++ src/sys/kern/sysv_shm.c 2011/08/27 09:11:52 1.122
@@ -1,4 +1,4 @@
-/*	$NetBSD: sysv_shm.c,v 1.121 2011/07/30 06:19:02 uebayasi Exp $	*/
+/*	$NetBSD: sysv_shm.c,v 1.122 2011/08/27 09:11:52 christos Exp $	*/
 
 /*-
  * Copyright (c) 1999, 2007 The NetBSD Foundation, Inc.
@@ -61,7 +61,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: sysv_shm.c,v 1.121 2011/07/30 06:19:02 uebayasi Exp $");
+__KERNEL_RCSID(0, "$NetBSD: sysv_shm.c,v 1.122 2011/08/27 09:11:52 christos Exp $");
 
 #define SYSVSHM
 
@@ -268,7 +268,7 @@
 		    (shmseg->shm_perm.mode & SHMSEG_WIRED) == 0) {
 			/* Wire the object and map, then tag it */
 			error = uvm_obj_wirepages(shmseg->_shm_internal,
-			    0, size);
+			    0, size, NULL);
 			if (error)
 				return EIO;
 			error = uvm_map_pageable(&p->p_vmspace->vm_map,
@@ -734,7 +734,7 @@
 	shmseg->_shm_internal = uao_create(size, 0);
 	if (lockmem) {
 		/* Wire the pages and tag it */
-		error = uvm_obj_wirepages(shmseg->_shm_internal, 0, size);
+		error = uvm_obj_wirepages(shmseg->_shm_internal, 0, size, NULL);
 		if (error) {
 			uao_detach(shmseg->_shm_internal);
 			mutex_enter(&shm_lock);

cvs diff -r1.174 -r1.175 src/sys/uvm/uvm_extern.h (expand / switch to context diff)
--- src/sys/uvm/uvm_extern.h 2011/06/16 09:21:03 1.174
+++ src/sys/uvm/uvm_extern.h 2011/08/27 09:11:53 1.175
@@ -1,4 +1,4 @@
-/*	$NetBSD: uvm_extern.h,v 1.174 2011/06/16 09:21:03 hannken Exp $	*/
+/*	$NetBSD: uvm_extern.h,v 1.175 2011/08/27 09:11:53 christos Exp $	*/
 
 /*
  * Copyright (c) 1997 Charles D. Cranor and Washington University.
@@ -706,7 +706,8 @@
 			    const struct uvm_pagerops *, bool, u_int);
 void			uvm_obj_setlock(struct uvm_object *, kmutex_t *);
 void			uvm_obj_destroy(struct uvm_object *, bool);
-int			uvm_obj_wirepages(struct uvm_object *, off_t, off_t);
+int			uvm_obj_wirepages(struct uvm_object *, off_t, off_t,
+			    struct pglist *);
 void			uvm_obj_unwirepages(struct uvm_object *, off_t, off_t);
 
 /* uvm_page.c */

cvs diff -r1.10 -r1.11 src/sys/uvm/uvm_object.c (expand / switch to context diff)
--- src/sys/uvm/uvm_object.c 2011/06/18 21:14:43 1.10
+++ src/sys/uvm/uvm_object.c 2011/08/27 09:11:53 1.11
@@ -1,4 +1,4 @@
-/*	$NetBSD: uvm_object.c,v 1.10 2011/06/18 21:14:43 rmind Exp $	*/
+/*	$NetBSD: uvm_object.c,v 1.11 2011/08/27 09:11:53 christos Exp $	*/
 
 /*
  * Copyright (c) 2006, 2010 The NetBSD Foundation, Inc.
@@ -37,7 +37,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: uvm_object.c,v 1.10 2011/06/18 21:14:43 rmind Exp $");
+__KERNEL_RCSID(0, "$NetBSD: uvm_object.c,v 1.11 2011/08/27 09:11:53 christos Exp $");
 
 #include "opt_ddb.h"
 
@@ -123,7 +123,8 @@
  * => caller must pass page-aligned start and end values
  */
 int
-uvm_obj_wirepages(struct uvm_object *uobj, off_t start, off_t end)
+uvm_obj_wirepages(struct uvm_object *uobj, off_t start, off_t end,
+    struct pglist *list)
 {
 	int i, npages, error;
 	struct vm_page *pgs[FETCH_PAGECOUNT], *pg = NULL;
@@ -177,6 +178,8 @@
 		mutex_enter(&uvm_pageqlock);
 		for (i = 0; i < npages; i++) {
 			uvm_pagewire(pgs[i]);
+			if (list != NULL)
+				TAILQ_INSERT_TAIL(list, pgs[i], pageq.queue);
 		}
 		mutex_exit(&uvm_pageqlock);