qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH v3 001/197] qom: add a reference count to qdev o


From: Anthony Liguori
Subject: Re: [Qemu-devel] [PATCH v3 001/197] qom: add a reference count to qdev objects
Date: Mon, 12 Dec 2011 14:28:25 -0600
User-agent: Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.2.21) Gecko/20110831 Lightning/1.0b2 Thunderbird/3.1.13

On 12/12/2011 02:17 PM, Anthony Liguori wrote:
To ensure that a device isn't removed from the graph until all of its links are
broken.

Signed-off-by: Anthony Liguori<address@hidden>

Sorry, my mail script went awry :-(

Ignore this series.

Regards,

Anthony Liguori

---
  hw/qdev.c |   16 ++++++++++++++++
  hw/qdev.h |   26 ++++++++++++++++++++++++++
  2 files changed, 42 insertions(+), 0 deletions(-)

diff --git a/hw/qdev.c b/hw/qdev.c
index 106407f..fdc9843 100644
--- a/hw/qdev.c
+++ b/hw/qdev.c
@@ -323,6 +323,11 @@ int qdev_unplug(DeviceState *dev)
      }
      assert(dev->info->unplug != NULL);

+    if (dev->ref != 0) {
+        qerror_report(QERR_DEVICE_IN_USE, dev->id?:"");
+        return -1;
+    }
+
      qdev_hot_removed = true;

      return dev->info->unplug(dev);
@@ -962,3 +967,14 @@ char* qdev_get_fw_dev_path(DeviceState *dev)

      return strdup(path);
  }
+
+void qdev_ref(DeviceState *dev)
+{
+    dev->ref++;
+}
+
+void qdev_unref(DeviceState *dev)
+{
+    g_assert(dev->ref>  0);
+    dev->ref--;
+}
diff --git a/hw/qdev.h b/hw/qdev.h
index 36a4198..2397b4e 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




reply via email to

[Prev in Thread] Current Thread [Next in Thread]