On Mon, 9 Mar 2020 at 10:02, Pan Nengyuan <pannengy...@huawei.com> wrote: > On 3/9/2020 5:21 PM, Peter Maydell wrote: > > Could you explain more? My thought is that we should be using > > sysbus_init_child_obj() and we should be doing it in the init method. > > Why does that break the tests ? It's the same thing various other > > devices do. > > device-introspect-test do the follow check for each device type: > > qtree_start = qtest_hmp(qts, "info qtree"); > ... > qtest_qmp(qts, "{'execute': 'device-list-properties','arguments': > {'typename': %s}}", type); > ... > qtree_end = qtest_hmp(qts, "info qtree"); > g_assert_cmpstr(qtree_start, ==, qtree_end); > > If we do qdev_set_parent_bus in init, it will check fail when type = > 'mac_via'. > mac_via_init() is called by q800_init(). But it will not be called in > qtest(-machine none) in the step qtree_start. > And after we call 'device-list-properties', mac_via_init() was called and set > dev parent bus. We can find these > devices in the qtree_end. So it break the test on the assert.
Markus, do you know what's happening here? Why is trying to use sysbus_init_child_obj() breaking the device-introspect-test for this particular device, but fine for the other places where we use it? (Maybe we're accidentally leaking a reference to something so the sub-device stays on the sysbus when it should have removed itself when the device was deinited ?) > Here is the output: > > # Testing device 'mac_via' > adb.0=<child<apple-desktop-bus>> > drive=<str> - Node name or ID of a block device to use as a > backend > irq[0]=<link<irq>> > irq[1]=<link<irq>> > mac-via[0]=<child<qemu:memory-region>> > via1=<child<mos6522-q800-via1>> > via1[0]=<child<qemu:memory-region>> > via2=<child<mos6522-q800-via2>> > via2[0]=<child<qemu:memory-region>> > qtree_start: bus: main-system-bus > type System > > qtree_end: bus: main-system-bus > type System > dev: mos6522-q800-via2, id "" > gpio-in "via2-irq" 8 > gpio-out "sysbus-irq" 1 > frequency = 0 (0x0) > mmio ffffffffffffffff/0000000000000010 > dev: mos6522-q800-via1, id "" > gpio-in "via1-irq" 8 > gpio-out "sysbus-irq" 1 > frequency = 0 (0x0) > mmio ffffffffffffffff/0000000000000010 thanks -- PMM