• Sudeep Holla's avatar
    coresight: Fix possible deadlock with lock dependency · 23722fb4
    Sudeep Holla authored
    With lockdeps enabled, we get the following warning:
    
    ======================================================
    WARNING: possible circular locking dependency detected
    ------------------------------------------------------
    kworker/u12:1/53 is trying to acquire lock:
    ffff80000adce220 (coresight_mutex){+.+.}-{4:4}, at: coresight_set_assoc_ectdev_mutex+0x3c/0x5c
    but task is already holding lock:
    ffff80000add1f60 (ect_mutex){+.+.}-{4:4}, at: cti_probe+0x318/0x394
    
    which lock already depends on the new lock.
    the existing dependency chain (in reverse order) is:
    
    -> #1 (ect_mutex){+.+.}-{4:4}:
           __mutex_lock_common+0xd8/0xe60
           mutex_lock_nested+0x44/0x50
           cti_add_assoc_to_csdev+0x4c/0x184
           coresight_register+0x2f0/0x314
           tmc_probe+0x33c/0x414
    
    -> #0 (coresight_mutex){+.+.}-{4:4}:
           __lock_acquire+0x1a20/0x32d0
           lock_acquire+0x160/0x308
           __mutex_lock_common+0xd8/0xe60
           mutex_lock_nested+0x44/0x50
           coresight_set_assoc_ectdev_mutex+0x3c/0x5c
           cti_update_conn_xrefs+0x6c/0xf8
           cti_probe+0x33c/0x394
    
    other info that might help us debug this:
     Possible unsafe locking scenario:
           CPU0                    CPU1
           ----                    ----
      lock(ect_mutex);
                                   lock(coresight_mutex);
                                   lock(ect_mutex);
      lock(coresight_mutex);
     *** DEADLOCK ***
    
    4 locks held by kworker/u12:1/53:
     #0: ((wq_completion)events_unbound){+.+.}-{0:0}, at: process_one_work+0x1fc/0x63c
     #1: (deferred_probe_work){+.+.}-{0:0}, at: process_one_work+0x228/0x63c
     #2: (&dev->mutex){....}-{4:4}, at: __device_attach+0x48/0x1a8
     #3: (ect_mutex){+.+.}-{4:4}, at: cti_probe+0x318/0x394
    
    To fix the same, call cti_add_assoc_to_csdev without the holding
    coresight_mutex and confine the locking while setting the associated
    ect / cti device using coresight_set_assoc_ectdev_mutex().
    
    Fixes: 177af828 ("coresight: cti: Enable CTI associated with devices")
    Cc: Mathieu Poirier <mathieu.poirier@linaro.org>
    Cc: Suzuki K Poulose <suzuki.poulose@arm.com>
    Cc: Mike Leach <mike.leach@linaro.org>
    Cc: Leo Yan <leo.yan@linaro.org>
    Signed-off-by: default avatarSudeep Holla <sudeep.holla@arm.com>
    Reviewed-by: default avatarMike Leach <mike.leach@linaro.org>
    Signed-off-by: default avatarSuzuki K Poulose <suzuki.poulose@arm.com>
    Link: https://lore.kernel.org/r/20220721130329.3787211-1-sudeep.holla@arm.com
    23722fb4
coresight-core.c 45.4 KB