Re: [PATCH] sound/soc/fsl/fsl_dma.c: add missing of_node_put
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
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
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
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