Module Name:    src
Committed By:   maxv
Date:           Sun Dec  1 08:19:09 UTC 2019

Modified Files:
        src/sys/uvm: uvm_fault.c

Log Message:
Use atomic_{load,store}_relaxed() on global counters.


To generate a diff of this commit:
cvs rdiff -u -r1.208 -r1.209 src/sys/uvm/uvm_fault.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_fault.c
diff -u src/sys/uvm/uvm_fault.c:1.208 src/sys/uvm/uvm_fault.c:1.209
--- src/sys/uvm/uvm_fault.c:1.208	Sun Nov 10 20:38:33 2019
+++ src/sys/uvm/uvm_fault.c	Sun Dec  1 08:19:09 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: uvm_fault.c,v 1.208 2019/11/10 20:38:33 chs Exp $	*/
+/*	$NetBSD: uvm_fault.c,v 1.209 2019/12/01 08:19:09 maxv 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.208 2019/11/10 20:38:33 chs Exp $");
+__KERNEL_RCSID(0, "$NetBSD: uvm_fault.c,v 1.209 2019/12/01 08:19:09 maxv Exp $");
 
 #include "opt_uvmhist.h"
 
@@ -284,7 +284,8 @@ uvmfault_anonget(struct uvm_faultinfo *u
 	KASSERT(anon->an_lock == amap->am_lock);
 
 	/* Increment the counters.*/
