Commit 9b0605f9 authored by Paolo Bonzini's avatar Paolo Bonzini
Browse files

cpus: tcg: unregister thread with RCU, fix exiting of loop on unplug



Keep running until cpu_can_run(cpu) becomes false, for consistency
with other acceslerators.

Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
parent d2831ab0
Loading
Loading
Loading
Loading
+7 −7
Original line number Diff line number Diff line
@@ -1467,6 +1467,7 @@ static void *qemu_tcg_rr_cpu_thread_fn(void *arg)
        deal_with_unplugged_cpus();
    }

    rcu_unregister_thread();
    return NULL;
}

@@ -1603,18 +1604,17 @@ static void *qemu_tcg_cpu_thread_fn(void *arg)
                /* Ignore everything else? */
                break;
            }
        } else if (cpu->unplug) {
            qemu_tcg_destroy_vcpu(cpu);
            cpu->created = false;
            qemu_cond_signal(&qemu_cpu_cond);
            qemu_mutex_unlock_iothread();
            return NULL;
        }

        atomic_mb_set(&cpu->exit_request, 0);
        qemu_wait_io_event(cpu);
    }
    } while (!cpu->unplug || cpu_can_run(cpu));

    qemu_tcg_destroy_vcpu(cpu);
    cpu->created = false;
    qemu_cond_signal(&qemu_cpu_cond);
    qemu_mutex_unlock_iothread();
    rcu_unregister_thread();
    return NULL;
}