From: tiwai@suse.de Date: Thu, 7 Apr 2005 18:15:10 +0000 (-0700) Subject: [PATCH] Fix Oops with ALSA timer event notification X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=4a0d7ce02bff4d165782d4769ab4a42d6e808e39;p=thirdparty%2Fkernel%2Fstable.git [PATCH] Fix Oops with ALSA timer event notification the patch below fixes the bug of ALSA timer notification, which is used in the recent ALSA dmix plugin. - fixed Oops in read() - fixed wake-up polls and signals with new events Signed-off-by: Takashi Iwai Signed-off-by: Chris Wright Signed-off-by: Greg Kroah-Hartman --- diff --git a/sound/core/timer.c b/sound/core/timer.c index f5ef7f5be53ae..67baf1ecc3437 100644 --- a/sound/core/timer.c +++ b/sound/core/timer.c @@ -1117,7 +1117,8 @@ static void snd_timer_user_append_to_tqueue(snd_timer_user_t *tu, snd_timer_trea if (tu->qused >= tu->queue_size) { tu->overrun++; } else { - memcpy(&tu->queue[tu->qtail++], tread, sizeof(*tread)); + memcpy(&tu->tqueue[tu->qtail++], tread, sizeof(*tread)); + tu->qtail %= tu->queue_size; tu->qused++; } } @@ -1140,6 +1141,8 @@ static void snd_timer_user_ccallback(snd_timer_instance_t *timeri, spin_lock(&tu->qlock); snd_timer_user_append_to_tqueue(tu, &r1); spin_unlock(&tu->qlock); + kill_fasync(&tu->fasync, SIGIO, POLL_IN); + wake_up(&tu->qchange_sleep); } static void snd_timer_user_tinterrupt(snd_timer_instance_t *timeri,