Hi Sakari On 20/10/2020 14:31, Sakari Ailus wrote: > Hi Daniel, > > On Mon, Oct 19, 2020 at 11:58:57PM +0100, Daniel Scally wrote: >> The software_node_get_next_child() function currently does not hold a kref >> to the child software_node; fix that. >> >> Fixes: 59abd83672f7 ("drivers: base: Introducing software nodes to the firmware node framework") >> Signed-off-by: Daniel Scally <djrscally@xxxxxxxxx> >> --- >> Changes in v3: >> - split out from the full software_node_graph*() patch >> >> drivers/base/swnode.c | 2 +- >> 1 file changed, 1 insertion(+), 1 deletion(-) >> >> diff --git a/drivers/base/swnode.c b/drivers/base/swnode.c >> index f01b1cc61..741149b90 100644 >> --- a/drivers/base/swnode.c >> +++ b/drivers/base/swnode.c >> @@ -450,7 +450,7 @@ software_node_get_next_child(const struct fwnode_handle *fwnode, >> c = list_next_entry(c, entry); >> else >> c = list_first_entry(&p->children, struct swnode, entry); >> - return &c->fwnode; >> + return software_node_get(&c->fwnode); > I believe similarly, the function should drop the reference to the previous > node, and not expect the caller to do this. The OF equivalent does the > same. I think I prefer it this way myself, since the alternative is having to explicitly call *_node_get() on a returned child if you want to keep it but also keep iterating. But I agree that it's important to take a consistent approach. I'll add that too; this will mean swnode_graph_find_next_port() and software_node_graph_get_next_endpoint() in patch 4 of this series will need changing slightly to square away their references.