On Wed, Apr 11, 2012 at 06:02:51PM -0700, Mike Turquette wrote: ... > @@ -175,23 +188,32 @@ struct clk *clk_register_divider(struct device *dev, > const char *name, > div->flags = clk_divider_flags; > div->lock = lock; > > + /* allocate the temporary parent_names */ > if (parent_name) { > - div->parent[0] = kstrdup(parent_name, GFP_KERNEL); > - if (!div->parent[0]) > - goto out; > + parent_names[0] = kstrdup(parent_name, GFP_KERNEL); > + if (!parent_names[0]) { > + pr_err("%s: could not allocate parent_names\n", > + __func__); > + goto fail_parent_names; > + } > }
Why do we need to copy the parent_names here at all? clk_register() has done that for each basic clk. Regards, Shawn > > + /* register the clock */ > clk = clk_register(dev, name, > &clk_divider_ops, &div->hw, > - div->parent, > + (parent_name ? parent_names: NULL), > (parent_name ? 1 : 0), > flags); > - if (clk) > - return clk; > > -out: > - kfree(div->parent[0]); > - kfree(div); > + /* free the temporary parent_names */ > + if (parent_name) > + kfree(parent_names[0]); > + > + if (!IS_ERR(clk)) > + goto out; > > - return NULL; > +fail_parent_names: > + kfree(div); > +out: > + return clk; > } _______________________________________________ linaro-dev mailing list linaro-dev@lists.linaro.org http://lists.linaro.org/mailman/listinfo/linaro-dev