public inbox for linux-media@vger.kernel.org
 help / color / mirror / Atom feed
From: Antti Palosaari <crope@iki.fi>
To: Hans Verkuil <hverkuil@xs4all.nl>
Cc: linux-media@vger.kernel.org
Subject: Re: [PATCH 6/6] v4l: disable lockdep on vb2_fop_mmap()
Date: Fri, 17 Jan 2014 17:14:17 +0200	[thread overview]
Message-ID: <52D948C9.60807@iki.fi> (raw)
In-Reply-To: <52D90012.6080608@xs4all.nl>

Hi Hans

On 17.01.2014 12:04, Hans Verkuil wrote:
> Hi Antti,
>
> Is this still needed after this commit was merged?
>
> http://git.linuxtv.org/media_tree.git/commit/b18a8ff29d80b132018d33479e86ab8ecaee6b46

It didn't fix the problem.

I could reproduce that issue easily using vivi and Cheese (webcam app).

1) Compile Kernel with lockdep debug. For me these seems to be enabled:
CONFIG_LOCKDEP_SUPPORT=y
CONFIG_LOCKDEP=y
CONFIG_DEBUG_LOCKDEP=y

2) Load virtual video driver (vivi)
# modprobe vivi

3) Start Cheese
$ cheese

Lockdep error appears to system log just after Cheese is started. I 
think it is related to mmap.

regards
Antti


