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


Reply via email to