• Luiz Augusto von Dentz's avatar
    Bluetooth: ISO: Avoid circular locking dependency · 241f5193
    Luiz Augusto von Dentz authored
    This attempts to avoid circular locking dependency between sock_lock
    and hdev_lock:
    
    WARNING: possible circular locking dependency detected
    6.0.0-rc7-03728-g18dd8ab0a783 #3 Not tainted
    ------------------------------------------------------
    kworker/u3:2/53 is trying to acquire lock:
    ffff888000254130 (sk_lock-AF_BLUETOOTH-BTPROTO_ISO){+.+.}-{0:0}, at:
    iso_conn_del+0xbd/0x1d0
    but task is already holding lock:
    ffffffff9f39a080 (hci_cb_list_lock){+.+.}-{3:3}, at:
    hci_le_cis_estabilished_evt+0x1b5/0x500
    which lock already depends on the new lock.
    the existing dependency chain (in reverse order) is:
    -> #2 (hci_cb_list_lock){+.+.}-{3:3}:
           __mutex_lock+0x10e/0xfe0
           hci_le_remote_feat_complete_evt+0x17f/0x320
           hci_event_packet+0x39c/0x7d0
           hci_rx_work+0x2bf/0x950
           process_one_work+0x569/0x980
           worker_thread+0x2a3/0x6f0
           kthread+0x153/0x180
           ret_from_fork+0x22/0x30
    -> #1 (&hdev->lock){+.+.}-{3:3}:
           __mutex_lock+0x10e/0xfe0
           iso_connect_cis+0x6f/0x5a0
           iso_sock_connect+0x1af/0x710
           __sys_connect+0x17e/0x1b0
           __x64_sys_connect+0x37/0x50
           do_syscall_64+0x43/0x90
           entry_SYSCALL_64_after_hwframe+0x62/0xcc
    -> #0 (sk_lock-AF_BLUETOOTH-BTPROTO_ISO){+.+.}-{0:0}:
           __lock_acquire+0x1b51/0x33d0
           lock_acquire+0x16f/0x3b0
           lock_sock_nested+0x32/0x80
           iso_conn_del+0xbd/0x1d0
           iso_connect_cfm+0x226/0x680
           hci_le_cis_estabilished_evt+0x1ed/0x500
           hci_event_packet+0x39c/0x7d0
           hci_rx_work+0x2bf/0x950
           process_one_work+0x569/0x980
           worker_thread+0x2a3/0x6f0
           kthread+0x153/0x180
           ret_from_fork+0x22/0x30
    other info that might help us debug this:
    Chain exists of:
      sk_lock-AF_BLUETOOTH-BTPROTO_ISO --> &hdev->lock --> hci_cb_list_lock
     Possible unsafe locking scenario:
           CPU0                    CPU1
           ----                    ----
      lock(hci_cb_list_lock);
                                   lock(&hdev->lock);
                                   lock(hci_cb_list_lock);
      lock(sk_lock-AF_BLUETOOTH-BTPROTO_ISO);
     *** DEADLOCK ***
    4 locks held by kworker/u3:2/53:
     #0: ffff8880021d9130 ((wq_completion)hci0#2){+.+.}-{0:0}, at:
     process_one_work+0x4ad/0x980
     #1: ffff888002387de0 ((work_completion)(&hdev->rx_work)){+.+.}-{0:0},
     at: process_one_work+0x4ad/0x980
     #2: ffff888001ac0070 (&hdev->lock){+.+.}-{3:3}, at:
     hci_le_cis_estabilished_evt+0xc3/0x500
     #3: ffffffff9f39a080 (hci_cb_list_lock){+.+.}-{3:3}, at:
     hci_le_cis_estabilished_evt+0x1b5/0x500
    Signed-off-by: default avatarLuiz Augusto von Dentz <luiz.von.dentz@intel.com>
    241f5193
iso.c 36.9 KB