Module Name:    src
Committed By:   ad
Date:           Tue Mar 17 18:31:39 UTC 2020

Modified Files:
        src/sys/miscfs/genfs: genfs_io.c
        src/sys/rump/librump/rumpkern: vm.c
        src/sys/ufs/lfs: lfs_pages.c
        src/sys/uvm: uvm_aobj.c uvm_bio.c uvm_fault.c uvm_loan.c uvm_page.c
            uvm_page.h
        src/tests/rump/kernspace: busypage.c

Log Message:
Tweak the March 14th change to make page waits interlocked by pg->interlock.
Remove unneeded changes and only deal with the PQ_WANTED flag, to exclude
possible bugs.


To generate a diff of this commit:
cvs rdiff -u -r1.93 -r1.94 src/sys/miscfs/genfs/genfs_io.c
cvs rdiff -u -r1.186 -r1.187 src/sys/rump/librump/rumpkern/vm.c
cvs rdiff -u -r1.24 -r1.25 src/sys/ufs/lfs/lfs_pages.c
cvs rdiff -u -r1.137 -r1.138 src/sys/uvm/uvm_aobj.c
cvs rdiff -u -r1.105 -r1.106 src/sys/uvm/uvm_bio.c
cvs rdiff -u -r1.218 -r1.219 src/sys/uvm/uvm_fault.c
cvs rdiff -u -r1.97 -r1.98 src/sys/uvm/uvm_loan.c
cvs rdiff -u -r1.233 -r1.234 src/sys/uvm/uvm_page.c
cvs rdiff -u -r1.101 -r1.102 src/sys/uvm/uvm_page.h
cvs rdiff -u -r1.7 -r1.8 src/tests/rump/kernspace/busypage.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/miscfs/genfs/genfs_io.c
diff -u src/sys/miscfs/genfs/genfs_io.c:1.93 src/sys/miscfs/genfs/genfs_io.c:1.94
--- src/sys/miscfs/genfs/genfs_io.c:1.93	Sat Mar 14 20:45:23 2020
+++ src/sys/miscfs/genfs/genfs_io.c	Tue Mar 17 18:31:38 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: genfs_io.c,v 1.93 2020/03/14 20:45:23 ad Exp $	*/
+/*	$NetBSD: genfs_io.c,v 1.94 2020/03/17 18:31:38 ad Exp $	*/
 
 /*
  * Copyright (c) 1982, 1986, 1989, 1993
@@ -31,7 +31,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: genfs_io.c,v 1.93 2020/03/14 20:45:23 ad Exp $");
+__KERNEL_RCSID(0, "$NetBSD: genfs_io.c,v 1.94 2020/03/17 18:31:38 ad Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -516,9 +516,9 @@ out:
 			}
 			uvm_pagelock(pg);
 			uvm_pageenqueue(pg);
-			uvm_pageunbusy(pg);
+			uvm_pagewakeup(pg);
 			uvm_pageunlock(pg);
-			pg->flags &= ~PG_FAKE;
+			pg->flags &= ~(PG_BUSY|PG_FAKE);
 			UVM_PAGE_OWN(pg, NULL);
 		} else if (memwrite && !overwrite &&
 		    uvm_pagegetdirty(pg) == UVM_PAGE_STATUS_CLEAN) {

Index: src/sys/rump/librump/rumpkern/vm.c
diff -u src/sys/rump/librump/rumpkern/vm.c:1.186 src/sys/rump/librump/rumpkern/vm.c:1.187
--- src/sys/rump/librump/rumpkern/vm.c:1.186	Sat Mar 14 20:23:51 2020
+++ src/sys/rump/librump/rumpkern/vm.c	Tue Mar 17 18:31:38 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: vm.c,v 1.186 2020/03/14 20:23:51 ad Exp $	*/
+/*	$NetBSD: vm.c,v 1.187 2020/03/17 18:31:38 ad Exp $	*/
 
 /*
  * Copyright (c) 2007-2011 Antti Kantee.  All Rights Reserved.
@@ -41,7 +41,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: vm.c,v 1.186 2020/03/14 20:23:51 ad Exp $");
+__KERNEL_RCSID(0, "$NetBSD: vm.c,v 1.187 2020/03/17 18:31:38 ad Exp $");
 
 #include <sys/param.h>
 #include <sys/atomic.h>
@@ -689,8 +689,9 @@ uvm_page_unbusy(struct vm_page **pgs, in
 		if (pg->flags & PG_RELEASED) {
 			uvm_pagefree(pg);
 		} else {
+			pg->flags &= ~PG_BUSY;
 			uvm_pagelock(pg);
-			uvm_pageunbusy(pg);
+			uvm_pagewakeup(pg);
 			uvm_pageunlock(pg);
 		}
 	}
@@ -710,17 +711,15 @@ uvm_pagewait(struct vm_page *pg, krwlock
 }
 
 void
-uvm_pageunbusy(struct vm_page *pg)
+uvm_pagewakeup(struct vm_page *pg)
 {
 
-	KASSERT((pg->flags & PG_BUSY) != 0);
 	KASSERT(mutex_owned(&pg->interlock));
 
 	if ((pg->pqflags & PQ_WANTED) != 0) {
 		pg->pqflags &= ~PQ_WANTED;
 		wakeup(pg);
 	}
-	pg->flags &= ~PG_BUSY;
 }
 
 void

Index: src/sys/ufs/lfs/lfs_pages.c
diff -u src/sys/ufs/lfs/lfs_pages.c:1.24 src/sys/ufs/lfs/lfs_pages.c:1.25
--- src/sys/ufs/lfs/lfs_pages.c:1.24	Sat Mar 14 20:45:23 2020
+++ src/sys/ufs/lfs/lfs_pages.c	Tue Mar 17 18:31:38 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: lfs_pages.c,v 1.24 2020/03/14 20:45:23 ad Exp $	*/
+/*	$NetBSD: lfs_pages.c,v 1.25 2020/03/17 18:31:38 ad Exp $	*/
 
 /*-
  * Copyright (c) 1999, 2000, 2001, 2002, 2003, 2019 The NetBSD Foundation, Inc.
@@ -60,7 +60,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: lfs_pages.c,v 1.24 2020/03/14 20:45:23 ad Exp $");
+__KERNEL_RCSID(0, "$NetBSD: lfs_pages.c,v 1.25 2020/03/17 18:31:38 ad Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_compat_netbsd.h"
@@ -348,8 +348,9 @@ check_dirty(struct lfs *fs, struct vnode
 					pg->flags |= PG_DELWRI;
 				}
 			}
+			pg->flags &= ~PG_BUSY;
 			uvm_pagelock(pg);
-			uvm_pageunbusy(pg);
+			uvm_pagewakeup(pg);
 			uvm_pageunlock(pg);
 			UVM_PAGE_OWN(pg, NULL);
 		}

Index: src/sys/uvm/uvm_aobj.c
diff -u src/sys/uvm/uvm_aobj.c:1.137 src/sys/uvm/uvm_aobj.c:1.138
--- src/sys/uvm/uvm_aobj.c:1.137	Sat Mar 14 20:23:51 2020
+++ src/sys/uvm/uvm_aobj.c	Tue Mar 17 18:31:39 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: uvm_aobj.c,v 1.137 2020/03/14 20:23:51 ad Exp $	*/
+/*	$NetBSD: uvm_aobj.c,v 1.138 2020/03/17 18:31:39 ad Exp $	*/
 
 /*
  * Copyright (c) 1998 Chuck Silvers, Charles D. Cranor and
@@ -38,7 +38,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: uvm_aobj.c,v 1.137 2020/03/14 20:23:51 ad Exp $");
+__KERNEL_RCSID(0, "$NetBSD: uvm_aobj.c,v 1.138 2020/03/17 18:31:39 ad Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_uvmhist.h"
@@ -1300,11 +1300,12 @@ uao_pagein_page(struct uvm_aobj *aobj, i
 	 */
 	uvm_pagelock(pg);
 	uvm_pageenqueue(pg);
