net/mlx5: fix rss reta is reset when device is started
Checks
Commit Message
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")
Signed-off-by: Maxime Leroy <maxime.leroy@6wind.com>
---
drivers/net/mlx5/mlx5_rss.c | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
Comments
Hi Raslan,
Any comment/review on the fix ?
Regards,
Maxime
On Thu, Jul 16, 2020 at 12:43 PM Maxime Leroy <maxime.leroy@6wind.com> wrote:
>
> 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")
> Signed-off-by: Maxime Leroy <maxime.leroy@6wind.com>
> ---
> drivers/net/mlx5/mlx5_rss.c | 4 +++-
> 1 file changed, 3 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/net/mlx5/mlx5_rss.c b/drivers/net/mlx5/mlx5_rss.c
> index 653b0691..6f75ece2 100644
> --- a/drivers/net/mlx5/mlx5_rss.c
> +++ b/drivers/net/mlx5/mlx5_rss.c
> @@ -220,9 +220,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;
> --
> 2.27.0
>
> -----Original Message-----
> From: dev <dev-bounces@dpdk.org> On Behalf Of Maxime Leroy
>
> Hi Raslan,
>
> Any comment/review on the fix ?
>
> Regards,
>
> Maxime
>
> On Thu, Jul 16, 2020 at 12:43 PM Maxime Leroy <maxime.leroy@6wind.com>
> wrote:
> >
> > 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")
> > Signed-off-by: Maxime Leroy <maxime.leroy@6wind.com>
> > ---
Acked-by: Ori Kam <orika@nvidia.com>
Thanks,
Ori
Hi,
> -----Original Message-----
> From: Maxime Leroy <maxime.leroy@6wind.com>
> Sent: Thursday, July 16, 2020 1:43 PM
> To: dev@dpdk.org
> Cc: stable@dpdk.org; Raslan Darawsheh <rasland@mellanox.com>
> Subject: [PATCH] net/mlx5: fix rss reta is reset when device is started
>
> 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")
> Signed-off-by: Maxime Leroy <maxime.leroy@6wind.com>
> ---
> drivers/net/mlx5/mlx5_rss.c | 4 +++-
> 1 file changed, 3 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/net/mlx5/mlx5_rss.c b/drivers/net/mlx5/mlx5_rss.c
> index 653b0691..6f75ece2 100644
> --- a/drivers/net/mlx5/mlx5_rss.c
> +++ b/drivers/net/mlx5/mlx5_rss.c
> @@ -220,9 +220,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;
> --
> 2.27.0
Patch applied to next-net-mlx,
Kindest regards,
Raslan Darawsheh
@@ -220,9 +220,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;