Add a scoped version of fwnode_for_each_child_node() following the approach recently taken for other loops that handle child nodes like for_each_child_of_node_scoped() or device_for_each_child_node_scoped(), which are based on the __free() auto cleanup handler to remove the need for fwnode_handle_put() on early loop exits. Signed-off-by: Javier Carrasco <javier.carrasco@xxxxxxxxxxxxxx> --- This macro has been tested with a patch series that has not been applied yet and is under discussion in input [1], which makes use of the non-scoped version of the loop. Based on linux-next (next-20240502). Link: https://lore.kernel.org/linux-input/20240422-feature-ts_virtobj_patch-v9-0-acf118d12a8a@xxxxxxxxxxxxxx/ [1] --- include/linux/property.h | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/include/linux/property.h b/include/linux/property.h index 61fc20e5f81f..88f930165071 100644 --- a/include/linux/property.h +++ b/include/linux/property.h @@ -164,6 +164,11 @@ struct fwnode_handle *fwnode_get_next_available_child_node( for (child = fwnode_get_next_child_node(fwnode, NULL); child; \ child = fwnode_get_next_child_node(fwnode, child)) +#define fwnode_for_each_child_node_scoped(fwnode, child) \ + for (struct fwnode_handle *child __free(fwnode_handle) = \ + fwnode_get_next_child_node(fwnode, NULL); \ + child; child = fwnode_get_next_child_node(fwnode, child)) + #define fwnode_for_each_available_child_node(fwnode, child) \ for (child = fwnode_get_next_available_child_node(fwnode, NULL); child;\ child = fwnode_get_next_available_child_node(fwnode, child)) --- base-commit: 9c6ecb3cb6e20c4fd7997047213ba0efcf9ada1a change-id: 20240502-fwnode_for_each_child_node_scoped-ce15a9a831c3 Best regards, -- Javier Carrasco <javier.carrasco@xxxxxxxxxxxxxx>