Message ID | 20240928-gpio_device_for_each_child_node_scoped-v1-0-c20eff315f4f@gmail.com |
---|---|
Headers | show |
Series | gpio: switch to device_for_each_chilld_node_scoped() | expand |
From: Bartosz Golaszewski <bartosz.golaszewski@linaro.org> On Sat, 28 Sep 2024 21:47:34 +0200, Javier Carrasco wrote: > This series switches from the device_for_each_child_node() macro to its > scoped variant. This makes the code more robust if new early exits are > added to the loops, because there is no need for explicit calls to > fwnode_handle_put(), which also simplifies existing code. > > The non-scoped macros to walk over nodes turn error-prone as soon as > the loop contains early exits (break, goto, return), and patches to > fix them show up regularly, sometimes due to new error paths in an > existing loop [1]. > > [...] Applied, thanks! [1/3] gpio: dwapb: switch to device_for_each_child_node_scoped() commit: 0a53be8e080b53ef922e90204999f4ccef29cd57 [2/3] gpio: sim: switch to device_for_each_child_node_scoped() commit: d64d0287f4bc7013c60b07e34e43c3fc558e3808 Best regards,
This series switches from the device_for_each_child_node() macro to its scoped variant. This makes the code more robust if new early exits are added to the loops, because there is no need for explicit calls to fwnode_handle_put(), which also simplifies existing code. The non-scoped macros to walk over nodes turn error-prone as soon as the loop contains early exits (break, goto, return), and patches to fix them show up regularly, sometimes due to new error paths in an existing loop [1]. The uses of device_for_each_child_node() with no early exits have been left untouched because their simpilicty justifies the non-scoped variant. In particular for gpio, there is a single case in gpio-hisi.c where the loop does not have early exists. But if desired, it can be easily converted as well to enforce the usage of the scoped variant when "borrowing" existing code. Note that the child node is now declared in the macro, and therefore the explicit declaration is no longer required. The general functionality should not be affected by this modification. Apart from automatically decrementing the node's refcount when it goes out of scope, the scoped variant works exactly the same as the non-scoped. If functional changes are found, please report them back as errors. Just in case, and even though the scoped macro already has multiple users, I carried out a quick test with gpio-sim and a few nodes defined in a devicetree, and everything works as expected. Link: https://lore.kernel.org/all/20240901160829.709296395@linuxfoundation.org/ [1] Signed-off-by: Javier Carrasco <javier.carrasco.cruz@gmail.com> --- Javier Carrasco (3): gpio: dwapb: switch to device_for_each_child_node_scoped() gpio: sim: switch to device_for_each_child_node_scoped() gpio: acpi: switch to device_for_each_child_node_scoped() drivers/gpio/gpio-dwapb.c | 4 +--- drivers/gpio/gpio-sim.c | 7 ++----- drivers/gpio/gpiolib-acpi.c | 4 +--- 3 files changed, 4 insertions(+), 11 deletions(-) --- base-commit: 40e0c9d414f57d450e3ad03c12765e797fc3fede change-id: 20240927-gpio_device_for_each_child_node_scoped-a2071fe5c8c6 Best regards,