Messages in this thread | | | Date | Sat, 5 Jan 2008 23:33:39 +0100 | Subject | Regression: VIDIOCGMBUF ioctl hangs on bttv driver (2.6.24-rc6) | From | Gregor Jasny <> |
| |
Hi,
During some tests I've noticed that the VIDIOCGMBUF ioctl hangs on my bttv video device. It simply does not return and the process is stuck in the D+ state. With Kernel 2.6.22.9 the (attached) testcase works like a charm. The V4L2 interface is working with 2.6.24, too (at least displays xawtv the usual pixel snow).
Hard and Software: 64 bit Linux 2.6.24-rc6 (todays pull) on a Intel Core 2 Duo
WinTV PCI: 05:02.0 0400: 109e:036e (rev 02) 05:02.1 0480: 109e:0878 (rev 02)
dmesg: Rincewind:~# dmesg |grep bttv bttv: driver version 0.9.17 loaded bttv: using 8 buffers with 2080k (520 pages) each for capture bttv: Bt8xx card found (0). bttv0: Bt878 (rev 2) at 0000:05:02.0, irq: 23, latency: 64, mmio: 0xdfefe000 bttv0: detected: Hauppauge WinTV [card=10], PCI subsystem ID is 0070:13eb bttv0: using: Hauppauge (bt878) [card=10,autodetected] bttv0: gpio: en=00000000, out=00000000 in=00ffffdb [init] bttv0: Hauppauge/Voodoo msp34xx: reset line init [5] bttv0: Hauppauge eeprom indicates model#61324 bttv0: tuner type=14 bttv0: i2c: checking for MSP34xx @ 0x80... found bttv0: i2c: checking for TDA9875 @ 0xb0... not found bttv0: i2c: checking for TDA7432 @ 0x8a... not found bttv0: registered device video0 bttv0: registered device vbi0 bttv0: registered device radio0 bttv0: PLL: 28636363 => 35468950 .. ok
from /proc/interrupts: 23: 55900 0 IO-APIC-fasteoi ehci_hcd:usb2, uhci_hcd:usb5, bttv0
If I could help with more logs, a bisection, some debug printks, please contact me.
Thanks!
Gregor #include <stdio.h> #include <stdlib.h> #include <assert.h> #include <errno.h>
#include <sys/ioctl.h> #include <sys/mman.h> #include <fcntl.h> #include <unistd.h>
#include <linux/ioctl.h> #include <linux/videodev.h>
int main( int argc, char *argv[]) { const char device[] = "/dev/video0"; int r;
int fd = open (device, O_RDWR); assert(fd);
struct video_mbuf mbuf = { 0 }; r = ioctl (fd, VIDIOCGMBUF, &mbuf); assert (r == 0);
printf ("Frames: %i\n", mbuf.frames);
close (fd);
return 0; }
| |