Module Name:    src
Committed By:   ad
Date:           Sun Dec  1 14:40:31 UTC 2019

Modified Files:
        src/sys/uvm: uvm.h uvm_anon.c uvm_aobj.c uvm_km.c uvm_loan.c
            uvm_pager.c uvm_pdaemon.c uvm_swap.c

Log Message:
- Adjust uvmexp.swpgonly with atomics, and make uvm_swap_data_lock static.
- A bit more __cacheline_aligned on mutexes.


To generate a diff of this commit:
cvs rdiff -u -r1.68 -r1.69 src/sys/uvm/uvm.h
cvs rdiff -u -r1.64 -r1.65 src/sys/uvm/uvm_anon.c
cvs rdiff -u -r1.128 -r1.129 src/sys/uvm/uvm_aobj.c
cvs rdiff -u -r1.147 -r1.148 src/sys/uvm/uvm_km.c
cvs rdiff -u -r1.87 -r1.88 src/sys/uvm/uvm_loan.c
cvs rdiff -u -r1.111 -r1.112 src/sys/uvm/uvm_pager.c \
    src/sys/uvm/uvm_pdaemon.c
cvs rdiff -u -r1.181 -r1.182 src/sys/uvm/uvm_swap.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/uvm/uvm.h
diff -u src/sys/uvm/uvm.h:1.68 src/sys/uvm/uvm.h:1.69
--- src/sys/uvm/uvm.h:1.68	Mon Jan  2 20:08:32 2017
+++ src/sys/uvm/uvm.h	Sun Dec  1 14:40:31 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: uvm.h,v 1.68 2017/01/02 20:08:32 cherry Exp $	*/
+/*	$NetBSD: uvm.h,v 1.69 2019/12/01 14:40:31 ad Exp $	*/
 
 /*
  * Copyright (c) 1997 Charles D. Cranor and Washington University.
@@ -126,7 +126,6 @@ extern struct uvm_object *uvm_kernel_obj
 extern kmutex_t uvm_pageqlock;		/* lock for active/inactive page q */
 extern kmutex_t uvm_fpageqlock;		/* lock for free page q */
 extern kmutex_t uvm_kentry_lock;
-extern kmutex_t uvm_swap_data_lock;
 
 #endif /* _KERNEL */
 

Index: src/sys/uvm/uvm_anon.c
diff -u src/sys/uvm/uvm_anon.c:1.64 src/sys/uvm/uvm_anon.c:1.65
--- src/sys/uvm/uvm_anon.c:1.64	Sat Oct 28 00:37:13 2017
+++ src/sys/uvm/uvm_anon.c	Sun Dec  1 14:40:31 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: uvm_anon.c,v 1.64 2017/10/28 00:37:13 pgoyette Exp $	*/
+/*	$NetBSD: uvm_anon.c,v 1.65 2019/12/01 14:40:31 ad Exp $	*/
 
 /*
  * Copyright (c) 1997 Charles D. Cranor and Washington University.
@@ -30,7 +30,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: uvm_anon.c,v 1.64 2017/10/28 00:37:13 pgoyette Exp $");
+__KERNEL_RCSID(0, "$NetBSD: uvm_anon.c,v 1.65 2019/12/01 14:40:31 ad Exp $");
 
 #include "opt_uvmhist.h"
 
@@ -172,10 +172,8 @@ uvm_anon_dispose(struct vm_anon *anon)
 #if defined(VMSWAP)
 	if (pg == NULL && anon->an_swslot > 0) {
 		/* This page is no longer only in swap. */
-		mutex_enter(&uvm_swap_data_lock);
 		KASSERT(uvmexp.swpgonly > 0);
-		uvmexp.swpgonly--;
-		mutex_exit(&uvm_swap_data_lock);
+		atomic_dec_uint(&uvmexp.swpgonly);
 	}
 #endif
 

Index: src/sys/uvm/uvm_aobj.c
diff -u src/sys/uvm/uvm_aobj.c:1.128 src/sys/uvm/uvm_aobj.c:1.129
--- src/sys/uvm/uvm_aobj.c:1.128	Sun Jul 28 05:28:53 2019
+++ src/sys/uvm/uvm_aobj.c	Sun Dec  1 14:40:31 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: uvm_aobj.c,v 1.128 2019/07/28 05:28:53 msaitoh Exp $	*/
+/*	$NetBSD: uvm_aobj.c,v 1.129 2019/12/01 14:40:31 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.128 2019/07/28 05:28:53 msaitoh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: uvm_aobj.c,v 1.129 2019/12/01 14:40:31 ad Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_uvmhist.h"
@@ -1491,10 +1491,8 @@ uao_dropswap_range(struct uvm_object *uo
 	 */
 
 	if (swpgonlydelta > 0) {
-		mutex_enter(&uvm_swap_data_lock);
 		KASSERT(uvmexp.swpgonly >= swpgonlydelta);
-		uvmexp.swpgonly -= swpgonlydelta;
-		mutex_exit(&uvm_swap_data_lock);
+		atomic_add_int(&uvmexp.swpgonly, -swpgonlydelta);
 	}
 }
 

