ALSA: snd-usb: Fix URB cancellation at stream start
Commit e9ba389c5
("ALSA: usb-audio: Fix scheduling-while-atomic bug in
PCM capture stream") fixed a scheduling-while-atomic bug that happened
when snd_usb_endpoint_start was called from the trigger callback, which
is an atmic context. However, the patch breaks the idea of the endpoints
reference counting, which is the reason why the driver has been
refactored lately.
Revert that commit and let snd_usb_endpoint_start() take care of the URB
cancellation again. As this function is called from both atomic and
non-atomic context, add a flag to denote whether the function may sleep.
Signed-off-by: Daniel Mack <zonque@gmail.com>
Cc: stable@kernel.org [3.5+]
Signed-off-by: Takashi Iwai <tiwai@suse.de>
This commit is contained in:

committed by
Takashi Iwai

parent
c36b5b054a
commit
015618b902
@@ -13,7 +13,7 @@ int snd_usb_endpoint_set_params(struct snd_usb_endpoint *ep,
|
||||
struct audioformat *fmt,
|
||||
struct snd_usb_endpoint *sync_ep);
|
||||
|
||||
int snd_usb_endpoint_start(struct snd_usb_endpoint *ep);
|
||||
int snd_usb_endpoint_start(struct snd_usb_endpoint *ep, int can_sleep);
|
||||
void snd_usb_endpoint_stop(struct snd_usb_endpoint *ep,
|
||||
int force, int can_sleep, int wait);
|
||||
int snd_usb_endpoint_activate(struct snd_usb_endpoint *ep);
|
||||
|
Reference in New Issue
Block a user