Avoid that lockdep warning:

[ INFO: possible circular locking dependency detected ]
3.13.0-rc1+ #77 Tainted: G         C O
-------------------------------------------------------
video_source:sr/32072 is trying to acquire lock:
 (&dev->mutex#2){+.+.+.}, at: [<ffffffffa073fde3>] vb2_fop_mmap+0x33/0x90 
[videobuf2_core]

                                                but task is already holding 
lock:
 (&mm->mmap_sem){++++++}, at: [<ffffffff8117825f>] vm_mmap_pgoff+0x6f/0xc0

 Possible unsafe locking scenario:
       CPU0                    CPU1
       ----                    ----
  lock(&mm->mmap_sem);
                               lock(&dev->mutex#2);
                               lock(&mm->mmap_sem);
  lock(&dev->mutex#2);
                                                 *** DEADLOCK ***

Signed-off-by: Antti Palosaari <cr...@iki.fi>
---
 drivers/media/v4l2-core/videobuf2-core.c | 14 +++++++++++++-
 1 file changed, 13 insertions(+), 1 deletion(-)

diff --git a/drivers/media/v4l2-core/videobuf2-core.c 
b/drivers/media/v4l2-core/videobuf2-core.c
index 12df9fd..2a74295 100644
--- a/drivers/media/v4l2-core/videobuf2-core.c
+++ b/drivers/media/v4l2-core/videobuf2-core.c
@@ -2641,12 +2641,24 @@ int vb2_fop_mmap(struct file *file, struct 
vm_area_struct *vma)
        struct video_device *vdev = video_devdata(file);
        struct mutex *lock = vdev->queue->lock ? vdev->queue->lock : vdev->lock;
        int err;
+       /*
+        * FIXME: Ugly hack. Disable possible lockdep as it detects possible
+        * deadlock. "INFO: possible circular locking dependency detected"
+        */
+       lockdep_off();
 
-       if (lock && mutex_lock_interruptible(lock))
+       if (lock && mutex_lock_interruptible(lock)) {
+               lockdep_on();
                return -ERESTARTSYS;
+       }
+
        err = vb2_mmap(vdev->queue, vma);
+
        if (lock)
                mutex_unlock(lock);
+
+       lockdep_on();
+
        return err;
 }
 EXPORT_SYMBOL_GPL(vb2_fop_mmap);
-- 
1.8.4.2

--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to