[V2] ARM: imx: Add missing of_node_put()
diff mbox series

Message ID 1581574854-9366-1-git-send-email-Anson.Huang@nxp.com
State New
Headers show
Series
  • [V2] ARM: imx: Add missing of_node_put()
Related show

Commit Message

Anson Huang Feb. 13, 2020, 6:20 a.m. UTC
After finishing using device node got from of_find_compatible_node(),
of_node_put() needs to be called.

Signed-off-by: Anson Huang <Anson.Huang@nxp.com>
---
Changes since V1:
	- correct some of_node_put() place to make sure it is safe to be put.
---
 arch/arm/mach-imx/anatop.c     | 3 +++
 arch/arm/mach-imx/gpc.c        | 1 +
 arch/arm/mach-imx/platsmp.c    | 1 +
 arch/arm/mach-imx/pm-imx6.c    | 2 ++
 arch/arm/mach-imx/pm-imx7ulp.c | 1 +
 5 files changed, 8 insertions(+)

Comments

Uwe Kleine-K├Ânig Feb. 13, 2020, 8:18 a.m. UTC | #1
On Thu, Feb 13, 2020 at 02:20:54PM +0800, Anson Huang wrote:
> After finishing using device node got from of_find_compatible_node(),
> of_node_put() needs to be called.
> 
> Signed-off-by: Anson Huang <Anson.Huang@nxp.com>
> ---
> Changes since V1:
> 	- correct some of_node_put() place to make sure it is safe to be put.
> ---
>  arch/arm/mach-imx/anatop.c     | 3 +++
>  arch/arm/mach-imx/gpc.c        | 1 +
>  arch/arm/mach-imx/platsmp.c    | 1 +
>  arch/arm/mach-imx/pm-imx6.c    | 2 ++
>  arch/arm/mach-imx/pm-imx7ulp.c | 1 +
>  5 files changed, 8 insertions(+)
> 
> diff --git a/arch/arm/mach-imx/anatop.c b/arch/arm/mach-imx/anatop.c
> index 8fb68c0..5985731 100644
> --- a/arch/arm/mach-imx/anatop.c
> +++ b/arch/arm/mach-imx/anatop.c
> @@ -135,6 +135,7 @@ void __init imx_init_revision_from_anatop(void)
>  			void __iomem *src_base;
>  			u32 sbmr2;
>  
> +			of_node_put(np);
>  			np = of_find_compatible_node(NULL, NULL,
>  						     "fsl,imx6ul-src");
>  			src_base = of_iomap(np, 0);
> @@ -152,6 +153,8 @@ void __init imx_init_revision_from_anatop(void)
>  
>  	mxc_set_cpu_type(digprog >> 16 & 0xff);
>  	imx_set_soc_revision(revision);
> +
> +	of_node_put(np);
>  }

It would be a bit more natural here IMHO to introduce a second struct
device_node * variable for the fsl,imx6ul-src device. Then each
of_node_put would belong to exactly one of_find_compatible_node().
(Now the of_node_put() in line 157 frees the fsl,imx6ul-src on i.MX6ULL
and fsl,imx6q-anatop on the others.)

The other hunks look fine.

Best regards
Uwe
Anson Huang Feb. 13, 2020, 8:41 a.m. UTC | #2
Hi, Uwe

> Subject: Re: [PATCH V2] ARM: imx: Add missing of_node_put()
> 
> On Thu, Feb 13, 2020 at 02:20:54PM +0800, Anson Huang wrote:
> > After finishing using device node got from of_find_compatible_node(),
> > of_node_put() needs to be called.
> >
> > Signed-off-by: Anson Huang <Anson.Huang@nxp.com>
> > ---
> > Changes since V1:
> > 	- correct some of_node_put() place to make sure it is safe to be put.
> > ---
> >  arch/arm/mach-imx/anatop.c     | 3 +++
> >  arch/arm/mach-imx/gpc.c        | 1 +
> >  arch/arm/mach-imx/platsmp.c    | 1 +
> >  arch/arm/mach-imx/pm-imx6.c    | 2 ++
> >  arch/arm/mach-imx/pm-imx7ulp.c | 1 +
> >  5 files changed, 8 insertions(+)
> >
> > diff --git a/arch/arm/mach-imx/anatop.c b/arch/arm/mach-imx/anatop.c
> > index 8fb68c0..5985731 100644
> > --- a/arch/arm/mach-imx/anatop.c
> > +++ b/arch/arm/mach-imx/anatop.c
> > @@ -135,6 +135,7 @@ void __init imx_init_revision_from_anatop(void)
> >  			void __iomem *src_base;
> >  			u32 sbmr2;
> >
> > +			of_node_put(np);
> >  			np = of_find_compatible_node(NULL, NULL,
> >  						     "fsl,imx6ul-src");
> >  			src_base = of_iomap(np, 0);
> > @@ -152,6 +153,8 @@ void __init imx_init_revision_from_anatop(void)
> >
> >  	mxc_set_cpu_type(digprog >> 16 & 0xff);
> >  	imx_set_soc_revision(revision);
> > +
> > +	of_node_put(np);
> >  }
> 
> It would be a bit more natural here IMHO to introduce a second struct
> device_node * variable for the fsl,imx6ul-src device. Then each of_node_put
> would belong to exactly one of_find_compatible_node().
> (Now the of_node_put() in line 157 frees the fsl,imx6ul-src on i.MX6ULL and
> fsl,imx6q-anatop on the others.)

