[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PULL 23/33] x86: ioapic: add traces for ioapic
From: |
Paolo Bonzini |
Subject: |
[Qemu-devel] [PULL 23/33] x86: ioapic: add traces for ioapic |
Date: |
Wed, 11 Jan 2017 20:35:17 +0100 |
From: Peter Xu <address@hidden>
>From time to time, there are issues with ioapic, either on guest side or
on hypervisor side. Good to have some persistent traces for better
triaging and debugging.
Signed-off-by: Peter Xu <address@hidden>
Message-Id: <address@hidden>
Signed-off-by: Paolo Bonzini <address@hidden>
---
hw/intc/ioapic.c | 17 +++++++++++++++--
hw/intc/trace-events | 7 +++++++
2 files changed, 22 insertions(+), 2 deletions(-)
diff --git a/hw/intc/ioapic.c b/hw/intc/ioapic.c
index ea7ea0b..d1254f8 100644
--- a/hw/intc/ioapic.c
+++ b/hw/intc/ioapic.c
@@ -33,6 +33,7 @@
#include "target/i386/cpu.h"
#include "hw/i386/apic-msidef.h"
#include "hw/i386/x86-iommu.h"
+#include "trace.h"
//#define DEBUG_IOAPIC
@@ -115,6 +116,7 @@ static void ioapic_service(IOAPICCommonState *s)
s->irr &= ~mask;
} else {
coalesce = s->ioredtbl[i] & IOAPIC_LVT_REMOTE_IRR;
+ trace_ioapic_set_remote_irr(i);
s->ioredtbl[i] |= IOAPIC_LVT_REMOTE_IRR;
}
@@ -220,6 +222,8 @@ void ioapic_eoi_broadcast(int vector)
uint64_t entry;
int i, n;
+ trace_ioapic_eoi_broadcast(vector);
+
for (i = 0; i < MAX_IOAPICS; i++) {
s = ioapics[i];
if (!s) {
@@ -229,6 +233,7 @@ void ioapic_eoi_broadcast(int vector)
entry = s->ioredtbl[n];
if ((entry & IOAPIC_LVT_REMOTE_IRR)
&& (entry & IOAPIC_VECTOR_MASK) == vector) {
+ trace_ioapic_clear_remote_irr(n, vector);
s->ioredtbl[n] = entry & ~IOAPIC_LVT_REMOTE_IRR;
if (!(entry & IOAPIC_LVT_MASKED) && (s->irr & (1 << n))) {
ioapic_service(s);
@@ -256,7 +261,9 @@ ioapic_mem_read(void *opaque, hwaddr addr, unsigned int
size)
int index;
uint32_t val = 0;
- switch (addr & 0xff) {
+ addr &= 0xff;
+
+ switch (addr) {
case IOAPIC_IOREGSEL:
val = s->ioregsel;
break;
@@ -286,6 +293,9 @@ ioapic_mem_read(void *opaque, hwaddr addr, unsigned int
size)
DPRINTF("read: %08x = %08x\n", s->ioregsel, val);
break;
}
+
+ trace_ioapic_mem_read(addr, size, val);
+
return val;
}
@@ -324,7 +334,10 @@ ioapic_mem_write(void *opaque, hwaddr addr, uint64_t val,
IOAPICCommonState *s = opaque;
int index;
- switch (addr & 0xff) {
+ addr &= 0xff;
+ trace_ioapic_mem_write(addr, size, val);
+
+ switch (addr) {
case IOAPIC_IOREGSEL:
s->ioregsel = val;
break;
diff --git a/hw/intc/trace-events b/hw/intc/trace-events
index 340f617..180b893 100644
--- a/hw/intc/trace-events
+++ b/hw/intc/trace-events
@@ -14,6 +14,13 @@ apic_deliver_irq(uint8_t dest, uint8_t dest_mode, uint8_t
delivery_mode, uint8_t
apic_mem_readl(uint64_t addr, uint32_t val) "%"PRIx64" = %08x"
apic_mem_writel(uint64_t addr, uint32_t val) "%"PRIx64" = %08x"
+# hw/intc/ioapic.c
+ioapic_set_remote_irr(int n) "set remote irr for pin %d"
+ioapic_clear_remote_irr(int n, int vector) "clear remote irr for pin %d vector
%d"
+ioapic_eoi_broadcast(int vector) "EOI broadcast for vector %d"
+ioapic_mem_read(uint8_t addr, uint8_t size, uint32_t val) "ioapic mem read
addr 0x%"PRIx8" size 0x%"PRIx8" retval 0x%"PRIx32
+ioapic_mem_write(uint8_t addr, uint8_t size, uint32_t val) "ioapic mem write
addr 0x%"PRIx8" size 0x%"PRIx8" val 0x%"PRIx32
+
# hw/intc/slavio_intctl.c
slavio_intctl_mem_readl(uint32_t cpu, uint64_t addr, uint32_t ret) "read cpu
%d reg 0x%"PRIx64" = %x"
slavio_intctl_mem_writel(uint32_t cpu, uint64_t addr, uint32_t val) "write cpu
%d reg 0x%"PRIx64" = %x"
--
1.8.3.1
- [Qemu-devel] [PULL 13/33] event_notifier: cleanups around event_notifier_set_handler, (continued)
- [Qemu-devel] [PULL 13/33] event_notifier: cleanups around event_notifier_set_handler, Paolo Bonzini, 2017/01/11
- [Qemu-devel] [PULL 11/33] stubs: group all monitor_fdset_* functions in a single file, Paolo Bonzini, 2017/01/11
- [Qemu-devel] [PULL 15/33] stubs: remove stubs/kvm.c, Paolo Bonzini, 2017/01/11
- [Qemu-devel] [PULL 17/33] target-i386: Correctly apply patch for syscall eflags.TF handling, Paolo Bonzini, 2017/01/11
- [Qemu-devel] [PULL 16/33] acpi: filter based on CONFIG_ACPI_X86 rather than TARGET, Paolo Bonzini, 2017/01/11
- [Qemu-devel] [PULL 18/33] pc: fix crash in rtc_set_memory() if initial cpu is marked as hotplugged, Paolo Bonzini, 2017/01/11
- [Qemu-devel] [PULL 19/33] scsi-block: fix direction of BYTCHK test for VERIFY commands, Paolo Bonzini, 2017/01/11
- [Qemu-devel] [PULL 20/33] serial: fix memory leak in serial exit, Paolo Bonzini, 2017/01/11
- [Qemu-devel] [PULL 22/33] hxtool: emit Texinfo headings as @subsection, Paolo Bonzini, 2017/01/11
- [Qemu-devel] [PULL 21/33] qemu-thread: fix qemu_thread_set_name() race in qemu_thread_create(), Paolo Bonzini, 2017/01/11
- [Qemu-devel] [PULL 23/33] x86: ioapic: add traces for ioapic,
Paolo Bonzini <=
- [Qemu-devel] [PULL 25/33] x86: ioapic: fix fail migration when irqchip=split, Paolo Bonzini, 2017/01/11
- [Qemu-devel] [PULL 26/33] exec: Add missing rcu_read_unlock, Paolo Bonzini, 2017/01/11
- [Qemu-devel] [PULL 24/33] x86: ioapic: dump version for "info ioapic", Paolo Bonzini, 2017/01/11
- [Qemu-devel] [PULL 27/33] char: fix ctrl-a b not working, Paolo Bonzini, 2017/01/11
- [Qemu-devel] [PULL 28/33] ramblock-notifier: new, Paolo Bonzini, 2017/01/11
- [Qemu-devel] [PULL 29/33] kvm: move cpu synchronization code, Paolo Bonzini, 2017/01/11
- [Qemu-devel] [PULL 33/33] Revert "win32: don't run subprocess tests on Mingw32 platform", Paolo Bonzini, 2017/01/11
- [Qemu-devel] [PULL 31/33] Plumb the HAXM-based hardware acceleration support, Paolo Bonzini, 2017/01/11
- [Qemu-devel] [PULL 32/33] hax: add Darwin support, Paolo Bonzini, 2017/01/11
- [Qemu-devel] [PULL 30/33] target/i386: Add Intel HAX files, Paolo Bonzini, 2017/01/11