linux/drivers/media/platform
Hans Verkuil 693c5f144a media: vicodec: media_device_cleanup was called too early
Running the contrib/test/test-media script in v4l-utils with the vicodec argument
will cause this kernel warning:

[  372.298824] ------------[ cut here ]------------
[  372.298848] DEBUG_LOCKS_WARN_ON(lock->magic != lock)
[  372.298896] WARNING: CPU: 11 PID: 2220 at kernel/locking/mutex.c:938 __mutex_lock+0x919/0xc10
[  372.298907] Modules linked in: vicodec v4l2_mem2mem vivid rc_cec v4l2_tpg videobuf2_dma_contig cec rc_core v4l2_dv_timings videobuf2_vmalloc videobuf2_memops videobuf2_v4l2 videobuf2_common videodev mc vmw_balloon vmw_vmci button vmwgfx [last unloaded: vimc]
[  372.298961] CPU: 11 PID: 2220 Comm: sleep Not tainted 5.4.0-rc1-test-no #150
[  372.298970] Hardware name: VMware, Inc. VMware Virtual Platform/440BX Desktop Reference Platform, BIOS 6.00 07/29/2019
[  372.298983] RIP: 0010:__mutex_lock+0x919/0xc10
[  372.298995] Code: 59 83 e8 9a fc 16 ff 44 8b 05 23 61 38 01 45 85 c0 0f 85 ef f7 ff ff 48 c7 c6 a0 1f 87 82 48 c7 c7 a0 1e 87 82 e8 cd bb f7 fe <0f> 0b e9 d5 f7 ff ff f6 c3 04 0f 84 3b fd ff ff 49 89 df 41 83 e7
[  372.299004] RSP: 0018:ffff8881b400fb80 EFLAGS: 00010286
[  372.299014] RAX: 0000000000000000 RBX: 0000000000000000 RCX: 0000000000000000
[  372.299022] RDX: 0000000000000003 RSI: 0000000000000004 RDI: ffffed1036801f62
[  372.299030] RBP: ffff8881b400fcf0 R08: ffffffff81217c91 R09: fffffbfff061c271
[  372.299038] R10: fffffbfff061c270 R11: ffffffff830e1383 R12: ffff88814761dc80
[  372.299046] R13: 0000000000000000 R14: ffff88814761cbf0 R15: ffff88814761d030
[  372.299055] FS:  0000000000000000(0000) GS:ffff8881b68c0000(0000) knlGS:0000000000000000
[  372.299063] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
[  372.299071] CR2: 00007f606d78aa20 CR3: 0000000003013002 CR4: 00000000001606e0
[  372.299153] Call Trace:
[  372.299176]  ? __kasan_slab_free+0x12f/0x180
[  372.299187]  ? kmem_cache_free+0x9b/0x250
[  372.299200]  ? do_exit+0xcdf/0x1200
[  372.299210]  ? do_group_exit+0x85/0x130
[  372.299220]  ? __x64_sys_exit_group+0x23/0x30
[  372.299231]  ? do_syscall_64+0x5e/0x1c0
[  372.299241]  ? entry_SYSCALL_64_after_hwframe+0x44/0xa9
[  372.299295]  ? v4l2_release+0xed/0x190 [videodev]
[  372.299309]  ? mutex_lock_io_nested+0xb80/0xb80
[  372.299323]  ? find_held_lock+0x85/0xa0
[  372.299335]  ? fsnotify+0x5b0/0x600
[  372.299351]  ? locks_remove_file+0x78/0x2b0
[  372.299363]  ? __fsnotify_update_child_dentry_flags.part.0+0x170/0x170
[  372.299383]  ? vidioc_querycap+0x50/0x50 [vicodec]
[  372.299426]  ? v4l2_release+0xed/0x190 [videodev]
[  372.299467]  v4l2_release+0xed/0x190 [videodev]
[  372.299484]  __fput+0x15a/0x390
[  372.299499]  task_work_run+0xb2/0xe0
[  372.299512]  do_exit+0x4d0/0x1200
[  372.299528]  ? do_user_addr_fault+0x367/0x610
[  372.299538]  ? release_task+0x990/0x990
[  372.299552]  ? rwsem_spin_on_owner+0x170/0x170
[  372.299567]  ? vmacache_find+0xb2/0x100
[  372.299580]  do_group_exit+0x85/0x130
[  372.299592]  __x64_sys_exit_group+0x23/0x30
[  372.299602]  do_syscall_64+0x5e/0x1c0
[  372.299614]  entry_SYSCALL_64_after_hwframe+0x44/0xa9
[  372.299624] RIP: 0033:0x7f606d74a9d6
[  372.299640] Code: Bad RIP value.
[  372.299648] RSP: 002b:00007fff65364468 EFLAGS: 00000246 ORIG_RAX: 00000000000000e7
[  372.299658] RAX: ffffffffffffffda RBX: 00007f606d83b760 RCX: 00007f606d74a9d6
[  372.299666] RDX: 0000000000000000 RSI: 000000000000003c RDI: 0000000000000000
[  372.299673] RBP: 0000000000000000 R08: 00000000000000e7 R09: ffffffffffffff80
[  372.299681] R10: 00007fff65364334 R11: 0000000000000246 R12: 00007f606d83b760
[  372.299689] R13: 0000000000000002 R14: 00007f606d844428 R15: 0000000000000000
[  372.299704] ---[ end trace add7d62ca4bc65e3 ]---

