diff mbox series

arm: shmobile: Increase refcount for new reference

Message ID 20220701121804.234223-1-windhl@126.com (mailing list archive)
State Mainlined
Commit 75a185fb92e58ccd3670258d8d3b826bd2fa6d29
Delegated to: Geert Uytterhoeven
Headers show
Series arm: shmobile: Increase refcount for new reference | expand

Commit Message

Liang He July 1, 2022, 12:18 p.m. UTC
In rcar_gen2_regulator_quirk(), for_each_matching_node_and_match()
will automatically increase and decrease the refcount. However, we
should call of_node_get() for the new refernece created in 'quirk->np'.
Besides, we also should call of_node_put() before the 'quirk' being
freed.

Signed-off-by: Liang He <windhl@126.com>
---
 arch/arm/mach-shmobile/regulator-quirk-rcar-gen2.c | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

Comments

Geert Uytterhoeven July 1, 2022, 2:39 p.m. UTC | #1
On Fri, Jul 1, 2022 at 2:18 PM Liang He <windhl@126.com> wrote:
> In rcar_gen2_regulator_quirk(), for_each_matching_node_and_match()
> will automatically increase and decrease the refcount. However, we
> should call of_node_get() for the new refernece created in 'quirk->np'.

reference

> Besides, we also should call of_node_put() before the 'quirk' being
> freed.
>
> Signed-off-by: Liang He <windhl@126.com>

Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be>
i.e. will queue in renesas-devel for v5.20.

Gr{oetje,eeting}s,

                        Geert

--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org

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
diff mbox series

Patch

diff --git a/arch/arm/mach-shmobile/regulator-quirk-rcar-gen2.c b/arch/arm/mach-shmobile/regulator-quirk-rcar-gen2.c
index abea41f7782e..117e7b07995b 100644
--- a/arch/arm/mach-shmobile/regulator-quirk-rcar-gen2.c
+++ b/arch/arm/mach-shmobile/regulator-quirk-rcar-gen2.c
@@ -125,6 +125,7 @@  static int regulator_quirk_notify(struct notifier_block *nb,
 
 	list_for_each_entry_safe(pos, tmp, &quirk_list, list) {
 		list_del(&pos->list);
+		of_node_put(pos->np);
 		kfree(pos);
 	}
 
@@ -174,11 +175,12 @@  static int __init rcar_gen2_regulator_quirk(void)
 		memcpy(&quirk->i2c_msg, id->data, sizeof(quirk->i2c_msg));
 
 		quirk->id = id;
-		quirk->np = np;
+		quirk->np = of_node_get(np);
 		quirk->i2c_msg.addr = addr;
 
 		ret = of_irq_parse_one(np, 0, argsa);
 		if (ret) {	/* Skip invalid entry and continue */
+			of_node_put(np);
 			kfree(quirk);
 			continue;
 		}
@@ -225,6 +227,7 @@  static int __init rcar_gen2_regulator_quirk(void)
 err_mem:
 	list_for_each_entry_safe(pos, tmp, &quirk_list, list) {
 		list_del(&pos->list);
+		of_node_put(pos->np);
 		kfree(pos);
 	}