net/mlx5: fix multiple flow table hash list

Message ID 748a95b9f9030c78c55ddda4642915283de3f13b.1576487133.git.jackmin@mellanox.com (mailing list archive)
State Accepted, archived
Delegated to: Raslan Darawsheh
Headers
Series net/mlx5: fix multiple flow table hash list |

Checks

Context Check Description
ci/checkpatch success coding style OK
ci/iol-testing success Testing PASS
ci/iol-intel-Performance success Performance Testing PASS
ci/iol-mellanox-Performance success Performance Testing PASS
ci/Intel-compilation fail apply issues

Commit Message

Xiaoyu Min Dec. 16, 2019, 9:27 a.m. UTC
  The eth devices which share one ibv device only need one hash list of
flow table.

Currently, flow table hash list is created per each eth device
whatever whether they share one ibv device or not.

If the devices share one ibv device, the previously created hash list
will become dangle because the pointer point to (sh->flow_tbls) is
overwritten by the later created hast list.

To fix this, just don't create hash list if it is already created.

Fixes: 54534725d2f3 ("net/mlx5: fix flow table hash list conversion")
Cc: stable@dpdk.org

Reported-by: Zhike Wang <wangzhike@jd.com>
Signed-off-by: Xiaoyu Min <jackmin@mellanox.com>
---
 drivers/net/mlx5/mlx5.c | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)
  

Comments

Matan Azrad Dec. 17, 2019, 8:39 a.m. UTC | #1
> From: Xiaoyu Min
> The eth devices which share one ibv device only need one hash list of flow
> table.
> 
> Currently, flow table hash list is created per each eth device whatever
> whether they share one ibv device or not.
> 
> If the devices share one ibv device, the previously created hash list will
> become dangle because the pointer point to (sh->flow_tbls) is overwritten
> by the later created hast list.
> 
> To fix this, just don't create hash list if it is already created.
> 
> Fixes: 54534725d2f3 ("net/mlx5: fix flow table hash list conversion")
> Cc: stable@dpdk.org
> 
> Reported-by: Zhike Wang <wangzhike@jd.com>
> Signed-off-by: Xiaoyu Min <jackmin@mellanox.com>
Acked-by: Matan Azrad <matan@mellanox.com>
  
Raslan Darawsheh Dec. 17, 2019, 12:13 p.m. UTC | #2
Hi,

> -----Original Message-----
> From: dev <dev-bounces@dpdk.org> On Behalf Of Xiaoyu Min
> Sent: Monday, December 16, 2019 11:28 AM
> To: Ori Kam <orika@mellanox.com>; Matan Azrad <matan@mellanox.com>;
> Shahaf Shuler <shahafs@mellanox.com>; Slava Ovsiienko
> <viacheslavo@mellanox.com>
> Cc: dev@dpdk.org; stable@dpdk.org; Zhike Wang <wangzhike@jd.com>
> Subject: [dpdk-dev] [PATCH] net/mlx5: fix multiple flow table hash list
> 
> The eth devices which share one ibv device only need one hash list of flow
> table.
> 
> Currently, flow table hash list is created per each eth device whatever
> whether they share one ibv device or not.
> 
> If the devices share one ibv device, the previously created hash list will
> become dangle because the pointer point to (sh->flow_tbls) is overwritten
> by the later created hast list.
> 
> To fix this, just don't create hash list if it is already created.
> 
> Fixes: 54534725d2f3 ("net/mlx5: fix flow table hash list conversion")
> Cc: stable@dpdk.org
> 
> Reported-by: Zhike Wang <wangzhike@jd.com>
> Signed-off-by: Xiaoyu Min <jackmin@mellanox.com>
> ---
>  drivers/net/mlx5/mlx5.c | 7 ++++++-
>  1 file changed, 6 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/net/mlx5/mlx5.c b/drivers/net/mlx5/mlx5.c index
> d84a6f91b4..50960c91ce 100644
> --- a/drivers/net/mlx5/mlx5.c
> +++ b/drivers/net/mlx5/mlx5.c
> @@ -868,8 +868,13 @@ mlx5_alloc_shared_dr(struct mlx5_priv *priv)  {
>  	struct mlx5_ibv_shared *sh = priv->sh;
>  	char s[MLX5_HLIST_NAMESIZE];
> -	int err = mlx5_alloc_table_hash_list(priv);
> +	int err = 0;
> 
> +	if (!sh->flow_tbls)
> +		err = mlx5_alloc_table_hash_list(priv);
> +	else
> +		DRV_LOG(DEBUG, "sh->flow_tbls[%p] already created,
> reuse\n",
> +			(void *)sh->flow_tbls);
>  	if (err)
>  		return err;
>  	/* Create tags hash list table. */
> --
> 2.24.0


Patch applied to next-net-mlx,

Kindest regards,
Raslan Darawsheh
  

Patch

diff --git a/drivers/net/mlx5/mlx5.c b/drivers/net/mlx5/mlx5.c
index d84a6f91b4..50960c91ce 100644
--- a/drivers/net/mlx5/mlx5.c
+++ b/drivers/net/mlx5/mlx5.c
@@ -868,8 +868,13 @@  mlx5_alloc_shared_dr(struct mlx5_priv *priv)
 {
 	struct mlx5_ibv_shared *sh = priv->sh;
 	char s[MLX5_HLIST_NAMESIZE];
-	int err = mlx5_alloc_table_hash_list(priv);
+	int err = 0;
 
+	if (!sh->flow_tbls)
+		err = mlx5_alloc_table_hash_list(priv);
+	else
+		DRV_LOG(DEBUG, "sh->flow_tbls[%p] already created, reuse\n",
+			(void *)sh->flow_tbls);
 	if (err)
 		return err;
 	/* Create tags hash list table. */