Re: [PATCH] crypto: eip93 - use struct_size() and flexible array for ring allocation
From: Rosen Penev
Date: Tue Aug 04 2026 - 03:38:12 EST
On Tue, Aug 4, 2026 at 12:11 AM Thomas Huth <thuth@xxxxxxxxxx> wrote:
>
> On 04/08/2026 00.40, Rosen Penev wrote:
> > Embed the single ring as a flexible array member in eip93_device
> > instead of allocating it separately. This simplifies the probe path
> > and uses struct_size() for a single allocation.
> >
> > Assisted-by: opencode:big-pickle
> > Signed-off-by: Rosen Penev <rosenp@xxxxxxxxx>
> > ---
> > .../crypto/inside-secure/eip93/eip93-main.c | 6 +----
> > .../crypto/inside-secure/eip93/eip93-main.h | 22 +++++++++----------
> > 2 files changed, 12 insertions(+), 16 deletions(-)
> >
> > diff --git a/drivers/crypto/inside-secure/eip93/eip93-main.c b/drivers/crypto/inside-secure/eip93/eip93-main.c
> > index 1a8dabc4ada4..e62785952b0d 100644
> > --- a/drivers/crypto/inside-secure/eip93/eip93-main.c
> > +++ b/drivers/crypto/inside-secure/eip93/eip93-main.c
> > @@ -415,7 +415,7 @@ static int eip93_crypto_probe(struct platform_device *pdev)
> > u32 ver, algo_flags;
> > int ret;
> >
> > - eip93 = devm_kzalloc(dev, sizeof(*eip93), GFP_KERNEL);
> > + eip93 = devm_kzalloc(dev, struct_size(eip93, ring, 1), GFP_KERNEL);
> > if (!eip93)
> > return -ENOMEM;
> >
> > @@ -436,10 +436,6 @@ static int eip93_crypto_probe(struct platform_device *pdev)
> > if (ret)
> > return ret;
> >
> > - eip93->ring = devm_kcalloc(eip93->dev, 1, sizeof(*eip93->ring), GFP_KERNEL);
> > - if (!eip93->ring)
> > - return -ENOMEM;
> > -
> > ret = eip93_desc_init(eip93);
> > if (ret)
> > return ret;
> > diff --git a/drivers/crypto/inside-secure/eip93/eip93-main.h b/drivers/crypto/inside-secure/eip93/eip93-main.h
> > index 990c2401b7ce..5f0f51081743 100644
> > --- a/drivers/crypto/inside-secure/eip93/eip93-main.h
> > +++ b/drivers/crypto/inside-secure/eip93/eip93-main.h
> > @@ -92,17 +92,6 @@
> > EIP93_HASH_SHA224 | \
> > EIP93_HASH_SHA256))
> >
> > -/**
> > - * struct eip93_device - crypto engine device structure
> > - */
> > -struct eip93_device {
> > - void __iomem *base;
> > - struct device *dev;
> > - struct clk *clk;
> > - int irq;
> > - struct eip93_ring *ring;
> > -};
> > -
> > struct eip93_desc_ring {
> > void *base;
> > void *base_end;
> > @@ -131,6 +120,17 @@ struct eip93_ring {
> > struct idr crypto_async_idr;
> > };
> >
> > +/**
> > + * struct eip93_device - crypto engine device structure
> > + */
> > +struct eip93_device {
> > + void __iomem *base;
> > + struct device *dev;
> > + struct clk *clk;
> > + int irq;
> > + struct eip93_ring ring[];
> > +};
> This looks weird, too. If there is always only one "ring", why don't you
> embed it without the "[]" into the struct eip93_device directly?
keeps all callers the same. -> vs .
>
> Thomas
>