On 11/07/2018 20:43, Thomas Huth wrote: >> >> - realize fails > In this case, the failure is before realize is attempted, > qdev_device_add() already stop with "Device '%s' can not be hotplugged > on this machine".
Still, object_unparent is called by qdev_device_add in the error path, and it should work the same way (in a nutshell, recursive unparent when child properties are deleted, and finalization of the contained objects as the last reference is dropped). >> - object_unparent is called on the device that failed to realize (see >> qdev_device_add). object_unparent calls device_unparent > Hmm, are you sure? I can see that object_unparent calls device_unparent > indirectly for the *child* nodes of the device, but not for the device > itself... object_unparent -> object_property_del_child -> object_finalize_child_property -> device_unparent I think you're on the right track, after object_property_add_child you need to drop the reference to the object. For example qmp_device_add does it after qdev_device_add returns a device successfully (just an example---I understand it is not the case with bcm283x). In that case the call to object_property_add_child is in qdev_set_id. Paolo