Use a flexible array member to combine allocations.

Add __counted_by for extra runtime analysis.

Signed-off-by: Rosen Penev <[email protected]>
---
 drivers/firmware/ti_sci.c              | 7 +------
 include/linux/soc/ti/ti_sci_protocol.h | 2 +-
 2 files changed, 2 insertions(+), 7 deletions(-)

diff --git a/drivers/firmware/ti_sci.c b/drivers/firmware/ti_sci.c
index e027a2bd8f26..04d99c1fafa1 100644
--- a/drivers/firmware/ti_sci.c
+++ b/drivers/firmware/ti_sci.c
@@ -3574,16 +3574,11 @@ devm_ti_sci_get_resource_sets(const struct 
ti_sci_handle *handle,
        bool valid_set = false;
        int i, ret, res_count;
 
-       res = devm_kzalloc(dev, sizeof(*res), GFP_KERNEL);
+       res = devm_kzalloc(dev, struct_size(res, desc, sets), GFP_KERNEL);
        if (!res)
                return ERR_PTR(-ENOMEM);
 
        res->sets = sets;
-       res->desc = devm_kcalloc(dev, res->sets, sizeof(*res->desc),
-                                GFP_KERNEL);
-       if (!res->desc)
-               return ERR_PTR(-ENOMEM);
-
        for (i = 0; i < res->sets; i++) {
                ret = handle->ops.rm_core_ops.get_range(handle, dev_id,
                                                        sub_types[i],
diff --git a/include/linux/soc/ti/ti_sci_protocol.h 
b/include/linux/soc/ti/ti_sci_protocol.h
index fd104b666836..7632bb11c862 100644
--- a/include/linux/soc/ti/ti_sci_protocol.h
+++ b/include/linux/soc/ti/ti_sci_protocol.h
@@ -599,7 +599,7 @@ struct ti_sci_handle {
 struct ti_sci_resource {
        u16 sets;
        raw_spinlock_t lock;
-       struct ti_sci_resource_desc *desc;
+       struct ti_sci_resource_desc desc[] __counted_by(sets);
 };
 
 #if IS_ENABLED(CONFIG_TI_SCI_PROTOCOL)
-- 
2.54.0


Reply via email to