[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-ppc] [PATCH 5/5] spapr_cpu_core: simplify spapr_cpu_core_realize()
From: |
Greg Kurz |
Subject: |
[Qemu-ppc] [PATCH 5/5] spapr_cpu_core: simplify spapr_cpu_core_realize() |
Date: |
Thu, 14 Jun 2018 23:51:11 +0200 |
User-agent: |
StGit/0.17.1-46-g6855-dirty |
There's no real reason to create all CPUs in a first pass and to realize
them in a second pass. Merging these two loops makes the code simpler.
Signed-off-by: Greg Kurz <address@hidden>
---
hw/ppc/spapr_cpu_core.c | 25 ++++++++++++-------------
1 file changed, 12 insertions(+), 13 deletions(-)
diff --git a/hw/ppc/spapr_cpu_core.c b/hw/ppc/spapr_cpu_core.c
index 0ebaf804a9bc..f52af20e0096 100644
--- a/hw/ppc/spapr_cpu_core.c
+++ b/hw/ppc/spapr_cpu_core.c
@@ -172,7 +172,8 @@ error:
error_propagate(errp, local_err);
}
-static PowerPCCPU *spapr_create_vcpu(sPAPRCPUCore *sc, int i, Error **errp)
+static PowerPCCPU *spapr_create_vcpu(sPAPRCPUCore *sc, int i,
+ sPAPRMachineState *spapr, Error **errp)
{
sPAPRCPUCoreClass *scc = SPAPR_CPU_CORE_GET_CLASS(sc);
CPUCore *cc = CPU_CORE(sc);
@@ -201,9 +202,16 @@ static PowerPCCPU *spapr_create_vcpu(sPAPRCPUCore *sc, int
i, Error **errp)
goto err;
}
+ spapr_realize_vcpu(cpu, spapr, &local_err);
+ if (local_err) {
+ goto err_unparent;
+ }
+
object_unref(obj);
return cpu;
+err_unparent:
+ object_unparent(obj);
err:
object_unref(obj);
error_propagate(errp, local_err);
@@ -212,6 +220,7 @@ err:
static void spapr_delete_vcpu(PowerPCCPU *cpu)
{
+ spapr_unrealize_vcpu(cpu);
object_unparent(OBJECT(cpu));
}
@@ -226,7 +235,7 @@ static void spapr_cpu_core_realize(DeviceState *dev, Error
**errp)
sPAPRCPUCore *sc = SPAPR_CPU_CORE(OBJECT(dev));
CPUCore *cc = CPU_CORE(OBJECT(dev));
Error *local_err = NULL;
- int i, j;
+ int i;
if (!spapr) {
error_setg(errp, TYPE_SPAPR_CPU_CORE " needs a pseries machine");
@@ -235,24 +244,14 @@ static void spapr_cpu_core_realize(DeviceState *dev,
Error **errp)
sc->threads = g_new(PowerPCCPU *, cc->nr_threads);
for (i = 0; i < cc->nr_threads; i++) {
- sc->threads[i] = spapr_create_vcpu(sc, i, &local_err);
+ sc->threads[i] = spapr_create_vcpu(sc, i, spapr, &local_err);
if (local_err) {
goto err;
}
}
- for (j = 0; j < cc->nr_threads; j++) {
- spapr_realize_vcpu(sc->threads[j], spapr, &local_err);
- if (local_err) {
- goto err_unrealize;
- }
- }
return;
-err_unrealize:
- while (--j >= 0) {
- spapr_unrealize_vcpu(sc->threads[i]);
- }
err:
while (--i >= 0) {
spapr_delete_vcpu(sc->threads[i]);
- Re: [Qemu-ppc] [PATCH 3/5] spapr_cpu_core: add missing rollback on realization path, (continued)
- Re: [Qemu-ppc] [PATCH 3/5] spapr_cpu_core: add missing rollback on realization path, David Gibson, 2018/06/15
- Re: [Qemu-ppc] [PATCH 3/5] spapr_cpu_core: add missing rollback on realization path, Greg Kurz, 2018/06/15
- Re: [Qemu-ppc] [PATCH 3/5] spapr_cpu_core: add missing rollback on realization path, Greg Kurz, 2018/06/15
- Re: [Qemu-ppc] [PATCH 3/5] spapr_cpu_core: add missing rollback on realization path, David Gibson, 2018/06/15
- Re: [Qemu-ppc] [PATCH 3/5] spapr_cpu_core: add missing rollback on realization path, Greg Kurz, 2018/06/15
- Re: [Qemu-ppc] [PATCH 3/5] spapr_cpu_core: add missing rollback on realization path, David Gibson, 2018/06/17
- Re: [Qemu-ppc] [PATCH 3/5] spapr_cpu_core: add missing rollback on realization path, Greg Kurz, 2018/06/15
- Re: [Qemu-ppc] [PATCH 3/5] spapr_cpu_core: add missing rollback on realization path, David Gibson, 2018/06/15
[Qemu-ppc] [PATCH 4/5] spapr_cpu_core: introduce spapr_create_vcpu(), Greg Kurz, 2018/06/14
[Qemu-ppc] [PATCH 5/5] spapr_cpu_core: simplify spapr_cpu_core_realize(),
Greg Kurz <=