net/virtio: fix vectorized Rx queue rearm
authorXueming Li <xuemingl@nvidia.com>
Wed, 14 Apr 2021 14:14:04 +0000 (22:14 +0800)
committerMaxime Coquelin <maxime.coquelin@redhat.com>
Tue, 4 May 2021 08:08:11 +0000 (10:08 +0200)
commitd99088431ea5d6bb568c5cb5542688453084dcc6
treec33b7574617be5ee6bee05b26d724c1be60ec8c6
parent048960272e809ea728110748d317ddce1d731a27
net/virtio: fix vectorized Rx queue rearm

When Rx queue worked in vectorized mode and rxd <= 512, under traffic of
high PPS rate, testpmd often start and receive packets of rxd without
further growth.

Testpmd started with rxq flush which tried to rx MAX_PKT_BURST(512)
packets and drop. When Rx burst size >= Rx queue size, all descriptors
in used queue consumed without rearm, device can't receive more packets.
The next Rx burst returned at once since no used descriptors found,
rearm logic was skipped, rx vq kept in starving state.

To avoid rx vq starving, this patch always check the available queue,
rearm if needed even no used descriptor reported by device.

Fixes: fc3d66212fed ("virtio: add vector Rx")
Fixes: 2d7c37194ee4 ("net/virtio: add NEON based Rx handler")
Fixes: 52b5a707e6ca ("net/virtio: add Altivec Rx")
Cc: stable@dpdk.org
Signed-off-by: Xueming Li <xuemingl@nvidia.com>
Reviewed-by: David Christensen <drc@linux.vnet.ibm.com>
Reviewed-by: Maxime Coquelin <maxime.coquelin@redhat.com>
drivers/net/virtio/virtio_rxtx_simple_altivec.c
drivers/net/virtio/virtio_rxtx_simple_neon.c
drivers/net/virtio/virtio_rxtx_simple_sse.c