The queue restart is only supported by the non-vectorized single-packet receive queue today. Restarting MPRQ will result in corrupted packets because of CQE and WQE mismatch. Prevent this by not allowing the MPRQ Rx queue stop.
Fixes: 161d103b23 ("net/mlx5: add queue start and stop") Cc: sta...@dpdk.org Signed-off-by: Alexander Kozyrev <akozy...@nvidia.com> --- drivers/net/mlx5/mlx5_rxq.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/drivers/net/mlx5/mlx5_rxq.c b/drivers/net/mlx5/mlx5_rxq.c index ad8fd13cbe..b314c0482b 100644 --- a/drivers/net/mlx5/mlx5_rxq.c +++ b/drivers/net/mlx5/mlx5_rxq.c @@ -531,12 +531,12 @@ mlx5_rx_queue_stop(struct rte_eth_dev *dev, uint16_t idx) * synchronized, that might be broken on RQ restart * and cause Rx malfunction, so queue stopping is * not supported if vectorized Rx burst is engaged. - * The routine pointer depends on the process - * type, should perform check there. + * The routine pointer depends on the process type, + * should perform check there. MPRQ is not supported as well. */ - if (pkt_burst == mlx5_rx_burst_vec) { - DRV_LOG(ERR, "Rx queue stop is not supported " - "for vectorized Rx"); + if (pkt_burst != mlx5_rx_burst) { + DRV_LOG(ERR, "Rx queue stop is only supported " + "for non-vectorized single-packet Rx"); rte_errno = EINVAL; return -EINVAL; } -- 2.18.2