Index: src/sys/uvm/uvm_km.c
diff -u src/sys/uvm/uvm_km.c:1.147 src/sys/uvm/uvm_km.c:1.148
--- src/sys/uvm/uvm_km.c:1.147	Thu Nov 14 16:23:53 2019
+++ src/sys/uvm/uvm_km.c	Sun Dec  1 14:40:31 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: uvm_km.c,v 1.147 2019/11/14 16:23:53 maxv Exp $	*/
+/*	$NetBSD: uvm_km.c,v 1.148 2019/12/01 14:40:31 ad Exp $	*/
 
 /*
  * Copyright (c) 1997 Charles D. Cranor and Washington University.
@@ -152,7 +152,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: uvm_km.c,v 1.147 2019/11/14 16:23:53 maxv Exp $");
+__KERNEL_RCSID(0, "$NetBSD: uvm_km.c,v 1.148 2019/12/01 14:40:31 ad Exp $");
 
 #include "opt_uvmhist.h"
 
@@ -481,10 +481,7 @@ uvm_km_pgremove(vaddr_t startva, vaddr_t
 	mutex_exit(uobj->vmobjlock);
 
 	if (swpgonlydelta > 0) {
-		mutex_enter(&uvm_swap_data_lock);
-		KASSERT(uvmexp.swpgonly >= swpgonlydelta);
-		uvmexp.swpgonly -= swpgonlydelta;
-		mutex_exit(&uvm_swap_data_lock);
+		atomic_add_int(&uvmexp.swpgonly, -swpgonlydelta);
 	}
 }
 

Index: src/sys/uvm/uvm_loan.c
diff -u src/sys/uvm/uvm_loan.c:1.87 src/sys/uvm/uvm_loan.c:1.88
--- src/sys/uvm/uvm_loan.c:1.87	Fri May 25 20:11:03 2018
+++ src/sys/uvm/uvm_loan.c	Sun Dec  1 14:40:31 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: uvm_loan.c,v 1.87 2018/05/25 20:11:03 jdolecek Exp $	*/
+/*	$NetBSD: uvm_loan.c,v 1.88 2019/12/01 14:40:31 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.87 2018/05/25 20:11:03 jdolecek Exp $");
+__KERNEL_RCSID(0, "$NetBSD: uvm_loan.c,v 1.88 2019/12/01 14:40:31 ad Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -837,7 +837,7 @@ fail:
  */
 
 static struct uvm_object uvm_loanzero_object;
-static kmutex_t uvm_loanzero_lock;
+static kmutex_t uvm_loanzero_lock __cacheline_aligned;
 
 static int
 uvm_loanzero(struct uvm_faultinfo *ufi, void ***output, int flags)

Index: src/sys/uvm/uvm_pager.c
diff -u src/sys/uvm/uvm_pager.c:1.111 src/sys/uvm/uvm_pager.c:1.112
--- src/sys/uvm/uvm_pager.c:1.111	Sat Oct 28 00:37:13 2017
+++ src/sys/uvm/uvm_pager.c	Sun Dec  1 14:40:31 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: uvm_pager.c,v 1.111 2017/10/28 00:37:13 pgoyette Exp $	*/
+/*	$NetBSD: uvm_pager.c,v 1.112 2019/12/01 14:40:31 ad Exp $	*/
 
 /*
  * Copyright (c) 1997 Charles D. Cranor and Washington University.
@@ -32,7 +32,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: uvm_pager.c,v 1.111 2017/10/28 00:37:13 pgoyette Exp $");
+__KERNEL_RCSID(0, "$NetBSD: uvm_pager.c,v 1.112 2019/12/01 14:40:31 ad Exp $");
 
 #include "opt_uvmhist.h"
 #include "opt_readahead.h"
@@ -77,7 +77,7 @@ const struct uvm_pagerops * const uvmpag
  */
 
 struct vm_map *pager_map;		/* XXX */
-kmutex_t pager_map_wanted_lock;
+kmutex_t pager_map_wanted_lock __cacheline_aligned;
 bool pager_map_wanted;	/* locked by pager map */
 static vaddr_t emergva;
 static int emerg_ncolors;
