Re: [PATCH v3] mfd: twl-core: Allocate modules with twl_private
From: Rosen Penev
Date: Fri Oct 16 2026 - 00:38:30 EST
On Thu, Oct 15, 2026 at 5:05 AM Lee Jones <lee@xxxxxxxxxx> wrote:
>
> On Fri, 25 Sep 2026, Rosen Penev wrote:
>
> > Use a flexible array member to allocate the twl_client array together
> > with struct twl_private. This removes a separate devm_kcalloc() and
> > keeps the module data tied to the main private structure.
> >
> > Signed-off-by: Rosen Penev <rosenp@xxxxxxxxx>
> > ---
> > v3: Capitalize Allocate.
> > v2: don't use twl_get_num_slaves().
> > drivers/mfd/twl-core.c | 16 ++++------------
> > 1 file changed, 4 insertions(+), 12 deletions(-)
> >
> > diff --git a/drivers/mfd/twl-core.c b/drivers/mfd/twl-core.c
> > index f86df356d658..0b78fe30e047 100644
> > --- a/drivers/mfd/twl-core.c
> > +++ b/drivers/mfd/twl-core.c
> > @@ -159,7 +159,7 @@ struct twl_private {
> > unsigned int twl_id;
> >
> > struct twl_mapping *twl_map;
> > - struct twl_client *twl_modules;
> > + struct twl_client twl_modules[];
> > };
> >
> > static struct twl_private *twl_priv;
> > @@ -770,7 +770,9 @@ twl_probe(struct i2c_client *client)
> > goto out;
> > }
> >
> > - twl_priv = devm_kzalloc(&client->dev, sizeof(struct twl_private),
> > + num_slaves = (id->driver_data & TWL6030_CLASS) ? 3 : 4;
>
> What's wrong with twl_get_num_slaves()?
It relies on twl_priv already being allocated.
>
> > + twl_priv = devm_kzalloc(&client->dev,
> > + struct_size(twl_priv, twl_modules, num_slaves),
> > GFP_KERNEL);
> > if (!twl_priv) {
> > status = -ENOMEM;
> > @@ -787,16 +789,6 @@ twl_probe(struct i2c_client *client)
> > twl_regmap_config = twl4030_regmap_config;
> > }
> >
> > - num_slaves = twl_get_num_slaves();
> > - twl_priv->twl_modules = devm_kcalloc(&client->dev,
> > - num_slaves,
> > - sizeof(struct twl_client),
> > - GFP_KERNEL);
> > - if (!twl_priv->twl_modules) {
> > - status = -ENOMEM;
> > - goto out;
> > - }
> > -
> > for (i = 0; i < num_slaves; i++) {
> > struct twl_client *twl = &twl_priv->twl_modules[i];
> >
> > --
> > 2.55.0
> >
>
> --
> Lee Jones