qemu-devel
[Top][All Lists]
Advanced

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

[PATCH not-for-merge 3/5] qdev: Make "info qtree" show child devices sor


From: Markus Armbruster
Subject: [PATCH not-for-merge 3/5] qdev: Make "info qtree" show child devices sorted by QOM path
Date: Mon, 18 May 2020 07:19:43 +0200

"info qtree" shows children in reverse creation order.  Show them
sorted by QOM path.

Signed-off-by: Markus Armbruster <address@hidden>
---
 qdev-monitor.c | 28 +++++++++++++++++++++++++++-
 1 file changed, 27 insertions(+), 1 deletion(-)

diff --git a/qdev-monitor.c b/qdev-monitor.c
index a4735d3bb1..07f78e9f5d 100644
--- a/qdev-monitor.c
+++ b/qdev-monitor.c
@@ -771,17 +771,43 @@ static void qdev_print(Monitor *mon, DeviceState *dev, 
int indent)
     }
 }
 
+struct qbus_child {
+    DeviceState *dev;
+    char *qom_path;
+};
+
+static int dev_cmp(const void *a, const void *b)
+{
+    return g_strcmp0(((struct qbus_child *)a)->qom_path,
+                     ((struct qbus_child *)b)->qom_path);
+}
+
 static void qbus_print(Monitor *mon, BusState *bus, int indent)
 {
     BusChild *kid;
+    GSList *children = NULL;
 
     qdev_printf("bus: %s\n", bus->name);
     indent += 2;
     qdev_printf("type %s\n", object_get_typename(OBJECT(bus)));
     QTAILQ_FOREACH(kid, &bus->children, sibling) {
         DeviceState *dev = kid->child;
-        qdev_print(mon, dev, indent);
+        struct qbus_child *qc = g_malloc(sizeof(*qc));
+        qc->dev = dev;
+        qc->qom_path = object_get_canonical_path(OBJECT(dev));
+        children = g_slist_insert_sorted(children, qc, dev_cmp);
     }
+    while (children) {
+        struct qbus_child *qc = children->data;
+        DeviceState *dev = qc->dev;
+        GSList *next = children->next;
+        qdev_print(mon, dev, indent);
+        g_free(qc->qom_path);
+        g_free(qc);
+        g_slist_free_1(children);
+        children = next;
+    }
+
 }
 #undef qdev_printf
 
-- 
2.21.1




reply via email to

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