From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:45129) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XWl4O-0004Vl-TV for qemu-devel@nongnu.org; Wed, 24 Sep 2014 07:49:23 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1XWl4I-000677-FY for qemu-devel@nongnu.org; Wed, 24 Sep 2014 07:49:16 -0400 Received: from mx1.redhat.com ([209.132.183.28]:36295) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XWl4I-00065H-6T for qemu-devel@nongnu.org; Wed, 24 Sep 2014 07:49:10 -0400 From: Igor Mammedov Date: Wed, 24 Sep 2014 11:48:02 +0000 Message-Id: <1411559299-19042-14-git-send-email-imammedo@redhat.com> In-Reply-To: <1411559299-19042-1-git-send-email-imammedo@redhat.com> References: <1411559299-19042-1-git-send-email-imammedo@redhat.com> Subject: [Qemu-devel] [PATCH 13/30] qdev: hotplug: set handler only if HOTPLUG_HANDLER interface is supported List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: dmitry@daynix.com, borntraeger@de.ibm.com, mst@redhat.com, agraf@suse.de, cornelia.huck@de.ibm.com, kraxel@redhat.com, amit.shah@redhat.com, pbonzini@redhat.com, rth@twiddle.net 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 --- 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