Re: [PATCH v2 0/4] of: automate of_node_put() - new approach to loops.

From: Jonathan Cameron
Date: Sun Feb 25 2024 - 09:26:20 EST


On Fri, 23 Feb 2024 12:44:28 +0000
Jonathan Cameron <Jonathan.Cameron@xxxxxxxxxx> wrote:

> The equivalent device_for_each_child_node_scoped() series for
> fwnode will be queued up in IIO for the merge window shortly as
> it has gathered sufficient tags. Hopefully the precdent set there
> for the approach will reassure people that instantiating the
> child variable inside the macro definition is the best approach.
> https://lore.kernel.org/linux-iio/20240217164249.921878-1-jic23@xxxxxxxxxx/

I missed the devicetree list. Will resend with a brief summary of the
discussion on v2 so far. Sorry for the noise!
>
> v2: Andy suggested most of the original converted set should move to
> generic fwnode / property.h handling. Within IIO that was
> a reasonable observation given we've been trying to move away from
> firmware specific handling for some time. Patches making that change
> to appropriate drivers posted.
> As we discussed there are cases which are not suitable for such
> conversion and this infrastructure still provides clear benefits
> for them.
>
> Ideally it would be good if this introductory series adding the
> infrastructure makes the 6.9 merge window. There are no dependencies
> on work queued in the IIO tree, so this can go via devicetree
> if the maintainers would prefer. I've had some off list messages
> asking when this would be merged, as there is interest in building
> on it next cycle for other parts of the kernel (where conversion to
> fwnode handling may be less appropriate).
>
> The outputs of Julia's scripts linked below show how widely this can be
> easily applied and give a conservative estimate of the complexity reduction
> and code savings. In some cases those drivers should move to fwnode
> and use the equivalent infrastructure there, but many will be unsuitable
> for conversion so this is still good win.
>
> Edited cover letter from v1:
>
> Thanks to Julia Lawal who also posted coccinelle for both types (loop and
> non loop cases)
>
> https://lore.kernel.org/all/alpine.DEB.2.22.394.2401312234250.3245@hadrien/
> https://lore.kernel.org/all/alpine.DEB.2.22.394.2401291455430.8649@hadrien/
>
> The cover letter of the RFC includes information on the various approaches
> considered.
> https://lore.kernel.org/all/20240128160542.178315-1-jic23@xxxxxxxxxx/
>
> Whilst these macros produce nice reductions in complexity the loops
> still have the unfortunate side effect of hiding the local declaration
> of a struct device_node * which is then used inside the loop.
>
> Julia suggested making that a little more visible via
> #define for_each_child_of_node_scoped(parent, struct device_node *, child)
> but in discussion we both expressed that this doesn't really make things
> all that clear either so I haven't adopted this suggestion.
>
>
>
> Jonathan Cameron (4):
> of: Add cleanup.h based auto release via __free(device_node) markings.
> of: Introduce for_each_*_child_of_node_scoped() to automate
> of_node_put() handling
> of: unittest: Use for_each_child_of_node_scoped()
> iio: adc: rcar-gyroadc: use for_each_available_child_node_scoped()
>
> drivers/iio/adc/rcar-gyroadc.c | 21 ++++++---------------
> drivers/of/unittest.c | 11 +++--------
> include/linux/of.h | 15 +++++++++++++++
> 3 files changed, 24 insertions(+), 23 deletions(-)
>