softmmu/cpus: Only set parallel_cpus for SMP

Do not set parallel_cpus if there is only one cpu instantiated.
This will allow tcg to use serial code to implement atomics.

Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
This commit is contained in:
Richard Henderson 2020-08-05 16:06:26 -07:00
parent e7e8f33fb6
commit 4ca3d09cd9

View File

@ -1895,6 +1895,16 @@ static void qemu_tcg_init_vcpu(CPUState *cpu)
if (!tcg_region_inited) { if (!tcg_region_inited) {
tcg_region_inited = 1; tcg_region_inited = 1;
tcg_region_init(); tcg_region_init();
/*
* If MTTCG, and we will create multiple cpus,
* then we will have cpus running in parallel.
*/
if (qemu_tcg_mttcg_enabled()) {
MachineState *ms = MACHINE(qdev_get_machine());
if (ms->smp.max_cpus > 1) {
parallel_cpus = true;
}
}
} }
if (qemu_tcg_mttcg_enabled() || !single_tcg_cpu_thread) { if (qemu_tcg_mttcg_enabled() || !single_tcg_cpu_thread) {
@ -1904,7 +1914,6 @@ static void qemu_tcg_init_vcpu(CPUState *cpu)
if (qemu_tcg_mttcg_enabled()) { if (qemu_tcg_mttcg_enabled()) {
/* create a thread per vCPU with TCG (MTTCG) */ /* create a thread per vCPU with TCG (MTTCG) */
parallel_cpus = true;
snprintf(thread_name, VCPU_THREAD_NAME_SIZE, "CPU %d/TCG", snprintf(thread_name, VCPU_THREAD_NAME_SIZE, "CPU %d/TCG",
cpu->cpu_index); cpu->cpu_index);