void dtrace_xcall(processorid_t cpu, dtrace_xcall_t func, void *arg) { if (cpu == DTRACE_CPUALL) { xc_all(dtrace_xcall_func, (uint64_t)func, (uint64_t)arg); } else { xc_one(cpu, dtrace_xcall_func, (uint64_t)func, (uint64_t)arg); } }
/* ARGSUSED */ void cmp_error_resteer(processorid_t cpuid) { #ifndef _CMP_NO_ERROR_STEERING cpuset_t mycores; cpu_t *cpu; chipid_t chipid; int i; if (!cmp_cpu_is_cmp(cpuid)) return; ASSERT(MUTEX_HELD(&cpu_lock)); chipid = cpunodes[cpuid].portid; mycores = chips[chipid]; /* Look for an online sibling core */ for (i = 0; i < NCPU; i++) { if (i == cpuid) continue; if (CPU_IN_SET(mycores, i) && (cpu = cpu_get(i)) != NULL && cpu_is_active(cpu)) { /* Found one, reset error steering */ xc_one(i, (xcfunc_t *)set_cmp_error_steering, 0, 0); break; } } /* No online sibling cores, point to this core. */ if (i == NCPU) { xc_one(cpuid, (xcfunc_t *)set_cmp_error_steering, 0, 0); } #else /* Not all CMP's support (e.g. Olympus-C by Fujitsu) error steering */ return; #endif /* _CMP_NO_ERROR_STEERING */ }
/* * Ensure counters are enabled on the given processor. */ void kcpc_remote_program(cpu_t *cp) { xc_one(cp->cpu_id, kcpc_remoteprogram_func, 0, 0); }
/* * Ensure the counters are stopped on the given processor. * * Callers must ensure kernel preemption is disabled. */ void kcpc_remote_stop(cpu_t *cp) { xc_one(cp->cpu_id, kcpc_remotestop_func, 0, 0); }