summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: e1513f9)
raw | patch | inline | side by side (parent: e1513f9)
author | Wendy Liang <jliang@xilinx.com> | |
Wed, 1 Jun 2016 23:29:52 +0000 (16:29 -0700) | ||
committer | Wendy Liang <jliang@xilinx.com> | |
Thu, 13 Oct 2016 05:01:42 +0000 (22:01 -0700) |
Use atomic_thread_fence() to setup memory fence.
Signed-off-by: Wendy Liang <jliang@xilinx.com>
Signed-off-by: Wendy Liang <jliang@xilinx.com>
lib/virtio/virtqueue.c | patch | blob | history |
diff --git a/lib/virtio/virtqueue.c b/lib/virtio/virtqueue.c
index ca46682a740071e4044c5f71910175dc603a428e..c7bd4dde3df8986a4becfc5a633bf5b26d7e47ae 100644 (file)
--- a/lib/virtio/virtqueue.c
+++ b/lib/virtio/virtqueue.c
#include <string.h>
#include "openamp/virtqueue.h"
+#include "metal/atomic.h"
/* Prototype for internal functions. */
static void vq_ring_init(struct virtqueue *);
used_idx = vq->vq_used_cons_idx++ & (vq->vq_nentries - 1);
uep = &vq->vq_ring.used->ring[used_idx];
- env_rmb();
+ atomic_thread_fence(memory_order_seq_cst);
desc_idx = (uint16_t) uep->id;
if (len != VQ_NULL)
@@ -346,7 +347,7 @@ void *virtqueue_get_available_buffer(struct virtqueue *vq, uint16_t * avail_idx,
head_idx = vq->vq_available_idx++ & (vq->vq_nentries - 1);
*avail_idx = vq->vq_ring.avail->ring[head_idx];
- env_rmb();
+ atomic_thread_fence(memory_order_seq_cst);
buffer = env_map_patova(vq->vq_ring.desc[*avail_idx].addr);
*len = vq->vq_ring.desc[*avail_idx].len;
used_desc->id = head_idx;
used_desc->len = len;
- env_wmb();
+ atomic_thread_fence(memory_order_seq_cst);
vq->vq_ring.used->idx++;
VQUEUE_BUSY(vq);
/* Ensure updated avail->idx is visible to host. */
- env_mb();
+ atomic_thread_fence(memory_order_seq_cst);
if (vq_ring_must_notify_host(vq))
vq_ring_notify_host(vq);
avail_idx = vq->vq_ring.avail->idx & (vq->vq_nentries - 1);
vq->vq_ring.avail->ring[avail_idx] = desc_idx;
- env_wmb();
+ atomic_thread_fence(memory_order_seq_cst);
vq->vq_ring.avail->idx++;
vq->vq_ring.avail->flags &= ~VRING_AVAIL_F_NO_INTERRUPT;
}
- env_mb();
+ atomic_thread_fence(memory_order_seq_cst);
/*
* Enough items may have already been consumed to meet our threshold