Module Name: src Committed By: christos Date: Sat Aug 27 09:11:53 UTC 2011
Modified Files: src/sys/kern: sysv_shm.c src/sys/uvm: uvm_extern.h uvm_object.c Log Message: Add an optional pglist argument to uvm_obj_wirepages, to be filled with the list of pages that were wired. To generate a diff of this commit: cvs rdiff -u -r1.121 -r1.122 src/sys/kern/sysv_shm.c cvs rdiff -u -r1.174 -r1.175 src/sys/uvm/uvm_extern.h cvs rdiff -u -r1.10 -r1.11 src/sys/uvm/uvm_object.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/kern/sysv_shm.c diff -u src/sys/kern/sysv_shm.c:1.121 src/sys/kern/sysv_shm.c:1.122 --- src/sys/kern/sysv_shm.c:1.121 Sat Jul 30 02:19:02 2011 +++ src/sys/kern/sysv_shm.c Sat Aug 27 05:11:52 2011 @@ -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); Index: src/sys/uvm/uvm_extern.h diff -u src/sys/uvm/uvm_extern.h:1.174 src/sys/uvm/uvm_extern.h:1.175 --- src/sys/uvm/uvm_extern.h:1.174 Thu Jun 16 05:21:03 2011 +++ src/sys/uvm/uvm_extern.h Sat Aug 27 05:11:53 2011 @@ -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 */ Index: src/sys/uvm/uvm_object.c diff -u src/sys/uvm/uvm_object.c:1.10 src/sys/uvm/uvm_object.c:1.11 --- src/sys/uvm/uvm_object.c:1.10 Sat Jun 18 17:14:43 2011 +++ src/sys/uvm/uvm_object.c Sat Aug 27 05:11:53 2011 @@ -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);