Message ID | 1354196978-5375-1-git-send-email-aliguori@us.ibm.com |
---|---|
State | New |
Headers | show |
On 29 November 2012 13:49, Anthony Liguori <aliguori@us.ibm.com> wrote: > We are currently checking for an exact type match. Use QOM dynamic_cast to > check for a compatible type instead. I think this only catches the case where a bus was explicitly specified via bus=. For the default case you also need to change the similar code for checking the bus type in qbus_find_recursive(), right? -- PMM
On 29/11/2012 14:56, Peter Maydell wrote: > On 29 November 2012 13:49, Anthony Liguori<aliguori@us.ibm.com> wrote: >> We are currently checking for an exact type match. Use QOM dynamic_cast to >> check for a compatible type instead. > I think this only catches the case where a bus was explicitly > specified via bus=. For the default case you also need to change > the similar code for checking the bus type in qbus_find_recursive(), > right? > > -- PMM Right, it's working only with the "bus=" command line.
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;
We are currently checking for an exact type match. Use QOM dynamic_cast to check for a compatible type instead. Cc: Konrad Frederic <fred.konrad@greensocs.com> Signed-off-by: Anthony Liguori <aliguori@us.ibm.com> --- hw/qdev-monitor.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-)