-	uvmexp.fltanget++;
+	atomic_store_relaxed(&uvmexp.fltanget,
+	    atomic_load_relaxed(&uvmexp.fltanget) + 1);
 	if (anon->an_page) {
 		curlwp->l_ru.ru_minflt++;
 	} else {
@@ -331,7 +332,8 @@ uvmfault_anonget(struct uvm_faultinfo *u
 				return 0;
 			}
 			pg->flags |= PG_WANTED;
-			uvmexp.fltpgwait++;
+			atomic_store_relaxed(&uvmexp.fltpgwait,
+			    atomic_load_relaxed(&uvmexp.fltpgwait) + 1);
 
 			/*
 			 * The last unlock must be an atomic unlock and wait
@@ -366,7 +368,8 @@ uvmfault_anonget(struct uvm_faultinfo *u
 			if (pg == NULL) {
 				/* Out of memory.  Wait a little. */
 				uvmfault_unlockall(ufi, amap, NULL);
-				uvmexp.fltnoram++;
+				atomic_store_relaxed(&uvmexp.fltnoram,
+				    atomic_load_relaxed(&uvmexp.fltnoram) + 1);
 				UVMHIST_LOG(maphist, "  noram -- UVM_WAIT",0,
 				    0,0,0);
 				if (!uvm_reclaimable()) {
@@ -385,7 +388,8 @@ uvmfault_anonget(struct uvm_faultinfo *u
 				 * to read an_swslot here, because we hold
 				 * PG_BUSY on the page.
 				 */
-				uvmexp.pageins++;
+				atomic_store_relaxed(&uvmexp.pageins,
+				    atomic_load_relaxed(&uvmexp.pageins) + 1);
 				error = uvm_swap_get(pg, anon->an_swslot,
 				    PGO_SYNCIO);
 
@@ -526,7 +530,8 @@ released:
 		 * Retry..
 		 */
 
-		uvmexp.fltanretry++;
+		atomic_store_relaxed(&uvmexp.fltanretry,
+		    atomic_load_relaxed(&uvmexp.fltanretry) + 1);
 		continue;
 	}
 	/*NOTREACHED*/
@@ -627,13 +632,15 @@ uvmfault_promote(struct uvm_faultinfo *u
 		uvmfault_unlockall(ufi, amap, uobj);
 		if (!uvm_reclaimable()) {
 			UVMHIST_LOG(maphist, "out of VM", 0,0,0,0);
-			uvmexp.fltnoanon++;
+			atomic_store_relaxed(&uvmexp.fltnoanon,
+			    atomic_load_relaxed(&uvmexp.fltnoanon) + 1);
 			error = ENOMEM;
 			goto done;
 		}
 
 		UVMHIST_LOG(maphist, "out of RAM, waiting for more", 0,0,0,0);
-		uvmexp.fltnoram++;
+		atomic_store_relaxed(&uvmexp.fltnoram,
+		    atomic_load_relaxed(&uvmexp.fltnoram) + 1);
 		uvm_wait("flt_noram5");
 		error = ERESTART;
 		goto done;
@@ -1026,7 +1033,8 @@ uvm_fault_check(
 			    "  need to clear needs_copy and refault",0,0,0,0);
 			uvmfault_unlockmaps(ufi, false);
 			uvmfault_amapcopy(ufi);
-			uvmexp.fltamcopy++;
+			atomic_store_relaxed(&uvmexp.fltamcopy,
+			    atomic_load_relaxed(&uvmexp.fltamcopy) + 1);
 			return ERESTART;
 
 		} else {
@@ -1269,7 +1277,8 @@ uvm_fault_upper_neighbor(
 	UVMHIST_LOG(maphist,
 	    "  MAPPING: n anon: pm=%#jx, va=%#jx, pg=%#jx",
 	    (uintptr_t)ufi->orig_map->pmap, currva, (uintptr_t)pg, 0);
-	uvmexp.fltnamap++;
+	atomic_store_relaxed(&uvmexp.fltnamap,
+	    atomic_load_relaxed(&uvmexp.fltnamap) + 1);
 
 	/*
 	 * Since this page isn't the page that's actually faulting,
@@ -1465,7 +1474,8 @@ uvm_fault_upper_promote(
 	UVMHIST_FUNC("uvm_fault_upper_promote"); UVMHIST_CALLED(maphist);
 
 	UVMHIST_LOG(maphist, "  case 1B: COW fault",0,0,0,0);
-	uvmexp.flt_acow++;
+	atomic_store_relaxed(&uvmexp.flt_acow,
+	    atomic_load_relaxed(&uvmexp.flt_acow) + 1);
 
 	error = uvmfault_promote(ufi, oanon, PGO_DONTCARE, &anon,
 	    &flt->anon_spare);
@@ -1513,7 +1523,8 @@ uvm_fault_upper_direct(
 	struct vm_page *pg;
 	UVMHIST_FUNC("uvm_fault_upper_direct"); UVMHIST_CALLED(maphist);
 
-	uvmexp.flt_anon++;
+	atomic_store_relaxed(&uvmexp.flt_anon,
+	    atomic_load_relaxed(&uvmexp.flt_anon) + 1);
 	pg = anon->an_page;
 	if (anon->an_ref > 1)     /* disallow writes to ref > 1 anons */
 		flt->enter_prot = flt->enter_prot & ~VM_PROT_WRITE;
@@ -1782,7 +1793,8 @@ uvm_fault_lower_lookup(
 	mutex_enter(uobj->vmobjlock);
 	/* Locked: maps(read), amap(if there), uobj */
 
-	uvmexp.fltlget++;
+	atomic_store_relaxed(&uvmexp.fltlget,
+	    atomic_load_relaxed(&uvmexp.fltlget) + 1);
 	gotpages = flt->npages;
 	(void) uobj->pgops->pgo_get(uobj,
 	    ufi->entry->offset + flt->startva - ufi->entry->start,
@@ -1856,7 +1868,8 @@ uvm_fault_lower_neighbor(
 	UVMHIST_LOG(maphist,
 	    "  MAPPING: n obj: pm=%#jx, va=%#jx, pg=%#jx",
 	    (uintptr_t)ufi->orig_map->pmap, currva, (uintptr_t)pg, 0);
-	uvmexp.fltnomap++;
+	atomic_store_relaxed(&uvmexp.fltnomap,
+	    atomic_load_relaxed(&uvmexp.fltnomap) + 1);
 
 	/*
 	 * Since this page isn't the page that's actually faulting,
@@ -1922,7 +1935,8 @@ uvm_fault_lower_io(
 	/* Locked: uobj */
 	KASSERT(uobj == NULL || mutex_owned(uobj->vmobjlock));
 
-	uvmexp.fltget++;
+	atomic_store_relaxed(&uvmexp.fltget,
+	    atomic_load_relaxed(&uvmexp.fltget) + 1);
 	gotpages = 1;
 	pg = NULL;
 	error = uobj->pgops->pgo_get(uobj, uoff, &pg, &gotpages,
@@ -2005,7 +2019,8 @@ uvm_fault_lower_io(
 			pg->flags &= ~(PG_BUSY | PG_WANTED);
 			UVM_PAGE_OWN(pg, NULL);
 		} else {
-			uvmexp.fltpgrele++;
+			atomic_store_relaxed(&uvmexp.fltpgrele,
+			    atomic_load_relaxed(&uvmexp.fltpgrele) + 1);
 			uvm_pagefree(pg);
 		}
 		mutex_exit(uobj->vmobjlock);
@@ -2049,7 +2064,8 @@ uvm_fault_lower_direct(
 	 * set "pg" to the page we want to map in (uobjpage, usually)
 	 */
 
-	uvmexp.flt_obj++;
+	atomic_store_relaxed(&uvmexp.flt_obj,
+	    atomic_load_relaxed(&uvmexp.flt_obj) + 1);
 	if (UVM_ET_ISCOPYONWRITE(ufi->entry) ||
 	    UVM_OBJ_NEEDS_WRITEFAULT(uobjpage->uobject))
 		flt->enter_prot &= ~VM_PROT_WRITE;
@@ -2112,7 +2128,8 @@ uvm_fault_lower_direct_loan(
 			UVMHIST_LOG(maphist,
 			  "  out of RAM breaking loan, waiting",
 			  0,0,0,0);
-			uvmexp.fltnoram++;
+			atomic_store_relaxed(&uvmexp.fltnoram,
+			    atomic_load_relaxed(&uvmexp.fltnoram) + 1);
 			uvm_wait("flt_noram4");
 			return ERESTART;
 		}

Reply via email to