net/virtio: fix reporting of mbufs allocated on RxQ setup
Checks
Commit Message
From: Ivan Ilchenko <ivan.ilchenko@oktetlabs.ru>
Rx queue setup finish function may report wrong number of
allocated mbufs in case of in-order feature. Fix the
function to not ignore allocation error and count only
successfully allocated number of buffers.
Fixes: e5f456a98d3 ("net/virtio: support in-order Rx and Tx")
Cc: stable@dpdk.org
Signed-off-by: Ivan Ilchenko <ivan.ilchenko@oktetlabs.ru>
Signed-off-by: Andrew Rybchenko <andrew.rybchenko@oktetlabs.ru>
---
drivers/net/virtio/virtio_rxtx.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
Comments
On 8/20/21 2:47 PM, Andrew Rybchenko wrote:
> From: Ivan Ilchenko <ivan.ilchenko@oktetlabs.ru>
>
> Rx queue setup finish function may report wrong number of
> allocated mbufs in case of in-order feature. Fix the
> function to not ignore allocation error and count only
> successfully allocated number of buffers.
>
> Fixes: e5f456a98d3 ("net/virtio: support in-order Rx and Tx")
> Cc: stable@dpdk.org
>
> Signed-off-by: Ivan Ilchenko <ivan.ilchenko@oktetlabs.ru>
> Signed-off-by: Andrew Rybchenko <andrew.rybchenko@oktetlabs.ru>
> ---
> drivers/net/virtio/virtio_rxtx.c | 3 ++-
> 1 file changed, 2 insertions(+), 1 deletion(-)
>
Reviewed-by: Maxime Coquelin <maxime.coquelin@redhat.com>
Thanks,
Maxime
On 8/20/21 2:47 PM, Andrew Rybchenko wrote:
> From: Ivan Ilchenko <ivan.ilchenko@oktetlabs.ru>
>
> Rx queue setup finish function may report wrong number of
> allocated mbufs in case of in-order feature. Fix the
> function to not ignore allocation error and count only
> successfully allocated number of buffers.
>
> Fixes: e5f456a98d3 ("net/virtio: support in-order Rx and Tx")
> Cc: stable@dpdk.org
>
> Signed-off-by: Ivan Ilchenko <ivan.ilchenko@oktetlabs.ru>
> Signed-off-by: Andrew Rybchenko <andrew.rybchenko@oktetlabs.ru>
> ---
> drivers/net/virtio/virtio_rxtx.c | 3 ++-
> 1 file changed, 2 insertions(+), 1 deletion(-)
>
Applied to dpdk-next-virtio/main.
Thanks,
Maxime
@@ -768,10 +768,11 @@ virtio_dev_rx_queue_setup_finish(struct rte_eth_dev *dev, uint16_t queue_idx)
if (unlikely(error)) {
for (i = 0; i < free_cnt; i++)
rte_pktmbuf_free(pkts[i]);
+ } else {
+ nbufs += free_cnt;
}
}
- nbufs += free_cnt;
vq_update_avail_idx(vq);
}
} else {