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);
}