qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Anthony Liguori <aliguori@us.ibm.com>
To: qemu-devel@nongnu.org
Cc: Kevin Wolf <kwolf@redhat.com>,
	Peter Maydell <peter.maydell@linaro.org>,
	Anthony Liguori <aliguori@us.ibm.com>,
	Stefan Hajnoczi <stefanha@linux.vnet.ibm.com>,
	Jan Kiszka <jan.kiszka@siemens.com>,
	Markus Armbruster <armbru@redhat.com>,
	Luiz Capitulino <lcapitulino@redhat.com>
Subject: [Qemu-devel] [PATCH v3 005/197] qdev: provide an interface to return canonical path from root (v2)
Date: Mon, 12 Dec 2011 14:18:01 -0600	[thread overview]
Message-ID: <1323721273-32404-6-git-send-email-aliguori@us.ibm.com> (raw)
In-Reply-To: <1323721273-32404-1-git-send-email-aliguori@us.ibm.com>

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 <aliguori@us.ibm.com>
---
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

  parent reply	other threads:[~2011-12-12 20:21 UTC|newest]

Thread overview: 74+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-12-12 20:17 [Qemu-devel] [PATCH v3 000/197] qom: dynamic properties and composition tree (v2) Anthony Liguori
2011-12-12 20:17 ` [Qemu-devel] [PATCH v3 001/197] qom: add a reference count to qdev objects Anthony Liguori
2011-12-12 20:28   ` Anthony Liguori
2011-12-12 20:17 ` [Qemu-devel] [PATCH v3 002/197] qom: add new dynamic property infrastructure based on Visitors (v2) Anthony Liguori
2011-12-12 20:17 ` [Qemu-devel] [PATCH v3 003/197] qom: register legacy properties as new style properties (v2) Anthony Liguori
2011-12-12 20:18 ` [Qemu-devel] [PATCH v3 004/197] qom: introduce root device Anthony Liguori
2011-12-12 20:18 ` Anthony Liguori [this message]
2011-12-12 20:18 ` [Qemu-devel] [PATCH v3 006/197] qdev: provide a path resolution (v2) Anthony Liguori
2011-12-12 20:18 ` [Qemu-devel] [PATCH v3 007/197] qom: add child properties (composition) (v2) Anthony Liguori
2011-12-12 20:18 ` [Qemu-devel] [PATCH v3 008/197] qom: add link properties (v2) Anthony Liguori
2011-12-12 20:18 ` [Qemu-devel] [PATCH v3 009/197] qapi: allow a 'gen' key to suppress code generation Anthony Liguori
2011-12-12 20:18 ` [Qemu-devel] [PATCH v3 010/197] qmp: add qom-list command Anthony Liguori
2011-12-12 20:18 ` [Qemu-devel] [PATCH v3 011/197] qom: qom_{get, set} monitor commands (v2) Anthony Liguori
2011-12-12 20:18 ` [Qemu-devel] [PATCH v3 012/197] qdev: add explicitly named devices to the root complex Anthony Liguori
2011-12-12 20:18 ` [Qemu-devel] [PATCH v3 013/197] dev: add an anonymous peripheral container Anthony Liguori
2011-12-12 20:18 ` [Qemu-devel] [PATCH v3 014/197] rtc: make piix3 set the rtc as a child (v2) Anthony Liguori
2011-12-12 20:18 ` [Qemu-devel] [PATCH v3 015/197] rtc: add a dynamic property for retrieving the date Anthony Liguori
2011-12-12 20:18 ` [Qemu-devel] [PATCH v3 016/197] qom: optimize qdev_get_canonical_path using a parent link Anthony Liguori
2011-12-12 20:18 ` [Qemu-devel] [PATCH v3 017/197] qmp: make qmp.py easier to use Anthony Liguori
2011-12-12 20:18 ` [Qemu-devel] [PATCH v3 018/197] qom: add test tools (v2) Anthony Liguori
2011-12-12 20:18 ` [Qemu-devel] [PATCH v3 019/197] bug fix spotted by paolo Anthony Liguori
2011-12-12 20:18 ` [Qemu-devel] [PATCH v3 020/197] qom: add vga node to the pc composition tree Anthony Liguori
2011-12-12 20:18 ` [Qemu-devel] [PATCH v3 021/197] qom: add string property type Anthony Liguori
2011-12-12 20:18 ` [Qemu-devel] [PATCH v3 022/197] qdev: add a qdev_get_type() function and expose as a 'type' property Anthony Liguori
2011-12-12 20:18 ` [Qemu-devel] [PATCH v3 023/197] pc: fill out most of the composition tree Anthony Liguori
2011-12-12 20:18 ` [Qemu-devel] [PATCH v3 024/197] i440fx: split out piix3 device Anthony Liguori
2011-12-12 20:18 ` [Qemu-devel] [PATCH v3 025/197] i440fx: rename piix_pci -> i440fx Anthony Liguori
2011-12-12 20:18 ` [Qemu-devel] [PATCH v3 026/197] qom: add qobject Anthony Liguori
2011-12-12 20:18 ` [Qemu-devel] [PATCH v3 027/197] rename qobject -> object Anthony Liguori
2011-12-12 20:18 ` [Qemu-devel] [PATCH v3 028/197] more renames Anthony Liguori
2011-12-12 20:18 ` [Qemu-devel] [PATCH v3 029/197] Start integration of qom w/qdev Anthony Liguori
2011-12-12 20:18 ` [Qemu-devel] [PATCH v3 030/197] qdev: move qdev->info to class Anthony Liguori
2011-12-12 20:18 ` [Qemu-devel] [PATCH v3 031/197] qdev: don't access name through info Anthony Liguori
2011-12-12 20:18 ` [Qemu-devel] [PATCH v3 032/197] qdev: user a wrapper to access reset and promote reset to a class method Anthony Liguori
2011-12-12 20:18 ` [Qemu-devel] [PATCH v3 033/197] a little better approach to this Anthony Liguori
2011-12-12 20:18 ` [Qemu-devel] [PATCH v3 034/197] qdev: add isa-device as a subclass of device Anthony Liguori
2011-12-12 20:18 ` [Qemu-devel] [PATCH v3 035/197] isa: more isa stuff Anthony Liguori
2011-12-12 20:18 ` [Qemu-devel] [PATCH v3 036/197] qom: make pcidevice part of the hierarchy Anthony Liguori
2011-12-12 20:18 ` [Qemu-devel] [PATCH v3 039/197] virtio-serial-port Anthony Liguori
2011-12-12 20:18 ` [Qemu-devel] [PATCH v3 040/197] get rid of more DO_UPCAST Anthony Liguori
2011-12-12 20:18 ` [Qemu-devel] [PATCH v3 041/197] add class_init to deviceinfo Anthony Liguori
2011-12-12 20:18 ` [Qemu-devel] [PATCH v3 042/197] isa: move methods from isadeviceinfo to isadeviceclass Anthony Liguori
2011-12-12 20:18 ` [Qemu-devel] [PATCH v3 043/197] kill off ISADeviceInfo Anthony Liguori
2011-12-12 20:18 ` [Qemu-devel] [PATCH v3 044/197] usb: don't access dev->info directly Anthony Liguori
2011-12-12 20:18 ` [Qemu-devel] [PATCH v3 045/197] usb: get rid of info pointer Anthony Liguori
2011-12-12 20:18 ` [Qemu-devel] [PATCH v3 046/197] usb: promote all of the methods for USBDevice to class methods Anthony Liguori
2011-12-12 20:18 ` [Qemu-devel] [PATCH v3 047/197] usb: use a factory instead of doing silly things for legacy Anthony Liguori
2011-12-12 20:18 ` [Qemu-devel] [PATCH v3 048/197] usb: kill USBDeviceInfo Anthony Liguori
2011-12-12 20:18 ` [Qemu-devel] [PATCH v3 049/197] usb-hid: simply class initialization a bit Anthony Liguori
2011-12-12 20:18 ` [Qemu-devel] [PATCH v3 050/197] accessors for scsideviceinfo Anthony Liguori
2011-12-12 20:18 ` [Qemu-devel] [PATCH v3 051/197] drop info link in SCSIDeviceInfo Anthony Liguori
2011-12-12 20:18 ` [Qemu-devel] [PATCH v3 052/197] move methods out of SCSIDeviceInfo into SCSIDeviceClass Anthony Liguori
2011-12-12 20:18 ` [Qemu-devel] [PATCH v3 053/197] kill off SCSIDeviceInfo Anthony Liguori
2011-12-12 20:18 ` [Qemu-devel] [PATCH v3 054/197] get rid of CCIDCardInfo Anthony Liguori
2011-12-12 20:18 ` [Qemu-devel] [PATCH v3 055/197] rename i2c_slave -> I2CSlave Anthony Liguori
2011-12-12 20:18 ` [Qemu-devel] [PATCH v3 056/197] add I2CSlave to the type hierarchy Anthony Liguori
2011-12-12 20:18 ` [Qemu-devel] [PATCH v3 057/197] add SMBusDevice to the type hiearchy Anthony Liguori
2011-12-12 20:18 ` [Qemu-devel] [PATCH v3 058/197] fixup type registration Anthony Liguori
2011-12-12 20:18 ` [Qemu-devel] [PATCH v3 059/197] kill off SMBusDeviceInfo Anthony Liguori
2011-12-12 20:18 ` [Qemu-devel] [PATCH v3 060/197] add guards Anthony Liguori
2011-12-12 20:18 ` [Qemu-devel] [PATCH v3 061/197] killall I2CSlaveInfo Anthony Liguori
2011-12-12 20:18 ` [Qemu-devel] [PATCH v3 062/197] killall HDACodecDeviceInfo Anthony Liguori
2011-12-12 20:18 ` [Qemu-devel] [PATCH v3 063/197] make spapr a bit more patch monkey friendly Anthony Liguori
2011-12-12 20:19 ` [Qemu-devel] [PATCH v3 064/197] killall VIOsPAPRDeviceInfo Anthony Liguori
2011-12-13  2:04   ` Michael Ellerman
2011-12-13  2:10     ` Anthony Liguori
2011-12-13  2:22       ` Michael Ellerman
2011-12-13  2:25         ` Anthony Liguori
2011-12-13  3:26           ` David Gibson
2011-12-12 20:19 ` [Qemu-devel] [PATCH v3 065/197] qxl: be more patch monkey friendly Anthony Liguori
2011-12-12 20:19 ` [Qemu-devel] [PATCH v3 066/197] make es1370 more script " Anthony Liguori
2011-12-12 20:19 ` [Qemu-devel] [PATCH v3 067/197] remove arrays of PCIDeviceInfo Anthony Liguori
2011-12-12 20:19 ` [Qemu-devel] [PATCH v3 068/197] Patch monkey PCIDeviceInfo conversion Anthony Liguori
2011-12-12 20:19 ` [Qemu-devel] [PATCH v3 069/197] patch monkey, that funky monkey Anthony Liguori

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1323721273-32404-6-git-send-email-aliguori@us.ibm.com \
    --to=aliguori@us.ibm.com \
    --cc=armbru@redhat.com \
    --cc=jan.kiszka@siemens.com \
    --cc=kwolf@redhat.com \
    --cc=lcapitulino@redhat.com \
    --cc=peter.maydell@linaro.org \
    --cc=qemu-devel@nongnu.org \
    --cc=stefanha@linux.vnet.ibm.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).