• Vincent Whitchurch's avatar
    iio: Use per-device lockdep class for mlock · 2bc9cd66
    Vincent Whitchurch authored
    If an IIO driver uses callbacks from another IIO driver and calls
    iio_channel_start_all_cb() from one of its buffer setup ops, then
    lockdep complains due to the lock nesting, as in the below example with
    lmp91000.
    
    Since the locks are being taken on different IIO devices, there is no
    actual deadlock.  Fix the warning by telling lockdep to use a different
    class for each iio_device.
    
     ============================================
     WARNING: possible recursive locking detected
     --------------------------------------------
     python3/23 is trying to acquire lock:
     (&indio_dev->mlock){+.+.}-{3:3}, at: iio_update_buffers
    
     but task is already holding lock:
     (&indio_dev->mlock){+.+.}-{3:3}, at: enable_store
    
     other info that might help us debug this:
      Possible unsafe locking scenario:
    
            CPU0
            ----
       lock(&indio_dev->mlock);
       lock(&indio_dev->mlock);
    
      *** DEADLOCK ***
    
      May be due to missing lock nesting notation
    
     5 locks held by python3/23:
      #0: (sb_writers#5){.+.+}-{0:0}, at: ksys_write
      #1: (&of->mutex){+.+.}-{3:3}, at: kernfs_fop_write_iter
      #2: (kn->active#14){.+.+}-{0:0}, at: kernfs_fop_write_iter
      #3: (&indio_dev->mlock){+.+.}-{3:3}, at: enable_store
      #4: (&iio_dev_opaque->info_exist_lock){+.+.}-{3:3}, at: iio_update_buffers
    
     Call Trace:
      __mutex_lock
      iio_update_buffers
      iio_channel_start_all_cb
      lmp91000_buffer_postenable
      __iio_update_buffers
      enable_store
    
    Fixes: 67e17300 ("iio: potentiostat: add LMP91000 support")
    Signed-off-by: default avatarVincent Whitchurch <vincent.whitchurch@axis.com>
    Reviewed-by: default avatarAndy Shevchenko <andy.shevchenko@gmail.com>
    Link: https://lore.kernel.org/r/20220829091840.2791846-1-vincent.whitchurch@axis.comSigned-off-by: default avatarJonathan Cameron <Jonathan.Cameron@huawei.com>
    2bc9cd66
industrialio-core.c 53.6 KB