diff options
-rw-r--r-- | hw/core/qdev.c | 6 | ||||
-rw-r--r-- | include/hw/qdev-core.h | 11 |
2 files changed, 13 insertions, 4 deletions
diff --git a/hw/core/qdev.c b/hw/core/qdev.c index a9647d42ae..71c7facf60 100644 --- a/hw/core/qdev.c +++ b/hw/core/qdev.c @@ -238,12 +238,10 @@ HotplugHandler *qdev_get_machine_hotplug_handler(DeviceState *dev) HotplugHandler *qdev_get_hotplug_handler(DeviceState *dev) { - HotplugHandler *hotplug_ctrl; + HotplugHandler *hotplug_ctrl = qdev_get_machine_hotplug_handler(dev); - if (dev->parent_bus && dev->parent_bus->hotplug_handler) { + if (hotplug_ctrl == NULL && dev->parent_bus) { hotplug_ctrl = dev->parent_bus->hotplug_handler; - } else { - hotplug_ctrl = qdev_get_machine_hotplug_handler(dev); } return hotplug_ctrl; } diff --git a/include/hw/qdev-core.h b/include/hw/qdev-core.h index 35b8154e8b..ea4c1f60ed 100644 --- a/include/hw/qdev-core.h +++ b/include/hw/qdev-core.h @@ -282,6 +282,17 @@ void qdev_init_nofail(DeviceState *dev); void qdev_set_legacy_instance_id(DeviceState *dev, int alias_id, int required_for_version); HotplugHandler *qdev_get_machine_hotplug_handler(DeviceState *dev); +/** + * qdev_get_hotplug_handler: Get handler responsible for device wiring + * + * Find HOTPLUG_HANDLER for @dev that provides [pre|un]plug callbacks for it. + * + * Note: in case @dev has a parent bus, it will be returned as handler unless + * machine handler overrides it. + * + * Returns: pointer to object that implements TYPE_HOTPLUG_HANDLER interface + * or NULL if there aren't any. + */ HotplugHandler *qdev_get_hotplug_handler(DeviceState *dev); void qdev_unplug(DeviceState *dev, Error **errp); void qdev_simple_device_unplug_cb(HotplugHandler *hotplug_dev, |