|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH v2] x86/apicv: enhance posted-interrupt processing
>From 6b5f702927d832513d270a2bca4634b271f4df47 Mon Sep 17 00:00:00 2001
From: Quan Xu <xuquan8@xxxxxxxxxx>
Date: Tue, 28 Feb 2017 02:48:29 +0800
Subject: [PATCH v2] 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 without
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.
When target vCPU is in non-root mode and running on remote CPU,
posted way is triggered to inject interrupt without VM-Exit.
Otherwise, set VCPU_KICK_SOFTIRQ bit to inject interrupt until
another VM-Entry as a best effort.
Signed-off-by: Quan Xu <xuquan8@xxxxxxxxxx>
---
xen/arch/x86/hvm/vmx/vmx.c | 15 ++++++---------
1 file changed, 6 insertions(+), 9 deletions(-)
diff --git a/xen/arch/x86/hvm/vmx/vmx.c b/xen/arch/x86/hvm/vmx/vmx.c
index 61925cf..ecdfbbb 100644
--- a/xen/arch/x86/hvm/vmx/vmx.c
+++ b/xen/arch/x86/hvm/vmx/vmx.c
@@ -1839,17 +1839,14 @@ static void vmx_process_isr(int isr, struct vcpu *v)
static void __vmx_deliver_posted_interrupt(struct vcpu *v)
{
- bool_t running = v->is_running;
+ unsigned int cpu = v->processor;
vcpu_unblock(v);
- if ( running && (in_irq() || (v != current)) )
- {
- unsigned int cpu = v->processor;
-
- if ( !test_and_set_bit(VCPU_KICK_SOFTIRQ, &softirq_pending(cpu))
- && (cpu != smp_processor_id()) )
- send_IPI_mask(cpumask_of(cpu), posted_intr_vector);
- }
+ if ( v->is_running && (in_irq() || (v != current)) &&
+ (cpu != smp_processor_id()) )
+ send_IPI_mask(cpumask_of(cpu), posted_intr_vector);
+ else
+ set_bit(VCPU_KICK_SOFTIRQ, &softirq_pending(cpu));
}
static void vmx_deliver_posted_intr(struct vcpu *v, u8 vector)
--
1.8.3.1
Attachment:
0001-x86-apicv-enhance-posted-interrupt-processing.patch _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx https://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |