Message ID | 152901305726.252222.7317082325256499414.stgit@bahia.lan |
---|---|
State | New |
Headers | show |
Series | spapr_cpu_core: fixes and cleanups | expand |
On Thu, Jun 14, 2018 at 11:50:57PM +0200, Greg Kurz wrote: > This moves some code out from spapr_cpu_core_realize() for clarity. No > functional change. > > Signed-off-by: Greg Kurz <groug@kaod.org> Applied to ppc-for-3.0, thanks. > --- > hw/ppc/spapr_cpu_core.c | 73 +++++++++++++++++++++++++++++------------------ > 1 file changed, 45 insertions(+), 28 deletions(-) > > diff --git a/hw/ppc/spapr_cpu_core.c b/hw/ppc/spapr_cpu_core.c > index 04c818a6ecac..0ebaf804a9bc 100644 > --- a/hw/ppc/spapr_cpu_core.c > +++ b/hw/ppc/spapr_cpu_core.c > @@ -172,6 +172,49 @@ error: > error_propagate(errp, local_err); > } > > +static PowerPCCPU *spapr_create_vcpu(sPAPRCPUCore *sc, int i, Error **errp) > +{ > + sPAPRCPUCoreClass *scc = SPAPR_CPU_CORE_GET_CLASS(sc); > + CPUCore *cc = CPU_CORE(sc); > + Object *obj; > + char *id; > + CPUState *cs; > + PowerPCCPU *cpu; > + Error *local_err = NULL; > + > + obj = object_new(scc->cpu_type); > + > + cs = CPU(obj); > + cpu = POWERPC_CPU(obj); > + cs->cpu_index = cc->core_id + i; > + spapr_set_vcpu_id(cpu, cs->cpu_index, &local_err); > + if (local_err) { > + goto err; > + } > + > + cpu->node_id = sc->node_id; > + > + id = g_strdup_printf("thread[%d]", i); > + object_property_add_child(OBJECT(sc), id, obj, &local_err); > + g_free(id); > + if (local_err) { > + goto err; > + } > + > + object_unref(obj); > + return cpu; > + > +err: > + object_unref(obj); > + error_propagate(errp, local_err); > + return NULL; > +} > + > +static void spapr_delete_vcpu(PowerPCCPU *cpu) > +{ > + object_unparent(OBJECT(cpu)); > +} > + > static void spapr_cpu_core_realize(DeviceState *dev, Error **errp) > { > /* We don't use SPAPR_MACHINE() in order to exit gracefully if the user > @@ -181,10 +224,8 @@ static void spapr_cpu_core_realize(DeviceState *dev, Error **errp) > (sPAPRMachineState *) object_dynamic_cast(qdev_get_machine(), > TYPE_SPAPR_MACHINE); > sPAPRCPUCore *sc = SPAPR_CPU_CORE(OBJECT(dev)); > - sPAPRCPUCoreClass *scc = SPAPR_CPU_CORE_GET_CLASS(OBJECT(dev)); > CPUCore *cc = CPU_CORE(OBJECT(dev)); > Error *local_err = NULL; > - Object *obj; > int i, j; > > if (!spapr) { > @@ -194,33 +235,10 @@ 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++) { > - char *id; > - CPUState *cs; > - PowerPCCPU *cpu; > - > - obj = object_new(scc->cpu_type); > - > - cs = CPU(obj); > - cpu = sc->threads[i] = POWERPC_CPU(obj); > - cs->cpu_index = cc->core_id + i; > - spapr_set_vcpu_id(cpu, cs->cpu_index, &local_err); > - if (local_err) { > - object_unref(obj); > - goto err; > - } > - > - > - /* Set NUMA node for the threads belonged to core */ > - cpu->node_id = sc->node_id; > - > - id = g_strdup_printf("thread[%d]", i); > - object_property_add_child(OBJECT(sc), id, obj, &local_err); > - g_free(id); > + sc->threads[i] = spapr_create_vcpu(sc, i, &local_err); > if (local_err) { > - object_unref(obj); > goto err; > } > - object_unref(obj); > } > > for (j = 0; j < cc->nr_threads; j++) { > @@ -237,8 +255,7 @@ err_unrealize: > } > err: > while (--i >= 0) { > - obj = OBJECT(sc->threads[i]); > - object_unparent(obj); > + spapr_delete_vcpu(sc->threads[i]); > } > g_free(sc->threads); > error_propagate(errp, local_err); >
diff --git a/hw/ppc/spapr_cpu_core.c b/hw/ppc/spapr_cpu_core.c index 04c818a6ecac..0ebaf804a9bc 100644 --- a/hw/ppc/spapr_cpu_core.c +++ b/hw/ppc/spapr_cpu_core.c @@ -172,6 +172,49 @@ error: error_propagate(errp, local_err); } +static PowerPCCPU *spapr_create_vcpu(sPAPRCPUCore *sc, int i, Error **errp) +{ + sPAPRCPUCoreClass *scc = SPAPR_CPU_CORE_GET_CLASS(sc); + CPUCore *cc = CPU_CORE(sc); + Object *obj; + char *id; + CPUState *cs; + PowerPCCPU *cpu; + Error *local_err = NULL; + + obj = object_new(scc->cpu_type); + + cs = CPU(obj); + cpu = POWERPC_CPU(obj); + cs->cpu_index = cc->core_id + i; + spapr_set_vcpu_id(cpu, cs->cpu_index, &local_err); + if (local_err) { + goto err; + } + + cpu->node_id = sc->node_id; + + id = g_strdup_printf("thread[%d]", i); + object_property_add_child(OBJECT(sc), id, obj, &local_err); + g_free(id); + if (local_err) { + goto err; + } + + object_unref(obj); + return cpu; + +err: + object_unref(obj); + error_propagate(errp, local_err); + return NULL; +} + +static void spapr_delete_vcpu(PowerPCCPU *cpu) +{ + object_unparent(OBJECT(cpu)); +} + static void spapr_cpu_core_realize(DeviceState *dev, Error **errp) { /* We don't use SPAPR_MACHINE() in order to exit gracefully if the user @@ -181,10 +224,8 @@ static void spapr_cpu_core_realize(DeviceState *dev, Error **errp) (sPAPRMachineState *) object_dynamic_cast(qdev_get_machine(), TYPE_SPAPR_MACHINE); sPAPRCPUCore *sc = SPAPR_CPU_CORE(OBJECT(dev)); - sPAPRCPUCoreClass *scc = SPAPR_CPU_CORE_GET_CLASS(OBJECT(dev)); CPUCore *cc = CPU_CORE(OBJECT(dev)); Error *local_err = NULL; - Object *obj; int i, j; if (!spapr) { @@ -194,33 +235,10 @@ 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++) { - char *id; - CPUState *cs; - PowerPCCPU *cpu; - - obj = object_new(scc->cpu_type); - - cs = CPU(obj); - cpu = sc->threads[i] = POWERPC_CPU(obj); - cs->cpu_index = cc->core_id + i; - spapr_set_vcpu_id(cpu, cs->cpu_index, &local_err); - if (local_err) { - object_unref(obj); - goto err; - } - - - /* Set NUMA node for the threads belonged to core */ - cpu->node_id = sc->node_id; - - id = g_strdup_printf("thread[%d]", i); - object_property_add_child(OBJECT(sc), id, obj, &local_err); - g_free(id); + sc->threads[i] = spapr_create_vcpu(sc, i, &local_err); if (local_err) { - object_unref(obj); goto err; } - object_unref(obj); } for (j = 0; j < cc->nr_threads; j++) { @@ -237,8 +255,7 @@ err_unrealize: } err: while (--i >= 0) { - obj = OBJECT(sc->threads[i]); - object_unparent(obj); + spapr_delete_vcpu(sc->threads[i]); } g_free(sc->threads); error_propagate(errp, local_err);
This moves some code out from spapr_cpu_core_realize() for clarity. No functional change. Signed-off-by: Greg Kurz <groug@kaod.org> --- hw/ppc/spapr_cpu_core.c | 73 +++++++++++++++++++++++++++++------------------ 1 file changed, 45 insertions(+), 28 deletions(-)