summary refs log tree commit diff stats
path: root/hw/qdev.h
diff options
context:
space:
mode:
authorAnthony Liguori <aliguori@us.ibm.com>2011-12-12 14:29:25 -0600
committerAnthony Liguori <aliguori@us.ibm.com>2011-12-15 09:20:47 -0600
commit85ed303bfe1f67a4c18ffe51916e73cffd7d9e9b (patch)
tree8d0188741f650e031c3f841778e6a1d07e1e21c5 /hw/qdev.h
parent222f23f508a8d778f56eddef14752dfd26d225b4 (diff)
downloadfocaccia-qemu-85ed303bfe1f67a4c18ffe51916e73cffd7d9e9b.tar.gz
focaccia-qemu-85ed303bfe1f67a4c18ffe51916e73cffd7d9e9b.zip
qom: add a reference count to qdev objects
To ensure that a device isn't removed from the graph until all of its links are
broken.

Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
Diffstat (limited to 'hw/qdev.h')
-rw-r--r--hw/qdev.h26
1 files changed, 26 insertions, 0 deletions
diff --git a/hw/qdev.h b/hw/qdev.h
index 36a4198c89..2397b4e84c 100644
--- a/hw/qdev.h
+++ b/hw/qdev.h
@@ -45,6 +45,12 @@ struct DeviceState {
     QTAILQ_ENTRY(DeviceState) sibling;
     int instance_id_alias;
     int alias_required_for_version;
+
+    /**
+     * This tracks the number of references between devices.  See @qdev_ref for
+     * more information.
+     */
+    uint32_t ref;
 };
 
 typedef void (*bus_dev_printfn)(Monitor *mon, DeviceState *dev, int indent);
@@ -329,4 +335,24 @@ char *qdev_get_fw_dev_path(DeviceState *dev);
 /* This is a nasty hack to allow passing a NULL bus to qdev_create.  */
 extern struct BusInfo system_bus_info;
 
+/**
+ * @qdev_ref
+ *
+ * Increase the reference count of a device.  A device cannot be freed as long
+ * as its reference count is greater than zero.
+ *
+ * @dev - the device
+ */
+void qdev_ref(DeviceState *dev);
+
+/**
+ * @qdef_unref
+ *
+ * Decrease the reference count of a device.  A device cannot be freed as long
+ * as its reference count is greater than zero.
+ *
+ * @dev - the device
+ */
+void qdev_unref(DeviceState *dev);
+
 #endif