diff mbox

[v2] x86: svm: use cr_interception for SVM_EXIT_CR0_SEL_WRITE

Message ID 20150306204435.18348.72139.stgit@joelvmguard2.amd.com (mailing list archive)
State New, archived
Headers show

Commit Message

Joel Schopp March 6, 2015, 8:44 p.m. UTC
From: David Kaplan <david.kaplan@amd.com>

Another patch in my war on emulate_on_interception() use as a svm exit handler.

These were pulled out of a larger patch at the suggestion of Radim Krcmar, see
https://lkml.org/lkml/2015/2/25/559

Changes since v1:
	* fixed typo introduced after test, retested

Signed-off-by: David Kaplan <david.kaplan@amd.com>
[separated out just cr_interception part from larger removal of
INTERCEPT_CR0_WRITE, forward ported, tested]
Signed-off-by: Joel Schopp <joel.schopp@amd.com>
---
 arch/x86/kvm/svm.c |    7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)


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

Comments

Radim Krčmář March 9, 2015, 3:49 p.m. UTC | #1
2015-03-06 14:44-0600, Joel Schopp:
> From: David Kaplan <david.kaplan@amd.com>
> 
> Another patch in my war on emulate_on_interception() use as a svm exit handler.
> 
> These were pulled out of a larger patch at the suggestion of Radim Krcmar, see
> https://lkml.org/lkml/2015/2/25/559
> 
> Changes since v1:
> 	* fixed typo introduced after test, retested
> 
> Signed-off-by: David Kaplan <david.kaplan@amd.com>
> [separated out just cr_interception part from larger removal of
> INTERCEPT_CR0_WRITE, forward ported, tested]
> Signed-off-by: Joel Schopp <joel.schopp@amd.com>
> ---

(Existing nested handling is tangled, but looks like everything works,)

Reviewed-by: Radim Kr?má? <rkrcmar@redhat.com>

Thanks.
--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Marcelo Tosatti March 13, 2015, 2:47 p.m. UTC | #2
On Fri, Mar 06, 2015 at 02:44:35PM -0600, Joel Schopp wrote:
> From: David Kaplan <david.kaplan@amd.com>
> 
> Another patch in my war on emulate_on_interception() use as a svm exit handler.
> 
> These were pulled out of a larger patch at the suggestion of Radim Krcmar, see
> https://lkml.org/lkml/2015/2/25/559
> 
> Changes since v1:
> 	* fixed typo introduced after test, retested
> 
> Signed-off-by: David Kaplan <david.kaplan@amd.com>
> [separated out just cr_interception part from larger removal of
> INTERCEPT_CR0_WRITE, forward ported, tested]
> Signed-off-by: Joel Schopp <joel.schopp@amd.com>

Applied, thanks.

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

Patch

diff --git a/arch/x86/kvm/svm.c b/arch/x86/kvm/svm.c
index d319e0c..16ad05b 100644
--- a/arch/x86/kvm/svm.c
+++ b/arch/x86/kvm/svm.c
@@ -2940,7 +2940,10 @@  static int cr_interception(struct vcpu_svm *svm)
 		return emulate_on_interception(svm);
 
 	reg = svm->vmcb->control.exit_info_1 & SVM_EXITINFO_REG_MASK;
-	cr = svm->vmcb->control.exit_code - SVM_EXIT_READ_CR0;
+	if (svm->vmcb->control.exit_code == SVM_EXIT_CR0_SEL_WRITE)
+		cr = SVM_EXIT_WRITE_CR0 - SVM_EXIT_READ_CR0;
+	else
+		cr = svm->vmcb->control.exit_code - SVM_EXIT_READ_CR0;
 
 	err = 0;
 	if (cr >= 16) { /* mov to cr */
@@ -3325,7 +3328,7 @@  static int (*const svm_exit_handlers[])(struct vcpu_svm *svm) = {
 	[SVM_EXIT_READ_CR3]			= cr_interception,
 	[SVM_EXIT_READ_CR4]			= cr_interception,
 	[SVM_EXIT_READ_CR8]			= cr_interception,
-	[SVM_EXIT_CR0_SEL_WRITE]		= emulate_on_interception,
+	[SVM_EXIT_CR0_SEL_WRITE]		= cr_interception,
 	[SVM_EXIT_WRITE_CR0]			= cr_interception,
 	[SVM_EXIT_WRITE_CR3]			= cr_interception,
 	[SVM_EXIT_WRITE_CR4]			= cr_interception,