> On 1 Oct 2019, at 2:02, Nadav Amit <nadav.amit@xxxxxxxxx> wrote: > >> On Sep 19, 2019, at 5:52 AM, Liran Alon <liran.alon@xxxxxxxxxx> wrote: >> >> Hi, >> >> This patch series aims to add a vmx test to verify the functionality >> introduced by KVM commit: >> 4b9852f4f389 ("KVM: x86: Fix INIT signal handling in various CPU states") >> >> The test verifies the following functionality: >> 1) An INIT signal received when CPU is in VMX operation >> is latched until it exits VMX operation. >> 2) If there is an INIT signal pending when CPU is in >> VMX non-root mode, it result in VMExit with (reason == 3). >> 3) Exit from VMX non-root mode on VMExit do not clear >> pending INIT signal in LAPIC. >> 4) When CPU exits VMX operation, pending INIT signal in >> LAPIC is processed. >> >> In order to write such a complex test, the vmx tests framework was >> enhanced to support using VMX in non BSP CPUs. This enhancement is >> implemented in patches 1-7. The test itself is implemented at patch 8. >> This enhancement to the vmx tests framework is a bit hackish, but >> I believe it's OK because this functionality is rarely required by >> other VMX tests. >> >> Regards, >> -Liran > > Hi Liran, > > I ran this test on bare-metal and it fails: > > Test suite: vmx_init_signal_test > PASS: INIT signal blocked when CPU in VMX operation > PASS: INIT signal during VMX non-root mode result in exit-reason VMX_INIT (3) > FAIL: INIT signal processed after exit VMX operation > SUMMARY: 8 tests, 1 unexpected failures > > I don’t have time to debug this issue, but let me know if you want some > print-outs. > > Nadav > Thanks Nadav for running this on bare-metal. This is very useful! It seems that when CPU exited on exit-reason VMX_INIT (3), the LAPIC INIT pending event was consumed instead of still being latched until CPU exits VMX operation. In my commit which this unit-test verifies 4b9852f4f389 ("KVM: x86: Fix INIT signal handling in various CPU states”), I have assumed that such exit-reason don’t consume the LAPIC INIT pending event. My assumption was based on the phrasing of Intel SDM section 25.2 OTHER CAUSES OF VM EXITS regarding INIT signals: "Such exits do not modify register state or clear pending events as they would outside of VMX operation." I thought Intel logic behind this is that if an INIT signal is sent to a CPU in VMX non-root mode, it would exit on exit-reason 3 which would allow hypervisor to decide to exit VMX operation in order to consume INIT signal. Nadav, can you attempt to just add a delay in init_signal_test_thread() between calling vmx_off() & setting init_signal_test_thread_continued to true? It may be that real hardware delays a bit when the INIT signal is released from LAPIC after exit VMX operation. Thanks, -Liran