net/virtio: fix incorrect slots number when indirect feature on
PATCH 1/1 net/virtio: fix incorrect 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.
drivers/net/virtio/virtio_rxtx_packed.h +1 -2
@@ -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 */
Signature · 1 line
2.17.1
Quoted 18 lines · Marvin Liu
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")Signed-off-by Marvin Liu <[email protected]>drivers/net/virtio/virtio_rxtx_packed.h +0
-1@@ -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);
drivers/net/virtio/virtio_rxtx_packed.h virtqueue_enqueue_single_packed_vec(struct virtnet_tx *txvq, · line 136
Quoted 10 lines
drivers/net/virtio/virtio_rxtx_packed.h +1
-1can_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 */
Thanks,
Maxime
Maxime Coquelin
AppliedQuoted 18 lines · Marvin Liu
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")Signed-off-by Marvin Liu <[email protected]>drivers/net/virtio/virtio_rxtx_packed.h +0
-1@@ -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);
drivers/net/virtio/virtio_rxtx_packed.h virtqueue_enqueue_single_packed_vec(struct virtnet_tx *txvq, · line 136
Quoted 10 lines
drivers/net/virtio/virtio_rxtx_packed.h +1
-1can_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 */
Applied to dpdk-next-virtio/main.
Thanks,
Maxime