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
|
#endif
|
||||||
s390_cpu_gdb_init(cs);
|
s390_cpu_gdb_init(cs);
|
||||||
qemu_init_vcpu(cs);
|
qemu_init_vcpu(cs);
|
||||||
#if !defined(CONFIG_USER_ONLY)
|
|
||||||
|
/*
|
||||||
|
* 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);
|
run_on_cpu(cs, s390_do_cpu_full_reset, RUN_ON_CPU_NULL);
|
||||||
#else
|
} else {
|
||||||
cpu_reset(cs);
|
cpu_reset(cs);
|
||||||
#endif
|
}
|
||||||
|
|
||||||
scc->parent_realize(dev, &err);
|
scc->parent_realize(dev, &err);
|
||||||
out:
|
out:
|
||||||
|
Loading…
Reference in New Issue
Block a user