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/
prev parent 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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.