Commit 1b1cc7f2 authored by Roel Kluin's avatar Roel Kluin Committed by Takashi Iwai

ALSA: riptide: postfix increment and off by one

With a postfix increment these variables are incremented beyond
CMDIF_TIMEOUT / MAX_WRITE_RETRY.
Signed-off-by: default avatarRoel Kluin <roel.kluin@gmail.com>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
parent b452e08e
...@@ -889,7 +889,7 @@ static int sendcmd(struct cmdif *cif, u32 flags, u32 cmd, u32 parm, ...@@ -889,7 +889,7 @@ static int sendcmd(struct cmdif *cif, u32 flags, u32 cmd, u32 parm,
spin_lock_irqsave(&cif->lock, irqflags); spin_lock_irqsave(&cif->lock, irqflags);
while (i++ < CMDIF_TIMEOUT && !IS_READY(cif->hwport)) while (i++ < CMDIF_TIMEOUT && !IS_READY(cif->hwport))
udelay(10); udelay(10);
if (i >= CMDIF_TIMEOUT) { if (i > CMDIF_TIMEOUT) {
err = -EBUSY; err = -EBUSY;
goto errout; goto errout;
} }
...@@ -907,8 +907,10 @@ static int sendcmd(struct cmdif *cif, u32 flags, u32 cmd, u32 parm, ...@@ -907,8 +907,10 @@ static int sendcmd(struct cmdif *cif, u32 flags, u32 cmd, u32 parm,
WRITE_PORT_ULONG(cmdport->data1, cmd); /* write cmd */ WRITE_PORT_ULONG(cmdport->data1, cmd); /* write cmd */
if ((flags & RESP) && ret) { if ((flags & RESP) && ret) {
while (!IS_DATF(cmdport) && while (!IS_DATF(cmdport) &&
time++ < CMDIF_TIMEOUT) time < CMDIF_TIMEOUT) {
udelay(10); udelay(10);
time++;
}
if (time < CMDIF_TIMEOUT) { /* read response */ if (time < CMDIF_TIMEOUT) { /* read response */
ret->retlongs[0] = ret->retlongs[0] =
READ_PORT_ULONG(cmdport->data1); READ_PORT_ULONG(cmdport->data1);
...@@ -1454,7 +1456,7 @@ static int snd_riptide_trigger(struct snd_pcm_substream *substream, int cmd) ...@@ -1454,7 +1456,7 @@ static int snd_riptide_trigger(struct snd_pcm_substream *substream, int cmd)
SEND_GPOS(cif, 0, data->id, &rptr); SEND_GPOS(cif, 0, data->id, &rptr);
udelay(1); udelay(1);
} while (i != rptr.retlongs[1] && j++ < MAX_WRITE_RETRY); } while (i != rptr.retlongs[1] && j++ < MAX_WRITE_RETRY);
if (j >= MAX_WRITE_RETRY) if (j > MAX_WRITE_RETRY)
snd_printk(KERN_ERR "Riptide: Could not stop stream!"); snd_printk(KERN_ERR "Riptide: Could not stop stream!");
break; break;
case SNDRV_PCM_TRIGGER_PAUSE_PUSH: case SNDRV_PCM_TRIGGER_PAUSE_PUSH:
...@@ -1783,7 +1785,7 @@ snd_riptide_codec_write(struct snd_ac97 *ac97, unsigned short reg, ...@@ -1783,7 +1785,7 @@ snd_riptide_codec_write(struct snd_ac97 *ac97, unsigned short reg,
SEND_SACR(cif, val, reg); SEND_SACR(cif, val, reg);
SEND_RACR(cif, reg, &rptr); SEND_RACR(cif, reg, &rptr);
} while (rptr.retwords[1] != val && i++ < MAX_WRITE_RETRY); } while (rptr.retwords[1] != val && i++ < MAX_WRITE_RETRY);
if (i == MAX_WRITE_RETRY) if (i > MAX_WRITE_RETRY)
snd_printdd("Write AC97 reg failed\n"); snd_printdd("Write AC97 reg failed\n");
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment