mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Avi Kivity <avi@redhat.com>
To: kvm@vger.kernel.org
Cc: linux-kernel@vger.kernel.org
Subject: [PATCH 28/38] KVM: Trace failed msr reads and writes
Date: Tue, 16 Feb 2010 12:35:26 +0200	[thread overview]
Message-ID: <1266316536-28936-29-git-send-email-avi@redhat.com> (raw)
In-Reply-To: <1266316536-28936-1-git-send-email-avi@redhat.com>

Record failed msrs reads and writes, and the fact that they failed as well.

Signed-off-by: Avi Kivity <avi@redhat.com>
Signed-off-by: Marcelo Tosatti <mtosatti@redhat.com>
---
 arch/x86/kvm/svm.c   |   13 ++++++++-----
 arch/x86/kvm/trace.h |   17 +++++++++++------
 arch/x86/kvm/vmx.c   |    5 +++--
 3 files changed, 22 insertions(+), 13 deletions(-)

diff --git a/arch/x86/kvm/svm.c b/arch/x86/kvm/svm.c
index 9596cc8..52f78dd 100644
--- a/arch/x86/kvm/svm.c
+++ b/arch/x86/kvm/svm.c
@@ -2177,9 +2177,10 @@ static int rdmsr_interception(struct vcpu_svm *svm)
 	u32 ecx = svm->vcpu.arch.regs[VCPU_REGS_RCX];
 	u64 data;
 
