• Radim Krčmář's avatar
    KVM: x86: emulate FXSAVE and FXRSTOR · 283c95d0
    Radim Krčmář authored
    Internal errors were reported on 16 bit fxsave and fxrstor with ipxe.
    Old Intels don't have unrestricted_guest, so we have to emulate them.
    
    The patch takes advantage of the hardware implementation.
    
    AMD and Intel differ in saving and restoring other fields in first 32
    bytes.  A test wrote 0xff to the fxsave area, 0 to upper bits of MCSXR
    in the fxsave area, executed fxrstor, rewrote the fxsave area to 0xee,
    and executed fxsave:
    
      Intel (Nehalem):
        7f 1f 7f 7f ff 00 ff 07 ff ff ff ff ff ff 00 00
        ff ff ff ff ff ff 00 00 ff ff 00 00 ff ff 00 00
      Intel (Haswell -- deprecated FPU CS and FPU DS):
        7f 1f 7f 7f ff 00 ff 07 ff ff ff ff 00 00 00 00
        ff ff ff ff 00 00 00 00 ff ff 00 00 ff ff 00 00
      AMD (Opteron 2300-series):
        7f 1f 7f 7f ff 00 ee ee ee ee ee ee ee ee ee ee
        ee ee ee ee ee ee ee ee ff ff 00 00 ff ff 02 00
    
    fxsave/fxrstor will only be emulated on early Intels, so KVM can't do
    much to improve the situation.
    Signed-off-by: default avatarRadim Krčmář <rkrcmar@redhat.com>
    283c95d0
emulate.c 146 KB