Hi Niklas,
Niklas Söderlund wrote:
Using CONFIG_OF_DYNAMIC=y uncovered an imbalance in the usecount of the
node being passed to of_fwnode_graph_get_port_parent(). Preserve the
usecount just like it is done in of_graph_get_port_parent().
The of_fwnode_graph_get_port_parent() is called by
fwnode_graph_get_port_parent() which obtains the port node through
fwnode_get_parent(). If you take a reference here, calling
fwnode_graph_get_port_parent() will end up incrementing the port node's
use count. In other words, my understanding is that dropping the
reference to the port node isn't a problem but intended behaviour here.
I wonder if I miss something.
Fixes: 3b27d00e7b6d7c88 ("device property: Move fwnode graph ops to firmware
specific locations")
Signed-off-by: Niklas Söderlund <[email protected]>
---
drivers/of/property.c | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/drivers/of/property.c b/drivers/of/property.c
index 067f9fab7b77c794..637dcb4833e2af60 100644
--- a/drivers/of/property.c
+++ b/drivers/of/property.c
@@ -922,6 +922,12 @@ of_fwnode_graph_get_port_parent(struct fwnode_handle
*fwnode)
{
struct device_node *np;
+ /*
+ * Preserve usecount for passed in node as of_get_next_parent()
+ * will do of_node_put() on it.
+ */
+ of_node_get(to_of_node(fwnode));
+
/* Get the parent of the port */
np = of_get_next_parent(to_of_node(fwnode));
if (!np)
--
Sakari Ailus
[email protected]