[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH 51/55] qdev: Make qdev_realize() support bus-less devices
From: |
Markus Armbruster |
Subject: |
[PATCH 51/55] qdev: Make qdev_realize() support bus-less devices |
Date: |
Tue, 19 May 2020 16:55:47 +0200 |
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.
qdev_realize_and_unref() remains restricted, because its reference
counting would become rather confusing for bus-less devices.
Signed-off-by: Markus Armbruster <address@hidden>
---
hw/core/qdev.c | 13 +++++++++----
1 file changed, 9 insertions(+), 4 deletions(-)
diff --git a/hw/core/qdev.c b/hw/core/qdev.c
index 323b6328c8..0662bbc812 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_ref(OBJECT(dev));
object_property_set_bool(OBJECT(dev), true, "realized", &err);
@@ -442,7 +445,7 @@ void qdev_unrealize(DeviceState *dev)
* Realize @dev and drop a reference.
* This is like qdev_realize(), except it steals a reference rather
* than take one to plug @dev into @bus. On failure, it drops that
- * reference instead. Intended use:
+ * reference instead. @bus must not be null. Intended use:
* dev = qdev_new();
* [...]
* qdev_realize_and_unref(dev, bus, errp);
@@ -452,6 +455,8 @@ bool qdev_realize_and_unref(DeviceState *dev, BusState
*bus, Error **errp)
{
bool ret;
+ assert(bus);
+
ret = qdev_realize(dev, bus, errp);
object_unref(OBJECT(dev));
return ret;
--
2.21.1
- Re: [PATCH 03/55] qdev: New qdev_new(), qdev_realize(), etc., (continued)
- [PATCH 48/55] sysbus: Convert qdev_set_parent_bus() use with Coccinelle, part 4, Markus Armbruster, 2020/05/19
- [PATCH 15/55] pci: Convert uses of pci_create() etc. manually, Markus Armbruster, 2020/05/19
- [PATCH 54/55] qdev: qdev_init_nofail() is now unused, drop, Markus Armbruster, 2020/05/19
- [PATCH 17/55] isa: New isa_new(), isa_realize_and_unref() etc., Markus Armbruster, 2020/05/19
- [PATCH 52/55] qdev: Use qdev_realize() in qdev_device_add(), Markus Armbruster, 2020/05/19
- [PATCH 37/55] sysbus: Drop useless OBJECT() in sysbus_init_child_obj() calls, Markus Armbruster, 2020/05/19
- [PATCH 25/55] usb: New usb_new(), usb_realize_and_unref(), Markus Armbruster, 2020/05/19
- [PATCH 51/55] qdev: Make qdev_realize() support bus-less devices,
Markus Armbruster <=
- Re: [PATCH 51/55] qdev: Make qdev_realize() support bus-less devices, Paolo Bonzini, 2020/05/20
- Re: [PATCH 51/55] qdev: Make qdev_realize() support bus-less devices, Markus Armbruster, 2020/05/20
- Re: [PATCH 51/55] qdev: Make qdev_realize() support bus-less devices, Paolo Bonzini, 2020/05/20
- Re: [PATCH 51/55] qdev: Make qdev_realize() support bus-less devices, Markus Armbruster, 2020/05/25
- Re: [PATCH 51/55] qdev: Make qdev_realize() support bus-less devices, Paolo Bonzini, 2020/05/25
- Re: [PATCH 51/55] qdev: Make qdev_realize() support bus-less devices, Markus Armbruster, 2020/05/26
- Re: [PATCH 51/55] qdev: Make qdev_realize() support bus-less devices, Paolo Bonzini, 2020/05/26
[PATCH 47/55] sysbus: Convert qdev_set_parent_bus() use with Coccinelle, part 3, Markus Armbruster, 2020/05/19
[PATCH 26/55] usb: Convert uses of usb_create(), Markus Armbruster, 2020/05/19