>From a589074281cc22a30ed75a5bccba60e83d2312a6 Mon Sep 17 00:00:00 2001 From: Quan Xu Date: Sat, 18 Feb 2017 09:27:37 +0800 Subject: [PATCH] x86/apicv: enhance posted-interrupt processing If guest is already in non-root mode, an posted interrupt will be directly delivered to guest (leaving softirq being set w/o actually incurring a VM-Exit - breaking desired softirq behavior). Then further posted interrupts will skip the IPI, stay in PIR and not noted until another VM-Exit happens. Remove the softirq set. Actually since it's an optimization for less IPIs, check softirq_pending(cpu) directly instead of sticking to one bit only. Signed-off-by: Quan Xu --- xen/arch/x86/hvm/vmx/vmx.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/xen/arch/x86/hvm/vmx/vmx.c b/xen/arch/x86/hvm/vmx/vmx.c index 61925cf..3887c32 100644 --- a/xen/arch/x86/hvm/vmx/vmx.c +++ b/xen/arch/x86/hvm/vmx/vmx.c @@ -1846,8 +1846,7 @@ static void __vmx_deliver_posted_interrupt(struct vcpu *v) { unsigned int cpu = v->processor; - if ( !test_and_set_bit(VCPU_KICK_SOFTIRQ, &softirq_pending(cpu)) - && (cpu != smp_processor_id()) ) + if ( !softirq_pending(cpu) && (cpu != smp_processor_id()) ) send_IPI_mask(cpumask_of(cpu), posted_intr_vector); } } -- 1.8.3.1