Use a flexible array member to avoid allocating separately. Use __counted_by for extra runtime analysis.
Signed-off-by: Rosen Penev <[email protected]> --- 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 f6d2b934228b..e2d506cdbae2 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) @@ -510,20 +510,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; - /* hardware clock initialization */ memset(&init, 0, sizeof(init)); init.name = info->name; -- 2.53.0

