KVM: SVM: set NM intercept when enabling CR0.TS in the guest
authorJoerg Roedel <joerg.roedel@amd.com>
Tue, 29 Jan 2008 12:01:27 +0000 (13:01 +0100)
committerAvi Kivity <avi@qumranet.com>
Mon, 3 Mar 2008 09:20:21 +0000 (11:20 +0200)
Explicitly enable the NM intercept in svm_set_cr0 if we enable TS in the guest
copy of CR0 for lazy FPU switching. This fixes guest SMP with Linux under SVM.
Without that patch Linux deadlocks or panics right after trying to boot the
other CPUs.

Signed-off-by: Joerg Roedel <joerg.roedel@amd.com>
Signed-off-by: Markus Rechberger <markus.rechberger@amd.com>
Signed-off-by: Avi Kivity <avi@qumranet.com>
arch/x86/kvm/svm.c

index 511628916c4b0555020906cc570f7b1b1a0f0073..d71daabbb51b01c1d165781777edd32aa492f45d 100644 (file)
@@ -792,8 +792,10 @@ static void svm_set_cr0(struct kvm_vcpu *vcpu, unsigned long cr0)
        vcpu->arch.cr0 = cr0;
        cr0 |= X86_CR0_PG | X86_CR0_WP;
        cr0 &= ~(X86_CR0_CD | X86_CR0_NW);
-       if (!vcpu->fpu_active)
+       if (!vcpu->fpu_active) {
+               svm->vmcb->control.intercept_exceptions |= (1 << NM_VECTOR);
                cr0 |= X86_CR0_TS;
+       }
        svm->vmcb->save.cr0 = cr0;
 }