[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PULL for-2.0-rc0 28/31] qdev: Prepare realize/unrealize ho
From: |
Andreas Färber |
Subject: |
[Qemu-devel] [PULL for-2.0-rc0 28/31] qdev: Prepare realize/unrealize hooks for BusState |
Date: |
Wed, 12 Mar 2014 22:10:00 +0100 |
From: Bandan Das <address@hidden>
Add a "realized" property calling realize/unrealize hooks as for devices.
Signed-off-by: Bandan Das <address@hidden>
Signed-off-by: Andreas Färber <address@hidden>
---
hw/core/qdev.c | 41 +++++++++++++++++++++++++++++++++++++++++
include/hw/qdev-core.h | 6 ++++++
2 files changed, 47 insertions(+)
diff --git a/hw/core/qdev.c b/hw/core/qdev.c
index 71b7045..7e58259 100644
--- a/hw/core/qdev.c
+++ b/hw/core/qdev.c
@@ -501,6 +501,45 @@ static void bus_unparent(Object *obj)
}
}
+static bool bus_get_realized(Object *obj, Error **err)
+{
+ BusState *bus = BUS(obj);
+
+ return bus->realized;
+}
+
+static void bus_set_realized(Object *obj, bool value, Error **err)
+{
+ BusState *bus = BUS(obj);
+ BusClass *bc = BUS_GET_CLASS(bus);
+ Error *local_err = NULL;
+
+ if (value && !bus->realized) {
+ if (bc->realize) {
+ bc->realize(bus, &local_err);
+
+ if (local_err != NULL) {
+ goto error;
+ }
+
+ }
+ } else if (!value && bus->realized) {
+ if (bc->unrealize) {
+ bc->unrealize(bus, &local_err);
+
+ if (local_err != NULL) {
+ goto error;
+ }
+ }
+ }
+
+ bus->realized = value;
+ return;
+
+error:
+ error_propagate(err, local_err);
+}
+
void qbus_create_inplace(void *bus, size_t size, const char *typename,
DeviceState *parent, const char *name)
{
@@ -889,6 +928,8 @@ static void qbus_initfn(Object *obj)
object_property_add_link(obj, QDEV_HOTPLUG_HANDLER_PROPERTY,
TYPE_HOTPLUG_HANDLER,
(Object **)&bus->hotplug_handler, NULL);
+ object_property_add_bool(obj, "realized",
+ bus_get_realized, bus_set_realized, NULL);
}
static char *default_bus_get_fw_dev_path(DeviceState *dev)
diff --git a/include/hw/qdev-core.h b/include/hw/qdev-core.h
index 1ed0691..dbe473c 100644
--- a/include/hw/qdev-core.h
+++ b/include/hw/qdev-core.h
@@ -36,6 +36,8 @@ typedef int (*qdev_event)(DeviceState *dev);
typedef void (*qdev_resetfn)(DeviceState *dev);
typedef void (*DeviceRealize)(DeviceState *dev, Error **errp);
typedef void (*DeviceUnrealize)(DeviceState *dev, Error **errp);
+typedef void (*BusRealize)(BusState *bus, Error **errp);
+typedef void (*BusUnrealize)(BusState *bus, Error **errp);
struct VMStateDescription;
@@ -174,6 +176,9 @@ struct BusClass {
*/
char *(*get_fw_dev_path)(DeviceState *dev);
void (*reset)(BusState *bus);
+ BusRealize realize;
+ BusUnrealize unrealize;
+
/* maximum devices allowed on the bus, 0: no limit. */
int max_dev;
/* number of automatically allocated bus ids (e.g. ide.0) */
@@ -199,6 +204,7 @@ struct BusState {
int allow_hotplug;
HotplugHandler *hotplug_handler;
int max_index;
+ bool realized;
QTAILQ_HEAD(ChildrenHead, BusChild) children;
QLIST_ENTRY(BusState) sibling;
};
--
1.8.4.5
- [Qemu-devel] [PULL for-2.0-rc0 18/31] tests: Clean up IndustryPack TPCI200 gcov paths, (continued)
- [Qemu-devel] [PULL for-2.0-rc0 18/31] tests: Clean up IndustryPack TPCI200 gcov paths, Andreas Färber, 2014/03/12
- [Qemu-devel] [PULL for-2.0-rc0 23/31] tests: Add virtio-serial qtest, Andreas Färber, 2014/03/12
- [Qemu-devel] [PULL for-2.0-rc0 16/31] hw/boards: Convert current_machine to MachineState, Andreas Färber, 2014/03/12
- [Qemu-devel] [PULL for-2.0-rc0 25/31] virtio-console: QOM cast cleanup for VirtConsole, Andreas Färber, 2014/03/12
- [Qemu-devel] [PULL for-2.0-rc0 24/31] tests: Add virtio-console qtest, Andreas Färber, 2014/03/12
- [Qemu-devel] [PULL for-2.0-rc0 26/31] virtio-serial-port: Convert to QOM realize/unrealize, Andreas Färber, 2014/03/12
- [Qemu-devel] [PULL for-2.0-rc0 29/31] qdev: Realize buses on device realization, Andreas Färber, 2014/03/12
- [Qemu-devel] [PULL for-2.0-rc0 22/31] tests: Add virtio-scsi qtest, Andreas Färber, 2014/03/12
- [Qemu-devel] [PULL for-2.0-rc0 31/31] libqtest: Fix possible deadlock in qtest initialization, Andreas Färber, 2014/03/12
- [Qemu-devel] [PULL for-2.0-rc0 30/31] pci: Move VMState registration/unregistration to QOM realize/unrealize, Andreas Färber, 2014/03/12
- [Qemu-devel] [PULL for-2.0-rc0 28/31] qdev: Prepare realize/unrealize hooks for BusState,
Andreas Färber <=
- Re: [Qemu-devel] [PULL for-2.0-rc0 00/31] QOM devices patch queue 2014-03-12, Peter Maydell, 2014/03/12