-	if (svm_get_msr(&svm->vcpu, ecx, &data))
+	if (svm_get_msr(&svm->vcpu, ecx, &data)) {
+		trace_kvm_msr_read_ex(ecx);
 		kvm_inject_gp(&svm->vcpu, 0);
-	else {
+	} else {
 		trace_kvm_msr_read(ecx, data);
 
 		svm->vcpu.arch.regs[VCPU_REGS_RAX] = data & 0xffffffff;
@@ -2271,13 +2272,15 @@ static int wrmsr_interception(struct vcpu_svm *svm)
 	u64 data = (svm->vcpu.arch.regs[VCPU_REGS_RAX] & -1u)
 		| ((u64)(svm->vcpu.arch.regs[VCPU_REGS_RDX] & -1u) << 32);
 
-	trace_kvm_msr_write(ecx, data);
 
 	svm->next_rip = kvm_rip_read(&svm->vcpu) + 2;
-	if (svm_set_msr(&svm->vcpu, ecx, data))
+	if (svm_set_msr(&svm->vcpu, ecx, data)) {
+		trace_kvm_msr_write_ex(ecx, data);
 		kvm_inject_gp(&svm->vcpu, 0);
-	else
+	} else {
+		trace_kvm_msr_write(ecx, data);
 		skip_emulated_instruction(&svm->vcpu);
+	}
 	return 1;
 }
 
diff --git a/arch/x86/kvm/trace.h b/arch/x86/kvm/trace.h
index 45903a9..6ad30a2 100644
--- a/arch/x86/kvm/trace.h
+++ b/arch/x86/kvm/trace.h
@@ -246,28 +246,33 @@ TRACE_EVENT(kvm_page_fault,
  * Tracepoint for guest MSR access.
  */
 TRACE_EVENT(kvm_msr,
-	TP_PROTO(unsigned write, u32 ecx, u64 data),
-	TP_ARGS(write, ecx, data),
+	TP_PROTO(unsigned write, u32 ecx, u64 data, bool exception),
+	TP_ARGS(write, ecx, data, exception),
 
 	TP_STRUCT__entry(
 		__field(	unsigned,	write		)
 		__field(	u32,		ecx		)
 		__field(	u64,		data		)
+		__field(	u8,		exception	)
 	),
 
 	TP_fast_assign(
 		__entry->write		= write;
 		__entry->ecx		= ecx;
 		__entry->data		= data;
+		__entry->exception	= exception;
 	),
 
-	TP_printk("msr_%s %x = 0x%llx",
+	TP_printk("msr_%s %x = 0x%llx%s",
 		  __entry->write ? "write" : "read",
-		  __entry->ecx, __entry->data)
+		  __entry->ecx, __entry->data,
+		  __entry->exception ? " (#GP)" : "")
 );
 
-#define trace_kvm_msr_read(ecx, data)		trace_kvm_msr(0, ecx, data)
-#define trace_kvm_msr_write(ecx, data)		trace_kvm_msr(1, ecx, data)
+#define trace_kvm_msr_read(ecx, data)      trace_kvm_msr(0, ecx, data, false)
+#define trace_kvm_msr_write(ecx, data)     trace_kvm_msr(1, ecx, data, false)
+#define trace_kvm_msr_read_ex(ecx)         trace_kvm_msr(0, ecx, 0, true)
+#define trace_kvm_msr_write_ex(ecx, data)  trace_kvm_msr(1, ecx, data, true)
 
 /*
  * Tracepoint for guest CR access.
diff --git a/arch/x86/kvm/vmx.c b/arch/x86/kvm/vmx.c
index 7a56879..334b016 100644
--- a/arch/x86/kvm/vmx.c
+++ b/arch/x86/kvm/vmx.c
@@ -3158,6 +3158,7 @@ static int handle_rdmsr(struct kvm_vcpu *vcpu)
 	u64 data;
 
 	if (vmx_get_msr(vcpu, ecx, &data)) {
+		trace_kvm_msr_read_ex(ecx);
 		kvm_inject_gp(vcpu, 0);
 		return 1;
 	}
@@ -3177,13 +3178,13 @@ static int handle_wrmsr(struct kvm_vcpu *vcpu)
 	u64 data = (vcpu->arch.regs[VCPU_REGS_RAX] & -1u)
 		| ((u64)(vcpu->arch.regs[VCPU_REGS_RDX] & -1u) << 32);
 
-	trace_kvm_msr_write(ecx, data);
-
 	if (vmx_set_msr(vcpu, ecx, data) != 0) {
+		trace_kvm_msr_write_ex(ecx, data);
 		kvm_inject_gp(vcpu, 0);
 		return 1;
 	}
 
+	trace_kvm_msr_write(ecx, data);
 	skip_emulated_instruction(vcpu);
 	return 1;
 }
-- 
1.6.5.3


  parent reply	other threads:[~2010-02-16 10:38 UTC|newest]

Thread overview: 39+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-02-16 10:34 [PATCH 00/38] KVM updates for the 2.6.34 merge window (batch 3/4) Avi Kivity
2010-02-16 10:34 ` [PATCH 01/38] KVM: export <asm/hyperv.h> Avi Kivity
2010-02-16 10:35 ` [PATCH 02/38] KVM: VMX: Remove emulation failure report Avi Kivity
2010-02-16 10:35 ` [PATCH 03/38] KVM: fix Hyper-V hypercall warnings and wrong mask value Avi Kivity
2010-02-16 10:35 ` [PATCH 04/38] KVM: fix cleanup_srcu_struct on vm destruction Avi Kivity
2010-02-16 10:35 ` [PATCH 05/38] KVM: x86: Use macros for x86_emulate_ops to avoid future mistakes Avi Kivity
2010-02-16 10:35 ` [PATCH 06/38] KVM: VMX: Fix exceptions of mov to dr Avi Kivity
2010-02-16 10:35 ` [PATCH 07/38] KVM: VMX: Fix emulation of DR4 and DR5 Avi Kivity
2010-02-16 10:35 ` [PATCH 08/38] KVM: VMX: Clean up DR6 emulation Avi Kivity
2010-02-16 10:35 ` [PATCH 09/38] KVM: SVM: Clean up and enhance mov dr emulation Avi Kivity
2010-02-16 10:35 ` [PATCH 10/38] KVM: SVM: Trap all debug register accesses Avi Kivity
2010-02-16 10:35 ` [PATCH 11/38] KVM: Fix kvm_coalesced_mmio_ring duplicate allocation Avi Kivity
2010-02-16 10:35 ` [PATCH 12/38] KVM: x86: fix checking of cr0 validity Avi Kivity
2010-02-16 10:35 ` [PATCH 13/38] KVM: Allow kvm_load_guest_fpu() even when !vcpu->fpu_active Avi Kivity
2010-02-16 10:35 ` [PATCH 14/38] KVM: Drop kvm_{load,put}_guest_fpu() exports Avi Kivity
2010-02-16 10:35 ` [PATCH 15/38] KVM: Activate fpu on clts Avi Kivity
2010-02-16 10:35 ` [PATCH 16/38] KVM: Add a helper for checking if the guest is in protected mode Avi Kivity
2010-02-16 10:35 ` [PATCH 17/38] KVM: Move cr0/cr4/efer related helpers to x86.h Avi Kivity
2010-02-16 10:35 ` [PATCH 18/38] KVM: Rename vcpu->shadow_efer to efer Avi Kivity
2010-02-16 10:35 ` [PATCH 19/38] KVM: Optimize kvm_read_cr[04]_bits() Avi Kivity
2010-02-16 10:35 ` [PATCH 20/38] KVM: trace guest fpu loads and unloads Avi Kivity
2010-02-16 10:35 ` [PATCH 21/38] KVM: MMU: Remove some useless code from alloc_mmu_pages() Avi Kivity
2010-02-16 10:35 ` [PATCH 22/38] KVM: PPC E500: Add register l1csr0 emulation Avi Kivity
2010-02-16 10:35 ` [PATCH 23/38] KVM: PPC: Add PVR/PIR init for E500 Avi Kivity
2010-02-16 10:35 ` [PATCH 24/38] KVM: PPC E500: fix tlbcfg emulation Avi Kivity
2010-02-16 10:35 ` [PATCH 25/38] KVM: VMX: Pass cr0.mp through to the guest when the fpu is active Avi Kivity
2010-02-16 10:35 ` [PATCH 26/38] KVM: mark segments accessed on HW task switch Avi Kivity
2010-02-16 10:35 ` [PATCH 27/38] KVM: Fix msr trace Avi Kivity
2010-02-16 10:35 ` Avi Kivity [this message]
2010-02-16 10:35 ` [PATCH 29/38] KVM: VMX: Remove redundant check in vm_need_virtualize_apic_accesses() Avi Kivity
2010-02-16 10:35 ` [PATCH 30/38] KVM: enable PCI multiple-segments for pass-through device Avi Kivity
2010-02-16 10:35 ` [PATCH 31/38] KVM: fix load_guest_segment_descriptor() to return X86EMUL_* Avi Kivity
2010-02-16 10:35 ` [PATCH 32/38] KVM: fix kvm_fix_hypercall() " Avi Kivity
2010-02-16 10:35 ` [PATCH 33/38] KVM: VMX: Wire up .fpu_activate() callback Avi Kivity
2010-02-16 10:35 ` [PATCH 34/38] KVM: ia64: Fix string literal continuation lines Avi Kivity
2010-02-16 10:35 ` [PATCH 35/38] KVM: VMX: Remove redundant test in vmx_set_efer() Avi Kivity
2010-02-16 10:35 ` [PATCH 36/38] KVM: Introduce kvm_host_page_size Avi Kivity
2010-02-16 10:35 ` [PATCH 37/38] KVM: VMX: emulate accessed bit for EPT Avi Kivity
2010-02-16 10:35 ` [PATCH 38/38] KVM: Remove redundant reading of rax on OUT instructions Avi Kivity

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1266316536-28936-29-git-send-email-avi@redhat.com \
    --to=avi@redhat.com \
    --cc=kvm@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

Powered by JetHome