|
@@ -7060,7 +7060,9 @@ void kvm_put_guest_fpu(struct kvm_vcpu *vcpu)
|
|
|
fpu_save_init(&vcpu->arch.guest_fpu);
|
|
|
__kernel_fpu_end();
|
|
|
++vcpu->stat.fpu_reload;
|
|
|
- kvm_make_request(KVM_REQ_DEACTIVATE_FPU, vcpu);
|
|
|
+ if (!vcpu->arch.eager_fpu)
|
|
|
+ kvm_make_request(KVM_REQ_DEACTIVATE_FPU, vcpu);
|
|
|
+
|
|
|
trace_kvm_fpu(0);
|
|
|
}
|
|
|
|
|
@@ -7076,11 +7078,21 @@ void kvm_arch_vcpu_free(struct kvm_vcpu *vcpu)
|
|
|
struct kvm_vcpu *kvm_arch_vcpu_create(struct kvm *kvm,
|
|
|
unsigned int id)
|
|
|
{
|
|
|
+ struct kvm_vcpu *vcpu;
|
|
|
+
|
|
|
if (check_tsc_unstable() && atomic_read(&kvm->online_vcpus) != 0)
|
|
|
printk_once(KERN_WARNING
|
|
|
"kvm: SMP vm created on host with unstable TSC; "
|
|
|
"guest TSC will not be reliable\n");
|
|
|
- return kvm_x86_ops->vcpu_create(kvm, id);
|
|
|
+
|
|
|
+ vcpu = kvm_x86_ops->vcpu_create(kvm, id);
|
|
|
+
|
|
|
+ /*
|
|
|
+ * Activate fpu unconditionally in case the guest needs eager FPU. It will be
|
|
|
+ * deactivated soon if it doesn't.
|
|
|
+ */
|
|
|
+ kvm_x86_ops->fpu_activate(vcpu);
|
|
|
+ return vcpu;
|
|
|
}
|
|
|
|
|
|
int kvm_arch_vcpu_setup(struct kvm_vcpu *vcpu)
|