X-Git-Url: http://v3vee.org/palacios/gitweb/gitweb.cgi?a=blobdiff_plain;f=palacios%2Fsrc%2Fpalacios%2Fvmm_intr.c;h=865a9fd27dcb17de955254a129b988108f264ef8;hb=6d57b915c82345c4dfb1897209f4778b4548bc31;hp=953df0ef97702d254a195c9a11a92e3ad5985c3b;hpb=4db5b116275d135e67c67b0781fc8c184e884001;p=palacios.git diff --git a/palacios/src/palacios/vmm_intr.c b/palacios/src/palacios/vmm_intr.c index 953df0e..865a9fd 100644 --- a/palacios/src/palacios/vmm_intr.c +++ b/palacios/src/palacios/vmm_intr.c @@ -22,6 +22,7 @@ #include #include +#include #ifndef DEBUG_INTERRUPTS #undef PrintDebug @@ -42,6 +43,7 @@ struct intr_controller { void v3_init_interrupt_state(struct guest_info * info) { info->intr_state.irq_pending = 0; + info->intr_state.irq_started = 0; info->intr_state.irq_vector = 0; INIT_LIST_HEAD(&(info->intr_state.controller_list)); @@ -175,7 +177,13 @@ int v3_raise_irq(struct guest_info * info, int irq) { int v3_intr_pending(struct guest_info * info) { struct v3_intr_state * intr_state = &(info->intr_state); struct intr_controller * ctrl = NULL; + struct rflags * flags = (struct rflags *)&(info->ctrl_regs.rflags); // PrintDebug("[intr_pending]\n"); + + // Check if the guest has interrupts enabled + if (flags->intr == 0) { + //return 0; + } list_for_each_entry(ctrl, &(intr_state->controller_list), ctrl_node) { if (ctrl->ctrl_ops->intr_pending(ctrl->priv_data) == 1) {