|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH v2 3/4] VMX: Assign the right value to 'NDST' field in a concern case
Normally, in vmx_cpu_block() 'NDST' filed should have the same
value with 'dest' or 'MASK_INSR(dest, PI_xAPIC_NDST_MASK)' depending
on whether x2apic is enabled. However, in the following scenario,
'NDST' has different value:
'vcpu_block' hook gets assigned in vmx_pi_hooks_assign(), but all
other three PI hooks have not been assigned or not been excuted yet.
And during this interval, we are running in vmx_vcpu_block(), then
'NDST' may have different value.
This patch fix this concern case.
Signed-off-by: Feng Wu <feng.wu@xxxxxxxxx>
---
xen/arch/x86/hvm/vmx/vmx.c | 15 +++++++++++++--
1 file changed, 13 insertions(+), 2 deletions(-)
diff --git a/xen/arch/x86/hvm/vmx/vmx.c b/xen/arch/x86/hvm/vmx/vmx.c
index b01128a..662b38d 100644
--- a/xen/arch/x86/hvm/vmx/vmx.c
+++ b/xen/arch/x86/hvm/vmx/vmx.c
@@ -146,8 +146,19 @@ static void vmx_vcpu_block(struct vcpu *v)
dest = cpu_physical_id(v->processor);
- ASSERT(pi_desc->ndst ==
- (x2apic_enabled ? dest : MASK_INSR(dest, PI_xAPIC_NDST_MASK)));
+ /*
+ * Normally, 'NDST' filed should have the same value with dest or
+ * MASK_INSR(dest, PI_xAPIC_NDST_MASK) depending on whether x2apic is
+ * enabled. However, in the following scenario, 'NDST' has different
+ * value:
+ *
+ * 'vcpu_block' hook gets assigned in vmx_pi_hooks_assign(), but all
+ * other three PI hooks have not been assigned or not been excuted yet.
+ * And during this interval, we get here in this function, then 'NDST'
+ * may have different value.
+ */
+ write_atomic(&pi_desc->ndst,
+ x2apic_enabled ? dest : MASK_INSR(dest, PI_xAPIC_NDST_MASK));
write_atomic(&pi_desc->nv, pi_wakeup_vector);
}
--
2.1.0
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |