From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([208.118.235.92]:40986) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Te4Vx-0006eE-9W for qemu-devel@nongnu.org; Thu, 29 Nov 2012 08:51:18 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Te4Uu-0007RB-7v for qemu-devel@nongnu.org; Thu, 29 Nov 2012 08:50:53 -0500 Received: from e28smtp06.in.ibm.com ([122.248.162.6]:35905) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Te4Ut-0007Pg-K2 for qemu-devel@nongnu.org; Thu, 29 Nov 2012 08:49:48 -0500 Received: from /spool/local by e28smtp06.in.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Thu, 29 Nov 2012 19:19:43 +0530 Received: from d28av04.in.ibm.com (d28av04.in.ibm.com [9.184.220.66]) by d28relay03.in.ibm.com (8.13.8/8.13.8/NCO v10.0) with ESMTP id qATDneKq36438198 for ; Thu, 29 Nov 2012 19:19:40 +0530 Received: from d28av04.in.ibm.com (loopback [127.0.0.1]) by d28av04.in.ibm.com (8.14.4/8.13.1/NCO v10.0 AVout) with ESMTP id qATJJWfU006568 for ; Fri, 30 Nov 2012 06:19:32 +1100 From: Anthony Liguori Date: Thu, 29 Nov 2012 07:49:38 -0600 Message-Id: <1354196978-5375-1-git-send-email-aliguori@us.ibm.com> Subject: [Qemu-devel] [PATCH] qdev: relax bus type check in qdev_device_add() List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: Anthony Liguori , Konrad Frederic We are currently checking for an exact type match. Use QOM dynamic_cast to check for a compatible type instead. Cc: Konrad Frederic Signed-off-by: Anthony Liguori --- hw/qdev-monitor.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/hw/qdev-monitor.c b/hw/qdev-monitor.c index 479eecd..69f5ff2 100644 --- a/hw/qdev-monitor.c +++ b/hw/qdev-monitor.c @@ -431,11 +431,16 @@ DeviceState *qdev_device_add(QemuOpts *opts) /* find bus */ path = qemu_opt_get(opts, "bus"); if (path != NULL) { + ObjectClass *bus_class; + bus = qbus_find(path); if (!bus) { return NULL; } - if (strcmp(object_get_typename(OBJECT(bus)), k->bus_type) != 0) { + + bus_class = OBJECT_CLASS(BUS_GET_CLASS(bus)); + + if (!object_class_dynamic_cast(bus_class, k->bus_type)) { qerror_report(QERR_BAD_BUS_FOR_DEVICE, driver, object_get_typename(OBJECT(bus))); return NULL; -- 1.8.0