@@ -467,12 +467,10 @@ uvm_aio_aiodone_pages(struct vm_page **p
 		KASSERT(write);
 
 		/* these pages are now only in swap. */
-		mutex_enter(&uvm_swap_data_lock);
 		if (error != ENOMEM) {
 			KASSERT(uvmexp.swpgonly + npages <= uvmexp.swpginuse);
-			uvmexp.swpgonly += npages;
+			atomic_add_int(&uvmexp.swpgonly, npages);
 		}
-		mutex_exit(&uvm_swap_data_lock);
 		if (error) {
 			if (error != ENOMEM)
 				uvm_swap_markbad(swslot, npages);
Index: src/sys/uvm/uvm_pdaemon.c
diff -u src/sys/uvm/uvm_pdaemon.c:1.111 src/sys/uvm/uvm_pdaemon.c:1.112
--- src/sys/uvm/uvm_pdaemon.c:1.111	Tue Oct  1 17:40:22 2019
+++ src/sys/uvm/uvm_pdaemon.c	Sun Dec  1 14:40:31 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: uvm_pdaemon.c,v 1.111 2019/10/01 17:40:22 chs Exp $	*/
+/*	$NetBSD: uvm_pdaemon.c,v 1.112 2019/12/01 14:40:31 ad Exp $	*/
 
 /*
  * Copyright (c) 1997 Charles D. Cranor and Washington University.
@@ -66,7 +66,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: uvm_pdaemon.c,v 1.111 2019/10/01 17:40:22 chs Exp $");
+__KERNEL_RCSID(0, "$NetBSD: uvm_pdaemon.c,v 1.112 2019/12/01 14:40:31 ad Exp $");
 
 #include "opt_uvmhist.h"
 #include "opt_readahead.h"
@@ -825,15 +825,12 @@ uvmpd_scan_queue(void)
 			} else {
 				slot = uao_find_swslot(uobj, pageidx);
 			}
-			mutex_exit(slock);
-
 			if (slot > 0) {
 				/* this page is now only in swap. */
-				mutex_enter(&uvm_swap_data_lock);
 				KASSERT(uvmexp.swpgonly < uvmexp.swpginuse);
-				uvmexp.swpgonly++;
-				mutex_exit(&uvm_swap_data_lock);
+				atomic_inc_uint(&uvmexp.swpgonly);
 			}
+			mutex_exit(slock);
 			continue;
 		}
 

Index: src/sys/uvm/uvm_swap.c
diff -u src/sys/uvm/uvm_swap.c:1.181 src/sys/uvm/uvm_swap.c:1.182
--- src/sys/uvm/uvm_swap.c:1.181	Sun Oct  6 05:48:00 2019
+++ src/sys/uvm/uvm_swap.c	Sun Dec  1 14:40:31 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: uvm_swap.c,v 1.181 2019/10/06 05:48:00 mlelstv Exp $	*/
+/*	$NetBSD: uvm_swap.c,v 1.182 2019/12/01 14:40:31 ad Exp $	*/
 
 /*
  * Copyright (c) 1995, 1996, 1997, 2009 Matthew R. Green
@@ -30,7 +30,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: uvm_swap.c,v 1.181 2019/10/06 05:48:00 mlelstv Exp $");
+__KERNEL_RCSID(0, "$NetBSD: uvm_swap.c,v 1.182 2019/12/01 14:40:31 ad Exp $");
 
 #include "opt_uvmhist.h"
 #include "opt_compat_netbsd.h"
@@ -190,6 +190,7 @@ LIST_HEAD(swap_priority, swappri);
 static struct swap_priority swap_priority;
 
 /* locks */
+static kmutex_t uvm_swap_data_lock __cacheline_aligned;
 static krwlock_t swap_syscall_lock;
 
 /* workqueue and use counter for swap to regular files */
@@ -1069,7 +1070,7 @@ uvm_swap_shutdown(struct lwp *l)
 	struct vnode *vp;
 	int error;
 
-	printf("turning of swap...");
+	printf("turning off swap...");
 	rw_enter(&swap_syscall_lock, RW_WRITER);
 	mutex_enter(&uvm_swap_data_lock);
 again:
@@ -1663,7 +1664,7 @@ uvm_swap_markbad(int startslot, int nslo
 	 */
 
 	KASSERT(uvmexp.swpgonly >= nslots);
-	uvmexp.swpgonly -= nslots;
+	atomic_add_int(&uvmexp.swpgonly, -nslots);
 	sdp->swd_npgbad += nslots;
 	UVMHIST_LOG(pdhist, "now %jd bad", sdp->swd_npgbad, 0,0,0);
 	mutex_exit(&uvm_swap_data_lock);
@@ -1750,10 +1751,8 @@ uvm_swap_get(struct vm_page *page, int s
 		 * this page is no longer only in swap.
 		 */
 
-		mutex_enter(&uvm_swap_data_lock);
 		KASSERT(uvmexp.swpgonly > 0);
-		uvmexp.swpgonly--;
-		mutex_exit(&uvm_swap_data_lock);
+		atomic_dec_uint(&uvmexp.swpgonly);
 	}
 	return error;
 }

Reply via email to