diff options
Diffstat (limited to 'arch')
-rw-r--r-- | arch/x86/kvm/emulate.c | 11 |
1 files changed, 4 insertions, 7 deletions
diff --git a/arch/x86/kvm/emulate.c b/arch/x86/kvm/emulate.c index 5fe06a8fbebc..415f903facd3 100644 --- a/arch/x86/kvm/emulate.c +++ b/arch/x86/kvm/emulate.c | |||
@@ -2790,14 +2790,13 @@ int emulator_task_switch(struct x86_emulate_ctxt *ctxt, | |||
2790 | return (rc == X86EMUL_UNHANDLEABLE) ? EMULATION_FAILED : EMULATION_OK; | 2790 | return (rc == X86EMUL_UNHANDLEABLE) ? EMULATION_FAILED : EMULATION_OK; |
2791 | } | 2791 | } |
2792 | 2792 | ||
2793 | static void string_addr_inc(struct x86_emulate_ctxt *ctxt, unsigned seg, | 2793 | static void string_addr_inc(struct x86_emulate_ctxt *ctxt, int reg, |
2794 | int reg, struct operand *op) | 2794 | struct operand *op) |
2795 | { | 2795 | { |
2796 | int df = (ctxt->eflags & EFLG_DF) ? -1 : 1; | 2796 | int df = (ctxt->eflags & EFLG_DF) ? -1 : 1; |
2797 | 2797 | ||
2798 | register_address_increment(ctxt, reg_rmw(ctxt, reg), df * op->bytes); | 2798 | register_address_increment(ctxt, reg_rmw(ctxt, reg), df * op->bytes); |
2799 | op->addr.mem.ea = register_address(ctxt, reg_read(ctxt, reg)); | 2799 | op->addr.mem.ea = register_address(ctxt, reg_read(ctxt, reg)); |
2800 | op->addr.mem.seg = seg; | ||
2801 | } | 2800 | } |
2802 | 2801 | ||
2803 | static int em_das(struct x86_emulate_ctxt *ctxt) | 2802 | static int em_das(struct x86_emulate_ctxt *ctxt) |
@@ -4570,12 +4569,10 @@ writeback: | |||
4570 | ctxt->dst.type = saved_dst_type; | 4569 | ctxt->dst.type = saved_dst_type; |
4571 | 4570 | ||
4572 | if ((ctxt->d & SrcMask) == SrcSI) | 4571 | if ((ctxt->d & SrcMask) == SrcSI) |
4573 | string_addr_inc(ctxt, seg_override(ctxt), | 4572 | string_addr_inc(ctxt, VCPU_REGS_RSI, &ctxt->src); |
4574 | VCPU_REGS_RSI, &ctxt->src); | ||
4575 | 4573 | ||
4576 | if ((ctxt->d & DstMask) == DstDI) | 4574 | if ((ctxt->d & DstMask) == DstDI) |
4577 | string_addr_inc(ctxt, VCPU_SREG_ES, VCPU_REGS_RDI, | 4575 | string_addr_inc(ctxt, VCPU_REGS_RDI, &ctxt->dst); |
4578 | &ctxt->dst); | ||
4579 | 4576 | ||
4580 | if (ctxt->rep_prefix && (ctxt->d & String)) { | 4577 | if (ctxt->rep_prefix && (ctxt->d & String)) { |
4581 | struct read_cache *r = &ctxt->io_read; | 4578 | struct read_cache *r = &ctxt->io_read; |