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