audio_model_devices_init() is the '-audio model=' command-line path, so parent the created device under /machine/peripheral-anon like -device without id= would.
The intel-hda .init helper for '-audio model=hda' additionally creates an hda-duplex codec on the controller's HDA bus; the codec is a natural child of the controller device it just spawned. Both sites drop the extra unref: the child<> property now holds the reference. Assisted-by: Kiro Signed-off-by: Alexander Graf <[email protected]> --- hw/audio/intel-hda.c | 4 ++-- hw/audio/model.c | 5 +++-- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/hw/audio/intel-hda.c b/hw/audio/intel-hda.c index cd4743a405..f51c98511a 100644 --- a/hw/audio/intel-hda.c +++ b/hw/audio/intel-hda.c @@ -1313,9 +1313,9 @@ static void intel_hda_and_codec_init(const char *audiodev) intel_hda = qdev_device_add_from_qdict(props, false, &error_fatal); hdabus = QLIST_FIRST(&intel_hda->child_bus); - codec = qdev_new_orphan("hda-duplex"); + codec = qdev_new(OBJECT(intel_hda), "codec", "hda-duplex"); qdev_prop_set_string(codec, "audiodev", audiodev); - qdev_realize_and_unref(codec, hdabus, &error_fatal); + qdev_realize(codec, hdabus, &error_fatal); object_unref(intel_hda); } diff --git a/hw/audio/model.c b/hw/audio/model.c index bd8ca35153..308b899459 100644 --- a/hw/audio/model.c +++ b/hw/audio/model.c @@ -110,10 +110,11 @@ void audio_model_init(void) } if (c->typename) { - DeviceState *dev = qdev_new_orphan(c->typename); + DeviceState *dev = qdev_new(machine_get_container("peripheral-anon"), + "audio[*]", c->typename); BusState *bus = qdev_find_default_bus(DEVICE_GET_CLASS(dev), &error_fatal); qdev_prop_set_string(dev, "audiodev", audiodev_id); - qdev_realize_and_unref(dev, bus, &error_fatal); + qdev_realize(dev, bus, &error_fatal); } else { c->init(audiodev_id); } -- 2.47.1
