]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
clk: renesas: mstp: Combine group-private and clock array allocation
authorGeert Uytterhoeven <geert+renesas@glider.be>
Wed, 12 Jun 2019 15:25:39 +0000 (17:25 +0200)
committerGeert Uytterhoeven <geert+renesas@glider.be>
Thu, 20 Jun 2019 09:36:44 +0000 (11:36 +0200)
Make mstp_clock_group.clks[] a flexible array member, and use the new
struct_size() helper, to combine the allocation of the group-private
structure and array of module clocks.

Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
Reviewed-by: Simon Horman <horms+renesas@verge.net.au>
drivers/clk/renesas/clk-mstp.c

index 74d77a94592cd99f58c6fe199201eac166074653..2db9093546c603f749caf48b9ffb35747c978aac 100644 (file)
 /**
  * struct mstp_clock_group - MSTP gating clocks group
  *
- * @data: clocks in this group
+ * @data: clock specifier translation for clocks in this group
  * @smstpcr: module stop control register
  * @mstpsr: module stop status register (optional)
  * @lock: protects writes to SMSTPCR
  * @width_8bit: registers are 8-bit, not 32-bit
+ * @clks: clocks in this group
  */
 struct mstp_clock_group {
        struct clk_onecell_data data;
@@ -42,6 +43,7 @@ struct mstp_clock_group {
        void __iomem *mstpsr;
        spinlock_t lock;
        bool width_8bit;
+       struct clk *clks[];
 };
 
 /**
@@ -186,14 +188,13 @@ static void __init cpg_mstp_clocks_init(struct device_node *np)
        struct clk **clks;
        unsigned int i;
 
-       group = kzalloc(sizeof(*group), GFP_KERNEL);
-       clks = kmalloc_array(MSTP_MAX_CLOCKS, sizeof(*clks), GFP_KERNEL);
-       if (group == NULL || clks == NULL) {
+       group = kzalloc(struct_size(group, clks, MSTP_MAX_CLOCKS), GFP_KERNEL);
+       if (group == NULL) {
                kfree(group);
-               kfree(clks);
                return;
        }
 
+       clks = group->clks;
        spin_lock_init(&group->lock);
        group->data.clks = clks;
 
@@ -203,7 +204,6 @@ static void __init cpg_mstp_clocks_init(struct device_node *np)
        if (group->smstpcr == NULL) {
                pr_err("%s: failed to remap SMSTPCR\n", __func__);
                kfree(group);
-               kfree(clks);
                return;
        }