X-Git-Url: http://v3vee.org/palacios/gitweb/gitweb.cgi?a=blobdiff_plain;f=palacios%2Fsrc%2Fpalacios%2Fsvm_handler.c;h=4d5ce3e46e2684ccc5ae606cf44e36b137290b4b;hb=0b276ccfe1caf79b6c2752bf26d0e9933e52fb32;hp=b89d28c0082abca8fa2b04b4689b1cfeb8df3750;hpb=266af4b5b19da7bee8e7445288c7c1cb3ee194c7;p=palacios.git diff --git a/palacios/src/palacios/svm_handler.c b/palacios/src/palacios/svm_handler.c index b89d28c..4d5ce3e 100644 --- a/palacios/src/palacios/svm_handler.c +++ b/palacios/src/palacios/svm_handler.c @@ -71,6 +71,11 @@ int v3_handle_svm_exit(struct guest_info * info) { exit_code = guest_ctrl->exit_code; + if ((info->intr_state.irq_pending) && (guest_ctrl->guest_ctrl.V_IRQ = 0)) { + // Interrupt was taken in the guest + v3_injecting_intr(info, info->intr_state.irq_vector, EXTERNAL_IRQ); + info->intr_state.irq_pending = 0; + } @@ -362,7 +367,9 @@ int v3_handle_svm_exit(struct guest_info * info) { guest_ctrl->guest_ctrl.V_INTR_VECTOR, (void *)(addr_t)info->rip); #endif - v3_injecting_intr(info, irq, EXTERNAL_IRQ); + info->intr_state.irq_pending = 1; + info->intr_state.irq_vector = irq; + break; }