On Mon, 7 Oct 2013, Takashi Iwai wrote: > At Sun, 6 Oct 2013 22:31:19 +0200, > Eldad Zack wrote: > > > > Start the endpoints at prepare also for capture endpoints, > > since it might be needed to wait for the URBs to be unlinked. > > > > If an implicit feedback source endpoint stops being used by its > > sink endpoint, but immediately used as a data endpoint, usb_submit_urb > > will return -EBUSY. > > > > Merge two trigger cases since they are now the same. > This change worries me about the timing. This change means that the > capture stream isn't started at the moment the trigger callback is > called but at the next urb handling. It means a possible regression > in the case of realtime usage. I'm not sure I understand. Do you mean it might cause the delay between capture and playback to vary at each startup? > Is there any reason to do this except for clean up? IOW, does this > fix any problem by itself? Yes, I only became aware of it since I bumped into it with my test tool. Attached here - I hope the mailing list accepts attachments. I reverted the patch right now (mainline rc4 + this series) and this is the exact sequence: $ ./atest --device hw:2 stream --first 0x0038f0 atest v1 Testing device hw:2, rate 96000, range 38f0:0 * Test stream, Steps: [pcm_open] [pcm_hw_params] [pcm_prepare] [pcm_start] [waitsleep] [pcm_stop] [pcm_close] ++ Test: stream, permutation: 0x0038f0 * [1/14] playback => pcm_open * [2/14] playback => pcm_hw_params * [3/14] playback => pcm_prepare * [4/14] playback => pcm_start * [5/14] capture => pcm_open * [6/14] capture => pcm_hw_params * [7/14] capture => pcm_prepare * [8/14] capture => pcm_start * [9/14] playback => waitsleep * [10/14] playback => pcm_stop ++ Frames [playback]: 58560 * [11/14] playback => pcm_close * [12/14] capture => waitsleep * [13/14] capture => pcm_stop ++ Frames [capture]: 5760 * [14/14] capture => pcm_close ++ permutation: 0x0038f0, runtime: 0.228940 sec ++ Test: stream, permutation: 0x003907 * [1/14] capture => pcm_open * [2/14] capture => pcm_hw_params * [3/14] capture => pcm_prepare * [4/14] playback => pcm_open * [5/14] playback => pcm_hw_params * [6/14] playback => pcm_prepare * [7/14] playback => pcm_start * [8/14] playback => waitsleep * [9/14] capture => pcm_start * [10/14] playback => pcm_stop ++ Frames [playback]: 58560 * [11/14] playback => pcm_close capture_thread:209: error -32 on readi 0 ** IO Error (capture) ++ permutation: 0x003907, runtime: 0.142909 sec !! Test stream permutation 0x003907 failed !! ...and dmesg shows: snd_usb_endpoint_start: cannot submit urb 0, error -16: device busy After I removed the revert, no test fail. Cheers, Eldad