Re: [RFC PATCH 00/13] device property / IIO: Use cleanup.h magic for fwnode_handle_put() handling.

Andy Shevchenko
2024-01-06T15:25:08Z

On Mon, Jan 01, 2024 at 05:25:58PM +0000, Jonathan Cameron wrote:
> From: Jonathan Cameron <Jonathan.Cameron@huawei.com>
>
> RFC mainly because it's untested. I have none of the relevant hardware and
> haven't yet emulated the firmware descriptions to test this.
> I have tested the device tree only version:
> https://lore.kernel.org/linux-iio/20231217184648.185236-1-jic23@kernel.org/
> which is very similar.
>
> Failing to release the references on early exit from loops over child nodes
> and similar are a fairly common source of bugs. The need to explicitly
> release the references via fwnode_handle_put() also complicate the code.
>
> The first patch enables
>
> struct fwnode_handle *child __free(fwnode_handle) = NULL;
>
> device_for_each_child_node(dev, child) {
> if (err)
> /*
> * Previously needed a fwnode_handle_put() here,
> * will now be called automatically as well leave
> * the scope within which the cleanup is registered
> */
> return err;
> }
>
> /*
> * fwnode_handle_put() no automatically called here - but child == NULL so
> * that call is a noop
> */
> }
>
> As can be seen by the examples from IIO that follow this can save
> a reasonable amount of complexity and boiler plate code, often enabling
> additional cleanups in related code such as use of
> return dev_err_probe().

Important comment on the first patch, otherwise LGTM.

--
With Best Regards,
Andy Shevchenko