From: "Andreas Färber" <afaerber@suse.de>
To: qemu-devel@nongnu.org
Cc: "Hani Benhabiles" <hani@linux.com>,
"Andreas Färber" <afaerber@suse.de>,
"Luiz Capitulino" <lcapitulino@redhat.com>
Subject: [Qemu-devel] [PATCH v2 7/9] qom: Add verbose option to info qom-tree HMP command
Date: Thu, 12 Mar 2015 17:43:42 +0100 [thread overview]
Message-ID: <1426178624-32638-8-git-send-email-afaerber@suse.de> (raw)
In-Reply-To: <1426178624-32638-1-git-send-email-afaerber@suse.de>
It lists object properties, as equivalent to what info qtree displays.
Cc: Hani Benhabiles <hani@linux.com>
Signed-off-by: Andreas Färber <afaerber@suse.de>
---
monitor.c | 6 +++---
qdev-monitor.c | 49 ++++++++++++++++++++++++++++++++++++++++++-------
2 files changed, 45 insertions(+), 10 deletions(-)
diff --git a/monitor.c b/monitor.c
index 48f7f5a..9e16b4a 100644
--- a/monitor.c
+++ b/monitor.c
@@ -2890,9 +2890,9 @@ static mon_cmd_t info_cmds[] = {
},
{
.name = "qom-tree",
- .args_type = "path:s?",
- .params = "[path]",
- .help = "show QOM composition tree",
+ .args_type = "verbose:-v,path:s?",
+ .params = "[-v] [path]",
+ .help = "show QOM composition tree (-v: show properties)",
.mhandler.cmd = hmp_info_qom_tree,
},
{
diff --git a/qdev-monitor.c b/qdev-monitor.c
index 1d87f57..845abfa 100644
--- a/qdev-monitor.c
+++ b/qdev-monitor.c
@@ -22,6 +22,7 @@
#include "monitor/monitor.h"
#include "monitor/qdev.h"
#include "qmp-commands.h"
+#include "qapi/string-output-visitor.h"
#include "sysemu/arch_init.h"
#include "qemu/config-file.h"
@@ -681,40 +682,74 @@ void hmp_info_qdm(Monitor *mon, const QDict *qdict)
typedef struct QOMCompositionState {
Monitor *mon;
int indent;
+ bool verbose;
} QOMCompositionState;
-static void print_qom_composition(Monitor *mon, Object *obj, int indent);
+static void print_qom_composition(Monitor *mon, Object *obj, int indent,
+ bool verbose);
static int print_qom_composition_child(Object *obj, void *opaque)
{
QOMCompositionState *s = opaque;
- print_qom_composition(s->mon, obj, s->indent);
+ print_qom_composition(s->mon, obj, s->indent, s->verbose);
return 0;
}
-static void print_qom_composition(Monitor *mon, Object *obj, int indent)
+static void print_qom_composition(Monitor *mon, Object *obj, int indent,
+ bool verbose)
{
QOMCompositionState s = {
.mon = mon,
.indent = indent + 2,
+ .verbose = verbose,
};
- char *name;
+ ObjectProperty *prop;
+ StringOutputVisitor *mo;
+ Error *local_err = NULL;
+ char *name, *str;
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));
+ if (verbose) {
+ monitor_printf(mon, "%*s/%s\n", indent, "", name);
+ QTAILQ_FOREACH(prop, &obj->properties, node) {
+ mo = string_output_visitor_new(true);
+ if (!prop->get) {
+ monitor_printf(mon, "%*s%s (write-only)\n", indent + 2, "",
+ prop->name);
+ } else {
+ prop->get(obj, string_output_get_visitor(mo), prop->opaque,
+ prop->name, &local_err);
+ if (local_err) {
+ monitor_printf(mon, "%*s%s: Error: %s\n", indent + 2, "",
+ prop->name, error_get_pretty(local_err));
+ error_free(local_err);
+ local_err = NULL;
+ } else {
+ str = string_output_get_string(mo);
+ monitor_printf(mon, "%*s%s: %s\n", indent + 2, "",
+ prop->name, str);
+ g_free(str);
+ }
+ }
+ string_output_visitor_cleanup(mo);
+ }
+ } else {
+ 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)
{
+ bool verbose = qdict_get_try_bool(dict, "verbose", 0);
const char *path = qdict_get_try_str(dict, "path");
Object *obj;
bool ambiguous = false;
@@ -732,7 +767,7 @@ void hmp_info_qom_tree(Monitor *mon, const QDict *dict)
} else {
obj = qdev_get_machine();
}
- print_qom_composition(mon, obj, 0);
+ print_qom_composition(mon, obj, 0, verbose);
}
int do_device_add(Monitor *mon, const QDict *qdict, QObject **ret_data)
--
2.1.4
next prev parent reply other threads:[~2015-03-12 16:43 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-03-12 16:43 [Qemu-devel] [PATCH v2 0/9] qom: HMP commands to supersede info qtree Andreas Färber
2015-03-12 16:43 ` [Qemu-devel] [PATCH v2 1/9] scripts: Add qom-tree script Andreas Färber
2015-03-12 16:43 ` [Qemu-devel] [PATCH v2 2/9] qom: Implement qom-list HMP command Andreas Färber
2015-03-13 1:32 ` Gonglei
2015-03-12 16:43 ` [Qemu-devel] [PATCH v2 3/9] qom: Implement qom-set " Andreas Färber
2015-03-13 1:34 ` Gonglei
2015-03-12 16:43 ` [Qemu-devel] [PATCH v2 4/9] qom: Implement info qom-tree " Andreas Färber
2015-03-12 16:43 ` [Qemu-devel] [PATCH v2 5/9] qapi: Stub out StringOutputVisitor struct support Andreas Färber
2015-03-12 16:43 ` [Qemu-devel] [PATCH v2 6/9] qom: Implement qom-get HMP command Andreas Färber
2015-03-13 1:36 ` Gonglei
2015-03-12 16:43 ` Andreas Färber [this message]
2015-03-12 16:43 ` [Qemu-devel] [PATCH v2 8/9] memory: Move owner-less MemoryRegions to /machine/unattached Andreas Färber
2015-03-12 18:05 ` Paolo Bonzini
2015-03-12 19:16 ` Andreas Färber
2015-03-12 16:43 ` [Qemu-devel] [PATCH v2 9/9] qdev: Move owner-less IRQs " Andreas Färber
2015-03-13 1:30 ` [Qemu-devel] [PATCH v2 0/9] qom: HMP commands to supersede info qtree Gonglei
2015-03-17 5:15 ` Alistair Francis
2015-03-17 7:33 ` Markus Armbruster
2015-03-17 17:17 ` Andreas Färber
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=1426178624-32638-8-git-send-email-afaerber@suse.de \
--to=afaerber@suse.de \
--cc=hani@linux.com \
--cc=lcapitulino@redhat.com \
--cc=qemu-devel@nongnu.org \
/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).