From 08f95c490b588e0fe49388a8381e019c2d6db6ec Mon Sep 17 00:00:00 2001 From: Matthew Dillon Date: Sun, 24 Apr 2005 02:01:08 +0000 Subject: [PATCH] Fix the structural type for kern.boottime and kern.basetime. Fix basetime so the sysctl is properly sized with a NULL oldp. Fix kern.ntp.delta. It was doing a relative adjustment instead of an absolute adjustment. Document the ntp sysctl_*() PROC's. --- sys/kern/kern_clock.c | 11 ++++------- sys/kern/kern_time.c | 13 ++++++++++--- 2 files changed, 14 insertions(+), 10 deletions(-) diff --git a/sys/kern/kern_clock.c b/sys/kern/kern_clock.c index 41dd49ca7e..bd7d131ad0 100644 --- a/sys/kern/kern_clock.c +++ b/sys/kern/kern_clock.c @@ -70,7 +70,7 @@ * * @(#)kern_clock.c 8.5 (Berkeley) 1/21/94 * $FreeBSD: src/sys/kern/kern_clock.c,v 1.105.2.10 2002/10/17 13:19:40 maxim Exp $ - * $DragonFly: src/sys/kern/kern_clock.c,v 1.37 2005/04/23 20:34:32 dillon Exp $ + * $DragonFly: src/sys/kern/kern_clock.c,v 1.38 2005/04/24 02:01:08 dillon Exp $ */ #include "opt_ntp.h" @@ -158,17 +158,14 @@ sysctl_get_basetime(SYSCTL_HANDLER_ARGS) int error; bt = &basetime[basetime_index]; - if (req->oldptr != NULL) - error = SYSCTL_OUT(req, bt, sizeof(*bt)); - else - error = 0; + error = SYSCTL_OUT(req, bt, sizeof(*bt)); return (error); } SYSCTL_STRUCT(_kern, KERN_BOOTTIME, boottime, CTLFLAG_RD, - &boottime, timeval, "System boottime"); + &boottime, timespec, "System boottime"); SYSCTL_PROC(_kern, OID_AUTO, basetime, CTLTYPE_STRUCT|CTLFLAG_RD, 0, 0, - sysctl_get_basetime, "S,timeval", "System basetime"); + sysctl_get_basetime, "S,timespec", "System basetime"); static void hardclock(systimer_t info, struct intrframe *frame); static void statclock(systimer_t info, struct intrframe *frame); diff --git a/sys/kern/kern_time.c b/sys/kern/kern_time.c index f64e5fd081..4fb19c7595 100644 --- a/sys/kern/kern_time.c +++ b/sys/kern/kern_time.c @@ -32,7 +32,7 @@ * * @(#)kern_time.c 8.1 (Berkeley) 6/10/93 * $FreeBSD: src/sys/kern/kern_time.c,v 1.68.2.1 2002/10/01 08:00:41 bde Exp $ - * $DragonFly: src/sys/kern/kern_time.c,v 1.27 2005/04/23 20:34:32 dillon Exp $ + * $DragonFly: src/sys/kern/kern_time.c,v 1.28 2005/04/24 02:01:08 dillon Exp $ */ #include @@ -463,7 +463,7 @@ kern_adjtime(int64_t delta, int64_t *odelta) crit_enter(); *odelta = ntp_delta; - ntp_delta += delta; + ntp_delta = delta; kern_adjtime_common(); crit_exit(); @@ -542,7 +542,7 @@ adjtime(struct adjtime_args *uap) * hardclock(), tickdelta will become zero, lest the correction * overshoot and start taking us away from the desired final time. */ - ndelta = atv.tv_sec * 1000000000 + atv.tv_usec * 1000; + ndelta = (int64_t)atv.tv_sec * 1000000000 + atv.tv_usec * 1000; kern_adjtime(ndelta, &odelta); if (uap->olddelta) { @@ -575,6 +575,9 @@ sysctl_adjtime(SYSCTL_HANDLER_ARGS) return (error); } +/* + * delta is in nanoseconds. + */ static int sysctl_delta(SYSCTL_HANDLER_ARGS) { @@ -596,6 +599,10 @@ sysctl_delta(SYSCTL_HANDLER_ARGS) return (error); } +/* + * frequency is in nanoseconds per second shifted left 32. + * kern_adjfreq() needs it in nanoseconds per tick shifted left 32. + */ static int sysctl_adjfreq(SYSCTL_HANDLER_ARGS) { -- 2.41.0