-	uvm_pageunbusy(pg);
+	uvm_pagewakeup(pg);
 	uvm_pageunlock(pg);
 
-	pg->flags &= ~(PG_FAKE);
+	pg->flags &= ~(PG_BUSY|PG_FAKE);
 	uvm_pagemarkdirty(pg, UVM_PAGE_STATUS_DIRTY);
+	UVM_PAGE_OWN(pg, NULL);
 
 	return false;
 }

Index: src/sys/uvm/uvm_bio.c
diff -u src/sys/uvm/uvm_bio.c:1.105 src/sys/uvm/uvm_bio.c:1.106
--- src/sys/uvm/uvm_bio.c:1.105	Sat Mar 14 20:23:51 2020
+++ src/sys/uvm/uvm_bio.c	Tue Mar 17 18:31:39 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: uvm_bio.c,v 1.105 2020/03/14 20:23:51 ad Exp $	*/
+/*	$NetBSD: uvm_bio.c,v 1.106 2020/03/17 18:31:39 ad Exp $	*/
 
 /*
  * Copyright (c) 1998 Chuck Silvers.
@@ -34,7 +34,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: uvm_bio.c,v 1.105 2020/03/14 20:23:51 ad Exp $");
+__KERNEL_RCSID(0, "$NetBSD: uvm_bio.c,v 1.106 2020/03/17 18:31:39 ad Exp $");
 
 #include "opt_uvmhist.h"
 #include "opt_ubc.h"
@@ -283,8 +283,10 @@ ubc_fault_page(const struct uvm_faultinf
 
 	uvm_pagelock(pg);
 	uvm_pageactivate(pg);
-	uvm_pageunbusy(pg);
+	uvm_pagewakeup(pg);
 	uvm_pageunlock(pg);
+	pg->flags &= ~PG_BUSY;
+	UVM_PAGE_OWN(pg, NULL);
 
 	return error;
 }

Index: src/sys/uvm/uvm_fault.c
diff -u src/sys/uvm/uvm_fault.c:1.218 src/sys/uvm/uvm_fault.c:1.219
--- src/sys/uvm/uvm_fault.c:1.218	Sat Mar 14 20:23:51 2020
+++ src/sys/uvm/uvm_fault.c	Tue Mar 17 18:31:39 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: uvm_fault.c,v 1.218 2020/03/14 20:23:51 ad Exp $	*/
+/*	$NetBSD: uvm_fault.c,v 1.219 2020/03/17 18:31:39 ad Exp $	*/
 
 /*
  * Copyright (c) 1997 Charles D. Cranor and Washington University.
@@ -32,7 +32,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: uvm_fault.c,v 1.218 2020/03/14 20:23:51 ad Exp $");
+__KERNEL_RCSID(0, "$NetBSD: uvm_fault.c,v 1.219 2020/03/17 18:31:39 ad Exp $");
 
 #include "opt_uvmhist.h"
 
@@ -479,10 +479,11 @@ released:
 
 			uvm_pagelock(pg);
 			uvm_pageactivate(pg);
-			uvm_pageunbusy(pg);
+			uvm_pagewakeup(pg);
 			uvm_pageunlock(pg);
-			pg->flags &= ~PG_FAKE;
+			pg->flags &= ~(PG_BUSY|PG_FAKE);
 			uvm_pagemarkdirty(pg, UVM_PAGE_STATUS_UNKNOWN);
+			UVM_PAGE_OWN(pg, NULL);
 #else
 			panic("%s: we_own", __func__);
 #endif /* defined(VMSWAP) */
