| From stable-bounces@linux.kernel.org Tue Mar 29 10:16:52 2005 |
| Date: Tue, 29 Mar 2005 20:16:27 +0200 |
| From: Takashi Iwai <tiwai@suse.de> |
| To: stable@kernel.org |
| Subject: [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 <tiwai@suse.de> |
| Signed-off-by: Chris Wright <chrisw@osdl.org> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> |
| |
| --- linux/sound/core/timer.c 20 Jan 2005 17:37:00 -0000 1.50 |
| +++ linux/sound/core/timer.c 14 Mar 2005 22:07:32 -0000 |
| @@ -1117,7 +1117,8 @@ |
| 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 @@ |
| 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, |