Page MenuHomeFreeBSD

D14725.id40394.diff
No OneTemporary

D14725.id40394.diff

Index: contrib/ntp/util/pps-api.c
===================================================================
--- contrib/ntp/util/pps-api.c
+++ contrib/ntp/util/pps-api.c
@@ -16,17 +16,7 @@
#include <sys/timepps.h>
#include <sys/termios.h>
-#define timespecsub(vvp, uvp) \
- do { \
- (vvp)->tv_sec -= (uvp)->tv_sec; \
- (vvp)->tv_nsec -= (uvp)->tv_nsec; \
- if ((vvp)->tv_nsec < 0) { \
- (vvp)->tv_sec--; \
- (vvp)->tv_nsec += 1000000000; \
- } \
- } while (0)
-
void
Chew(struct timespec *tsa, struct timespec *tsc, unsigned sa, unsigned sc)
{
@@ -37,8 +27,7 @@
printf("%d.%09d ", tsc->tv_sec, tsc->tv_nsec);
printf("%u %u ", sa, sc);
- ts = *tsc;
- timespecsub(&ts,tsa);
+ timespecsub(tsc, tsa, ts);
printf("%.9f ", ts.tv_sec + ts.tv_nsec / 1e9);
printf("\n");
fflush(stdout);
Index: contrib/nvi/common/util.h
===================================================================
--- contrib/nvi/common/util.h
+++ contrib/nvi/common/util.h
@@ -62,17 +62,8 @@
#define MAX(_a,_b) ((_a)<(_b)?(_b):(_a))
/* Operations on timespecs */
-#undef timespecclear
-#undef timespecisset
-#undef timespeccmp
#undef timespecadd
#undef timespecsub
-#define timespecclear(tvp) ((tvp)->tv_sec = (tvp)->tv_nsec = 0)
-#define timespecisset(tvp) ((tvp)->tv_sec || (tvp)->tv_nsec)
-#define timespeccmp(tvp, uvp, cmp) \
- (((tvp)->tv_sec == (uvp)->tv_sec) ? \
- ((tvp)->tv_nsec cmp (uvp)->tv_nsec) : \
- ((tvp)->tv_sec cmp (uvp)->tv_sec))
#define timespecadd(vvp, uvp) \
do { \
(vvp)->tv_sec += (uvp)->tv_sec; \
Index: lib/libnetbsd/sys/time.h
===================================================================
--- lib/libnetbsd/sys/time.h
+++ /dev/null
@@ -1,65 +0,0 @@
-/* $FreeBSD$ */
-
-/*
- * Copyright (c) 1982, 1986, 1993
- * The Regents of the University of California. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * @(#)time.h 8.5 (Berkeley) 5/4/95
- */
-
-#ifndef _LIBNETBSD_SYS_TIME_H_
-#define _LIBNETBSD_SYS_TIME_H_
-
-#include_next <sys/time.h>
-
-/* Operations on timespecs. */
-#define timespecclear(tsp) (tsp)->tv_sec = (time_t)((tsp)->tv_nsec = 0L)
-#define timespecisset(tsp) ((tsp)->tv_sec || (tsp)->tv_nsec)
-#define timespeccmp(tsp, usp, cmp) \
- (((tsp)->tv_sec == (usp)->tv_sec) ? \
- ((tsp)->tv_nsec cmp (usp)->tv_nsec) : \
- ((tsp)->tv_sec cmp (usp)->tv_sec))
-#define timespecadd(tsp, usp, vsp) \
- do { \
- (vsp)->tv_sec = (tsp)->tv_sec + (usp)->tv_sec; \
- (vsp)->tv_nsec = (tsp)->tv_nsec + (usp)->tv_nsec; \
- if ((vsp)->tv_nsec >= 1000000000L) { \
- (vsp)->tv_sec++; \
- (vsp)->tv_nsec -= 1000000000L; \
- } \
- } while (/* CONSTCOND */ 0)
-#define timespecsub(tsp, usp, vsp) \
- do { \
- (vsp)->tv_sec = (tsp)->tv_sec - (usp)->tv_sec; \
- (vsp)->tv_nsec = (tsp)->tv_nsec - (usp)->tv_nsec; \
- if ((vsp)->tv_nsec < 0) { \
- (vsp)->tv_sec--; \
- (vsp)->tv_nsec += 1000000000L; \
- } \
- } while (/* CONSTCOND */ 0)
-
-#endif
Index: sbin/fsck_ffs/fsutil.c
===================================================================
--- sbin/fsck_ffs/fsutil.c
+++ sbin/fsck_ffs/fsutil.c
@@ -297,28 +297,6 @@
return (bp);
}
-/*
- * Timespec operations (from <sys/time.h>).
- */
-#define timespecsub(vvp, uvp) \
- do { \
- (vvp)->tv_sec -= (uvp)->tv_sec; \
- (vvp)->tv_nsec -= (uvp)->tv_nsec; \
- if ((vvp)->tv_nsec < 0) { \
- (vvp)->tv_sec--; \
- (vvp)->tv_nsec += 1000000000; \
- } \
- } while (0)
-#define timespecadd(vvp, uvp) \
- do { \
- (vvp)->tv_sec += (uvp)->tv_sec; \
- (vvp)->tv_nsec += (uvp)->tv_nsec; \
- if ((vvp)->tv_nsec >= 1000000000) { \
- (vvp)->tv_sec++; \
- (vvp)->tv_nsec -= 1000000000; \
- } \
- } while (0)
-
void
getblk(struct bufarea *bp, ufs2_daddr_t blk, long size)
{
@@ -337,8 +315,9 @@
bp->b_errs = blread(fsreadfd, bp->b_un.b_buf, dblk, size);
if (debug) {
clock_gettime(CLOCK_REALTIME_PRECISE, &finish);
- timespecsub(&finish, &start);
- timespecadd(&readtime[bp->b_type], &finish);
+ timespecsub(&finish, &start, &finish);
+ timespecadd(&readtime[bp->b_type], &finish,
+ &readtime[bp->b_type]);
}
bp->b_bno = dblk;
bp->b_size = size;
@@ -509,7 +488,7 @@
totaldiskreads += diskreads;
diskreads = 0;
for (i = 0; i < BT_NUMBUFTYPES; i++) {
- timespecadd(&totalreadtime[i], &readtime[i]);
+ timespecadd(&totalreadtime[i], &readtime[i], &totalreadtime[i]);
totalreadcnt[i] += readcnt[i];
readtime[i].tv_sec = readtime[i].tv_nsec = 0;
readcnt[i] = 0;
@@ -529,7 +508,7 @@
diskreads = totaldiskreads;
startpass = startprog;
for (i = 0; i < BT_NUMBUFTYPES; i++) {
- timespecadd(&totalreadtime[i], &readtime[i]);
+ timespecadd(&totalreadtime[i], &readtime[i], &totalreadtime[i]);
totalreadcnt[i] += readcnt[i];
readtime[i] = totalreadtime[i];
readcnt[i] = totalreadcnt[i];
@@ -543,7 +522,7 @@
int i;
clock_gettime(CLOCK_REALTIME_PRECISE, &finishpass);
- timespecsub(&finishpass, &startpass);
+ timespecsub(&finishpass, &startpass, &finishpass);
printf("Running time: %jd.%03ld sec\n",
(intmax_t)finishpass.tv_sec, finishpass.tv_nsec / 1000000);
printf("buffer reads by type:\n");
Index: share/man/man3/Makefile
===================================================================
--- share/man/man3/Makefile
+++ share/man/man3/Makefile
@@ -164,7 +164,12 @@
MLINKS+= timeradd.3 timerclear.3 \
timeradd.3 timercmp.3 \
timeradd.3 timerisset.3 \
- timeradd.3 timersub.3
+ timeradd.3 timersub.3 \
+ timeradd.3 timespecadd.3 \
+ timeradd.3 timespecsub.3 \
+ timeradd.3 timespecclear.3 \
+ timeradd.3 timespecisset.3 \
+ timeradd.3 timespeccmp.3
MLINKS+= tree.3 RB_EMPTY.3 \
tree.3 RB_ENTRY.3 \
tree.3 RB_FIND.3 \
Index: share/man/man3/timeradd.3
===================================================================
--- share/man/man3/timeradd.3
+++ share/man/man3/timeradd.3
@@ -27,7 +27,7 @@
.\"
.\" $FreeBSD$
.\"
-.Dd August 11, 1999
+.Dd March 17, 2018
.Dt TIMERADD 3
.Os
.Sh NAME
@@ -35,8 +35,13 @@
.Nm timersub ,
.Nm timerclear ,
.Nm timerisset ,
-.Nm timercmp
-.Nd operations on timevals
+.Nm timercmp ,
+.Nm timespecadd ,
+.Nm timespecsub ,
+.Nm timespecclear ,
+.Nm timespecisset ,
+.Nm timespeccmp
+.Nd operations on timevals and timespecs
.Sh SYNOPSIS
.In sys/time.h
.Ft void
@@ -49,15 +54,31 @@
.Fn timerisset "struct timeval *tvp"
.Ft int
.Fn timercmp "struct timeval *a" "struct timeval *b" CMP
+.Ft void
+.Fn timespecadd "struct timespec *a" "struct timespec *b" "struct timespec *res"
+.Ft void
+.Fn timespecsub "struct timespec *a" "struct timespec *b" "struct timespec *res"
+.Ft void
+.Fn timespecclear "struct timespec *ts"
+.Ft int
+.Fn timespecisset "struct timespec *ts"
+.Ft int
+.Fn timespeccmp "struct timespec *a" "struct timespec *b" CMP
.Sh DESCRIPTION
These macros are provided for manipulating
.Fa timeval
+and
+.Fa timespec
structures for use with the
+.Xr clock_gettime 2 ,
+.Xr clock_settime 2 ,
.Xr gettimeofday 2
and
.Xr settimeofday 2
calls.
-The structure is defined in
+The
+.Fa timeval
+structure is defined in
.In sys/time.h
as:
.Bd -literal
@@ -66,50 +87,67 @@
long tv_usec; /* and microseconds */
};
.Ed
+And the
+.Fa timespec
+structure is defined in
+.In time.h
+as:
+.Bd -literal
+struct timespec {
+ time_t tv_nsec; /* seconds */
+ long tv_nsec; /* and nanoseconds */
+};
+.Ed
.Pp
.Fn timeradd
-adds the time information stored in
+and
+.Fn timespecadd
+add the time information stored in
.Fa a
to
.Fa b
-and stores the resulting
-.Vt timeval
-in
+and store the result in
.Fa res .
The results are simplified such that the value of
.Fa res->tv_usec
-is always less than 1,000,000 (1 second).
+or
+.Fa res->tv_nsec
+is always less than 1 second.
.Pp
.Fn timersub
-subtracts the time information stored in
+and
+.Fn timespecsub
+subtract the time information stored in
.Fa b
from
.Fa a
-and stores the resulting
-.Vt timeval
+and store the result
in
.Fa res .
.Pp
.Fn timerclear
-initializes
-.Fa tvp
-to midnight (0 hour) January 1st, 1970 (the Epoch).
+and
+.Fn timespecclear
+initialize their argument to midnight (0 hour) January 1st, 1970 (the Epoch).
.Pp
.Fn timerisset
-returns true if
-.Fa tvp
-is set to any time value other than the Epoch.
+and
+.Fn timespecisset
+return true if their argument is set to any time value other than the Epoch.
.Pp
.Fn timercmp
-compares
+and
+.Fn timespeccmp
+compare
.Fa a
to
.Fa b
using the comparison operator given in
.Fa CMP ,
-and returns the result of that comparison.
+and return the result of that comparison.
.Sh SEE ALSO
-.Xr gettimeofday 2
+.Xr gettimeofday 2 ,
+.Xr clock_gettime 2
.Sh HISTORY
The
.Fn timeradd
@@ -117,3 +155,11 @@
.Nx 1.1 ,
and appeared in
.Fx 2.2.6 .
+The
+.Fn timespecadd
+family of macros were imported from
+.Nx 1.3
+into
+.Fx 3.0 ,
+though they were not exposed to userland until
+.Fx 12.0 .
Index: sys/compat/linux/linux_event.c
===================================================================
--- sys/compat/linux/linux_event.c
+++ sys/compat/linux/linux_event.c
@@ -1177,7 +1177,7 @@
linux_timerfd_clocktime(tfd, &cts);
*ots = tfd->tfd_time;
if (ots->it_value.tv_sec != 0 || ots->it_value.tv_nsec != 0) {
- timespecsub(&ots->it_value, &cts);
+ timespecsub(&ots->it_value, &cts, &ots->it_value);
if (ots->it_value.tv_sec < 0 ||
(ots->it_value.tv_sec == 0 &&
ots->it_value.tv_nsec == 0)) {
@@ -1261,9 +1261,10 @@
linux_timerfd_clocktime(tfd, &cts);
ts = nts.it_value;
if ((args->flags & LINUX_TFD_TIMER_ABSTIME) == 0) {
- timespecadd(&tfd->tfd_time.it_value, &cts);
+ timespecadd(&tfd->tfd_time.it_value, &cts,
+ &tfd->tfd_time.it_value);
} else {
- timespecsub(&ts, &cts);
+ timespecsub(&ts, &cts, &ts);
}
TIMESPEC_TO_TIMEVAL(&tv, &ts);
callout_reset(&tfd->tfd_callout, tvtohz(&tv),
@@ -1299,13 +1300,13 @@
if (timespeccmp(&cts, &tfd->tfd_time.it_value, >=)) {
if (timespecisset(&tfd->tfd_time.it_interval))
timespecadd(&tfd->tfd_time.it_value,
- &tfd->tfd_time.it_interval);
+ &tfd->tfd_time.it_interval,
+ &tfd->tfd_time.it_value);
else
/* single shot timer */
timespecclear(&tfd->tfd_time.it_value);
if (timespecisset(&tfd->tfd_time.it_value)) {
- ts = tfd->tfd_time.it_value;
- timespecsub(&ts, &cts);
+ timespecsub(&tfd->tfd_time.it_value, &cts, &ts);
TIMESPEC_TO_TIMEVAL(&tv, &ts);
callout_reset(&tfd->tfd_callout, tvtohz(&tv),
linux_timerfd_expire, tfd);
@@ -1315,8 +1316,7 @@
selwakeup(&tfd->tfd_sel);
wakeup(&tfd->tfd_count);
} else if (timespecisset(&tfd->tfd_time.it_value)) {
- ts = tfd->tfd_time.it_value;
- timespecsub(&ts, &cts);
+ timespecsub(&tfd->tfd_time.it_value, &cts, &ts);
TIMESPEC_TO_TIMEVAL(&tv, &ts);
callout_reset(&tfd->tfd_callout, tvtohz(&tv),
linux_timerfd_expire, tfd);
Index: sys/compat/linux/linux_futex.c
===================================================================
--- sys/compat/linux/linux_futex.c
+++ sys/compat/linux/linux_futex.c
@@ -298,10 +298,10 @@
return (error);
if (clockrt) {
nanotime(&kts);
- timespecsub(ts, &kts);
+ timespecsub(ts, &kts, ts);
} else if (op == LINUX_FUTEX_WAIT_BITSET) {
nanouptime(&kts);
- timespecsub(ts, &kts);
+ timespecsub(ts, &kts, ts);
}
return (error);
}
Index: sys/compat/linux/linux_misc.c
===================================================================
--- sys/compat/linux/linux_misc.c
+++ sys/compat/linux/linux_misc.c
@@ -2341,8 +2341,8 @@
if (error == 0 && args->tsp != NULL) {
if (td->td_retval[0]) {
nanotime(&ts1);
- timespecsub(&ts1, &ts0);
- timespecsub(&uts, &ts1);
+ timespecsub(&ts1, &ts0, &ts1);
+ timespecsub(&uts, &ts1, &uts);
if (uts.tv_sec < 0)
timespecclear(&uts);
} else
Index: sys/compat/linux/linux_socket.c
===================================================================
--- sys/compat/linux/linux_socket.c
+++ sys/compat/linux/linux_socket.c
@@ -1466,7 +1466,7 @@
if (error != 0)
return (error);
getnanotime(&tts);
- timespecadd(&tts, &ts);
+ timespecadd(&tts, &ts, &tts);
}
msg = PTRIN(args->msg);
@@ -1495,7 +1495,7 @@
*/
if (args->timeout) {
getnanotime(&ts);
- timespecsub(&ts, &tts);
+ timespecsub(&ts, &tts, &ts);
if (!timespecisset(&ts) || ts.tv_sec > 0)
break;
}
Index: sys/compat/linuxkpi/common/include/linux/time.h
===================================================================
--- sys/compat/linuxkpi/common/include/linux/time.h
+++ sys/compat/linuxkpi/common/include/linux/time.h
@@ -71,9 +71,7 @@
{
struct timespec ts;
- ts.tv_sec = lhs.tv_sec;
- ts.tv_nsec = lhs.tv_nsec;
- timespecsub(&ts, &rhs);
+ timespecsub(&lhs, &rhs, &ts);
return ts;
}
Index: sys/dev/acpica/acpi_cmbat.c
===================================================================
--- sys/dev/acpica/acpi_cmbat.c
+++ sys/dev/acpica/acpi_cmbat.c
@@ -229,7 +229,7 @@
return (TRUE);
getnanotime(&curtime);
- timespecsub(&curtime, lastupdated);
+ timespecsub(&curtime, lastupdated, &curtime);
return (curtime.tv_sec < 0 ||
curtime.tv_sec > acpi_battery_get_info_expire());
}
Index: sys/dev/acpica/acpi_smbat.c
===================================================================
--- sys/dev/acpica/acpi_smbat.c
+++ sys/dev/acpica/acpi_smbat.c
@@ -170,7 +170,7 @@
return (TRUE);
getnanotime(&curtime);
- timespecsub(&curtime, lastupdated);
+ timespecsub(&curtime, lastupdated, &curtime);
return (curtime.tv_sec < 0 ||
curtime.tv_sec > acpi_battery_get_info_expire());
}
Index: sys/dev/acpica/acpi_thermal.c
===================================================================
--- sys/dev/acpica/acpi_thermal.c
+++ sys/dev/acpica/acpi_thermal.c
@@ -535,7 +535,7 @@
(newactive == TZ_ACTIVE_NONE || newactive > sc->tz_active)) {
getnanotime(&curtime);
- timespecsub(&curtime, &sc->tz_cooling_started);
+ timespecsub(&curtime, &sc->tz_cooling_started, &curtime);
if (curtime.tv_sec < acpi_tz_min_runtime)
newactive = sc->tz_active;
}
Index: sys/dev/drm2/i915/i915_gem.c
===================================================================
--- sys/dev/drm2/i915/i915_gem.c
+++ sys/dev/drm2/i915/i915_gem.c
@@ -1135,8 +1135,8 @@
#undef EXIT_COND
if (timeout) {
- timespecsub(&now, &before);
- timespecsub(timeout, &now);
+ timespecsub(&now, &before, &now);
+ timespecsub(timeout, &now, timeout);
}
switch (end) {
Index: sys/dev/drm2/i915/intel_pm.c
===================================================================
--- sys/dev/drm2/i915/intel_pm.c
+++ sys/dev/drm2/i915/intel_pm.c
@@ -3102,8 +3102,7 @@
mtx_assert(&mchdev_lock, MA_OWNED);
nanotime(&now);
- diff1 = now;
- timespecsub(&diff1, &dev_priv->ips.last_time2);
+ timespecsub(&now, &dev_priv->ips.last_time2, &diff1);
/* Don't divide by 0 */
diffms = diff1.tv_sec * 1000 + diff1.tv_nsec / 1000000;
Index: sys/dev/efidev/efirtc.c
===================================================================
--- sys/dev/efidev/efirtc.c
+++ sys/dev/efidev/efirtc.c
@@ -163,7 +163,7 @@
*/
ts->tv_sec -= utc_offset();
if (!efirtc_zeroes_subseconds)
- timespecadd(ts, &efirtc_resadj);
+ timespecadd(ts, &efirtc_resadj, ts);
clock_ts_to_ct(ts, &ct);
clock_dbgprint_ct(dev, CLOCK_DBG_WRITE, &ct);
Index: sys/dev/isp/isp_freebsd.c
===================================================================
--- sys/dev/isp/isp_freebsd.c
+++ sys/dev/isp/isp_freebsd.c
@@ -4083,8 +4083,9 @@
isp_nanotime_sub(struct timespec *b, struct timespec *a)
{
uint64_t elapsed;
- struct timespec x = *b;
- timespecsub(&x, a);
+ struct timespec x;
+
+ timespecsub(b, a, &x);
elapsed = GET_NANOSEC(&x);
if (elapsed == 0)
elapsed++;
Index: sys/dev/joy/joy.c
===================================================================
--- sys/dev/joy/joy.c
+++ sys/dev/joy/joy.c
@@ -171,14 +171,14 @@
nanotime(&t);
end.tv_sec = 0;
end.tv_nsec = joy->timeout[joypart(dev)] * 1000;
- timespecadd(&end, &t);
+ timespecadd(&end, &t, &end);
for (; timespeccmp(&t, &end, <) && (bus_space_read_1(bt, port, 0) & 0x0f); nanotime(&t))
; /* nothing */
bus_space_write_1 (bt, port, 0, 0xff);
nanotime(&start);
end.tv_sec = 0;
end.tv_nsec = joy->timeout[joypart(dev)] * 1000;
- timespecadd(&end, &start);
+ timespecadd(&end, &start, &end);
t = start;
timespecclear(&x);
timespecclear(&y);
@@ -200,12 +200,12 @@
enable_intr ();
#endif
if (timespecisset(&x)) {
- timespecsub(&x, &start);
+ timespecsub(&x, &start, &x);
c.x = joy->x_off[joypart(dev)] + x.tv_nsec / 1000;
} else
c.x = 0x80000000;
if (timespecisset(&y)) {
- timespecsub(&y, &start);
+ timespecsub(&y, &start, &y);
c.y = joy->y_off[joypart(dev)] + y.tv_nsec / 1000;
} else
c.y = 0x80000000;
Index: sys/dev/xen/timer/timer.c
===================================================================
--- sys/dev/xen/timer/timer.c
+++ sys/dev/xen/timer/timer.c
@@ -262,7 +262,7 @@
timespecclear(ts);
xen_fetch_wallclock(ts);
xen_fetch_uptime(&u_ts);
- timespecadd(ts, &u_ts);
+ timespecadd(ts, &u_ts, ts);
return (0);
}
Index: sys/kern/kern_sig.c
===================================================================
--- sys/kern/kern_sig.c
+++ sys/kern/kern_sig.c
@@ -1265,8 +1265,7 @@
if (timeout->tv_nsec >= 0 && timeout->tv_nsec < 1000000000) {
timevalid = 1;
getnanouptime(&rts);
- ets = rts;
- timespecadd(&ets, timeout);
+ timespecadd(&rts, timeout, &ets);
}
}
ksiginfo_init(ksi);
@@ -1306,8 +1305,7 @@
error = EAGAIN;
break;
}
- ts = ets;
- timespecsub(&ts, &rts);
+ timespecsub(&ets, &rts, &ts);
TIMESPEC_TO_TIMEVAL(&tv, &ts);
timo = tvtohz(&tv);
} else {
Index: sys/kern/kern_tc.c
===================================================================
--- sys/kern/kern_tc.c
+++ sys/kern/kern_tc.c
@@ -1848,7 +1848,7 @@
*tsp = ts;
if (foff) {
- timespecadd(tsp, osp);
+ timespecadd(tsp, osp, tsp);
if (tsp->tv_nsec < 0) {
tsp->tv_nsec += 1000000000;
tsp->tv_sec -= 1;
Index: sys/kern/kern_time.c
===================================================================
--- sys/kern/kern_time.c
+++ sys/kern/kern_time.c
@@ -541,7 +541,7 @@
atomic_load_acq_int(&rtc_generation);
error = kern_clock_gettime(td, clock_id, &now);
KASSERT(error == 0, ("kern_clock_gettime: %d", error));
- timespecsub(&ts, &now);
+ timespecsub(&ts, &now, &ts);
}
if (ts.tv_sec < 0 || (ts.tv_sec == 0 && ts.tv_nsec == 0)) {
error = EWOULDBLOCK;
@@ -1518,7 +1518,7 @@
realtimer_clocktime(it->it_clockid, &cts);
*ovalue = it->it_time;
if (ovalue->it_value.tv_sec != 0 || ovalue->it_value.tv_nsec != 0) {
- timespecsub(&ovalue->it_value, &cts);
+ timespecsub(&ovalue->it_value, &cts, &ovalue->it_value);
if (ovalue->it_value.tv_sec < 0 ||
(ovalue->it_value.tv_sec == 0 &&
ovalue->it_value.tv_nsec == 0)) {
@@ -1559,9 +1559,10 @@
ts = val.it_value;
if ((flags & TIMER_ABSTIME) == 0) {
/* Convert to absolute time. */
- timespecadd(&it->it_time.it_value, &cts);
+ timespecadd(&it->it_time.it_value, &cts,
+ &it->it_time.it_value);
} else {
- timespecsub(&ts, &cts);
+ timespecsub(&ts, &cts, &ts);
/*
* We don't care if ts is negative, tztohz will
* fix it.
@@ -1629,22 +1630,23 @@
if (timespeccmp(&cts, &it->it_time.it_value, >=)) {
if (timespecisset(&it->it_time.it_interval)) {
timespecadd(&it->it_time.it_value,
- &it->it_time.it_interval);
+ &it->it_time.it_interval,
+ &it->it_time.it_value);
while (timespeccmp(&cts, &it->it_time.it_value, >=)) {
if (it->it_overrun < INT_MAX)
it->it_overrun++;
else
it->it_ksi.ksi_errno = ERANGE;
timespecadd(&it->it_time.it_value,
- &it->it_time.it_interval);
+ &it->it_time.it_interval,
+ &it->it_time.it_value);
}
} else {
/* single shot timer ? */
timespecclear(&it->it_time.it_value);
}
if (timespecisset(&it->it_time.it_value)) {
- ts = it->it_time.it_value;
- timespecsub(&ts, &cts);
+ timespecsub(&it->it_time.it_value, &cts, &ts);
TIMESPEC_TO_TIMEVAL(&tv, &ts);
callout_reset(&it->it_callout, tvtohz(&tv),
realtimer_expire, it);
@@ -1656,7 +1658,7 @@
itimer_leave(it);
} else if (timespecisset(&it->it_time.it_value)) {
ts = it->it_time.it_value;
- timespecsub(&ts, &cts);
+ timespecsub(&ts, &cts, &ts);
TIMESPEC_TO_TIMEVAL(&tv, &ts);
callout_reset(&it->it_callout, tvtohz(&tv), realtimer_expire,
it);
Index: sys/kern/kern_umtx.c
===================================================================
--- sys/kern/kern_umtx.c
+++ sys/kern/kern_umtx.c
@@ -781,8 +781,7 @@
if (!absolute) {
timo->is_abs_real = false;
abs_timeout_update(timo);
- timo->end = timo->cur;
- timespecadd(&timo->end, timeout);
+ timespecadd(&timo->cur, timeout, &timo->end);
} else {
timo->end = *timeout;
timo->is_abs_real = clockid == CLOCK_REALTIME ||
@@ -820,8 +819,7 @@
if (timespeccmp(&timo->end, &timo->cur, <=))
return (-1);
- tts = timo->end;
- timespecsub(&tts, &timo->cur);
+ timespecsub(&timo->end, &timo->cur, &tts);
return (tstohz(&tts));
}
@@ -3256,8 +3254,8 @@
error = EINTR;
if (error == EINTR) {
abs_timeout_update(&timo);
- timeout->_timeout = timo.end;
- timespecsub(&timeout->_timeout, &timo.cur);
+ timespecsub(&timo.end, &timo.cur,
+ &timeout->_timeout);
}
}
}
Index: sys/kern/subr_rtc.c
===================================================================
--- sys/kern/subr_rtc.c
+++ sys/kern/subr_rtc.c
@@ -144,7 +144,7 @@
getnanotime(&ts);
if (!(rtc->flags & CLOCKF_SETTIME_NO_ADJ)) {
ts.tv_sec -= utc_offset();
- timespecadd(&ts, &rtc->resadj);
+ timespecadd(&ts, &rtc->resadj, &ts);
}
} else {
ts.tv_sec = 0;
@@ -301,7 +301,7 @@
continue;
}
if (!(rtc->flags & CLOCKF_GETTIME_NO_ADJ)) {
- timespecadd(ts, &rtc->resadj);
+ timespecadd(ts, &rtc->resadj, ts);
ts->tv_sec += utc_offset();
}
if (!debug_read) {
Index: sys/kern/uipc_mqueue.c
===================================================================
--- sys/kern/uipc_mqueue.c
+++ sys/kern/uipc_mqueue.c
@@ -1738,9 +1738,8 @@
goto bad;
}
for (;;) {
- ts2 = *abs_timeout;
getnanotime(&ts);
- timespecsub(&ts2, &ts);
+ timespecsub(abs_timeout, &ts, &ts2);
if (ts2.tv_sec < 0 || (ts2.tv_sec == 0 && ts2.tv_nsec <= 0)) {
error = ETIMEDOUT;
break;
@@ -1890,9 +1889,8 @@
}
for (;;) {
- ts2 = *abs_timeout;
getnanotime(&ts);
- timespecsub(&ts2, &ts);
+ timespecsub(abs_timeout, &ts, &ts2);
if (ts2.tv_sec < 0 || (ts2.tv_sec == 0 && ts2.tv_nsec <= 0)) {
error = ETIMEDOUT;
return (error);
Index: sys/kern/uipc_sem.c
===================================================================
--- sys/kern/uipc_sem.c
+++ sys/kern/uipc_sem.c
@@ -845,7 +845,7 @@
for (;;) {
ts1 = *abstime;
getnanotime(&ts2);
- timespecsub(&ts1, &ts2);
+ timespecsub(&ts1, &ts2, &ts1);
TIMESPEC_TO_TIMEVAL(&tv, &ts1);
if (tv.tv_sec < 0) {
error = ETIMEDOUT;
Index: sys/mips/ingenic/jz4780_smb.c
===================================================================
--- sys/mips/ingenic/jz4780_smb.c
+++ sys/mips/ingenic/jz4780_smb.c
@@ -248,7 +248,7 @@
SMB_WRITE(sc, SMBDC, SMBDC_CMD);
for (;;) {
getnanouptime(&diff);
- timespecsub(&diff, &start);
+ timespecsub(&diff, &start, &diff);
if ((SMB_READ(sc, SMBST) & SMBST_RFNE) != 0) {
msg->buf[msg->len - resid] =
SMB_READ(sc, SMBDC) & SMBDC_DAT;
@@ -293,7 +293,7 @@
for (resid = msg->len; resid > 0; resid--) {
for (;;) {
getnanouptime(&diff);
- timespecsub(&diff, &start);
+ timespecsub(&diff, &start, &diff);
if ((SMB_READ(sc, SMBST) & SMBST_TFNF) != 0) {
SMB_WRITE(sc, SMBDC,
msg->buf[msg->len - resid]);
Index: sys/netinet/ip_input.c
===================================================================
--- sys/netinet/ip_input.c
+++ sys/netinet/ip_input.c
@@ -1199,7 +1199,7 @@
mbuf_tstmp2timespec(m, &ts);
getboottimebin(&boottimebin);
bintime2timespec(&boottimebin, &ts1);
- timespecadd(&ts, &ts1);
+ timespecadd(&ts, &ts1, &ts);
} else {
nanotime(&ts);
}
Index: sys/netinet6/ip6_input.c
===================================================================
--- sys/netinet6/ip6_input.c
+++ sys/netinet6/ip6_input.c
@@ -1267,7 +1267,7 @@
mbuf_tstmp2timespec(m, &t.ts);
getboottimebin(&boottimebin);
bintime2timespec(&boottimebin, &ts1);
- timespecadd(&t.ts, &ts1);
+ timespecadd(&t.ts, &ts1, &t.ts);
} else {
nanotime(&t.ts);
}
Index: sys/netsmb/smb_iod.c
===================================================================
--- sys/netsmb/smb_iod.c
+++ sys/netsmb/smb_iod.c
@@ -557,9 +557,9 @@
break;
case SMBRQ_SENT:
SMB_TRAN_GETPARAM(vcp, SMBTP_TIMEOUT, &tstimeout);
- timespecadd(&tstimeout, &tstimeout);
+ timespecadd(&tstimeout, &tstimeout, &tstimeout);
getnanotime(&ts);
- timespecsub(&ts, &tstimeout);
+ timespecsub(&ts, &tstimeout, &ts);
if (timespeccmp(&ts, &rqp->sr_timesent, >)) {
smb_iod_rqprocessed(rqp, ETIMEDOUT);
}
@@ -630,7 +630,7 @@
#if 0
if (iod->iod_state == SMBIOD_ST_VCACTIVE) {
getnanotime(&tsnow);
- timespecsub(&tsnow, &iod->iod_pingtimo);
+ timespecsub(&tsnow, &iod->iod_pingtimo, &tsnow);
if (timespeccmp(&tsnow, &iod->iod_lastrqsent, >)) {
smb_smb_echo(vcp, &iod->iod_scred);
}
Index: sys/netsmb/smb_trantcp.c
===================================================================
--- sys/netsmb/smb_trantcp.c
+++ sys/netsmb/smb_trantcp.c
@@ -546,15 +546,14 @@
if (error)
return error;
getnanotime(&ts2);
- timespecsub(&ts2, &ts1);
+ timespecsub(&ts2, &ts1, &ts2);
if (ts2.tv_sec == 0) {
ts2.tv_sec = 1;
ts2.tv_nsec = 0;
}
- nbp->nbp_timo = ts2;
- timespecadd(&nbp->nbp_timo, &ts2);
- timespecadd(&nbp->nbp_timo, &ts2);
- timespecadd(&nbp->nbp_timo, &ts2); /* * 4 */
+ timespecadd(&ts2, &ts2, &nbp->nbp_timo);
+ timespecadd(&nbp->nbp_timo, &ts2, &nbp->nbp_timo);
+ timespecadd(&nbp->nbp_timo, &ts2, &nbp->nbp_timo); /* * 4 */
error = nbssn_rq_request(nbp, td);
if (error)
smb_nbst_disconnect(vcp, td);
Index: sys/opencrypto/crypto.c
===================================================================
--- sys/opencrypto/crypto.c
+++ sys/opencrypto/crypto.c
@@ -1116,7 +1116,7 @@
if (u < delta.frac)
delta.sec--;
bintime2timespec(&delta, &t);
- timespecadd(&ts->acc, &t);
+ timespecadd(&ts->acc, &t, &ts->acc);
if (timespeccmp(&t, &ts->min, <))
ts->min = t;
if (timespeccmp(&t, &ts->max, >))
Index: sys/sys/param.h
===================================================================
--- sys/sys/param.h
+++ sys/sys/param.h
@@ -60,7 +60,7 @@
* in the range 5 to 9.
*/
#undef __FreeBSD_version
-#define __FreeBSD_version 1200060 /* Master, propagated to newvers */
+#define __FreeBSD_version 1200061 /* Master, propagated to newvers */
/*
* __FreeBSD_kernel__ indicates that this system uses the kernel of FreeBSD,
Index: sys/sys/time.h
===================================================================
--- sys/sys/time.h
+++ sys/sys/time.h
@@ -288,8 +288,6 @@
}
#endif /* __BSD_VISIBLE */
-#ifdef _KERNEL
-
/* Operations on timespecs */
#define timespecclear(tvp) ((tvp)->tv_sec = (tvp)->tv_nsec = 0)
#define timespecisset(tvp) ((tvp)->tv_sec || (tvp)->tv_nsec)
@@ -297,24 +295,27 @@
(((tvp)->tv_sec == (uvp)->tv_sec) ? \
((tvp)->tv_nsec cmp (uvp)->tv_nsec) : \
((tvp)->tv_sec cmp (uvp)->tv_sec))
-#define timespecadd(vvp, uvp) \
+
+#define timespecadd(tsp, usp, vsp) \
do { \
- (vvp)->tv_sec += (uvp)->tv_sec; \
- (vvp)->tv_nsec += (uvp)->tv_nsec; \
- if ((vvp)->tv_nsec >= 1000000000) { \
- (vvp)->tv_sec++; \
- (vvp)->tv_nsec -= 1000000000; \
+ (vsp)->tv_sec = (tsp)->tv_sec + (usp)->tv_sec; \
+ (vsp)->tv_nsec = (tsp)->tv_nsec + (usp)->tv_nsec; \
+ if ((vsp)->tv_nsec >= 1000000000L) { \
+ (vsp)->tv_sec++; \
+ (vsp)->tv_nsec -= 1000000000L; \
} \
} while (0)
-#define timespecsub(vvp, uvp) \
+#define timespecsub(tsp, usp, vsp) \
do { \
- (vvp)->tv_sec -= (uvp)->tv_sec; \
- (vvp)->tv_nsec -= (uvp)->tv_nsec; \
- if ((vvp)->tv_nsec < 0) { \
- (vvp)->tv_sec--; \
- (vvp)->tv_nsec += 1000000000; \
+ (vsp)->tv_sec = (tsp)->tv_sec - (usp)->tv_sec; \
+ (vsp)->tv_nsec = (tsp)->tv_nsec - (usp)->tv_nsec; \
+ if ((vsp)->tv_nsec < 0) { \
+ (vsp)->tv_sec--; \
+ (vsp)->tv_nsec += 1000000000L; \
} \
} while (0)
+
+#ifdef _KERNEL
/* Operations on timevals. */
Index: sys/ufs/ffs/ffs_snapshot.c
===================================================================
--- sys/ufs/ffs/ffs_snapshot.c
+++ sys/ufs/ffs/ffs_snapshot.c
@@ -694,7 +694,7 @@
vfs_write_resume(vp->v_mount, VR_START_WRITE | VR_NO_SUSPCLR);
if (collectsnapstats && starttime.tv_sec > 0) {
nanotime(&endtime);
- timespecsub(&endtime, &starttime);
+ timespecsub(&endtime, &starttime, &endtime);
printf("%s: suspended %ld.%03ld sec, redo %ld of %d\n",
vp->v_mount->mnt_stat.f_mntonname, (long)endtime.tv_sec,
endtime.tv_nsec / 1000000, redo, fs->fs_ncg);
Index: sys/x86/iommu/intel_dmar.h
===================================================================
--- sys/x86/iommu/intel_dmar.h
+++ sys/x86/iommu/intel_dmar.h
@@ -524,8 +524,7 @@
} else { \
forever = false; \
nanouptime(&curr); \
- last = curr; \
- timespecadd(&last, &dmar_hw_timeout); \
+ timespecadd(&curr, &dmar_hw_timeout, &last); \
} \
for (;;) { \
if (cond) { \
Index: tools/regression/posixsem/posixsem.c
===================================================================
--- tools/regression/posixsem/posixsem.c
+++ tools/regression/posixsem/posixsem.c
@@ -55,35 +55,6 @@
#include "test.h"
-/* Cut and pasted from kernel header, bah! */
-
-/* Operations on timespecs */
-#define timespecclear(tvp) ((tvp)->tv_sec = (tvp)->tv_nsec = 0)
-#define timespecisset(tvp) ((tvp)->tv_sec || (tvp)->tv_nsec)
-#define timespeccmp(tvp, uvp, cmp) \
- (((tvp)->tv_sec == (uvp)->tv_sec) ? \
- ((tvp)->tv_nsec cmp (uvp)->tv_nsec) : \
- ((tvp)->tv_sec cmp (uvp)->tv_sec))
-#define timespecadd(vvp, uvp) \
- do { \
- (vvp)->tv_sec += (uvp)->tv_sec; \
- (vvp)->tv_nsec += (uvp)->tv_nsec; \
- if ((vvp)->tv_nsec >= 1000000000) { \
- (vvp)->tv_sec++; \
- (vvp)->tv_nsec -= 1000000000; \
- } \
- } while (0)
-#define timespecsub(vvp, uvp) \
- do { \
- (vvp)->tv_sec -= (uvp)->tv_sec; \
- (vvp)->tv_nsec -= (uvp)->tv_nsec; \
- if ((vvp)->tv_nsec < 0) { \
- (vvp)->tv_sec--; \
- (vvp)->tv_nsec += 1000000000; \
- } \
- } while (0)
-
-
#define TEST_PATH "/tmp/posixsem_regression_test"
#define ELAPSED(elapsed, limit) (abs((elapsed) - (limit)) < 100)
@@ -791,7 +762,7 @@
}
end.tv_sec = msec / 1000;
end.tv_nsec = msec % 1000 * 1000000;
- timespecadd(&end, &start);
+ timespecadd(&end, &start, &end);
if (ksem_timedwait(id, &end) < 0) {
if (errno != error) {
fail_errno("ksem_timedwait");
@@ -805,7 +776,7 @@
fail_errno("clock_gettime(CLOCK_REALTIME)");
return (-1);
}
- timespecsub(&end, &start);
+ timespecsub(&end, &start, &end);
*delta = end.tv_nsec / 1000000;
*delta += end.tv_sec * 1000;
return (0);
@@ -944,7 +915,7 @@
fail_errno("clock_gettime(CLOCK_REALTIME)");
return (-1);
}
- timespecsub(&end, &start);
+ timespecsub(&end, &start, &end);
*delta = end.tv_nsec / 1000000;
*delta += end.tv_sec * 1000;
return (0);
Index: tools/regression/sockets/unix_cmsg/uc_check_time.c
===================================================================
--- tools/regression/sockets/unix_cmsg/uc_check_time.c
+++ tools/regression/sockets/unix_cmsg/uc_check_time.c
@@ -35,20 +35,6 @@
static const struct timeval max_diff_tv = {.tv_sec = 1, .tv_usec = 0};
static const struct timespec max_diff_ts = {.tv_sec = 1, .tv_nsec = 0};
-#define timespeccmp(tvp, uvp, cmp) \
- (((tvp)->tv_sec == (uvp)->tv_sec) ? \
- ((tvp)->tv_nsec cmp (uvp)->tv_nsec) : \
- ((tvp)->tv_sec cmp (uvp)->tv_sec))
-#define timespecsub(vvp, uvp) \
- do { \
- (vvp)->tv_sec -= (uvp)->tv_sec; \
- (vvp)->tv_nsec -= (uvp)->tv_nsec; \
- if ((vvp)->tv_nsec < 0) { \
- (vvp)->tv_sec--; \
- (vvp)->tv_nsec += 1000000000; \
- } \
- } while (0)
-
int
uc_check_bintime(const struct bintime *mt)
{
@@ -79,7 +65,7 @@
if (clock_gettime(CLOCK_REALTIME, &ct) < 0)
return (-1);
- timespecsub(&ct, bt);
+ timespecsub(&ct, bt, &ct);
if (!timespeccmp(&ct, &max_diff_ts, <))
return (-1);
@@ -93,7 +79,7 @@
if (clock_gettime(CLOCK_MONOTONIC, &ct) < 0)
return (-1);
- timespecsub(&ct, bt);
+ timespecsub(&ct, bt, &ct);
if (!timespeccmp(&ct, &max_diff_ts, <))
return (-1);
Index: tools/tools/netrate/juggle/juggle.c
===================================================================
--- tools/tools/netrate/juggle/juggle.c
+++ tools/tools/netrate/juggle/juggle.c
@@ -93,19 +93,6 @@
*/
#define PIPELINE_MAX 4
-/*
- * As in all programs, steal timespecsub() from time.h.
- */
-#define timespecsub(vvp, uvp) \
- do { \
- (vvp)->tv_sec -= (uvp)->tv_sec; \
- (vvp)->tv_nsec -= (uvp)->tv_nsec; \
- if ((vvp)->tv_nsec < 0) { \
- (vvp)->tv_sec--; \
- (vvp)->tv_nsec += 1000000000; \
- } \
- } while (0)
-
static int
udp_create(int *fd1p, int *fd2p)
{
@@ -277,7 +264,7 @@
if (clock_gettime(CLOCK_REALTIME, &tfinish) < 0)
err(-1, "juggle: clock_gettime");
- timespecsub(&tfinish, &tstart);
+ timespecsub(&tfinish, &tstart, &tfinish);
return (tfinish);
}
@@ -373,7 +360,7 @@
if (pthread_join(thread, NULL) != 0)
err(-1, "thread_juggle: pthread_join");
- timespecsub(&tfinish, &tstart);
+ timespecsub(&tfinish, &tstart, &tfinish);
return (tfinish);
}
@@ -458,7 +445,7 @@
if (wpid != pid)
errx(-1, "process_juggle: waitpid: pid != wpid");
- timespecsub(&tfinish, &tstart);
+ timespecsub(&tfinish, &tstart, &tfinish);
return (tfinish);
}
Index: tools/tools/netrate/tcpp/tcpp_client.c
===================================================================
--- tools/tools/netrate/tcpp/tcpp_client.c
+++ tools/tools/netrate/tcpp/tcpp_client.c
@@ -57,17 +57,7 @@
#define min(x, y) (x < y ? x : y)
-#define timespecsub(vvp, uvp) \
- do { \
- (vvp)->tv_sec -= (uvp)->tv_sec; \
- (vvp)->tv_nsec -= (uvp)->tv_nsec; \
- if ((vvp)->tv_nsec < 0) { \
- (vvp)->tv_sec--; \
- (vvp)->tv_nsec += 1000000000; \
- } \
- } while (0)
-
/*
* Gist of each client worker: build up to mflag connections at a time, and
* pump data in to them somewhat fairly until tflag connections have been
@@ -336,7 +326,7 @@
if (sysctlbyname(SYSCTLNAME_CPTIME, &cp_time_finish, &size, NULL, 0)
< 0)
err(-1, "sysctlbyname: %s", SYSCTLNAME_CPTIME);
- timespecsub(&ts_finish, &ts_start);
+ timespecsub(&ts_finish, &ts_start, &ts_finish);
if (failed)
errx(-1, "Too many errors");
Index: tools/tools/syscall_timing/syscall_timing.c
===================================================================
--- tools/tools/syscall_timing/syscall_timing.c
+++ tools/tools/syscall_timing/syscall_timing.c
@@ -53,16 +53,6 @@
static int alarm_timeout;
static volatile int alarm_fired;
-#define timespecsub(vvp, uvp) \
- do { \
- (vvp)->tv_sec -= (uvp)->tv_sec; \
- (vvp)->tv_nsec -= (uvp)->tv_nsec; \
- if ((vvp)->tv_nsec < 0) { \
- (vvp)->tv_sec--; \
- (vvp)->tv_nsec += 1000000000; \
- } \
- } while (0)
-
static void
alarm_handler(int signum)
{
@@ -910,7 +900,7 @@
for (k = 0; k < loops; k++) {
calls = the_test->t_func(iterations, the_test->t_int,
path);
- timespecsub(&ts_end, &ts_start);
+ timespecsub(&ts_end, &ts_start, &ts_end);
printf("%s\t%d\t", the_test->t_name, k);
printf("%ju.%09ju\t%ju\t", (uintmax_t)ts_end.tv_sec,
(uintmax_t)ts_end.tv_nsec, calls);
Index: usr.bin/truss/setup.c
===================================================================
--- usr.bin/truss/setup.c
+++ usr.bin/truss/setup.c
@@ -41,6 +41,7 @@
#include <sys/ptrace.h>
#include <sys/sysctl.h>
+#include <sys/time.h>
#include <sys/wait.h>
#include <assert.h>
@@ -522,12 +523,12 @@
len += fprintf(info->outfile, ": ");
}
if (info->flags & ABSOLUTETIMESTAMPS) {
- timespecsubt(&t->after, &info->start_time, &timediff);
+ timespecsub(&t->after, &info->start_time, &timediff);
len += fprintf(info->outfile, "%jd.%09ld ",
(intmax_t)timediff.tv_sec, timediff.tv_nsec);
}
if (info->flags & RELATIVETIMESTAMPS) {
- timespecsubt(&t->after, &t->before, &timediff);
+ timespecsub(&t->after, &t->before, &timediff);
len += fprintf(info->outfile, "%jd.%09ld ",
(intmax_t)timediff.tv_sec, timediff.tv_nsec);
}
Index: usr.bin/truss/syscalls.c
===================================================================
--- usr.bin/truss/syscalls.c
+++ usr.bin/truss/syscalls.c
@@ -50,6 +50,7 @@
#include <sys/socket.h>
#define _WANT_FREEBSD11_STAT
#include <sys/stat.h>
+#include <sys/time.h>
#include <sys/un.h>
#include <sys/wait.h>
#include <netinet/in.h>
@@ -2637,7 +2638,7 @@
t = trussinfo->curthread;
sc = t->cs.sc;
if (trussinfo->flags & COUNTONLY) {
- timespecsubt(&t->after, &t->before, &timediff);
+ timespecsub(&t->after, &t->before, &timediff);
timespecadd(&sc->time, &timediff, &sc->time);
sc->ncalls++;
if (errorp)
Index: usr.bin/truss/truss.h
===================================================================
--- usr.bin/truss/truss.h
+++ usr.bin/truss/truss.h
@@ -119,23 +119,3 @@
LIST_HEAD(, procinfo) proclist;
};
-
-#define timespecsubt(tvp, uvp, vvp) \
- do { \
- (vvp)->tv_sec = (tvp)->tv_sec - (uvp)->tv_sec; \
- (vvp)->tv_nsec = (tvp)->tv_nsec - (uvp)->tv_nsec; \
- if ((vvp)->tv_nsec < 0) { \
- (vvp)->tv_sec--; \
- (vvp)->tv_nsec += 1000000000; \
- } \
- } while (0)
-
-#define timespecadd(tvp, uvp, vvp) \
- do { \
- (vvp)->tv_sec = (tvp)->tv_sec + (uvp)->tv_sec; \
- (vvp)->tv_nsec = (tvp)->tv_nsec + (uvp)->tv_nsec; \
- if ((vvp)->tv_nsec > 1000000000) { \
- (vvp)->tv_sec++; \
- (vvp)->tv_nsec -= 1000000000; \
- } \
- } while (0)
Index: usr.sbin/camdd/camdd.c
===================================================================
--- usr.sbin/camdd/camdd.c
+++ usr.sbin/camdd/camdd.c
@@ -429,24 +429,7 @@
#define min(a, b) (a < b) ? a : b
#endif
-/*
- * XXX KDM private copy of timespecsub(). This is normally defined in
- * sys/time.h, but is only enabled in the kernel. If that definition is
- * enabled in userland, it breaks the build of libnetbsd.
- */
-#ifndef timespecsub
-#define timespecsub(vvp, uvp) \
- do { \
- (vvp)->tv_sec -= (uvp)->tv_sec; \
- (vvp)->tv_nsec -= (uvp)->tv_nsec; \
- if ((vvp)->tv_nsec < 0) { \
- (vvp)->tv_sec--; \
- (vvp)->tv_nsec += 1000000000; \
- } \
- } while (0)
-#endif
-
/* Generically useful offsets into the peripheral private area */
#define ppriv_ptr0 periph_priv.entries[0].ptr
#define ppriv_ptr1 periph_priv.entries[1].ptr
@@ -3073,7 +3056,7 @@
return;
}
- timespecsub(&done_time, start_time);
+ timespecsub(&done_time, start_time, &done_time);
total_ns = done_time.tv_nsec + (done_time.tv_sec * 1000000000);
total_sec = total_ns;

File Metadata

Mime Type
text/plain
Expires
Sat, Feb 14, 1:43 AM (5 h, 39 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
28684006
Default Alt Text
D14725.id40394.diff (41 KB)

Event Timeline