diff options
author | Mohsin Kazmi <sykazmi@cisco.com> | 2020-12-10 09:49:21 +0000 |
---|---|---|
committer | Beno�t Ganne <bganne@cisco.com> | 2021-02-08 16:45:34 +0000 |
commit | d8b7decc1d6e7b0e16b4e7558ea37683c4e8db8f (patch) | |
tree | a77ebf3d191f15a131b917d571d554ef525b3e31 /src/vnet/devices/virtio/device.c | |
parent | 0ebbbfc3c50361dbe8556f14f152613689448812 (diff) |
virtio: add atomic call for kicking
Type: fix
Signed-off-by: Mohsin Kazmi <sykazmi@cisco.com>
Change-Id: I41faa2ca249ff75e564a732af896e6b5d76bf665
Diffstat (limited to 'src/vnet/devices/virtio/device.c')
-rw-r--r-- | src/vnet/devices/virtio/device.c | 12 |
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 = |