From: "Jean-François Lessard" <jefflessard3@gmail.com>
To: Wolfram Sang <wsa+renesas@sang-engineering.com>,
Andy Shevchenko <andriy.shevchenko@linux.intel.com>,
Daniel Scally <djrscally@gmail.com>,
Heikki Krogerus <heikki.krogerus@linux.intel.com>,
Sakari Ailus <sakari.ailus@linux.intel.com>,
Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
"Rafael J. Wysocki" <rafael@kernel.org>,
Danilo Krummrich <dakr@kernel.org>
Cc: linux-i2c@vger.kernel.org, linux-kernel@vger.kernel.org,
linux-acpi@vger.kernel.org
Subject: [PATCH v4 1/2] device property: Add scoped fwnode child node iterators
Date: Tue, 2 Sep 2025 15:04:39 -0400 [thread overview]
Message-ID: <20250902190443.3252-2-jefflessard3@gmail.com> (raw)
In-Reply-To: <20250902190443.3252-1-jefflessard3@gmail.com>
Add scoped versions of fwnode child node iterators that automatically
handle reference counting cleanup using the __free() attribute:
- fwnode_for_each_child_node_scoped()
- fwnode_for_each_available_child_node_scoped()
These macros follow the same pattern as existing scoped iterators in the
kernel, ensuring fwnode references are automatically released when the
iterator variable goes out of scope. This prevents resource leaks and
eliminates the need for manual cleanup in error paths.
The implementation mirrors the non-scoped variants but uses
__free(fwnode_handle) for automatic resource management, providing a
safer and more convenient interface for drivers iterating over firmware
node children.
Signed-off-by: Jean-François Lessard <jefflessard3@gmail.com>
---
Notes:
checkpatch reports false positives that are intentionally ignored:
MACRO_ARG_REUSE, MACRO_ARG_PRECEDENCE
This is a standard iterator pattern following kernel conventions.
include/linux/property.h | 10 ++++++++++
1 file changed, 10 insertions(+)
diff --git a/include/linux/property.h b/include/linux/property.h
index 82f0cb3ab..862e20813 100644
--- a/include/linux/property.h
+++ b/include/linux/property.h
@@ -176,6 +176,16 @@ 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_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_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);
--
2.43.0
next prev parent reply other threads:[~2025-09-02 19:04 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-09-02 19:04 [PATCH v4 0/2] device property: Add scoped fwnode child node iterators Jean-François Lessard
2025-09-02 19:04 ` Jean-François Lessard [this message]
2025-09-02 19:11 ` [PATCH v4 1/2] " Danilo Krummrich
2025-09-03 10:29 ` Andy Shevchenko
2025-09-03 13:18 ` Sakari Ailus
2025-09-03 16:43 ` Jean-François Lessard
2025-09-03 17:22 ` Danilo Krummrich
2025-09-04 5:56 ` Sakari Ailus
2025-09-04 7:03 ` Danilo Krummrich
2025-09-04 7:43 ` Sakari Ailus
2025-09-04 8:51 ` Danilo Krummrich
2025-09-04 11:54 ` Sakari Ailus
2025-09-04 12:39 ` Sakari Ailus
2025-09-04 16:14 ` Danilo Krummrich
2025-09-02 19:04 ` [PATCH v4 2/2] i2c: core: Use fwnode_for_each_child_node_scoped() Jean-François Lessard
2025-09-03 13:19 ` Sakari Ailus
2025-09-03 10:30 ` [PATCH v4 0/2] device property: Add scoped fwnode child node iterators Andy Shevchenko
2025-09-04 9:49 ` Wolfram Sang
2025-09-04 9:59 ` Andy Shevchenko
2025-09-04 10:13 ` Danilo Krummrich
2025-09-04 10:38 ` Sakari Ailus
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20250902190443.3252-2-jefflessard3@gmail.com \
--to=jefflessard3@gmail.com \
--cc=andriy.shevchenko@linux.intel.com \
--cc=dakr@kernel.org \
--cc=djrscally@gmail.com \
--cc=gregkh@linuxfoundation.org \
--cc=heikki.krogerus@linux.intel.com \
--cc=linux-acpi@vger.kernel.org \
--cc=linux-i2c@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=rafael@kernel.org \
--cc=sakari.ailus@linux.intel.com \
--cc=wsa+renesas@sang-engineering.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).