KVM: x86 emulator: Clean up INT n/INTO/INT 3(CC/CD/CE)
authorTakuya Yoshikawa <yoshikawa.takuya@oss.ntt.co.jp>
Sun, 29 May 2011 13:02:55 +0000 (22:02 +0900)
committerAvi Kivity <avi@redhat.com>
Tue, 12 Jul 2011 10:16:04 +0000 (13:16 +0300)
Call emulate_int() directly to avoid spaghetti goto's.

Signed-off-by: Takuya Yoshikawa <yoshikawa.takuya@oss.ntt.co.jp>
Signed-off-by: Marcelo Tosatti <mtosatti@redhat.com>
arch/x86/kvm/emulate.c

index 5561680..d7df7ba 100644 (file)
@@ -3769,7 +3769,6 @@ int x86_emulate_insn(struct x86_emulate_ctxt *ctxt)
        struct decode_cache *c = &ctxt->decode;
        int rc = X86EMUL_CONTINUE;
        int saved_dst_type = c->dst.type;
-       int irq; /* Used for int 3, int, and into */
 
        c->mem_read.pos = 0;
 
@@ -3963,18 +3962,14 @@ special_insn:
                rc = emulate_load_segment(ctxt, VCPU_SREG_DS);
                break;
        case 0xcc:              /* int3 */
-               irq = 3;
-               goto do_interrupt;
+               rc = emulate_int(ctxt, 3);
+               break;
        case 0xcd:              /* int n */
-               irq = c->src.val;
-       do_interrupt:
-               rc = emulate_int(ctxt, irq);
+               rc = emulate_int(ctxt, c->src.val);
                break;
        case 0xce:              /* into */
-               if (ctxt->eflags & EFLG_OF) {
-                       irq = 4;
-                       goto do_interrupt;
-               }
+               if (ctxt->eflags & EFLG_OF)
+                       rc = emulate_int(ctxt, 4);
                break;
        case 0xd0 ... 0xd1:     /* Grp2 */
                rc = em_grp2(ctxt);