linux_dsm_epyc7002/drivers/gpu/drm
Lyude Paul 9408cc94eb drm/dp_mst: Handle UP requests asynchronously
Once upon a time, hotplugging devices on MST branches actually worked in
DRM. Now, it only works in amdgpu (likely because of how it's hotplug
handlers are implemented). On both i915 and nouveau, hotplug
notifications from MST branches are noticed - but trying to respond to
them causes messaging timeouts and causes the whole topology state to go
out of sync with reality, usually resulting in the user needing to
replug the entire topology in hopes that it actually fixes things.

The reason for this is because the way we currently handle UP requests
in MST is completely bogus. drm_dp_mst_handle_up_req() is called from
drm_dp_mst_hpd_irq(), which is usually called from the driver's hotplug
handler. Because we handle sending the hotplug event from this function,
we actually cause the driver's hotplug handler (and in turn, all
sideband transactions) to block on
drm_device->mode_config.connection_mutex. This makes it impossible to
send any sideband messages from the driver's connector probing
functions, resulting in the aforementioned sideband message timeout.

There's even more problems with this beyond breaking hotplugging on MST
branch devices. It also makes it almost impossible to protect
drm_dp_mst_port struct members under a lock because we then have to
worry about dealing with all of the lock dependency issues that ensue.

So, let's finally actually fix this issue by handling the processing of
up requests asyncronously. This way we can send sideband messages from
most contexts without having to deal with getting blocked if we hold
connection_mutex. This also fixes MST branch device hotplugging on i915,
finally!

