linux/drivers/media/platform
Laurent Pinchart 8eb0e64219 media: v4l: vsp1: Fix deadlock in VSPDL DRM pipelines
The VSP uses a lock to protect the BRU and BRS assignment when
configuring pipelines. The lock is taken in vsp1_du_atomic_begin() and
released in vsp1_du_atomic_flush(), as well as taken and released in
vsp1_du_setup_lif(). This guards against multiple pipelines trying to
assign the same BRU and BRS at the same time.

The DRM framework calls the .atomic_begin() operations in a loop over
all CRTCs included in an atomic commit. On a VSPDL (the only VSP type
where this matters), a single VSP instance handles two CRTCs, with a
single lock. This results in a deadlock when the .atomic_begin()
operation is called on the second CRTC.

The DRM framework serializes atomic commits that affect the same CRTCs,
but doesn't know about two CRTCs sharing the same VSPDL. Two commits
affecting the VSPDL LIF0 and LIF1 respectively can thus race each other,
hence the need for a lock.

This could be fixed on the DRM side by forcing serialization of commits
affecting CRTCs backed by the same VSPDL, but that would negatively
affect performances, as the locking is only needed when the BRU and BRS
need to be reassigned, which is an uncommon case.

The lock protects the whole .atomic_begin() to .atomic_flush() sequence.
The only operation that can occur in-between is vsp1_du_atomic_update(),
which doesn't touch the BRU and BRS, and thus doesn't need to be
protected by the lock. We can thus only take the lock around the
pipeline setup calls in vsp1_du_atomic_flush(), which fixes the
deadlock.

Fixes: f81f9adc4e ("media: v4l: vsp1: Assign BRU and BRS to pipelines dynamically")

Signed-off-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
Reviewed-by: Kieran Bingham <kieran.bingham+renesas@ideasonboard.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab+samsung@kernel.org>
2018-07-30 08:22:59 -04:00
..
am437x treewide: devm_kzalloc() -> devm_kcalloc() 2018-06-12 16:19:22 -07:00
atmel media: Remove depends on HAS_DMA in case of platform dependency 2018-05-28 16:17:08 -04:00
cadence media: v4l: cadence: Add Cadence MIPI-CSI2 TX driver 2018-05-17 06:22:08 -04:00
cec-gpio media: cec-gpio: use GPIOD_OUT_HIGH_OPEN_DRAIN 2018-05-09 16:15:06 -04:00
coda media: coda: set colorimetry on coded queue 2018-05-09 16:23:33 -04:00
davinci treewide: devm_kzalloc() -> devm_kcalloc() 2018-06-12 16:19:22 -07:00
exynos-gsc media updates for v4.16-rc1 2018-02-06 11:27:48 -08:00
exynos4-is media: include/media: fix missing | operator when setting cfg 2018-05-05 09:01:22 -04:00
marvell-ccic Merge branch 'i2c/for-4.18' of git://git.kernel.org/pub/scm/linux/kernel/git/wsa/linux 2018-06-14 16:21:46 +09:00
meson media: platform: Add Amlogic Meson AO CEC Controller driver 2017-08-09 10:45:26 -04:00
mtk-jpeg media: vcodec: fix ptr_ret.cocci warnings 2018-05-09 15:58:30 -04:00
mtk-mdp License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
mtk-vcodec media: mtk-vcodec: Always signal source change event on format change 2018-02-26 07:41:36 -05:00
mtk-vpu media: mtk-vpu: add description for wdt fields at struct mtk_vpu 2017-11-30 04:19:00 -05:00
omap media: omap2: fix compile-testing with FB_OMAP2=m 2018-06-06 14:37:51 -04:00
omap3isp media: omap3isp: Don't use GFP_DMA 2018-05-09 16:38:38 -04:00
qcom treewide: devm_kzalloc() -> devm_kcalloc() 2018-06-12 16:19:22 -07:00
rcar-vin media: Remove depends on HAS_DMA in case of platform dependency 2018-05-28 16:17:08 -04:00
rockchip/rga media: rca: declare formats var as static 2018-03-23 06:28:41 -04:00
s3c-camif media: s3c-camif: fix out-of-bounds array access 2018-03-06 07:29:04 -05:00
s5p-cec media: s5p-cec: add NACK detection support 2017-09-23 07:29:30 -04:00
s5p-g2d media: platform: make video_device const 2017-08-27 08:44:30 -04:00
s5p-jpeg media: s5p-jpeg: don't return a value on a void function 2018-05-04 08:58:22 -04:00
s5p-mfc media: s5p-mfc: fix two sparse warnings 2018-05-25 15:31:00 -04:00
soc_camera docs: Fix some broken references 2018-06-15 18:10:01 -03:00
sti media: Remove depends on HAS_DMA in case of platform dependency 2018-05-28 16:17:08 -04:00
stm32 media: stm32-dcmi: add JPEG support 2018-03-21 11:53:09 -04:00
tegra-cec media: tegra-cec: reset rx_buf_cnt when start bit detected 2018-03-05 07:46:24 -05:00
ti-vpe media: v4l2-async: simplify v4l2_async_subdev structure 2017-12-29 07:14:28 -05:00
vimc media: vimc: use correct subdev functions 2018-02-26 09:31:41 -05:00
vivid treewide: Use array_size() in vzalloc() 2018-06-12 16:19:22 -07:00
vsp1 media: v4l: vsp1: Fix deadlock in VSPDL DRM pipelines 2018-07-30 08:22:59 -04:00
xilinx treewide: devm_kzalloc() -> devm_kcalloc() 2018-06-12 16:19:22 -07:00
Kconfig media: m2m-deinterlace: Remove DMA_ENGINE dependency 2018-05-28 16:20:25 -04:00
Makefile media: v4l: cadence: Add Cadence MIPI-CSI2 RX driver 2018-05-16 11:12:21 -04:00
fsl-viu.c media: platform: fix some 64-bits warnings 2018-04-17 05:50:00 -04:00
m2m-deinterlace.c media updates for v4.16-rc1 2018-02-06 11:27:48 -08:00
mx2_emmaprp.c media: annotate ->poll() instances 2017-11-27 16:20:06 -05:00
pxa_camera.c docs: Fix some broken references 2018-06-15 18:10:01 -03:00
rcar-fcp.c v4l: rcar-fcp: Add an API to retrieve the FCP device 2017-06-09 12:25:36 +01:00
rcar_drif.c media: rcar_drif: fix error return code in rcar_drif_alloc_dmachannels() 2018-02-26 07:43:29 -05:00
rcar_fdp1.c media: drivers: remove "/**" from non-kernel-doc comments 2017-11-30 04:19:03 -05:00
rcar_jpu.c media: rcar_jpu: Add missing clk_disable_unprepare() on error in jpu_open() 2018-05-11 11:23:54 -04:00
renesas-ceu.c media: renesas-ceu: fix compiler warning 2018-05-25 15:33:34 -04:00
sh_veu.c media: platform: sh_veu: use 64-bit arithmetic instead of 32-bit 2018-02-26 08:09:48 -05:00
sh_vou.c media: replace all <spaces><tab> occurrences 2018-01-04 13:15:05 -05:00
via-camera.c fbdev changes for v4.18: 2018-06-17 05:00:24 +09:00
via-camera.h media: fix usage of whitespaces and on indentation 2018-01-04 13:12:01 -05:00
video-mux.c media: platform: video-mux: propagate format from sink to source 2018-05-04 15:56:15 -04:00
vim2m.c media: drivers: remove "/**" from non-kernel-doc comments 2017-11-30 04:19:03 -05:00