Skip to content
  • Takashi Iwai's avatar
    ALSA: pcm: Call snd_pcm_unlink() conditionally at closing · ba9890ac
    Takashi Iwai authored
    
    
    commit b51abed8355e5556886623b2772fa6b7598d2282 upstream.
    
    Currently the PCM core calls snd_pcm_unlink() always unconditionally
    at closing a stream.  However, since snd_pcm_unlink() invokes the
    global rwsem down, the lock can be easily contended.  More badly, when
    a thread runs in a high priority RT-FIFO, it may stall at spinning.
    
    Basically the call of snd_pcm_unlink() is required only for the linked
    streams that are already rare occasion.  For normal use cases, this
    code path is fairly superfluous.
    
    As an optimization (and also as a workaround for the RT problem
    above in normal situations without linked streams), this patch adds a
    check before calling snd_pcm_unlink() and calls it only when needed.
    
    Reported-by: default avatarChanho Min <chanho.min@lge.com>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    ba9890ac