There are two other places where we create mos6522's subclasses but forgot to realize it. This patch do the realize in these places to fix that.
Signed-off-by: Pan Nengyuan <pannengy...@huawei.com> --- Cc: Mark Cave-Ayland <mark.cave-ayl...@ilande.co.uk> Cc: David Gibson <da...@gibson.dropbear.id.au> Cc: qemu-...@nongnu.org --- v5: - Also fix incorrect creation of mos6522's subclasses on two other places. Not sure if there is a conversion plan, we still keep sysbus_init_child_obj in init() in this patch as it was. --- hw/misc/macio/cuda.c | 11 +++++++++-- hw/misc/macio/pmu.c | 11 +++++++++-- 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/hw/misc/macio/cuda.c b/hw/misc/macio/cuda.c index e0cc0aac5d..ee780a8288 100644 --- a/hw/misc/macio/cuda.c +++ b/hw/misc/macio/cuda.c @@ -36,6 +36,7 @@ #include "qemu/cutils.h" #include "qemu/log.h" #include "qemu/module.h" +#include "qapi/error.h" #include "trace.h" /* Bits in B data register: all active low */ @@ -524,11 +525,17 @@ static void cuda_realize(DeviceState *dev, Error **errp) CUDAState *s = CUDA(dev); SysBusDevice *sbd; MOS6522State *ms; - DeviceState *d; + DeviceState *d = DEVICE(&s->mos6522_cuda); struct tm tm; + Error *err = NULL; + + object_property_set_bool(OBJECT(d), true, "realized", &err); + if (err != NULL) { + error_propagate(errp, err); + return; + } /* Pass IRQ from 6522 */ - d = DEVICE(&s->mos6522_cuda); ms = MOS6522(d); sbd = SYS_BUS_DEVICE(s); sysbus_pass_irq(sbd, SYS_BUS_DEVICE(ms)); diff --git a/hw/misc/macio/pmu.c b/hw/misc/macio/pmu.c index b8466a4a3f..ae55992288 100644 --- a/hw/misc/macio/pmu.c +++ b/hw/misc/macio/pmu.c @@ -43,6 +43,7 @@ #include "qemu/cutils.h" #include "qemu/log.h" #include "qemu/module.h" +#include "qapi/error.h" #include "trace.h" @@ -741,11 +742,17 @@ static void pmu_realize(DeviceState *dev, Error **errp) PMUState *s = VIA_PMU(dev); SysBusDevice *sbd; MOS6522State *ms; - DeviceState *d; + DeviceState *d = DEVICE(&s->mos6522_pmu);; struct tm tm; + Error *err = NULL; + + object_property_set_bool(OBJECT(d), true, "realized", &err); + if (err != NULL) { + error_propagate(errp, err); + return; + } /* Pass IRQ from 6522 */ - d = DEVICE(&s->mos6522_pmu); ms = MOS6522(d); sbd = SYS_BUS_DEVICE(s); sysbus_pass_irq(sbd, SYS_BUS_DEVICE(ms)); -- 2.18.2