aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlexander Graf <agraf@suse.de>2012-08-02 09:10:00 -0400
committerAlexander Graf <agraf@suse.de>2012-10-05 17:38:39 -0400
commit97c95059848358f1577f471ec47cf68690f996e4 (patch)
treeccb8bc46b80cb694fee366b4bf46ae65e6285830
parent8e525d59d024f54b88a038faac38f76b9094774e (diff)
KVM: PPC: PR: Use generic tracepoint for guest exit
We want to have tracing information on guest exits for booke as well as book3s. Since most information is identical, use a common trace point. Signed-off-by: Alexander Graf <agraf@suse.de>
-rw-r--r--arch/powerpc/kvm/book3s_pr.c2
-rw-r--r--arch/powerpc/kvm/booke.c3
-rw-r--r--arch/powerpc/kvm/trace.h79
3 files changed, 55 insertions, 29 deletions
diff --git a/arch/powerpc/kvm/book3s_pr.c b/arch/powerpc/kvm/book3s_pr.c
index 05c28f59f77f..7f0fe6f9e297 100644
--- a/arch/powerpc/kvm/book3s_pr.c
+++ b/arch/powerpc/kvm/book3s_pr.c
@@ -549,7 +549,7 @@ int kvmppc_handle_exit(struct kvm_run *run, struct kvm_vcpu *vcpu,
549 /* We get here with MSR.EE=0, so enable it to be a nice citizen */ 549 /* We get here with MSR.EE=0, so enable it to be a nice citizen */
550 __hard_irq_enable(); 550 __hard_irq_enable();
551 551
552 trace_kvm_book3s_exit(exit_nr, vcpu); 552 trace_kvm_exit(exit_nr, vcpu);
553 preempt_enable(); 553 preempt_enable();
554 kvm_resched(vcpu); 554 kvm_resched(vcpu);
555 switch (exit_nr) { 555 switch (exit_nr) {
diff --git a/arch/powerpc/kvm/booke.c b/arch/powerpc/kvm/booke.c
index d25a097c852b..7ce2ed07831f 100644
--- a/arch/powerpc/kvm/booke.c
+++ b/arch/powerpc/kvm/booke.c
@@ -39,6 +39,7 @@
39 39
40#include "timing.h" 40#include "timing.h"
41#include "booke.h" 41#include "booke.h"
42#include "trace.h"
42 43
43unsigned long kvmppc_booke_handlers; 44unsigned long kvmppc_booke_handlers;
44 45
@@ -677,6 +678,8 @@ int kvmppc_handle_exit(struct kvm_run *run, struct kvm_vcpu *vcpu,
677 678
678 local_irq_enable(); 679 local_irq_enable();
679 680
681 trace_kvm_exit(exit_nr, vcpu);
682
680 run->exit_reason = KVM_EXIT_UNKNOWN; 683 run->exit_reason = KVM_EXIT_UNKNOWN;
681 run->ready_for_interrupt_injection = 1; 684 run->ready_for_interrupt_injection = 1;
682 685
diff --git a/arch/powerpc/kvm/trace.h b/arch/powerpc/kvm/trace.h
index 877186b7b1c3..9fab6eddc7e4 100644
--- a/arch/powerpc/kvm/trace.h
+++ b/arch/powerpc/kvm/trace.h
@@ -31,6 +31,57 @@ TRACE_EVENT(kvm_ppc_instr,
31 __entry->inst, __entry->pc, __entry->emulate) 31 __entry->inst, __entry->pc, __entry->emulate)
32); 32);
33 33
34TRACE_EVENT(kvm_exit,
35 TP_PROTO(unsigned int exit_nr, struct kvm_vcpu *vcpu),
36 TP_ARGS(exit_nr, vcpu),
37
38 TP_STRUCT__entry(
39 __field( unsigned int, exit_nr )
40 __field( unsigned long, pc )
41 __field( unsigned long, msr )
42 __field( unsigned long, dar )
43#ifdef CONFIG_KVM_BOOK3S_PR
44 __field( unsigned long, srr1 )
45#endif
46 __field( unsigned long, last_inst )
47 ),
48
49 TP_fast_assign(
50#ifdef CONFIG_KVM_BOOK3S_PR
51 struct kvmppc_book3s_shadow_vcpu *svcpu;
52#endif
53 __entry->exit_nr = exit_nr;
54 __entry->pc = kvmppc_get_pc(vcpu);
55 __entry->dar = kvmppc_get_fault_dar(vcpu);
56 __entry->msr = vcpu->arch.shared->msr;
57#ifdef CONFIG_KVM_BOOK3S_PR
58 svcpu = svcpu_get(vcpu);
59 __entry->srr1 = svcpu->shadow_srr1;
60 svcpu_put(svcpu);
61#endif
62 __entry->last_inst = vcpu->arch.last_inst;
63 ),
64
65 TP_printk("exit=0x%x"
66 " | pc=0x%lx"
67 " | msr=0x%lx"
68 " | dar=0x%lx"
69#ifdef CONFIG_KVM_BOOK3S_PR
70 " | srr1=0x%lx"
71#endif
72 " | last_inst=0x%lx"
73 ,
74 __entry->exit_nr,
75 __entry->pc,
76 __entry->msr,
77 __entry->dar,
78#ifdef CONFIG_KVM_BOOK3S_PR
79 __entry->srr1,
80#endif
81 __entry->last_inst
82 )
83);
84
34TRACE_EVENT(kvm_stlb_inval, 85TRACE_EVENT(kvm_stlb_inval,
35 TP_PROTO(unsigned int stlb_index), 86 TP_PROTO(unsigned int stlb_index),
36 TP_ARGS(stlb_index), 87 TP_ARGS(stlb_index),
@@ -105,34 +156,6 @@ TRACE_EVENT(kvm_gtlb_write,
105 156
106#ifdef CONFIG_KVM_BOOK3S_PR 157#ifdef CONFIG_KVM_BOOK3S_PR
107 158
108TRACE_EVENT(kvm_book3s_exit,
109 TP_PROTO(unsigned int exit_nr, struct kvm_vcpu *vcpu),
110 TP_ARGS(exit_nr, vcpu),
111
112 TP_STRUCT__entry(
113 __field( unsigned int, exit_nr )
114 __field( unsigned long, pc )
115 __field( unsigned long, msr )
116 __field( unsigned long, dar )
117 __field( unsigned long, srr1 )
118 ),
119
120 TP_fast_assign(
121 struct kvmppc_book3s_shadow_vcpu *svcpu;
122 __entry->exit_nr = exit_nr;
123 __entry->pc = kvmppc_get_pc(vcpu);
124 __entry->dar = kvmppc_get_fault_dar(vcpu);
125 __entry->msr = vcpu->arch.shared->msr;
126 svcpu = svcpu_get(vcpu);
127 __entry->srr1 = svcpu->shadow_srr1;
128 svcpu_put(svcpu);
129 ),
130
131 TP_printk("exit=0x%x | pc=0x%lx | msr=0x%lx | dar=0x%lx | srr1=0x%lx",
132 __entry->exit_nr, __entry->pc, __entry->msr, __entry->dar,
133 __entry->srr1)
134);
135
136TRACE_EVENT(kvm_book3s_reenter, 159TRACE_EVENT(kvm_book3s_reenter,
137 TP_PROTO(int r, struct kvm_vcpu *vcpu), 160 TP_PROTO(int r, struct kvm_vcpu *vcpu),
138 TP_ARGS(r, vcpu), 161 TP_ARGS(r, vcpu),