On 10/04/20 17:35, Sean Christopherson wrote: > IMO, this should come at the very end of vmx_vcpu_run(). At a minimum, it > needs to be moved below the #MC handling and below > > if (vmx->fail || (vmx->exit_reason & VMX_EXIT_REASONS_FAILED_VMENTRY)) > return; Why? It cannot run in any of those cases, since the vmx->exit_reason won't match. > KVM more or less assumes vmx->idt_vectoring_info is always valid, and it's > not obvious that a generic fastpath call can safely run before > vmx_complete_interrupts(), e.g. the kvm_clear_interrupt_queue() call. Not KVM, rather vmx.c. You're right about a generic fastpath, but in this case kvm_irq_delivery_to_apic_fast is not touching VMX state; even if you have a self-IPI, the modification of vCPU state is only scheduled here and will happen later via either kvm_x86_ops.sync_pir_to_irr or KVM_REQ_EVENT. Paolo