public inbox for netdev@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH 0/1] net/mlx5/core: Fix stack frame size warnings
@ 2026-02-26  9:28 Cheng-Yang Chou
  2026-02-26  9:28 ` [PATCH 1/1] net/mlx5/core: Allocate ttc_params on heap Cheng-Yang Chou
  0 siblings, 1 reply; 6+ messages in thread
From: Cheng-Yang Chou @ 2026-02-26  9:28 UTC (permalink / raw)
  To: netdev, saeedm, tariqt, mbloch; +Cc: jserv, charlie910417, yphbchou0911

Hi,

This patch resolves stack frame size warnings in the mlx5 driver by
dynamically allocating 'struct ttc_params'. The structure exceeds the 
1024-byte limit, which risks causing stack overflows in deep execution paths.

While compiling the kernel, I encountered the following warnings:

drivers/net/ethernet/mellanox/mlx5/core/lag/port_sel.c: In function ‘mlx5_lag_create_inner_ttc_table’:
drivers/net/ethernet/mellanox/mlx5/core/lag/port_sel.c:543:1: warning: the frame size of 1104 bytes is larger than 1024 bytes [-Wframe-larger-than=]
  543 | }
      | ^
drivers/net/ethernet/mellanox/mlx5/core/lag/port_sel.c: In function ‘mlx5_lag_create_ttc_table’:
drivers/net/ethernet/mellanox/mlx5/core/lag/port_sel.c:527:1: warning: the frame size of 1104 bytes is larger than 1024 bytes [-Wframe-larger-than=]
  527 | }
      | ^
drivers/net/ethernet/mellanox/mlx5/core/en_rep.c: In function ‘mlx5e_create_rep_ttc_table’:
drivers/net/ethernet/mellanox/mlx5/core/en_rep.c:991:1: warning: the frame size of 1096 bytes is larger than 1024 bytes [-Wframe-larger-than=]
  991 | }
      | ^
drivers/net/ethernet/mellanox/mlx5/core/en_tc.c: In function ‘mlx5e_hairpin_rss_init’:
drivers/net/ethernet/mellanox/mlx5/core/en_tc.c:890:1: warning: the frame size of 1280 bytes is larger than 1024 bytes [-Wframe-larger-than=]
  890 | }
      | ^

Thanks,
Cheng-Yang

---

Cheng-Yang Chou (1):
  net/mlx5/core: Allocate ttc_params on heap

 .../net/ethernet/mellanox/mlx5/core/en_rep.c  | 15 +++++++++----
 .../net/ethernet/mellanox/mlx5/core/en_tc.c   | 15 ++++++++++---
 .../mellanox/mlx5/core/lag/port_sel.c         | 22 ++++++++++++++-----
 3 files changed, 39 insertions(+), 13 deletions(-)

-- 
2.48.1


^ permalink raw reply	[flat|nested] 6+ messages in thread

* [PATCH 1/1] net/mlx5/core: Allocate ttc_params on heap
  2026-02-26  9:28 [PATCH 0/1] net/mlx5/core: Fix stack frame size warnings Cheng-Yang Chou
@ 2026-02-26  9:28 ` Cheng-Yang Chou
  2026-02-26 10:05   ` Leon Romanovsky
  2026-02-26 18:15   ` Simon Horman
  0 siblings, 2 replies; 6+ messages in thread
From: Cheng-Yang Chou @ 2026-02-26  9:28 UTC (permalink / raw)
  To: netdev, saeedm, tariqt, mbloch; +Cc: jserv, charlie910417, yphbchou0911

The ttc_params structure is too large to be allocated on the stack,
triggering warnings for exceeding the 1024-byte frame size limit.
Consuming excessive stack space risks causing stack overflows.

Allocate the structure dynamically to maintain safe stack boundaries.

Signed-off-by: Po-Ying Chiu <charlie910417@gmail.com>
Signed-off-by: Cheng-Yang Chou <yphbchou0911@gmail.com>
---
 .../net/ethernet/mellanox/mlx5/core/en_rep.c  | 15 +++++++++----
 .../net/ethernet/mellanox/mlx5/core/en_tc.c   | 15 ++++++++++---
 .../mellanox/mlx5/core/lag/port_sel.c         | 22 ++++++++++++++-----
 3 files changed, 39 insertions(+), 13 deletions(-)

diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_rep.c b/drivers/net/ethernet/mellanox/mlx5/core/en_rep.c
index 6eec88fa6d10..8e3862f5b563 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/en_rep.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/en_rep.c
@@ -966,27 +966,34 @@ static int mlx5e_create_rep_ttc_table(struct mlx5e_priv *priv)
 {
 	struct mlx5e_rep_priv *rpriv = priv->ppriv;
 	struct mlx5_eswitch_rep *rep = rpriv->rep;
-	struct ttc_params ttc_params = {};
+	struct ttc_params *ttc_params;
 	int err;
 
+	ttc_params = kzalloc(sizeof(*ttc_params), GFP_KERNEL);
+        if (!ttc_params)
+                return -ENOMEM;
+
 	mlx5e_fs_set_ns(priv->fs,
 			mlx5_get_flow_namespace(priv->mdev,
 						MLX5_FLOW_NAMESPACE_KERNEL), false);
 
 	/* The inner_ttc in the ttc params is intentionally not set */
-	mlx5e_set_ttc_params(priv->fs, priv->rx_res, &ttc_params, false, false);
+	mlx5e_set_ttc_params(priv->fs, priv->rx_res, ttc_params, false, false);
 
 	if (rep->vport != MLX5_VPORT_UPLINK)
 		/* To give uplik rep TTC a lower level for chaining from root ft */
-		ttc_params.ft_attr.level = MLX5E_TTC_FT_LEVEL + 1;
+		ttc_params->ft_attr.level = MLX5E_TTC_FT_LEVEL + 1;
 
-	mlx5e_fs_set_ttc(priv->fs, mlx5_create_ttc_table(priv->mdev, &ttc_params), false);
+	mlx5e_fs_set_ttc(priv->fs, mlx5_create_ttc_table(priv->mdev, ttc_params), false);
 	if (IS_ERR(mlx5e_fs_get_ttc(priv->fs, false))) {
 		err = PTR_ERR(mlx5e_fs_get_ttc(priv->fs, false));
 		netdev_err(priv->netdev, "Failed to create rep ttc table, err=%d\n",
 			   err);
+		kfree(ttc_params);
 		return err;
 	}
+
+	kfree(ttc_params);
 	return 0;
 }
 
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_tc.c b/drivers/net/ethernet/mellanox/mlx5/core/en_tc.c
index 424786f489ec..83a6fd052155 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/en_tc.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/en_tc.c
@@ -855,7 +855,7 @@ static void mlx5e_hairpin_set_ttc_params(struct mlx5e_hairpin *hp,
 static int mlx5e_hairpin_rss_init(struct mlx5e_hairpin *hp)
 {
 	struct mlx5e_priv *priv = hp->func_priv;
-	struct ttc_params ttc_params;
+	struct ttc_params *ttc_params;
 	struct mlx5_ttc_table *ttc;
 	int err;
 
@@ -867,8 +867,14 @@ static int mlx5e_hairpin_rss_init(struct mlx5e_hairpin *hp)
 	if (err)
 		goto err_create_indirect_tirs;
 
-	mlx5e_hairpin_set_ttc_params(hp, &ttc_params);
-	hp->ttc = mlx5_create_ttc_table(priv->mdev, &ttc_params);
+	ttc_params = kzalloc(sizeof(*ttc_params), GFP_KERNEL);
+	if (!ttc_params) {
+		err = -ENOMEM;
+		goto err_alloc_ttc_params;
+	}
+
+	mlx5e_hairpin_set_ttc_params(hp, ttc_params);
+	hp->ttc = mlx5_create_ttc_table(priv->mdev, ttc_params);
 	if (IS_ERR(hp->ttc)) {
 		err = PTR_ERR(hp->ttc);
 		goto err_create_ttc_table;
@@ -879,9 +885,12 @@ static int mlx5e_hairpin_rss_init(struct mlx5e_hairpin *hp)
 		   hp->num_channels,
 		   mlx5_get_ttc_flow_table(ttc)->id);
 
+	kfree(ttc_params);
 	return 0;
 
 err_create_ttc_table:
+	kfree(ttc_params);
+err_alloc_ttc_params:
 	mlx5e_hairpin_destroy_indirect_tirs(hp);
 err_create_indirect_tirs:
 	mlx5e_rqt_destroy(&hp->indir_rqt);
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/lag/port_sel.c b/drivers/net/ethernet/mellanox/mlx5/core/lag/port_sel.c
index d832a12ffec0..69fc596e9188 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/lag/port_sel.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/lag/port_sel.c
@@ -514,15 +514,20 @@ static int mlx5_lag_create_ttc_table(struct mlx5_lag *ldev)
 {
 	int first_idx = mlx5_lag_get_dev_index_by_seq(ldev, MLX5_LAG_P1);
 	struct mlx5_lag_port_sel *port_sel = &ldev->port_sel;
-	struct ttc_params ttc_params = {};
+	struct ttc_params *ttc_params;
 	struct mlx5_core_dev *dev;
 
 	if (first_idx < 0)
 		return -EINVAL;
 
+	ttc_params = kzalloc(sizeof(*ttc_params), GFP_KERNEL);
+        if (!ttc_params)
+                return -ENOMEM;
+
 	dev = ldev->pf[first_idx].dev;
-	mlx5_lag_set_outer_ttc_params(ldev, &ttc_params);
-	port_sel->outer.ttc = mlx5_create_ttc_table(dev, &ttc_params);
+	mlx5_lag_set_outer_ttc_params(ldev, ttc_params);
+        port_sel->outer.ttc = mlx5_create_ttc_table(dev, ttc_params);
+	kfree(ttc_params);
 	return PTR_ERR_OR_ZERO(port_sel->outer.ttc);
 }
 
@@ -530,15 +535,20 @@ static int mlx5_lag_create_inner_ttc_table(struct mlx5_lag *ldev)
 {
 	int first_idx = mlx5_lag_get_dev_index_by_seq(ldev, MLX5_LAG_P1);
 	struct mlx5_lag_port_sel *port_sel = &ldev->port_sel;
-	struct ttc_params ttc_params = {};
+	struct ttc_params *ttc_params;
 	struct mlx5_core_dev *dev;
 
 	if (first_idx < 0)
 		return -EINVAL;
 
+	ttc_params = kzalloc(sizeof(*ttc_params), GFP_KERNEL);
+        if (!ttc_params)
+                return -ENOMEM;
+
 	dev = ldev->pf[first_idx].dev;
-	mlx5_lag_set_inner_ttc_params(ldev, &ttc_params);
-	port_sel->inner.ttc = mlx5_create_inner_ttc_table(dev, &ttc_params);
+	mlx5_lag_set_inner_ttc_params(ldev, ttc_params);
+	port_sel->inner.ttc = mlx5_create_inner_ttc_table(dev, ttc_params);
+	kfree(ttc_params);
 	return PTR_ERR_OR_ZERO(port_sel->inner.ttc);
 }
 
-- 
2.48.1


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* Re: [PATCH 1/1] net/mlx5/core: Allocate ttc_params on heap
  2026-02-26  9:28 ` [PATCH 1/1] net/mlx5/core: Allocate ttc_params on heap Cheng-Yang Chou
@ 2026-02-26 10:05   ` Leon Romanovsky
  2026-02-26 10:33     ` Cheng-Yang Chou
  2026-02-26 18:15   ` Simon Horman
  1 sibling, 1 reply; 6+ messages in thread
From: Leon Romanovsky @ 2026-02-26 10:05 UTC (permalink / raw)
  To: Cheng-Yang Chou; +Cc: netdev, saeedm, tariqt, mbloch, jserv, charlie910417

On Thu, Feb 26, 2026 at 05:28:55PM +0800, Cheng-Yang Chou wrote:
> The ttc_params structure is too large to be allocated on the stack,
> triggering warnings for exceeding the 1024-byte frame size limit.
> Consuming excessive stack space risks causing stack overflows.
> 
> Allocate the structure dynamically to maintain safe stack boundaries.
> 
> Signed-off-by: Po-Ying Chiu <charlie910417@gmail.com>
> Signed-off-by: Cheng-Yang Chou <yphbchou0911@gmail.com>
> ---
>  .../net/ethernet/mellanox/mlx5/core/en_rep.c  | 15 +++++++++----
>  .../net/ethernet/mellanox/mlx5/core/en_tc.c   | 15 ++++++++++---
>  .../mellanox/mlx5/core/lag/port_sel.c         | 22 ++++++++++++++-----
>  3 files changed, 39 insertions(+), 13 deletions(-)
> 
> diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_rep.c b/drivers/net/ethernet/mellanox/mlx5/core/en_rep.c
> index 6eec88fa6d10..8e3862f5b563 100644
> --- a/drivers/net/ethernet/mellanox/mlx5/core/en_rep.c
> +++ b/drivers/net/ethernet/mellanox/mlx5/core/en_rep.c
> @@ -966,27 +966,34 @@ static int mlx5e_create_rep_ttc_table(struct mlx5e_priv *priv)
>  {
>  	struct mlx5e_rep_priv *rpriv = priv->ppriv;
>  	struct mlx5_eswitch_rep *rep = rpriv->rep;
> -	struct ttc_params ttc_params = {};
> +	struct ttc_params *ttc_params;
>  	int err;
>  
> +	ttc_params = kzalloc(sizeof(*ttc_params), GFP_KERNEL);

It needs to be kzalloc_obj(*ttc_params).
https://lore.kernel.org/linux-rdma/20260226071913.GD12611@unreal/T/#u

Thanks

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH 1/1] net/mlx5/core: Allocate ttc_params on heap
  2026-02-26 10:05   ` Leon Romanovsky
@ 2026-02-26 10:33     ` Cheng-Yang Chou
  0 siblings, 0 replies; 6+ messages in thread
From: Cheng-Yang Chou @ 2026-02-26 10:33 UTC (permalink / raw)
  To: Leon Romanovsky; +Cc: netdev, saeedm, tariqt, mbloch, jserv, charlie910417

On Thu, Feb 26, 2026 at 12:05:14PM +0200, Leon Romanovsky wrote:
> > +	ttc_params = kzalloc(sizeof(*ttc_params), GFP_KERNEL);
> 
> It needs to be kzalloc_obj(*ttc_params).
> https://lore.kernel.org/linux-rdma/20260226071913.GD12611@unreal/T/#u
> 
> Thanks

Thanks for the head-up. I'll send a v2 patch.

Thanks,
Cheng-Yang

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH 1/1] net/mlx5/core: Allocate ttc_params on heap
  2026-02-26  9:28 ` [PATCH 1/1] net/mlx5/core: Allocate ttc_params on heap Cheng-Yang Chou
  2026-02-26 10:05   ` Leon Romanovsky
@ 2026-02-26 18:15   ` Simon Horman
  2026-02-27  2:38     ` Cheng-Yang Chou
  1 sibling, 1 reply; 6+ messages in thread
From: Simon Horman @ 2026-02-26 18:15 UTC (permalink / raw)
  To: Cheng-Yang Chou; +Cc: netdev, saeedm, tariqt, mbloch, jserv, charlie910417

On Thu, Feb 26, 2026 at 05:28:55PM +0800, Cheng-Yang Chou wrote:
> The ttc_params structure is too large to be allocated on the stack,
> triggering warnings for exceeding the 1024-byte frame size limit.
> Consuming excessive stack space risks causing stack overflows.
> 
> Allocate the structure dynamically to maintain safe stack boundaries.
> 
> Signed-off-by: Po-Ying Chiu <charlie910417@gmail.com>
> Signed-off-by: Cheng-Yang Chou <yphbchou0911@gmail.com>
> ---
>  .../net/ethernet/mellanox/mlx5/core/en_rep.c  | 15 +++++++++----
>  .../net/ethernet/mellanox/mlx5/core/en_tc.c   | 15 ++++++++++---
>  .../mellanox/mlx5/core/lag/port_sel.c         | 22 ++++++++++++++-----
>  3 files changed, 39 insertions(+), 13 deletions(-)
> 
> diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_rep.c b/drivers/net/ethernet/mellanox/mlx5/core/en_rep.c
> index 6eec88fa6d10..8e3862f5b563 100644
> --- a/drivers/net/ethernet/mellanox/mlx5/core/en_rep.c
> +++ b/drivers/net/ethernet/mellanox/mlx5/core/en_rep.c
> @@ -966,27 +966,34 @@ static int mlx5e_create_rep_ttc_table(struct mlx5e_priv *priv)
>  {
>  	struct mlx5e_rep_priv *rpriv = priv->ppriv;
>  	struct mlx5_eswitch_rep *rep = rpriv->rep;
> -	struct ttc_params ttc_params = {};
> +	struct ttc_params *ttc_params;
>  	int err;
>  
> +	ttc_params = kzalloc(sizeof(*ttc_params), GFP_KERNEL);
> +        if (!ttc_params)
> +                return -ENOMEM;
> +

Please use tabs (8 characters wide) rather than spaces
for indentation throughout this patch.

-- 
pw-bot: changes-requested

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH 1/1] net/mlx5/core: Allocate ttc_params on heap
  2026-02-26 18:15   ` Simon Horman
@ 2026-02-27  2:38     ` Cheng-Yang Chou
  0 siblings, 0 replies; 6+ messages in thread
From: Cheng-Yang Chou @ 2026-02-27  2:38 UTC (permalink / raw)
  To: Simon Horman; +Cc: netdev, saeedm, tariqt, mbloch, jserv, charlie910417

On Thu, Feb 26, 2026 at 06:15:51PM +0000, Simon Horman wrote:
> 
> Please use tabs (8 characters wide) rather than spaces
> for indentation throughout this patch.
> 
> --

Thanks for the review. This issue has been addressed in v3:
https://lore.kernel.org/all/20260226174601.2120282-1-yphbchou0911@gmail.com/

Thanks,
Cheng-Yang

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2026-02-27  2:38 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-02-26  9:28 [PATCH 0/1] net/mlx5/core: Fix stack frame size warnings Cheng-Yang Chou
2026-02-26  9:28 ` [PATCH 1/1] net/mlx5/core: Allocate ttc_params on heap Cheng-Yang Chou
2026-02-26 10:05   ` Leon Romanovsky
2026-02-26 10:33     ` Cheng-Yang Chou
2026-02-26 18:15   ` Simon Horman
2026-02-27  2:38     ` Cheng-Yang Chou

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox