Re: [PATCH] sound/soc/fsl/fsl_dma.c: add missing of_node_put

2011-08-22 Thread Liam Girdwood
On 20/08/11 08:23, Julia Lawall wrote:
 From: Julia Lawall ju...@diku.dk
 
 of_parse_phandle increments the reference count of np, so this should be
 decremented before trying the next possibility.
 
 The semantic match that finds this problem is as follows:
 (http://coccinelle.lip6.fr/)
 
 // smpl
 @@
 expression e,e1,e2;
 @@
 
 *e = of_parse_phandle(...)
 ... when != of_node_put(e)
 when != true e == NULL
 when != e2 = e
 e = e1
 // /smpl
 
 Signed-off-by: Julia Lawall ju...@diku.dk
 
 ---
  sound/soc/fsl/fsl_dma.c |2 ++
  1 file changed, 2 insertions(+)
 
 diff --git a/sound/soc/fsl/fsl_dma.c b/sound/soc/fsl/fsl_dma.c
 index 0efc04a..b33271b 100644
 --- a/sound/soc/fsl/fsl_dma.c
 +++ b/sound/soc/fsl/fsl_dma.c
 @@ -880,10 +880,12 @@ static struct device_node *find_ssi_node(struct 
 device_node *dma_channel_np)
   np = of_parse_phandle(ssi_np, fsl,playback-dma, 0);
   if (np == dma_channel_np)
   return ssi_np;
 + of_node_put(np);
  
   np = of_parse_phandle(ssi_np, fsl,capture-dma, 0);
   if (np == dma_channel_np)
   return ssi_np;
 + of_node_put(np);
   }
  
   return NULL;
 

Acked-by: Liam Girdwood l...@ti.com
___
Linuxppc-dev mailing list
Linuxppc-dev@lists.ozlabs.org
https://lists.ozlabs.org/listinfo/linuxppc-dev


Re: [PATCH] sound/soc/fsl/fsl_dma.c: add missing of_node_put

2011-08-22 Thread Timur Tabi
Julia Lawall wrote:
 diff --git a/sound/soc/fsl/fsl_dma.c b/sound/soc/fsl/fsl_dma.c
 index 0efc04a..b33271b 100644
 --- a/sound/soc/fsl/fsl_dma.c
 +++ b/sound/soc/fsl/fsl_dma.c
 @@ -880,10 +880,12 @@ static struct device_node *find_ssi_node(struct 
 device_node *dma_channel_np)
   np = of_parse_phandle(ssi_np, fsl,playback-dma, 0);
   if (np == dma_channel_np)
   return ssi_np;
 + of_node_put(np);
  
   np = of_parse_phandle(ssi_np, fsl,capture-dma, 0);
   if (np == dma_channel_np)
   return ssi_np;
 + of_node_put(np);
   }

Thanks for catching the problem, Julia, but the fix is not quite correct.  My
code assumes that of_parse_phandle() doesn't claim the node, but it doesn't
actually use the node pointer, either.  All I care about is whether 'np' is
equal to dma_channel_np.  I'm not going to use 'np'.  So I think the real fix is
this:

@@ -880,10 +880,12 @@ static struct device_node *find_ssi_node(struct
device_node *dma_channel_np)
np = of_parse_phandle(ssi_np, fsl,playback-dma, 0);
+   of_node_put(np);
if (np == dma_channel_np)
return ssi_np;

np = of_parse_phandle(ssi_np, fsl,capture-dma, 0);
+   of_node_put(np);
if (np == dma_channel_np)
return ssi_np;
}

return NULL;

-- 
Timur Tabi
Linux kernel developer at Freescale

___
Linuxppc-dev mailing list
Linuxppc-dev@lists.ozlabs.org
https://lists.ozlabs.org/listinfo/linuxppc-dev


Re: [PATCH] sound/soc/fsl/fsl_dma.c: add missing of_node_put

2011-08-22 Thread Julia Lawall
On Mon, 22 Aug 2011, Timur Tabi wrote:

 Julia Lawall wrote:
  diff --git a/sound/soc/fsl/fsl_dma.c b/sound/soc/fsl/fsl_dma.c
  index 0efc04a..b33271b 100644
  --- a/sound/soc/fsl/fsl_dma.c
  +++ b/sound/soc/fsl/fsl_dma.c
  @@ -880,10 +880,12 @@ static struct device_node *find_ssi_node(struct 
  device_node *dma_channel_np)
  np = of_parse_phandle(ssi_np, fsl,playback-dma, 0);
  if (np == dma_channel_np)
  return ssi_np;
  +   of_node_put(np);
   
  np = of_parse_phandle(ssi_np, fsl,capture-dma, 0);
  if (np == dma_channel_np)
  return ssi_np;
  +   of_node_put(np);
  }
 
 Thanks for catching the problem, Julia, but the fix is not quite correct.  My
 code assumes that of_parse_phandle() doesn't claim the node, but it doesn't
 actually use the node pointer, either.  All I care about is whether 'np' is
 equal to dma_channel_np.  I'm not going to use 'np'.  So I think the real fix 
 is
 this:
 
 @@ -880,10 +880,12 @@ static struct device_node *find_ssi_node(struct
 device_node *dma_channel_np)
   np = of_parse_phandle(ssi_np, fsl,playback-dma, 0);
 + of_node_put(np);
   if (np == dma_channel_np)
   return ssi_np;
 
   np = of_parse_phandle(ssi_np, fsl,capture-dma, 0);
 + of_node_put(np);
   if (np == dma_channel_np)
   return ssi_np;
   }
 
   return NULL;

OK, that looks reasonable.

julia
___
Linuxppc-dev mailing list
Linuxppc-dev@lists.ozlabs.org
https://lists.ozlabs.org/listinfo/linuxppc-dev


[PATCH] sound/soc/fsl/fsl_dma.c: add missing of_node_put

2011-08-20 Thread Julia Lawall
From: Julia Lawall ju...@diku.dk

of_parse_phandle increments the reference count of np, so this should be
decremented before trying the next possibility.

The semantic match that finds this problem is as follows:
(http://coccinelle.lip6.fr/)

// smpl
@@
expression e,e1,e2;
@@

*e = of_parse_phandle(...)
... when != of_node_put(e)
when != true e == NULL
when != e2 = e
e = e1
// /smpl

Signed-off-by: Julia Lawall ju...@diku.dk

---
 sound/soc/fsl/fsl_dma.c |2 ++
 1 file changed, 2 insertions(+)

diff --git a/sound/soc/fsl/fsl_dma.c b/sound/soc/fsl/fsl_dma.c
index 0efc04a..b33271b 100644
--- a/sound/soc/fsl/fsl_dma.c
+++ b/sound/soc/fsl/fsl_dma.c
@@ -880,10 +880,12 @@ static struct device_node *find_ssi_node(struct 
device_node *dma_channel_np)
np = of_parse_phandle(ssi_np, fsl,playback-dma, 0);
if (np == dma_channel_np)
return ssi_np;
+   of_node_put(np);
 
np = of_parse_phandle(ssi_np, fsl,capture-dma, 0);
if (np == dma_channel_np)
return ssi_np;
+   of_node_put(np);
}
 
return NULL;

___
Linuxppc-dev mailing list
Linuxppc-dev@lists.ozlabs.org
https://lists.ozlabs.org/listinfo/linuxppc-dev