On Wed, Sep 30, 2026 at 09:58:18AM +0200, Jerome Brunet wrote: > On mar. 29 sept. 2026 at 12:24, Rosen Penev wrote: > > > Use a flexible array member to avoid allocating separately. > > > > Use __counted_by for extra runtime analysis. > > > > Signed-off-by: Rosen Penev > > --- > > 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