net/mlx5: fix RSS RETA reset on start
authorMaxime Leroy <maxime.leroy@6wind.com>
Thu, 16 Jul 2020 10:43:20 +0000 (12:43 +0200)
committerFerruh Yigit <ferruh.yigit@intel.com>
Fri, 18 Sep 2020 16:55:11 +0000 (18:55 +0200)
The following sequences was working fine on mlx5:
   rte_eth_dev_configure(portid, ...);

   for (queueid = 0; queueid < nb_txq; queueid++)
      rte_eth_tx_queue_setup(portid, queueid, ...);

   for (queueid = 0; queueid < nb_rxq; queueid++)
      rte_eth_rx_queue_setup(portid, queueid, ...);

  // use a custom reta configuration
  rte_eth_dev_rss_reta_update(portid, reta_conf, reta_size);
  rte_eth_dev_start(portid);

We were able to configure a custom reta before starting the port.

The commit "net/mlx5: support RSS on hairpin" breaks this logic by
moving the code initializing the RSS reta from rte_eth_dev_configure
into rte_eth_dev_start.

To fix the issue, the skip_default_rss_reta is always set to 1 in
rte_eth_dev_rss_reta to avoid reconfigure the rss reta when the device
is started.

Fixes: 63bd16292c3a ("net/mlx5: support RSS on hairpin")
Cc: stable@dpdk.org
Signed-off-by: Maxime Leroy <maxime.leroy@6wind.com>
Acked-by: Ori Kam <orika@nvidia.com>
drivers/net/mlx5/mlx5_rss.c

index a63cc8d..845cebe 100644 (file)
@@ -215,9 +215,11 @@ mlx5_dev_rss_reta_update(struct rte_eth_dev *dev,
                MLX5_ASSERT(reta_conf[idx].reta[pos] < priv->rxqs_n);
                (*priv->reta_idx)[i] = reta_conf[idx].reta[pos];
        }
+
+       priv->skip_default_rss_reta = 1;
+
        if (dev->data->dev_started) {
                mlx5_dev_stop(dev);
-               priv->skip_default_rss_reta = 1;
                return mlx5_dev_start(dev);
        }
        return 0;