From: Avi Kivity <[email protected]>

Let it compute modrm_seg instead, and have the caller apply it.

Signed-off-by: Avi Kivity <[email protected]>

diff --git a/arch/x86/include/asm/kvm_emulate.h 
b/arch/x86/include/asm/kvm_emulate.h
index 3c7dd29..1aca0b3 100644
--- a/arch/x86/include/asm/kvm_emulate.h
+++ b/arch/x86/include/asm/kvm_emulate.h
@@ -193,6 +193,7 @@ struct decode_cache {
        u8 modrm_mod;
        u8 modrm_reg;
        u8 modrm_rm;
+       u8 modrm_seg;
        u8 use_modrm_ea;
        bool rip_relative;
        unsigned long modrm_ea;
diff --git a/arch/x86/kvm/emulate.c b/arch/x86/kvm/emulate.c
index acbf283..fea3980 100644
--- a/arch/x86/kvm/emulate.c
+++ b/arch/x86/kvm/emulate.c
@@ -593,6 +593,7 @@ static int decode_modrm(struct x86_emulate_ctxt *ctxt,
        c->modrm_rm |= (c->modrm & 0x07);
        c->modrm_ea = 0;
        c->use_modrm_ea = 1;
+       c->modrm_seg = VCPU_SREG_DS;
 
        if (c->modrm_mod == 3) {
                c->modrm_ptr = decode_register(c->modrm_rm,
@@ -649,8 +650,7 @@ static int decode_modrm(struct x86_emulate_ctxt *ctxt,
                }
                if (c->modrm_rm == 2 || c->modrm_rm == 3 ||
                    (c->modrm_rm == 6 && c->modrm_mod != 0))
-                       if (!c->has_seg_override)
-                               set_seg_override(c, VCPU_SREG_SS);
+                       c->modrm_seg = VCPU_SREG_SS;
                c->modrm_ea = (u16)c->modrm_ea;
        } else {
                /* 32/64-bit ModR/M decode. */
@@ -2406,9 +2406,11 @@ done_prefixes:
                c->op_bytes = 8;
 
        /* ModRM and SIB bytes. */
-       if (c->d & ModRM)
+       if (c->d & ModRM) {
                rc = decode_modrm(ctxt, ops);
-       else if (c->d & MemAbs)
+               if (!c->has_seg_override)
+                       set_seg_override(c, c->modrm_seg);
+       } else if (c->d & MemAbs)
                rc = decode_abs(ctxt, ops);
        if (rc != X86EMUL_CONTINUE)
                goto done;
--
To unsubscribe from this list: send the line "unsubscribe kvm-commits" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to