|
@@ -349,9 +349,15 @@ static void spapr_cpu_core_realize(DeviceState *dev, Error **errp)
|
|
qemu_register_reset(spapr_cpu_core_reset_handler, sc);
|
|
qemu_register_reset(spapr_cpu_core_reset_handler, sc);
|
|
sc->threads = g_new0(PowerPCCPU *, cc->nr_threads);
|
|
sc->threads = g_new0(PowerPCCPU *, cc->nr_threads);
|
|
for (i = 0; i < cc->nr_threads; i++) {
|
|
for (i = 0; i < cc->nr_threads; i++) {
|
|
- sc->threads[i] = spapr_create_vcpu(sc, i, errp);
|
|
|
|
- if (!sc->threads[i] ||
|
|
|
|
- !spapr_realize_vcpu(sc->threads[i], spapr, sc, i, errp)) {
|
|
|
|
|
|
+ PowerPCCPU *cpu;
|
|
|
|
+
|
|
|
|
+ cpu = spapr_create_vcpu(sc, i, errp);
|
|
|
|
+ sc->threads[i] = cpu;
|
|
|
|
+ if (cpu && cc->nr_threads > 1) {
|
|
|
|
+ cpu->env.has_smt_siblings = true;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if (!cpu || !spapr_realize_vcpu(cpu, spapr, sc, i, errp)) {
|
|
spapr_cpu_core_unrealize(dev);
|
|
spapr_cpu_core_unrealize(dev);
|
|
return;
|
|
return;
|
|
}
|
|
}
|