]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/blame - releases/3.11.6/alsa-snd-usb-usx2y-remove-bogus-frame-checks.patch
4.14-stable patches
[thirdparty/kernel/stable-queue.git] / releases / 3.11.6 / alsa-snd-usb-usx2y-remove-bogus-frame-checks.patch
CommitLineData
9ae184f0
GKH
1From a9d14bc0b188a822e42787d01e56c06fe9750162 Mon Sep 17 00:00:00 2001
2From: Daniel Mack <zonque@gmail.com>
3Date: Wed, 2 Oct 2013 17:49:50 +0200
4Subject: ALSA: snd-usb-usx2y: remove bogus frame checks
5
6From: Daniel Mack <zonque@gmail.com>
7
8commit a9d14bc0b188a822e42787d01e56c06fe9750162 upstream.
9
10The frame check in i_usX2Y_urb_complete() and
11i_usX2Y_usbpcm_urb_complete() is bogus and produces false positives as
12described in this LAU thread:
13
14 http://linuxaudio.org/mailarchive/lau/2013/5/20/200177
15
16This patch removes the check code entirely.
17
18Cc: fzu@wemgehoertderstaat.de
19Reported-by: Dr Nicholas J Bailey <nicholas.bailey@glasgow.ac.uk>
20Suggested-by: Takashi Iwai <tiwai@suse.de>
21Signed-off-by: Daniel Mack <zonque@gmail.com>
22Signed-off-by: Takashi Iwai <tiwai@suse.de>
23Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
24
25---
26 sound/usb/usx2y/usbusx2yaudio.c | 22 +++-------------------
27 sound/usb/usx2y/usx2yhwdeppcm.c | 7 +------
28 2 files changed, 4 insertions(+), 25 deletions(-)
29
30--- a/sound/usb/usx2y/usbusx2yaudio.c
31+++ b/sound/usb/usx2y/usbusx2yaudio.c
32@@ -299,19 +299,6 @@ static void usX2Y_error_urb_status(struc
33 usX2Y_clients_stop(usX2Y);
34 }
35
36-static void usX2Y_error_sequence(struct usX2Ydev *usX2Y,
37- struct snd_usX2Y_substream *subs, struct urb *urb)
38-{
39- snd_printk(KERN_ERR
40-"Sequence Error!(hcd_frame=%i ep=%i%s;wait=%i,frame=%i).\n"
41-"Most probably some urb of usb-frame %i is still missing.\n"
42-"Cause could be too long delays in usb-hcd interrupt handling.\n",
43- usb_get_current_frame_number(usX2Y->dev),
44- subs->endpoint, usb_pipein(urb->pipe) ? "in" : "out",
45- usX2Y->wait_iso_frame, urb->start_frame, usX2Y->wait_iso_frame);
46- usX2Y_clients_stop(usX2Y);
47-}
48-
49 static void i_usX2Y_urb_complete(struct urb *urb)
50 {
51 struct snd_usX2Y_substream *subs = urb->context;
52@@ -328,12 +315,9 @@ static void i_usX2Y_urb_complete(struct
53 usX2Y_error_urb_status(usX2Y, subs, urb);
54 return;
55 }
56- if (likely((urb->start_frame & 0xFFFF) == (usX2Y->wait_iso_frame & 0xFFFF)))
57- subs->completed_urb = urb;
58- else {
59- usX2Y_error_sequence(usX2Y, subs, urb);
60- return;
61- }
62+
63+ subs->completed_urb = urb;
64+
65 {
66 struct snd_usX2Y_substream *capsubs = usX2Y->subs[SNDRV_PCM_STREAM_CAPTURE],
67 *playbacksubs = usX2Y->subs[SNDRV_PCM_STREAM_PLAYBACK];
68--- a/sound/usb/usx2y/usx2yhwdeppcm.c
69+++ b/sound/usb/usx2y/usx2yhwdeppcm.c
70@@ -244,13 +244,8 @@ static void i_usX2Y_usbpcm_urb_complete(
71 usX2Y_error_urb_status(usX2Y, subs, urb);
72 return;
73 }
74- if (likely((urb->start_frame & 0xFFFF) == (usX2Y->wait_iso_frame & 0xFFFF)))
75- subs->completed_urb = urb;
76- else {
77- usX2Y_error_sequence(usX2Y, subs, urb);
78- return;
79- }
80
81+ subs->completed_urb = urb;
82 capsubs = usX2Y->subs[SNDRV_PCM_STREAM_CAPTURE];
83 capsubs2 = usX2Y->subs[SNDRV_PCM_STREAM_CAPTURE + 2];
84 playbacksubs = usX2Y->subs[SNDRV_PCM_STREAM_PLAYBACK];