diff --git a/sys/amd64/amd64/mp_machdep.c b/sys/amd64/amd64/mp_machdep.c --- a/sys/amd64/amd64/mp_machdep.c +++ b/sys/amd64/amd64/mp_machdep.c @@ -660,6 +660,7 @@ cpuset_t other_cpus, mask1; uint32_t generation, *p_cpudone; int cpu; + bool is_all; /* * It is not necessary to signal other CPUs while booting or @@ -673,14 +674,10 @@ /* * Check for other cpus. Return if none. */ - if (!CPU_CMP(&mask, &all_cpus)) { - if (mp_ncpus <= 1) - goto local_cb; - } else { - CPU_CLR(PCPU_GET(cpuid), &mask); - if (CPU_EMPTY(&mask)) - goto local_cb; - } + is_all = !CPU_CMP(&mask, &all_cpus); + CPU_CLR(PCPU_GET(cpuid), &mask); + if (CPU_EMPTY(&mask)) + goto local_cb; /* * Initiator must have interrupts enabled, which prevents @@ -719,7 +716,7 @@ * (zeroing slot) and reading from it below (wait for * acknowledgment). */ - if (!CPU_CMP(&mask, &all_cpus)) { + if (is_all) { ipi_all_but_self(IPI_INVLOP); other_cpus = all_cpus; CPU_CLR(PCPU_GET(cpuid), &other_cpus);