[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH v3 05/20] qdev: provide an interface to return canon
From: |
Anthony Liguori |
Subject: |
[Qemu-devel] [PATCH v3 05/20] qdev: provide an interface to return canonical path from root (v2) |
Date: |
Mon, 12 Dec 2011 14:29:29 -0600 |
The canonical path is the path in the composition tree from the root to the
device. This is effectively the name of the device.
This is an incredibly unefficient implementation that will be optimized in
a future patch.
Signed-off-by: Anthony Liguori <address@hidden>
---
v1 -> v2
- change from gslist to qemu-queue (Kevin/Gerd)
---
hw/qdev.c | 48 ++++++++++++++++++++++++++++++++++++++++++++++++
hw/qdev.h | 9 +++++++++
2 files changed, 57 insertions(+), 0 deletions(-)
diff --git a/hw/qdev.c b/hw/qdev.c
index bb0b9f7..79849c9 100644
--- a/hw/qdev.c
+++ b/hw/qdev.c
@@ -1173,3 +1173,51 @@ DeviceState *qdev_get_root(void)
return qdev_root;
}
+
+static gchar *qdev_get_path_in(DeviceState *parent, DeviceState *dev)
+{
+ DeviceProperty *prop;
+
+ if (parent == dev) {
+ return g_strdup("");
+ }
+
+ QTAILQ_FOREACH(prop, &parent->properties, node) {
+ gchar *subpath;
+
+ if (!strstart(prop->type, "child<", NULL)) {
+ continue;
+ }
+
+ /* Check to see if the device is one of parent's children */
+ if (prop->opaque == dev) {
+ return g_strdup(prop->name);
+ }
+
+ /* Check to see if the device is a child of our child */
+ subpath = qdev_get_path_in(prop->opaque, dev);
+ if (subpath) {
+ gchar *path;
+
+ path = g_strdup_printf("%s/%s", prop->name, subpath);
+ g_free(subpath);
+
+ return path;
+ }
+ }
+
+ return NULL;
+}
+
+gchar *qdev_get_canonical_path(DeviceState *dev)
+{
+ gchar *path, *newpath;
+
+ path = qdev_get_path_in(qdev_get_root(), dev);
+ g_assert(path != NULL);
+
+ newpath = g_strdup_printf("/%s", path);
+ g_free(path);
+
+ return newpath;
+}
diff --git a/hw/qdev.h b/hw/qdev.h
index 52aadd2..0f00497 100644
--- a/hw/qdev.h
+++ b/hw/qdev.h
@@ -490,4 +490,13 @@ void qdev_property_add_legacy(DeviceState *dev, Property
*prop, Error **errp);
*/
DeviceState *qdev_get_root(void);
+/**
+ * @qdev_get_canonical_path - returns the canonical path for a device. This
+ * is the path within the composition tree starting from the root.
+ *
+ * Returns:
+ * The canonical path in the composition tree.
+ */
+gchar *qdev_get_canonical_path(DeviceState *dev);
+
#endif
--
1.7.4.1
- [Qemu-devel] [PATCH v3 00/20] qom: dynamic properties and composition tree, Anthony Liguori, 2011/12/12
- [Qemu-devel] [PATCH v3 01/20] qom: add a reference count to qdev objects, Anthony Liguori, 2011/12/12
- [Qemu-devel] [PATCH v3 02/20] qom: add new dynamic property infrastructure based on Visitors (v2), Anthony Liguori, 2011/12/12
- [Qemu-devel] [PATCH v3 03/20] qom: register legacy properties as new style properties (v2), Anthony Liguori, 2011/12/12
- [Qemu-devel] [PATCH v3 04/20] qom: introduce root device, Anthony Liguori, 2011/12/12
- [Qemu-devel] [PATCH v3 05/20] qdev: provide an interface to return canonical path from root (v2),
Anthony Liguori <=
- [Qemu-devel] [PATCH v3 06/20] qdev: provide a path resolution (v2), Anthony Liguori, 2011/12/12
- [Qemu-devel] [PATCH v3 07/20] qom: add child properties (composition) (v3), Anthony Liguori, 2011/12/12
- [Qemu-devel] [PATCH v3 08/20] qom: add link properties (v2), Anthony Liguori, 2011/12/12
- [Qemu-devel] [PATCH v3 10/20] qmp: add qom-list command, Anthony Liguori, 2011/12/12
- [Qemu-devel] [PATCH v3 09/20] qapi: allow a 'gen' key to suppress code generation, Anthony Liguori, 2011/12/12
- [Qemu-devel] [PATCH v3 12/20] qdev: add explicitly named devices to the root complex, Anthony Liguori, 2011/12/12
- [Qemu-devel] [PATCH v3 11/20] qom: qom_{get, set} monitor commands (v2), Anthony Liguori, 2011/12/12
- [Qemu-devel] [PATCH v3 14/20] rtc: make piix3 set the rtc as a child (v2), Anthony Liguori, 2011/12/12
- [Qemu-devel] [PATCH v3 16/20] qom: optimize qdev_get_canonical_path using a parent link, Anthony Liguori, 2011/12/12
- [Qemu-devel] [PATCH v3 19/20] qdev: add a qdev_get_type() function and expose as a 'type' property, Anthony Liguori, 2011/12/12