Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/sys Hide 'hardclock_ticks' behind a new getticks() function, ...



details:   https://anonhg.NetBSD.org/src/rev/18581ac71f85
branches:  trunk
changeset: 746589:18581ac71f85
user:      maxv <maxv%NetBSD.org@localhost>
date:      Thu Apr 02 16:29:30 2020 +0000

description:
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@.

diffstat:

 sys/kern/kern_clock.c        |  15 +++++++++++----
 sys/sys/kernel.h             |   8 ++++++--
 sys/uvm/uvm_pdpolicy_clock.c |  10 +++++-----
 3 files changed, 22 insertions(+), 11 deletions(-)

diffs (117 lines):

diff -r a1a09dde25ef -r 18581ac71f85 sys/kern/kern_clock.c
--- a/sys/kern/kern_clock.c     Thu Apr 02 16:18:51 2020 +0000
+++ b/sys/kern/kern_clock.c     Thu Apr 02 16:29:30 2020 +0000
@@ -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 @@
 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 @@
                sched_tick(ci);
 
        if (CPU_IS_PRIMARY(ci)) {
-               hardclock_ticks++;
+               atomic_store_relaxed(&hardclock_ticks,
+                   atomic_load_relaxed(&hardclock_ticks) + 1);
                tc_ticktock();
        }
 
diff -r a1a09dde25ef -r 18581ac71f85 sys/sys/kernel.h
--- a/sys/sys/kernel.h  Thu Apr 02 16:18:51 2020 +0000
+++ b/sys/sys/kernel.h  Thu Apr 02 16:29:30 2020 +0000
@@ -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 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 profsrc;            /* profiling source */
 extern int psratio;            /* ratio: prof / stat */
 
+/* Accessors. */
+
+int getticks(void);
+
 #define PROFSRC_CLOCK  0
 
 #endif
diff -r a1a09dde25ef -r 18581ac71f85 sys/uvm/uvm_pdpolicy_clock.c
--- a/sys/uvm/uvm_pdpolicy_clock.c      Thu Apr 02 16:18:51 2020 +0000
+++ b/sys/uvm/uvm_pdpolicy_clock.c      Thu Apr 02 16:29:30 2020 +0000
@@ -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 @@
         * 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 @@
         * 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 @@
                        }
                }
                if (ucpu->pdqhead == ucpu->pdqtail) {
-                       ucpu->pdqtime = hardclock_ticks;
+                       ucpu->pdqtime = getticks();
                }
                mutex_exit(&s->lock);
        }



Home | Main Index | Thread Index | Old Index