summaryrefslogtreecommitdiffstats
path: root/virt/kvm
diff options
context:
space:
mode:
authorMarcelo Tosatti <mtosatti@redhat.com>2013-04-16 04:30:13 +0200
committerGleb Natapov <gleb@redhat.com>2013-05-08 11:47:43 +0200
commit42bdf991f4cad9678ee2b98c5c2e9299a3f986ef (patch)
treeb0b91769efbecf318e968477cb1b7cc68d0defbd /virt/kvm
parentMerge branch 'akpm' (incoming from Andrew) (diff)
downloadlinux-42bdf991f4cad9678ee2b98c5c2e9299a3f986ef.tar.xz
linux-42bdf991f4cad9678ee2b98c5c2e9299a3f986ef.zip
KVM: x86: fix maintenance of guest/host xcr0 state
Emulation of xcr0 writes zero guest_xcr0_loaded variable so that subsequent VM-entry reloads CPU's xcr0 with guests xcr0 value. However, this is incorrect because guest_xcr0_loaded variable is read to decide whether to reload hosts xcr0. In case the vcpu thread is scheduled out after the guest_xcr0_loaded = 0 assignment, and scheduler decides to preload FPU: switch_to { __switch_to __math_state_restore restore_fpu_checking fpu_restore_checking if (use_xsave()) fpu_xrstor_checking xrstor64 with CPU's xcr0 == guests xcr0 Fix by properly restoring hosts xcr0 during emulation of xcr0 writes. Analyzed-by: Ulrich Obergfell <uobergfe@redhat.com> Signed-off-by: Marcelo Tosatti <mtosatti@redhat.com> Reviewed-by: Paolo Bonzini <pbonzini@redhat.com> Signed-off-by: Gleb Natapov <gleb@redhat.com>
Diffstat (limited to 'virt/kvm')
0 files changed, 0 insertions, 0 deletions