[PATCH] clk: clk-max77686: kzalloc + kcalloc to kzalloc
From: Rosen Penev
Date: Thu Mar 26 2026 - 01:30:39 EST
Simplify allocation by using a flexible array member to combine
allocations. Use struct_size to calculate size properly.
Use __counted_by to get extra runtime analysis. Assign counting variable
right after allocation as required by __counted_by.
Signed-off-by: Rosen Penev <rosenp@xxxxxxxxx>
---
drivers/clk/clk-max77686.c | 32 +++++++++++++-------------------
1 file changed, 13 insertions(+), 19 deletions(-)
diff --git a/drivers/clk/clk-max77686.c b/drivers/clk/clk-max77686.c
index 3727d5472450..9149ce4f702d 100644
--- a/drivers/clk/clk-max77686.c
+++ b/drivers/clk/clk-max77686.c
@@ -47,8 +47,8 @@ struct max77686_clk_init_data {
struct max77686_clk_driver_data {
enum max77686_chip_name chip;
- struct max77686_clk_init_data *max_clk_data;
size_t num_clks;
+ struct max77686_clk_init_data max_clk_data[] __counted_by(num_clks);
};
static const struct
@@ -168,19 +168,7 @@ static int max77686_clk_probe(struct platform_device *pdev)
struct regmap *regmap;
int i, ret, num_clks;
- drv_data = devm_kzalloc(dev, sizeof(*drv_data), GFP_KERNEL);
- if (!drv_data)
- return -ENOMEM;
-
- regmap = dev_get_regmap(parent, NULL);
- if (!regmap) {
- dev_err(dev, "Failed to get rtc regmap\n");
- return -ENODEV;
- }
-
- drv_data->chip = id->driver_data;
-
- switch (drv_data->chip) {
+ switch (id->driver_data) {
case CHIP_MAX77686:
num_clks = MAX77686_CLKS_NUM;
hw_clks = max77686_hw_clks_info;
@@ -201,13 +189,19 @@ static int max77686_clk_probe(struct platform_device *pdev)
return -EINVAL;
}
- drv_data->num_clks = num_clks;
- drv_data->max_clk_data = devm_kcalloc(dev, num_clks,
- sizeof(*drv_data->max_clk_data),
- GFP_KERNEL);
- if (!drv_data->max_clk_data)
+ drv_data = devm_kzalloc(dev, struct_size(drv_data, max_clk_data, num_clks), GFP_KERNEL);
+ if (!drv_data)
return -ENOMEM;
+ drv_data->num_clks = num_clks;
+ drv_data->chip = id->driver_data;
+
+ regmap = dev_get_regmap(parent, NULL);
+ if (!regmap) {
+ dev_err(dev, "Failed to get rtc regmap\n");
+ return -ENODEV;
+ }
+
for (i = 0; i < num_clks; i++) {
struct max77686_clk_init_data *max_clk_data;
const char *clk_name;
--
2.53.0