Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F144819539
D14725.id40394.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
41 KB
Referenced Files
None
Subscribers
None
D14725.id40394.diff
View Options
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
Details
Attached
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)
Attached To
Mode
D14725: Make timespecadd(3) and friends public
Attached
Detach File
Event Timeline
Log In to Comment