linux/drivers/gpu/drm
Chris Wilson b1e3177bd1 drm/i915: Coordinate i915_active with its own mutex
Forgo the struct_mutex serialisation for i915_active, and interpose its
own mutex handling for active/retire.

This is a multi-layered sleight-of-hand. First, we had to ensure that no
active/retire callbacks accidentally inverted the mutex ordering rules,
nor assumed that they were themselves serialised by struct_mutex. More
challenging though, is the rule over updating elements of the active
rbtree. Instead of the whole i915_active now being serialised by
struct_mutex, allocations/rotations of the tree are serialised by the
i915_active.mutex and individual nodes are serialised by the caller
using the i915_timeline.mutex (we need to use nested spinlocks to
interact with the dma_fence callback lists).

The pain point here is that instead of a single mutex around execbuf, we
now have to take a mutex for active tracker (one for each vma, context,
etc) and a couple of spinlocks for each fence update. The improvement in
fine grained locking allowing for multiple concurrent clients
(eventually!) should be worth it in typical loads.

v2: Add some comments that barely elucidate anything :(

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Reviewed-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20191004134015.13204-6-chris@chris-wilson.co.uk
2019-10-04 15:39:12 +01:00
..
amd drm-misc-next for 5.4: 2019-08-21 16:44:41 +10:00
arc
arm drm/arm: drop use of drmP.h 2019-08-14 18:31:15 +02:00
armada drm/armada: drop use of drmP.h 2019-08-14 18:31:10 +02:00
aspeed drm/aspeed: gfc_crtc: Make structure aspeed_gfx_funcs constant 2019-08-14 19:27:26 +02:00
ast
atmel-hlcdc
bochs
bridge - R-Car DU fixes 2019-08-22 13:16:19 +10:00
cirrus
etnaviv Merge branch 'etnaviv/next' of https://git.pengutronix.de/git/lst/linux into drm-next 2019-08-22 13:21:16 +10:00
exynos
fsl-dcu drm/fsl-dcu: fix opencoded use of drm_panel_* 2019-08-10 15:41:48 +02:00
gma500
hisilicon
i2c drm/i2c/tda998x: drop use of drmP.h 2019-08-14 18:30:52 +02:00
i810
i915 drm/i915: Coordinate i915_active with its own mutex 2019-10-04 15:39:12 +01:00
imx - R-Car DU fixes 2019-08-22 13:16:19 +10:00
ingenic
lib
lima dma-buf: rename reservation_object to dma_resv 2019-08-13 09:09:30 +02:00
mcde
mediatek dma-buf: rename reservation_object to dma_resv 2019-08-13 09:09:30 +02:00
meson drm: meson: venc: set the correct macrovision max amplitude value 2019-08-09 12:06:14 +02:00
mga
mgag200
msm drm-misc-next for 5.4: 2019-08-21 16:44:41 +10:00
mxsfb dma-buf: rename reservation_object to dma_resv 2019-08-13 09:09:30 +02:00
nouveau drm-misc-next for 5.4: 2019-08-21 16:44:41 +10:00
omapdrm drm/omap: displays: Remove unused panel drivers 2019-08-16 21:10:21 +02:00
panel drm/panel: tpo-td043mtea1: remove redundant assignment 2019-08-17 16:53:55 +02:00
panfrost dma-buf: rename reservation_object to dma_resv 2019-08-13 09:09:30 +02:00
pl111
qxl dma-buf: rename reservation_object to dma_resv 2019-08-13 09:09:30 +02:00
r128
radeon drm-misc-next for 5.4: 2019-08-21 16:44:41 +10:00
rcar-du drm: rcar-du: lvds: Fix bridge_to_rcar_lvds 2019-08-16 15:50:27 +03:00
rockchip
savage
scheduler
selftests
shmobile
sis
sti
stm
sun4i drm: sun4i: Add support for enabling DDC I2C bus to sun8i_dw_hdmi glue 2019-08-12 10:07:04 +02:00
tdfx
tegra drm/tegra: drop use of drmP.h 2019-08-14 18:31:04 +02:00
tilcdc
tiny drm: gm12u320: Add -ENODEV to list of errors to ignore 2019-08-12 21:30:21 +02:00
ttm drm-misc-next for 5.4: 2019-08-21 16:44:41 +10:00
tve200
udl
v3d dma-buf: rename reservation_object to dma_resv 2019-08-13 09:09:30 +02:00
vboxvideo drm/vboxvideo: Make structure vbox_fb_helper_funcs constant 2019-08-18 12:52:52 +02:00
vc4 dma-buf: rename reservation_object to dma_resv 2019-08-13 09:09:30 +02:00
vgem dma-buf: rename reservation_object to dma_resv 2019-08-13 09:09:30 +02:00
via
virtio dma-buf: rename reservation_object to dma_resv 2019-08-13 09:09:30 +02:00
vkms
vmwgfx drm-misc-next for 5.4: 2019-08-21 16:44:41 +10:00
xen drm/xen-front: Make structure fb_funcs constant 2019-08-19 08:32:52 +03:00
zte
ati_pcigart.c
drm_agpsupport.c
drm_atomic.c
drm_atomic_helper.c
drm_atomic_state_helper.c
drm_atomic_uapi.c dma-buf: rename reservation_object to dma_resv 2019-08-13 09:09:30 +02:00
drm_auth.c
drm_blend.c
drm_bridge.c
drm_bufs.c
drm_cache.c
drm_client.c
drm_client_modeset.c
drm_color_mgmt.c
drm_connector.c drm: Fix kerneldoc warns in connector-related docs 2019-08-12 10:16:39 -04:00
drm_context.c
drm_crtc.c
drm_crtc_helper.c drm: Remove bridge support from legacy helpers 2019-08-16 15:50:27 +03:00
drm_crtc_helper_internal.h
drm_crtc_internal.h
drm_damage_helper.c
drm_debugfs.c
drm_debugfs_crc.c
drm_dma.c
drm_dp_aux_dev.c
drm_dp_cec.c
drm_dp_dual_mode_helper.c
drm_dp_helper.c
drm_dp_mst_topology.c
drm_drv.c
drm_dsc.c
drm_dumb_buffers.c
drm_edid.c
drm_edid_load.c
drm_encoder.c
drm_encoder_slave.c
drm_fb_cma_helper.c
drm_fb_helper.c
drm_file.c
drm_flip_work.c
drm_format_helper.c
drm_fourcc.c
drm_framebuffer.c
drm_gem.c dma-buf: rename reservation_object to dma_resv 2019-08-13 09:09:30 +02:00
drm_gem_cma_helper.c
drm_gem_framebuffer_helper.c dma-buf: rename reservation_object to dma_resv 2019-08-13 09:09:30 +02:00
drm_gem_shmem_helper.c drm/shmem: Put pages independent of a SG table being set 2019-08-12 14:18:42 -06:00
drm_gem_vram_helper.c
drm_hashtab.c
drm_hdcp.c
drm_internal.h
drm_ioc32.c
drm_ioctl.c
drm_irq.c
drm_kms_helper_common.c
drm_lease.c
drm_legacy.h
drm_legacy_misc.c
drm_lock.c
drm_memory.c
drm_mipi_dbi.c
drm_mipi_dsi.c
drm_mm.c
drm_mode_config.c
drm_mode_object.c
drm_modes.c
drm_modeset_helper.c
drm_modeset_lock.c
drm_of.c
drm_panel.c drm/panel: drop return code from drm_panel_detach() 2019-08-10 15:41:48 +02:00
drm_panel_orientation_quirks.c
drm_pci.c
drm_plane.c
drm_plane_helper.c
drm_prime.c
drm_print.c
drm_probe_helper.c
drm_property.c
drm_rect.c
drm_scatter.c
drm_scdc_helper.c
drm_self_refresh_helper.c
drm_simple_kms_helper.c
drm_syncobj.c drm/syncobj: Add better overview documentation for syncobj (v2) 2019-08-12 16:58:52 +02:00
drm_sysfs.c
drm_trace.h
drm_trace_points.c
drm_vblank.c
drm_vm.c
drm_vma_manager.c
drm_vram_helper_common.c
drm_vram_mm_helper.c
drm_writeback.c
Kconfig
Makefile