Peter Maydell <peter.mayd...@linaro.org> writes: > 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 ?)
Pan Nengyuan, please provide the exact patch that fails for you.