tammi 17 17:07:38 localhost.localdomain kernel: media: Linux media 
interface: v0.10
tammi 17 17:07:38 localhost.localdomain kernel: Linux video capture 
interface: v2.00
tammi 17 17:07:38 localhost.localdomain kernel: vivi-000: V4L2 device 
registered as video0
tammi 17 17:07:38 localhost.localdomain kernel: Video Technology 
Magazine Virtual Video Capture Board ver 0.8.1 successfully loaded.
tammi 17 17:07:50 localhost.localdomain /etc/gdm/Xsession[1521]: Window 
manager warning: Buggy client sent a _NET_ACTIVE_WINDOW message with a 
timestamp of 0 for 0x3200024 (Cheese)
tammi 17 17:07:50 localhost.localdomain /etc/gdm/Xsession[1521]: Window 
manager warning: meta_window_activate called by a pager with a 0 
timestamp; the pager needs to be fixed.
tammi 17 17:07:50 localhost.localdomain kernel: tammi 17 17:07:50 
localhost.localdomain kernel: 
======================================================
tammi 17 17:07:50 localhost.localdomain kernel: [ INFO: possible 
circular locking dependency detected ]
tammi 17 17:07:50 localhost.localdomain kernel: 3.13.0-rc1+ #79 Tainted: 
G         C O
tammi 17 17:07:50 localhost.localdomain kernel: 
-------------------------------------------------------
tammi 17 17:07:50 localhost.localdomain kernel: video_source:sr/8871 is 
trying to acquire lock:
tammi 17 17:07:50 localhost.localdomain kernel: 
(&dev->mutex#2){+.+.+.}, at: [<ffffffffa06a8df3>] vb2_fop_mmap+0x33/0x90 
[videobuf2_core]
tammi 17 17:07:50 localhost.localdomain kernel:
                                                 but task is already 
holding lock:
tammi 17 17:07:50 localhost.localdomain kernel: 
(&mm->mmap_sem){++++++}, at: [<ffffffff8117825f>] vm_mmap_pgoff+0x6f/0xc0
tammi 17 17:07:50 localhost.localdomain kernel:
                                                 which lock already 
depends on the new lock.
tammi 17 17:07:50 localhost.localdomain kernel:
                                                 the existing dependency 
chain (in reverse order) is:
tammi 17 17:07:50 localhost.localdomain kernel:
                                                 -> #1 
(&mm->mmap_sem){++++++}:
tammi 17 17:07:50 localhost.localdomain kernel: 
[<ffffffff810bb386>] __lock_acquire+0x3d6/0xc40
tammi 17 17:07:50 localhost.localdomain kernel: 
[<ffffffff810bbca0>] lock_acquire+0xb0/0x150
tammi 17 17:07:50 localhost.localdomain kernel: 
[<ffffffff81181f3c>] might_fault+0x8c/0xb0
tammi 17 17:07:50 localhost.localdomain kernel: 
[<ffffffffa067dc15>] video_usercopy+0x375/0x5e0 [videodev]
tammi 17 17:07:50 localhost.localdomain kernel: 
[<ffffffffa067de95>] video_ioctl2+0x15/0x20 [videodev]
tammi 17 17:07:50 localhost.localdomain kernel: 
[<ffffffffa0677703>] v4l2_ioctl+0x123/0x160 [videodev]
tammi 17 17:07:50 localhost.localdomain kernel: 
[<ffffffff811e0590>] do_vfs_ioctl+0x300/0x520
tammi 17 17:07:50 localhost.localdomain kernel: 
[<ffffffff811e0831>] SyS_ioctl+0x81/0xa0
tammi 17 17:07:50 localhost.localdomain kernel: 
[<ffffffff816ca729>] system_call_fastpath+0x16/0x1b
tammi 17 17:07:50 localhost.localdomain kernel:
                                                 -> #0 
(&dev->mutex#2){+.+.+.}:
tammi 17 17:07:50 localhost.localdomain kernel: 
[<ffffffff810b96b7>] validate_chain.isra.36+0x10d7/0x1130
tammi 17 17:07:50 localhost.localdomain kernel: 
[<ffffffff810bb386>] __lock_acquire+0x3d6/0xc40
tammi 17 17:07:50 localhost.localdomain kernel: 
[<ffffffff810bbca0>] lock_acquire+0xb0/0x150
tammi 17 17:07:50 localhost.localdomain kernel: 
[<ffffffff816bf1c7>] mutex_lock_interruptible_nested+0x77/0x460
tammi 17 17:07:50 localhost.localdomain kernel: 
[<ffffffffa06a8df3>] vb2_fop_mmap+0x33/0x90 [videobuf2_core]
tammi 17 17:07:50 localhost.localdomain kernel: 
[<ffffffffa067711a>] v4l2_mmap+0x5a/0xa0 [videodev]
tammi 17 17:07:50 localhost.localdomain kernel: 
[<ffffffff8118da7d>] mmap_region+0x3cd/0x5a0
tammi 17 17:07:50 localhost.localdomain kernel: 
[<ffffffff8118dfa7>] do_mmap_pgoff+0x357/0x3e0
tammi 17 17:07:50 localhost.localdomain kernel: 
[<ffffffff81178280>] vm_mmap_pgoff+0x90/0xc0
tammi 17 17:07:50 localhost.localdomain kernel: 
[<ffffffff8118c553>] SyS_mmap_pgoff+0x1d3/0x270
tammi 17 17:07:50 localhost.localdomain kernel: 
[<ffffffff810191a2>] SyS_mmap+0x22/0x30
tammi 17 17:07:50 localhost.localdomain kernel: 
[<ffffffff816ca729>] system_call_fastpath+0x16/0x1b
tammi 17 17:07:50 localhost.localdomain kernel:
                                                 other info that might 
help us debug this:
tammi 17 17:07:50 localhost.localdomain kernel:  Possible unsafe locking 
scenario:
tammi 17 17:07:50 localhost.localdomain kernel:        CPU0 
        CPU1
tammi 17 17:07:50 localhost.localdomain kernel:        ---- 
        ----
tammi 17 17:07:50 localhost.localdomain kernel:   lock(&mm->mmap_sem);
tammi 17 17:07:50 localhost.localdomain kernel: 
        lock(&dev->mutex#2);
tammi 17 17:07:50 localhost.localdomain kernel: 
        lock(&mm->mmap_sem);
tammi 17 17:07:50 localhost.localdomain kernel:   lock(&dev->mutex#2);
tammi 17 17:07:50 localhost.localdomain kernel:
                                                  *** DEADLOCK ***
tammi 17 17:07:50 localhost.localdomain kernel: 1 lock held by 
video_source:sr/8871:
tammi 17 17:07:50 localhost.localdomain kernel:  #0: 
(&mm->mmap_sem){++++++}, at: [<ffffffff8117825f>] vm_mmap_pgoff+0x6f/0xc0
tammi 17 17:07:50 localhost.localdomain kernel:
                                                 stack backtrace:
tammi 17 17:07:50 localhost.localdomain kernel: CPU: 3 PID: 8871 Comm: 
video_source:sr Tainted: G         C O 3.13.0-rc1+ #79
tammi 17 17:07:50 localhost.localdomain kernel: Hardware name: System 
manufacturer System Product Name/M5A78L-M/USB3, BIOS 1801    11/12/2013
tammi 17 17:07:50 localhost.localdomain kernel:  ffffffff824f9bd0 
ffff880083075b68 ffffffff816b8da9 ffffffff824f9bd0
tammi 17 17:07:50 localhost.localdomain kernel:  ffff880083075ba8 
ffffffff816b2c9b ffff880083075be0 0000000000000000
tammi 17 17:07:50 localhost.localdomain kernel:  ffff8801ee6fc378 
0000000000000001 ffff8801ee6fbcf0 ffff8801ee6fc378
tammi 17 17:07:50 localhost.localdomain kernel: Call Trace:
tammi 17 17:07:50 localhost.localdomain kernel:  [<ffffffff816b8da9>] 
dump_stack+0x4d/0x66
tammi 17 17:07:50 localhost.localdomain kernel:  [<ffffffff816b2c9b>] 
print_circular_bug+0x200/0x20e
tammi 17 17:07:50 localhost.localdomain kernel:  [<ffffffff810b96b7>] 
validate_chain.isra.36+0x10d7/0x1130
tammi 17 17:07:50 localhost.localdomain kernel:  [<ffffffff810bb3a7>] ? 
__lock_acquire+0x3f7/0xc40
tammi 17 17:07:50 localhost.localdomain kernel:  [<ffffffff8101c413>] ? 
native_sched_clock+0x13/0x80
tammi 17 17:07:50 localhost.localdomain kernel:  [<ffffffff810bb386>] 
__lock_acquire+0x3d6/0xc40
tammi 17 17:07:50 localhost.localdomain kernel:  [<ffffffff8101c413>] ? 
native_sched_clock+0x13/0x80
tammi 17 17:07:50 localhost.localdomain kernel:  [<ffffffff8101c489>] ? 
sched_clock+0x9/0x10
tammi 17 17:07:50 localhost.localdomain kernel:  [<ffffffff810bbca0>] 
lock_acquire+0xb0/0x150
tammi 17 17:07:50 localhost.localdomain kernel:  [<ffffffffa06a8df3>] ? 
vb2_fop_mmap+0x33/0x90 [videobuf2_core]
tammi 17 17:07:50 localhost.localdomain kernel:  [<ffffffff816bf1c7>] 
mutex_lock_interruptible_nested+0x77/0x460
tammi 17 17:07:50 localhost.localdomain kernel:  [<ffffffffa06a8df3>] ? 
vb2_fop_mmap+0x33/0x90 [videobuf2_core]
tammi 17 17:07:50 localhost.localdomain kernel:  [<ffffffffa06a8df3>] ? 
vb2_fop_mmap+0x33/0x90 [videobuf2_core]
tammi 17 17:07:50 localhost.localdomain kernel:  [<ffffffffa06a8df3>] 
vb2_fop_mmap+0x33/0x90 [videobuf2_core]
tammi 17 17:07:50 localhost.localdomain kernel:  [<ffffffffa067711a>] 
v4l2_mmap+0x5a/0xa0 [videodev]
tammi 17 17:07:50 localhost.localdomain kernel:  [<ffffffff8118da7d>] 
mmap_region+0x3cd/0x5a0
tammi 17 17:07:50 localhost.localdomain kernel:  [<ffffffff8118dfa7>] 
do_mmap_pgoff+0x357/0x3e0
tammi 17 17:07:50 localhost.localdomain kernel:  [<ffffffff81178280>] 
vm_mmap_pgoff+0x90/0xc0
tammi 17 17:07:50 localhost.localdomain kernel:  [<ffffffff8118c553>] 
SyS_mmap_pgoff+0x1d3/0x270
tammi 17 17:07:50 localhost.localdomain kernel:  [<ffffffff810191a2>] 
SyS_mmap+0x22/0x30
tammi 17 17:07:50 localhost.localdomain kernel:  [<ffffffff816ca729>] 
system_call_fastpath+0x16/0x1b





>
> Regards,
>
> 	Hans
>
> On 12/29/2013 05:51 AM, Antti Palosaari wrote:
>> 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 <crope@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);
>>
>


-- 
http://palosaari.fi/

      reply	other threads:[~2014-01-17 15:14 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-12-29  4:51 [PATCH 0/6] convert drivers to SDR API Antti Palosaari
2013-12-29  4:51 ` [PATCH 1/6] rtl2832_sdr: convert " Antti Palosaari
2013-12-29  4:51 ` [PATCH 2/6] msi3101: " Antti Palosaari
2013-12-29  4:51 ` [PATCH 3/6] msi3101: add u8 sample format Antti Palosaari
2014-01-05 12:14   ` Hans Verkuil
2014-01-14  1:46     ` Antti Palosaari
2013-12-29  4:51 ` [PATCH 4/6] msi3101: add u16 LE " Antti Palosaari
2013-12-29  4:51 ` [PATCH 5/6] msi3101: tons of small changes Antti Palosaari
2013-12-29  4:51 ` [PATCH 6/6] v4l: disable lockdep on vb2_fop_mmap() Antti Palosaari
2014-01-17 10:04   ` Hans Verkuil
2014-01-17 15:14     ` Antti Palosaari [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=52D948C9.60807@iki.fi \
    --to=crope@iki.fi \
    --cc=hverkuil@xs4all.nl \
    --cc=linux-media@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox