diff mbox series

crypto: caam/qi2 - use cpumask_var_t in dpaa2_dpseci_setup

Message ID Zqdd5VASjaXaac9Z@gondor.apana.org.au (mailing list archive)
State Not Applicable
Delegated to: Herbert Xu
Headers show
Series crypto: caam/qi2 - use cpumask_var_t in dpaa2_dpseci_setup | expand

Commit Message

Herbert Xu July 29, 2024, 9:16 a.m. UTC
Switch cpumask_t to cpumask_var_t as the former may be too big
for the stack:

  CC [M]  drivers/crypto/caam/caamalg_qi2.o
../drivers/crypto/caam/caamalg_qi2.c: In function ‘dpaa2_dpseci_setup’:
../drivers/crypto/caam/caamalg_qi2.c:5135:1: warning: the frame size of 1032 bytes is larger than 1024 bytes [-Wframe-larger-than=]
 5135 | }
      | ^

Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>

Comments

Horia Geanta July 29, 2024, 2:50 p.m. UTC | #1
On 7/29/2024 12:16 PM, Herbert Xu wrote:
> Switch cpumask_t to cpumask_var_t as the former may be too big
> for the stack:
> 
>   CC [M]  drivers/crypto/caam/caamalg_qi2.o
> ../drivers/crypto/caam/caamalg_qi2.c: In function ‘dpaa2_dpseci_setup’:
> ../drivers/crypto/caam/caamalg_qi2.c:5135:1: warning: the frame size of 1032 bytes is larger than 1024 bytes [-Wframe-larger-than=]
>  5135 | }
>       | ^
> 
> Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Reviewed-by: Horia Geantă <horia.geanta@nxp.com>

though I have a few comments:

1. This patch does not apply cleanly on crypto tree

Patch depends on the patch set
https://lore.kernel.org/linux-crypto/20240702185557.3699991-1-leitao@debian.org/
which was merged via net-next.

I assume the dependency will be fixed with the crypto tree moving to v6.11-rc1.


2. I was not able to reproduce the issue

I tried on arm64 and i386 (with COMPILE_TEST=y) defconfigs.

I could reproduce the issue on arm64 only when modifying
CONFIG_FRAME_WARN=2048 -> 1024.

Still, I would like to know your configuration, since there is a similar case
in caam_qi_init() (drivers/crypto/caam/qi.c) which might need attention too.

Thanks,
Horia
Herbert Xu July 30, 2024, 2:56 a.m. UTC | #2
On Mon, Jul 29, 2024 at 02:50:00PM +0000, Horia Geanta wrote:
>
> 1. This patch does not apply cleanly on crypto tree
> 
> Patch depends on the patch set
> https://lore.kernel.org/linux-crypto/20240702185557.3699991-1-leitao@debian.org/
> which was merged via net-next.
> 
> I assume the dependency will be fixed with the crypto tree moving to v6.11-rc1.

Yes this is meant to be based on rc1.

> 2. I was not able to reproduce the issue
> 
> I tried on arm64 and i386 (with COMPILE_TEST=y) defconfigs.

I'm building on x86-64 with NR_CPUS set to 8192.

> I could reproduce the issue on arm64 only when modifying
> CONFIG_FRAME_WARN=2048 -> 1024.
> 
> Still, I would like to know your configuration, since there is a similar case
> in caam_qi_init() (drivers/crypto/caam/qi.c) which might need attention too.

Oops you're right.  Somehow this file didn't get rebuilt so I
missed the warning.  It does indeed give the same warning when
I force it to be rebuilt.

I'll send an updated patch.

Thanks,
diff mbox series

Patch

diff --git a/drivers/crypto/caam/caamalg_qi2.c b/drivers/crypto/caam/caamalg_qi2.c
index 207dc422785a..c01ca44e1eea 100644
--- a/drivers/crypto/caam/caamalg_qi2.c
+++ b/drivers/crypto/caam/caamalg_qi2.c
@@ -4990,7 +4990,7 @@  static int dpaa2_dpseci_congestion_setup(struct dpaa2_caam_priv *priv,
 	return err;
 }
 
-static void free_dpaa2_pcpu_netdev(struct dpaa2_caam_priv *priv, const cpumask_t *cpus)
+static void free_dpaa2_pcpu_netdev(struct dpaa2_caam_priv *priv, const struct cpumask *cpus)
 {
 	struct dpaa2_caam_priv_per_cpu *ppriv;
 	int i;
@@ -5006,10 +5006,14 @@  static int __cold dpaa2_dpseci_setup(struct fsl_mc_device *ls_dev)
 	struct device *dev = &ls_dev->dev;
 	struct dpaa2_caam_priv *priv;
 	struct dpaa2_caam_priv_per_cpu *ppriv;
-	cpumask_t clean_mask;
+	cpumask_var_t clean_mask;
 	int err, cpu;
 	u8 i;
 
+	err = -ENOMEM;
+	if (!zalloc_cpumask_var(&clean_mask, GFP_KERNEL))
+		goto err_cpumask;
+
 	priv = dev_get_drvdata(dev);
 
 	priv->dev = dev;
@@ -5085,7 +5089,6 @@  static int __cold dpaa2_dpseci_setup(struct fsl_mc_device *ls_dev)
 		}
 	}
 
-	cpumask_clear(&clean_mask);
 	i = 0;
 	for_each_online_cpu(cpu) {
 		u8 j;
@@ -5114,7 +5117,7 @@  static int __cold dpaa2_dpseci_setup(struct fsl_mc_device *ls_dev)
 			err = -ENOMEM;
 			goto err_alloc_netdev;
 		}
-		cpumask_set_cpu(cpu, &clean_mask);
+		cpumask_set_cpu(cpu, clean_mask);
 		ppriv->net_dev->dev = *dev;
 
 		netif_napi_add_tx_weight(ppriv->net_dev, &ppriv->napi,
@@ -5122,15 +5125,19 @@  static int __cold dpaa2_dpseci_setup(struct fsl_mc_device *ls_dev)
 					 DPAA2_CAAM_NAPI_WEIGHT);
 	}
 
-	return 0;
+	err = 0;
+	goto free_cpumask;
 
 err_alloc_netdev:
-	free_dpaa2_pcpu_netdev(priv, &clean_mask);
+	free_dpaa2_pcpu_netdev(priv, clean_mask);
 err_get_rx_queue:
 	dpaa2_dpseci_congestion_free(priv);
 err_get_vers:
 	dpseci_close(priv->mc_io, 0, ls_dev->mc_handle);
 err_open:
+free_cpumask:
+	free_cpumask_var(clean_mask);
+err_cpumask:
 	return err;
 }