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;
}