From 8410c369b452439b75c27b76589b9ca84f3347ab Mon Sep 17 00:00:00 2001 From: Marvin Liu Date: Thu, 15 Oct 2020 13:46:07 +0800 Subject: [PATCH] net/virtio: fix indirect desc length When transmitting indirect descriptors, first desc will store net_hdr and following descs will be mapped to mbuf segments. Total desc number will be seg_num plus one. Meaning of variable needed is the number of used descs in packed ring. This value will always be two for indirect desc. Now use mbuf segments number for calculating correct desc length. Fixes: b473061b0e1d ("net/virtio: fix indirect descriptors in packed datapaths") Cc: stable@dpdk.org Signed-off-by: Marvin Liu Reviewed-by: Maxime Coquelin --- drivers/net/virtio/virtqueue.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/drivers/net/virtio/virtqueue.h b/drivers/net/virtio/virtqueue.h index 8c8ab98892..42c4c9882f 100644 --- a/drivers/net/virtio/virtqueue.h +++ b/drivers/net/virtio/virtqueue.h @@ -698,6 +698,7 @@ virtqueue_enqueue_xmit_packed(struct virtnet_tx *txvq, struct rte_mbuf *cookie, struct virtio_net_hdr *hdr; uint16_t prev; bool prepend_header = false; + uint16_t seg_num = cookie->nb_segs; id = in_order ? vq->vq_avail_idx : vq->vq_desc_head_idx; @@ -732,7 +733,7 @@ virtqueue_enqueue_xmit_packed(struct virtnet_tx *txvq, struct rte_mbuf *cookie, */ start_dp[idx].addr = txvq->virtio_net_hdr_mem + RTE_PTR_DIFF(&txr[idx].tx_packed_indir, txr); - start_dp[idx].len = (needed + 1) * + start_dp[idx].len = (seg_num + 1) * sizeof(struct vring_packed_desc); /* reset flags for indirect desc */ head_flags = VRING_DESC_F_INDIRECT; -- 2.20.1