Module Name:    src
Committed By:   pooka
Date:           Mon Sep  6 20:10:20 UTC 2010

Modified Files:
        src/sys/rump/librump/rumpkern: Makefile.rumpkern rump.c vm.c

Log Message:
Use standard uvm aobj pager.  Most of the kernel aobj pager complexity
comes from swap handling, but that is included only with VMSWAP.


To generate a diff of this commit:
cvs rdiff -u -r1.96 -r1.97 src/sys/rump/librump/rumpkern/Makefile.rumpkern
cvs rdiff -u -r1.184 -r1.185 src/sys/rump/librump/rumpkern/rump.c
cvs rdiff -u -r1.87 -r1.88 src/sys/rump/librump/rumpkern/vm.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/rump/librump/rumpkern/Makefile.rumpkern
diff -u src/sys/rump/librump/rumpkern/Makefile.rumpkern:1.96 src/sys/rump/librump/rumpkern/Makefile.rumpkern:1.97
--- src/sys/rump/librump/rumpkern/Makefile.rumpkern:1.96	Wed Sep  1 19:37:58 2010
+++ src/sys/rump/librump/rumpkern/Makefile.rumpkern	Mon Sep  6 20:10:20 2010
@@ -1,4 +1,4 @@
-#	$NetBSD: Makefile.rumpkern,v 1.96 2010/09/01 19:37:58 pooka Exp $
+#	$NetBSD: Makefile.rumpkern,v 1.97 2010/09/06 20:10:20 pooka Exp $
 #
 
 .include "${RUMPTOP}/Makefile.rump"
@@ -95,7 +95,7 @@
 	syscalls.c
 
 # sys/uvm
-SRCS+=	uvm_readahead.c
+SRCS+=	uvm_aobj.c uvm_readahead.c
 
 # 4.4BSD secmodel.  selection is hardcoded for now
 SRCS+=	secmodel_suser.c

