Changeset View
Changeset View
Standalone View
Standalone View
sys/i386/i386/mp_machdep.c
Show First 20 Lines • Show All 592 Lines • ▼ Show 20 Lines | if (CPU_ISFULLSET(&mask)) { | ||||
ipi_all_but_self(vector); | ipi_all_but_self(vector); | ||||
other_cpus = all_cpus; | other_cpus = all_cpus; | ||||
CPU_CLR(PCPU_GET(cpuid), &other_cpus); | CPU_CLR(PCPU_GET(cpuid), &other_cpus); | ||||
} else { | } else { | ||||
other_cpus = mask; | other_cpus = mask; | ||||
ipi_selected(mask, vector); | ipi_selected(mask, vector); | ||||
} | } | ||||
curcpu_cb(pmap, addr1, addr2); | curcpu_cb(pmap, addr1, addr2); | ||||
while ((cpu = CPU_FFS(&other_cpus)) != 0) { | CPU_FOREACH_ISSET(cpu, &other_cpus) { | ||||
cpu--; | |||||
CPU_CLR(cpu, &other_cpus); | |||||
p_cpudone = &cpuid_to_pcpu[cpu]->pc_smp_tlb_done; | p_cpudone = &cpuid_to_pcpu[cpu]->pc_smp_tlb_done; | ||||
while (*p_cpudone != generation) | while (*p_cpudone != generation) | ||||
ia32_pause(); | ia32_pause(); | ||||
} | } | ||||
mtx_unlock_spin(&smp_ipi_mtx); | mtx_unlock_spin(&smp_ipi_mtx); | ||||
sched_unpin(); | sched_unpin(); | ||||
return; | return; | ||||
▲ Show 20 Lines • Show All 132 Lines • Show Last 20 Lines |