[alsa-devel] snd-usb-caiaq: Locking bug fixes
Hi Takashi, I'll follow up this mail with 3 revised patches for inclusion. They fix a significant bug; Daniel has ack'd them and asked that they go into -rc if possible.
Thanks,
Fix a race which causes snd_pcm_update_hw_ptr_pos() to report a bug.
Signed-off-by: Mark Hills mark@pogo.org.uk Acked-by: Daniel Mack daniel@caiaq.de --- sound/usb/caiaq/audio.c | 12 +++++++++--- 1 files changed, 9 insertions(+), 3 deletions(-)
diff --git a/sound/usb/caiaq/audio.c b/sound/usb/caiaq/audio.c index 121af06..e76017c 100644 --- a/sound/usb/caiaq/audio.c +++ b/sound/usb/caiaq/audio.c @@ -269,16 +269,22 @@ snd_usb_caiaq_pcm_pointer(struct snd_pcm_substream *sub) { int index = sub->number; struct snd_usb_caiaqdev *dev = snd_pcm_substream_chip(sub); + snd_pcm_uframes_t ptr; + + spin_lock(&dev->spinlock);
if (dev->input_panic || dev->output_panic) - return SNDRV_PCM_POS_XRUN; + ptr = SNDRV_PCM_POS_XRUN;
if (sub->stream == SNDRV_PCM_STREAM_PLAYBACK) - return bytes_to_frames(sub->runtime, + ptr = bytes_to_frames(sub->runtime, dev->audio_out_buf_pos[index]); else - return bytes_to_frames(sub->runtime, + ptr = bytes_to_frames(sub->runtime, dev->audio_in_buf_pos[index]); + + spin_unlock(&dev->spinlock); + return ptr; }
/* operators for both playback and capture */
Fix a bug which can result in white noise from the driver after stream start or unpause.
Signed-off-by: Mark Hills mark@pogo.org.uk Acked-by: Daniel Mack daniel@caiaq.de --- sound/usb/caiaq/audio.c | 4 ++++ 1 files changed, 4 insertions(+), 0 deletions(-)
diff --git a/sound/usb/caiaq/audio.c b/sound/usb/caiaq/audio.c index e76017c..86b2c3b 100644 --- a/sound/usb/caiaq/audio.c +++ b/sound/usb/caiaq/audio.c @@ -62,10 +62,14 @@ static void activate_substream(struct snd_usb_caiaqdev *dev, struct snd_pcm_substream *sub) { + spin_lock(&dev->spinlock); + if (sub->stream == SNDRV_PCM_STREAM_PLAYBACK) dev->sub_playback[sub->number] = sub; else dev->sub_capture[sub->number] = sub; + + spin_unlock(&dev->spinlock); }
static void
Signed-off-by: Mark Hills mark@pogo.org.uk Acked-by: Daniel Mack daniel@caiaq.de --- sound/usb/caiaq/device.c | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/sound/usb/caiaq/device.c b/sound/usb/caiaq/device.c index 83e6c13..a3f02dd 100644 --- a/sound/usb/caiaq/device.c +++ b/sound/usb/caiaq/device.c @@ -35,7 +35,7 @@ #include "input.h"
MODULE_AUTHOR("Daniel Mack daniel@caiaq.de"); -MODULE_DESCRIPTION("caiaq USB audio, version 1.3.19"); +MODULE_DESCRIPTION("caiaq USB audio, version 1.3.20"); MODULE_LICENSE("GPL"); MODULE_SUPPORTED_DEVICE("{{Native Instruments, RigKontrol2}," "{Native Instruments, RigKontrol3},"
At Sat, 24 Oct 2009 12:58:45 +0100 (BST), Mark Hills wrote:
Hi Takashi, I'll follow up this mail with 3 revised patches for inclusion. They fix a significant bug; Daniel has ack'd them and asked that they go into -rc if possible.
Thanks. I've been off until the next Thursday at least, so will check and merge soon after I back to work.
thanks,
Takashi
participants (2)
-
Mark Hills
-
Takashi Iwai