aboutsummaryrefslogtreecommitdiff
path: root/hw/misc/macio/cuda.c
diff options
context:
space:
mode:
authorThomas Huth <thuth@redhat.com>2018-07-17 16:51:54 +0200
committerDavid Gibson <david@gibson.dropbear.id.au>2018-08-01 09:48:40 +1000
commit1069a3c6e1176001116116629427550f138d68a4 (patch)
tree4adbf85dc5e9cbc143fe59a40c5a4b569dceebd8 /hw/misc/macio/cuda.c
parentf7502360397d291be04bc040e9f96c92ff2d8030 (diff)
hw/misc/macio: Fix device introspection problems in macio devices
Valgrind reports an error when introspecting the macio devices, e.g.: echo "{'execute':'qmp_capabilities'} {'execute':'device-list-properties'," \ "'arguments':{'typename':'macio-newworld'}}" \ "{'execute': 'human-monitor-command', " \ "'arguments': {'command-line': 'info qtree'}}" | \ valgrind -q ppc64-softmmu/qemu-system-ppc64 -M none,accel=qtest -qmp stdio [...] ==30768== Invalid read of size 8 ==30768== at 0x5BC1EA: qdev_print (qdev-monitor.c:686) ==30768== by 0x5BC1EA: qbus_print (qdev-monitor.c:719) ==30768== by 0x43E458: handle_hmp_command (monitor.c:3446) [...] Use the new function sysbus_init_child_obj() to initialize the objects here, to get the reference counting of the objects right, so that they are cleaned up correctly when the parent gets removed. Signed-off-by: Thomas Huth <thuth@redhat.com> Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
Diffstat (limited to 'hw/misc/macio/cuda.c')
-rw-r--r--hw/misc/macio/cuda.c5
1 files changed, 2 insertions, 3 deletions
diff --git a/hw/misc/macio/cuda.c b/hw/misc/macio/cuda.c
index 9651ed9744..c4f7a2f39b 100644
--- a/hw/misc/macio/cuda.c
+++ b/hw/misc/macio/cuda.c
@@ -554,9 +554,8 @@ static void cuda_init(Object *obj)
CUDAState *s = CUDA(obj);
SysBusDevice *sbd = SYS_BUS_DEVICE(obj);
- object_initialize(&s->mos6522_cuda, sizeof(s->mos6522_cuda),
- TYPE_MOS6522_CUDA);
- qdev_set_parent_bus(DEVICE(&s->mos6522_cuda), sysbus_get_default());
+ sysbus_init_child_obj(obj, "mos6522-cuda", &s->mos6522_cuda,
+ sizeof(s->mos6522_cuda), TYPE_MOS6522_CUDA);
memory_region_init_io(&s->mem, obj, &mos6522_cuda_ops, s, "cuda", 0x2000);
sysbus_init_mmio(sbd, &s->mem);