This is caused by media_device_cleanup() which destroys
v4l2_dev->mdev->req_queue_mutex. But v4l2_release() tries to lock
that mutex after media_device_cleanup() is called.

By moving media_device_cleanup() to the v4l2_device's release function it is
guaranteed that the mutex is valid whenever v4l2_release is called.

Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: Mauro Carvalho Chehab <mchehab+samsung@kernel.org>
2019-11-10 07:45:17 +01:00
..
am437x media: am437x: fix smatch warning 2019-11-05 10:33:36 -03:00
atmel media: atmel: atmel-isi: fix timeout value for stop streaming 2019-08-23 07:27:55 -03:00
cadence media: v4l: cadence: Fix how unsued lanes are handled in 'csi2rx_start()' 2019-10-10 07:19:13 -03:00
cec-gpio media: cec-gpio: add notifier support 2019-10-01 17:21:14 -03:00
coda media: coda: disable decoder crop selections 2019-11-10 07:27:40 +01:00
cros-ec-cec chrome platform changes for v5.4 2019-09-19 14:14:28 -07:00
davinci media: use the BIT() macro 2019-08-26 14:08:50 -03:00
exynos4-is media: exynos4-is: fix wrong mdev and v4l2 dev order in error path 2019-11-08 07:39:40 +01:00
exynos-gsc media: media/platform: don't set description in ENUM_FMT 2019-07-22 14:43:59 -04:00
marvell-ccic media: marvell-ccic: mmp: add MODULE_DEVICE_TABLE 2019-07-25 06:27:14 -04:00
meson media: platform: meson-ao-cec-g12a: add support for SM1 2019-07-23 08:51:50 -04:00
mtk-jpeg media: mtk-jpeg: Use vb2_get_buffer 2019-06-21 16:22:02 -04:00
mtk-mdp media: platform: mtk-mdp: mtk_mdp_core: Add of_node_put() before goto 2019-08-13 11:49:46 -03:00
mtk-vcodec media: mtk-vcodec: Remove extra area allocation in an input buffer on encoding 2019-11-10 07:25:34 +01:00
mtk-vpu media: mtk-vpu: fix two smatch warnings 2019-11-08 07:25:39 +01:00
omap media updates for v5.4-rc1 2019-09-17 17:55:23 -07:00
omap3isp media: use the BIT() macro 2019-08-26 14:08:50 -03:00
qcom media: venus: remove invalid compat_ioctl32 handler 2019-11-09 09:08:30 +01:00
rcar-vin media: rcar-csi2: Enable support for R8A774B1 2019-11-05 08:55:07 -03:00
rockchip/rga media: Remove dev_err() usage after platform_get_irq() 2019-08-07 17:08:33 -03:00
s3c-camif media: s3c-camif: make array 'registers' static const, makes object smaller 2019-10-01 16:43:49 -03:00
s5p-cec media: s5p-cec: use cec_notifier_cec_adap_(un)register 2019-07-23 08:39:27 -04:00
s5p-g2d media: s3c-camif/s5p-g2d/s5p-jpeg: set device_caps in struct video_device 2019-07-22 14:45:40 -04:00
s5p-jpeg media: s5p-jpeg: drop unused components from s5p_jpeg_q_data 2019-11-05 09:08:04 -03:00
s5p-mfc media: don't do a 31 bit shift on a signed int 2019-08-26 14:11:10 -03:00
seco-cec media: seco-cec: Add a missing 'release_region()' in an error handling path 2019-10-01 16:41:21 -03:00
sti media: bdisp: fix memleak on release 2019-11-05 08:50:02 -03:00
stm32 media: stm32-dcmi: Delete an unnecessary of_node_put() call in dcmi_probe() 2019-08-29 10:23:02 -03:00
sunxi media: sun4i: Add H3 deinterlace driver 2019-10-24 19:07:59 -03:00
tegra-cec media: use the BIT() macro 2019-08-26 14:08:50 -03:00
ti-vpe media: ti-vpe: fix smatch error 2019-11-08 07:27:47 +01:00
vicodec media: vicodec: media_device_cleanup was called too early 2019-11-10 07:45:17 +01:00
vimc media: vimc: upon streaming, check that the pipeline starts with a source entity 2019-11-10 07:25:03 +01:00
vivid media: vivid: Add an area control 2019-11-08 07:41:21 +01:00
vsp1 media: use the BIT() macro 2019-08-26 14:08:50 -03:00
xilinx media: xilinx: Use the correct style for SPDX License Identifier 2019-11-05 08:30:51 -03:00
aspeed-video.c media: aspeed-video: Fix memory leaks in aspeed_video_probe 2019-11-10 07:23:38 +01:00
fsl-viu.c media: don't do a 31 bit shift on a signed int 2019-08-26 14:11:10 -03:00
imx-pxp.c media: Remove dev_err() usage after platform_get_irq() 2019-08-07 17:08:33 -03:00
imx-pxp.h media: imx-pxp: add i.MX Pixel Pipeline driver 2018-09-11 13:32:17 -04:00
Kconfig media: sun4i: Add H3 deinterlace driver 2019-10-24 19:07:59 -03:00
m2m-deinterlace.c media: m2m-deinterlace: use struct v4l2_fh 2019-07-23 11:49:41 -04:00
Makefile media: ti-vpe: Fix a parallel build issue 2019-10-10 11:39:32 -03:00
mx2_emmaprp.c media: don't do a 31 bit shift on a signed int 2019-08-26 14:11:10 -03:00
pxa_camera.c media: don't do a 31 bit shift on a signed int 2019-08-26 14:11:10 -03:00
rcar_drif.c media: rcar_drif: fix a memory disclosure 2019-11-05 08:56:24 -03:00
rcar_fdp1.c media: fdp1: Fix R-Car M3-N naming in debug message 2019-11-05 09:01:49 -03:00
rcar_jpu.c media: v4l2: Get rid of ->vidioc_enum_fmt_vid_{cap, out}_mplane 2019-06-05 07:48:32 -04:00
rcar-fcp.c Char/Misc driver patches for 4.19-rc1 2018-08-18 11:04:51 -07:00
renesas-ceu.c media: Remove dev_err() usage after platform_get_irq() 2019-08-07 17:08:33 -03:00
sh_veu.c media: sh_veu: convert to struct v4l2_fh 2019-07-25 06:29:26 -04:00
sh_vou.c media: sh_veu/sh_vou: set device_caps in struct video_device 2019-07-22 15:09:06 -04:00
via-camera.c media: via-camera: convert to the vb2 framework 2019-07-30 12:18:34 -04:00
via-camera.h
video-mux.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 157 2019-05-30 11:26:37 -07:00
vim2m.c media: vim2m: media_device_cleanup was called too early 2019-11-10 07:44:43 +01:00