ARM: shmobile: rcar-gen2: Increase refcount for new reference
authorLiang He <windhl@126.com>
Fri, 1 Jul 2022 12:18:04 +0000 (20:18 +0800)
committerGeert Uytterhoeven <geert+renesas@glider.be>
Tue, 5 Jul 2022 07:08:35 +0000 (09:08 +0200)
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 reference 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>
Link: https://lore.kernel.org/r/20220701121804.234223-1-windhl@126.com
Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
arch/arm/mach-shmobile/regulator-quirk-rcar-gen2.c

index abea41f7782e50d3dc3b31b95c38fae82669b9c1..117e7b07995b942cb696f80409631ce605a4356f 100644 (file)
@@ -125,6 +125,7 @@ remove:
 
        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 @@ err_free:
 err_mem:
        list_for_each_entry_safe(pos, tmp, &quirk_list, list) {
                list_del(&pos->list);
+               of_node_put(pos->np);
                kfree(pos);
        }