mirror of https://gitee.com/openkylin/linux.git
V4L/DVB (8020): Fix callbacks functions of saa7134_empress
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>
This commit is contained in:
parent
a8a1f8cc0c
commit
a14fe9605b
|
@ -218,8 +218,7 @@ static int empress_enum_fmt_cap(struct file *file, void *priv,
|
|||
static int empress_g_fmt_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);
|
||||
|
||||
|
@ -232,8 +231,7 @@ static int empress_g_fmt_cap(struct file *file, void *priv,
|
|||
static int empress_s_fmt_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);
|
||||
|
||||
|
@ -247,8 +245,7 @@ static int empress_s_fmt_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);
|
||||
}
|
||||
|
@ -256,24 +253,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);
|
||||
|
@ -282,8 +276,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);
|
||||
}
|
||||
|
@ -291,8 +284,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);
|
||||
}
|
||||
|
@ -300,8 +292,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. */
|
||||
|
@ -320,8 +311,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;
|
||||
|
|
Loading…
Reference in New Issue