*/
                vmx->nested.pi_pending = true;
                kvm_make_request(KVM_REQ_EVENT, vcpu);
+
+               /*
+                * This pairs with the smp_mb_*() after setting vcpu->mode in
+                * vcpu_enter_guest() to guarantee the vCPU sees the event
+                * request if triggering a posted interrupt "fails" because
+                * vcpu->mode != IN_GUEST_MODE.  The extra barrier is needed as
+                * the smb_wmb() in kvm_make_request() only ensures everything
+                * done before making the request is visible when the request
+                * is visible, it doesn't ensure ordering between the store to
+                * vcpu->requests and the load from vcpu->mode.
+                */
+               smp_mb__after_atomic();
+
                /* the PIR and ON have been set by L1. */
                if (!kvm_vcpu_trigger_posted_interrupt(vcpu, true))
                        kvm_vcpu_kick(vcpu);
        if (pi_test_and_set_on(&vmx->pi_desc))
                return 0;
 
+       /*
+        * The implied barrier in pi_test_and_set_on() pairs with the smp_mb_*()
+        * after setting vcpu->mode in vcpu_enter_guest(), thus the vCPU is
+        * guaranteed to see PID.ON=1 and sync the PIR to IRR if triggering a
+        * posted interrupt "fails" because vcpu->mode != IN_GUEST_MODE.
+        */
        if (vcpu != kvm_get_running_vcpu() &&
            !kvm_vcpu_trigger_posted_interrupt(vcpu, false))
                kvm_vcpu_kick(vcpu);