[PATCH] coresight: Fix possible deadlock with lock dependency

Suzuki K Poulose suzuki.poulose at arm.com
Wed Oct 5 02:35:10 PDT 2022


On 21/07/2022 14:03, Sudeep Holla wrote:
> 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().
> 
> Cc: Mathieu Poirier <mathieu.poirier at linaro.org>
> Cc: Suzuki K Poulose <suzuki.poulose at arm.com>
> Cc: Mike Leach <mike.leach at linaro.org>
> Cc: Leo Yan <leo.yan at linaro.org>
> Signed-off-by: Sudeep Holla <sudeep.holla at arm.com>

Thanks for the fix. I will push this out at rc1 as fixes.

Thanks
Suzuki



More information about the linux-arm-kernel mailing list