• Takashi Iwai's avatar
    ALSA: usb-audio: More strict state change in EP · 5c2b3014
    Takashi Iwai authored
    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: d0f09d1e ("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: default avatarTakashi Iwai <tiwai@suse.de>
    5c2b3014