diff options
author | Alexander Graf <agraf@suse.de> | 2012-08-14 19:38:43 -0400 |
---|---|---|
committer | Alexander Graf <agraf@suse.de> | 2012-10-05 17:38:48 -0400 |
commit | 166a2b7000c388aee81168987ce2eddb6783f550 (patch) | |
tree | 2d7bf8d120fabde1b7e5f0b9d6fc14f2b1247f5e /arch/powerpc/kvm | |
parent | 50c871edf59b4585fd2c17acfe4e7cd3752418b7 (diff) |
KVM: PPC: Use symbols for exit trace
Exit traces are a lot easier to read when you don't have to remember
cryptic numbers for guest exit reasons. Symbolify them in our trace
output.
Signed-off-by: Alexander Graf <agraf@suse.de>
Diffstat (limited to 'arch/powerpc/kvm')
-rw-r--r-- | arch/powerpc/kvm/trace.h | 58 |
1 files changed, 56 insertions, 2 deletions
diff --git a/arch/powerpc/kvm/trace.h b/arch/powerpc/kvm/trace.h index cb2780a42fd8..519aba8bb3d3 100644 --- a/arch/powerpc/kvm/trace.h +++ b/arch/powerpc/kvm/trace.h | |||
@@ -31,6 +31,60 @@ TRACE_EVENT(kvm_ppc_instr, | |||
31 | __entry->inst, __entry->pc, __entry->emulate) | 31 | __entry->inst, __entry->pc, __entry->emulate) |
32 | ); | 32 | ); |
33 | 33 | ||
34 | #ifdef CONFIG_PPC_BOOK3S | ||
35 | #define kvm_trace_symbol_exit \ | ||
36 | {0x100, "SYSTEM_RESET"}, \ | ||
37 | {0x200, "MACHINE_CHECK"}, \ | ||
38 | {0x300, "DATA_STORAGE"}, \ | ||
39 | {0x380, "DATA_SEGMENT"}, \ | ||
40 | {0x400, "INST_STORAGE"}, \ | ||
41 | {0x480, "INST_SEGMENT"}, \ | ||
42 | {0x500, "EXTERNAL"}, \ | ||
43 | {0x501, "EXTERNAL_LEVEL"}, \ | ||
44 | {0x502, "EXTERNAL_HV"}, \ | ||
45 | {0x600, "ALIGNMENT"}, \ | ||
46 | {0x700, "PROGRAM"}, \ | ||
47 | {0x800, "FP_UNAVAIL"}, \ | ||
48 | {0x900, "DECREMENTER"}, \ | ||
49 | {0x980, "HV_DECREMENTER"}, \ | ||
50 | {0xc00, "SYSCALL"}, \ | ||
51 | {0xd00, "TRACE"}, \ | ||
52 | {0xe00, "H_DATA_STORAGE"}, \ | ||
53 | {0xe20, "H_INST_STORAGE"}, \ | ||
54 | {0xe40, "H_EMUL_ASSIST"}, \ | ||
55 | {0xf00, "PERFMON"}, \ | ||
56 | {0xf20, "ALTIVEC"}, \ | ||
57 | {0xf40, "VSX"} | ||
58 | #else | ||
59 | #define kvm_trace_symbol_exit \ | ||
60 | {0, "CRITICAL"}, \ | ||
61 | {1, "MACHINE_CHECK"}, \ | ||
62 | {2, "DATA_STORAGE"}, \ | ||
63 | {3, "INST_STORAGE"}, \ | ||
64 | {4, "EXTERNAL"}, \ | ||
65 | {5, "ALIGNMENT"}, \ | ||
66 | {6, "PROGRAM"}, \ | ||
67 | {7, "FP_UNAVAIL"}, \ | ||
68 | {8, "SYSCALL"}, \ | ||
69 | {9, "AP_UNAVAIL"}, \ | ||
70 | {10, "DECREMENTER"}, \ | ||
71 | {11, "FIT"}, \ | ||
72 | {12, "WATCHDOG"}, \ | ||
73 | {13, "DTLB_MISS"}, \ | ||
74 | {14, "ITLB_MISS"}, \ | ||
75 | {15, "DEBUG"}, \ | ||
76 | {32, "SPE_UNAVAIL"}, \ | ||
77 | {33, "SPE_FP_DATA"}, \ | ||
78 | {34, "SPE_FP_ROUND"}, \ | ||
79 | {35, "PERFORMANCE_MONITOR"}, \ | ||
80 | {36, "DOORBELL"}, \ | ||
81 | {37, "DOORBELL_CRITICAL"}, \ | ||
82 | {38, "GUEST_DBELL"}, \ | ||
83 | {39, "GUEST_DBELL_CRIT"}, \ | ||
84 | {40, "HV_SYSCALL"}, \ | ||
85 | {41, "HV_PRIV"} | ||
86 | #endif | ||
87 | |||
34 | TRACE_EVENT(kvm_exit, | 88 | TRACE_EVENT(kvm_exit, |
35 | TP_PROTO(unsigned int exit_nr, struct kvm_vcpu *vcpu), | 89 | TP_PROTO(unsigned int exit_nr, struct kvm_vcpu *vcpu), |
36 | TP_ARGS(exit_nr, vcpu), | 90 | TP_ARGS(exit_nr, vcpu), |
@@ -62,7 +116,7 @@ TRACE_EVENT(kvm_exit, | |||
62 | __entry->last_inst = vcpu->arch.last_inst; | 116 | __entry->last_inst = vcpu->arch.last_inst; |
63 | ), | 117 | ), |
64 | 118 | ||
65 | TP_printk("exit=0x%x" | 119 | TP_printk("exit=%s" |
66 | " | pc=0x%lx" | 120 | " | pc=0x%lx" |
67 | " | msr=0x%lx" | 121 | " | msr=0x%lx" |
68 | " | dar=0x%lx" | 122 | " | dar=0x%lx" |
@@ -71,7 +125,7 @@ TRACE_EVENT(kvm_exit, | |||
71 | #endif | 125 | #endif |
72 | " | last_inst=0x%lx" | 126 | " | last_inst=0x%lx" |
73 | , | 127 | , |
74 | __entry->exit_nr, | 128 | __print_symbolic(__entry->exit_nr, kvm_trace_symbol_exit), |
75 | __entry->pc, | 129 | __entry->pc, |
76 | __entry->msr, | 130 | __entry->msr, |
77 | __entry->dar, | 131 | __entry->dar, |