Message ID | 20240522-fwnode_for_each_available_child_node_scoped-v1-1-1188b0da12dc@gmail.com (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
Series | device property: introduce fwnode_for_each_available_child_node_scoped() | expand |
On Wed, May 22, 2024 at 11:18:07AM +0200, Javier Carrasco wrote: > Add a scoped version of fwnode_for_each_available_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. OK as long as we have users. Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Hi Javier, On Wed, May 22, 2024 at 11:18:07AM +0200, Javier Carrasco wrote: > Add a scoped version of fwnode_for_each_available_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.cruz@gmail.com> > --- > include/linux/property.h | 5 +++++ > 1 file changed, 5 insertions(+) > > diff --git a/include/linux/property.h b/include/linux/property.h > index 61fc20e5f81f..bcc3dda5a9d8 100644 > --- a/include/linux/property.h > +++ b/include/linux/property.h > @@ -168,6 +168,11 @@ struct fwnode_handle *fwnode_get_next_available_child_node( > for (child = fwnode_get_next_available_child_node(fwnode, NULL); child;\ > child = fwnode_get_next_available_child_node(fwnode, child)) > > +#define fwnode_for_each_available_child_node_scoped(fwnode, child) \ > + for (struct fwnode_handle *child __free(fwnode_handle) = \ > + fwnode_get_next_available_child_node(fwnode, NULL); \ > + child; child = fwnode_get_next_available_child_node(fwnode, child)) > + > struct fwnode_handle *device_get_next_child_node(const struct device *dev, > struct fwnode_handle *child); > Reviewed-by: Sakari Ailus <sakari.ailus@linux.intel.com>
diff --git a/include/linux/property.h b/include/linux/property.h index 61fc20e5f81f..bcc3dda5a9d8 100644 --- a/include/linux/property.h +++ b/include/linux/property.h @@ -168,6 +168,11 @@ struct fwnode_handle *fwnode_get_next_available_child_node( for (child = fwnode_get_next_available_child_node(fwnode, NULL); child;\ child = fwnode_get_next_available_child_node(fwnode, child)) +#define fwnode_for_each_available_child_node_scoped(fwnode, child) \ + for (struct fwnode_handle *child __free(fwnode_handle) = \ + fwnode_get_next_available_child_node(fwnode, NULL); \ + child; child = fwnode_get_next_available_child_node(fwnode, child)) + struct fwnode_handle *device_get_next_child_node(const struct device *dev, struct fwnode_handle *child);
Add a scoped version of fwnode_for_each_available_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.cruz@gmail.com> --- include/linux/property.h | 5 +++++ 1 file changed, 5 insertions(+)