aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarkus Armbruster <armbru@redhat.com>2020-06-10 07:32:43 +0200
committerMarkus Armbruster <armbru@redhat.com>2020-06-15 22:06:04 +0200
commit510ef98dca5c44039b6f77f9752f62b5a9752c00 (patch)
tree3292b99a7df5721b76f4615cdc9ea1877da583a0
parent1afec9e8ea46f8e54d0ca73b7a58f27af5edc7da (diff)
qdev: Make qdev_realize() support bus-less devices
So far, qdev_realize() supports only devices that plug into a bus: argument @bus cannot be null. Extend it to support bus-less devices, too. Signed-off-by: Markus Armbruster <armbru@redhat.com> Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com> Reviewed-by: Paolo Bonzini <pbonzini@redhat.com> Message-Id: <20200610053247.1583243-55-armbru@redhat.com>
-rw-r--r--hw/core/qdev.c9
1 files changed, 6 insertions, 3 deletions
diff --git a/hw/core/qdev.c b/hw/core/qdev.c
index 78a06db76e..50336168f2 100644
--- a/hw/core/qdev.c
+++ b/hw/core/qdev.c
@@ -408,7 +408,7 @@ void qdev_init_nofail(DeviceState *dev)
/*
* Realize @dev.
* @dev must not be plugged into a bus.
- * Plug @dev into @bus. This takes a reference to @dev.
+ * If @bus, plug @dev into @bus. This takes a reference to @dev.
* If @dev has no QOM parent, make one up, taking another reference.
* On success, return true.
* On failure, store an error through @errp and return false.
@@ -418,9 +418,12 @@ bool qdev_realize(DeviceState *dev, BusState *bus, Error **errp)
Error *err = NULL;
assert(!dev->realized && !dev->parent_bus);
- assert(bus);
- qdev_set_parent_bus(dev, bus);
+ if (bus) {
+ qdev_set_parent_bus(dev, bus);
+ } else {
+ assert(!DEVICE_GET_CLASS(dev)->bus_type);
+ }
object_property_set_bool(OBJECT(dev), true, "realized", &err);
if (err) {