[PATCH] arm/mach: Hold reference returned by of_find_xxx APIs
Tony Lindgren
tony at atomide.com
Wed Jun 29 01:37:38 PDT 2022
* Russell King (Oracle) <linux at armlinux.org.uk> [220628 16:11]:
> On Tue, Jun 28, 2022 at 06:59:45AM +0300, Tony Lindgren wrote:
> > * Liang He <windhl at 126.com> [220621 12:14]:
> > > diff --git a/arch/arm/mach-omap2/pmic-cpcap.c b/arch/arm/mach-omap2/pmic-cpcap.c
> > > index 668dc84fd31e..a7368d657aa8 100644
> > > --- a/arch/arm/mach-omap2/pmic-cpcap.c
> > > +++ b/arch/arm/mach-omap2/pmic-cpcap.c
> > > @@ -238,8 +238,11 @@ static struct omap_voltdm_pmic omap4_fan_iva = {
> > > int __init omap4_cpcap_init(void)
> > > {
> > > struct voltagedomain *voltdm;
> > > + struct device_node *np;
> > >
> > > - if (!of_find_compatible_node(NULL, NULL, "motorola,cpcap"))
> > > + np = of_find_compatible_node(NULL, NULL, "motorola,cpcap");
> > > + of_node_put(np);
> > > + if (!np)
> > > return -ENODEV;
> >
> > Hmm so here you are checking for !np after of_node_put()?
>
> This is permissible, because the value of the _pointer_ is being
> checked without dereferencing the pointer. So the fact that the
> node may have been freed is actually immaterial.
OK yeah. This is several lines of code to check if something exists.
Maybe we should just add bool of_compatible_node_exists() to simplify
cases like this that does not keep the kfef.
Regards,
Tony
More information about the linux-arm-kernel
mailing list