mirror of https://gitee.com/openkylin/qemu.git
hw/*/realview: Fix introspection problem with 'realview_mpcore' & 'realview_gic'
echo "{'execute':'qmp_capabilities'} {'execute':'device-list-properties'," \ "'arguments':{'typename':'realview_mpcore'}}" \ "{'execute': 'human-monitor-command', " \ "'arguments': {'command-line': 'info qtree'}}" | \ valgrind -q aarch64-softmmu/qemu-system-aarch64 -M none,accel=qtest -qmp stdio [...] ==2654== Invalid read of size 8 ==2654== at 0x61878A: qdev_print (qdev-monitor.c:686) ==2654== by 0x61878A: qbus_print (qdev-monitor.c:719) ==2654== by 0x452B38: handle_hmp_command (monitor.c:3446) ==2654== by 0x452D70: qmp_human_monitor_command (monitor.c:821) [...] Use sysbus_init_child_obj() to fix it. Reviewed-by: Richard Henderson <richard.henderson@linaro.org> Reviewed-by: Paolo Bonzini <pbonzini@redhat.com> Reviewed-by: Eduardo Habkost <ehabkost@redhat.com> Signed-off-by: Thomas Huth <thuth@redhat.com> Message-id: 1531745974-17187-14-git-send-email-thuth@redhat.com Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
parent
b2bc349822
commit
32db1b58ca
|
@ -101,14 +101,14 @@ static void mpcore_rirq_init(Object *obj)
|
||||||
SysBusDevice *privbusdev;
|
SysBusDevice *privbusdev;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
object_initialize(&s->priv, sizeof(s->priv), TYPE_ARM11MPCORE_PRIV);
|
sysbus_init_child_obj(obj, "a11priv", &s->priv, sizeof(s->priv),
|
||||||
qdev_set_parent_bus(DEVICE(&s->priv), sysbus_get_default());
|
TYPE_ARM11MPCORE_PRIV);
|
||||||
privbusdev = SYS_BUS_DEVICE(&s->priv);
|
privbusdev = SYS_BUS_DEVICE(&s->priv);
|
||||||
sysbus_init_mmio(sbd, sysbus_mmio_get_region(privbusdev, 0));
|
sysbus_init_mmio(sbd, sysbus_mmio_get_region(privbusdev, 0));
|
||||||
|
|
||||||
for (i = 0; i < 4; i++) {
|
for (i = 0; i < 4; i++) {
|
||||||
object_initialize(&s->gic[i], sizeof(s->gic[i]), TYPE_REALVIEW_GIC);
|
sysbus_init_child_obj(obj, "gic[*]", &s->gic[i], sizeof(s->gic[i]),
|
||||||
qdev_set_parent_bus(DEVICE(&s->gic[i]), sysbus_get_default());
|
TYPE_REALVIEW_GIC);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -54,16 +54,13 @@ static void realview_gic_init(Object *obj)
|
||||||
{
|
{
|
||||||
SysBusDevice *sbd = SYS_BUS_DEVICE(obj);
|
SysBusDevice *sbd = SYS_BUS_DEVICE(obj);
|
||||||
RealViewGICState *s = REALVIEW_GIC(obj);
|
RealViewGICState *s = REALVIEW_GIC(obj);
|
||||||
DeviceState *gicdev;
|
|
||||||
|
|
||||||
memory_region_init(&s->container, OBJECT(s),
|
memory_region_init(&s->container, OBJECT(s),
|
||||||
"realview-gic-container", 0x2000);
|
"realview-gic-container", 0x2000);
|
||||||
sysbus_init_mmio(sbd, &s->container);
|
sysbus_init_mmio(sbd, &s->container);
|
||||||
|
|
||||||
object_initialize(&s->gic, sizeof(s->gic), TYPE_ARM_GIC);
|
sysbus_init_child_obj(obj, "gic", &s->gic, sizeof(s->gic), TYPE_ARM_GIC);
|
||||||
gicdev = DEVICE(&s->gic);
|
qdev_prop_set_uint32(DEVICE(&s->gic), "num-cpu", 1);
|
||||||
qdev_set_parent_bus(gicdev, sysbus_get_default());
|
|
||||||
qdev_prop_set_uint32(gicdev, "num-cpu", 1);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void realview_gic_class_init(ObjectClass *oc, void *data)
|
static void realview_gic_class_init(ObjectClass *oc, void *data)
|
||||||
|
|
Loading…
Reference in New Issue