mirror of https://github.com/xemu-project/xemu.git
mips/cps: Fix mips_cps_realize() error API violations
The Error ** argument must be NULL, &error_abort, &error_fatal, or a pointer to a variable containing NULL. Passing an argument of the latter kind twice without clearing it in between is wrong: if the first call sets an error, it no longer points to NULL for the second call. mips_cps_realize() is wrong that way: it passes &err to multiple object_property_set_FOO() without checking for failure, and then to sysbus_realize(). Harmless, because the object_property_set_FOO() can't actually fail here. Fix by passing &error_abort instead. Cc: Aleksandar Markovic <aleksandar.qemu.devel@gmail.com> Cc: Aurelien Jarno <aurelien@aurel32.net> Cc: Aleksandar Rikalo <aleksandar.rikalo@syrmia.com> Signed-off-by: Markus Armbruster <armbru@redhat.com> Message-Id: <20200630090351.1247703-20-armbru@redhat.com>
This commit is contained in:
parent
3e9a88c372
commit
81f66cfd24
|
@ -100,10 +100,12 @@ static void mips_cps_realize(DeviceState *dev, Error **errp)
|
|||
/* Inter-Thread Communication Unit */
|
||||
if (itu_present) {
|
||||
object_initialize_child(OBJECT(dev), "itu", &s->itu, TYPE_MIPS_ITU);
|
||||
object_property_set_int(OBJECT(&s->itu), 16, "num-fifo", &err);
|
||||
object_property_set_int(OBJECT(&s->itu), 16, "num-semaphores", &err);
|
||||
object_property_set_int(OBJECT(&s->itu), 16, "num-fifo",
|
||||
&error_abort);
|
||||
object_property_set_int(OBJECT(&s->itu), 16, "num-semaphores",
|
||||
&error_abort);
|
||||
object_property_set_bool(OBJECT(&s->itu), saar_present, "saar-present",
|
||||
&err);
|
||||
&error_abort);
|
||||
if (saar_present) {
|
||||
s->itu.saar = &env->CP0_SAAR;
|
||||
}
|
||||
|
@ -119,8 +121,10 @@ static void mips_cps_realize(DeviceState *dev, Error **errp)
|
|||
|
||||
/* Cluster Power Controller */
|
||||
object_initialize_child(OBJECT(dev), "cpc", &s->cpc, TYPE_MIPS_CPC);
|
||||
object_property_set_int(OBJECT(&s->cpc), s->num_vp, "num-vp", &err);
|
||||
object_property_set_int(OBJECT(&s->cpc), 1, "vp-start-running", &err);
|
||||
object_property_set_int(OBJECT(&s->cpc), s->num_vp, "num-vp",
|
||||
&error_abort);
|
||||
object_property_set_int(OBJECT(&s->cpc), 1, "vp-start-running",
|
||||
&error_abort);
|
||||
sysbus_realize(SYS_BUS_DEVICE(&s->cpc), &err);
|
||||
if (err != NULL) {
|
||||
error_propagate(errp, err);
|
||||
|
@ -132,8 +136,10 @@ static void mips_cps_realize(DeviceState *dev, Error **errp)
|
|||
|
||||
/* Global Interrupt Controller */
|
||||
object_initialize_child(OBJECT(dev), "gic", &s->gic, TYPE_MIPS_GIC);
|
||||
object_property_set_int(OBJECT(&s->gic), s->num_vp, "num-vp", &err);
|
||||
object_property_set_int(OBJECT(&s->gic), 128, "num-irq", &err);
|
||||
object_property_set_int(OBJECT(&s->gic), s->num_vp, "num-vp",
|
||||
&error_abort);
|
||||
object_property_set_int(OBJECT(&s->gic), 128, "num-irq",
|
||||
&error_abort);
|
||||
sysbus_realize(SYS_BUS_DEVICE(&s->gic), &err);
|
||||
if (err != NULL) {
|
||||
error_propagate(errp, err);
|
||||
|
@ -147,9 +153,12 @@ static void mips_cps_realize(DeviceState *dev, Error **errp)
|
|||
gcr_base = env->CP0_CMGCRBase << 4;
|
||||
|
||||
object_initialize_child(OBJECT(dev), "gcr", &s->gcr, TYPE_MIPS_GCR);
|
||||
object_property_set_int(OBJECT(&s->gcr), s->num_vp, "num-vp", &err);
|
||||
object_property_set_int(OBJECT(&s->gcr), 0x800, "gcr-rev", &err);
|
||||
object_property_set_int(OBJECT(&s->gcr), gcr_base, "gcr-base", &err);
|
||||
object_property_set_int(OBJECT(&s->gcr), s->num_vp, "num-vp",
|
||||
&error_abort);
|
||||
object_property_set_int(OBJECT(&s->gcr), 0x800, "gcr-rev",
|
||||
&error_abort);
|
||||
object_property_set_int(OBJECT(&s->gcr), gcr_base, "gcr-base",
|
||||
&error_abort);
|
||||
object_property_set_link(OBJECT(&s->gcr), OBJECT(&s->gic.mr), "gic",
|
||||
&error_abort);
|
||||
object_property_set_link(OBJECT(&s->gcr), OBJECT(&s->cpc.mr), "cpc",
|
||||
|
|
Loading…
Reference in New Issue