Hi Niklas, On Mon, Aug 21, 2017 at 2:51 PM, Niklas Söderlund <niklas.soderlund+renesas@xxxxxxxxxxxx> 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(). > > Fixes: 3b27d00e7b6d7c88 ("device property: Move fwnode graph ops to firmware specific locations") > Signed-off-by: Niklas Söderlund <niklas.soderlund+renesas@xxxxxxxxxxxx> > --- > 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) FWIW, I'd use "np" to store the intermediate value: struct device_node *np = to_of_node(fwnode); /* * Preserve usecount for passed in node as of_get_next_parent() * will do of_node_put() on it. */ of_node_get(np); /* Get the parent of the port */ np = of_get_next_parent(np); Alternatively, perhaps to_of_node() should increment the refcount and call of_node_get()? Oh, there's (static) of_fwnode_get(), too. Is drivers/iommu/iommu.c:iommu_fwspec_init() really the only place outside drivers/of/property.c that calls of_node_get() on a node obtained by to_of_node()? Gr{oetje,eeting}s, Geert -- Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@xxxxxxxxxxxxxx In personal conversations with technical people, I call myself a hacker. But when I'm talking to journalists I just say "programmer" or something like that. -- Linus Torvalds