Message ID | 20220915014258.3999504-1-windhl@126.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | ARM: OMAP2+: Hold reference returned from of_find_xxx API | expand |
On Thu, Sep 15, 2022 at 09:42:58AM +0800, Liang He wrote: > In omap4_twl_init(), we should hold the reference returned from > of_find_compatible_node() which has increased the refcount and > then call of_node_put() with it when done. > > Fixes: ccd369455a23 ("ARM: OMAP2+: Remove bogus warnings for machines without twl PMIC") > Signed-off-by: Liang He <windhl@126.com> > Signed-off-by: Mengda Chen <chenmengda2009@163.com> > --- > arch/arm/mach-omap2/omap_twl.c | 6 ++++-- > 1 file changed, 4 insertions(+), 2 deletions(-) > > diff --git a/arch/arm/mach-omap2/omap_twl.c b/arch/arm/mach-omap2/omap_twl.c > index d4dab041324d..07b5f17066ce 100644 > --- a/arch/arm/mach-omap2/omap_twl.c > +++ b/arch/arm/mach-omap2/omap_twl.c > @@ -213,11 +213,13 @@ static struct omap_voltdm_pmic omap4_core_pmic = { > int __init omap4_twl_init(void) > { > struct voltagedomain *voltdm; > + struct device_node *np; > > if (!cpu_is_omap44xx() || > - of_find_compatible_node(NULL, NULL, "motorola,cpcap")) > + (np = of_find_compatible_node(NULL, NULL, "motorola,cpcap"))) { > + of_node_put(np); This is buggy - if cpu_is_omap44xx() is false, then np will not be initialised. The simple solution is to initialise np to NULL.
At 2022-09-15 19:29:58, "Russell King (Oracle)" <linux@armlinux.org.uk> wrote: >On Thu, Sep 15, 2022 at 09:42:58AM +0800, Liang He wrote: >> In omap4_twl_init(), we should hold the reference returned from >> of_find_compatible_node() which has increased the refcount and >> then call of_node_put() with it when done. >> >> Fixes: ccd369455a23 ("ARM: OMAP2+: Remove bogus warnings for machines without twl PMIC") >> Signed-off-by: Liang He <windhl@126.com> >> Signed-off-by: Mengda Chen <chenmengda2009@163.com> >> --- >> arch/arm/mach-omap2/omap_twl.c | 6 ++++-- >> 1 file changed, 4 insertions(+), 2 deletions(-) >> >> diff --git a/arch/arm/mach-omap2/omap_twl.c b/arch/arm/mach-omap2/omap_twl.c >> index d4dab041324d..07b5f17066ce 100644 >> --- a/arch/arm/mach-omap2/omap_twl.c >> +++ b/arch/arm/mach-omap2/omap_twl.c >> @@ -213,11 +213,13 @@ static struct omap_voltdm_pmic omap4_core_pmic = { >> int __init omap4_twl_init(void) >> { >> struct voltagedomain *voltdm; >> + struct device_node *np; >> >> if (!cpu_is_omap44xx() || >> - of_find_compatible_node(NULL, NULL, "motorola,cpcap")) >> + (np = of_find_compatible_node(NULL, NULL, "motorola,cpcap"))) { >> + of_node_put(np); > >This is buggy - if cpu_is_omap44xx() is false, then np will not be >initialised. The simple solution is to initialise np to NULL. > Thanks, I will send a new version soon. Liang >-- >RMK's Patch system: https://www.armlinux.org.uk/developer/patches/ >FTTP is here! 40Mbps down 10Mbps up. Decent connectivity at last!
diff --git a/arch/arm/mach-omap2/omap_twl.c b/arch/arm/mach-omap2/omap_twl.c index d4dab041324d..07b5f17066ce 100644 --- a/arch/arm/mach-omap2/omap_twl.c +++ b/arch/arm/mach-omap2/omap_twl.c @@ -213,11 +213,13 @@ static struct omap_voltdm_pmic omap4_core_pmic = { int __init omap4_twl_init(void) { struct voltagedomain *voltdm; + struct device_node *np; if (!cpu_is_omap44xx() || - of_find_compatible_node(NULL, NULL, "motorola,cpcap")) + (np = of_find_compatible_node(NULL, NULL, "motorola,cpcap"))) { + of_node_put(np); return -ENODEV; - + } voltdm = voltdm_lookup("mpu"); omap_voltage_register_pmic(voltdm, &omap4_mpu_pmic);