s390x/tcg: fix CPU hotplug with single-threaded TCG
run_on_cpu() doesn't seem to work reliably until the CPU has been fully created if the single-threaded TCG main loop is already running. Therefore, hotplugging a CPU under single-threaded TCG does currently not work. We should use the direct call instead of going via run_on_cpu(). So let's use run_on_cpu() for KVM only - KVM requires it due to the initial CPU reset ioctl. As a nice side effect, we get rid of the ifdef. Reviewed-by: Thomas Huth <thuth@redhat.com> Signed-off-by: David Hildenbrand <david@redhat.com> Message-Id: <20180627134410.4901-10-david@redhat.com> Signed-off-by: Cornelia Huck <cohuck@redhat.com>
This commit is contained in:
parent
7c12f710ba
commit
d66b43c896
@ -218,11 +218,18 @@ static void s390_cpu_realizefn(DeviceState *dev, Error **errp)
|
||||
#endif
|
||||
s390_cpu_gdb_init(cs);
|
||||
qemu_init_vcpu(cs);
|
||||
#if !defined(CONFIG_USER_ONLY)
|
||||
run_on_cpu(cs, s390_do_cpu_full_reset, RUN_ON_CPU_NULL);
|
||||
#else
|
||||
cpu_reset(cs);
|
||||
#endif
|
||||
|
||||
/*
|
||||
* KVM requires the initial CPU reset ioctl to be executed on the target
|
||||
* CPU thread. CPU hotplug under single-threaded TCG will not work with
|
||||
* run_on_cpu(), as run_on_cpu() will not work properly if called while
|
||||
* the main thread is already running but the CPU hasn't been realized.
|
||||
*/
|
||||
if (kvm_enabled()) {
|
||||
run_on_cpu(cs, s390_do_cpu_full_reset, RUN_ON_CPU_NULL);
|
||||
} else {
|
||||
cpu_reset(cs);
|
||||
}
|
||||
|
||||
scc->parent_realize(dev, &err);
|
||||
out:
|
||||
|
Loading…
Reference in New Issue
Block a user