[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH v5 2/4] mac_via: fix incorrect creation of mos6522 device in mac_
From: |
Pan Nengyuan |
Subject: |
[PATCH v5 2/4] mac_via: fix incorrect creation of mos6522 device in mac_via |
Date: |
Sat, 14 Mar 2020 16:47:28 +0800 |
This patch fix a bug in mac_via where it failed to actually realize devices it
was using.
And move the init codes which inits the mos6522 objects and properties on them
from realize()
into init(). However, we keep qdev_set_parent_bus in realize(), otherwise it
will cause
device-introspect-test test fail. Then do the realize mos6522 device in the
mac_vir_realize.
Signed-off-by: Pan Nengyuan <address@hidden>
---
Cc: Laurent Vivier <address@hidden>
Cc: Mark Cave-Ayland <address@hidden>
---
v4->v3:
- split v3 into two patches, this patch fix incorrect creation of mos6522, move
inits and props
from realize into init.
v5->v4:
- remove redundant code.
- As discussion in https://patchwork.kernel.org/patch/11421229/, we still keep
qdev_set_parent_bus in realize().
---
hw/misc/mac_via.c | 40 +++++++++++++++++++++++++++-------------
1 file changed, 27 insertions(+), 13 deletions(-)
diff --git a/hw/misc/mac_via.c b/hw/misc/mac_via.c
index b7d0012794..d208f0b18a 100644
--- a/hw/misc/mac_via.c
+++ b/hw/misc/mac_via.c
@@ -868,24 +868,24 @@ static void mac_via_reset(DeviceState *dev)
static void mac_via_realize(DeviceState *dev, Error **errp)
{
MacVIAState *m = MAC_VIA(dev);
- MOS6522State *ms;
struct tm tm;
int ret;
+ Error *err = NULL;
- /* Init VIAs 1 and 2 */
- sysbus_init_child_obj(OBJECT(dev), "via1", &m->mos6522_via1,
- sizeof(m->mos6522_via1), TYPE_MOS6522_Q800_VIA1);
+ qdev_set_parent_bus(DEVICE(&m->mos6522_via1), sysbus_get_default());
+ qdev_set_parent_bus(DEVICE(&m->mos6522_via2), sysbus_get_default());
- sysbus_init_child_obj(OBJECT(dev), "via2", &m->mos6522_via2,
- sizeof(m->mos6522_via2), TYPE_MOS6522_Q800_VIA2);
+ object_property_set_bool(OBJECT(&m->mos6522_via1), true, "realized", &err);
+ if (err != NULL) {
+ error_propagate(errp, err);
+ return;
+ }
- /* Pass through mos6522 output IRQs */
- ms = MOS6522(&m->mos6522_via1);
- object_property_add_alias(OBJECT(dev), "irq[0]", OBJECT(ms),
- SYSBUS_DEVICE_GPIO_IRQ "[0]", &error_abort);
- ms = MOS6522(&m->mos6522_via2);
- object_property_add_alias(OBJECT(dev), "irq[1]", OBJECT(ms),
- SYSBUS_DEVICE_GPIO_IRQ "[0]", &error_abort);
+ object_property_set_bool(OBJECT(&m->mos6522_via2), true, "realized", &err);
+ if (err != NULL) {
+ error_propagate(errp, err);
+ return;
+ }
/* Pass through mos6522 input IRQs */
qdev_pass_gpios(DEVICE(&m->mos6522_via1), dev, "via1-irq");
@@ -948,6 +948,20 @@ static void mac_via_init(Object *obj)
/* ADB */
qbus_create_inplace((BusState *)&m->adb_bus, sizeof(m->adb_bus),
TYPE_ADB_BUS, DEVICE(obj), "adb.0");
+
+ /* Init VIAs 1 and 2 */
+ object_initialize_child(OBJECT(m), "via1", &m->mos6522_via1,
+ sizeof(m->mos6522_via1), TYPE_MOS6522_Q800_VIA1,
+ &error_abort, NULL);
+ object_initialize_child(OBJECT(m), "via2", &m->mos6522_via2,
+ sizeof(m->mos6522_via2), TYPE_MOS6522_Q800_VIA2,
+ &error_abort, NULL);
+
+ /* Pass through mos6522 output IRQs */
+ object_property_add_alias(OBJECT(m), "irq[0]", OBJECT(&m->mos6522_via1),
+ SYSBUS_DEVICE_GPIO_IRQ "[0]", &error_abort);
+ object_property_add_alias(OBJECT(m), "irq[1]", OBJECT(&m->mos6522_via2),
+ SYSBUS_DEVICE_GPIO_IRQ "[0]", &error_abort);
}
static void postload_update_cb(void *opaque, int running, RunState state)
--
2.18.2
- [PATCH v5 0/4] delay timer_new from init to realize to fix memleaks., Pan Nengyuan, 2020/03/14
- [PATCH v5 4/4] hw/misc/mos6522: move timer_new from init() into realize() to avoid memleaks, Pan Nengyuan, 2020/03/14
- [PATCH v5 1/4] s390x: fix memleaks in cpu_finalize, Pan Nengyuan, 2020/03/14
- [PATCH v5 2/4] mac_via: fix incorrect creation of mos6522 device in mac_via,
Pan Nengyuan <=
- [PATCH v5 3/4] hw/misc/macio: fix incorrect creation of mos6522's subclasses, Pan Nengyuan, 2020/03/14
- Re: [PATCH v5 0/4] delay timer_new from init to realize to fix memleaks., no-reply, 2020/03/14
- Re: [PATCH v5 0/4] delay timer_new from init to realize to fix memleaks., Mark Cave-Ayland, 2020/03/14