net/virtio: add missing read barrier for packed dequeue
authorIlya Maximets <i.maximets@samsung.com>
Thu, 24 Jan 2019 16:59:02 +0000 (19:59 +0300)
committerFerruh Yigit <ferruh.yigit@intel.com>
Fri, 8 Feb 2019 18:27:07 +0000 (19:27 +0100)
Read barrier is required between reading the flags (desc_is_used)
and the content of descriptor to ensure the ordering.
Otherwise, speculative read of desc.id could be reordered with
reading of the desc.flags.

Fixes: a76290c8f1cf ("net/virtio: implement Rx path for packed queues")
Cc: stable@dpdk.org
Signed-off-by: Ilya Maximets <i.maximets@samsung.com>
Reviewed-by: Jens Freimann <jfreimann@redhat.com>
Reviewed-by: Maxime Coquelin <maxime.coquelin@redhat.com>
drivers/net/virtio/virtio_rxtx.c

index 5ffed6a..4c701c5 100644 (file)
@@ -124,6 +124,7 @@ virtqueue_dequeue_burst_rx_packed(struct virtqueue *vq,
                used_idx = vq->vq_used_cons_idx;
                if (!desc_is_used(&desc[used_idx], vq))
                        return i;
+               virtio_rmb(vq->hw->weak_barriers);
                len[i] = desc[used_idx].len;
                id = desc[used_idx].id;
                cookie = (struct rte_mbuf *)vq->vq_descx[id].cookie;