linux/drivers/media/v4l2-core
Hans Verkuil 0e66100637 [media] vb2: fix 'UNBALANCED' warnings when calling vb2_thread_stop()
Stopping the vb2 thread (as used by several DVB devices) can result
in an 'UNBALANCED' warning such as this:

vb2: counters for queue ffff880407ee9828: UNBALANCED!
vb2:     setup: 1 start_streaming: 1 stop_streaming: 1
vb2:     wait_prepare: 249333 wait_finish: 249334

This is due to a race condition between stopping the thread and
calling vb2_internal_streamoff(). While I have not been able to deduce
the exact mechanism how this race condition can produce this warning,
I can see that the way the stream is stopped is likely to lead to a
race somewhere.

This patch simplifies how this is done by first ensuring that the
thread is completely stopped before cleaning up the vb2 queue. It
does that by setting threadio->stop to true, followed by a call to
vb2_queue_error() which will wake up the thread. The thread sees that
'stop' is true and it will exit.

The call to kthread_stop() waits until the thread has exited, and only
then is the queue cleaned up by calling __vb2_cleanup_fileio().

This is a much cleaner sequence and the warning has now disappeared.

Reported-by: Jurgen Kramer <gtmkramer@xs4all.nl>
Tested-by: Jurgen Kramer <gtmkramer@xs4all.nl>
Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com>
Cc: <stable@vger.kernel.org>      # for v3.18 and up
Signed-off-by: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
2015-03-02 11:59:36 -03:00
..
Kconfig v4l2-pci-skeleton: Only build if PCI is available 2014-09-26 11:02:58 +02:00
Makefile
tuner-core.c [media] tuner-core: use true/false for boolean vars 2014-09-03 17:59:14 -03:00
v4l2-async.c
v4l2-clk.c
v4l2-common.c [media] v4l2-common: move v4l2_ctrl_check to cx2341x 2014-11-25 08:25:36 -02:00
v4l2-compat-ioctl32.c [media] V4L2: fix VIDIOC_CREATE_BUFS 32-bit compatibility mode data copy-back 2014-11-03 15:11:59 -02:00
v4l2-ctrls.c [media] v4l2-ctrls: fix sparse warning 2014-10-28 16:32:52 -02:00
v4l2-dev.c [media] v4l2 core: improve debug flag handling 2014-12-23 10:31:37 -02:00
v4l2-device.c
v4l2-dv-timings.c [media] v4l2-dv-timings: only check standards if non-zero 2014-09-21 20:40:33 -03:00
v4l2-event.c [media] v4l: Add source change event 2014-05-23 19:50:40 -03:00
v4l2-fh.c [media] media: v4l2-core: remove the use of V4L2_FL_USE_FH_PRIO flag 2014-07-04 16:14:22 -03:00
v4l2-ioctl.c [media] v4l2 core: improve debug flag handling 2014-12-23 10:31:37 -02:00
v4l2-mem2mem.c [media] v4l2-mem2mem: export v4l2_m2m_try_schedule 2014-07-22 12:06:50 -03:00
v4l2-of.c
v4l2-subdev.c [media] v4l2-subdev: drop get/set_crop pad ops 2014-12-22 18:12:36 -02:00
videobuf2-core.c [media] vb2: fix 'UNBALANCED' warnings when calling vb2_thread_stop() 2015-03-02 11:59:36 -03:00
videobuf2-dma-contig.c [media] vb2: use dma_map_sg_attrs to prevent unnecessary sync 2014-11-25 09:09:19 -02:00
videobuf2-dma-sg.c [media] vb2: use dma_map_sg_attrs to prevent unnecessary sync 2014-11-25 09:09:19 -02:00
videobuf2-dvb.c
videobuf2-memops.c
videobuf2-vmalloc.c [media] vb2-vmalloc: Protect DMA-specific code by #ifdef CONFIG_HAS_DMA 2014-12-23 16:28:09 -02:00
videobuf-core.c [media] videobuf: fix sparse warnings 2014-11-05 09:07:58 -02:00
videobuf-dma-contig.c [media] videobuf-dma-contig: set vm_pgoff to be zero to pass the sanity check in vm_iomap_memory() 2014-10-24 09:32:41 -02:00
videobuf-dma-sg.c [media] videobuf: make unused exported functions static 2015-01-27 10:01:33 -02:00
videobuf-dvb.c
videobuf-vmalloc.c