mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-17 15:12:07 -06:00
spapr: Simplify error handling in spapr_cpu_core_realize()
As recommended in "qapi/error.h", add a bool return value to spapr_realize_vcpu() and use it in spapr_cpu_core_realize() in order to get rid of the error propagation overhead. Signed-off-by: Greg Kurz <groug@kaod.org> Message-Id: <20200914123505.612812-12-groug@kaod.org> Reviewed-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com> Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com> Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
This commit is contained in:
parent
cfdc527473
commit
a5af92e2e9
1 changed files with 7 additions and 9 deletions
|
@ -227,14 +227,14 @@ static void spapr_cpu_core_unrealize(DeviceState *dev)
|
||||||
g_free(sc->threads);
|
g_free(sc->threads);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void spapr_realize_vcpu(PowerPCCPU *cpu, SpaprMachineState *spapr,
|
static bool spapr_realize_vcpu(PowerPCCPU *cpu, SpaprMachineState *spapr,
|
||||||
SpaprCpuCore *sc, Error **errp)
|
SpaprCpuCore *sc, Error **errp)
|
||||||
{
|
{
|
||||||
CPUPPCState *env = &cpu->env;
|
CPUPPCState *env = &cpu->env;
|
||||||
CPUState *cs = CPU(cpu);
|
CPUState *cs = CPU(cpu);
|
||||||
|
|
||||||
if (!qdev_realize(DEVICE(cpu), NULL, errp)) {
|
if (!qdev_realize(DEVICE(cpu), NULL, errp)) {
|
||||||
return;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Set time-base frequency to 512 MHz */
|
/* Set time-base frequency to 512 MHz */
|
||||||
|
@ -245,13 +245,14 @@ static void spapr_realize_vcpu(PowerPCCPU *cpu, SpaprMachineState *spapr,
|
||||||
|
|
||||||
if (spapr_irq_cpu_intc_create(spapr, cpu, errp) < 0) {
|
if (spapr_irq_cpu_intc_create(spapr, cpu, errp) < 0) {
|
||||||
cpu_remove_sync(CPU(cpu));
|
cpu_remove_sync(CPU(cpu));
|
||||||
return;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!sc->pre_3_0_migration) {
|
if (!sc->pre_3_0_migration) {
|
||||||
vmstate_register(NULL, cs->cpu_index, &vmstate_spapr_cpu_state,
|
vmstate_register(NULL, cs->cpu_index, &vmstate_spapr_cpu_state,
|
||||||
cpu->machine_data);
|
cpu->machine_data);
|
||||||
}
|
}
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
static PowerPCCPU *spapr_create_vcpu(SpaprCpuCore *sc, int i, Error **errp)
|
static PowerPCCPU *spapr_create_vcpu(SpaprCpuCore *sc, int i, Error **errp)
|
||||||
|
@ -312,7 +313,6 @@ static void spapr_cpu_core_realize(DeviceState *dev, Error **errp)
|
||||||
TYPE_SPAPR_MACHINE);
|
TYPE_SPAPR_MACHINE);
|
||||||
SpaprCpuCore *sc = SPAPR_CPU_CORE(OBJECT(dev));
|
SpaprCpuCore *sc = SPAPR_CPU_CORE(OBJECT(dev));
|
||||||
CPUCore *cc = CPU_CORE(OBJECT(dev));
|
CPUCore *cc = CPU_CORE(OBJECT(dev));
|
||||||
Error *local_err = NULL;
|
|
||||||
int i, j;
|
int i, j;
|
||||||
|
|
||||||
if (!spapr) {
|
if (!spapr) {
|
||||||
|
@ -322,15 +322,14 @@ static void spapr_cpu_core_realize(DeviceState *dev, Error **errp)
|
||||||
|
|
||||||
sc->threads = g_new(PowerPCCPU *, cc->nr_threads);
|
sc->threads = g_new(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, &local_err);
|
sc->threads[i] = spapr_create_vcpu(sc, i, errp);
|
||||||
if (local_err) {
|
if (!sc->threads[i]) {
|
||||||
goto err;
|
goto err;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for (j = 0; j < cc->nr_threads; j++) {
|
for (j = 0; j < cc->nr_threads; j++) {
|
||||||
spapr_realize_vcpu(sc->threads[j], spapr, sc, &local_err);
|
if (!spapr_realize_vcpu(sc->threads[j], spapr, sc, errp)) {
|
||||||
if (local_err) {
|
|
||||||
goto err_unrealize;
|
goto err_unrealize;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -347,7 +346,6 @@ err:
|
||||||
spapr_delete_vcpu(sc->threads[i], sc);
|
spapr_delete_vcpu(sc->threads[i], sc);
|
||||||
}
|
}
|
||||||
g_free(sc->threads);
|
g_free(sc->threads);
|
||||||
error_propagate(errp, local_err);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static Property spapr_cpu_core_properties[] = {
|
static Property spapr_cpu_core_properties[] = {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue