Check if 'handler' implements HOTPLUG_HANDLER interface before setting it, if it's not then do nothing and leave bus not hotpluggable.
That would allow to reuse the same code for creating bus for example 'scsi_bus_new()' for both hotpluggable and not hotpluggable controllers. Signed-off-by: Igor Mammedov <imamm...@redhat.com> --- PS: Keep allow_hotplug = 1 before check to preserve legacy behaviour for incremental conversion without breaking bisect-ability. I will be removed later in series. --- include/hw/qdev-core.h | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/include/hw/qdev-core.h b/include/hw/qdev-core.h index ba812c5..653ff4a 100644 --- a/include/hw/qdev-core.h +++ b/include/hw/qdev-core.h @@ -366,9 +366,14 @@ char *qdev_get_dev_path(DeviceState *dev); static inline void qbus_set_hotplug_handler(BusState *bus, DeviceState *handler, Error **errp) { + bus->allow_hotplug = 1; + + if (!object_dynamic_cast(OBJECT(handler), TYPE_HOTPLUG_HANDLER)) { + return; + } + object_property_set_link(OBJECT(bus), OBJECT(handler), QDEV_HOTPLUG_HANDLER_PROPERTY, errp); - bus->allow_hotplug = 1; } static inline bool qbus_is_hotpluggable(BusState *bus) -- 1.8.3.1