Hi, This series aim to fix multiple issues in how KVM defines & handles pending vs. injected events. Both in non-nested and nested scenarios. The 1st patch removes wrong unnecessary code of clearing pending NMI/interrupt when injecting event in real-mode when coming from one of the VMCS event-injection methods (vmx_queue_exception(), vmx_inject_nmi(), vmx_inject_irq()). The 2nd patch renames interrupt.pending to interrupt.injected in order to better represent it's meaning and make it aligned with the meaning of "pending" & "injected" event for exceptions & NMIs. A "pending" event should represent an event that it's side-effect have not been applied yet. In contrast, an "injected" event should represent an event that it's side-effect have been applied. The 3rd patch fix some misleading comments in inject_pending_events() regarding why exception.pending blocks re-injection of NMI/Interrupt and why it is evaluated first among the pending events. The 4th patch fixes a critical bug in nVMX which cause L1 to lose an IPI when it is sent in the exact moment a destination L2 CPU exits to L0 due to event-delivery. The last patch removes now irrelevant code which sets KVM_REQ_EVENT on conditions when it is unnecessary. Changes from v1 to v2: * Move bail-out of inject_pending_event() on event re-injection to be after we evaluated pending exception. * Removed patch moving call to vmx_complete_nested_posted_interrupt() in vmx_check_nested_events() to start of function. Decided to handle that in another patch series. Changes from v2 to v3: * Removed patches related to user-mode management of {interrupt,exception}.{pending.injected}. Handling them requires delicate backwards-compatabile work. Therefore, decided to handle that in another patch series. * Modified patch renaming interrupt.pending to interrupt.injected to clarify issues with interrupt.pending usage in case !lapic_in_kernel(vcpu). Added relevant FIXME comments. Will be handled in future patches. Regards, -Liran Alon