@@ -1851,7 +1852,7 @@ uvm_fault_lower_neighbor(
 	 * Since this page isn't the page that's actually faulting,
 	 * ignore pmap_enter() failures; it's not critical that we
 	 * enter these right now.
-	 * NOTE: page can't be PG_RELEASED because we've
+	 * NOTE: page can't be waited on or PG_RELEASED because we've
 	 * held the lock the whole time we've had the handle.
 	 */
 	KASSERT((pg->flags & PG_PAGEOUT) == 0);
@@ -1988,9 +1989,11 @@ uvm_fault_lower_io(
 		    "  wasn't able to relock after fault: retry",
 		    0,0,0,0);
 		if ((pg->flags & PG_RELEASED) == 0) {
+			pg->flags &= ~PG_BUSY;
 			uvm_pagelock(pg);
-			uvm_pageunbusy(pg);
+			uvm_pagewakeup(pg);
 			uvm_pageunlock(pg);
+			UVM_PAGE_OWN(pg, NULL);
 		} else {
 			cpu_count(CPU_COUNT_FLTPGRELE, 1);
 			uvm_pagefree(pg);
@@ -2091,8 +2094,10 @@ uvm_fault_lower_direct_loan(
 			 */
 
 			uvm_pagelock(uobjpage);
-			uvm_pageunbusy(uobjpage);
+			uvm_pagewakeup(uobjpage);
 			uvm_pageunlock(uobjpage);
+			uobjpage->flags &= ~PG_BUSY;
+			UVM_PAGE_OWN(uobjpage, NULL);
 
 			uvmfault_unlockall(ufi, amap, uobj);
 			UVMHIST_LOG(maphist,
@@ -2171,9 +2176,11 @@ uvm_fault_lower_promote(
 		 * since we still hold the object lock.
 		 */
 
+		uobjpage->flags &= ~PG_BUSY;
 		uvm_pagelock(uobjpage);
-		uvm_pageunbusy(uobjpage);
+		uvm_pagewakeup(uobjpage);
 		uvm_pageunlock(uobjpage);
+		UVM_PAGE_OWN(uobjpage, NULL);
 
 		UVMHIST_LOG(maphist,
 		    "  promote uobjpage %#jx to anon/page %#jx/%#jx",
@@ -2260,7 +2267,7 @@ uvm_fault_lower_enter(
 
 		uvm_pagelock(pg);
 		uvm_pageenqueue(pg);
-		uvm_pageunbusy(pg);
+		uvm_pagewakeup(pg);
 		uvm_pageunlock(pg);
 
 		/*
@@ -2268,7 +2275,8 @@ uvm_fault_lower_enter(
 		 * the object lock since the last time we checked.
 		 */
 		KASSERT((pg->flags & PG_RELEASED) == 0);
-		pg->flags &= ~PG_FAKE;
+		pg->flags &= ~(PG_BUSY|PG_FAKE);
+		UVM_PAGE_OWN(pg, NULL);
 
 		uvmfault_unlockall(ufi, amap, uobj);
 		if (!uvm_reclaimable()) {
@@ -2291,9 +2299,10 @@ uvm_fault_lower_enter(
 	 */
 	KASSERT((pg->flags & PG_RELEASED) == 0);
 	uvm_pagelock(pg);
-	uvm_pageunbusy(pg);
+	uvm_pagewakeup(pg);
 	uvm_pageunlock(pg);
-	pg->flags &= ~PG_FAKE;
+	pg->flags &= ~(PG_BUSY|PG_FAKE);
+	UVM_PAGE_OWN(pg, NULL);
 
 	pmap_update(ufi->orig_map->pmap);
 	uvmfault_unlockall(ufi, amap, uobj);

Index: src/sys/uvm/uvm_loan.c
diff -u src/sys/uvm/uvm_loan.c:1.97 src/sys/uvm/uvm_loan.c:1.98
--- src/sys/uvm/uvm_loan.c:1.97	Sat Mar 14 20:23:51 2020
+++ src/sys/uvm/uvm_loan.c	Tue Mar 17 18:31:39 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: uvm_loan.c,v 1.97 2020/03/14 20:23:51 ad Exp $	*/
+/*	$NetBSD: uvm_loan.c,v 1.98 2020/03/17 18:31:39 ad Exp $	*/
 
 /*
  * Copyright (c) 1997 Charles D. Cranor and Washington University.
@@ -32,7 +32,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: uvm_loan.c,v 1.97 2020/03/14 20:23:51 ad Exp $");
+__KERNEL_RCSID(0, "$NetBSD: uvm_loan.c,v 1.98 2020/03/17 18:31:39 ad Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -712,8 +712,10 @@ uvm_loanuobj(struct uvm_faultinfo *ufi, 
 			}
 			uvm_pagelock(pg);
 			uvm_pageactivate(pg);
-			uvm_pageunbusy(pg);
+			uvm_pagewakeup(pg);
 			uvm_pageunlock(pg);
+			pg->flags &= ~PG_BUSY;
+			UVM_PAGE_OWN(pg, NULL);
 			rw_exit(uobj->vmobjlock);
 			return (0);
 		}
@@ -751,8 +753,10 @@ uvm_loanuobj(struct uvm_faultinfo *ufi, 
 		anon = pg->uanon;
 		anon->an_ref++;
 		uvm_pagelock(pg);
-		uvm_pageunbusy(pg);
+		uvm_pagewakeup(pg);
 		uvm_pageunlock(pg);
+		pg->flags &= ~PG_BUSY;
+		UVM_PAGE_OWN(pg, NULL);
 		rw_exit(uobj->vmobjlock);
 		**output = anon;
 		(*output)++;
@@ -781,8 +785,10 @@ uvm_loanuobj(struct uvm_faultinfo *ufi, 
 	anon->an_page = pg;
 	anon->an_lock = /* TODO: share amap lock */
 	uvm_pageactivate(pg);
-	uvm_pageunbusy(pg);
+	uvm_pagewakeup(pg);
 	uvm_pageunlock(pg);
+	pg->flags &= ~PG_BUSY;
+	UVM_PAGE_OWN(pg, NULL);
 	rw_exit(uobj->vmobjlock);
 	rw_exit(&anon->an_lock);
 	**output = anon;
@@ -795,8 +801,10 @@ fail:
 	 * unlock everything and bail out.
 	 */
 	uvm_pagelock(pg);
-	uvm_pageunbusy(pg);
+	uvm_pagewakeup(pg);
 	uvm_pageunlock(pg);
+	pg->flags &= ~PG_BUSY;
+	UVM_PAGE_OWN(pg, NULL);
 	uvmfault_unlockall(ufi, amap, uobj, NULL);
 	if (anon) {
 		anon->an_ref--;
@@ -851,12 +859,13 @@ again:
 		}
 
 		/* got a zero'd page. */
-		pg->flags &= ~PG_FAKE;
+		pg->flags &= ~(PG_BUSY|PG_FAKE);
 		pg->flags |= PG_RDONLY;
 		uvm_pagelock(pg);
 		uvm_pageactivate(pg);
-		uvm_pageunbusy(pg);
+		uvm_pagewakeup(pg);
 		uvm_pageunlock(pg);
+		UVM_PAGE_OWN(pg, NULL);
 	}
 
 	if ((flags & UVM_LOAN_TOANON) == 0) {	/* loaning to kernel-page */
@@ -1122,6 +1131,8 @@ uvm_loanbreak(struct vm_page *uobjpage)
 	KASSERT(uvm_pagegetdirty(pg) == UVM_PAGE_STATUS_DIRTY);
 	pmap_page_protect(uobjpage, VM_PROT_NONE);
 	/* uobj still locked */
+	uobjpage->flags &= ~PG_BUSY;
+	UVM_PAGE_OWN(uobjpage, NULL);
 
 	/*
 	 * if the page is no longer referenced by
@@ -1130,7 +1141,7 @@ uvm_loanbreak(struct vm_page *uobjpage)
 	 */
 
 	uvm_pagelock2(uobjpage, pg);
-	uvm_pageunbusy(uobjpage);
+	uvm_pagewakeup(uobjpage);
 	if (uobjpage->uanon == NULL)
 		uvm_pagedequeue(uobjpage);
 

Index: src/sys/uvm/uvm_page.c
diff -u src/sys/uvm/uvm_page.c:1.233 src/sys/uvm/uvm_page.c:1.234
--- src/sys/uvm/uvm_page.c:1.233	Sun Mar 15 11:17:22 2020
+++ src/sys/uvm/uvm_page.c	Tue Mar 17 18:31:39 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: uvm_page.c,v 1.233 2020/03/15 11:17:22 rin Exp $	*/
+/*	$NetBSD: uvm_page.c,v 1.234 2020/03/17 18:31:39 ad Exp $	*/
 
 /*-
  * Copyright (c) 2019, 2020 The NetBSD Foundation, Inc.
@@ -95,7 +95,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: uvm_page.c,v 1.233 2020/03/15 11:17:22 rin Exp $");
+__KERNEL_RCSID(0, "$NetBSD: uvm_page.c,v 1.234 2020/03/17 18:31:39 ad Exp $");
 
 #include "opt_ddb.h"
 #include "opt_uvm.h"
@@ -1708,10 +1708,14 @@ uvm_page_unbusy(struct vm_page **pgs, in
 			pg->flags &= ~PG_RELEASED;
 			uvm_pagefree(pg);
 		} else {
+			UVMHIST_LOG(ubchist, "unbusying pg %#jx",
+			    (uintptr_t)pg, 0, 0, 0);
 			KASSERT((pg->flags & PG_FAKE) == 0);
+			pg->flags &= ~PG_BUSY;
 			uvm_pagelock(pg);
-			uvm_pageunbusy(pg);
+			uvm_pagewakeup(pg);
 			uvm_pageunlock(pg);
+			UVM_PAGE_OWN(pg, NULL);
 		}
 	}
 }
@@ -1733,36 +1737,30 @@ uvm_pagewait(struct vm_page *pg, krwlock
 	KASSERT(uvm_page_owner_locked_p(pg, false));
 
 	mutex_enter(&pg->interlock);
-	pg->pqflags |= PQ_WANTED;
 	rw_exit(lock);
+	pg->pqflags |= PQ_WANTED;
 	UVM_UNLOCK_AND_WAIT(pg, &pg->interlock, false, wmesg, 0);
 }
 
 /*
- * uvm_pageunbusy: unbusy a single page
+ * uvm_pagewakeup: wake anyone waiting on a page
  *
- * => page must be known PG_BUSY
- * => object must be write locked
  * => page interlock must be held
  */
 
 void
-uvm_pageunbusy(struct vm_page *pg)
+uvm_pagewakeup(struct vm_page *pg)
 {
-	UVMHIST_FUNC("uvm_pageunbusy"); UVMHIST_CALLED(ubchist);
+	UVMHIST_FUNC("uvm_pagewakeup"); UVMHIST_CALLED(ubchist);
 
-	KASSERT((pg->flags & PG_BUSY) != 0);
-	KASSERT(uvm_page_owner_locked_p(pg, true));
 	KASSERT(mutex_owned(&pg->interlock));
 
-	UVMHIST_LOG(ubchist, "unbusying pg %#jx", (uintptr_t)pg, 0, 0, 0);
+	UVMHIST_LOG(ubchist, "waking pg %#jx", (uintptr_t)pg, 0, 0, 0);
 
 	if ((pg->pqflags & PQ_WANTED) != 0) {
 		wakeup(pg);
 		pg->pqflags &= ~PQ_WANTED;
 	}
-	pg->flags &= ~PG_BUSY;
-	UVM_PAGE_OWN(pg, NULL);
 }
 
 #if defined(UVM_PAGE_TRKOWN)

Index: src/sys/uvm/uvm_page.h
diff -u src/sys/uvm/uvm_page.h:1.101 src/sys/uvm/uvm_page.h:1.102
--- src/sys/uvm/uvm_page.h:1.101	Mon Mar 16 08:03:58 2020
+++ src/sys/uvm/uvm_page.h	Tue Mar 17 18:31:39 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: uvm_page.h,v 1.101 2020/03/16 08:03:58 rin Exp $	*/
+/*	$NetBSD: uvm_page.h,v 1.102 2020/03/17 18:31:39 ad Exp $	*/
 
 /*
  * Copyright (c) 1997 Charles D. Cranor and Washington University.
@@ -375,7 +375,7 @@ void uvm_pagemarkdirty(struct vm_page *,
 bool uvm_pagecheckdirty(struct vm_page *, bool);
 bool uvm_pagereadonly_p(struct vm_page *);
 bool uvm_page_locked_p(struct vm_page *);
-void uvm_pageunbusy(struct vm_page *);
+void uvm_pagewakeup(struct vm_page *);
 void uvm_pagewait(struct vm_page *, krwlock_t *, const char *);
 
 int uvm_page_lookup_freelist(struct vm_page *);

Index: src/tests/rump/kernspace/busypage.c
diff -u src/tests/rump/kernspace/busypage.c:1.7 src/tests/rump/kernspace/busypage.c:1.8
--- src/tests/rump/kernspace/busypage.c:1.7	Sat Mar 14 20:25:46 2020
+++ src/tests/rump/kernspace/busypage.c	Tue Mar 17 18:31:39 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: busypage.c,v 1.7 2020/03/14 20:25:46 ad Exp $	*/
+/*	$NetBSD: busypage.c,v 1.8 2020/03/17 18:31:39 ad Exp $	*/
 
 /*-
  * Copyright (c) 2010 The NetBSD Foundation, Inc.
@@ -29,7 +29,7 @@
 
 #include <sys/cdefs.h>
 #if !defined(lint)
-__RCSID("$NetBSD: busypage.c,v 1.7 2020/03/14 20:25:46 ad Exp $");
+__RCSID("$NetBSD: busypage.c,v 1.8 2020/03/17 18:31:39 ad Exp $");
 #endif /* !lint */
 
 #include <sys/param.h>
@@ -91,9 +91,7 @@ rumptest_busypage()
 	mutex_exit(&testpg->interlock);
 
 	rw_enter(uobj->vmobjlock, RW_WRITER);
-	mutex_enter(&testpg->interlock);
-	uvm_pageunbusy(testpg);
-	mutex_exit(&testpg->interlock);
+	uvm_page_unbusy(&testpg, 1);
 	rw_exit(uobj->vmobjlock);
 
 	rv = kthread_join(newl);

Reply via email to