net/mlx5: fix trimming SW ring for vectorized Rx
authorYongseok Koh <yskoh@mellanox.com>
Thu, 3 Aug 2017 21:12:40 +0000 (14:12 -0700)
committerThomas Monjalon <thomas@monjalon.net>
Thu, 3 Aug 2017 21:22:25 +0000 (23:22 +0200)
commit1cba20c6100fd12754f81576759f6841bfc933d6
treed20de7bf0ffb33fa509be1863e5f4786063de453
parenta0edafe4099b1ef139242abb7baa2c2a48b83fd2
net/mlx5: fix trimming SW ring for vectorized Rx

Unlike mlx5_rx_burst(), mlx5_rx_burst_vec() doesn't replace completed
buffers one by one right after completion is processed but replenishes
multiple buffers later with rte_mempool_get_bulk(). Therefore, there could
be some buffer addresses left in the SW ring (rxq->elts[]) which have
already been delivered to application. As PMD doesn't own such buffers, it
must not be freed by PMD.  "Trimming" is needed before cleanup.

A problem can be seen when quitting testpmd when
CONFIG_RTE_LIBRTE_MBUF_DEBUG=y and CONFIG_RTE_LIBRTE_MEMPOOL_DEBUG=y

Trimming should be as simple as possible, it shouldn't touch any indexes
and buffer allocation isn't necessary.

Fixes: 6cb559d67b83 ("net/mlx5: add vectorized Rx/Tx burst for x86")

Signed-off-by: Yongseok Koh <yskoh@mellanox.com>
Acked-by: Nelio Laranjeiro <nelio.laranjeiro@6wind.com>
drivers/net/mlx5/mlx5_rxq.c