diff options
Diffstat (limited to 'sys/kern/kern_tc.c')
-rw-r--r-- | sys/kern/kern_tc.c | 46 |
1 files changed, 45 insertions, 1 deletions
diff --git a/sys/kern/kern_tc.c b/sys/kern/kern_tc.c index 88d4a3379f9..54d50b1a6f7 100644 --- a/sys/kern/kern_tc.c +++ b/sys/kern/kern_tc.c @@ -1,4 +1,4 @@ -/* $OpenBSD: kern_tc.c,v 1.57 2020/05/29 04:42:25 deraadt Exp $ */ +/* $OpenBSD: kern_tc.c,v 1.58 2020/06/22 21:16:07 cheloha Exp $ */ /* * Copyright (c) 2000 Poul-Henning Kamp <phk@FreeBSD.org> @@ -208,6 +208,28 @@ microuptime(struct timeval *tvp) BINTIME_TO_TIMEVAL(&bt, tvp); } +time_t +getuptime(void) +{ +#if defined(__LP64__) + return time_uptime; /* atomic */ +#else + time_t now; + struct timehands *th; + u_int gen; + + do { + th = timehands; + gen = th->th_generation; + membar_consumer(); + now = th->th_offset.sec; + membar_consumer(); + } while (gen == 0 || gen != th->th_generation); + + return now; +#endif +} + void binruntime(struct bintime *bt) { @@ -268,6 +290,28 @@ microtime(struct timeval *tvp) BINTIME_TO_TIMEVAL(&bt, tvp); } +time_t +gettime(void) +{ +#if defined(__LP64__) + return time_second; /* atomic */ +#else + time_t now; + struct timehands *th; + u_int gen; + + do { + th = timehands; + gen = th->th_generation; + membar_consumer(); + now = th->th_microtime.tv_sec; + membar_consumer(); + } while (gen == 0 || gen != th->th_generation); + + return now; +#endif +} + void getnanouptime(struct timespec *tsp) { |