On 11/11/19 13:16, Liran Alon wrote: > Intel SDM section 25.2 OTHER CAUSES OF VM EXITS specifies the following > on INIT signals: "Such exits do not modify register state or clear pending > events as they would outside of VMX operation." > > When commit 4b9852f4f389 ("KVM: x86: Fix INIT signal handling in various CPU states") > was applied, I interepted above Intel SDM statement such that > INIT_SIGNAL exit don’t consume the LAPIC INIT pending event. > > However, when Nadav Amit run matching kvm-unit-test on a bare-metal > machine, it turned out my interpetation was wrong. i.e. INIT_SIGNAL > exit does consume the LAPIC INIT pending event. > (See: https://www.spinics.net/lists/kvm/msg196757.html) > > Therefore, fix KVM code to behave as observed on bare-metal. > > Fixes: 4b9852f4f389 ("KVM: x86: Fix INIT signal handling in various CPU states") > Reported-by: Nadav Amit <nadav.amit@xxxxxxxxx> > Reviewed-by: Mihai Carabas <mihai.carabas@xxxxxxxxxx> > Reviewed-by: Joao Martins <joao.m.martins@xxxxxxxxxx> > Signed-off-by: Liran Alon <liran.alon@xxxxxxxxxx> > --- > arch/x86/kvm/vmx/nested.c | 1 + > 1 file changed, 1 insertion(+) > > diff --git a/arch/x86/kvm/vmx/nested.c b/arch/x86/kvm/vmx/nested.c > index 0e7c9301fe86..2c4336ac7576 100644 > --- a/arch/x86/kvm/vmx/nested.c > +++ b/arch/x86/kvm/vmx/nested.c > @@ -3461,6 +3461,7 @@ static int vmx_check_nested_events(struct kvm_vcpu *vcpu, bool external_intr) > test_bit(KVM_APIC_INIT, &apic->pending_events)) { > if (block_nested_events) > return -EBUSY; > + clear_bit(KVM_APIC_INIT, &apic->pending_events); > nested_vmx_vmexit(vcpu, EXIT_REASON_INIT_SIGNAL, 0, 0); > return 0; > } > Queued, thanks. Paolo