diff options
author | Avi Kivity <avi@redhat.com> | 2010-03-11 03:50:44 -0500 |
---|---|---|
committer | Avi Kivity <avi@redhat.com> | 2010-05-17 05:15:25 -0400 |
commit | 5bfd8b5455e69b37af16a2df1edae2c3b567648c (patch) | |
tree | 2b7ccd08791b327f27ec340687eadd82980873d6 /arch/x86 | |
parent | d4f64b6cad0fc0fb4cec868c6ca6b1325949d08b (diff) |
KVM: Move kvm_exit tracepoint rip reading inside tracepoint
Reading rip is expensive on vmx, so move it inside the tracepoint so we only
incur the cost if tracing is enabled.
Signed-off-by: Avi Kivity <avi@redhat.com>
Diffstat (limited to 'arch/x86')
-rw-r--r-- | arch/x86/kvm/svm.c | 2 | ||||
-rw-r--r-- | arch/x86/kvm/trace.h | 6 | ||||
-rw-r--r-- | arch/x86/kvm/vmx.c | 2 |
3 files changed, 5 insertions, 5 deletions
diff --git a/arch/x86/kvm/svm.c b/arch/x86/kvm/svm.c index 490bec199887..abbc3f9d03b2 100644 --- a/arch/x86/kvm/svm.c +++ b/arch/x86/kvm/svm.c | |||
@@ -2686,7 +2686,7 @@ static int handle_exit(struct kvm_vcpu *vcpu) | |||
2686 | struct kvm_run *kvm_run = vcpu->run; | 2686 | struct kvm_run *kvm_run = vcpu->run; |
2687 | u32 exit_code = svm->vmcb->control.exit_code; | 2687 | u32 exit_code = svm->vmcb->control.exit_code; |
2688 | 2688 | ||
2689 | trace_kvm_exit(exit_code, svm->vmcb->save.rip); | 2689 | trace_kvm_exit(exit_code, vcpu); |
2690 | 2690 | ||
2691 | if (unlikely(svm->nested.exit_required)) { | 2691 | if (unlikely(svm->nested.exit_required)) { |
2692 | nested_svm_vmexit(svm); | 2692 | nested_svm_vmexit(svm); |
diff --git a/arch/x86/kvm/trace.h b/arch/x86/kvm/trace.h index b75efef79e56..d10b359a21f3 100644 --- a/arch/x86/kvm/trace.h +++ b/arch/x86/kvm/trace.h | |||
@@ -182,8 +182,8 @@ TRACE_EVENT(kvm_apic, | |||
182 | * Tracepoint for kvm guest exit: | 182 | * Tracepoint for kvm guest exit: |
183 | */ | 183 | */ |
184 | TRACE_EVENT(kvm_exit, | 184 | TRACE_EVENT(kvm_exit, |
185 | TP_PROTO(unsigned int exit_reason, unsigned long guest_rip), | 185 | TP_PROTO(unsigned int exit_reason, struct kvm_vcpu *vcpu), |
186 | TP_ARGS(exit_reason, guest_rip), | 186 | TP_ARGS(exit_reason, vcpu), |
187 | 187 | ||
188 | TP_STRUCT__entry( | 188 | TP_STRUCT__entry( |
189 | __field( unsigned int, exit_reason ) | 189 | __field( unsigned int, exit_reason ) |
@@ -192,7 +192,7 @@ TRACE_EVENT(kvm_exit, | |||
192 | 192 | ||
193 | TP_fast_assign( | 193 | TP_fast_assign( |
194 | __entry->exit_reason = exit_reason; | 194 | __entry->exit_reason = exit_reason; |
195 | __entry->guest_rip = guest_rip; | 195 | __entry->guest_rip = kvm_rip_read(vcpu); |
196 | ), | 196 | ), |
197 | 197 | ||
198 | TP_printk("reason %s rip 0x%lx", | 198 | TP_printk("reason %s rip 0x%lx", |
diff --git a/arch/x86/kvm/vmx.c b/arch/x86/kvm/vmx.c index 8e2a24693be9..3dbfc20824b7 100644 --- a/arch/x86/kvm/vmx.c +++ b/arch/x86/kvm/vmx.c | |||
@@ -3612,7 +3612,7 @@ static int vmx_handle_exit(struct kvm_vcpu *vcpu) | |||
3612 | u32 exit_reason = vmx->exit_reason; | 3612 | u32 exit_reason = vmx->exit_reason; |
3613 | u32 vectoring_info = vmx->idt_vectoring_info; | 3613 | u32 vectoring_info = vmx->idt_vectoring_info; |
3614 | 3614 | ||
3615 | trace_kvm_exit(exit_reason, kvm_rip_read(vcpu)); | 3615 | trace_kvm_exit(exit_reason, vcpu); |
3616 | 3616 | ||
3617 | /* If guest state is invalid, start emulating */ | 3617 | /* If guest state is invalid, start emulating */ |
3618 | if (vmx->emulation_required && emulate_invalid_guest_state) | 3618 | if (vmx->emulation_required && emulate_invalid_guest_state) |