Module Name:    src
Committed By:   maxv
Date:           Thu Apr  2 16:29:30 UTC 2020

Modified Files:
        src/sys/kern: kern_clock.c
        src/sys/sys: kernel.h
        src/sys/uvm: uvm_pdpolicy_clock.c

Log Message:
Hide 'hardclock_ticks' behind a new getticks() function, and use relaxed
atomics internally. Only one caller is converted for now.

Discussed with riastradh@ and ad@.


To generate a diff of this commit:
cvs rdiff -u -r1.139 -r1.140 src/sys/kern/kern_clock.c
cvs rdiff -u -r1.32 -r1.33 src/sys/sys/kernel.h
cvs rdiff -u -r1.35 -r1.36 src/sys/uvm/uvm_pdpolicy_clock.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/kern/kern_clock.c
diff -u src/sys/kern/kern_clock.c:1.139 src/sys/kern/kern_clock.c:1.140
--- src/sys/kern/kern_clock.c:1.139	Sun Dec  1 15:34:46 2019
+++ src/sys/kern/kern_clock.c	Thu Apr  2 16:29:30 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: kern_clock.c,v 1.139 2019/12/01 15:34:46 ad Exp $	*/
+/*	$NetBSD: kern_clock.c,v 1.140 2020/04/02 16:29:30 maxv Exp $	*/
 
 /*-
  * Copyright (c) 2000, 2004, 2006, 2007, 2008 The NetBSD Foundation, Inc.
@@ -69,7 +69,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: kern_clock.c,v 1.139 2019/12/01 15:34:46 ad Exp $");
+__KERNEL_RCSID(0, "$NetBSD: kern_clock.c,v 1.140 2020/04/02 16:29:30 maxv Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_dtrace.h"
@@ -155,7 +155,13 @@ static u_int
 get_intr_timecount(struct timecounter *tc)
 {
 
-	return (u_int)hardclock_ticks;
+	return (u_int)getticks();
+}
+
+int
+getticks(void)
+{
+	return atomic_load_relaxed(&hardclock_ticks);
 }
 
 /*
@@ -242,7 +248,8 @@ hardclock(struct clockframe *frame)
 		sched_tick(ci);
 
 	if (CPU_IS_PRIMARY(ci)) {
-		hardclock_ticks++;
+		atomic_store_relaxed(&hardclock_ticks,
+		    atomic_load_relaxed(&hardclock_ticks) + 1);
 		tc_ticktock();
 	}
 

Index: src/sys/sys/kernel.h
diff -u src/sys/sys/kernel.h:1.32 src/sys/sys/kernel.h:1.33
--- src/sys/sys/kernel.h:1.32	Thu Jan  2 15:42:27 2020
+++ src/sys/sys/kernel.h	Thu Apr  2 16:29:30 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: kernel.h,v 1.32 2020/01/02 15:42:27 thorpej Exp $	*/
+/*	$NetBSD: kernel.h,v 1.33 2020/04/02 16:29:30 maxv Exp $	*/
 
 /*-
  * Copyright (c) 1990, 1993
@@ -56,7 +56,7 @@ extern int cold;		/* still working on st
 extern int shutting_down;	/* system is shutting down */
 extern int tick;		/* usec per tick (1000000 / hz) */
 extern int tickadj;		/* "standard" clock skew, us./tick */
-extern int hardclock_ticks;	/* # of hardclock ticks */
+extern int hardclock_ticks;	/* # of hardclock ticks; XXX use getticks()! */
 extern int hz;			/* system clock's frequency */
 extern int stathz;		/* statistics clock's frequency */
 extern int profhz;		/* profiling clock's frequency */
@@ -64,6 +64,10 @@ extern int profhz;		/* profiling clock's
 extern int profsrc;		/* profiling source */
 extern int psratio;		/* ratio: prof / stat */
 
+/* Accessors. */
+
+int getticks(void);
+
 #define PROFSRC_CLOCK	0
 
 #endif

Index: src/sys/uvm/uvm_pdpolicy_clock.c
diff -u src/sys/uvm/uvm_pdpolicy_clock.c:1.35 src/sys/uvm/uvm_pdpolicy_clock.c:1.36
--- src/sys/uvm/uvm_pdpolicy_clock.c:1.35	Sat Mar 14 13:53:26 2020
+++ src/sys/uvm/uvm_pdpolicy_clock.c	Thu Apr  2 16:29:30 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: uvm_pdpolicy_clock.c,v 1.35 2020/03/14 13:53:26 ad Exp $	*/
+/*	$NetBSD: uvm_pdpolicy_clock.c,v 1.36 2020/04/02 16:29:30 maxv Exp $	*/
 /*	NetBSD: uvm_pdaemon.c,v 1.72 2006/01/05 10:47:33 yamt Exp $	*/
 
 /*-
@@ -98,7 +98,7 @@
 #else /* defined(PDSIM) */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: uvm_pdpolicy_clock.c,v 1.35 2020/03/14 13:53:26 ad Exp $");
+__KERNEL_RCSID(0, "$NetBSD: uvm_pdpolicy_clock.c,v 1.36 2020/04/02 16:29:30 maxv Exp $");
 
 #include <sys/param.h>
 #include <sys/proc.h>
@@ -771,7 +771,7 @@ uvmpdpol_idle(struct uvm_cpu *ucpu)
 	 * if no pages in the queue, we have nothing to do.
 	 */
 	if (ucpu->pdqhead == ucpu->pdqtail) {
-		ucpu->pdqtime = hardclock_ticks;
+		ucpu->pdqtime = getticks();
 		return;
 	}
 
@@ -779,7 +779,7 @@ uvmpdpol_idle(struct uvm_cpu *ucpu)
 	 * don't do this more than ~8 times a second as it would needlessly
 	 * exert pressure.
 	 */
-	if (hardclock_ticks - ucpu->pdqtime < (hz >> 3)) {
+	if (getticks() - ucpu->pdqtime < (hz >> 3)) {
 		return;
 	}
 
@@ -803,7 +803,7 @@ uvmpdpol_idle(struct uvm_cpu *ucpu)
 			}
 		}
 		if (ucpu->pdqhead == ucpu->pdqtail) {
-			ucpu->pdqtime = hardclock_ticks;
+			ucpu->pdqtime = getticks();
 		}
 		mutex_exit(&s->lock);
 	}

Reply via email to