diff options
author | Marcelo Tosatti <[email protected]> | 2013-04-15 23:30:13 -0300 |
---|---|---|
committer | Gleb Natapov <[email protected]> | 2013-05-08 12:47:43 +0300 |
commit | 42bdf991f4cad9678ee2b98c5c2e9299a3f986ef (patch) | |
tree | b0b91769efbecf318e968477cb1b7cc68d0defbd /lib/string_helpers.c | |
parent | 5af43c24ca59a448c9312dd4a4a51d27ec3b9a73 (diff) |
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 <[email protected]>
Signed-off-by: Marcelo Tosatti <[email protected]>
Reviewed-by: Paolo Bonzini <[email protected]>
Signed-off-by: Gleb Natapov <[email protected]>
Diffstat (limited to 'lib/string_helpers.c')
0 files changed, 0 insertions, 0 deletions