[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-Id: <1318909555-12933-3-git-send-email-julia@diku.dk>
Date: Tue, 18 Oct 2011 05:45:55 +0200
From: Julia Lawall <julia@...u.dk>
To: Liam Girdwood <lrg@...com>
Cc: kernel-janitors@...r.kernel.org,
Mark Brown <broonie@...nsource.wolfsonmicro.com>,
Jaroslav Kysela <perex@...ex.cz>, Takashi Iwai <tiwai@...e.de>,
Manuel Lauss <manuel.lauss@...glemail.com>,
Axel Lin <axel.lin@...il.com>, alsa-devel@...a-project.org,
linux-kernel@...r.kernel.org
Subject: [PATCH 3/3] sound/soc/au1x: keep pointer to resource so it can be freed
From: Julia Lawall <julia@...u.dk>
Add a new variable for storing resources accessed subsequent to the one
accessed using request_mem_region, so the one accessed using
request_mem_region can be released if needed.
This code is also missing some calls to iounmap.
The semantic match that finds this problem is as follows:
(http://coccinelle.lip6.fr/)
// <smpl>
@r@
expression E, E1;
identifier f;
statement S1,S2,S3;
@@
if (E == NULL)
{
... when != if (E == NULL || ...) S1 else S2
when != E = E1
*E->f
... when any
return ...;
}
else S3
// </smpl>
Signed-off-by: Julia Lawall <julia@...u.dk>
---
sound/soc/au1x/ac97c.c | 22 ++++++++++++----------
sound/soc/au1x/i2sc.c | 22 ++++++++++++----------
2 files changed, 24 insertions(+), 20 deletions(-)
diff --git a/sound/soc/au1x/ac97c.c b/sound/soc/au1x/ac97c.c
index 13802ff..0188643 100644
--- a/sound/soc/au1x/ac97c.c
+++ b/sound/soc/au1x/ac97c.c
@@ -226,7 +226,7 @@ static struct snd_soc_dai_driver au1xac97c_dai_driver = {
static int __devinit au1xac97c_drvprobe(struct platform_device *pdev)
{
int ret;
- struct resource *r;
+ struct resource *r, *r1;
struct au1xpsc_audio_data *ctx;
ctx = kzalloc(sizeof(*ctx), GFP_KERNEL);
@@ -249,15 +249,15 @@ static int __devinit au1xac97c_drvprobe(struct platform_device *pdev)
if (!ctx->mmio)
goto out1;
- r = platform_get_resource(pdev, IORESOURCE_DMA, 0);
- if (!r)
- goto out1;
- ctx->dmaids[SNDRV_PCM_STREAM_PLAYBACK] = r->start;
+ r1 = platform_get_resource(pdev, IORESOURCE_DMA, 0);
+ if (!r1)
+ goto out2;
+ ctx->dmaids[SNDRV_PCM_STREAM_PLAYBACK] = r1->start;
- r = platform_get_resource(pdev, IORESOURCE_DMA, 1);
- if (!r)
- goto out1;
- ctx->dmaids[SNDRV_PCM_STREAM_CAPTURE] = r->start;
+ r1 = platform_get_resource(pdev, IORESOURCE_DMA, 1);
+ if (!r1)
+ goto out2;
+ ctx->dmaids[SNDRV_PCM_STREAM_CAPTURE] = r1->start;
/* switch it on */
WR(ctx, AC97_ENABLE, EN_D | EN_CE);
@@ -270,11 +270,13 @@ static int __devinit au1xac97c_drvprobe(struct platform_device *pdev)
ret = snd_soc_register_dai(&pdev->dev, &au1xac97c_dai_driver);
if (ret)
- goto out1;
+ goto out2;
ac97c_workdata = ctx;
return 0;
+out2:
+ iounmap(ctx->mmio);
out1:
release_mem_region(r->start, resource_size(r));
out0:
diff --git a/sound/soc/au1x/i2sc.c b/sound/soc/au1x/i2sc.c
index 19e0d2a..3725c77 100644
--- a/sound/soc/au1x/i2sc.c
+++ b/sound/soc/au1x/i2sc.c
@@ -228,7 +228,7 @@ static struct snd_soc_dai_driver au1xi2s_dai_driver = {
static int __devinit au1xi2s_drvprobe(struct platform_device *pdev)
{
int ret;
- struct resource *r;
+ struct resource *r, *r1;
struct au1xpsc_audio_data *ctx;
ctx = kzalloc(sizeof(*ctx), GFP_KERNEL);
@@ -249,24 +249,26 @@ static int __devinit au1xi2s_drvprobe(struct platform_device *pdev)
if (!ctx->mmio)
goto out1;
- r = platform_get_resource(pdev, IORESOURCE_DMA, 0);
- if (!r)
- goto out1;
- ctx->dmaids[SNDRV_PCM_STREAM_PLAYBACK] = r->start;
+ r1 = platform_get_resource(pdev, IORESOURCE_DMA, 0);
+ if (!r1)
+ goto out2;
+ ctx->dmaids[SNDRV_PCM_STREAM_PLAYBACK] = r1->start;
- r = platform_get_resource(pdev, IORESOURCE_DMA, 1);
- if (!r)
- goto out1;
- ctx->dmaids[SNDRV_PCM_STREAM_CAPTURE] = r->start;
+ r1 = platform_get_resource(pdev, IORESOURCE_DMA, 1);
+ if (!r1)
+ goto out2;
+ ctx->dmaids[SNDRV_PCM_STREAM_CAPTURE] = r1->start;
platform_set_drvdata(pdev, ctx);
ret = snd_soc_register_dai(&pdev->dev, &au1xi2s_dai_driver);
if (ret)
- goto out1;
+ goto out2;
return 0;
+out2:
+ iounmap(ctx->mmio);
out1:
release_mem_region(r->start, resource_size(r));
out0:
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists