diff options
author | Sirshak Das <sirshak.das@arm.com> | 2018-10-12 09:38:27 -0500 |
---|---|---|
committer | Damjan Marion <dmarion@me.com> | 2018-11-05 12:31:43 +0000 |
commit | 5b718d5cf8bd8df82e37825e0cdb6f986d9a784a (patch) | |
tree | 28399875bc4fe0ead3d3c78d649b4bbdd798d78a /src/vnet/devices/virtio/vhost_user_input.c | |
parent | 86327be9751ad54cb24d16c161cacb001dc20772 (diff) |
Enable atomic swap and store macro with acquire and release ordering
Add atomic swap and store macro with acquire and release ordering
respectively. Variable in question is interupt_pending variable which
is used as guard variable by input nodes to process the device queue.
Atomic Swap is used with Acquire ordering as writes or reads following
this in program order should not be reordered before the swap.
Atomic Store is used with Release ordering, as post store the node is
added to pending list.
Change-Id: I1be49e91a15c58d0bf21ff5ba1bd37d5d7d12f7a
Original-patch-by: Damjan Marion <damarion@cisco.com>
Signed-off-by: Sirshak Das <sirshak.das@arm.com>
Reviewed-by: Honnappa Nagarahalli <honnappa.nagarahalli@arm.com>
Reviewed-by: Ola Liljedahl <ola.liljedahl@arm.com>
Diffstat (limited to 'src/vnet/devices/virtio/vhost_user_input.c')
-rw-r--r-- | src/vnet/devices/virtio/vhost_user_input.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/src/vnet/devices/virtio/vhost_user_input.c b/src/vnet/devices/virtio/vhost_user_input.c index 291d687ab6a..8e88695957b 100644 --- a/src/vnet/devices/virtio/vhost_user_input.c +++ b/src/vnet/devices/virtio/vhost_user_input.c @@ -641,8 +641,8 @@ VLIB_NODE_FN (vhost_user_input_node) (vlib_main_t * vm, vec_foreach (dq, rt->devices_and_queues) { - if (clib_smp_swap (&dq->interrupt_pending, 0) || - (node->state == VLIB_NODE_STATE_POLLING)) + if ((node->state == VLIB_NODE_STATE_POLLING) || + clib_atomic_swap_acq_n (&dq->interrupt_pending, 0)) { vui = pool_elt_at_index (vum->vhost_user_interfaces, dq->dev_instance); |