Re: [PATCH] pinctrl: use non-devm kmalloc versions for free functions

From: Tejun Heo
Date: Thu May 04 2017 - 12:06:54 EST


On Thu, May 04, 2017 at 02:03:14PM +0200, Maxime Ripard wrote:
> > @@ -704,6 +704,7 @@ static void pinctrl_generic_free_groups(struct pinctrl_dev *pctldev)
> > radix_tree_delete(&pctldev->pin_group_tree, indices[i]);
> > devm_kfree(pctldev->dev, group);
> > }
> > + kfree(indices);
> We use devm_kfree for other allocations done here, maybe we can just
> have the same thing here? We would be consistant, and we would still
> keep the resource tracking.

It doesn't make any sense to use the managed functions from the
release functions and if you're always matching devm_kmalloc() with
devm_kfree(), the only thing it'd do is confusing its readers.

And the function in question just looks weird to me - give up on
freeing resources if memory allocation fails? And why call
devm_kfree() on objects which are being released anyway? Or if the
group can be released w/o the device being detached, why use devm
allocations on the members at all?

As for removal, can't it just call radix_tree_iter_delete() while
iterating? Why allocate memory to iterate and store all indices and
to look them up again and delete them?