diff options
author | Alexander Graf <agraf@suse.de> | 2012-08-02 09:10:00 -0400 |
---|---|---|
committer | Alexander Graf <agraf@suse.de> | 2012-10-05 17:38:39 -0400 |
commit | 97c95059848358f1577f471ec47cf68690f996e4 (patch) | |
tree | ccb8bc46b80cb694fee366b4bf46ae65e6285830 | |
parent | 8e525d59d024f54b88a038faac38f76b9094774e (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.c | 2 | ||||
-rw-r--r-- | arch/powerpc/kvm/booke.c | 3 | ||||
-rw-r--r-- | arch/powerpc/kvm/trace.h | 79 |
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 | ||
43 | unsigned long kvmppc_booke_handlers; | 44 | unsigned 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 | ||
34 | TRACE_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 | |||
34 | TRACE_EVENT(kvm_stlb_inval, | 85 | TRACE_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 | ||
108 | TRACE_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 | |||
136 | TRACE_EVENT(kvm_book3s_reenter, | 159 | TRACE_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), |