Source-Changes-HG archive

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

[src/trunk]: src/sys/kern Allow the precision of the sub-second field of time...



details:   https://anonhg.NetBSD.org/src/rev/b3abce879a8c
branches:  trunk
changeset: 361134:b3abce879a8c
user:      kre <kre%NetBSD.org@localhost>
date:      Sat Apr 14 01:45:37 2018 +0000

description:
Allow the precision of the sub-second field of timestamps to
be controlled - for now that is done by editing this file and
recompiling (or using gdb or equiv to patch /netbsd or /dev/kmem)
but adding a sysctl to allow dynamic userland control should be easy.

Also reduce the initial seconds field width of timestamp from 5 to 4
(it grows wider as needed.)

Avoid printing timestamps if we cannot be sure there will be
a message to accompany them.   (Observed happening...)

diffstat:

 sys/kern/subr_prf.c |  31 ++++++++++++++++++++++++-------
 1 files changed, 24 insertions(+), 7 deletions(-)

diffs (72 lines):

diff -r 7c6966e5db59 -r b3abce879a8c sys/kern/subr_prf.c
--- a/sys/kern/subr_prf.c       Sat Apr 14 01:37:34 2018 +0000
+++ b/sys/kern/subr_prf.c       Sat Apr 14 01:45:37 2018 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: subr_prf.c,v 1.168 2018/04/13 09:21:16 christos Exp $  */
+/*     $NetBSD: subr_prf.c,v 1.169 2018/04/14 01:45:37 kre Exp $       */
 
 /*-
  * Copyright (c) 1986, 1988, 1991, 1993
@@ -37,7 +37,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: subr_prf.c,v 1.168 2018/04/13 09:21:16 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: subr_prf.c,v 1.169 2018/04/14 01:45:37 kre Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_ddb.h"
@@ -484,17 +484,34 @@
 
 #ifndef KLOG_NOTIMESTAMP
 static int needtstamp = 1;
+int log_ts_prec = 9;
 
 static void
 addtstamp(int flags, struct tty *tp)
 {
        char buf[64];
        struct timespec ts;
-       int n;
+       int n, prec;
+       long fsec;
+
+       prec = log_ts_prec;
+       if (prec < 0) {
+               prec = 0;
+               log_ts_prec = prec;
+       } else if (prec > 9) {
+               prec = 9;
+               log_ts_prec = prec;
+       }
 
        getnanouptime(&ts);
-       n = snprintf(buf, sizeof(buf), "[% 5jd.%.9ld] ",
-           (intmax_t)ts.tv_sec, ts.tv_nsec);
+
+       for (n = prec, fsec = ts.tv_nsec; n < 8; n++)
+               fsec /= 10;
+       if (n < 9)
+               fsec = (fsec / 10) + ((fsec % 10) >= 5);
+
+       n = snprintf(buf, sizeof(buf), "[% 4jd.%.*ld] ",
+           (intmax_t)ts.tv_sec, prec, fsec);
 
        for (int i = 0; i < n; i++)
                putone(buf[i], flags, tp);
@@ -517,13 +534,13 @@
        }
 
 #ifndef KLOG_NOTIMESTAMP
-       if (needtstamp) {
+       if (c != '\0' && c != '\n' && needtstamp) {
                addtstamp(flags, tp);
                needtstamp = 0;
        }
 
        if (c == '\n')
-               needtstamp++;
+               needtstamp = 1;
 #endif
        putone(c, flags, tp);
 



Home | Main Index | Thread Index | Old Index