diff --git a/sys/cddl/dev/dtrace/amd64/dtrace_subr.c b/sys/cddl/dev/dtrace/amd64/dtrace_subr.c index 9ae4ff41143..6b1ceba4916 100644 --- a/sys/cddl/dev/dtrace/amd64/dtrace_subr.c +++ b/sys/cddl/dev/dtrace/amd64/dtrace_subr.c @@ -353,11 +353,11 @@ SYSINIT(dtrace_gethrtime_init, SI_SUB_SMP, SI_ORDER_ANY, dtrace_gethrtime_init, * Returns nanoseconds since boot. */ uint64_t -dtrace_gethrtime() +dtrace_gethrtime(void) { uint64_t tsc; - uint32_t lo; - uint32_t hi; + uint32_t lo, hi; + register_t rflags; /* * We split TSC value into lower and higher 32-bit halves and separately @@ -365,7 +365,10 @@ dtrace_gethrtime() * (see nsec_scale calculations) taking into account 32-bit shift of * the higher half and finally add. */ + rflags = intr_disable(); tsc = rdtsc() - tsc_skew[curcpu]; + intr_restore(rflags); + lo = tsc; hi = tsc >> 32; return (((lo * nsec_scale) >> SCALE_SHIFT) + diff --git a/sys/cddl/dev/dtrace/i386/dtrace_subr.c b/sys/cddl/dev/dtrace/i386/dtrace_subr.c index 165c0672b09..fab89459216 100644 --- a/sys/cddl/dev/dtrace/i386/dtrace_subr.c +++ b/sys/cddl/dev/dtrace/i386/dtrace_subr.c @@ -355,11 +355,11 @@ SYSINIT(dtrace_gethrtime_init, SI_SUB_SMP, SI_ORDER_ANY, dtrace_gethrtime_init, * Returns nanoseconds since boot. */ uint64_t -dtrace_gethrtime() +dtrace_gethrtime(void) { uint64_t tsc; - uint32_t lo; - uint32_t hi; + uint32_t lo, hi; + register_t eflags; /* * We split TSC value into lower and higher 32-bit halves and separately @@ -367,7 +367,10 @@ dtrace_gethrtime() * (see nsec_scale calculations) taking into account 32-bit shift of * the higher half and finally add. */ + eflags = intr_disable(); tsc = rdtsc() - tsc_skew[curcpu]; + intr_restore(eflags); + lo = tsc; hi = tsc >> 32; return (((lo * nsec_scale) >> SCALE_SHIFT) +