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(-) >