@@ -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));
@@ -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));
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 <pannengyuan@huawei.com> --- Cc: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk> Cc: David Gibson <david@gibson.dropbear.id.au> Cc: qemu-ppc@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(-)