Commit e912c96f authored by Anthony Liguori's avatar Anthony Liguori
Browse files

qdev: relax bus type check in qdev_device_add() (v2)



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>
Cc: Peter Maydell <peter.maydell@linaro.org>
Signed-off-by: default avatarAnthony Liguori <aliguori@us.ibm.com>
---
v1 -> v2:
 - also add cast to qbus_find_recursive (Peter)
 - simplify by doing object_dynamic_cast instead of messing with classes
parent e9bff10f
Loading
Loading
Loading
Loading
+2 −3
Original line number Diff line number Diff line
@@ -289,8 +289,7 @@ static BusState *qbus_find_recursive(BusState *bus, const char *name,
    if (name && (strcmp(bus->name, name) != 0)) {
        match = 0;
    }
    if (bus_typename &&
        (strcmp(object_get_typename(OBJECT(bus)), bus_typename) != 0)) {
    if (bus_typename && !object_dynamic_cast(OBJECT(bus), bus_typename)) {
        match = 0;
    }
    if (match) {
@@ -435,7 +434,7 @@ DeviceState *qdev_device_add(QemuOpts *opts)
        if (!bus) {
            return NULL;
        }
        if (strcmp(object_get_typename(OBJECT(bus)), k->bus_type) != 0) {
        if (!object_dynamic_cast(OBJECT(bus), k->bus_type)) {
            qerror_report(QERR_BAD_BUS_FOR_DEVICE,
                          driver, object_get_typename(OBJECT(bus)));
            return NULL;