[ALSA] Fix Oops with PCM OSS sync
authorTakashi Iwai <tiwai@suse.de>
Mon, 28 Jan 2008 22:53:41 +0000 (23:53 +0100)
committerJaroslav Kysela <perex@perex.cz>
Thu, 31 Jan 2008 16:30:20 +0000 (17:30 +0100)
The PCM OSS emulation can cause Oops at sync operation due to the wrong
data size calculation.  Typically happening on Sparc64:
http://lkml.org/lkml/2008/1/24/426

Signed-off-by: Takashi Iwai <tiwai@suse.de>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
sound/core/oss/pcm_oss.c

index 092c2d84a9bc77464ec47a8303f477eef8aeba68..4c601b192ddf3feb4117186d230a73f4538f1723 100644 (file)
@@ -1621,6 +1621,7 @@ static int snd_pcm_oss_sync(struct snd_pcm_oss_file *pcm_oss_file)
                                        snd_pcm_format_set_silence(runtime->format,
                                                                   runtime->oss.buffer,
                                                                   size1);
+                                       size1 /= runtime->channels; /* frames */
                                        fs = snd_enter_user();
                                        snd_pcm_lib_write(substream, (void __user *)runtime->oss.buffer, size1);
                                        snd_leave_user(fs);