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

Reply via email to