At Wed, 26 May 2010 17:59:27 +0200 (CEST), Julia Lawall wrote:
From: Julia Lawall julia@diku.dk
Add a spin_unlock missing on the error path.
The semantic match that finds this problem is as follows: (http://coccinelle.lip6.fr/)
// <smpl> @@ expression E1; @@
- spin_lock(E1,...); <+... when != E1 if (...) { ... when != E1
- return ...; } ...+>
- spin_unlock(E1,...);
// </smpl>
Signed-off-by: Julia Lawall julia@diku.dk
Thanks, applied now.
Takashi
sound/mips/au1x00.c | 1 + sound/oss/dmasound/dmasound_atari.c | 5 +++-- 2 files changed, 4 insertions(+), 2 deletions(-)
diff --git a/sound/mips/au1x00.c b/sound/mips/au1x00.c index 3e763d6..446cf97 100644 --- a/sound/mips/au1x00.c +++ b/sound/mips/au1x00.c @@ -516,6 +516,7 @@ get the interrupt driven case to work efficiently */ break; if (i == 0x5000) { printk(KERN_ERR "au1000 AC97: AC97 command read timeout\n");
return 0; }spin_unlock(&au1000->ac97_lock);
diff --git a/sound/oss/dmasound/dmasound_atari.c b/sound/oss/dmasound/dmasound_atari.c index 1f47741..13c2144 100644 --- a/sound/oss/dmasound/dmasound_atari.c +++ b/sound/oss/dmasound/dmasound_atari.c @@ -1277,7 +1277,7 @@ static irqreturn_t AtaInterrupt(int irq, void *dummy) * (almost) like on the TT. */ write_sq_ignore_int = 0;
return IRQ_HANDLED;
goto out;
}
if (!write_sq.active) {
@@ -1285,7 +1285,7 @@ static irqreturn_t AtaInterrupt(int irq, void *dummy) * the sq variables, so better don't do anything here. */ WAKE_UP(write_sq.sync_queue);
return IRQ_HANDLED;
goto out;
}
/* Probably ;) one frame is finished. Well, in fact it may be that a
@@ -1322,6 +1322,7 @@ static irqreturn_t AtaInterrupt(int irq, void *dummy) /* We are not playing after AtaPlay(), so there is nothing to play any more. Wake up a process waiting for audio output to drain. */ +out: spin_unlock(&dmasound.lock); return IRQ_HANDLED; }