Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/sys Add an optional pglist argument to uvm_obj_wirepages, to be



details:   https://anonhg.NetBSD.org/src/rev/936bfda3814a
branches:  trunk
changeset: 768768:936bfda3814a
user:      christos <christos%NetBSD.org@localhost>
date:      Sat Aug 27 09:11:52 2011 +0000

description:
Add an optional pglist argument to uvm_obj_wirepages, to be
filled with the list of pages that were wired.

diffstat:

 sys/kern/sysv_shm.c  |  8 ++++----
 sys/uvm/uvm_extern.h |  5 +++--
 sys/uvm/uvm_object.c |  9 ++++++---
 3 files changed, 13 insertions(+), 9 deletions(-)

diffs (92 lines):

diff -r e13816923615 -r 936bfda3814a sys/kern/sysv_shm.c
--- a/sys/kern/sysv_shm.c       Sat Aug 27 09:06:58 2011 +0000
+++ b/sys/kern/sysv_shm.c       Sat Aug 27 09:11:52 2011 +0000
@@ -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);
diff -r e13816923615 -r 936bfda3814a sys/uvm/uvm_extern.h
--- a/sys/uvm/uvm_extern.h      Sat Aug 27 09:06:58 2011 +0000
+++ b/sys/uvm/uvm_extern.h      Sat Aug 27 09:11:52 2011 +0000
@@ -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 */
diff -r e13816923615 -r 936bfda3814a sys/uvm/uvm_object.c
--- a/sys/uvm/uvm_object.c      Sat Aug 27 09:06:58 2011 +0000
+++ b/sys/uvm/uvm_object.c      Sat Aug 27 09:11:52 2011 +0000
@@ -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);
 



Home | Main Index | Thread Index | Old Index