From 787091b9d5f614ae35ab8cfb7718f6ccb64f1f3c Mon Sep 17 00:00:00 2001 From: Marvin Liu Date: Thu, 20 Jan 2022 20:22:18 +0800 Subject: [PATCH] net/virtio: fix slots number when indirect feature on Virtio driver only occupies one slot for enqueuing chained mbufs when indirect feature is on. Required slots calculation should depend on indirect feature status at the end. Fixes: 0eaf7fc2fe8e ("net/virtio: separate AVX Rx/Tx") Cc: stable@dpdk.org Signed-off-by: Marvin Liu Reviewed-by: Maxime Coquelin --- drivers/net/virtio/virtio_rxtx_packed.h | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/drivers/net/virtio/virtio_rxtx_packed.h b/drivers/net/virtio/virtio_rxtx_packed.h index d5c259a1f6..536112983c 100644 --- a/drivers/net/virtio/virtio_rxtx_packed.h +++ b/drivers/net/virtio/virtio_rxtx_packed.h @@ -125,13 +125,12 @@ virtqueue_enqueue_single_packed_vec(struct virtnet_tx *txvq, * any_layout => number of segments * default => number of segments + 1 */ - slots = use_indirect ? 1 : (txm->nb_segs + !can_push); can_push = rte_mbuf_refcnt_read(txm) == 1 && RTE_MBUF_DIRECT(txm) && txm->nb_segs == 1 && rte_pktmbuf_headroom(txm) >= hdr_size; - slots = txm->nb_segs + !can_push; + slots = use_indirect ? 1 : (txm->nb_segs + !can_push); need = slots - vq->vq_free_cnt; /* Positive value indicates it need free vring descriptors */ -- 2.39.5