summaryrefslogtreecommitdiffstats
path: root/arch/x86/kvm/svm.c
diff options
context:
space:
mode:
authorJan Kiszka <jan.kiszka@siemens.com>2014-06-29 21:55:53 +0200
committerPaolo Bonzini <pbonzini@redhat.com>2014-07-09 18:09:55 +0200
commit62baf44cad3bc6b37115cc21e4228fe53d4f3474 (patch)
tree7b7514f93242b5e0db8c44024dee67a93fd437de /arch/x86/kvm/svm.c
parent9f6226a762c7ae02f6a23a3d4fc552dafa57ea23 (diff)
downloadlinux-stable-62baf44cad3bc6b37115cc21e4228fe53d4f3474.tar.gz
linux-stable-62baf44cad3bc6b37115cc21e4228fe53d4f3474.tar.bz2
linux-stable-62baf44cad3bc6b37115cc21e4228fe53d4f3474.zip
KVM: nSVM: Do not report CLTS via SVM_EXIT_WRITE_CR0 to L1
CLTS only changes TS which is not monitored by selected CR0 interception. So skip any attempt to translate WRITE_CR0 to CR0_SEL_WRITE for this instruction. Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Diffstat (limited to 'arch/x86/kvm/svm.c')
-rw-r--r--arch/x86/kvm/svm.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/arch/x86/kvm/svm.c b/arch/x86/kvm/svm.c
index b5e994ad0135..c79766e1f1e0 100644
--- a/arch/x86/kvm/svm.c
+++ b/arch/x86/kvm/svm.c
@@ -4205,7 +4205,8 @@ static int svm_check_intercept(struct kvm_vcpu *vcpu,
if (info->intercept == x86_intercept_cr_write)
icpt_info.exit_code += info->modrm_reg;
- if (icpt_info.exit_code != SVM_EXIT_WRITE_CR0)
+ if (icpt_info.exit_code != SVM_EXIT_WRITE_CR0 ||
+ info->intercept == x86_intercept_clts)
break;
intercept = svm->nested.intercept;