• Michał Mirosław's avatar
    ALSA: pcm: fix snd_pcm_link() lockdep splat · e18035cf
    Michał Mirosław authored
    Add and use snd_pcm_stream_lock_nested() in snd_pcm_link/unlink
    implementation.  The code is fine, but generates a lockdep complaint:
    
    ============================================
    WARNING: possible recursive locking detected
    5.7.1mq+ #381 Tainted: G           O
    --------------------------------------------
    pulseaudio/4180 is trying to acquire lock:
    ffff888402d6f508 (&group->lock){-...}-{2:2}, at: snd_pcm_common_ioctl+0xda8/0xee0 [snd_pcm]
    
    but task is already holding lock:
    ffff8883f7a8cf18 (&group->lock){-...}-{2:2}, at: snd_pcm_common_ioctl+0xe4e/0xee0 [snd_pcm]
    
    other info that might help us debug this:
     Possible unsafe locking scenario:
    
           CPU0
           ----
      lock(&group->lock);
      lock(&group->lock);
    
     *** DEADLOCK ***
    
     May be due to missing lock nesting notation
    
    2 locks held by pulseaudio/4180:
     #0: ffffffffa1a05190 (snd_pcm_link_rwsem){++++}-{3:3}, at: snd_pcm_common_ioctl+0xca0/0xee0 [snd_pcm]
     #1: ffff8883f7a8cf18 (&group->lock){-...}-{2:2}, at: snd_pcm_common_ioctl+0xe4e/0xee0 [snd_pcm]
    [...]
    
    Cc: stable@vger.kernel.org
    Fixes: f57f3df0 ("ALSA: pcm: More fine-grained PCM link locking")
    Signed-off-by: default avatarMichał Mirosław <mirq-linux@rere.qmqm.pl>
    Link: https://lore.kernel.org/r/37252c65941e58473b1219ca9fab03d48f47e3e3.1591610330.git.mirq-linux@rere.qmqm.plSigned-off-by: default avatarTakashi Iwai <tiwai@suse.de>
    e18035cf
pcm_native.c 111 KB