@@ -1584,6 +1584,12 @@ static void interrupt_main(void)
for (loops = 0; loops < 10000000 && !timer_fired; loops++)
asm volatile ("nop");
report("running a guest with interrupt acknowledgement set", timer_fired);
+
+ apic_write(APIC_TMICT, 0);
+ irq_enable();
+ timer_fired = false;
+ vmcall();
+ report("Inject an event to a halted guest", timer_fired);
}
static int interrupt_exit_handler(void)
@@ -1615,6 +1621,12 @@ static int interrupt_exit_handler(void)
case 6:
vmcs_write(GUEST_ACTV_STATE, ACTV_HLT);
break;
+
+ case 8:
+ vmcs_write(GUEST_ACTV_STATE, ACTV_HLT);
+ vmcs_write(ENT_INTR_INFO,
+ TIMER_VECTOR | INTR_INFO_VALID_MASK);
+ break;
}
vmx_inc_test_stage();
vmcs_write(GUEST_RIP, guest_rip + insn_len);
This patch leverages existing "interrupt" tests. What the patch does is L1 puts L2 in halt state and injects an event to L2. Then check a flag to identify whether event injection succeeds or not. Cc: Liran Alon <liran.alon@oracle.com> Signed-off-by: Chao Gao <chao.gao@intel.com> --- x86/vmx_tests.c | 12 ++++++++++++ 1 file changed, 12 insertions(+)