aboutsummaryrefslogtreecommitdiffstats
path: root/arch/x86/kvm/x86.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/x86/kvm/x86.c')
-rw-r--r--arch/x86/kvm/x86.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
index 748b15d8e46..1de2ad7a004 100644
--- a/arch/x86/kvm/x86.c
+++ b/arch/x86/kvm/x86.c
@@ -1509,8 +1509,8 @@ void kvm_arch_vcpu_load(struct kvm_vcpu *vcpu, int cpu)
1509 1509
1510void kvm_arch_vcpu_put(struct kvm_vcpu *vcpu) 1510void kvm_arch_vcpu_put(struct kvm_vcpu *vcpu)
1511{ 1511{
1512 kvm_x86_ops->vcpu_put(vcpu);
1513 kvm_put_guest_fpu(vcpu); 1512 kvm_put_guest_fpu(vcpu);
1513 kvm_x86_ops->vcpu_put(vcpu);
1514} 1514}
1515 1515
1516static int is_efer_nx(void) 1516static int is_efer_nx(void)
@@ -4006,6 +4006,10 @@ static int vcpu_enter_guest(struct kvm_vcpu *vcpu)
4006 r = 0; 4006 r = 0;
4007 goto out; 4007 goto out;
4008 } 4008 }
4009 if (test_and_clear_bit(KVM_REQ_DEACTIVATE_FPU, &vcpu->requests)) {
4010 vcpu->fpu_active = 0;
4011 kvm_x86_ops->fpu_deactivate(vcpu);
4012 }
4009 } 4013 }
4010 4014
4011 preempt_disable(); 4015 preempt_disable();
@@ -5075,6 +5079,7 @@ void kvm_put_guest_fpu(struct kvm_vcpu *vcpu)
5075 kvm_fx_save(&vcpu->arch.guest_fx_image); 5079 kvm_fx_save(&vcpu->arch.guest_fx_image);
5076 kvm_fx_restore(&vcpu->arch.host_fx_image); 5080 kvm_fx_restore(&vcpu->arch.host_fx_image);
5077 ++vcpu->stat.fpu_reload; 5081 ++vcpu->stat.fpu_reload;
5082 set_bit(KVM_REQ_DEACTIVATE_FPU, &vcpu->requests);
5078} 5083}
5079EXPORT_SYMBOL_GPL(kvm_put_guest_fpu); 5084EXPORT_SYMBOL_GPL(kvm_put_guest_fpu);
5080 5085