From: Wanpeng Li <wanpengli@xxxxxxxxxxx> Commit fdba608f15e2 (KVM: VMX: Wake vCPU when delivering posted IRQ even if vCPU == this vCPU) fixes wakeup event is missing when it is not from synchronous kvm context by dropping vcpu == running_vcpu checking completely. However, it will break the original goal to optimise timer fastpath, let's move the checking under vCPU is IN_GUEST_MODE to restore the performance. Suggested-by: Chao Gao <chao.gao@xxxxxxxxx> Signed-off-by: Wanpeng Li <wanpengli@xxxxxxxxxxx> --- arch/x86/kvm/vmx/vmx.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/arch/x86/kvm/vmx/vmx.c b/arch/x86/kvm/vmx/vmx.c index fe06b02..71e8afc 100644 --- a/arch/x86/kvm/vmx/vmx.c +++ b/arch/x86/kvm/vmx/vmx.c @@ -3932,7 +3932,8 @@ static inline void kvm_vcpu_trigger_posted_interrupt(struct kvm_vcpu *vcpu, * which has no effect is safe here. */ - apic->send_IPI_mask(get_cpu_mask(vcpu->cpu), pi_vec); + if (vcpu != kvm_get_running_vcpu()) + apic->send_IPI_mask(get_cpu_mask(vcpu->cpu), pi_vec); return; } #endif -- 2.7.4