linux_dsm_epyc7002/drivers/gpu/drm
Laurent Pinchart 5ee5a81df5 drm: rcar-du: Fix race condition in hardware plane allocator
The plane allocator has been inherently racy since the beginning of the
transition to atomic updates, as the allocator lock is released between
free plane check (at .atomic_check() time) and the reservation (at
.atomic_update() time).

To fix it, create a new allocator solely based on the atomic plane
states without keeping any external state and perform allocation in the
.atomic_check() handler. The core idea is to replace the free planes
bitmask with a collective knowledge based on the allocated hardware
plane(s) for each KMS plane. The allocator then loops over all plane
states to compute the free planes bitmask, allocates hardware planes
based on that bitmask, and stores the result back in the plane states.

For this to work we need to access the current state of planes not
touched by the atomic update. To ensure that it won't be modified, we
need to lock all planes using drm_atomic_get_plane_state(). This
effectively serializes atomic updates from .atomic_check() up to
completion, either when swapping the states if the check step has
succeeded, or when freeing the states if the check step has failed.

Suggested-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Signed-off-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
2015-03-03 16:16:30 +02:00
..
amd Merge branch 'drm-next' of git://people.freedesktop.org/~airlied/linux 2015-02-16 15:48:00 -08:00
armada Merge tag 'topic/core-stuff-2014-12-19' of git://anongit.freedesktop.org/drm-intel into drm-next 2015-01-09 09:13:41 +10:00
ast drm/fb-helper: Propagate errors from initial config failure 2015-01-21 14:57:03 +01:00
atmel-hlcdc drm: atmel-hlcdc: Add dependency on ARM 2015-01-31 10:14:28 +10:00
bochs drm/fb-helper: Propagate errors from initial config failure 2015-01-21 14:57:03 +01:00
bridge drm/bridge: dw-hdmi: Adapt to bridge API change 2015-01-28 10:01:30 +01:00
cirrus Merge branch 'drm-next' of git://people.freedesktop.org/~airlied/linux 2015-02-16 15:48:00 -08:00
exynos Merge branch 'exynos-drm-next' of git://git.kernel.org/pub/scm/linux/kernel/git/daeinki/drm-exynos into drm-next 2015-02-13 13:02:49 +10:00
gma500 drm/fb-helper: Propagate errors from initial config failure 2015-01-21 14:57:03 +01:00
i2c Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux into drm-next 2015-01-29 11:45:31 +10:00
i810
i915 Merge tag 'topic/drm-misc-2015-02-25' of git://anongit.freedesktop.org/drm-intel into drm-next 2015-02-26 10:32:55 +10:00
imx imx-drm fixes for IPUv3 DC and i.MX5 IPUv3 IC and TVE 2015-02-11 15:35:26 +10:00
mga
mgag200 drm/fb-helper: Propagate errors from initial config failure 2015-01-21 14:57:03 +01:00
msm drm/atomic-helper: Rename commmit_post/pre_planes 2015-02-24 01:57:46 +01:00
nouveau Merge tag 'topic/core-stuff-2015-01-23' of git://anongit.freedesktop.org/drm-intel into drm-next 2015-01-27 08:54:11 +10:00
omapdrm drm/fb-helper: Propagate errors from initial config failure 2015-01-21 14:57:03 +01:00
panel drm: panel/simple: add backlight dependency 2015-01-31 10:11:45 +10:00
qxl drm/fb-helper: Propagate errors from initial config failure 2015-01-21 14:57:03 +01:00
r128
radeon Merge branch 'drm-next' of git://people.freedesktop.org/~airlied/linux 2015-02-16 15:48:00 -08:00
rcar-du drm: rcar-du: Fix race condition in hardware plane allocator 2015-03-03 16:16:30 +02:00
rockchip drm: rockchip: add reset controller dependency 2015-01-31 10:11:48 +10:00
savage
shmobile drm: Kconfig: Let all DRM_GEM_CMA_HELPER related macros depend on HAVE_DMA_ATTRS 2015-02-03 11:12:37 +10:00
sis
sti drm: sti: HDMI add audio infoframe 2015-02-05 16:21:19 +01:00
tdfx
tegra drm/atomic-helper: Rename commmit_post/pre_planes 2015-02-24 01:57:46 +01:00
tilcdc drm: Kconfig: Let all DRM_GEM_CMA_HELPER related macros depend on HAVE_DMA_ATTRS 2015-02-03 11:12:37 +10:00
ttm
udl drm/udl: properly set active_16 flag in udl_crtc_page_flip(). (v2) 2015-01-31 10:12:23 +10:00
via
vmwgfx drm/vmwgfx: Replace the hw mutex with a hw spinlock 2015-01-19 03:02:13 -08:00
ati_pcigart.c
drm_agpsupport.c
drm_atomic_helper.c drm/atomic-helpers: make mode_set hooks optional 2015-02-24 01:58:15 +01:00
drm_atomic.c drm: Add DRM_DEBUG_ATOMIC 2015-02-23 11:19:49 +01:00
drm_auth.c
drm_bridge.c drm/bridge: make bridge registration independent of drm flow 2015-01-28 08:45:40 +01:00
drm_bufs.c
drm_cache.c
drm_context.c
drm_crtc_helper.c
drm_crtc_internal.h
drm_crtc.c drm: If available use atomic state in getcrtc ioctl 2015-02-23 11:20:11 +01:00
drm_debugfs.c
drm_dma.c
drm_dp_helper.c drm/dp: add drm_dp_link_power_down() helper 2015-02-01 15:06:42 -05:00
drm_dp_mst_topology.c
drm_drv.c
drm_edid_load.c
drm_edid.c
drm_encoder_slave.c
drm_fb_cma_helper.c
drm_fb_helper.c Merge branch 'drm-next' of git://people.freedesktop.org/~airlied/linux 2015-02-16 15:48:00 -08:00
drm_flip_work.c
drm_fops.c drm: Make drm_read() more robust against multithreaded races 2015-01-21 14:57:03 +01:00
drm_gem_cma_helper.c
drm_gem.c
drm_global.c
drm_hashtab.c
drm_info.c
drm_internal.h
drm_ioc32.c
drm_ioctl.c
drm_irq.c drm: Fix drm_crtc_vblank_get() documentation 2015-02-23 11:19:34 +01:00
drm_legacy.h
drm_lock.c
drm_memory.c
drm_mipi_dsi.c drm/mipi-dsi: Avoid potential NULL pointer dereference 2015-01-28 08:45:37 +01:00
drm_mm.c
drm_modes.c drm/modes: Print the mode status in human readable form 2015-02-03 09:09:22 +01:00
drm_modeset_lock.c
drm_of.c
drm_panel.c
drm_pci.c
drm_plane_helper.c Merge tag 'topic/atomic-core-2015-01-27' of git://anongit.freedesktop.org/drm-intel into drm-next 2015-01-28 09:34:27 +10:00
drm_platform.c
drm_prime.c
drm_probe_helper.c drm/probe-helper: clamp unknown connector status in the poll work 2015-01-22 06:11:39 +01:00
drm_rect.c
drm_scatter.c
drm_sysfs.c drm: Use static attribute groups for managing connector sysfs entries 2015-02-04 15:02:00 +01:00
drm_trace_points.c
drm_trace.h
drm_vm.c
drm_vma_manager.c mm: remove rest usage of VM_NONLINEAR and pte_file() 2015-02-10 14:30:31 -08:00
Kconfig drm: Kconfig: Let all DRM_GEM_CMA_HELPER related macros depend on HAVE_DMA_ATTRS 2015-02-03 11:12:37 +10:00
Makefile drm/bridge: make bridge registration independent of drm flow 2015-01-28 08:45:40 +01:00