diff options
author | Mauro Carvalho Chehab <mchehab@infradead.org> | 2008-06-10 11:19:31 -0300 |
---|---|---|
committer | Mauro Carvalho Chehab <mchehab@infradead.org> | 2008-06-10 11:19:31 -0300 |
commit | 67e2b16bdc4c235f95da276db8ecadb6704e18a2 (patch) | |
tree | 2444996e4ff28c715243dd565761a8d106fdc0c7 /linux/drivers | |
parent | 1b7bbe8eb7ef98ca7e80c3ec99ac39b44d058f26 (diff) | |
download | mediapointer-dvb-s2-67e2b16bdc4c235f95da276db8ecadb6704e18a2.tar.gz mediapointer-dvb-s2-67e2b16bdc4c235f95da276db8ecadb6704e18a2.tar.bz2 |
changeset: 8020:0580af3c9795
tag: tip
user: Mauro Carvalho Chehab <mchehab@infradead.org>
date: Tue Jun 10 11:01:57 2008 +0000
files: linux/drivers/media/video/saa7134/saa7134-empress.c
description:
callbacks function of saa7134_empress
From: Dmitri Belimov <d.belimov@gmail.com>
If I try v4l2-ctl --all -d /dev/video1 or v4l2-ctl --streamon -d /dev/video1
modules crashed:
*pde = 00000000
Modules linked in: ac battery loop saa7134_empress(F) saa6752hs(F) tuner_simple(F) tuner_types(F) tea5767(F) tda9887(F) tda8290(F) tea5761(F) tuner(F) snd_cmipci snd_pcm snd_page_alloc snd_opl3_lib saa7134(F) snd_mpu401 parport_pc parport snd_timer snd_hwdep snd_mpu401_uart floppy rtc psmouse videodev(F) v4l1_compat(F) compat_ioctl32(F) v4l2_common(F) videobuf_dma_sg(F) videobuf_core(F) snd_rawmidi snd_seq_device via_ircc pcspkr snd ir_kbd_i2c(F) irda soundcore ir_common(F) crc_ccitt tveeprom(F) i2c_viapro i2c_core button via_agp agpgart evdev ext3 jbd mbcache ide_cd_mod cdrom ide_disk 8139cp via82cxxx ide_core 8139too mii ehci_hcd uhci_hcd usbcore thermal processor fan
EIP is at __mutex_lock_slowpath+0x29/0x7b
DS: 007b ES: 007b FS: 00d8 GS: 0033 SS: 0068
Process v4l2-ctl (pid: 2742, ti=ced7e000 task=cf325260 task.ti=ced7e000)
d08e5411 00000000 ced7fed4 00000000 d0975acb 40045612 cfa86ee0 ffffffcd
cf2b7000 ced7febc c03858d6 00000019 00000292 d089e4ec cf37b2a0 d089e4a0
Call Trace:
[<c028b52b>] mutex_lock+0xa/0xb
[<d08e5411>] videobuf_streamon+0xf/0x9a [videobuf_core]
[<d0975acb>] __video_do_ioctl+0x136a/0x2d68 [videodev]
[<d088f789>] task_end_request+0x40/0x51 [ide_core]
[<d088c4aa>] ide_intr+0x187/0x192 [ide_core]
[<c016a551>] mntput_no_expire+0x11/0x64
[<c0160b1c>] path_walk+0x90/0x98
[<d0977738>] video_ioctl2+0x173/0x239 [videodev]
[<c0140936>] filemap_fault+0x202/0x370
[<c014930a>] __do_fault+0x2c3/0x2fe
[<c014ab03>] handle_mm_fault+0x22a/0x49f
[<c0162737>] vfs_ioctl+0x47/0x5d
[<c0162992>] do_vfs_ioctl+0x245/0x258
[<c01629e6>] sys_ioctl+0x41/0x5b
[<c01036a6>] sysenter_past_esp+0x5f/0x85
=======================
After this fix all of that commands works without problem:
v4l2-ctl --all -d /dev/video1
Driver Info:
Driver name : saa7134
Card type : Beholder BeholdTV M6 Extra
Bus info : PCI:0000:00:0d.0
Driver version: 526
Capabilities : 0x05000001
Video Capture
Read/Write
Streaming
Format Video Capture:
Width/Height : 720/576
Pixel Format : MPEG
Field : Any
Bytes per Line: 0
Size Image : 58656
Colorspace : Unknown (00000000)
Video input : 0 (CCIR656)
Video Standard = 0x000000ff
PAL-B/B1/G/H/I/D/D1/K
P.S. data from /dev/video1 is not correct :(( .
Signed-off-by: Beholder Intl. Ltd. Dmitry Belimov <d.belimov@gmail.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
Diffstat (limited to 'linux/drivers')
-rw-r--r-- | linux/drivers/media/video/saa7134/saa7134-empress.c | 30 |
1 files changed, 10 insertions, 20 deletions
diff --git a/linux/drivers/media/video/saa7134/saa7134-empress.c b/linux/drivers/media/video/saa7134/saa7134-empress.c index b8ecaa623..02f4bb906 100644 --- a/linux/drivers/media/video/saa7134/saa7134-empress.c +++ b/linux/drivers/media/video/saa7134/saa7134-empress.c @@ -227,8 +227,7 @@ static int empress_enum_fmt_vid_cap(struct file *file, void *priv, static int empress_g_fmt_vid_cap(struct file *file, void *priv, struct v4l2_format *f) { - struct saa7134_fh *fh = priv; - struct saa7134_dev *dev = fh->dev; + struct saa7134_dev *dev = file->private_data; saa7134_i2c_call_clients(dev, VIDIOC_G_FMT, f); @@ -241,8 +240,7 @@ static int empress_g_fmt_vid_cap(struct file *file, void *priv, static int empress_s_fmt_vid_cap(struct file *file, void *priv, struct v4l2_format *f) { - struct saa7134_fh *fh = priv; - struct saa7134_dev *dev = fh->dev; + struct saa7134_dev *dev = file->private_data; saa7134_i2c_call_clients(dev, VIDIOC_S_FMT, f); @@ -256,8 +254,7 @@ static int empress_s_fmt_vid_cap(struct file *file, void *priv, static int empress_reqbufs(struct file *file, void *priv, struct v4l2_requestbuffers *p) { - struct saa7134_fh *fh = priv; - struct saa7134_dev *dev = fh->dev; + struct saa7134_dev *dev = file->private_data; return videobuf_reqbufs(&dev->empress_tsq, p); } @@ -265,24 +262,21 @@ static int empress_reqbufs(struct file *file, void *priv, static int empress_querybuf(struct file *file, void *priv, struct v4l2_buffer *b) { - struct saa7134_fh *fh = priv; - struct saa7134_dev *dev = fh->dev; + struct saa7134_dev *dev = file->private_data; return videobuf_querybuf(&dev->empress_tsq, b); } static int empress_qbuf(struct file *file, void *priv, struct v4l2_buffer *b) { - struct saa7134_fh *fh = priv; - struct saa7134_dev *dev = fh->dev; + struct saa7134_dev *dev = file->private_data; return videobuf_qbuf(&dev->empress_tsq, b); } static int empress_dqbuf(struct file *file, void *priv, struct v4l2_buffer *b) { - struct saa7134_fh *fh = priv; - struct saa7134_dev *dev = fh->dev; + struct saa7134_dev *dev = file->private_data; return videobuf_dqbuf(&dev->empress_tsq, b, file->f_flags & O_NONBLOCK); @@ -291,8 +285,7 @@ static int empress_dqbuf(struct file *file, void *priv, struct v4l2_buffer *b) static int empress_streamon(struct file *file, void *priv, enum v4l2_buf_type type) { - struct saa7134_fh *fh = priv; - struct saa7134_dev *dev = fh->dev; + struct saa7134_dev *dev = file->private_data; return videobuf_streamon(&dev->empress_tsq); } @@ -300,8 +293,7 @@ static int empress_streamon(struct file *file, void *priv, static int empress_streamoff(struct file *file, void *priv, enum v4l2_buf_type type) { - struct saa7134_fh *fh = priv; - struct saa7134_dev *dev = fh->dev; + struct saa7134_dev *dev = file->private_data; return videobuf_streamoff(&dev->empress_tsq); } @@ -309,8 +301,7 @@ static int empress_streamoff(struct file *file, void *priv, static int empress_s_ext_ctrls(struct file *file, void *priv, struct v4l2_ext_controls *ctrls) { - struct saa7134_fh *fh = priv; - struct saa7134_dev *dev = fh->dev; + struct saa7134_dev *dev = file->private_data; /* count == 0 is abused in saa6752hs.c, so that special case is handled here explicitly. */ @@ -329,8 +320,7 @@ static int empress_s_ext_ctrls(struct file *file, void *priv, static int empress_g_ext_ctrls(struct file *file, void *priv, struct v4l2_ext_controls *ctrls) { - struct saa7134_fh *fh = priv; - struct saa7134_dev *dev = fh->dev; + struct saa7134_dev *dev = file->private_data; if (ctrls->ctrl_class != V4L2_CTRL_CLASS_MPEG) return -EINVAL; |