diff --git a/xen/arch/x86/hvm/vmx/intr.c b/xen/arch/x86/hvm/vmx/intr.c index 639a70563a..24e45052f9 100644 --- a/xen/arch/x86/hvm/vmx/intr.c +++ b/xen/arch/x86/hvm/vmx/intr.c @@ -312,12 +312,15 @@ void vmx_intr_assist(void) unsigned int i, n; /* - * Set eoi_exit_bitmap for periodic timer interrup to cause EOI-induced VM - * exit, then pending periodic time interrups have the chance to be injected - * for compensation + * intack.vector is the highest priority vector. So we set eoi_exit_bitmap + * for intack.vector - give a chance to post periodic time interrupts when + * periodic time interrupts become the highest one */ - if (pt_vector != -1) - vmx_set_eoi_exit_bitmap(v, pt_vector); + if ( pt_vector != -1 ) + { + ASSERT(intack.vector >= pt_vector); + vmx_set_eoi_exit_bitmap(v, intack.vector); + } /* we need update the RVI field */ __vmread(GUEST_INTR_STATUS, &status);