diff options
author | avg <avg@FreeBSD.org> | 2010-12-07 09:03:17 +0000 |
---|---|---|
committer | avg <avg@FreeBSD.org> | 2010-12-07 09:03:17 +0000 |
commit | dad6f05965f5a9514b74be303115283773607b77 (patch) | |
tree | 243dfa141c42fe739c660dfe0e7723aa29b94543 /sys/cddl/dev/dtrace/i386/dtrace_subr.c | |
parent | 7b4239469b3f3ef3a4e1b7e86dea9441dce1257f (diff) | |
download | FreeBSD-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.c | 9 |
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); |