Re: [PATCH] kvm/svm: fix DR interception handling on upcoming AMD CPUs

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Roedel, Joerg wrote:
On Tue, Feb 08, 2011 at 07:22:29PM -0500, Andre Przywara wrote:
Somehow the code line advancing the RIP and checking for exceptions
got dropped between the post on the ML and the commit.
Add it again to let guests boot on upcoming AMD CPUs again.

Reported-by: Joerg Roedel <joerg.roedel@xxxxxxx>
Signed-off-by: Andre Przywara <andre.przywara@xxxxxxx>
---
 arch/x86/kvm/svm.c |    1 +
 1 files changed, 1 insertions(+), 0 deletions(-)

diff --git a/arch/x86/kvm/svm.c b/arch/x86/kvm/svm.c
index 25bd1bc..be06e58 100644
--- a/arch/x86/kvm/svm.c
+++ b/arch/x86/kvm/svm.c
@@ -2776,6 +2776,7 @@ static int dr_interception(struct vcpu_svm *svm)
 		if (!err)
 			kvm_register_write(&svm->vcpu, reg, val);
 	}
+	kvm_complete_insn_gp(&svm->vcpu, err);

Any exception check takes presedence over the intercept. So a call to
skip_emulated_instruction should be sufficient here.
You are right, but I think this way the implementation is cleaner and more generic. If there is no exception condition detected (err==0), then the call will just do skip_emulated_instruction anyway. But as I write this, I see that err is not initialized, so I'd propose this corrected version of the patch instead.

Regards,
Andre.

--

From 8c1dced7b4f80e4968b03656aee2452535b2ef2f Mon Sep 17 00:00:00 2001
From: Andre Przywara <andre.przywara@xxxxxxx>
Date: Wed, 9 Feb 2011 01:10:45 +0100
Subject: [PATCH] kvm/svm: fix DR interception handling on upcoming AMD CPUs

Somehow the code line advancing the RIP and checking for exceptions
got dropped between the mail on the ML and the commit.
Add it again to let guests boot on upcoming AMD CPUs again.
While at it, properly initialize the err variable to fix the write DR
case.

Reported-by: Joerg Roedel <joerg.roedel@xxxxxxx>
Signed-off-by: Andre Przywara <andre.przywara@xxxxxxx>
---
 arch/x86/kvm/svm.c |    3 ++-
 1 files changed, 2 insertions(+), 1 deletions(-)

diff --git a/arch/x86/kvm/svm.c b/arch/x86/kvm/svm.c
index 25bd1bc..d558121 100644
--- a/arch/x86/kvm/svm.c
+++ b/arch/x86/kvm/svm.c
@@ -2760,7 +2760,7 @@ static int dr_interception(struct vcpu_svm *svm)
 {
 	int reg, dr;
 	unsigned long val;
-	int err;
+	int err = 0;

 	if (!boot_cpu_has(X86_FEATURE_DECODEASSISTS))
 		return emulate_on_interception(svm);
@@ -2776,6 +2776,7 @@ static int dr_interception(struct vcpu_svm *svm)
 		if (!err)
 			kvm_register_write(&svm->vcpu, reg, val);
 	}
+	kvm_complete_insn_gp(&svm->vcpu, err);

 	return 1;
 }
--
1.6.4


--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [KVM ARM]     [KVM ia64]     [KVM ppc]     [Virtualization Tools]     [Spice Development]     [Libvirt]     [Libvirt Users]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite Questions]     [Linux Kernel]     [Linux SCSI]     [XFree86]
  Powered by Linux