[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH v2 4/9] qom: Implement info qom-tree HMP command
From: |
Andreas Färber |
Subject: |
[Qemu-devel] [PATCH v2 4/9] qom: Implement info qom-tree HMP command |
Date: |
Thu, 12 Mar 2015 17:43:39 +0100 |
To complement qdev's bus-oriented info qtree, info qom-tree
prints a hierarchical view of the QOM composition tree.
By default, the machine composition tree is shown. This can be overriden
by supplying a path argument, such as "info qom-tree /".
Signed-off-by: Andreas Färber <address@hidden>
---
hmp-commands.hx | 2 ++
include/monitor/qdev.h | 1 +
monitor.c | 7 +++++++
qdev-monitor.c | 57 ++++++++++++++++++++++++++++++++++++++++++++++++++
4 files changed, 67 insertions(+)
diff --git a/hmp-commands.hx b/hmp-commands.hx
index 1a6cd3e..3c1915a 100644
--- a/hmp-commands.hx
+++ b/hmp-commands.hx
@@ -1766,6 +1766,8 @@ show balloon information
show device tree
@item info qdm
show qdev device model list
address@hidden info qom-tree
+show object composition tree
@item info roms
show roms
@item info tpm
diff --git a/include/monitor/qdev.h b/include/monitor/qdev.h
index 5eb4a11..7190752 100644
--- a/include/monitor/qdev.h
+++ b/include/monitor/qdev.h
@@ -8,6 +8,7 @@
void hmp_info_qtree(Monitor *mon, const QDict *qdict);
void hmp_info_qdm(Monitor *mon, const QDict *qdict);
+void hmp_info_qom_tree(Monitor *mon, const QDict *dict);
int do_device_add(Monitor *mon, const QDict *qdict, QObject **ret_data);
int qdev_device_help(QemuOpts *opts);
DeviceState *qdev_device_add(QemuOpts *opts);
diff --git a/monitor.c b/monitor.c
index c86a89e..48f7f5a 100644
--- a/monitor.c
+++ b/monitor.c
@@ -2889,6 +2889,13 @@ static mon_cmd_t info_cmds[] = {
.mhandler.cmd = hmp_info_qdm,
},
{
+ .name = "qom-tree",
+ .args_type = "path:s?",
+ .params = "[path]",
+ .help = "show QOM composition tree",
+ .mhandler.cmd = hmp_info_qom_tree,
+ },
+ {
.name = "roms",
.args_type = "",
.params = "",
diff --git a/qdev-monitor.c b/qdev-monitor.c
index 5d30ac5..1d87f57 100644
--- a/qdev-monitor.c
+++ b/qdev-monitor.c
@@ -678,6 +678,63 @@ void hmp_info_qdm(Monitor *mon, const QDict *qdict)
qdev_print_devinfos(true);
}
+typedef struct QOMCompositionState {
+ Monitor *mon;
+ int indent;
+} QOMCompositionState;
+
+static void print_qom_composition(Monitor *mon, Object *obj, int indent);
+
+static int print_qom_composition_child(Object *obj, void *opaque)
+{
+ QOMCompositionState *s = opaque;
+
+ print_qom_composition(s->mon, obj, s->indent);
+
+ return 0;
+}
+
+static void print_qom_composition(Monitor *mon, Object *obj, int indent)
+{
+ QOMCompositionState s = {
+ .mon = mon,
+ .indent = indent + 2,
+ };
+ char *name;
+
+ if (obj == object_get_root()) {
+ name = g_strdup("");
+ } else {
+ name = object_get_canonical_path_component(obj);
+ }
+ monitor_printf(mon, "%*s/%s (%s)\n", indent, "", name,
+ object_get_typename(obj));
+ g_free(name);
+ object_child_foreach(obj, print_qom_composition_child, &s);
+}
+
+void hmp_info_qom_tree(Monitor *mon, const QDict *dict)
+{
+ const char *path = qdict_get_try_str(dict, "path");
+ Object *obj;
+ bool ambiguous = false;
+
+ if (path) {
+ obj = object_resolve_path(path, &ambiguous);
+ if (!obj) {
+ monitor_printf(mon, "Path '%s' could not be resolved.\n", path);
+ return;
+ }
+ if (ambiguous) {
+ monitor_printf(mon, "Warning: Path '%s' is ambiguous.\n", path);
+ return;
+ }
+ } else {
+ obj = qdev_get_machine();
+ }
+ print_qom_composition(mon, obj, 0);
+}
+
int do_device_add(Monitor *mon, const QDict *qdict, QObject **ret_data)
{
Error *local_err = NULL;
--
2.1.4
- [Qemu-devel] [PATCH v2 0/9] qom: HMP commands to supersede info qtree, Andreas Färber, 2015/03/12
- [Qemu-devel] [PATCH v2 1/9] scripts: Add qom-tree script, Andreas Färber, 2015/03/12
- [Qemu-devel] [PATCH v2 3/9] qom: Implement qom-set HMP command, Andreas Färber, 2015/03/12
- [Qemu-devel] [PATCH v2 5/9] qapi: Stub out StringOutputVisitor struct support, Andreas Färber, 2015/03/12
- [Qemu-devel] [PATCH v2 4/9] qom: Implement info qom-tree HMP command,
Andreas Färber <=
- [Qemu-devel] [PATCH v2 9/9] qdev: Move owner-less IRQs to /machine/unattached, Andreas Färber, 2015/03/12
- [Qemu-devel] [PATCH v2 2/9] qom: Implement qom-list HMP command, Andreas Färber, 2015/03/12
- [Qemu-devel] [PATCH v2 7/9] qom: Add verbose option to info qom-tree HMP command, Andreas Färber, 2015/03/12
- [Qemu-devel] [PATCH v2 6/9] qom: Implement qom-get HMP command, Andreas Färber, 2015/03/12
- [Qemu-devel] [PATCH v2 8/9] memory: Move owner-less MemoryRegions to /machine/unattached, Andreas Färber, 2015/03/12
- Re: [Qemu-devel] [PATCH v2 0/9] qom: HMP commands to supersede info qtree, Gonglei, 2015/03/12