There is no external function call or any barrier in the loop,
the used->idx would only be retrieved once.

Signed-off-by: Huawei Xie <huawei.xie at intel.com>
---
 drivers/net/virtio/virtio_ethdev.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/drivers/net/virtio/virtio_ethdev.c 
b/drivers/net/virtio/virtio_ethdev.c
index c3fb628..f6d6305 100644
--- a/drivers/net/virtio/virtio_ethdev.c
+++ b/drivers/net/virtio/virtio_ethdev.c
@@ -204,7 +204,8 @@ virtio_send_command(struct virtqueue *vq, struct 
virtio_pmd_ctrl *ctrl,
                usleep(100);
        }

-       while (vq->vq_used_cons_idx != vq->vq_ring.used->idx) {
+       while (vq->vq_used_cons_idx !=
+              *((volatile uint16_t *)(&vq->vq_ring.used->idx))) {
                uint32_t idx, desc_idx, used_idx;
                struct vring_used_elem *uep;

-- 
1.8.1.4

Reply via email to