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@xxxxxxxxxx> Signed-off-by: Chao Gao <chao.gao@xxxxxxxxx> --- x86/vmx_tests.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/x86/vmx_tests.c b/x86/vmx_tests.c index 0c3b5a7..3c46d3a 100644 --- a/x86/vmx_tests.c +++ b/x86/vmx_tests.c @@ -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); -- 1.9.1