Index: src/sys/rump/librump/rumpkern/rump.c
diff -u src/sys/rump/librump/rumpkern/rump.c:1.184 src/sys/rump/librump/rumpkern/rump.c:1.185
--- src/sys/rump/librump/rumpkern/rump.c:1.184	Wed Sep  1 19:37:58 2010
+++ src/sys/rump/librump/rumpkern/rump.c	Mon Sep  6 20:10:20 2010
@@ -1,4 +1,4 @@
-/*	$NetBSD: rump.c,v 1.184 2010/09/01 19:37:58 pooka Exp $	*/
+/*	$NetBSD: rump.c,v 1.185 2010/09/06 20:10:20 pooka Exp $	*/
 
 /*
  * Copyright (c) 2007 Antti Kantee.  All Rights Reserved.
@@ -28,7 +28,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: rump.c,v 1.184 2010/09/01 19:37:58 pooka Exp $");
+__KERNEL_RCSID(0, "$NetBSD: rump.c,v 1.185 2010/09/06 20:10:20 pooka Exp $");
 
 #include <sys/systm.h>
 #define ELFSIZE ARCH_ELFSIZE
@@ -293,6 +293,7 @@
 	kmem_init();
 
 	uvm_ra_init();
+	uao_init();
 
 	mutex_obj_init();
 	callout_startup();

Index: src/sys/rump/librump/rumpkern/vm.c
diff -u src/sys/rump/librump/rumpkern/vm.c:1.87 src/sys/rump/librump/rumpkern/vm.c:1.88
--- src/sys/rump/librump/rumpkern/vm.c:1.87	Thu Jul 29 15:13:00 2010
+++ src/sys/rump/librump/rumpkern/vm.c	Mon Sep  6 20:10:20 2010
@@ -1,4 +1,4 @@
-/*	$NetBSD: vm.c,v 1.87 2010/07/29 15:13:00 hannken Exp $	*/
+/*	$NetBSD: vm.c,v 1.88 2010/09/06 20:10:20 pooka Exp $	*/
 
 /*
  * Copyright (c) 2007-2010 Antti Kantee.  All Rights Reserved.
@@ -30,9 +30,7 @@
  */
 
 /*
- * Virtual memory emulation routines.  Contents:
- *  + anon objects & pager
- *  + misc support routines
+ * Virtual memory emulation routines.
  */
 
 /*
@@ -43,7 +41,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: vm.c,v 1.87 2010/07/29 15:13:00 hannken Exp $");
+__KERNEL_RCSID(0, "$NetBSD: vm.c,v 1.88 2010/09/06 20:10:20 pooka Exp $");
 
 #include <sys/param.h>
 #include <sys/atomic.h>
@@ -60,21 +58,14 @@
 
 #include <uvm/uvm.h>
 #include <uvm/uvm_ddb.h>
+#include <uvm/uvm_pdpolicy.h>
 #include <uvm/uvm_prot.h>
 #include <uvm/uvm_readahead.h>
 
 #include "rump_private.h"
 
-static int ao_get(struct uvm_object *, voff_t, struct vm_page **,
-	int *, int, vm_prot_t, int, int);
-static int ao_put(struct uvm_object *, voff_t, voff_t, int);
-
-const struct uvm_pagerops aobj_pager = {
-	.pgo_get = ao_get,
-	.pgo_put = ao_put,
-};
-
 kmutex_t uvm_pageqlock;
+kmutex_t uvm_swap_data_lock;
 
 struct uvmexp uvmexp;
 struct uvm uvm;
@@ -149,88 +140,6 @@
 }
 
 /*
- * Anon object stuff
- */
-
-static int
-ao_get(struct uvm_object *uobj, voff_t off, struct vm_page **pgs,
-	int *npages, int centeridx, vm_prot_t access_type,
-	int advice, int flags)
-{
-	struct vm_page *pg;
-	int i;
-
-	if (centeridx)
-		panic("%s: centeridx != 0 not supported", __func__);
-
-	/* loop over pages */
-	off = trunc_page(off);
-	for (i = 0; i < *npages; i++) {
- retrylookup:
-		pg = uvm_pagelookup(uobj, off + (i << PAGE_SHIFT));
-		if (pg) {
-			if (pg->flags & PG_BUSY) {
-				pg->flags |= PG_WANTED;
-				UVM_UNLOCK_AND_WAIT(pg, &uobj->vmobjlock, 0,
-				    "aogetpg", 0);
-				goto retrylookup;
-			}
-			pg->flags |= PG_BUSY;
-			pgs[i] = pg;
-		} else {
-			pg = uvm_pagealloc(uobj,
-			    off + (i << PAGE_SHIFT), NULL, UVM_PGA_ZERO);
-			pgs[i] = pg;
-		}
-	}
-	mutex_exit(&uobj->vmobjlock);
-
-	return 0;
-
-}
-
-static int
-ao_put(struct uvm_object *uobj, voff_t start, voff_t stop, int flags)
-{
-	struct vm_page *pg;
-
-	/* we only free all pages for now */
-	if ((flags & PGO_FREE) == 0 || (flags & PGO_ALLPAGES) == 0) {
-		mutex_exit(&uobj->vmobjlock);
-		return 0;
-	}
-
-	while ((pg = TAILQ_FIRST(&uobj->memq)) != NULL)
-		uvm_pagefree(pg);
-	mutex_exit(&uobj->vmobjlock);
-
-	return 0;
-}
-
-struct uvm_object *
-uao_create(vsize_t size, int flags)
-{
-	struct uvm_object *uobj;
-
-	uobj = kmem_zalloc(sizeof(struct uvm_object), KM_SLEEP);
-	uobj->pgops = &aobj_pager;
-	TAILQ_INIT(&uobj->memq);
-	mutex_init(&uobj->vmobjlock, MUTEX_DEFAULT, IPL_NONE);
-
-	return uobj;
-}
-
-void
-uao_detach(struct uvm_object *uobj)
-{
-
-	mutex_enter(&uobj->vmobjlock);
-	ao_put(uobj, 0, 0, PGO_ALLPAGES | PGO_FREE);
-	mutex_destroy(&uobj->vmobjlock);
-	kmem_free(uobj, sizeof(*uobj));
-}
-
-/*
  * Misc routines
  */
 
@@ -260,6 +169,7 @@
 
 	mutex_init(&pagermtx, MUTEX_DEFAULT, 0);
 	mutex_init(&uvm_pageqlock, MUTEX_DEFAULT, 0);
+	mutex_init(&uvm_swap_data_lock, MUTEX_DEFAULT, 0);
 
 	mutex_init(&pdaemonmtx, MUTEX_DEFAULT, 0);
 	cv_init(&pdaemoncv, "pdaemon");
@@ -762,6 +672,13 @@
 	/* nada */
 }
 
+void
+uvmpdpol_anfree(struct vm_anon *an)
+{
+
+	/* nada */
+}
+
 /*
  * Routines related to the Page Baroness.
  */

Reply via email to