]> git.baikalelectronics.ru Git - kernel.git/commit
ALSA: usb-audio: More strict state change in EP
authorTakashi Iwai <tiwai@suse.de>
Sat, 6 Feb 2021 20:30:51 +0000 (21:30 +0100)
committerTakashi Iwai <tiwai@suse.de>
Mon, 8 Feb 2021 15:00:06 +0000 (16:00 +0100)
commit41c63f0053622c6c8aebbeb6f7a933d3ccc4773f
treeb836b5bc2b61a7d0f8e49d8bfebf323615d79393
parent1a2e15c546bfbbbbc049ede090fb0613c907cde1
ALSA: usb-audio: More strict state change in EP

The endpoint management has bit flags to indicate the current state,
and we're dealing two things: the running bit and the stopping bit.
There is a thin window in transition from the running to the stopping
in stop_urbs(), and as long as the bit flags are used, it's difficult
to plug.

This patch modifies the state management code to use the atomic int
and follow the explicit three states, STOPPED, RUNNING and STOPPING.
The state change is done via atomic_cmpxhg() for avoiding possible
races, and check the state change more strictly.  The unexpected state
change is now handled as an error.

Fixes: d8c013378449 ("ALSA: usb-audio: Refactoring endpoint URB deactivation")
Cc: <stable@vger.kernel.org>
Link: https://lore.kernel.org/r/20210206203052.15606-3-tiwai@suse.de
Signed-off-by: Takashi Iwai <tiwai@suse.de>
sound/usb/card.h
sound/usb/endpoint.c