Re: [ 3960.758784] 1 lock held by motion/7776: [ 3960.758788] #0: (queue-mutex){......}, at: [ffffffff815c62d2] uvc_queue_enable+0x32/0xc0

2012-05-07 Thread Laurent Pinchart
Hi Sanser,

On Sunday 06 May 2012 16:54:40 Sander Eikelenboom wrote:
 Hello Laurent / Mauro,
 
 I have updated to latest 3.4-rc5-tip, running multiple video grabbers.
 I don't see anything specific to uvcvideo anymore, but i do get the possible
 circular locking dependency below.

Thanks for the report.

We indeed have a serious issue there (CC'ing Hans Verkuil).

Hans, serializing both ioctl handling an mmap with a single device lock as we 
currently do in V4L2 is prone to AB-BA deadlocks (uvcvideo shouldn't be 
affected as it has no device-wide lock).

If we want to keep a device-wide lock we need to take it after the mm-
mmap_sem lock in all code paths, as there's no way we can change the lock 
ordering for mmap(). The copy_from_user/copy_to_user issue could be solved by 
moving locking from v4l2_ioctl to __video_do_ioctl (device-wide locks would 
then require using video_ioctl2), but I'm not sure whether that will play 
nicely with the QBUF implementation in videobuf2 (which already includes a 
workaround for this particular AB-BA deadlock issue).

 [   96.257129] ==
 [   96.257129] [ INFO: possible circular locking dependency detected ]
 [   96.257129] 3.4.0-rc5-20120506+ #4 Not tainted
 [   96.257129] ---
 [   96.257129] motion/2289 is trying to acquire lock:
 [   96.257129]  (dev-lock){+.+.+.}, at: [8156c04c]
 v4l2_mmap+0xbc/0xd0
 [   96.257129]
 [   96.257129] but task is already holding lock:
 [   96.257129]  (mm-mmap_sem){++}, at: [81113cca]
 sys_mmap_pgoff+0x1ca/0x220
 [   96.257129]
 [   96.257129] which lock already depends on the new lock.
 [   96.257129]
 [   96.257129]
 [   96.257129] the existing dependency chain (in reverse order) is:
 [   96.257129]
 [   96.257129] - #1 (mm-mmap_sem){++}:
 [   96.257129][810aa972] __lock_acquire+0x3a2/0xc50
 [   96.257129][810ab2e8] lock_acquire+0xc8/0x110
 [   96.257129][81108cb8] might_fault+0x68/0x90
 [   96.257129][8156d2a1] video_usercopy+0x1d1/0x4e0
 [   96.257129][8156d5c0] video_ioctl2+0x10/0x20
 [   96.257129][8156c110] v4l2_ioctl+0xb0/0x180
 [   96.257129][8114dc3c] do_vfs_ioctl+0x9c/0x580
 [   96.257129][8114e16a] sys_ioctl+0x4a/0x80
 [   96.257129][81813039] system_call_fastpath+0x16/0x1b
 [   96.257129]
 [   96.257129] - #0 (dev-lock){+.+.+.}:
 [   96.257129][810aa529] validate_chain+0x1259/0x1300
 [   96.257129][810aa972] __lock_acquire+0x3a2/0xc50
 [   96.257129][810ab2e8] lock_acquire+0xc8/0x110
 [   96.257129][8180e58c]
 mutex_lock_interruptible_nested+0x5c/0x550
 [   96.257129][8156c04c] v4l2_mmap+0xbc/0xd0
 [   96.257129][8111359a] mmap_region+0x3da/0x5a0
 [   96.257129][81113ab4] do_mmap_pgoff+0x354/0x3a0
 [   96.257129][81113ce9] sys_mmap_pgoff+0x1e9/0x220
 [   96.257129][81011ee9] sys_mmap+0x29/0x30
 [   96.257129][81813039] system_call_fastpath+0x16/0x1b
 [   96.257129]
 [   96.257129] other info that might help us debug this:
 [   96.257129]
 [   96.257129]  Possible unsafe locking scenario:
 [   96.257129]
 [   96.257129]CPU0CPU1
 [   96.257129]
 [   96.257129]   lock(mm-mmap_sem);
 [   96.257129]lock(dev-lock);
 [   96.257129]lock(mm-mmap_sem);
 [   96.257129]   lock(dev-lock);
 [   96.257129]
 [   96.257129]  *** DEADLOCK ***
 [   96.257129]
 [   96.257129] 1 lock held by motion/2289:
 [   96.257129]  #0:  (mm-mmap_sem){++}, at: [81113cca]
 sys_mmap_pgoff+0x1ca/0x220
 [   96.257129]
 [   96.257129] stack backtrace:
 [   96.257129] Pid: 2289, comm: motion Not tainted 3.4.0-rc5-20120506+ #4
 [   96.257129] Call Trace:
 [   96.257129]  [810a8fb6] print_circular_bug+0x206/0x300
 [   96.257129]  [810aa529] validate_chain+0x1259/0x1300
 [   96.257129]  [810a9417] ? validate_chain+0x147/0x1300
 [   96.257129]  [810ab773] ? lock_release+0x113/0x260
 [   96.257129]  [810aa972] __lock_acquire+0x3a2/0xc50
 [   96.257129]  [810aa993] ? __lock_acquire+0x3c3/0xc50
 [   96.257129]  [8156024c] ? tda18271_tune+0x71c/0x9c0
 [   96.257129]  [810ab2e8] lock_acquire+0xc8/0x110
 [   96.257129]  [8156c04c] ? v4l2_mmap+0xbc/0xd0
 [   96.257129]  [8180e58c]
 mutex_lock_interruptible_nested+0x5c/0x550
 [   96.257129]  [8156c04c] ? v4l2_mmap+0xbc/0xd0
 [   96.257129]  [810a77ce] ? mark_held_locks+0x9e/0x130
 [   96.257129]  [8156c04c] ? v4l2_mmap+0xbc/0xd0
 [   96.257129]  [811134de] ? mmap_region+0x31e/0x5a0
 [   96.257129]  [810a7900] ? lockdep_trace_alloc+0xa0/0x130
 [   

Re: [ 3960.758784] 1 lock held by motion/7776: [ 3960.758788] #0: (queue-mutex){......}, at: [ffffffff815c62d2] uvc_queue_enable+0x32/0xc0

2012-05-07 Thread Hans Verkuil
On Monday 07 May 2012 13:06:01 Laurent Pinchart wrote:
 Hi Sanser,
 
 On Sunday 06 May 2012 16:54:40 Sander Eikelenboom wrote:
  Hello Laurent / Mauro,
  
  I have updated to latest 3.4-rc5-tip, running multiple video grabbers.
  I don't see anything specific to uvcvideo anymore, but i do get the possible
  circular locking dependency below.
 
 Thanks for the report.
 
 We indeed have a serious issue there (CC'ing Hans Verkuil).
 
 Hans, serializing both ioctl handling an mmap with a single device lock as we 
 currently do in V4L2 is prone to AB-BA deadlocks (uvcvideo shouldn't be 
 affected as it has no device-wide lock).
 
 If we want to keep a device-wide lock we need to take it after the mm-
 mmap_sem lock in all code paths, as there's no way we can change the lock 
 ordering for mmap(). The copy_from_user/copy_to_user issue could be solved by 
 moving locking from v4l2_ioctl to __video_do_ioctl (device-wide locks would 
 then require using video_ioctl2), but I'm not sure whether that will play 
 nicely with the QBUF implementation in videobuf2 (which already includes a 
 workaround for this particular AB-BA deadlock issue).

I've seen the same thing. It was on my TODO list of things to look into. I think
mmap shouldn't take the device wide lock at all. But it will mean reviewing
affected drivers before I can remove it.

To be honest, I wasn't sure whether or not to take the device lock for mmap when
I first wrote that code.

If you look at irc I had a discussion today with HdG about adding flags to
selectively disable locks for fops. It may be an idea to implement this soon so
we can start updating drivers one-by-one.

Frankly, I do not believe this 'possible circular locking' thing to be a real
bug as I am not aware of drivers that use the device lock *and* lock mmap_sem.
If I understand Sander correctly 'motion' no longer locks up after moving to
3.4-rc5-tip, right?

I have to look into a bit more to see what the best approach it so we can 
prevent
this message from appearing.

Regards,

Hans

 
  [   96.257129] ==
  [   96.257129] [ INFO: possible circular locking dependency detected ]
  [   96.257129] 3.4.0-rc5-20120506+ #4 Not tainted
  [   96.257129] ---
  [   96.257129] motion/2289 is trying to acquire lock:
  [   96.257129]  (dev-lock){+.+.+.}, at: [8156c04c]
  v4l2_mmap+0xbc/0xd0
  [   96.257129]
  [   96.257129] but task is already holding lock:
  [   96.257129]  (mm-mmap_sem){++}, at: [81113cca]
  sys_mmap_pgoff+0x1ca/0x220
  [   96.257129]
  [   96.257129] which lock already depends on the new lock.
  [   96.257129]
  [   96.257129]
  [   96.257129] the existing dependency chain (in reverse order) is:
  [   96.257129]
  [   96.257129] - #1 (mm-mmap_sem){++}:
  [   96.257129][810aa972] __lock_acquire+0x3a2/0xc50
  [   96.257129][810ab2e8] lock_acquire+0xc8/0x110
  [   96.257129][81108cb8] might_fault+0x68/0x90
  [   96.257129][8156d2a1] video_usercopy+0x1d1/0x4e0
  [   96.257129][8156d5c0] video_ioctl2+0x10/0x20
  [   96.257129][8156c110] v4l2_ioctl+0xb0/0x180
  [   96.257129][8114dc3c] do_vfs_ioctl+0x9c/0x580
  [   96.257129][8114e16a] sys_ioctl+0x4a/0x80
  [   96.257129][81813039] system_call_fastpath+0x16/0x1b
  [   96.257129]
  [   96.257129] - #0 (dev-lock){+.+.+.}:
  [   96.257129][810aa529] validate_chain+0x1259/0x1300
  [   96.257129][810aa972] __lock_acquire+0x3a2/0xc50
  [   96.257129][810ab2e8] lock_acquire+0xc8/0x110
  [   96.257129][8180e58c]
  mutex_lock_interruptible_nested+0x5c/0x550
  [   96.257129][8156c04c] v4l2_mmap+0xbc/0xd0
  [   96.257129][8111359a] mmap_region+0x3da/0x5a0
  [   96.257129][81113ab4] do_mmap_pgoff+0x354/0x3a0
  [   96.257129][81113ce9] sys_mmap_pgoff+0x1e9/0x220
  [   96.257129][81011ee9] sys_mmap+0x29/0x30
  [   96.257129][81813039] system_call_fastpath+0x16/0x1b
  [   96.257129]
  [   96.257129] other info that might help us debug this:
  [   96.257129]
  [   96.257129]  Possible unsafe locking scenario:
  [   96.257129]
  [   96.257129]CPU0CPU1
  [   96.257129]
  [   96.257129]   lock(mm-mmap_sem);
  [   96.257129]lock(dev-lock);
  [   96.257129]lock(mm-mmap_sem);
  [   96.257129]   lock(dev-lock);
  [   96.257129]
  [   96.257129]  *** DEADLOCK ***
  [   96.257129]
  [   96.257129] 1 lock held by motion/2289:
  [   96.257129]  #0:  (mm-mmap_sem){++}, at: [81113cca]
  sys_mmap_pgoff+0x1ca/0x220
  [   96.257129]
  [   96.257129] stack backtrace:
  [   96.257129] Pid: 2289, comm: 

Re: [ 3960.758784] 1 lock held by motion/7776: [ 3960.758788] #0: (queue-mutex){......}, at: [ffffffff815c62d2] uvc_queue_enable+0x32/0xc0

2012-05-07 Thread Laurent Pinchart
Hi Hans,

On Monday 07 May 2012 13:44:59 Hans Verkuil wrote:
 On Monday 07 May 2012 13:06:01 Laurent Pinchart wrote:
  On Sunday 06 May 2012 16:54:40 Sander Eikelenboom wrote:
   Hello Laurent / Mauro,
   
   I have updated to latest 3.4-rc5-tip, running multiple video grabbers.
   I don't see anything specific to uvcvideo anymore, but i do get the
   possible circular locking dependency below.
  
  Thanks for the report.
  
  We indeed have a serious issue there (CC'ing Hans Verkuil).
  
  Hans, serializing both ioctl handling an mmap with a single device lock as
  we currently do in V4L2 is prone to AB-BA deadlocks (uvcvideo shouldn't
  be affected as it has no device-wide lock).
  
  If we want to keep a device-wide lock we need to take it after the mm-
  
  mmap_sem lock in all code paths, as there's no way we can change the lock
  
  ordering for mmap(). The copy_from_user/copy_to_user issue could be solved
  by moving locking from v4l2_ioctl to __video_do_ioctl (device-wide locks
  would then require using video_ioctl2), but I'm not sure whether that
  will play nicely with the QBUF implementation in videobuf2 (which already
  includes a workaround for this particular AB-BA deadlock issue).
 
 I've seen the same thing. It was on my TODO list of things to look into. I
 think mmap shouldn't take the device wide lock at all. But it will mean
 reviewing affected drivers before I can remove it.
 
 To be honest, I wasn't sure whether or not to take the device lock for mmap
 when I first wrote that code.

 If you look at irc I had a discussion today with HdG about adding flags to
 selectively disable locks for fops. It may be an idea to implement this soon
 so we can start updating drivers one-by-one.
 
 Frankly, I do not believe this 'possible circular locking' thing to be a
 real bug as I am not aware of drivers that use the device lock *and* lock
 mmap_sem. If I understand Sander correctly 'motion' no longer locks up
 after moving to 3.4-rc5-tip, right?

copy_from_user()/copy_to_user() perform a down_read(mm-mmap_sem) when a page 
fault occurs. All drivers thus potentially take mm-mmap_sem when an ioctl is 
performed.
 
 I have to look into a bit more to see what the best approach it so we can
 prevent this message from appearing.

-- 
Regards,

Laurent Pinchart

--
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


Re: [ 3960.758784] 1 lock held by motion/7776: [ 3960.758788] #0: (queue-mutex){......}, at: [ffffffff815c62d2] uvc_queue_enable+0x32/0xc0

2012-05-07 Thread Hans Verkuil
On Monday 07 May 2012 13:47:45 Laurent Pinchart wrote:
 Hi Hans,
 
 On Monday 07 May 2012 13:44:59 Hans Verkuil wrote:
  On Monday 07 May 2012 13:06:01 Laurent Pinchart wrote:
   On Sunday 06 May 2012 16:54:40 Sander Eikelenboom wrote:
Hello Laurent / Mauro,

I have updated to latest 3.4-rc5-tip, running multiple video grabbers.
I don't see anything specific to uvcvideo anymore, but i do get the
possible circular locking dependency below.
   
   Thanks for the report.
   
   We indeed have a serious issue there (CC'ing Hans Verkuil).
   
   Hans, serializing both ioctl handling an mmap with a single device lock as
   we currently do in V4L2 is prone to AB-BA deadlocks (uvcvideo shouldn't
   be affected as it has no device-wide lock).
   
   If we want to keep a device-wide lock we need to take it after the mm-
   
   mmap_sem lock in all code paths, as there's no way we can change the lock
   
   ordering for mmap(). The copy_from_user/copy_to_user issue could be solved
   by moving locking from v4l2_ioctl to __video_do_ioctl (device-wide locks
   would then require using video_ioctl2), but I'm not sure whether that
   will play nicely with the QBUF implementation in videobuf2 (which already
   includes a workaround for this particular AB-BA deadlock issue).
  
  I've seen the same thing. It was on my TODO list of things to look into. I
  think mmap shouldn't take the device wide lock at all. But it will mean
  reviewing affected drivers before I can remove it.
  
  To be honest, I wasn't sure whether or not to take the device lock for mmap
  when I first wrote that code.
 
  If you look at irc I had a discussion today with HdG about adding flags to
  selectively disable locks for fops. It may be an idea to implement this soon
  so we can start updating drivers one-by-one.
  
  Frankly, I do not believe this 'possible circular locking' thing to be a
  real bug as I am not aware of drivers that use the device lock *and* lock
  mmap_sem. If I understand Sander correctly 'motion' no longer locks up
  after moving to 3.4-rc5-tip, right?
 
 copy_from_user()/copy_to_user() perform a down_read(mm-mmap_sem) when a 
 page 
 fault occurs. All drivers thus potentially take mm-mmap_sem when an ioctl is 
 performed.

Ah, I didn't know that. Interesting.

Regards,

Hans

  
  I have to look into a bit more to see what the best approach it so we can
  prevent this message from appearing.
 
 
--
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


Re: [ 3960.758784] 1 lock held by motion/7776: [ 3960.758788] #0: (queue-mutex){......}, at: [ffffffff815c62d2] uvc_queue_enable+0x32/0xc0

2012-05-07 Thread Hans de Goede

Hi,

On 05/07/2012 01:44 PM, Hans Verkuil wrote:

On Monday 07 May 2012 13:06:01 Laurent Pinchart wrote:

Hi Sanser,

On Sunday 06 May 2012 16:54:40 Sander Eikelenboom wrote:

Hello Laurent / Mauro,

I have updated to latest 3.4-rc5-tip, running multiple video grabbers.
I don't see anything specific to uvcvideo anymore, but i do get the possible
circular locking dependency below.


Thanks for the report.

We indeed have a serious issue there (CC'ing Hans Verkuil).

Hans, serializing both ioctl handling an mmap with a single device lock as we
currently do in V4L2 is prone to AB-BA deadlocks (uvcvideo shouldn't be
affected as it has no device-wide lock).

If we want to keep a device-wide lock we need to take it after the mm-

mmap_sem lock in all code paths, as there's no way we can change the lock

ordering for mmap(). The copy_from_user/copy_to_user issue could be solved by
moving locking from v4l2_ioctl to __video_do_ioctl (device-wide locks would
then require using video_ioctl2), but I'm not sure whether that will play
nicely with the QBUF implementation in videobuf2 (which already includes a
workaround for this particular AB-BA deadlock issue).


I've seen the same thing. It was on my TODO list of things to look into. I think
mmap shouldn't take the device wide lock at all. But it will mean reviewing
affected drivers before I can remove it.

To be honest, I wasn't sure whether or not to take the device lock for mmap when
I first wrote that code.

If you look at irc I had a discussion today with HdG about adding flags to
selectively disable locks for fops. It may be an idea to implement this soon so
we can start updating drivers one-by-one.


I've a patch almost ready for this, when I'm happy with it I'll send of a new
version of the (ever growing) gspca use control framework patchset both me and
the other Hans have been working on, which will include this patch.

Regards,

Hans
--
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


Re: [ 3960.758784] 1 lock held by motion/7776: [ 3960.758788] #0: (queue-mutex){......}, at: [ffffffff815c62d2] uvc_queue_enable+0x32/0xc0

2012-05-06 Thread Sander Eikelenboom
Hello Laurent / Mauro,

I have updated to latest 3.4-rc5-tip, running multiple video grabbers.
I don't see anything specific to uvcvideo anymore, but i do get the possible 
circular locking dependency below.


--
Sander


[   96.257129] ==
[   96.257129] [ INFO: possible circular locking dependency detected ]
[   96.257129] 3.4.0-rc5-20120506+ #4 Not tainted
[   96.257129] ---
[   96.257129] motion/2289 is trying to acquire lock:
[   96.257129]  (dev-lock){+.+.+.}, at: [8156c04c] 
v4l2_mmap+0xbc/0xd0
[   96.257129]
[   96.257129] but task is already holding lock:
[   96.257129]  (mm-mmap_sem){++}, at: [81113cca] 
sys_mmap_pgoff+0x1ca/0x220
[   96.257129]
[   96.257129] which lock already depends on the new lock.
[   96.257129]
[   96.257129]
[   96.257129] the existing dependency chain (in reverse order) is:
[   96.257129]
[   96.257129] - #1 (mm-mmap_sem){++}:
[   96.257129][810aa972] __lock_acquire+0x3a2/0xc50
[   96.257129][810ab2e8] lock_acquire+0xc8/0x110
[   96.257129][81108cb8] might_fault+0x68/0x90
[   96.257129][8156d2a1] video_usercopy+0x1d1/0x4e0
[   96.257129][8156d5c0] video_ioctl2+0x10/0x20
[   96.257129][8156c110] v4l2_ioctl+0xb0/0x180
[   96.257129][8114dc3c] do_vfs_ioctl+0x9c/0x580
[   96.257129][8114e16a] sys_ioctl+0x4a/0x80
[   96.257129][81813039] system_call_fastpath+0x16/0x1b
[   96.257129]
[   96.257129] - #0 (dev-lock){+.+.+.}:
[   96.257129][810aa529] validate_chain+0x1259/0x1300
[   96.257129][810aa972] __lock_acquire+0x3a2/0xc50
[   96.257129][810ab2e8] lock_acquire+0xc8/0x110
[   96.257129][8180e58c] 
mutex_lock_interruptible_nested+0x5c/0x550
[   96.257129][8156c04c] v4l2_mmap+0xbc/0xd0
[   96.257129][8111359a] mmap_region+0x3da/0x5a0
[   96.257129][81113ab4] do_mmap_pgoff+0x354/0x3a0
[   96.257129][81113ce9] sys_mmap_pgoff+0x1e9/0x220
[   96.257129][81011ee9] sys_mmap+0x29/0x30
[   96.257129][81813039] system_call_fastpath+0x16/0x1b
[   96.257129]
[   96.257129] other info that might help us debug this:
[   96.257129]
[   96.257129]  Possible unsafe locking scenario:
[   96.257129]
[   96.257129]CPU0CPU1
[   96.257129]
[   96.257129]   lock(mm-mmap_sem);
[   96.257129]lock(dev-lock);
[   96.257129]lock(mm-mmap_sem);
[   96.257129]   lock(dev-lock);
[   96.257129]
[   96.257129]  *** DEADLOCK ***
[   96.257129]
[   96.257129] 1 lock held by motion/2289:
[   96.257129]  #0:  (mm-mmap_sem){++}, at: [81113cca] 
sys_mmap_pgoff+0x1ca/0x220
[   96.257129]
[   96.257129] stack backtrace:
[   96.257129] Pid: 2289, comm: motion Not tainted 3.4.0-rc5-20120506+ #4
[   96.257129] Call Trace:
[   96.257129]  [810a8fb6] print_circular_bug+0x206/0x300
[   96.257129]  [810aa529] validate_chain+0x1259/0x1300
[   96.257129]  [810a9417] ? validate_chain+0x147/0x1300
[   96.257129]  [810ab773] ? lock_release+0x113/0x260
[   96.257129]  [810aa972] __lock_acquire+0x3a2/0xc50
[   96.257129]  [810aa993] ? __lock_acquire+0x3c3/0xc50
[   96.257129]  [8156024c] ? tda18271_tune+0x71c/0x9c0
[   96.257129]  [810ab2e8] lock_acquire+0xc8/0x110
[   96.257129]  [8156c04c] ? v4l2_mmap+0xbc/0xd0
[   96.257129]  [8180e58c] mutex_lock_interruptible_nested+0x5c/0x550
[   96.257129]  [8156c04c] ? v4l2_mmap+0xbc/0xd0
[   96.257129]  [810a77ce] ? mark_held_locks+0x9e/0x130
[   96.257129]  [8156c04c] ? v4l2_mmap+0xbc/0xd0
[   96.257129]  [811134de] ? mmap_region+0x31e/0x5a0
[   96.257129]  [810a7900] ? lockdep_trace_alloc+0xa0/0x130
[   96.257129]  [8156c04c] v4l2_mmap+0xbc/0xd0
[   96.257129]  [8111359a] mmap_region+0x3da/0x5a0
[   96.257129]  [81113ab4] do_mmap_pgoff+0x354/0x3a0
[   96.257129]  [81113ce9] sys_mmap_pgoff+0x1e9/0x220
[   96.257129]  [8132554e] ? trace_hardirqs_on_thunk+0x3a/0x3f
[   96.257129]  [81011ee9] sys_mmap+0x29/0x30








Monday, April 30, 2012, 1:05:27 AM, you wrote:

 Hi Sander,

 On Saturday 28 April 2012 22:02:46 Sander Eikelenboom wrote:
 Hi,
 
 I'm using a webcam (logitech) supported by the uvcvideo module to capture
 video. Previously once in a while I would get the uvcvideo: Failed to
 resubmit video URB (-27)., but the grabbing continued without a problem.
 Now the video grabbing program (motion) seems to lock due to some nested
 lock if i interpret it right.

 The uvcvideo driver doesn't use nested locks, this is just a normal locking 
 issue. The 

Re: [ 3960.758784] 1 lock held by motion/7776: [ 3960.758788] #0: (queue-mutex){......}, at: [ffffffff815c62d2] uvc_queue_enable+0x32/0xc0

2012-04-29 Thread Laurent Pinchart
Hi Sander,

On Saturday 28 April 2012 22:02:46 Sander Eikelenboom wrote:
 Hi,
 
 I'm using a webcam (logitech) supported by the uvcvideo module to capture
 video. Previously once in a while I would get the uvcvideo: Failed to
 resubmit video URB (-27)., but the grabbing continued without a problem.
 Now the video grabbing program (motion) seems to lock due to some nested
 lock if i interpret it right.

The uvcvideo driver doesn't use nested locks, this is just a normal locking 
issue. The mutex_lock_nested() call in the backtrace comes from lock debugging 
support in your kernel.

A quick look at the code doesn't reveal any obvious locking issue. Do you have 
multiple threads accessing the device at the same time ?

 Additional problem is that i don't really know what kernel version was still
 OK, so can't help with that info.
 
 This is on a vanilla 3.4 RC kernel latest commit:
 c629eaf8392b676b4f83c3dc344e66402bfeec92

 [ 3696.753490] ehci_hcd :09:00.1: request 880016091400 would
 overflow (3923+31 = 3936) [ 3696.753494] uvcvideo: Failed to resubmit
 video URB (-27).
 [ 3696.753563] ehci_hcd :09:00.1: request 880016091800 would
 overflow (3922+31 = 3936) [ 3696.753566] uvcvideo: Failed to resubmit
 video URB (-27).
 [ 3696.753609] ehci_hcd :09:00.1: request 880016090800 would
 overflow (3922+31 = 3936) [ 3696.753611] uvcvideo: Failed to resubmit
 video URB (-27).
 [ 3696.753645] ehci_hcd :09:00.1: request 880016090c00 would
 overflow (3922+31 = 3936) [ 3696.753647] uvcvideo: Failed to resubmit
 video URB (-27).
 [ 3696.753656] ehci_hcd :09:00.1: request 880016091000 would
 overflow (3922+31 = 3936) [ 3696.753657] uvcvideo: Failed to resubmit
 video URB (-27).
 [ 3960.758154] INFO: task motion:7776 blocked for more than 120 seconds.
 [ 3960.758168] echo 0  /proc/sys/kernel/hung_task_timeout_secs disables
 this message. [ 3960.758174] motion  D 0201 0  7776
  1 0x [ 3960.758183]  8800239d9b68 0216
 eaa50018 810a451b [ 3960.758192]  88002392cf60
 00012600 8800239d9fd8 8800239d8010 [ 3960.758200] 
 00012600 00012600 8800239d9fd8 00012600 [
 3960.758209] Call Trace:
 [ 3960.758219]  [810a451b] ? __lock_acquire+0x5b/0xc00
 [ 3960.758226]  [814e0048] ? hub_suspend+0xf8/0x130
 [ 3960.758232]  [814f0024] ? usbdev_do_ioctl+0x194/0x1000
 [ 3960.758238]  [810a451b] ? __lock_acquire+0x5b/0xc00
 [ 3960.758244]  [8108ba01] ? get_parent_ip+0x11/0x50
 [ 3960.758250]  [8108d6cd] ? sub_preempt_count+0x9d/0xd0
 [ 3960.758257]  [815c02d2] ? hdpvr_probe+0x6c2/0xa30

The backtrace isn't valid, making this a bit harder to debug. Making compiling 
the kernel with debug symbols would help here. Could you also please enable 
lockdep (CONFIG_LOCKDEP=y) if not done already ?

 [ 3960.758264]  [817f8e84] schedule+0x24/0x70
 [ 3960.758269]  [817f9363] schedule_preempt_disabled+0x13/0x20
 [ 3960.758275]  [817f77c7] mutex_lock_nested+0x1a7/0x420
 [ 3960.758281]  [815c62d2] ? uvc_queue_enable+0x32/0xc0
 [ 3960.758287]  [815c62d2] uvc_queue_enable+0x32/0xc0
 [ 3960.758292]  [815c941f] uvc_video_enable+0x12f/0x180
 [ 3960.758298]  [815c7b55] uvc_v4l2_do_ioctl+0x555/0x1190
 [ 3960.758304]  [816c5668] ? sock_update_classid+0xa8/0x120
 [ 3960.758310]  [816c1d7e] ? sock_sendmsg+0xee/0x120
 [ 3960.758316]  [81561996] video_usercopy+0x186/0x4c0
 [ 3960.758322]  [815c7600] ? uvc_v4l2_set_streamparm+0x190/0x190
 [ 3960.758327]  [810a451b] ? __lock_acquire+0x5b/0xc00
 [ 3960.758333]  [810a559f] ? lock_release+0xff/0x210
 [ 3960.758338]  [8108ba01] ? get_parent_ip+0x11/0x50
 [ 3960.758344]  [815c6bc4] uvc_v4l2_ioctl+0x24/0x70
 [ 3960.758349]  [810a451b] ? __lock_acquire+0x5b/0xc00
 [ 3960.758740]  [8116e474] ? fsnotify+0x84/0x360
 [ 3960.758745]  [81560850] v4l2_ioctl+0xb0/0x180
 [ 3960.758751]  [81145213] do_vfs_ioctl+0x93/0x500
 [ 3960.758756]  [810a559f] ? lock_release+0xff/0x210
 [ 3960.758762]  [81134ba7] ? fget_light+0xd7/0x140
 [ 3960.758768]  [81134b0b] ? fget_light+0x3b/0x140
 [ 3960.758773]  [811456ca] sys_ioctl+0x4a/0x80
 [ 3960.758778]  [817fb0f9] system_call_fastpath+0x16/0x1b
 [ 3960.758784] 1 lock held by motion/7776:
 [ 3960.758788]  #0:  (queue-mutex){..}, at: [815c62d2]

It looks like the driver tries to take the lock queue-mutex lock a second 
time. I don't see any code path that could lead to that.

-- 
Regards,

Laurent Pinchart

--
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


[ 3960.758784] 1 lock held by motion/7776: [ 3960.758788] #0: (queue-mutex){......}, at: [ffffffff815c62d2] uvc_queue_enable+0x32/0xc0

2012-04-28 Thread Sander Eikelenboom
Hi,

I'm using a webcam (logitech) supported by the uvcvideo module to capture video.
Previously once in a while I would get the uvcvideo: Failed to resubmit video 
URB (-27)., but the grabbing continued without a problem.
Now the video grabbing program (motion) seems to lock due to some nested lock 
if i interpret it right.
Additional problem is that i don't really know what kernel version was still 
OK, so can't help with that info.

This is on a vanilla 3.4 RC kernel latest commit: 
c629eaf8392b676b4f83c3dc344e66402bfeec92

--
Sander







[ 3696.753490] ehci_hcd :09:00.1: request 880016091400 would overflow 
(3923+31 = 3936)
[ 3696.753494] uvcvideo: Failed to resubmit video URB (-27).
[ 3696.753563] ehci_hcd :09:00.1: request 880016091800 would overflow 
(3922+31 = 3936)
[ 3696.753566] uvcvideo: Failed to resubmit video URB (-27).
[ 3696.753609] ehci_hcd :09:00.1: request 880016090800 would overflow 
(3922+31 = 3936)
[ 3696.753611] uvcvideo: Failed to resubmit video URB (-27).
[ 3696.753645] ehci_hcd :09:00.1: request 880016090c00 would overflow 
(3922+31 = 3936)
[ 3696.753647] uvcvideo: Failed to resubmit video URB (-27).
[ 3696.753656] ehci_hcd :09:00.1: request 880016091000 would overflow 
(3922+31 = 3936)
[ 3696.753657] uvcvideo: Failed to resubmit video URB (-27).
[ 3960.758154] INFO: task motion:7776 blocked for more than 120 seconds.
[ 3960.758168] echo 0  /proc/sys/kernel/hung_task_timeout_secs disables this 
message.
[ 3960.758174] motion  D 0201 0  7776  1 0x
[ 3960.758183]  8800239d9b68 0216 eaa50018 
810a451b
[ 3960.758192]  88002392cf60 00012600 8800239d9fd8 
8800239d8010
[ 3960.758200]  00012600 00012600 8800239d9fd8 
00012600
[ 3960.758209] Call Trace:
[ 3960.758219]  [810a451b] ? __lock_acquire+0x5b/0xc00
[ 3960.758226]  [814e0048] ? hub_suspend+0xf8/0x130
[ 3960.758232]  [814f0024] ? usbdev_do_ioctl+0x194/0x1000
[ 3960.758238]  [810a451b] ? __lock_acquire+0x5b/0xc00
[ 3960.758244]  [8108ba01] ? get_parent_ip+0x11/0x50
[ 3960.758250]  [8108d6cd] ? sub_preempt_count+0x9d/0xd0
[ 3960.758257]  [815c02d2] ? hdpvr_probe+0x6c2/0xa30
[ 3960.758264]  [817f8e84] schedule+0x24/0x70
[ 3960.758269]  [817f9363] schedule_preempt_disabled+0x13/0x20
[ 3960.758275]  [817f77c7] mutex_lock_nested+0x1a7/0x420
[ 3960.758281]  [815c62d2] ? uvc_queue_enable+0x32/0xc0
[ 3960.758287]  [815c62d2] uvc_queue_enable+0x32/0xc0
[ 3960.758292]  [815c941f] uvc_video_enable+0x12f/0x180
[ 3960.758298]  [815c7b55] uvc_v4l2_do_ioctl+0x555/0x1190
[ 3960.758304]  [816c5668] ? sock_update_classid+0xa8/0x120
[ 3960.758310]  [816c1d7e] ? sock_sendmsg+0xee/0x120
[ 3960.758316]  [81561996] video_usercopy+0x186/0x4c0
[ 3960.758322]  [815c7600] ? uvc_v4l2_set_streamparm+0x190/0x190
[ 3960.758327]  [810a451b] ? __lock_acquire+0x5b/0xc00
[ 3960.758333]  [810a559f] ? lock_release+0xff/0x210
[ 3960.758338]  [8108ba01] ? get_parent_ip+0x11/0x50
[ 3960.758344]  [815c6bc4] uvc_v4l2_ioctl+0x24/0x70
[ 3960.758349]  [810a451b] ? __lock_acquire+0x5b/0xc00
[ 3960.758740]  [8116e474] ? fsnotify+0x84/0x360
[ 3960.758745]  [81560850] v4l2_ioctl+0xb0/0x180
[ 3960.758751]  [81145213] do_vfs_ioctl+0x93/0x500
[ 3960.758756]  [810a559f] ? lock_release+0xff/0x210
[ 3960.758762]  [81134ba7] ? fget_light+0xd7/0x140
[ 3960.758768]  [81134b0b] ? fget_light+0x3b/0x140
[ 3960.758773]  [811456ca] sys_ioctl+0x4a/0x80
[ 3960.758778]  [817fb0f9] system_call_fastpath+0x16/0x1b
[ 3960.758784] 1 lock held by motion/7776:
[ 3960.758788]  #0:  (queue-mutex){..}, at: [815c62d2] 
uvc_queue_enable+0x32/0xc0
[ 4080.758504] INFO: task motion:7776 blocked for more than 120 seconds.
[ 4080.758518] echo 0  /proc/sys/kernel/hung_task_timeout_secs disables this 
message.
[ 4080.758524] motion  D 0201 0  7776  1 0x
[ 4080.758532]  8800239d9b68 0216 eaa50018 
810a451b
[ 4080.758540]  88002392cf60 00012600 8800239d9fd8 
8800239d8010
[ 4080.758547]  00012600 00012600 8800239d9fd8 
00012600
[ 4080.758555] Call Trace:
[ 4080.758564]  [810a451b] ? __lock_acquire+0x5b/0xc00
[ 4080.758570]  [814e0048] ? hub_suspend+0xf8/0x130
[ 4080.758576]  [814f0024] ? usbdev_do_ioctl+0x194/0x1000
[ 4080.758581]  [810a451b] ? __lock_acquire+0x5b/0xc00
[ 4080.758587]  [8108ba01] ? get_parent_ip+0x11/0x50
[ 4080.758592]  [8108d6cd] ? sub_preempt_count+0x9d/0xd0
[ 4080.758597]  [815c02d2] ? hdpvr_probe+0x6c2/0xa30
[ 4080.758603]  [817f8e84] schedule+0x24/0x70
[ 4080.758608]  [817f9363