Cc: Juston Li <juston.li@intel.com>
Cc: Imre Deak <imre.deak@intel.com>
Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
Cc: Harry Wentland <hwentlan@amd.com>
Cc: Daniel Vetter <daniel.vetter@ffwll.ch>
Reviewed-by: Sean Paul <sean@poorly.run>
Signed-off-by: Lyude Paul <lyude@redhat.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20191022023641.8026-5-lyude@redhat.com
2019-10-24 14:24:21 -04:00
..
amd Linux 5.4-rc4 2019-10-23 12:10:05 +02:00
arc drm: Stop including drm_bridge.h from drm_crtc.h 2019-08-28 22:11:03 +02:00
arm drm-misc-next for 5.5: 2019-10-11 09:30:53 +10: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 drm/ast: Allocate cursor BOs at high end of video memory 2019-10-04 10:00:21 +02:00
atmel-hlcdc drm/bridge: panel: Infer connector type from panel by default 2019-09-08 19:04:23 +02:00
bochs drm/vram: Have VRAM MM call GEM VRAM functions directly 2019-09-12 19:54:42 +02:00
bridge Linux 5.4-rc4 2019-10-23 12:10:05 +02:00
cirrus drm: drop resource_id parameter from drm_fb_helper_remove_conflicting_pci_framebuffers 2019-08-23 10:48:31 +02:00
etnaviv Merge drm/drm-next into drm-misc-next 2019-10-03 16:38:50 +02:00
exynos Merge drm/drm-next into drm-misc-next 2019-10-03 16:38:50 +02:00
fsl-dcu drm: Stop including drm_bridge.h from drm_crtc.h 2019-08-28 22:11:03 +02:00
gma500
hisilicon Merge drm/drm-next into drm-misc-next 2019-10-03 16:38:50 +02:00
i2c cec: add cec_adapter to cec_notifier_cec_adap_unregister() 2019-10-07 12:47:43 +02:00
i810 drm/i810: Prevent underflow in ioctl 2019-10-04 17:04:05 +01:00
i915 drm/i915: Update DRIVER_DATE to 20191021 2019-10-21 12:56:07 +03:00
imx Merge drm/drm-next into drm-misc-next 2019-10-03 16:38:50 +02:00
ingenic drm main pull for 5.4-rc1 2019-09-19 16:24:24 -07:00
lib
lima drm/lima: Add support for multiple reset lines 2019-10-05 17:51:16 +08:00
mcde Merge drm/drm-next into drm-misc-next 2019-10-03 16:38:50 +02:00
mediatek Mediatek DRM next for Linux 5.5 2019-10-22 15:03:11 +10:00
meson drm/meson: vclk: use the correct G12A frac max value 2019-09-30 15:22:09 +02:00
mga drm/mga: drop use of drmP.h 2019-06-30 09:48:05 +02:00
mgag200 drm/mgag200: Allocate cursor BOs at high end of video memory 2019-10-04 10:01:12 +02:00
msm Linux 5.4-rc4 2019-10-23 12:10:05 +02:00
mxsfb dma-buf: rename reservation_object to dma_resv 2019-08-13 09:09:30 +02:00
nouveau Merge drm/drm-next into drm-misc-next 2019-10-03 16:38:50 +02:00
omapdrm drm-misc-next for 5.5: 2019-10-11 09:30:53 +10:00
panel Linux 5.4-rc4 2019-10-23 12:10:05 +02:00
panfrost Linux 5.4-rc4 2019-10-23 12:10:05 +02:00
pl111 drm/bridge: panel: Infer connector type from panel by default 2019-09-08 19:04:23 +02:00
qxl Merge drm/drm-next into drm-misc-next 2019-10-03 16:38:50 +02:00
r128 drm/r128: drop use of drmP.h 2019-07-17 12:52:55 +02:00
radeon Linux 5.4-rc4 2019-10-23 12:10:05 +02:00
rcar-du drm: rcar-du: lvds: Add r8a774b1 support 2019-10-16 00:28:32 +03:00
rockchip Merge drm/drm-next into drm-misc-next 2019-10-03 16:38:50 +02:00
savage
scheduler drm/scheduler: use job count instead of peek 2019-08-15 10:52:10 -05:00
selftests drm/mm: Use helpers for drm_mm_node booleans 2019-10-04 13:42:33 +01:00
shmobile drm/shmobile: drop use of drmP.h 2019-07-15 18:11:31 +02:00
sis
sti drm: sti: fix W=1 warnings 2019-09-16 15:14:43 +02:00
stm drm/stm: dsi: higher pll out only in video burst mode 2019-09-16 15:14:10 +02:00
sun4i drm/sun4i: dsi: Fix video start delay computation 2019-10-08 07:56:41 +02:00
tdfx drm/tdfx: drop use of drmP.h 2019-07-17 12:52:55 +02:00
tegra drm main pull for 5.4-rc1 2019-09-19 16:24:24 -07:00
tilcdc drm-misc-next for 5.5: 2019-10-11 09:30:53 +10:00
tiny drm/tiny: Kconfig: Remove always-y THERMAL dep. from TINYDRM_REPAPER 2019-10-10 15:15:51 +02:00
ttm Linux 5.4-rc4 2019-10-23 12:10:05 +02:00
tve200 drm/bridge: panel: Infer connector type from panel by default 2019-09-08 19:04:23 +02:00
udl drm/connector: Share with non-atomic drivers the function to get the single encoder 2019-09-16 15:13:02 -07:00
v3d drm/v3d: clean caches at the end of render jobs on request from user space 2019-09-19 12:57:44 -07:00
vboxvideo drm/vram: Have VRAM MM call GEM VRAM functions directly 2019-09-12 19:54:42 +02:00
vc4 drm-misc-next for 5.5: 2019-10-11 09:30:53 +10:00
vgem dma-buf: rename reservation_object to dma_resv 2019-08-13 09:09:30 +02:00
via drivers/gpu/drm/via: convert put_page() to put_user_page*() 2019-09-24 15:54:08 -07:00
virtio drm main pull for 5.4-rc1 2019-09-19 16:24:24 -07:00
vkms drm/vkms: Reduce critical section in vblank_simulate 2019-09-03 17:16:53 +02:00
vmwgfx Merge drm/drm-next into drm-misc-next 2019-10-03 16:38:50 +02:00
xen xen: fixes for 5.4-rc3 2019-10-12 14:11:21 -07:00
zte Linus 5.3-rc1 2019-07-22 21:24:10 +02:00
ati_pcigart.c drm/ati_pcigart: drop dependency on drm_os_linux.h 2019-07-19 23:24:16 +02:00
drm_agpsupport.c gpu/drm: fix a few kernel-doc "/**" mark warnings 2019-07-16 11:25:02 +02:00
drm_atomic_helper.c Merge drm/drm-next into drm-misc-next 2019-10-03 16:38:50 +02:00
drm_atomic_state_helper.c drm/atomic: Rename crtc_state->pageflip_flags to async_flip 2019-09-18 18:43:36 +02:00
drm_atomic_uapi.c Merge drm/drm-next into drm-misc-next 2019-10-03 16:38:50 +02:00
drm_atomic.c drm: Free the writeback_job when it with an empty fb 2019-09-23 15:31:53 +08:00
drm_auth.c
drm_blend.c drm/blend: Define the direction of Z position values 2019-09-06 20:23:21 +02:00
drm_bridge.c
drm_bufs.c drm main pull request for v5.3-rc1 (sans mm changes) 2019-07-15 19:04:27 -07:00
drm_cache.c
drm_client_modeset.c Merge drm/drm-next into drm-misc-next 2019-10-03 16:38:50 +02:00
drm_client.c drm/fb-helper: Map DRM client buffer only when required 2019-08-01 15:01:29 +02:00
drm_color_mgmt.c
drm_connector.c drm: Add DisplayPort colorspace property creation function 2019-09-20 18:46:18 +03:00
drm_context.c
drm_crtc_helper_internal.h drm/connector: Share with non-atomic drivers the function to get the single encoder 2019-09-16 15:13:02 -07:00
drm_crtc_helper.c Merge drm/drm-next into drm-misc-next 2019-10-03 16:38:50 +02:00
drm_crtc_internal.h
drm_crtc.c
drm_damage_helper.c drm: damage_helper: Fix race checking plane->state->fb 2019-10-08 09:41:06 -04:00
drm_debugfs_crc.c drm: Fix return type of crc .poll() 2019-09-30 20:17:31 +03:00
drm_debugfs.c
drm_dma.c gpu/drm: fix a few kernel-doc "/**" mark warnings 2019-07-16 11:25:02 +02:00
drm_dp_aux_dev.c drm/dp_mst: Enable registration of AUX devices for MST ports 2019-07-25 16:39:35 -04:00
drm_dp_cec.c drm_dp_cec: add connector info support. 2019-08-27 12:52:59 +02:00
drm_dp_dual_mode_helper.c
drm_dp_helper.c drm/doc: Improve docs around connector (un)registration 2019-09-18 12:41:08 +02:00
drm_dp_mst_topology_internal.h drm/dp_mst: Add sideband down request tracing + selftests 2019-09-03 19:30:06 -04:00
drm_dp_mst_topology.c drm/dp_mst: Handle UP requests asynchronously 2019-10-24 14:24:21 -04:00
drm_drv.c Merge drm/drm-next into drm-misc-next 2019-10-03 16:38:50 +02:00
drm_dsc.c drm/dsc: Fix bogus cpu_to_be16() usage 2019-09-30 20:15:53 +03:00
drm_dumb_buffers.c Revert "drm/gem: Rename drm_gem_dumb_map_offset() to drm_gem_map_offset()" 2019-08-07 11:56:48 -04:00
drm_edid_load.c drm/print: add drm_debug_enabled() 2019-10-02 16:28:55 +03:00
drm_edid.c Linux 5.4-rc4 2019-10-23 12:10:05 +02:00
drm_encoder_slave.c
drm_encoder.c drm: Stop including drm_bridge.h from drm_crtc.h 2019-08-28 22:11:03 +02:00
drm_fb_cma_helper.c
drm_fb_helper.c drm/fb-helper: Include prototype for drm_fb_helper_modinit() 2019-09-30 20:15:07 +03:00
drm_file.c
drm_flip_work.c
drm_format_helper.c
drm_fourcc.c
drm_framebuffer.c drm: silence variable 'conn' set but not used 2019-07-22 16:04:53 -04: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: Use mutex_trylock in drm_gem_shmem_purge 2019-08-28 10:02:39 -05:00
drm_gem_ttm_helper.c drm: tweak drm_print_bits() 2019-09-24 09:57:21 +02:00
drm_gem_vram_helper.c drm/vram: Support top-down placement flag 2019-09-27 09:48:53 +02:00
drm_gem.c dma-buf: rename reservation_object to dma_resv 2019-08-13 09:09:30 +02:00
drm_hashtab.c
drm_hdcp.c drm/hdcp: reference for srm file format 2019-08-06 13:18:42 +05:30
drm_internal.h
drm_ioc32.c Linus 5.3-rc1 2019-07-22 21:24:10 +02:00
drm_ioctl.c drm/atomic: Take the atomic toys away from X 2019-09-18 18:42:21 +02:00
drm_irq.c
drm_kms_helper_common.c drm: fix module name in edid_firmware log message 2019-08-22 10:41:06 +03:00
drm_lease.c
drm_legacy_misc.c gpu/drm: fix a few kernel-doc "/**" mark warnings 2019-07-16 11:25:02 +02:00
drm_legacy.h
drm_lock.c gpu/drm: fix a few kernel-doc "/**" mark warnings 2019-07-16 11:25:02 +02:00
drm_memory.c drm: Include prototype for drm_need_swiotlb() 2019-09-30 20:16:28 +03:00
drm_mipi_dbi.c drm/print: add drm_debug_enabled() 2019-10-02 16:28:55 +03:00
drm_mipi_dsi.c drivers: Introduce device lookup variants by of_node 2019-07-30 13:07:41 +02:00
drm_mm.c drm/mm: Use clear_bit_unlock() for releasing the drm_mm_node() 2019-10-04 13:43:43 +01:00
drm_mode_config.c
drm_mode_object.c drm/kms: Duct-tape for mode object lifetime checks 2019-09-18 11:27:18 +02:00
drm_modes.c drm main pull for 5.4-rc1 2019-09-19 16:24:24 -07:00
drm_modeset_helper.c
drm_modeset_lock.c docs conversion for v5.3-rc1 2019-07-16 12:21:41 -07:00
drm_of.c drm: Remove redundant of_device_is_available check 2019-09-20 15:03:42 -04:00
drm_panel_orientation_quirks.c drm: panel-orientation-quirks: Add extra quirk table entry for GPD MicroPC 2019-07-01 16:58:09 +02:00
drm_panel.c drm/panel: Add and fill drm_panel type field 2019-09-08 19:04:01 +02:00
drm_pci.c
drm_plane_helper.c
drm_plane.c
drm_prime.c drm/prime: Ditch gem_prime_res_obj hook 2019-07-31 10:19:23 +02:00
drm_print.c drm/print: add drm_debug_enabled() 2019-10-02 16:28:55 +03:00
drm_probe_helper.c drm/connector: Allow max possible encoders to attach to a connector 2019-09-16 15:13:53 -07:00
drm_property.c
drm_rect.c
drm_scatter.c gpu/drm: fix a few kernel-doc "/**" mark warnings 2019-07-16 11:25:02 +02:00
drm_scdc_helper.c
drm_self_refresh_helper.c drm: Measure Self Refresh Entry/Exit times to avoid thrashing 2019-09-19 10:03:32 -04:00
drm_simple_kms_helper.c drm: Stop including drm_bridge.h from drm_crtc.h 2019-08-28 22:11:03 +02:00
drm_syncobj.c drm/syncobj: Include the prototype for drm_timeout_abs_to_jiffies() 2019-09-30 20:17:00 +03:00
drm_sysfs.c drm: uevent for connector status change 2019-08-06 13:16:54 +05:30
drm_trace_points.c
drm_trace.h drm: Add high-precision time to vblank trace event 2019-09-03 09:46:18 +02:00
drm_vblank.c drm/print: add drm_debug_enabled() 2019-10-02 16:28:55 +03:00
drm_vm.c gpu/drm: fix a few kernel-doc "/**" mark warnings 2019-07-16 11:25:02 +02:00
drm_vma_manager.c
drm_vram_helper_common.c drm/vram: Have VRAM MM call GEM VRAM functions directly 2019-09-12 19:54:42 +02:00
drm_writeback.c drm: Clear the fence pointer when writeback job signaled 2019-09-23 15:32:53 +08:00
Kconfig Merge drm/drm-next into drm-misc-next 2019-10-03 16:38:50 +02:00
Makefile Merge drm/drm-next into drm-misc-next 2019-10-03 16:38:50 +02:00