|
@@ -280,6 +280,7 @@ static void vmx_vcpu_load(struct kvm_vcpu *vcpu)
|
|
|
|
|
|
static void vmx_vcpu_put(struct kvm_vcpu *vcpu)
|
|
|
{
|
|
|
+ kvm_put_guest_fpu(vcpu);
|
|
|
put_cpu();
|
|
|
}
|
|
|
|
|
@@ -1847,10 +1848,8 @@ again:
|
|
|
if (vcpu->guest_debug.enabled)
|
|
|
kvm_guest_debug_pre(vcpu);
|
|
|
|
|
|
- if (vcpu->fpu_active) {
|
|
|
- fx_save(vcpu->host_fx_image);
|
|
|
- fx_restore(vcpu->guest_fx_image);
|
|
|
- }
|
|
|
+ kvm_load_guest_fpu(vcpu);
|
|
|
+
|
|
|
/*
|
|
|
* Loading guest fpu may have cleared host cr0.ts
|
|
|
*/
|
|
@@ -2012,11 +2011,6 @@ again:
|
|
|
}
|
|
|
#endif
|
|
|
|
|
|
- if (vcpu->fpu_active) {
|
|
|
- fx_save(vcpu->guest_fx_image);
|
|
|
- fx_restore(vcpu->host_fx_image);
|
|
|
- }
|
|
|
-
|
|
|
vcpu->interrupt_window_open = (vmcs_read32(GUEST_INTERRUPTIBILITY_INFO) & 3) == 0;
|
|
|
|
|
|
asm ("mov %0, %%ds; mov %0, %%es" : : "r"(__USER_DS));
|