diff options
author | Patrick Mooney <pmooney@pfmooney.com> | 2022-03-02 12:44:01 -0600 |
---|---|---|
committer | Patrick Mooney <pmooney@oxide.computer> | 2022-03-30 15:50:42 +0000 |
commit | 5103e761e384621c5728a6d1f4b0bfdc1be233a4 (patch) | |
tree | 4902e230f96adbc93d7aab7b2408f748a774e7c8 /usr/src/compat | |
parent | db9aa506ce275f82ee72f31fc2e6e3c53d1212b7 (diff) | |
download | illumos-joyent-5103e761e384621c5728a6d1f4b0bfdc1be233a4.tar.gz |
14569 bhyve should consolidate on hrtime
14486 bhyve needs instruction emul tests
Reviewed by: Andy Fiddaman <andy@omnios.org>
Reviewed by: Luqman Aden <luqman@oxide.computer>
Approved by: Dan McDonald <danmcd@joyent.com>
Diffstat (limited to 'usr/src/compat')
-rw-r--r-- | usr/src/compat/bhyve/sys/callout.h | 12 | ||||
-rw-r--r-- | usr/src/compat/bhyve/sys/time.h | 136 | ||||
-rw-r--r-- | usr/src/compat/bhyve/sys/types.h | 5 |
3 files changed, 4 insertions, 149 deletions
diff --git a/usr/src/compat/bhyve/sys/callout.h b/usr/src/compat/bhyve/sys/callout.h index 11823e6321..4156c2d4c6 100644 --- a/usr/src/compat/bhyve/sys/callout.h +++ b/usr/src/compat/bhyve/sys/callout.h @@ -45,8 +45,6 @@ struct callout { #define callout_pending(c) ((c)->c_target > (c)->c_fired) void vmm_glue_callout_init(struct callout *c, int mpsafe); -int vmm_glue_callout_reset_sbt(struct callout *c, sbintime_t sbt, - sbintime_t pr, void (*func)(void *), void *arg, int flags); int vmm_glue_callout_stop(struct callout *c); int vmm_glue_callout_drain(struct callout *c); @@ -71,12 +69,10 @@ callout_drain(struct callout *c) return (vmm_glue_callout_drain(c)); } -static __inline int -callout_reset_sbt(struct callout *c, sbintime_t sbt, sbintime_t pr, - void (*func)(void *), void *arg, int flags) -{ - return (vmm_glue_callout_reset_sbt(c, sbt, pr, func, arg, flags)); -} +void callout_reset_hrtime(struct callout *c, hrtime_t target, + void (*func)(void *), void *arg, int flags); +uint64_t hrt_freq_count(hrtime_t interval, uint32_t freq); +hrtime_t hrt_freq_interval(uint32_t freq, uint64_t count); #endif /* _COMPAT_FREEBSD_SYS_CALLOUT_H_ */ diff --git a/usr/src/compat/bhyve/sys/time.h b/usr/src/compat/bhyve/sys/time.h deleted file mode 100644 index 48bdcc304e..0000000000 --- a/usr/src/compat/bhyve/sys/time.h +++ /dev/null @@ -1,136 +0,0 @@ -/* - * This file and its contents are supplied under the terms of the - * Common Development and Distribution License ("CDDL"), version 1.0. - * You may only use this file in accordance with the terms of version - * 1.0 of the CDDL. - * - * A full copy of the text of the CDDL should have accompanied this - * source. A copy of the CDDL is also available via the Internet at - * http://www.illumos.org/license/CDDL. - */ - -/* - * Copyright 2013 Pluribus Networks Inc. - * Copyright 2020 Oxide Computer Company - */ - -#ifndef _COMPAT_FREEBSD_SYS_TIME_H_ -#define _COMPAT_FREEBSD_SYS_TIME_H_ - -#include_next <sys/time.h> - -#define tc_precexp 0 - -struct bintime { - ulong_t sec; /* seconds */ - uint64_t frac; /* 64 bit fraction of a second */ -}; - -#define BT2FREQ(bt) \ - (((uint64_t)0x8000000000000000 + ((bt)->frac >> 2)) / \ - ((bt)->frac >> 1)) - -#define FREQ2BT(freq, bt) \ -{ \ - (bt)->sec = 0; \ - (bt)->frac = ((uint64_t)0x8000000000000000 / (freq)) << 1; \ -} - -static __inline void -binuptime(struct bintime *bt) -{ - hrtime_t now = gethrtime(); - - bt->sec = now / 1000000000; - /* 18446744073 = int(2^64 / 1000000000) = 1ns in 64-bit fractions */ - bt->frac = (now % 1000000000) * (uint64_t)18446744073LL; -} - -#define bintime_cmp(a, b, cmp) \ - (((a)->sec == (b)->sec) ? \ - ((a)->frac cmp (b)->frac) : \ - ((a)->sec cmp (b)->sec)) - -/* - * The bintime_cmp() macro is problematic for a couple reasons: - * 1. Bearing a lowercase name suggests it is a function rather than a macro. - * 2. Placing the comparison operator as the last argument runs afoul of our - * cstyle rules, unlike cases such as VERIFY3*(). - * - * To remedy these issues in illumos bhyve, we provide a slightly modified - * version which addresses both problems. - */ -#define BINTIME_CMP(a, cmp, b) bintime_cmp((a), (b), cmp) - -#define SBT_1S ((sbintime_t)1 << 32) -#define SBT_1M (SBT_1S * 60) -#define SBT_1MS (SBT_1S / 1000) -#define SBT_1US (SBT_1S / 1000000) -#define SBT_1NS (SBT_1S / 1000000000) -#define SBT_MAX 0x7fffffffffffffffLL - - -static __inline void -bintime_add(struct bintime *bt, const struct bintime *bt2) -{ - uint64_t u; - - u = bt->frac; - bt->frac += bt2->frac; - if (u > bt->frac) - bt->sec++; - bt->sec += bt2->sec; -} - -static __inline void -bintime_sub(struct bintime *bt, const struct bintime *bt2) -{ - uint64_t u; - - u = bt->frac; - bt->frac -= bt2->frac; - if (u < bt->frac) - bt->sec--; - bt->sec -= bt2->sec; -} - -static __inline void -bintime_mul(struct bintime *bt, u_int x) -{ - uint64_t p1, p2; - - p1 = (bt->frac & 0xffffffffull) * x; - p2 = (bt->frac >> 32) * x + (p1 >> 32); - bt->sec *= x; - bt->sec += (p2 >> 32); - bt->frac = (p2 << 32) | (p1 & 0xffffffffull); -} - -static __inline sbintime_t -bttosbt(const struct bintime bt) -{ - return (((sbintime_t)bt.sec << 32) + (bt.frac >> 32)); -} - -static __inline struct bintime -sbttobt(sbintime_t _sbt) -{ - struct bintime _bt; - - _bt.sec = _sbt >> 32; - _bt.frac = _sbt << 32; - return (_bt); -} - -static __inline sbintime_t -sbinuptime(void) -{ - hrtime_t hrt = gethrtime(); - uint64_t sec = hrt / NANOSEC; - uint64_t nsec = hrt % NANOSEC; - - return (((sbintime_t)sec << 32) + - (nsec * (((uint64_t)1 << 63) / 500000000) >> 32)); -} - -#endif /* _COMPAT_FREEBSD_SYS_TIME_H_ */ diff --git a/usr/src/compat/bhyve/sys/types.h b/usr/src/compat/bhyve/sys/types.h index 63731da42e..baa4cad157 100644 --- a/usr/src/compat/bhyve/sys/types.h +++ b/usr/src/compat/bhyve/sys/types.h @@ -29,11 +29,6 @@ typedef __uint64_t u_int64_t; typedef __register_t register_t; #endif -#ifndef __SBINTIME_T_DEFINED -#define __SBINTIME_T_DEFINED -typedef __int64_t sbintime_t; -#endif - #ifndef __VM_MEMATTR_T_DEFINED #define __VM_MEMATTR_T_DEFINED typedef char vm_memattr_t; |