NO_NOTIFY is an optimization to reduce the number of exits,
but using it requires careful synchronization with host,
forcing read/write ordering for the CPU. Otherwise we
risk not kicking a host when it is waiting for more buffers,
resulting in a deadlock.
Let's just always kick, it's way simpler.
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
Cc: Gleb Natapov <gleb@redhat.com>
{
struct vring *vr = &vq->vring;
struct vring_avail *avail = GET_FLATPTR(vr->avail);
- struct vring_used *used = GET_FLATPTR(vq->vring.used);
wmb();
SET_FLATPTR(avail->idx, GET_FLATPTR(avail->idx) + num_added);
mb();
- if (!(GET_FLATPTR(used->flags) & VRING_USED_F_NO_NOTIFY))
- vp_notify(ioaddr, GET_FLATPTR(vq->queue_index));
+ vp_notify(ioaddr, GET_FLATPTR(vq->queue_index));
}