diff options
| author | Mark Johnston <markj@FreeBSD.org> | 2017-12-18 17:26:24 +0000 | 
|---|---|---|
| committer | Mark Johnston <markj@FreeBSD.org> | 2017-12-18 17:26:24 +0000 | 
| commit | 6c7828a2807ea5e50c79ca42dbedf2b589ce63b2 (patch) | |
| tree | 6c3f315b9650d6b600234906118e374f666b42b2 | |
| parent | d5d5600725d3ba56f33f65e08738f58bfe38ee64 (diff) | |
Notes
| -rw-r--r-- | sys/cddl/dev/dtrace/amd64/dtrace_subr.c | 9 | ||||
| -rw-r--r-- | sys/cddl/dev/dtrace/i386/dtrace_subr.c | 9 | 
2 files changed, 12 insertions, 6 deletions
diff --git a/sys/cddl/dev/dtrace/amd64/dtrace_subr.c b/sys/cddl/dev/dtrace/amd64/dtrace_subr.c index 9ae4ff41143b..6b1ceba4916b 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 165c0672b097..fab894592164 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) +  | 
