From: Paolo Bonzini <pbonzini@redhat.com>
To: qemu-devel@nongnu.org
Cc: "Denis V. Lunev" <den@openvz.org>,
"Andreas Färber" <afaerber@suse.de>,
"Pavel Butsykin" <pbutsykin@virtuozzo.com>
Subject: [Qemu-devel] [PULL 26/48] hmp: added io apic dump state
Date: Tue, 22 Sep 2015 17:05:49 +0200 [thread overview]
Message-ID: <1442934371-12567-27-git-send-email-pbonzini@redhat.com> (raw)
In-Reply-To: <1442934371-12567-1-git-send-email-pbonzini@redhat.com>
From: Pavel Butsykin <pbutsykin@virtuozzo.com>
Added the hmp command to query io apic state, may be usefull after guest
crashes to understand IRQ routing in guest.
Implementation is only for kvm here. The dump will look like
(qemu) info ioapic
ioapic id=0x00 sel=0x26 (redir[11])
pin 0 0x0000000000010000 dest=0 vec=0 active-hi edge masked fixed physical
pin 1 0x0000000000000031 dest=0 vec=49 active-hi edge fixed physical
...
pin 23 0x0000000000010000 dest=0 vec=0 active-hi edge masked fixed physical
IRR (none)
Remote IRR (none)
Signed-off-by: Pavel Butsykin <pbutsykin@virtuozzo.com>
Signed-off-by: Denis V. Lunev <den@openvz.org>
CC: Paolo Bonzini <pbonzini@redhat.com>
CC: Andreas Färber <afaerber@suse.de>
Message-Id: <1442927901-1084-9-git-send-email-den@openvz.org>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
hmp-commands-info.hx | 16 ++++++++++++
hw/i386/kvm/ioapic.c | 10 +++++++
hw/intc/ioapic_common.c | 55 +++++++++++++++++++++++++++++++++++++++
include/hw/i386/ioapic_internal.h | 2 ++
include/hw/i386/pc.h | 4 +++
include/monitor/hmp-target.h | 1 +
target-i386/monitor.c | 9 +++++++
7 files changed, 97 insertions(+)
diff --git a/hmp-commands-info.hx b/hmp-commands-info.hx
index dba7839..b346fd1 100644
--- a/hmp-commands-info.hx
+++ b/hmp-commands-info.hx
@@ -128,6 +128,22 @@ STEXI
Show local APIC state
ETEXI
+#if defined(TARGET_I386)
+ {
+ .name = "ioapic",
+ .args_type = "",
+ .params = "",
+ .help = "show io apic state",
+ .mhandler.cmd = hmp_info_io_apic,
+ },
+#endif
+
+STEXI
+@item info ioapic
+@findex ioapic
+Show io APIC state
+ETEXI
+
{
.name = "cpus",
.args_type = "",
diff --git a/hw/i386/kvm/ioapic.c b/hw/i386/kvm/ioapic.c
index d2a6c4c..b7390ca 100644
--- a/hw/i386/kvm/ioapic.c
+++ b/hw/i386/kvm/ioapic.c
@@ -10,6 +10,7 @@
* See the COPYING file in the top-level directory.
*/
+#include "monitor/monitor.h"
#include "hw/i386/pc.h"
#include "hw/i386/ioapic_internal.h"
#include "hw/i386/apic_internal.h"
@@ -110,6 +111,15 @@ static void kvm_ioapic_put(IOAPICCommonState *s)
}
}
+void kvm_ioapic_dump_state(Monitor *mon, const QDict *qdict)
+{
+ IOAPICCommonState s;
+
+ kvm_ioapic_get(&s);
+
+ ioapic_print_redtbl(mon, &s);
+}
+
static void kvm_ioapic_reset(DeviceState *dev)
{
IOAPICCommonState *s = IOAPIC_COMMON(dev);
diff --git a/hw/intc/ioapic_common.c b/hw/intc/ioapic_common.c
index 8b7d118..d78181e 100644
--- a/hw/intc/ioapic_common.c
+++ b/hw/intc/ioapic_common.c
@@ -19,6 +19,7 @@
* License along with this library; if not, see <http://www.gnu.org/licenses/>.
*/
+#include "monitor/monitor.h"
#include "hw/i386/ioapic.h"
#include "hw/i386/ioapic_internal.h"
#include "hw/sysbus.h"
@@ -31,6 +32,60 @@
*/
int ioapic_no;
+static void ioapic_irr_dump(Monitor *mon, const char *name, uint32_t bitmap)
+{
+ int i;
+
+ monitor_printf(mon, "%-10s ", name);
+ if (bitmap == 0) {
+ monitor_printf(mon, "(none)\n");
+ return;
+ }
+ for (i = 0; i < IOAPIC_NUM_PINS; i++) {
+ if (bitmap & (1 << i)) {
+ monitor_printf(mon, "%-2u ", i);
+ }
+ }
+ monitor_printf(mon, "\n");
+}
+
+void ioapic_print_redtbl(Monitor *mon, IOAPICCommonState *s)
+{
+ static const char *delm_str[] = {
+ "fixed", "lowest", "SMI", "...", "NMI", "INIT", "...", "extINT"};
+ uint32_t remote_irr = 0;
+ int i;
+
+ monitor_printf(mon, "ioapic id=0x%02x sel=0x%02x", s->id, s->ioregsel);
+ if (s->ioregsel) {
+ monitor_printf(mon, " (redir[%u])\n",
+ (s->ioregsel - IOAPIC_REG_REDTBL_BASE) >> 1);
+ } else {
+ monitor_printf(mon, "\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%016jx dest=%jx vec=%-3lu "
+ "%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);
+}
+
void ioapic_reset_common(DeviceState *dev)
{
IOAPICCommonState *s = IOAPIC_COMMON(dev);
diff --git a/include/hw/i386/ioapic_internal.h b/include/hw/i386/ioapic_internal.h
index 4f7764e..797ed47 100644
--- a/include/hw/i386/ioapic_internal.h
+++ b/include/hw/i386/ioapic_internal.h
@@ -105,4 +105,6 @@ struct IOAPICCommonState {
void ioapic_reset_common(DeviceState *dev);
+void ioapic_print_redtbl(Monitor *mon, IOAPICCommonState *s);
+
#endif /* !QEMU_IOAPIC_INTERNAL_H */
diff --git a/include/hw/i386/pc.h b/include/hw/i386/pc.h
index 3e002c9..539cf64 100644
--- a/include/hw/i386/pc.h
+++ b/include/hw/i386/pc.h
@@ -123,6 +123,10 @@ int pic_get_output(DeviceState *d);
void hmp_info_pic(Monitor *mon, const QDict *qdict);
void hmp_info_irq(Monitor *mon, const QDict *qdict);
+/* ioapic.c */
+
+void kvm_ioapic_dump_state(Monitor *mon, const QDict *qdict);
+
/* Global System Interrupts */
#define GSI_NUM_PINS IOAPIC_NUM_PINS
diff --git a/include/monitor/hmp-target.h b/include/monitor/hmp-target.h
index be50577..213566c 100644
--- a/include/monitor/hmp-target.h
+++ b/include/monitor/hmp-target.h
@@ -43,5 +43,6 @@ void hmp_info_mem(Monitor *mon, const QDict *qdict);
void hmp_info_tlb(Monitor *mon, const QDict *qdict);
void hmp_mce(Monitor *mon, const QDict *qdict);
void hmp_info_local_apic(Monitor *mon, const QDict *qdict);
+void hmp_info_io_apic(Monitor *mon, const QDict *qdict);
#endif /* MONITOR_COMMON */
diff --git a/target-i386/monitor.c b/target-i386/monitor.c
index 9479a77..829fff9 100644
--- a/target-i386/monitor.c
+++ b/target-i386/monitor.c
@@ -24,6 +24,8 @@
#include "cpu.h"
#include "monitor/monitor.h"
#include "monitor/hmp-target.h"
+#include "hw/i386/pc.h"
+#include "sysemu/kvm.h"
#include "hmp.h"
@@ -498,3 +500,10 @@ void hmp_info_local_apic(Monitor *mon, const QDict *qdict)
x86_cpu_dump_local_apic_state(mon_get_cpu(), (FILE *)mon, monitor_fprintf,
CPU_DUMP_FPU);
}
+
+void hmp_info_io_apic(Monitor *mon, const QDict *qdict)
+{
+ if (kvm_irqchip_in_kernel()) {
+ kvm_ioapic_dump_state(mon, qdict);
+ }
+}
--
2.5.0
next prev parent reply other threads:[~2015-09-22 15:07 UTC|newest]
Thread overview: 51+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-09-22 15:05 [Qemu-devel] [PULL 00/48] Misc patches for 2015-09-22 Paolo Bonzini
2015-09-22 15:05 ` [Qemu-devel] [PULL 01/48] nbd: convert to use the QAPI SocketAddress object Paolo Bonzini
2015-09-22 15:05 ` [Qemu-devel] [PULL 02/48] qemu-nbd: " Paolo Bonzini
2015-09-22 15:05 ` [Qemu-devel] [PULL 03/48] utils: rename strtosz to use qemu prefix Paolo Bonzini
2015-09-22 15:05 ` [Qemu-devel] [PULL 04/48] tests: add some qemu_strtosz() tests Paolo Bonzini
2015-09-22 15:05 ` [Qemu-devel] [PULL 05/48] checkpatch: do not recommend qemu_strtok over strtok Paolo Bonzini
2015-09-22 15:05 ` [Qemu-devel] [PULL 06/48] scsi-generic: let guests recognize readonly=on on passthrough devices Paolo Bonzini
2015-09-22 15:05 ` [Qemu-devel] [PULL 07/48] Makefile: fix build when VPATH is outside GIT tree Paolo Bonzini
2015-09-22 15:05 ` [Qemu-devel] [PULL 08/48] vhost-scsi: include linux/vhost.h Paolo Bonzini
2015-09-22 15:05 ` [Qemu-devel] [PULL 09/48] get_maintainer.pl: \C is deprecated Paolo Bonzini
2015-09-22 15:05 ` [Qemu-devel] [PULL 10/48] MAINTAINERS: there is no PPC64 TCG backend anymore Paolo Bonzini
2015-09-22 15:05 ` [Qemu-devel] [PULL 11/48] MAINTAINERS: Add disassemblers to the various backends Paolo Bonzini
2015-09-22 15:05 ` [Qemu-devel] [PULL 12/48] MAINTAINERS: Add more s390 files Paolo Bonzini
2015-09-22 15:05 ` [Qemu-devel] [PULL 13/48] MAINTAINERS: add IPack section Paolo Bonzini
2015-09-22 15:05 ` [Qemu-devel] [PULL 14/48] MAINTAINERS: add more devices to the PC section Paolo Bonzini
2015-09-22 15:05 ` [Qemu-devel] [PULL 15/48] MAINTAINERS: add more devices to the PCI section Paolo Bonzini
2015-09-22 15:05 ` [Qemu-devel] [PULL 16/48] MAINTAINERS: add maintainer for character device front-ends Paolo Bonzini
2015-09-22 15:05 ` [Qemu-devel] [PULL 17/48] ioapic: coalesce level interrupts Paolo Bonzini
2015-09-22 15:05 ` [Qemu-devel] [PULL 18/48] ioapic: fix contents of arbitration register Paolo Bonzini
2015-09-22 15:05 ` [Qemu-devel] [PULL 19/48] apic_internal.h: make some apic_get_* functions externally visible Paolo Bonzini
2015-09-22 15:05 ` [Qemu-devel] [PULL 20/48] apic_internal.h: rename ESR_ILLEGAL_ADDRESS to APIC_ESR_ILLEGAL_ADDRESS Paolo Bonzini
2015-09-22 15:05 ` [Qemu-devel] [PULL 21/48] apic_internal.h: added more constants Paolo Bonzini
2015-09-22 15:05 ` [Qemu-devel] [PULL 22/48] apic_internal.h: fix formatting and drop unused consts Paolo Bonzini
2015-09-22 15:05 ` [Qemu-devel] [PULL 23/48] monitor: make monitor_fprintf and mon_get_cpu externally visible Paolo Bonzini
2015-09-22 15:05 ` [Qemu-devel] [PULL 24/48] hmp: added local apic dump state Paolo Bonzini
2015-09-22 15:05 ` [Qemu-devel] [PULL 25/48] ioapic_internal.h: added more constants Paolo Bonzini
2015-09-22 15:05 ` Paolo Bonzini [this message]
2015-09-22 15:05 ` [Qemu-devel] [PULL 27/48] hmp: implemented io apic dump state for TCG Paolo Bonzini
2015-09-22 15:05 ` [Qemu-devel] [PULL 28/48] linux_user: elfload: Default ELF_MACHINE to ELF_ARCH Paolo Bonzini
2015-09-22 15:05 ` [Qemu-devel] [PULL 29/48] linux-user: elfload: Provide default for elf_check_arch Paolo Bonzini
2015-09-22 15:05 ` [Qemu-devel] [PULL 30/48] elf_ops: Fix coding style for EM alias case statement Paolo Bonzini
2015-09-22 15:05 ` [Qemu-devel] [PULL 31/48] elf: Update EM_MOXIE definition Paolo Bonzini
2015-09-22 15:05 ` [Qemu-devel] [PULL 32/48] arm: Remove ELF_MACHINE from cpu.h Paolo Bonzini
2015-09-22 15:05 ` [Qemu-devel] [PULL 33/48] mb: " Paolo Bonzini
2015-09-22 15:05 ` [Qemu-devel] [PULL 34/48] m68k: " Paolo Bonzini
2015-09-22 15:05 ` [Qemu-devel] [PULL 35/48] cris: " Paolo Bonzini
2015-09-22 15:05 ` [Qemu-devel] [PULL 36/48] moxie: " Paolo Bonzini
2015-09-22 15:06 ` [Qemu-devel] [PULL 37/48] unicore: " Paolo Bonzini
2015-09-22 15:06 ` [Qemu-devel] [PULL 38/48] lm32: " Paolo Bonzini
2015-09-22 15:06 ` [Qemu-devel] [PULL 39/48] or32: " Paolo Bonzini
2015-09-22 15:06 ` [Qemu-devel] [PULL 40/48] tricore: " Paolo Bonzini
2015-09-22 15:06 ` [Qemu-devel] [PULL 41/48] xtensa: " Paolo Bonzini
2015-09-22 15:06 ` [Qemu-devel] [PULL 42/48] sh4: " Paolo Bonzini
2015-09-22 15:06 ` [Qemu-devel] [PULL 43/48] s390: " Paolo Bonzini
2015-09-22 15:06 ` [Qemu-devel] [PULL 44/48] sparc: " Paolo Bonzini
2015-09-22 15:06 ` [Qemu-devel] [PULL 45/48] mips: " Paolo Bonzini
2015-09-22 15:06 ` [Qemu-devel] [PULL 46/48] alpha: " Paolo Bonzini
2015-09-22 15:06 ` [Qemu-devel] [PULL 47/48] i386: Rename ELF_MACHINE to be x86 specific Paolo Bonzini
2015-09-22 15:06 ` [Qemu-devel] [PULL 48/48] ppc: Rename ELF_MACHINE to be PPC specific Paolo Bonzini
2015-09-22 19:41 ` [Qemu-devel] [PULL 00/48] Misc patches for 2015-09-22 Peter Maydell
2015-09-22 20:12 ` Paolo Bonzini
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=1442934371-12567-27-git-send-email-pbonzini@redhat.com \
--to=pbonzini@redhat.com \
--cc=afaerber@suse.de \
--cc=den@openvz.org \
--cc=pbutsykin@virtuozzo.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).