1. 22 8月, 2014 1 次提交
    • F
      [media] em28xx-v4l: give back all active video buffers to the vb2 core properly on streaming stop · 627530c3
      Frank Schaefer 提交于
      When a new video frame is started, the driver takes the next video buffer from
      the list of active buffers and moves it to dev->usb_ctl.vid_buf / dev->usb_ctl.vbi_buf
      for further processing.
      
      On streaming stop we currently only give back the pending buffers from the list
      but not the ones which are currently processed.
      
      This causes the following warning from the vb2 core since kernel 3.15:
      
      ...
       ------------[ cut here ]------------
       WARNING: CPU: 1 PID: 2284 at drivers/media/v4l2-core/videobuf2-core.c:2115 __vb2_queue_cancel+0xed/0x150 [videobuf2_core]()
       [...]
       Call Trace:
        [<c0769c46>] dump_stack+0x48/0x69
        [<c0245b69>] warn_slowpath_common+0x79/0x90
        [<f925e4ad>] ? __vb2_queue_cancel+0xed/0x150 [videobuf2_core]
        [<f925e4ad>] ? __vb2_queue_cancel+0xed/0x150 [videobuf2_core]
        [<c0245bfd>] warn_slowpath_null+0x1d/0x20
        [<f925e4ad>] __vb2_queue_cancel+0xed/0x150 [videobuf2_core]
        [<f925fa35>] vb2_internal_streamoff+0x35/0x90 [videobuf2_core]
        [<f925fac5>] vb2_streamoff+0x35/0x60 [videobuf2_core]
        [<f925fb27>] vb2_ioctl_streamoff+0x37/0x40 [videobuf2_core]
        [<f8e45895>] v4l_streamoff+0x15/0x20 [videodev]
        [<f8e4925d>] __video_do_ioctl+0x23d/0x2d0 [videodev]
        [<f8e49020>] ? video_ioctl2+0x20/0x20 [videodev]
        [<f8e48c63>] video_usercopy+0x203/0x5a0 [videodev]
        [<f8e49020>] ? video_ioctl2+0x20/0x20 [videodev]
        [<c039d0e7>] ? fsnotify+0x1e7/0x2b0
        [<f8e49012>] video_ioctl2+0x12/0x20 [videodev]
        [<f8e49020>] ? video_ioctl2+0x20/0x20 [videodev]
        [<f8e4461e>] v4l2_ioctl+0xee/0x130 [videodev]
        [<f8e44530>] ? v4l2_open+0xf0/0xf0 [videodev]
        [<c0378de2>] do_vfs_ioctl+0x2e2/0x4d0
        [<c0368eec>] ? vfs_write+0x13c/0x1c0
        [<c0369a8f>] ? vfs_writev+0x2f/0x50
        [<c0379028>] SyS_ioctl+0x58/0x80
        [<c076fff3>] sysenter_do_call+0x12/0x12
       ---[ end trace 5545f934409f13f4 ]---
      ...
      
      Many thanks to Hans Verkuil, whose recently added check in the vb2 core unveiled
      this long standing issue and who has investigated it further.
      
      Cc: <stable@vger.kernel.org>
      Signed-off-by: NFrank Schäfer <fschaefer.oss@googlemail.com>
      Signed-off-by: NMauro Carvalho Chehab <m.chehab@samsung.com>
      627530c3
  2. 27 7月, 2014 4 次提交
  3. 05 7月, 2014 1 次提交
  4. 25 5月, 2014 1 次提交
  5. 24 5月, 2014 18 次提交
  6. 23 5月, 2014 2 次提交
  7. 23 4月, 2014 1 次提交
  8. 11 3月, 2014 1 次提交
  9. 06 3月, 2014 1 次提交
  10. 03 3月, 2014 1 次提交
  11. 05 2月, 2014 2 次提交
  12. 15 1月, 2014 7 次提交
    • F
      [media] em28xx: fix usb alternate setting for analog and digital video endpoints > 0 · 961717b4
      Frank Schaefer 提交于
      The current code assumes that the analog + digital video endpoints are always at
      interface number 0 when changing the alternate setting.
      This seems to work fine for most existing devices.
      However, at least the SpeedLink VAD Laplace webcam has the video endpoint on
      interface number 3 (which fortunately doesn't cause any trouble because ist uses
      bulk transfers only).
      We already consider the actual interface number for audio endpoints, so
      rename the the audio_ifnum variable and use it for all device types.
      Also get get rid of a pointless (ifnum < 0) in em28xx-audio.
      Signed-off-by: NFrank Schäfer <fschaefer.oss@googlemail.com>
      Signed-off-by: NMauro Carvalho Chehab <m.chehab@samsung.com>
      961717b4
    • F
      [media] em28xx: make 'em28xx_ctrl_ops' static · 8068eb88
      Fengguang Wu 提交于
      sparse warnings: (new ones prefixed by >>)
      
      >> drivers/media/usb/em28xx/em28xx-video.c:1151:28: sparse: symbol 'em28xx_ctrl_ops' was not declared. Should it be static?
      Signed-off-by: NFengguang Wu <fengguang.wu@intel.com>
      Signed-off-by: NMauro Carvalho Chehab <m.chehab@samsung.com>
      8068eb88
    • M
      [media] em28xx: push mutex down to extensions on .fini callback · ebbfbc20
      Mauro Carvalho Chehab 提交于
      Avoid circular mutex lock by pushing the dev->lock to the .fini
      callback on each extension.
      
      As em28xx-dvb, em28xx-alsa and em28xx-rc have their own data
      structures, and don't touch at the common structure during .fini,
      only em28xx-v4l needs to be locked.
      
      [   90.994317] ======================================================
      [   90.994356] [ INFO: possible circular locking dependency detected ]
      [   90.994395] 3.13.0-rc1+ #24 Not tainted
      [   90.994427] -------------------------------------------------------
      [   90.994458] khubd/54 is trying to acquire lock:
      [   90.994490]  (&card->controls_rwsem){++++.+}, at: [<ffffffffa0177b08>] snd_ctl_dev_free+0x28/0x60 [snd]
      [   90.994656]
      [   90.994656] but task is already holding lock:
      [   90.994688]  (&dev->lock){+.+.+.}, at: [<ffffffffa040db81>] em28xx_close_extension+0x31/0x90 [em28xx]
      [   90.994843]
      [   90.994843] which lock already depends on the new lock.
      [   90.994843]
      [   90.994874]
      [   90.994874] the existing dependency chain (in reverse order) is:
      [   90.994905]
      -> #1 (&dev->lock){+.+.+.}:
      [   90.995057]        [<ffffffff810b8fa3>] __lock_acquire+0xb43/0x1330
      [   90.995121]        [<ffffffff810b9f82>] lock_acquire+0xa2/0x120
      [   90.995182]        [<ffffffff816a5b6c>] mutex_lock_nested+0x5c/0x3c0
      [   90.995245]        [<ffffffffa0422cca>] em28xx_vol_put_mute+0x1ba/0x1d0 [em28xx_alsa]
      [   90.995309]        [<ffffffffa017813d>] snd_ctl_elem_write+0xfd/0x140 [snd]
      [   90.995376]        [<ffffffffa01791c2>] snd_ctl_ioctl+0xe2/0x810 [snd]
      [   90.995442]        [<ffffffff811db8b0>] do_vfs_ioctl+0x300/0x520
      [   90.995504]        [<ffffffff811dbb51>] SyS_ioctl+0x81/0xa0
      [   90.995568]        [<ffffffff816b1929>] system_call_fastpath+0x16/0x1b
      [   90.995630]
      -> #0 (&card->controls_rwsem){++++.+}:
      [   90.995780]        [<ffffffff810b7a47>] check_prevs_add+0x947/0x950
      [   90.995841]        [<ffffffff810b8fa3>] __lock_acquire+0xb43/0x1330
      [   90.995901]        [<ffffffff810b9f82>] lock_acquire+0xa2/0x120
      [   90.995962]        [<ffffffff816a762b>] down_write+0x3b/0xa0
      [   90.996022]        [<ffffffffa0177b08>] snd_ctl_dev_free+0x28/0x60 [snd]
      [   90.996088]        [<ffffffffa017a255>] snd_device_free+0x65/0x140 [snd]
      [   90.996154]        [<ffffffffa017a751>] snd_device_free_all+0x61/0xa0 [snd]
      [   90.996219]        [<ffffffffa0173af4>] snd_card_do_free+0x14/0x130 [snd]
      [   90.996283]        [<ffffffffa0173f14>] snd_card_free+0x84/0x90 [snd]
      [   90.996349]        [<ffffffffa0423397>] em28xx_audio_fini+0x97/0xb0 [em28xx_alsa]
      [   90.996411]        [<ffffffffa040dba6>] em28xx_close_extension+0x56/0x90 [em28xx]
      [   90.996475]        [<ffffffffa040f639>] em28xx_usb_disconnect+0x79/0x90 [em28xx]
      [   90.996539]        [<ffffffff814a06e7>] usb_unbind_interface+0x67/0x1d0
      [   90.996620]        [<ffffffff8142920f>] __device_release_driver+0x7f/0xf0
      [   90.996682]        [<ffffffff814292a5>] device_release_driver+0x25/0x40
      [   90.996742]        [<ffffffff81428b0c>] bus_remove_device+0x11c/0x1a0
      [   90.996801]        [<ffffffff81425536>] device_del+0x136/0x1d0
      [   90.996863]        [<ffffffff8149e0c0>] usb_disable_device+0xb0/0x290
      [   90.996923]        [<ffffffff814930c5>] usb_disconnect+0xb5/0x1d0
      [   90.996984]        [<ffffffff81495ab6>] hub_port_connect_change+0xd6/0xad0
      [   90.997044]        [<ffffffff814967c3>] hub_events+0x313/0x9b0
      [   90.997105]        [<ffffffff81496e95>] hub_thread+0x35/0x170
      [   90.997165]        [<ffffffff8108ea2f>] kthread+0xff/0x120
      [   90.997226]        [<ffffffff816b187c>] ret_from_fork+0x7c/0xb0
      [   90.997287]
      [   90.997287] other info that might help us debug this:
      [   90.997287]
      [   90.997318]  Possible unsafe locking scenario:
      [   90.997318]
      [   90.997348]        CPU0                    CPU1
      [   90.997378]        ----                    ----
      [   90.997408]   lock(&dev->lock);
      [   90.997497]                                lock(&card->controls_rwsem);
      [   90.997607]                                lock(&dev->lock);
      [   90.997697]   lock(&card->controls_rwsem);
      [   90.997786]
      [   90.997786]  *** DEADLOCK ***
      [   90.997786]
      [   90.997817] 5 locks held by khubd/54:
      [   90.997847]  #0:  (&__lockdep_no_validate__){......}, at: [<ffffffff81496564>] hub_events+0xb4/0x9b0
      [   90.998025]  #1:  (&__lockdep_no_validate__){......}, at: [<ffffffff81493076>] usb_disconnect+0x66/0x1d0
      [   90.998204]  #2:  (&__lockdep_no_validate__){......}, at: [<ffffffff8142929d>] device_release_driver+0x1d/0x40
      [   90.998383]  #3:  (em28xx_devlist_mutex){+.+.+.}, at: [<ffffffffa040db77>] em28xx_close_extension+0x27/0x90 [em28xx]
      [   90.998567]  #4:  (&dev->lock){+.+.+.}, at: [<ffffffffa040db81>] em28xx_close_extension+0x31/0x90 [em28xx]
      Reviewed-by: NFrank Schäfer <fschaefer.oss@googlemail.com>
      Tested-by: NAntti Palosaari <crope@iki.fi>
      Signed-off-by: NMauro Carvalho Chehab <m.chehab@samsung.com>
      ebbfbc20
    • M
      [media] em28xx: print a message at disconnect · aa929ad7
      Mauro Carvalho Chehab 提交于
      That helps to identify if something fails and explain why em28xx
      struct is not freed (if it ever happens).
      Reviewed-by: NFrank Schäfer <fschaefer.oss@googlemail.com>
      Tested-by: NAntti Palosaari <crope@iki.fi>
      Signed-off-by: NMauro Carvalho Chehab <m.chehab@samsung.com>
      aa929ad7
    • F
      [media] em28xx-v4l: fix the freeing of the video devices memory · e847022a
      Frank Schaefer 提交于
      Remove some dead code from em28xx_v4l2_fini() and fix the leaking of the video,
      vbi and radio video_device struct memories.
      Signed-off-by: NFrank Schäfer <fschaefer.oss@googlemail.com>
      Signed-off-by: NMauro Carvalho Chehab <m.chehab@samsung.com>
      e847022a
    • F
      [media] em28xx: always call em28xx_release_resources() in the usb disconnect handler · 5a620c7c
      Frank Schaefer 提交于
      When the usb device is disconnected, the resources are no longer available,
      so there is no reason to keep them registered.
      
      This will also fix the various sysfs group removal warnings which we can see
      since kernel 3.13.
      Signed-off-by: NFrank Schäfer <fschaefer.oss@googlemail.com>
      Signed-off-by: NMauro Carvalho Chehab <m.chehab@samsung.com>
      5a620c7c
    • F
      [media] em28xx-v4l: move v4l2_ctrl_handler freeing and v4l2_device... · f188da43
      Frank Schaefer 提交于
      [media] em28xx-v4l: move v4l2_ctrl_handler freeing and v4l2_device unregistration to em28xx_v4l2_fini
      
      v4l2_ctrl_handler_free() and v4l2_device_unregister() are currently only called
      when the last user closes the device and the device is already disconnected.
      But that's wrong, we need to call these functions whenever the em28xx-v4l
      extension is closed and we can already do this if the device is still opened
      by some users.
      Signed-off-by: NFrank Schäfer <fschaefer.oss@googlemail.com>
      Signed-off-by: NMauro Carvalho Chehab <m.chehab@samsung.com>
      f188da43