Make sense, please help review V3.
Thanks,
Anson

Patch
diff mbox series

diff --git a/arch/arm/mach-imx/anatop.c b/arch/arm/mach-imx/anatop.c
index 8fb68c0..5985731 100644
--- a/arch/arm/mach-imx/anatop.c
+++ b/arch/arm/mach-imx/anatop.c
@@ -135,6 +135,7 @@  void __init imx_init_revision_from_anatop(void)
 			void __iomem *src_base;
 			u32 sbmr2;
 
+			of_node_put(np);
 			np = of_find_compatible_node(NULL, NULL,
 						     "fsl,imx6ul-src");
 			src_base = of_iomap(np, 0);
@@ -152,6 +153,8 @@  void __init imx_init_revision_from_anatop(void)
 
 	mxc_set_cpu_type(digprog >> 16 & 0xff);
 	imx_set_soc_revision(revision);
+
+	of_node_put(np);
 }
 
 void __init imx_anatop_init(void)
diff --git a/arch/arm/mach-imx/gpc.c b/arch/arm/mach-imx/gpc.c
index b5b557f..07f1972 100644
--- a/arch/arm/mach-imx/gpc.c
+++ b/arch/arm/mach-imx/gpc.c
@@ -282,4 +282,5 @@  void __init imx_gpc_check_dt(void)
 		/* map GPC, so that at least CPUidle and WARs keep working */
 		gpc_base = of_iomap(np, 0);
 	}
+	of_node_put(np);
 }
diff --git a/arch/arm/mach-imx/platsmp.c b/arch/arm/mach-imx/platsmp.c
index 2aa2692..cf4e933 100644
--- a/arch/arm/mach-imx/platsmp.c
+++ b/arch/arm/mach-imx/platsmp.c
@@ -109,6 +109,7 @@  static void __init ls1021a_smp_prepare_cpus(unsigned int max_cpus)
 
 	np = of_find_compatible_node(NULL, NULL, "fsl,ls1021a-dcfg");
 	dcfg_base = of_iomap(np, 0);
+	of_node_put(np);
 	BUG_ON(!dcfg_base);
 
 	paddr = __pa_symbol(secondary_startup);
diff --git a/arch/arm/mach-imx/pm-imx6.c b/arch/arm/mach-imx/pm-imx6.c
index 1c0ecad..dd34dff 100644
--- a/arch/arm/mach-imx/pm-imx6.c
+++ b/arch/arm/mach-imx/pm-imx6.c
@@ -655,6 +655,8 @@  void __init imx6_pm_ccm_init(const char *ccm_compat)
 
 	if (of_property_read_bool(np, "fsl,pmic-stby-poweroff"))
 		imx6_pm_stby_poweroff_probe();
+
+	of_node_put(np);
 }
 
 void __init imx6q_pm_init(void)
diff --git a/arch/arm/mach-imx/pm-imx7ulp.c b/arch/arm/mach-imx/pm-imx7ulp.c
index 7b2f738..2e756d8 100644
--- a/arch/arm/mach-imx/pm-imx7ulp.c
+++ b/arch/arm/mach-imx/pm-imx7ulp.c
@@ -62,6 +62,7 @@  void __init imx7ulp_pm_init(void)
 
 	np = of_find_compatible_node(NULL, NULL, "fsl,imx7ulp-smc1");
 	smc1_base = of_iomap(np, 0);
+	of_node_put(np);
 	WARN_ON(!smc1_base);
 
 	imx7ulp_set_lpm(ULP_PM_RUN);