aboutsummaryrefslogtreecommitdiffstats
path: root/src/vnet/devices/virtio/device.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/vnet/devices/virtio/device.c')
-rw-r--r--src/vnet/devices/virtio/device.c12
1 files changed, 3 insertions, 9 deletions
diff --git a/src/vnet/devices/virtio/device.c b/src/vnet/devices/virtio/device.c
index 5796b1d2150..3482336b2ad 100644
--- a/src/vnet/devices/virtio/device.c
+++ b/src/vnet/devices/virtio/device.c
@@ -926,11 +926,11 @@ virtio_interface_tx_split_gso_inline (vlib_main_t * vm,
if (n_left != n_vectors || n_buffers != n_buffers_left)
{
- CLIB_MEMORY_STORE_BARRIER ();
- vring->avail->idx = avail;
+ clib_atomic_store_seq_cst (&vring->avail->idx, avail);
vring->desc_next = next;
vring->desc_in_use = used;
- if ((vring->used->flags & VRING_USED_F_NO_NOTIFY) == 0)
+ if ((clib_atomic_load_seq_cst (&vring->used->flags) &
+ VRING_USED_F_NO_NOTIFY) == 0)
virtio_kick (vm, vring, vif);
}
@@ -997,12 +997,6 @@ VNET_DEVICE_CLASS_TX_FN (virtio_device_class) (vlib_main_t * vm,
clib_spinlock_lock_if_init (&vring->lockp);
- if (packed && (vring->device_event->flags != VRING_EVENT_F_DISABLE))
- virtio_kick (vm, vring, vif);
- else if ((vring->used->flags & VRING_USED_F_NO_NOTIFY) == 0 &&
- (vring->last_kick_avail_idx != vring->avail->idx))
- virtio_kick (vm, vring, vif);
-
if (vif->packet_coalesce)
{
n_vectors = n_left =