[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PULL 16/18] qapi: introduce x-query-irq QMP command
From: |
Daniel P . Berrangé |
Subject: |
[PULL 16/18] qapi: introduce x-query-irq QMP command |
Date: |
Tue, 2 Nov 2021 17:56:58 +0000 |
This is a counterpart to the HMP "info irq" 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.
The existing HMP command is rewritten to call the QMP command.
Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
---
hmp-commands-info.hx | 2 +-
monitor/hmp-cmds.c | 38 --------------------------------------
monitor/qmp-cmds.c | 44 ++++++++++++++++++++++++++++++++++++++++++++
qapi/machine.json | 12 ++++++++++++
4 files changed, 57 insertions(+), 39 deletions(-)
diff --git a/hmp-commands-info.hx b/hmp-commands-info.hx
index c2d7275bf5..407a1da800 100644
--- a/hmp-commands-info.hx
+++ b/hmp-commands-info.hx
@@ -159,7 +159,7 @@ ERST
.args_type = "",
.params = "",
.help = "show the interrupts statistics (if available)",
- .cmd = hmp_info_irq,
+ .cmd_info_hrt = qmp_x_query_irq,
},
SRST
diff --git a/monitor/hmp-cmds.c b/monitor/hmp-cmds.c
index 90f9a64573..8ef605e29a 100644
--- a/monitor/hmp-cmds.c
+++ b/monitor/hmp-cmds.c
@@ -784,44 +784,6 @@ static void hmp_info_pci_device(Monitor *mon, const
PciDeviceInfo *dev)
}
}
-static int hmp_info_irq_foreach(Object *obj, void *opaque)
-{
- InterruptStatsProvider *intc;
- InterruptStatsProviderClass *k;
- Monitor *mon = opaque;
-
- if (object_dynamic_cast(obj, TYPE_INTERRUPT_STATS_PROVIDER)) {
- intc = INTERRUPT_STATS_PROVIDER(obj);
- k = INTERRUPT_STATS_PROVIDER_GET_CLASS(obj);
- uint64_t *irq_counts;
- unsigned int nb_irqs, i;
- if (k->get_statistics &&
- k->get_statistics(intc, &irq_counts, &nb_irqs)) {
- if (nb_irqs > 0) {
- monitor_printf(mon, "IRQ statistics for %s:\n",
- object_get_typename(obj));
- for (i = 0; i < nb_irqs; i++) {
- if (irq_counts[i] > 0) {
- monitor_printf(mon, "%2d: %" PRId64 "\n", i,
- irq_counts[i]);
- }
- }
- }
- } else {
- monitor_printf(mon, "IRQ statistics not available for %s.\n",
- object_get_typename(obj));
- }
- }
-
- return 0;
-}
-
-void hmp_info_irq(Monitor *mon, const QDict *qdict)
-{
- object_child_foreach_recursive(object_get_root(),
- hmp_info_irq_foreach, mon);
-}
-
static int hmp_info_pic_foreach(Object *obj, void *opaque)
{
InterruptStatsProvider *intc;
diff --git a/monitor/qmp-cmds.c b/monitor/qmp-cmds.c
index a9766fa38d..343353e27a 100644
--- a/monitor/qmp-cmds.c
+++ b/monitor/qmp-cmds.c
@@ -41,6 +41,7 @@
#include "exec/ramlist.h"
#include "hw/mem/memory-device.h"
#include "hw/acpi/acpi_dev_interface.h"
+#include "hw/intc/intc.h"
#include "hw/rdma/rdma.h"
NameInfo *qmp_query_name(Error **errp)
@@ -422,3 +423,46 @@ HumanReadableText *qmp_x_query_ramblock(Error **errp)
return human_readable_text_from_str(buf);
}
+
+static int qmp_x_query_irq_foreach(Object *obj, void *opaque)
+{
+ InterruptStatsProvider *intc;
+ InterruptStatsProviderClass *k;
+ GString *buf = opaque;
+
+ if (object_dynamic_cast(obj, TYPE_INTERRUPT_STATS_PROVIDER)) {
+ intc = INTERRUPT_STATS_PROVIDER(obj);
+ k = INTERRUPT_STATS_PROVIDER_GET_CLASS(obj);
+ uint64_t *irq_counts;
+ unsigned int nb_irqs, i;
+ if (k->get_statistics &&
+ k->get_statistics(intc, &irq_counts, &nb_irqs)) {
+ if (nb_irqs > 0) {
+ g_string_append_printf(buf, "IRQ statistics for %s:\n",
+ object_get_typename(obj));
+ for (i = 0; i < nb_irqs; i++) {
+ if (irq_counts[i] > 0) {
+ g_string_append_printf(buf, "%2d: %" PRId64 "\n", i,
+ irq_counts[i]);
+ }
+ }
+ }
+ } else {
+ g_string_append_printf(buf,
+ "IRQ statistics not available for %s.\n",
+ object_get_typename(obj));
+ }
+ }
+
+ return 0;
+}
+
+HumanReadableText *qmp_x_query_irq(Error **errp)
+{
+ g_autoptr(GString) buf = g_string_new("");
+
+ object_child_foreach_recursive(object_get_root(),
+ qmp_x_query_irq_foreach, buf);
+
+ return human_readable_text_from_str(buf);
+}
diff --git a/qapi/machine.json b/qapi/machine.json
index be81170c2b..ca49358292 100644
--- a/qapi/machine.json
+++ b/qapi/machine.json
@@ -1412,6 +1412,18 @@
'*threads': 'int',
'*maxcpus': 'int' } }
+##
+# @x-query-irq:
+#
+# Query interrupt statistics
+#
+# Returns: interrupt statistics
+#
+# Since: 6.2
+##
+{ 'command': 'x-query-irq',
+ 'returns': 'HumanReadableText' }
+
##
# @x-query-numa:
#
--
2.31.1
- [PULL 06/18] monitor: introduce HumanReadableText and HMP support, (continued)
- [PULL 06/18] monitor: introduce HumanReadableText and HMP support, Daniel P . Berrangé, 2021/11/02
- [PULL 07/18] docs/devel: document expectations for QAPI data modelling for QMP, Daniel P . Berrangé, 2021/11/02
- [PULL 08/18] docs/devel: add example of command returning unstructured text, Daniel P . Berrangé, 2021/11/02
- [PULL 09/18] docs/devel: document expectations for HMP commands in the future, Daniel P . Berrangé, 2021/11/02
- [PULL 10/18] qapi: introduce x-query-roms QMP command, Daniel P . Berrangé, 2021/11/02
- [PULL 11/18] qapi: introduce x-query-profile QMP command, Daniel P . Berrangé, 2021/11/02
- [PULL 12/18] qapi: introduce x-query-numa QMP command, Daniel P . Berrangé, 2021/11/02
- [PULL 13/18] qapi: introduce x-query-usb QMP command, Daniel P . Berrangé, 2021/11/02
- [PULL 14/18] qapi: introduce x-query-rdma QMP command, Daniel P . Berrangé, 2021/11/02
- [PULL 15/18] qapi: introduce x-query-ramblock QMP command, Daniel P . Berrangé, 2021/11/02
- [PULL 16/18] qapi: introduce x-query-irq QMP command,
Daniel P . Berrangé <=
- [PULL 17/18] qapi: introduce x-query-jit QMP command, Daniel P . Berrangé, 2021/11/02
- [PULL 18/18] qapi: introduce x-query-opcount QMP command, Daniel P . Berrangé, 2021/11/02
- Re: [PULL 00/18] HMP-to-QMP info command patches, Richard Henderson, 2021/11/03