summaryrefslogtreecommitdiff
path: root/sound
diff options
context:
space:
mode:
authorClemens Ladisch <clemens@ladisch.de>2005-05-13 05:50:28 (GMT)
committerJaroslav Kysela <perex@suse.cz>2005-05-29 08:08:53 (GMT)
commit29b16931f936fdbcd78995e66d0f5626f3afbda8 (patch)
tree938e0d682b0977d093690481a842132fb5a22718 /sound
parent50cdbf1519a891bec4ce306c7bae397a0d8e7246 (diff)
downloadlinux-fsl-qoriq-29b16931f936fdbcd78995e66d0f5626f3afbda8.tar.xz
[ALSA] usb-audio - avoid unnecessary double buffering
USB generic driver When a USB packet boundary falls exactly on a buffer boundary, hwptr remains at the end of the buffer which causes an overflow in the next iteration and triggers double buffering although the next packet would actually be contiguous. This patch ensures that hwptr is always smaller than buffer_size. Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
Diffstat (limited to 'sound')
-rw-r--r--sound/usb/usbaudio.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/sound/usb/usbaudio.c b/sound/usb/usbaudio.c
index a6ed0d0..076da19 100644
--- a/sound/usb/usbaudio.c
+++ b/sound/usb/usbaudio.c
@@ -565,6 +565,8 @@ static int prepare_playback_urb(snd_usb_substream_t *subs,
/* set the buffer pointer */
urb->transfer_buffer = runtime->dma_area + subs->hwptr * stride;
subs->hwptr += offs;
+ if (subs->hwptr == runtime->buffer_size)
+ subs->hwptr = 0;
}
spin_unlock_irqrestore(&subs->lock, flags);
urb->transfer_buffer_length = offs * stride;