ALSA: pcm - Reset invalid position even without debug option
Always reset the invalind hw_ptr position returned by the pointer callback. The behavior should be consitent independently from the debug option. Also, add the printk_ratelimit() check to avoid flooding debug prints. Signed-off-by: Takashi Iwai <tiwai@suse.de>
This commit is contained in:
parent
98204646f2
commit
5f513e1197
1 changed files with 7 additions and 3 deletions
|
@ -159,11 +159,15 @@ snd_pcm_update_hw_ptr_pos(struct snd_pcm_substream *substream,
|
||||||
pos = substream->ops->pointer(substream);
|
pos = substream->ops->pointer(substream);
|
||||||
if (pos == SNDRV_PCM_POS_XRUN)
|
if (pos == SNDRV_PCM_POS_XRUN)
|
||||||
return pos; /* XRUN */
|
return pos; /* XRUN */
|
||||||
#ifdef CONFIG_SND_DEBUG
|
|
||||||
if (pos >= runtime->buffer_size) {
|
if (pos >= runtime->buffer_size) {
|
||||||
snd_printk(KERN_ERR "BUG: stream = %i, pos = 0x%lx, buffer size = 0x%lx, period size = 0x%lx\n", substream->stream, pos, runtime->buffer_size, runtime->period_size);
|
if (printk_ratelimit()) {
|
||||||
|
snd_printd(KERN_ERR "BUG: stream = %i, pos = 0x%lx, "
|
||||||
|
"buffer size = 0x%lx, period size = 0x%lx\n",
|
||||||
|
substream->stream, pos, runtime->buffer_size,
|
||||||
|
runtime->period_size);
|
||||||
|
}
|
||||||
|
pos = 0;
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
pos -= pos % runtime->min_align;
|
pos -= pos % runtime->min_align;
|
||||||
return pos;
|
return pos;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue