From: Peter Dinda Date: Wed, 19 May 2010 16:19:03 +0000 (-0500) Subject: Merge branch 'Release-1.2' of ssh://palacios@newskysaw.cs.northwestern.edu//home... X-Git-Url: http://v3vee.org/palacios/gitweb/gitweb.cgi?p=palacios.git;a=commitdiff_plain;h=refs%2Fheads%2FRelease-1.2;hp=-c Merge branch 'Release-1.2' of ssh://palacios@newskysaw.cs.northwestern.edu//home/palacios/palacios into Release-1.2 --- de6084de2145f3889a16d8498e5e7d44e96e0162 diff --combined palacios/src/palacios/svm.c index 9f72514,4b01c8b..ca8fc18 --- a/palacios/src/palacios/svm.c +++ b/palacios/src/palacios/svm.c @@@ -309,7 -309,7 +309,7 @@@ static int update_irq_exit_state(struc // Interrupt was taken fully vectored info->intr_state.irq_started = 0; - } else { + } else if ((info->intr_state.irq_started == 1) && (guest_ctrl->exit_int_info.valid == 1)) { #ifdef CONFIG_DEBUG_INTERRUPTS PrintDebug("EXIT INT INFO is set (vec=%d)\n", guest_ctrl->exit_int_info.vector); #endif @@@ -322,6 -322,12 +322,12 @@@ static int update_irq_entry_state(struct guest_info * info) { vmcb_ctrl_t * guest_ctrl = GET_VMCB_CTRL_AREA((vmcb_t*)(info->vmm_data)); + + if (info->intr_state.irq_pending == 0) { + guest_ctrl->guest_ctrl.V_IRQ = 0; + guest_ctrl->guest_ctrl.V_INTR_VECTOR = 0; + } + if (v3_excp_pending(info)) { uint_t excp = v3_get_excp_number(info); @@@ -419,8 -425,6 +425,8 @@@ int v3_svm_enter(struct guest_info * in // disable global interrupts for vm state transition v3_clgi(); + /// checkpoint + // Synchronize the guest state to the VMCB guest_state->cr0 = info->ctrl_regs.cr0; guest_state->cr2 = info->ctrl_regs.cr2;