[alsa-devel] [PATCH] Echoaudio, fix Guru Meditation #00000005.48454C50
Takashi Iwai
tiwai at suse.de
Wed Feb 17 14:50:33 CET 2010
At Wed, 17 Feb 2010 00:57:44 +0100,
Giuliano Pochini wrote:
>
> (resend: I mistyped the list address)
>
> There is a small window between the hw_params() callback and when
> runtime->frame_bits is set by ALSA middle layer. When another substream is
> already running, if an interrupt is delivered during that window the irq
> handler calls pcm_pointer() which does a division by zero. The patch below
> makes the irq handler skip substreams that are initialized but not started
> yet. Cc to Clemens Ladisch because he proposed an alternate fix.
>
> For more information, please read the original thread in the linux-kernel
> mailing list: http://lkml.org/lkml/2010/2/2/187
>
>
> Short description: This patch fixes a division by zero error in the irq handler.
>
>
> Signed-off-by: Giuliano Pochini <pochini at shiny.it>
Applied now. Thanks.
Takashi
> --- alsa-driver-1.0.22.1/alsa-kernel/pci/echoaudio/echoaudio.c__orig 2010-02-16 22:21:36.000000000 +0100
> +++ alsa-driver-1.0.22.1/alsa-kernel/pci/echoaudio/echoaudio.c 2010-02-16 22:21:45.000000000 +0100
> @@ -1864,7 +1864,9 @@ static irqreturn_t snd_echo_interrupt(in
> /* The hardware doesn't tell us which substream caused the irq,
> thus we have to check all running substreams. */
> for (ss = 0; ss < DSP_MAXPIPES; ss++) {
> - if ((substream = chip->substream[ss])) {
> + substream = chip->substream[ss];
> + if (substream && ((struct audiopipe *)substream->runtime->
> + private_data)->state == PIPE_STATE_STARTED) {
> period = pcm_pointer(substream) /
> substream->runtime->period_size;
> if (period != chip->last_period[ss]) {
>
>
> --
> Giuliano.
>
More information about the Alsa-devel
mailing list