FreeBSD/sys/x86/x86/mp_x86.c
/*
 * send an IPI to a set of cpus.
 */
send an IPI to a set of cpus.
send an IPI to a set of cpus .
void
ipi_selected(cpuset_t cpus, u_int ipi)
{
	int cpu;
	if (ipi == IPI_STOP_HARD)
		CPU_OR_ATOMIC(&ipi_stop_nmi_pending, &cpus);
	while ((cpu = CPU_FFS(&cpus)) != 0) {
		cpu--;
		CPU_CLR(cpu, &cpus);
		CTR3(KTR_SMP, "%s: cpu: %d ipi: %x", __func__, cpu, ipi);
		ipi_send_cpu(cpu, ipi);
	}
}
void ipi_selected ( cpuset_t cpus , u_int ipi ) { int cpu ; if ( ipi == IPI_STOP_HARD ) CPU_OR_ATOMIC ( & ipi_stop_nmi_pending , & cpus ) ; while ( ( cpu = CPU_FFS ( & cpus ) ) != 0 ) { cpu -- ; CPU_CLR ( cpu , & cpus ) ; CTR3 ( KTR_SMP , " " , __func__ , cpu , ipi ) ; ipi_send_cpu ( cpu , ipi ) ; } }
send an IPI to a set of cpus.
send an IPI to a set of cpus .
/*
	 * IPI_STOP_HARD maps to a NMI and the trap handler needs a bit
	 * of help in order to understand what is the source.
	 * Set the mask of receiving CPUs for this purpose.
	 */