mirror of https://gitee.com/openkylin/linux.git
[PATCH] KVM: AMD SVM: Save and restore the floating point unit state
Fixes sf bug 1614113 (segfaults in nbench). Signed-off-by: Avi Kivity <avi@qumranet.com> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
This commit is contained in:
parent
0e859cacb0
commit
36241b8c7c
|
@ -575,6 +575,8 @@ static int svm_create_vcpu(struct kvm_vcpu *vcpu)
|
|||
memset(vcpu->svm->db_regs, 0, sizeof(vcpu->svm->db_regs));
|
||||
init_vmcb(vcpu->svm->vmcb);
|
||||
|
||||
fx_init(vcpu);
|
||||
|
||||
return 0;
|
||||
|
||||
out2:
|
||||
|
@ -1387,6 +1389,10 @@ static int svm_vcpu_run(struct kvm_vcpu *vcpu, struct kvm_run *kvm_run)
|
|||
save_db_regs(vcpu->svm->host_db_regs);
|
||||
load_db_regs(vcpu->svm->db_regs);
|
||||
}
|
||||
|
||||
fx_save(vcpu->host_fx_image);
|
||||
fx_restore(vcpu->guest_fx_image);
|
||||
|
||||
asm volatile (
|
||||
#ifdef CONFIG_X86_64
|
||||
"push %%rbx; push %%rcx; push %%rdx;"
|
||||
|
@ -1496,6 +1502,9 @@ static int svm_vcpu_run(struct kvm_vcpu *vcpu, struct kvm_run *kvm_run)
|
|||
#endif
|
||||
: "cc", "memory" );
|
||||
|
||||
fx_save(vcpu->guest_fx_image);
|
||||
fx_restore(vcpu->host_fx_image);
|
||||
|
||||
if ((vcpu->svm->vmcb->save.dr7 & 0xff))
|
||||
load_db_regs(vcpu->svm->host_db_regs);
|
||||
|
||||
|
|
Loading…
Reference in New Issue