Re: [PATCH RESEND] clk: tegra: bmp: remove kcalloc
From: Thierry Reding
Date: Wed Sep 30 2026 - 05:40:53 EST
On Wed, Sep 30, 2026 at 09:58:18AM +0200, Jerome Brunet wrote:
> On mar. 29 sept. 2026 at 12:24, Rosen Penev <rosenp@xxxxxxxxx> wrote:
>
> > Use a flexible array member to avoid allocating separately.
> >
> > Use __counted_by for extra runtime analysis.
> >
> > Signed-off-by: Rosen Penev <rosenp@xxxxxxxxx>
> > ---
> > drivers/clk/tegra/clk-bpmp.c | 12 +++---------
> > 1 file changed, 3 insertions(+), 9 deletions(-)
> >
> > diff --git a/drivers/clk/tegra/clk-bpmp.c b/drivers/clk/tegra/clk-bpmp.c
> > index 067a8555c4e7..15b976162b59 100644
> > --- a/drivers/clk/tegra/clk-bpmp.c
> > +++ b/drivers/clk/tegra/clk-bpmp.c
> > @@ -32,7 +32,7 @@ struct tegra_bpmp_clk {
> > unsigned int id;
> >
> > unsigned int num_parents;
> > - unsigned int *parents;
> > + unsigned int parents[] __counted_by(num_parents);
> > };
> >
> > static inline struct tegra_bpmp_clk *to_tegra_bpmp_clk(struct clk_hw *hw)
> > @@ -518,20 +518,14 @@ tegra_bpmp_clk_register(struct tegra_bpmp *bpmp,
> > unsigned int i;
> > int err;
> >
> > - clk = devm_kzalloc(bpmp->dev, sizeof(*clk), GFP_KERNEL);
> > + clk = devm_kzalloc(bpmp->dev, struct_size(clk, parents, info->num_parents), GFP_KERNEL);
> > if (!clk)
> > return ERR_PTR(-ENOMEM);
> >
> > + clk->num_parents = info->num_parents;
> > clk->id = info->id;
> > clk->bpmp = bpmp;
> >
> > - clk->parents = devm_kcalloc(bpmp->dev, info->num_parents,
> > - sizeof(*clk->parents), GFP_KERNEL);
> > - if (!clk->parents)
> > - return ERR_PTR(-ENOMEM);
> > -
> > - clk->num_parents = info->num_parents;
> > -
>
> What is the benefit of doing this ? It looks like you are just trading
> one alloc for another here ?
I think the point is allocating the parents array as part of the main
allocation, so we end up with one allocation instead of two. This avoids
fragmentation and overhead and is possibly a little bit faster.
Seems fine to me.
Thierry
Attachment:
signature.asc
Description: PGP signature