[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH 4/5] qapi: introduce x-query-registers QMP command
From: |
Daniel P . Berrangé |
Subject: |
[PATCH 4/5] qapi: introduce x-query-registers QMP command |
Date: |
Wed, 8 Sep 2021 11:37:10 +0100 |
This is a counterpart to the HMP "info registers" command. It is being
added with an "x-" prefix because this QMP command is intended as an
adhoc debugging tool and will thus not be modelled in QAPI as fully
structured data, nor will it have long term guaranteed stability.
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
---
hw/core/machine-qmp-cmds.c | 28 ++++++++++++++++++++++++++++
qapi/machine.json | 37 +++++++++++++++++++++++++++++++++++++
2 files changed, 65 insertions(+)
diff --git a/hw/core/machine-qmp-cmds.c b/hw/core/machine-qmp-cmds.c
index 216fdfaf3a..0d9943ff60 100644
--- a/hw/core/machine-qmp-cmds.c
+++ b/hw/core/machine-qmp-cmds.c
@@ -204,3 +204,31 @@ MemdevList *qmp_query_memdev(Error **errp)
object_child_foreach(obj, query_memdev, &list);
return list;
}
+
+RegisterInfo *qmp_x_query_registers(bool has_cpu, int64_t cpu, Error **errp)
+{
+ RegisterInfo *info = g_new0(RegisterInfo, 1);
+ g_autoptr(GString) buf = g_string_new("");
+ CPUState *cs = NULL, *tmp;
+
+ if (has_cpu) {
+ CPU_FOREACH(tmp) {
+ if (cpu == tmp->cpu_index) {
+ cs = tmp;
+ }
+ }
+ if (!cs) {
+ error_setg(errp, "CPU %"PRId64" not available", cpu);
+ return NULL;
+ }
+ cpu_format_state(cs, buf, CPU_DUMP_FPU);
+ } else {
+ CPU_FOREACH(cs) {
+ g_string_append_printf(buf, "\nCPU#%d\n", cs->cpu_index);
+ cpu_format_state(cs, buf, CPU_DUMP_FPU);
+ }
+ }
+
+ info->state = g_steal_pointer(&buf->str);
+ return info;
+}
diff --git a/qapi/machine.json b/qapi/machine.json
index 157712f006..27b922f2ce 100644
--- a/qapi/machine.json
+++ b/qapi/machine.json
@@ -1312,3 +1312,40 @@
'*cores': 'int',
'*threads': 'int',
'*maxcpus': 'int' } }
+
+##
+# @RegisterParams:
+#
+# Information about the CPU to query state of
+#
+# @cpu: the CPU number to query. If omitted, queries all CPUs
+#
+# Since: 6.2.0
+#
+##
+{ 'struct': 'RegisterParams', 'data': {'*cpu': 'int' } }
+
+##
+# @RegisterInfo:
+#
+# Information about the CPU state
+#
+# @state: the CPU state in an architecture specific format
+#
+# Since: 6.2.0
+#
+##
+{ 'struct': 'RegisterInfo', 'data': {'state': 'str' } }
+
+##
+# @x-query-registers:
+#
+# Return information on the CPU registers
+#
+# Returns: the CPU state
+#
+# Since: 6.2.0
+##
+{ 'command': 'x-query-registers',
+ 'data': 'RegisterParams',
+ 'returns': 'RegisterInfo' }
--
2.31.1
- Re: [PATCH 1/5] docs/devel: document expectations for QAPI data modelling for QMP, (continued)
[PATCH 2/5] hw/core: introduce 'format_state' callback to replace 'dump_state', Daniel P . Berrangé, 2021/09/08
[PATCH 3/5] target/i386: convert to use format_state instead of dump_state, Daniel P . Berrangé, 2021/09/08
[PATCH 4/5] qapi: introduce x-query-registers QMP command,
Daniel P . Berrangé <=
[PATCH 5/5] monitor: rewrite 'info registers' in terms of 'x-query-registers', Daniel P . Berrangé, 2021/09/08
Re: [PATCH 0/5] Stop adding HMP-only commands, allow QMP for all, Ján Tomko, 2021/09/08
Re: [PATCH 0/5] Stop adding HMP-only commands, allow QMP for all, Markus Armbruster, 2021/09/08