summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--arch/x86/kvm/vmx/vmx.c10
1 files changed, 5 insertions, 5 deletions
diff --git a/arch/x86/kvm/vmx/vmx.c b/arch/x86/kvm/vmx/vmx.c
index 4950bb20e06a..886930db77c5 100644
--- a/arch/x86/kvm/vmx/vmx.c
+++ b/arch/x86/kvm/vmx/vmx.c
@@ -1213,13 +1213,13 @@ static void vmx_vcpu_pi_load(struct kvm_vcpu *vcpu, int cpu)
1213 new.control) != old.control); 1213 new.control) != old.control);
1214 1214
1215 /* 1215 /*
1216 * Clear SN before reading the bitmap; this ensures that any 1216 * Clear SN before reading the bitmap. The VT-d firmware
1217 * interrupt that comes after the bitmap is read sets ON. The 1217 * writes the bitmap and reads SN atomically (5.2.3 in the
1218 * VT-d firmware * writes the bitmap and reads SN atomically (5.2.3 1218 * spec), so it doesn't really have a memory barrier that
1219 * in the spec), so it doesn't really have a memory barrier that 1219 * pairs with this, but we cannot do that and we need one.
1220 * pairs with this. However, we cannot do that and we need one.
1221 */ 1220 */
1222 smp_mb__after_atomic(); 1221 smp_mb__after_atomic();
1222
1223 if (!bitmap_empty((unsigned long *)pi_desc->pir, NR_VECTORS)) 1223 if (!bitmap_empty((unsigned long *)pi_desc->pir, NR_VECTORS))
1224 pi_set_on(pi_desc); 1224 pi_set_on(pi_desc);
1225} 1225}