summaryrefslogtreecommitdiffstats
path: root/sys/cddl/dev/dtrace/i386/dtrace_subr.c
diff options
context:
space:
mode:
authoravg <avg@FreeBSD.org>2010-12-07 09:03:17 +0000
committeravg <avg@FreeBSD.org>2010-12-07 09:03:17 +0000
commitdad6f05965f5a9514b74be303115283773607b77 (patch)
tree243dfa141c42fe739c660dfe0e7723aa29b94543 /sys/cddl/dev/dtrace/i386/dtrace_subr.c
parent7b4239469b3f3ef3a4e1b7e86dea9441dce1257f (diff)
downloadFreeBSD-src-dad6f05965f5a9514b74be303115283773607b77.zip
FreeBSD-src-dad6f05965f5a9514b74be303115283773607b77.tar.gz
dtrace_gethrtime_init: pin to master while examining other CPUs
Also use pc_cpumask to be future-friendly. Reviewed by: jhb MFC after: 2 weeks
Diffstat (limited to 'sys/cddl/dev/dtrace/i386/dtrace_subr.c')
-rw-r--r--sys/cddl/dev/dtrace/i386/dtrace_subr.c9
1 files changed, 5 insertions, 4 deletions
diff --git a/sys/cddl/dev/dtrace/i386/dtrace_subr.c b/sys/cddl/dev/dtrace/i386/dtrace_subr.c
index 9d85873..8ac833b 100644
--- a/sys/cddl/dev/dtrace/i386/dtrace_subr.c
+++ b/sys/cddl/dev/dtrace/i386/dtrace_subr.c
@@ -405,6 +405,7 @@ dtrace_gethrtime_init_cpu(void *arg)
static void
dtrace_gethrtime_init(void *arg)
{
+ struct pcpu *pc;
uint64_t tsc_f;
cpumask_t map;
int i;
@@ -437,15 +438,14 @@ dtrace_gethrtime_init(void *arg)
nsec_scale = ((uint64_t)NANOSEC << SCALE_SHIFT) / tsc_f;
/* The current CPU is the reference one. */
+ sched_pin();
tsc_skew[curcpu] = 0;
-
CPU_FOREACH(i) {
if (i == curcpu)
continue;
- map = 0;
- map |= (1 << curcpu);
- map |= (1 << i);
+ pc = pcpu_find(i);
+ map = PCPU_GET(cpumask) | pc->pc_cpumask;
smp_rendezvous_cpus(map, dtrace_gethrtime_init_sync,
dtrace_gethrtime_init_cpu,
@@ -453,6 +453,7 @@ dtrace_gethrtime_init(void *arg)
tsc_skew[i] = tgt_cpu_tsc - hst_cpu_tsc;
}
+ sched_unpin();
}
SYSINIT(dtrace_gethrtime_init, SI_SUB_SMP, SI_ORDER_ANY, dtrace_gethrtime_init, NULL);
OpenPOWER on IntegriCloud