> I recall our original code is virtio_wmb(). > Use store fence to ensure all updates to entries before updating the index. > Why do we need virtio_rmb() here and add virtio_wmb after > vq_update_avail_idx()?
Store fence is unnecessary, Intel CPU's are cache coherent, please read the virtio Linux ring header file for explanation. A full fence WMB is more expensive and causes CPU stall > > vq->vq_ring.avail->idx = vq->vq_avail_idx; > > } > > > > @@ -255,7 +264,7 @@ static inline void > > virtqueue_notify(struct virtqueue *vq) > > { > > /* > > - * Ensure updated avail->idx is visible to host. mb() necessary? > > + * Ensure updated avail->idx is visible to host. > > * For virtio on IA, the notificaiton is through io port operation > > * which is a serialization instruction itself. > > */ > > -- > > 1.8.4.2 >