We should call of_node_put() for the reference 'gparent' escaped
out of the for_each_child_of_node() as it has increased the refcount.
Fixes: 5b9ca526917b ("[PATCH] 3/5 powerpc: Add platform functions interpreter")
Signed-off-by: Liang He <redacted>
---
arch/powerpc/platforms/powermac/pfunc_base.c | 2 ++
1 file changed, 2 insertions(+)
@@ -136,6 +136,8 @@ static void __init macio_gpio_init_one(struct macio_chip *macio)for_each_child_of_node(gparent,gp)pmf_do_functions(gp,NULL,0,PMF_FLAGS_ON_INIT,NULL);+of_node_put(gparent);+/* Note: We do not at this point implement the "at sleep" or "at wake"*functions.IyettofindanyforGPIOsanyway*/
From: Benjamin Herrenschmidt <benh@kernel.crashing.org> Date: 2022-08-02 04:53:46
On Sat, 2022-07-16 at 15:31 +0800, Liang He wrote:
We should call of_node_put() for the reference 'gparent' escaped
out of the for_each_child_of_node() as it has increased the refcount.
Same comment as before. That stuff happens once at boot, there's never
any dynamic allocation/deallocation of these, they just don't matter,
but feel free .... :-)
macio_chip *macio)
for_each_child_of_node(gparent, gp)
pmf_do_functions(gp, NULL, 0, PMF_FLAGS_ON_INIT, NULL);
+ of_node_put(gparent);
+
/* Note: We do not at this point implement the "at sleep" or
"at wake"
* functions. I yet to find any for GPIOs anyway
*/
At 2022-08-02 12:51:08, "Benjamin Herrenschmidt" [off-list ref] wrote:
On Sat, 2022-07-16 at 15:31 +0800, Liang He wrote:
quoted
We should call of_node_put() for the reference 'gparent' escaped
out of the for_each_child_of_node() as it has increased the refcount.
Same comment as before. That stuff happens once at boot, there's never
any dynamic allocation/deallocation of these, they just don't matter,
but feel free .... :-)
Thanks for your reply, this is a valuable lesson for me.
I will now begin to learn the detailed difference of dynamic and static allocation.
Thanks,
Liang
macio_chip *macio)
for_each_child_of_node(gparent, gp)
pmf_do_functions(gp, NULL, 0, PMF_FLAGS_ON_INIT, NULL);
+ of_node_put(gparent);
+
/* Note: We do not at this point implement the "at sleep" or
"at wake"
* functions. I yet to find any for GPIOs anyway
*/