----- chao.gao@xxxxxxxxx wrote: > 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); I would specify interrupt-type explicitly rather than implicitly. Meaning passing here: (TIMER_VECTOR | (VMX_INTR_TYPE_EXT_INTR << INTR_INFO_INTR_TYPE_SHIFT) | INTR_INFO_VALID_MASK) > + break; > } > vmx_inc_test_stage(); > vmcs_write(GUEST_RIP, guest_rip + insn_len); > -- > 1.9.1 Besides small comment above, looks good to me. Reviewed-by: Liran Alon <liran.alon@xxxxxxxxxx>