Message ID | 20150306204435.18348.72139.stgit@joelvmguard2.amd.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
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
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 --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,