]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
crypto: cesa - allocate engines with main struct
authorRosen Penev <rosenp@gmail.com>
Sat, 25 Apr 2026 02:32:47 +0000 (19:32 -0700)
committerHerbert Xu <herbert@gondor.apana.org.au>
Thu, 7 May 2026 08:10:02 +0000 (16:10 +0800)
Use a flexible array member to combine and simplify allocation.

Move struct mv_cesa_dev down as flexible array members require full
definitions.

Signed-off-by: Rosen Penev <rosenp@gmail.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
drivers/crypto/marvell/cesa/cesa.c
drivers/crypto/marvell/cesa/cesa.h

index 8afa3a87e38df370ffa6e63a599b87f2a500117a..687ed730174d793354f617c99ca27f0c8083d4c5 100644 (file)
@@ -416,7 +416,7 @@ static int mv_cesa_probe(struct platform_device *pdev)
        const struct mbus_dram_target_info *dram;
        struct device *dev = &pdev->dev;
        struct mv_cesa_dev *cesa;
-       struct mv_cesa_engine *engines;
+       struct mv_cesa_engine *engine;
        int irq, ret, i, cpu;
        u32 sram_size;
 
@@ -431,7 +431,8 @@ static int mv_cesa_probe(struct platform_device *pdev)
                        return -ENOTSUPP;
        }
 
-       cesa = devm_kzalloc(dev, sizeof(*cesa), GFP_KERNEL);
+       cesa = devm_kzalloc(dev, struct_size(cesa, engines, caps->nengines),
+                       GFP_KERNEL);
        if (!cesa)
                return -ENOMEM;
 
@@ -445,10 +446,6 @@ static int mv_cesa_probe(struct platform_device *pdev)
                sram_size = CESA_SA_MIN_SRAM_SIZE;
 
        cesa->sram_size = sram_size;
-       cesa->engines = devm_kcalloc(dev, caps->nengines, sizeof(*engines),
-                                    GFP_KERNEL);
-       if (!cesa->engines)
-               return -ENOMEM;
 
        spin_lock_init(&cesa->lock);
 
@@ -465,7 +462,7 @@ static int mv_cesa_probe(struct platform_device *pdev)
        platform_set_drvdata(pdev, cesa);
 
        for (i = 0; i < caps->nengines; i++) {
-               struct mv_cesa_engine *engine = &cesa->engines[i];
+               engine = &cesa->engines[i];
                char res_name[16];
 
                engine->id = i;
index 50ca1039fdaa7a477ce0ff23c135d20f08caea92..18f9f28040a61c748dadb9c158fda823e9af1166 100644 (file)
@@ -402,27 +402,6 @@ struct mv_cesa_dev_dma {
        struct dma_pool *padding_pool;
 };
 
-/**
- * struct mv_cesa_dev - CESA device
- * @caps:      device capabilities
- * @regs:      device registers
- * @sram_size: usable SRAM size
- * @lock:      device lock
- * @engines:   array of engines
- * @dma:       dma pools
- *
- * Structure storing CESA device information.
- */
-struct mv_cesa_dev {
-       const struct mv_cesa_caps *caps;
-       void __iomem *regs;
-       struct device *dev;
-       unsigned int sram_size;
-       spinlock_t lock;
-       struct mv_cesa_engine *engines;
-       struct mv_cesa_dev_dma *dma;
-};
-
 /**
  * struct mv_cesa_engine - CESA engine
  * @id:                        engine id
@@ -471,6 +450,27 @@ struct mv_cesa_engine {
        int irq;
 };
 
+/**
+ * struct mv_cesa_dev - CESA device
+ * @caps:      device capabilities
+ * @regs:      device registers
+ * @sram_size: usable SRAM size
+ * @lock:      device lock
+ * @dma:       dma pools
+ * @engines:   array of engines
+ *
+ * Structure storing CESA device information.
+ */
+struct mv_cesa_dev {
+       const struct mv_cesa_caps *caps;
+       void __iomem *regs;
+       struct device *dev;
+       unsigned int sram_size;
+       spinlock_t lock;
+       struct mv_cesa_dev_dma *dma;
+       struct mv_cesa_engine engines[];
+};
+
 /**
  * struct mv_cesa_req_ops - CESA request operations
  * @process:   process a request chunk result (should return 0 if the