git.droids-corp.org
/
dpdk.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
vhost: relax full barriers for desc flags
[dpdk.git]
/
lib
/
librte_vhost
/
virtio_net.c
diff --git
a/lib/librte_vhost/virtio_net.c
b/lib/librte_vhost/virtio_net.c
index
ae67237
..
b779034
100644
(file)
--- a/
lib/librte_vhost/virtio_net.c
+++ b/
lib/librte_vhost/virtio_net.c
@@
-222,8
+222,9
@@
vhost_flush_dequeue_shadow_packed(struct virtio_net *dev,
struct vring_used_elem_packed *used_elem = &vq->shadow_used_packed[0];
vq->desc_packed[vq->shadow_last_used_idx].id = used_elem->id;
struct vring_used_elem_packed *used_elem = &vq->shadow_used_packed[0];
vq->desc_packed[vq->shadow_last_used_idx].id = used_elem->id;
- rte_smp_wmb();
- vq->desc_packed[vq->shadow_last_used_idx].flags = used_elem->flags;
+ /* desc flags is the synchronization point for virtio packed vring */
+ __atomic_store_n(&vq->desc_packed[vq->shadow_last_used_idx].flags,
+ used_elem->flags, __ATOMIC_RELEASE);
vhost_log_cache_used_vring(dev, vq, vq->shadow_last_used_idx *
sizeof(struct vring_packed_desc),
vhost_log_cache_used_vring(dev, vq, vq->shadow_last_used_idx *
sizeof(struct vring_packed_desc),
@@
-1494,13
+1495,10
@@
virtio_dev_rx_async_submit_split(struct virtio_net *dev,
struct async_inflight_info *pkts_info = vq->async_pkts_info;
int n_pkts = 0;
struct async_inflight_info *pkts_info = vq->async_pkts_info;
int n_pkts = 0;
- avail_head = __atomic_load_n(&vq->avail->idx, __ATOMIC_ACQUIRE);
-
/*
/*
- * The ordering between avail index and
- * desc reads needs to be enforced.
+ * The ordering between avail index and desc reads need to be enforced.
*/
*/
-
rte_smp_rmb(
);
+
avail_head = __atomic_load_n(&vq->avail->idx, __ATOMIC_ACQUIRE
);
rte_prefetch0(&vq->avail->ring[vq->last_avail_idx & (vq->size - 1)]);
rte_prefetch0(&vq->avail->ring[vq->last_avail_idx & (vq->size - 1)]);