|
@@ -7722,8 +7722,11 @@ int kvm_arch_vcpu_ioctl_get_fpu(struct kvm_vcpu *vcpu, struct kvm_fpu *fpu)
|
|
|
|
|
|
int kvm_arch_vcpu_ioctl_set_fpu(struct kvm_vcpu *vcpu, struct kvm_fpu *fpu)
|
|
|
{
|
|
|
- struct fxregs_state *fxsave =
|
|
|
- &vcpu->arch.guest_fpu.state.fxsave;
|
|
|
+ struct fxregs_state *fxsave;
|
|
|
+
|
|
|
+ vcpu_load(vcpu);
|
|
|
+
|
|
|
+ fxsave = &vcpu->arch.guest_fpu.state.fxsave;
|
|
|
|
|
|
memcpy(fxsave->st_space, fpu->fpr, 128);
|
|
|
fxsave->cwd = fpu->fcw;
|
|
@@ -7734,6 +7737,7 @@ int kvm_arch_vcpu_ioctl_set_fpu(struct kvm_vcpu *vcpu, struct kvm_fpu *fpu)
|
|
|
fxsave->rdp = fpu->last_dp;
|
|
|
memcpy(fxsave->xmm_space, fpu->xmm, sizeof fxsave->xmm_space);
|
|
|
|
|
|
+ vcpu_put(vcpu);
|
|
|
return 0;
|
|
|
}
|
|
|
|