KVM: x86 emulator: remove dup code of in/out instruction
authorWei Yongjun <yjwei@cn.fujitsu.com>
Fri, 6 Aug 2010 03:46:12 +0000 (11:46 +0800)
committerAvi Kivity <avi@redhat.com>
Sun, 24 Oct 2010 08:51:09 +0000 (10:51 +0200)
Signed-off-by: Wei Yongjun <yjwei@cn.fujitsu.com>
Signed-off-by: Avi Kivity <avi@redhat.com>
arch/x86/kvm/emulate.c

index 8e12e1b11ff879a46756175e2f138b7cdc68d5f3..cffe7c2819ed98aaf9ecf7cf08f9ff88c803952f 100644 (file)
@@ -2923,28 +2923,12 @@ special_insn:
                break;
        case 0x6c:              /* insb */
        case 0x6d:              /* insw/insd */
-               c->dst.bytes = min(c->dst.bytes, 4u);
-               if (!emulator_io_permited(ctxt, ops, c->regs[VCPU_REGS_RDX],
-                                         c->dst.bytes)) {
-                       emulate_gp(ctxt, 0);
-                       goto done;
-               }
-               if (!pio_in_emulated(ctxt, ops, c->dst.bytes,
-                                    c->regs[VCPU_REGS_RDX], &c->dst.val))
-                       goto done; /* IO is needed, skip writeback */
-               break;
+               c->src.val = c->regs[VCPU_REGS_RDX];
+               goto do_io_in;
        case 0x6e:              /* outsb */
        case 0x6f:              /* outsw/outsd */
-               c->src.bytes = min(c->src.bytes, 4u);
-               if (!emulator_io_permited(ctxt, ops, c->regs[VCPU_REGS_RDX],
-                                         c->src.bytes)) {
-                       emulate_gp(ctxt, 0);
-                       goto done;
-               }
-               ops->pio_out_emulated(c->src.bytes, c->regs[VCPU_REGS_RDX],
-                                     &c->src.val, 1, ctxt->vcpu);
-
-               c->dst.type = OP_NONE; /* nothing to writeback */
+               c->dst.val = c->regs[VCPU_REGS_RDX];
+               goto do_io_out;
                break;
        case 0x70 ... 0x7f: /* jcc (short) */
                if (test_cc(c->b, ctxt->eflags))