]> Pileus Git - ~andy/linux/blobdiff - drivers/kvm/x86_emulate.c
KVM: x86 emulator: Use emulator_write_emulated and not emulator_write_std
[~andy/linux] / drivers / kvm / x86_emulate.c
index 33b181451557ad926df9c09a4a401c7fc71ae933..bd46de6bf891e795ce94835893dc9b82b063ff97 100644 (file)
@@ -448,8 +448,7 @@ struct operand {
 
 #define JMP_REL(rel)                                                   \
        do {                                                            \
-               _eip += (int)(rel);                                     \
-               _eip = ((op_bytes == 2) ? (uint16_t)_eip : (uint32_t)_eip); \
+               register_address_increment(_eip, rel);                  \
        } while (0)
 
 /*
@@ -1147,7 +1146,7 @@ done_prefixes:
                        }
                        register_address_increment(_regs[VCPU_REGS_RSP],
                                                   -dst.bytes);
-                       if ((rc = ops->write_std(
+                       if ((rc = ops->write_emulated(
                                     register_address(ctxt->ss_base,
                                                      _regs[VCPU_REGS_RSP]),
                                     &dst.val, dst.bytes, ctxt->vcpu)) != 0)
@@ -1359,6 +1358,7 @@ special_insn:
                }
                src.val = (unsigned long) _eip;
                JMP_REL(rel);
+               op_bytes = ad_bytes;
                goto push;
        }
        case 0xe9: /* jmp rel */