* [PATCH 0/2] hw/intc: Introduce x-query-interrupt-controllers QMP command
@ 2024-06-10 6:35 Philippe Mathieu-Daudé
2024-06-10 6:35 ` [PATCH 1/2] hw/intc: Avoid using Monitor in INTERRUPT_STATS_PROVIDER::print_info() Philippe Mathieu-Daudé
` (2 more replies)
0 siblings, 3 replies; 6+ messages in thread
From: Philippe Mathieu-Daudé @ 2024-06-10 6:35 UTC (permalink / raw)
To: qemu-devel
Cc: Michael S. Tsirkin, Dr. David Alan Gilbert,
Philippe Mathieu-Daudé, Mark Cave-Ayland, Harsh Prateek Bora,
Eduardo Habkost, Marcel Apfelbaum, Paolo Bonzini, Laurent Vivier,
David Gibson, Daniel P . Berrangé, Daniel Henrique Barboza,
Eric Blake, Yanan Wang, Cédric Le Goater, Nicholas Piggin,
Don Porter, Frédéric Barrat, qemu-ppc,
Markus Armbruster
Continuing previous work from Daniel:
https://lore.kernel.org/qemu-devel/20211028155457.967291-1-berrange@redhat.com/
- Prefer HumanReadableText over Monitor in hw/intc/
- Introduce x-query-interrupt-controllers QMP command
See commits f2de406f29 ("docs/devel: document expectations for
QAPI data modelling for QMP") and 3d312f417d ("docs/devel: document
expectations for HMP commands in the future") for rationale.
Based-on: <20240610062105.49848-1-philmd@linaro.org>
Philippe Mathieu-Daudé (2):
hw/intc: Avoid using Monitor in INTERRUPT_STATS_PROVIDER::print_info()
hw/intc: Introduce x-query-interrupt-controllers QMP command
qapi/machine.json | 17 ++++++++++++
include/hw/intc/intc.h | 2 +-
hw/core/machine-qmp-cmds.c | 29 +++++++++++++++++++
hw/intc/goldfish_pic.c | 8 +++---
hw/intc/i8259_common.c | 14 +++++-----
hw/intc/ioapic_common.c | 57 +++++++++++++++++++-------------------
hw/intc/m68k_irqc.c | 5 ++--
hw/intc/slavio_intctl.c | 11 ++++----
hw/ppc/pnv.c | 10 +------
hw/ppc/spapr.c | 10 +------
monitor/hmp-cmds.c | 27 ------------------
hmp-commands-info.hx | 2 +-
12 files changed, 97 insertions(+), 95 deletions(-)
--
2.41.0
^ permalink raw reply [flat|nested] 6+ messages in thread
* [PATCH 1/2] hw/intc: Avoid using Monitor in INTERRUPT_STATS_PROVIDER::print_info()
2024-06-10 6:35 [PATCH 0/2] hw/intc: Introduce x-query-interrupt-controllers QMP command Philippe Mathieu-Daudé
@ 2024-06-10 6:35 ` Philippe Mathieu-Daudé
2024-06-10 8:35 ` Daniel P. Berrangé
2024-06-10 6:35 ` [PATCH 2/2] hw/intc: Introduce x-query-interrupt-controllers QMP command Philippe Mathieu-Daudé
2024-06-18 11:00 ` [PATCH 0/2] " Philippe Mathieu-Daudé
2 siblings, 1 reply; 6+ messages in thread
From: Philippe Mathieu-Daudé @ 2024-06-10 6:35 UTC (permalink / raw)
To: qemu-devel
Cc: Michael S. Tsirkin, Dr. David Alan Gilbert,
Philippe Mathieu-Daudé, Mark Cave-Ayland, Harsh Prateek Bora,
Eduardo Habkost, Marcel Apfelbaum, Paolo Bonzini, Laurent Vivier,
David Gibson, Daniel P . Berrangé, Daniel Henrique Barboza,
Eric Blake, Yanan Wang, Cédric Le Goater, Nicholas Piggin,
Don Porter, Frédéric Barrat, qemu-ppc,
Markus Armbruster
Replace Monitor API by HumanReadableText one (see commit f2de406f29
"docs/devel: document expectations for QAPI data modelling for QMP"
for rationale).
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
include/hw/intc/intc.h | 2 +-
hw/intc/goldfish_pic.c | 8 +++---
hw/intc/i8259_common.c | 14 +++++-----
hw/intc/ioapic_common.c | 57 +++++++++++++++++++++--------------------
hw/intc/m68k_irqc.c | 5 ++--
hw/intc/slavio_intctl.c | 11 ++++----
hw/ppc/pnv.c | 10 +-------
hw/ppc/spapr.c | 10 +-------
monitor/hmp-cmds.c | 8 +++++-
9 files changed, 57 insertions(+), 68 deletions(-)
diff --git a/include/hw/intc/intc.h b/include/hw/intc/intc.h
index 7018f608ca..e40194b8e3 100644
--- a/include/hw/intc/intc.h
+++ b/include/hw/intc/intc.h
@@ -22,7 +22,7 @@ struct InterruptStatsProviderClass {
*/
bool (*get_statistics)(InterruptStatsProvider *obj, uint64_t **irq_counts,
unsigned int *nb_irqs);
- void (*print_info)(InterruptStatsProvider *obj, Monitor *mon);
+ void (*print_info)(InterruptStatsProvider *obj, GString *buf);
};
#endif
diff --git a/hw/intc/goldfish_pic.c b/hw/intc/goldfish_pic.c
index d662dfeb99..6cc1c69d26 100644
--- a/hw/intc/goldfish_pic.c
+++ b/hw/intc/goldfish_pic.c
@@ -12,7 +12,6 @@
#include "hw/qdev-properties.h"
#include "hw/sysbus.h"
#include "migration/vmstate.h"
-#include "monitor/monitor.h"
#include "qemu/log.h"
#include "trace.h"
#include "hw/intc/intc.h"
@@ -39,11 +38,12 @@ static bool goldfish_pic_get_statistics(InterruptStatsProvider *obj,
return true;
}
-static void goldfish_pic_print_info(InterruptStatsProvider *obj, Monitor *mon)
+static void goldfish_pic_print_info(InterruptStatsProvider *obj, GString *buf)
{
GoldfishPICState *s = GOLDFISH_PIC(obj);
- monitor_printf(mon, "goldfish-pic.%d: pending=0x%08x enabled=0x%08x\n",
- s->idx, s->pending, s->enabled);
+ g_string_append_printf(buf,
+ "goldfish-pic.%d: pending=0x%08x enabled=0x%08x\n",
+ s->idx, s->pending, s->enabled);
}
static void goldfish_pic_update(GoldfishPICState *s)
diff --git a/hw/intc/i8259_common.c b/hw/intc/i8259_common.c
index ee0041115c..d9558e3940 100644
--- a/hw/intc/i8259_common.c
+++ b/hw/intc/i8259_common.c
@@ -28,7 +28,6 @@
#include "hw/isa/i8259_internal.h"
#include "hw/qdev-properties.h"
#include "migration/vmstate.h"
-#include "monitor/monitor.h"
#include "qapi/error.h"
static int irq_level[16];
@@ -132,16 +131,17 @@ static bool pic_get_statistics(InterruptStatsProvider *obj,
return true;
}
-static void pic_print_info(InterruptStatsProvider *obj, Monitor *mon)
+static void pic_print_info(InterruptStatsProvider *obj, GString *buf)
{
PICCommonState *s = PIC_COMMON(obj);
pic_dispatch_pre_save(s);
- monitor_printf(mon, "pic%d: irr=%02x imr=%02x isr=%02x hprio=%d "
- "irq_base=%02x rr_sel=%d elcr=%02x fnm=%d\n",
- s->master ? 0 : 1, s->irr, s->imr, s->isr, s->priority_add,
- s->irq_base, s->read_reg_select, s->elcr,
- s->special_fully_nested_mode);
+ g_string_append_printf(buf, "pic%d: irr=%02x imr=%02x isr=%02x hprio=%d "
+ "irq_base=%02x rr_sel=%d elcr=%02x fnm=%d\n",
+ s->master ? 0 : 1, s->irr, s->imr, s->isr,
+ s->priority_add,
+ s->irq_base, s->read_reg_select, s->elcr,
+ s->special_fully_nested_mode);
}
static bool ltim_state_needed(void *opaque)
diff --git a/hw/intc/ioapic_common.c b/hw/intc/ioapic_common.c
index efbe6958c8..769896353a 100644
--- a/hw/intc/ioapic_common.c
+++ b/hw/intc/ioapic_common.c
@@ -23,7 +23,6 @@
#include "qapi/error.h"
#include "qemu/module.h"
#include "migration/vmstate.h"
-#include "monitor/monitor.h"
#include "hw/intc/intc.h"
#include "hw/intc/ioapic.h"
#include "hw/intc/ioapic_internal.h"
@@ -59,59 +58,62 @@ static bool ioapic_get_statistics(InterruptStatsProvider *obj,
return true;
}
-static void ioapic_irr_dump(Monitor *mon, const char *name, uint32_t bitmap)
+static void ioapic_irr_dump(GString *buf, const char *name, uint32_t bitmap)
{
int i;
- monitor_printf(mon, "%-10s ", name);
+ g_string_append_printf(buf, "%-10s ", name);
if (bitmap == 0) {
- monitor_printf(mon, "(none)\n");
+ g_string_append_printf(buf, "(none)\n");
return;
}
for (i = 0; i < IOAPIC_NUM_PINS; i++) {
if (bitmap & (1 << i)) {
- monitor_printf(mon, "%-2u ", i);
+ g_string_append_printf(buf, "%-2u ", i);
}
}
- monitor_printf(mon, "\n");
+ g_string_append_c(buf, '\n');
}
-static void ioapic_print_redtbl(Monitor *mon, IOAPICCommonState *s)
+static void ioapic_print_redtbl(GString *buf, IOAPICCommonState *s)
{
static const char *delm_str[] = {
"fixed", "lowest", "SMI", "...", "NMI", "INIT", "...", "extINT"};
uint32_t remote_irr = 0;
int i;
- monitor_printf(mon, "ioapic0: ver=0x%x id=0x%02x sel=0x%02x",
- s->version, s->id, s->ioregsel);
+ g_string_append_printf(buf, "ioapic0: ver=0x%x id=0x%02x sel=0x%02x",
+ s->version, s->id, s->ioregsel);
if (s->ioregsel) {
- monitor_printf(mon, " (redir[%u])\n",
- (s->ioregsel - IOAPIC_REG_REDTBL_BASE) >> 1);
+ g_string_append_printf(buf, " (redir[%u])\n",
+ (s->ioregsel - IOAPIC_REG_REDTBL_BASE) >> 1);
} else {
- monitor_printf(mon, "\n");
+ g_string_append_c(buf, '\n');
}
for (i = 0; i < IOAPIC_NUM_PINS; i++) {
uint64_t entry = s->ioredtbl[i];
uint32_t delm = (uint32_t)((entry & IOAPIC_LVT_DELIV_MODE) >>
IOAPIC_LVT_DELIV_MODE_SHIFT);
- monitor_printf(mon, " pin %-2u 0x%016"PRIx64" dest=%"PRIx64
- " vec=%-3"PRIu64" %s %-5s %-6s %-6s %s\n",
- i, entry,
- (entry >> IOAPIC_LVT_DEST_SHIFT) &
- (entry & IOAPIC_LVT_DEST_MODE ? 0xff : 0xf),
- entry & IOAPIC_VECTOR_MASK,
- entry & IOAPIC_LVT_POLARITY ? "active-lo" : "active-hi",
- entry & IOAPIC_LVT_TRIGGER_MODE ? "level" : "edge",
- entry & IOAPIC_LVT_MASKED ? "masked" : "",
- delm_str[delm],
- entry & IOAPIC_LVT_DEST_MODE ? "logical" : "physical");
+ g_string_append_printf(buf, " pin %-2u 0x%016"PRIx64" dest=%"PRIx64
+ " vec=%-3"PRIu64" %s %-5s %-6s %-6s %s\n",
+ i, entry,
+ (entry >> IOAPIC_LVT_DEST_SHIFT) &
+ (entry & IOAPIC_LVT_DEST_MODE ? 0xff : 0xf),
+ entry & IOAPIC_VECTOR_MASK,
+ entry & IOAPIC_LVT_POLARITY
+ ? "active-lo" : "active-hi",
+ entry & IOAPIC_LVT_TRIGGER_MODE
+ ? "level" : "edge",
+ entry & IOAPIC_LVT_MASKED ? "masked" : "",
+ delm_str[delm],
+ entry & IOAPIC_LVT_DEST_MODE
+ ? "logical" : "physical");
remote_irr |= entry & IOAPIC_LVT_TRIGGER_MODE ?
(entry & IOAPIC_LVT_REMOTE_IRR ? (1 << i) : 0) : 0;
}
- ioapic_irr_dump(mon, " IRR", s->irr);
- ioapic_irr_dump(mon, " Remote IRR", remote_irr);
+ ioapic_irr_dump(buf, " IRR", s->irr);
+ ioapic_irr_dump(buf, " Remote IRR", remote_irr);
}
void ioapic_reset_common(DeviceState *dev)
@@ -171,13 +173,12 @@ static void ioapic_common_realize(DeviceState *dev, Error **errp)
ioapic_no++;
}
-static void ioapic_print_info(InterruptStatsProvider *obj,
- Monitor *mon)
+static void ioapic_print_info(InterruptStatsProvider *obj, GString *buf)
{
IOAPICCommonState *s = IOAPIC_COMMON(obj);
ioapic_dispatch_pre_save(s);
- ioapic_print_redtbl(mon, s);
+ ioapic_print_redtbl(buf, s);
}
static const VMStateDescription vmstate_ioapic_common = {
diff --git a/hw/intc/m68k_irqc.c b/hw/intc/m68k_irqc.c
index 4b11fb9f72..cf3beefcfe 100644
--- a/hw/intc/m68k_irqc.c
+++ b/hw/intc/m68k_irqc.c
@@ -10,7 +10,6 @@
#include "qemu/osdep.h"
#include "cpu.h"
#include "migration/vmstate.h"
-#include "monitor/monitor.h"
#include "hw/qdev-properties.h"
#include "hw/nmi.h"
#include "hw/intc/intc.h"
@@ -27,10 +26,10 @@ static bool m68k_irqc_get_statistics(InterruptStatsProvider *obj,
return true;
}
-static void m68k_irqc_print_info(InterruptStatsProvider *obj, Monitor *mon)
+static void m68k_irqc_print_info(InterruptStatsProvider *obj, GString *buf)
{
M68KIRQCState *s = M68K_IRQC(obj);
- monitor_printf(mon, "m68k-irqc: ipr=0x%x\n", s->ipr);
+ g_string_append_printf(buf, "m68k-irqc: ipr=0x%x\n", s->ipr);
}
static void m68k_set_irq(void *opaque, int irq, int level)
diff --git a/hw/intc/slavio_intctl.c b/hw/intc/slavio_intctl.c
index 36b4a12f60..d6e49d29aa 100644
--- a/hw/intc/slavio_intctl.c
+++ b/hw/intc/slavio_intctl.c
@@ -24,7 +24,6 @@
#include "qemu/osdep.h"
#include "migration/vmstate.h"
-#include "monitor/monitor.h"
#include "qemu/module.h"
#include "hw/sysbus.h"
#include "hw/intc/intc.h"
@@ -401,17 +400,17 @@ static bool slavio_intctl_get_statistics(InterruptStatsProvider *obj,
}
#endif
-static void slavio_intctl_print_info(InterruptStatsProvider *obj, Monitor *mon)
+static void slavio_intctl_print_info(InterruptStatsProvider *obj, GString *buf)
{
SLAVIO_INTCTLState *s = SLAVIO_INTCTL(obj);
int i;
for (i = 0; i < MAX_CPUS; i++) {
- monitor_printf(mon, "per-cpu %d: pending 0x%08x\n", i,
- s->slaves[i].intreg_pending);
+ g_string_append_printf(buf, "per-cpu %d: pending 0x%08x\n", i,
+ s->slaves[i].intreg_pending);
}
- monitor_printf(mon, "master: pending 0x%08x, disabled 0x%08x\n",
- s->intregm_pending, s->intregm_disabled);
+ g_string_append_printf(buf, "master: pending 0x%08x, disabled 0x%08x\n",
+ s->intregm_pending, s->intregm_disabled);
}
static void slavio_intctl_init(Object *obj)
diff --git a/hw/ppc/pnv.c b/hw/ppc/pnv.c
index df74f032d7..03c595788f 100644
--- a/hw/ppc/pnv.c
+++ b/hw/ppc/pnv.c
@@ -38,8 +38,6 @@
#include "hw/loader.h"
#include "hw/nmi.h"
#include "qapi/visitor.h"
-#include "qapi/type-helpers.h"
-#include "monitor/monitor.h"
#include "hw/intc/intc.h"
#include "hw/ipmi/ipmi.h"
#include "target/ppc/mmu-hash64.h"
@@ -2331,14 +2329,11 @@ static ICPState *pnv_icp_get(XICSFabric *xi, int pir)
return cpu ? ICP(pnv_cpu_state(cpu)->intc) : NULL;
}
-static void pnv_pic_print_info(InterruptStatsProvider *obj,
- Monitor *mon)
+static void pnv_pic_print_info(InterruptStatsProvider *obj, GString *buf)
{
PnvMachineState *pnv = PNV_MACHINE(obj);
int i;
CPUState *cs;
- g_autoptr(GString) buf = g_string_new("");
- g_autoptr(HumanReadableText) info = NULL;
CPU_FOREACH(cs) {
PowerPCCPU *cpu = POWERPC_CPU(cs);
@@ -2351,9 +2346,6 @@ static void pnv_pic_print_info(InterruptStatsProvider *obj,
for (i = 0; i < pnv->num_chips; i++) {
PNV_CHIP_GET_CLASS(pnv->chips[i])->pic_print_info(pnv->chips[i], buf);
}
-
- info = human_readable_text_from_str(buf);
- monitor_puts(mon, info->human_readable_text);
}
static int pnv_match_nvt(XiveFabric *xfb, uint8_t format,
diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c
index cd9b811ac6..1f12d6c24b 100644
--- a/hw/ppc/spapr.c
+++ b/hw/ppc/spapr.c
@@ -31,7 +31,6 @@
#include "qapi/error.h"
#include "qapi/qapi-events-machine.h"
#include "qapi/qapi-events-qdev.h"
-#include "qapi/type-helpers.h"
#include "qapi/visitor.h"
#include "sysemu/sysemu.h"
#include "sysemu/hostmem.h"
@@ -90,8 +89,6 @@
#include "hw/ppc/spapr_nvdimm.h"
#include "hw/ppc/spapr_numa.h"
-#include "monitor/monitor.h"
-
#include <libfdt.h>
/* SLOF memory layout:
@@ -4527,18 +4524,13 @@ static ICPState *spapr_icp_get(XICSFabric *xi, int vcpu_id)
return cpu ? spapr_cpu_state(cpu)->icp : NULL;
}
-static void spapr_pic_print_info(InterruptStatsProvider *obj,
- Monitor *mon)
+static void spapr_pic_print_info(InterruptStatsProvider *obj, GString *buf)
{
SpaprMachineState *spapr = SPAPR_MACHINE(obj);
- g_autoptr(GString) buf = g_string_new("");
- g_autoptr(HumanReadableText) info = NULL;
spapr_irq_print_info(spapr, buf);
g_string_append_printf(buf, "irqchip: %s\n",
kvm_irqchip_in_kernel() ? "in-kernel" : "emulated");
- info = human_readable_text_from_str(buf);
- monitor_puts(mon, info->human_readable_text);
}
/*
diff --git a/monitor/hmp-cmds.c b/monitor/hmp-cmds.c
index ea79148ee8..fbff7fdb57 100644
--- a/monitor/hmp-cmds.c
+++ b/monitor/hmp-cmds.c
@@ -25,6 +25,7 @@
#include "qapi/qapi-commands-machine.h"
#include "qapi/qapi-commands-misc.h"
#include "qapi/qmp/qdict.h"
+#include "qapi/type-helpers.h"
#include "qemu/cutils.h"
#include "hw/intc/intc.h"
#include "qemu/log.h"
@@ -92,7 +93,12 @@ static int hmp_info_pic_foreach(Object *obj, void *opaque)
intc = INTERRUPT_STATS_PROVIDER(obj);
k = INTERRUPT_STATS_PROVIDER_GET_CLASS(obj);
if (k->print_info) {
- k->print_info(intc, mon);
+ g_autoptr(GString) buf = g_string_new("");
+ g_autoptr(HumanReadableText) info = NULL;
+
+ k->print_info(intc, buf);
+ info = human_readable_text_from_str(buf);
+ monitor_puts(mon, info->human_readable_text);
} else {
monitor_printf(mon, "Interrupt controller information not available for %s.\n",
object_get_typename(obj));
--
2.41.0
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH 2/2] hw/intc: Introduce x-query-interrupt-controllers QMP command
2024-06-10 6:35 [PATCH 0/2] hw/intc: Introduce x-query-interrupt-controllers QMP command Philippe Mathieu-Daudé
2024-06-10 6:35 ` [PATCH 1/2] hw/intc: Avoid using Monitor in INTERRUPT_STATS_PROVIDER::print_info() Philippe Mathieu-Daudé
@ 2024-06-10 6:35 ` Philippe Mathieu-Daudé
2024-06-10 8:35 ` Daniel P. Berrangé
2024-06-18 11:00 ` [PATCH 0/2] " Philippe Mathieu-Daudé
2 siblings, 1 reply; 6+ messages in thread
From: Philippe Mathieu-Daudé @ 2024-06-10 6:35 UTC (permalink / raw)
To: qemu-devel
Cc: Michael S. Tsirkin, Dr. David Alan Gilbert,
Philippe Mathieu-Daudé, Mark Cave-Ayland, Harsh Prateek Bora,
Eduardo Habkost, Marcel Apfelbaum, Paolo Bonzini, Laurent Vivier,
David Gibson, Daniel P . Berrangé, Daniel Henrique Barboza,
Eric Blake, Yanan Wang, Cédric Le Goater, Nicholas Piggin,
Don Porter, Frédéric Barrat, qemu-ppc,
Markus Armbruster
This is a counterpart to the HMP "info pic" 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.
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
qapi/machine.json | 17 +++++++++++++++++
hw/core/machine-qmp-cmds.c | 29 +++++++++++++++++++++++++++++
monitor/hmp-cmds.c | 33 ---------------------------------
hmp-commands-info.hx | 2 +-
4 files changed, 47 insertions(+), 34 deletions(-)
diff --git a/qapi/machine.json b/qapi/machine.json
index 453feb9347..1283d14493 100644
--- a/qapi/machine.json
+++ b/qapi/machine.json
@@ -1864,3 +1864,20 @@
{ 'command': 'dumpdtb',
'data': { 'filename': 'str' },
'if': 'CONFIG_FDT' }
+
+##
+# @x-query-interrupt-controllers:
+#
+# Query information on interrupt controller devices
+#
+# Features:
+#
+# @unstable: This command is meant for debugging.
+#
+# Returns: Interrupt controller device information
+#
+# Since: 9.1
+##
+{ 'command': 'x-query-interrupt-controllers',
+ 'returns': 'HumanReadableText',
+ 'features': [ 'unstable' ]}
diff --git a/hw/core/machine-qmp-cmds.c b/hw/core/machine-qmp-cmds.c
index 5972100b1f..130217da8f 100644
--- a/hw/core/machine-qmp-cmds.c
+++ b/hw/core/machine-qmp-cmds.c
@@ -361,6 +361,35 @@ HumanReadableText *qmp_x_query_irq(Error **errp)
return human_readable_text_from_str(buf);
}
+static int qmp_x_query_intc_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);
+ if (k->print_info) {
+ k->print_info(intc, buf);
+ } else {
+ g_string_append_printf(buf,
+ "Interrupt controller information not available for %s.\n",
+ object_get_typename(obj));
+ }
+ }
+
+ return 0;
+}
+
+HumanReadableText *qmp_x_query_interrupt_controllers(Error **errp)
+{
+ g_autoptr(GString) buf = g_string_new("");
+ object_child_foreach_recursive(object_get_root(),
+ qmp_x_query_intc_foreach, buf);
+ return human_readable_text_from_str(buf);
+}
+
GuidInfo *qmp_query_vm_generation_id(Error **errp)
{
GuidInfo *info;
diff --git a/monitor/hmp-cmds.c b/monitor/hmp-cmds.c
index fbff7fdb57..45ee3a9e1f 100644
--- a/monitor/hmp-cmds.c
+++ b/monitor/hmp-cmds.c
@@ -25,9 +25,7 @@
#include "qapi/qapi-commands-machine.h"
#include "qapi/qapi-commands-misc.h"
#include "qapi/qmp/qdict.h"
-#include "qapi/type-helpers.h"
#include "qemu/cutils.h"
-#include "hw/intc/intc.h"
#include "qemu/log.h"
#include "sysemu/sysemu.h"
@@ -83,37 +81,6 @@ void hmp_info_version(Monitor *mon, const QDict *qdict)
qapi_free_VersionInfo(info);
}
-static int hmp_info_pic_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);
- if (k->print_info) {
- g_autoptr(GString) buf = g_string_new("");
- g_autoptr(HumanReadableText) info = NULL;
-
- k->print_info(intc, buf);
- info = human_readable_text_from_str(buf);
- monitor_puts(mon, info->human_readable_text);
- } else {
- monitor_printf(mon, "Interrupt controller information not available for %s.\n",
- object_get_typename(obj));
- }
- }
-
- return 0;
-}
-
-void hmp_info_pic(Monitor *mon, const QDict *qdict)
-{
- object_child_foreach_recursive(object_get_root(),
- hmp_info_pic_foreach, mon);
-}
-
void hmp_quit(Monitor *mon, const QDict *qdict)
{
monitor_suspend(mon);
diff --git a/hmp-commands-info.hx b/hmp-commands-info.hx
index 20a9835ea8..cfd4ad5651 100644
--- a/hmp-commands-info.hx
+++ b/hmp-commands-info.hx
@@ -174,7 +174,7 @@ ERST
.args_type = "",
.params = "",
.help = "show PIC state",
- .cmd = hmp_info_pic,
+ .cmd_info_hrt = qmp_x_query_interrupt_controllers,
},
SRST
--
2.41.0
^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [PATCH 2/2] hw/intc: Introduce x-query-interrupt-controllers QMP command
2024-06-10 6:35 ` [PATCH 2/2] hw/intc: Introduce x-query-interrupt-controllers QMP command Philippe Mathieu-Daudé
@ 2024-06-10 8:35 ` Daniel P. Berrangé
0 siblings, 0 replies; 6+ messages in thread
From: Daniel P. Berrangé @ 2024-06-10 8:35 UTC (permalink / raw)
To: Philippe Mathieu-Daudé
Cc: qemu-devel, Michael S. Tsirkin, Dr. David Alan Gilbert,
Mark Cave-Ayland, Harsh Prateek Bora, Eduardo Habkost,
Marcel Apfelbaum, Paolo Bonzini, Laurent Vivier, David Gibson,
Daniel Henrique Barboza, Eric Blake, Yanan Wang,
Cédric Le Goater, Nicholas Piggin, Don Porter,
Frédéric Barrat, qemu-ppc, Markus Armbruster
On Mon, Jun 10, 2024 at 08:35:17AM +0200, Philippe Mathieu-Daudé wrote:
> This is a counterpart to the HMP "info pic" 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.
>
> Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
> ---
> qapi/machine.json | 17 +++++++++++++++++
> hw/core/machine-qmp-cmds.c | 29 +++++++++++++++++++++++++++++
> monitor/hmp-cmds.c | 33 ---------------------------------
> hmp-commands-info.hx | 2 +-
> 4 files changed, 47 insertions(+), 34 deletions(-)
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
With regards,
Daniel
--
|: https://berrange.com -o- https://www.flickr.com/photos/dberrange :|
|: https://libvirt.org -o- https://fstop138.berrange.com :|
|: https://entangle-photo.org -o- https://www.instagram.com/dberrange :|
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH 1/2] hw/intc: Avoid using Monitor in INTERRUPT_STATS_PROVIDER::print_info()
2024-06-10 6:35 ` [PATCH 1/2] hw/intc: Avoid using Monitor in INTERRUPT_STATS_PROVIDER::print_info() Philippe Mathieu-Daudé
@ 2024-06-10 8:35 ` Daniel P. Berrangé
0 siblings, 0 replies; 6+ messages in thread
From: Daniel P. Berrangé @ 2024-06-10 8:35 UTC (permalink / raw)
To: Philippe Mathieu-Daudé
Cc: qemu-devel, Michael S. Tsirkin, Dr. David Alan Gilbert,
Mark Cave-Ayland, Harsh Prateek Bora, Eduardo Habkost,
Marcel Apfelbaum, Paolo Bonzini, Laurent Vivier, David Gibson,
Daniel Henrique Barboza, Eric Blake, Yanan Wang,
Cédric Le Goater, Nicholas Piggin, Don Porter,
Frédéric Barrat, qemu-ppc, Markus Armbruster
On Mon, Jun 10, 2024 at 08:35:16AM +0200, Philippe Mathieu-Daudé wrote:
> Replace Monitor API by HumanReadableText one (see commit f2de406f29
> "docs/devel: document expectations for QAPI data modelling for QMP"
> for rationale).
>
> Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
> ---
> include/hw/intc/intc.h | 2 +-
> hw/intc/goldfish_pic.c | 8 +++---
> hw/intc/i8259_common.c | 14 +++++-----
> hw/intc/ioapic_common.c | 57 +++++++++++++++++++++--------------------
> hw/intc/m68k_irqc.c | 5 ++--
> hw/intc/slavio_intctl.c | 11 ++++----
> hw/ppc/pnv.c | 10 +-------
> hw/ppc/spapr.c | 10 +-------
> monitor/hmp-cmds.c | 8 +++++-
> 9 files changed, 57 insertions(+), 68 deletions(-)
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
With regards,
Daniel
--
|: https://berrange.com -o- https://www.flickr.com/photos/dberrange :|
|: https://libvirt.org -o- https://fstop138.berrange.com :|
|: https://entangle-photo.org -o- https://www.instagram.com/dberrange :|
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH 0/2] hw/intc: Introduce x-query-interrupt-controllers QMP command
2024-06-10 6:35 [PATCH 0/2] hw/intc: Introduce x-query-interrupt-controllers QMP command Philippe Mathieu-Daudé
2024-06-10 6:35 ` [PATCH 1/2] hw/intc: Avoid using Monitor in INTERRUPT_STATS_PROVIDER::print_info() Philippe Mathieu-Daudé
2024-06-10 6:35 ` [PATCH 2/2] hw/intc: Introduce x-query-interrupt-controllers QMP command Philippe Mathieu-Daudé
@ 2024-06-18 11:00 ` Philippe Mathieu-Daudé
2 siblings, 0 replies; 6+ messages in thread
From: Philippe Mathieu-Daudé @ 2024-06-18 11:00 UTC (permalink / raw)
To: qemu-devel
Cc: Michael S. Tsirkin, Dr. David Alan Gilbert, Mark Cave-Ayland,
Harsh Prateek Bora, Eduardo Habkost, Marcel Apfelbaum,
Paolo Bonzini, Laurent Vivier, David Gibson,
Daniel P . Berrangé, Daniel Henrique Barboza, Eric Blake,
Yanan Wang, Cédric Le Goater, Nicholas Piggin, Don Porter,
Frédéric Barrat, qemu-ppc, Markus Armbruster
On 10/6/24 08:35, Philippe Mathieu-Daudé wrote:
> Philippe Mathieu-Daudé (2):
> hw/intc: Avoid using Monitor in INTERRUPT_STATS_PROVIDER::print_info()
> hw/intc: Introduce x-query-interrupt-controllers QMP command
Series queued.
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2024-06-18 11:00 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-06-10 6:35 [PATCH 0/2] hw/intc: Introduce x-query-interrupt-controllers QMP command Philippe Mathieu-Daudé
2024-06-10 6:35 ` [PATCH 1/2] hw/intc: Avoid using Monitor in INTERRUPT_STATS_PROVIDER::print_info() Philippe Mathieu-Daudé
2024-06-10 8:35 ` Daniel P. Berrangé
2024-06-10 6:35 ` [PATCH 2/2] hw/intc: Introduce x-query-interrupt-controllers QMP command Philippe Mathieu-Daudé
2024-06-10 8:35 ` Daniel P. Berrangé
2024-06-18 11:00 ` [PATCH 0/2] " Philippe Mathieu-Daudé
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).