Jonathan Nieder
2011-03-27 15:28:40 UTC
Hi Andi,
bug to track this at <http://bugzilla.kernel.org/>, product v4l-dvb,
component cx88, and then send the bug number to ***@bugs.debian.org ?
Report follows.
Jonathan
[1] http://bugs.debian.org/619827
[Symptom]
Processes that try to open a cx88-blackbird driven MPEG device will hang up.
Thanks for reporting. Just cc-ing some relevant people. Could you file aProcesses that try to open a cx88-blackbird driven MPEG device will hang up.
bug to track this at <http://bugzilla.kernel.org/>, product v4l-dvb,
component cx88, and then send the bug number to ***@bugs.debian.org ?
Report follows.
Jonathan
[1] http://bugs.debian.org/619827
[Cause]
Nestet mutex_locks (which are not allowed) result in a deadlock.
[Details]
Source-File: drivers/media/video/cx88/cx88-blackbird.c
Function: int mpeg_open(struct file *file)
Problem: the calls to drv->request_acquire(drv); and
drv->request_release(drv); will hang because they try to lock a
mutex that has already been locked by a previouse call to
mutex_lock(&dev->core->lock) ...
1050 static int mpeg_open(struct file *file)
1051 {
[...]
1060 mutex_lock(&dev->core->lock); // MUTEX LOCKED !!!!!!!!!!!!!!!!
1061
1062 /* Make sure we can acquire the hardware */
1063 drv = cx8802_get_driver(dev, CX88_MPEG_BLACKBIRD);
1064 if (drv) {
1065 err = drv->request_acquire(drv); // HANGS !!!!!!!!!!!!!!!!!!!
1066 if(err != 0) {
1067 dprintk(1,"%s: Unable to acquire hardware, %d\n", __func__, err);
1068 mutex_unlock(&dev->core->lock);;
1069 return err;
1070 }
1071 }
[...]
Here's the relevant kernel log extract (Linux version 2.6.38-1-amd64 (Debian 2.6.38-1)) ...
Mar 24 21:25:10 xen kernel: [ 241.472067] INFO: task v4l_id:1000 blocked for more than 120 seconds.
Mar 24 21:25:10 xen kernel: [ 241.478845] "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message.
Mar 24 21:25:10 xen kernel: [ 241.482412] v4l_id D ffff88006bcb6540 0 1000 1 0x00000000
Mar 24 21:25:10 xen kernel: [ 241.486031] ffff88006bcb6540 0000000000000086 ffff880000000001 ffff88006981c380
Mar 24 21:25:10 xen kernel: [ 241.489694] 0000000000013700 ffff88006be5bfd8 ffff88006be5bfd8 0000000000013700
Mar 24 21:25:10 xen kernel: [ 241.493301] ffff88006bcb6540 ffff88006be5a010 ffff88006bcb6540 000000016be5a000
Mar 24 21:25:10 xen kernel: [ 241.500145] [<ffffffff81321c4a>] ? __mutex_lock_common+0x127/0x193
Mar 24 21:25:10 xen kernel: [ 241.503630] [<ffffffff81321d82>] ? mutex_lock+0x1a/0x33
Mar 24 21:25:10 xen kernel: [ 241.507145] [<ffffffffa09dd155>] ? cx8802_request_acquire+0x66/0xc6 [cx8802]
Mar 24 21:25:10 xen kernel: [ 241.510699] [<ffffffffa0aab7f2>] ? mpeg_open+0x7a/0x1fc [cx88_blackbird]
Mar 24 21:25:10 xen kernel: [ 241.514279] [<ffffffff8123bfb6>] ? kobj_lookup+0x139/0x173
Mar 24 21:25:10 xen kernel: [ 241.517856] [<ffffffffa062d5fd>] ? v4l2_open+0xb3/0xdf [videodev]
Nestet mutex_locks (which are not allowed) result in a deadlock.
[Details]
Source-File: drivers/media/video/cx88/cx88-blackbird.c
Function: int mpeg_open(struct file *file)
Problem: the calls to drv->request_acquire(drv); and
drv->request_release(drv); will hang because they try to lock a
mutex that has already been locked by a previouse call to
mutex_lock(&dev->core->lock) ...
1050 static int mpeg_open(struct file *file)
1051 {
[...]
1060 mutex_lock(&dev->core->lock); // MUTEX LOCKED !!!!!!!!!!!!!!!!
1061
1062 /* Make sure we can acquire the hardware */
1063 drv = cx8802_get_driver(dev, CX88_MPEG_BLACKBIRD);
1064 if (drv) {
1065 err = drv->request_acquire(drv); // HANGS !!!!!!!!!!!!!!!!!!!
1066 if(err != 0) {
1067 dprintk(1,"%s: Unable to acquire hardware, %d\n", __func__, err);
1068 mutex_unlock(&dev->core->lock);;
1069 return err;
1070 }
1071 }
[...]
Here's the relevant kernel log extract (Linux version 2.6.38-1-amd64 (Debian 2.6.38-1)) ...
Mar 24 21:25:10 xen kernel: [ 241.472067] INFO: task v4l_id:1000 blocked for more than 120 seconds.
Mar 24 21:25:10 xen kernel: [ 241.478845] "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message.
Mar 24 21:25:10 xen kernel: [ 241.482412] v4l_id D ffff88006bcb6540 0 1000 1 0x00000000
Mar 24 21:25:10 xen kernel: [ 241.486031] ffff88006bcb6540 0000000000000086 ffff880000000001 ffff88006981c380
Mar 24 21:25:10 xen kernel: [ 241.489694] 0000000000013700 ffff88006be5bfd8 ffff88006be5bfd8 0000000000013700
Mar 24 21:25:10 xen kernel: [ 241.493301] ffff88006bcb6540 ffff88006be5a010 ffff88006bcb6540 000000016be5a000
Mar 24 21:25:10 xen kernel: [ 241.500145] [<ffffffff81321c4a>] ? __mutex_lock_common+0x127/0x193
Mar 24 21:25:10 xen kernel: [ 241.503630] [<ffffffff81321d82>] ? mutex_lock+0x1a/0x33
Mar 24 21:25:10 xen kernel: [ 241.507145] [<ffffffffa09dd155>] ? cx8802_request_acquire+0x66/0xc6 [cx8802]
Mar 24 21:25:10 xen kernel: [ 241.510699] [<ffffffffa0aab7f2>] ? mpeg_open+0x7a/0x1fc [cx88_blackbird]
Mar 24 21:25:10 xen kernel: [ 241.514279] [<ffffffff8123bfb6>] ? kobj_lookup+0x139/0x173
Mar 24 21:25:10 xen kernel: [ 241.517856] [<ffffffffa062d5fd>] ? v4l2_open+0xb3/0xdf [videodev]