linux/drivers/gpu/drm/i915
Lyude Paul a5c2c0d164 drm/display/dp_mst: Add nonblocking helpers for DP MST
As Daniel Vetter pointed out, if we only use the atomic modesetting locks
with MST it's technically possible for a driver with non-blocking modesets
to race when it comes to MST displays - as we make the mistake of not doing
our own CRTC commit tracking in the topology_state object.

This could potentially cause problems if something like this happens:

* User starts non-blocking commit to disable CRTC-1 on MST topology 1
* User starts non-blocking commit to enable CRTC-2 on MST topology 1

There's no guarantee here that the commit for disabling CRTC-2 will only
occur after CRTC-1 has finished, since neither commit shares a CRTC - only
the private modesetting object for MST. Keep in mind this likely isn't a
problem for blocking modesets, only non-blocking.

So, begin fixing this by keeping track of which CRTCs on a topology have
changed by keeping track of which CRTCs we release or allocate timeslots
on. As well, add some helpers for:

* Setting up the drm_crtc_commit structs in the ->commit_setup hook
* Waiting for any CRTC dependencies from the previous topology state

v2:
* Use drm_dp_mst_atomic_setup_commit() directly - Jani

Signed-off-by: Lyude Paul <lyude@redhat.com>
Cc: Wayne Lin <Wayne.Lin@amd.com>
Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
Cc: Fangzhi Zuo <Jerry.Zuo@amd.com>
Cc: Jani Nikula <jani.nikula@intel.com>
Cc: Imre Deak <imre.deak@intel.com>
Cc: Daniel Vetter <daniel.vetter@ffwll.ch>
Cc: Sean Paul <sean@poorly.run>
Acked-by: Jani Nikula <jani.nikula@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20220817193847.557945-9-lyude@redhat.com
2022-08-23 16:53:37 -04:00
..
display drm/display/dp_mst: Add nonblocking helpers for DP MST 2022-08-23 16:53:37 -04:00
gem drm/i915: Implement intersect/compatible functions 2022-08-22 15:35:45 +02:00
gt Driver uAPI changes: 2022-07-22 15:51:31 +10:00
gvt Merge tag 'drm-intel-gt-next-2022-06-29' of git://anongit.freedesktop.org/drm/drm-intel into drm-next 2022-07-01 14:14:52 +10:00
pxp drm/i915/pxp: fix sparse warning for not declared symbol 2022-06-08 11:32:28 +03:00
selftests drm/i915/selftests: fix subtraction overflow bug 2022-07-12 17:57:27 -04:00
.gitignore
i915_active_types.h drm/i915/active: remove useless i915_utils.h include 2021-12-13 12:04:44 +02:00
i915_active.c drm/i915: Bump GT idling delay to 2 jiffies 2022-07-12 17:44:40 -04:00
i915_active.h drm/i915: Remove unused bits of i915_vma/active api 2021-12-20 16:26:09 +01:00
i915_cmd_parser.c drm/i915: include linux/highmem.h and linux/swap.h where needed 2022-03-04 11:15:25 +02:00
i915_cmd_parser.h drm/i915: split out i915_cmd_parser.h from i915_drv.h 2022-01-10 15:43:09 +02:00
i915_config.c drm/i915: remove IS_ACTIVE 2021-10-07 11:04:05 -07:00
i915_debugfs_params.c drm/i915: Use to_gt() helper 2021-12-17 21:51:59 -08:00
i915_debugfs_params.h
i915_debugfs.c Merge drm/drm-next into drm-intel-gt-next 2022-04-21 13:48:26 -04:00
i915_debugfs.h
i915_deps.c drm/i915: fix broken build 2022-04-08 10:36:11 +02:00
i915_deps.h drm/i915: Break out the i915_deps utility 2021-12-22 08:52:57 +01:00
i915_driver.c - Suspend fixes for Display (Jose) 2022-07-12 12:55:36 +10:00
i915_driver.h drm/i915: Move intel_vtd_active and run_as_guest to i915_utils 2022-03-30 12:04:01 +01:00
i915_drm_client.c drm/i915/fdinfo: Don't show engine classes not present 2022-06-17 09:04:38 +01:00
i915_drm_client.h drm/i915/client: only include what's needed 2022-06-07 21:31:17 +03:00
i915_drv.h Driver uAPI changes: 2022-07-22 15:51:31 +10:00
i915_file_private.h drm/i915: Explicitly track DRM clients 2022-04-05 08:38:49 +01:00
i915_fixed.h
i915_gem_evict.c Merge tag 'drm-intel-gt-next-2022-02-17' of git://anongit.freedesktop.org/drm/drm-intel into drm-intel-next 2022-02-23 15:03:51 -05:00
i915_gem_evict.h Merge tag 'drm-intel-gt-next-2022-02-17' of git://anongit.freedesktop.org/drm/drm-intel into drm-intel-next 2022-02-23 15:03:51 -05:00
i915_gem_gtt.c Merge tag 'drm-intel-gt-next-2022-02-17' of git://anongit.freedesktop.org/drm/drm-intel into drm-intel-next 2022-02-23 15:03:51 -05:00
i915_gem_gtt.h drm/i915: Remove short-term pins from execbuf, v6. 2022-01-18 12:19:30 +01:00
i915_gem_ww.c drm/i915: Break out dma_resv ww locking utilities to separate files 2021-06-17 14:22:59 +01:00
i915_gem_ww.h drm/i915: Ditch the i915_gem_ww_ctx loop member 2021-08-20 09:39:41 +01:00
i915_gem.c drm/i915: Explicitly track DRM clients 2022-04-05 08:38:49 +01:00
i915_gem.h drm/i915/tasklet: separate local hacks around struct tasklet_struct 2022-06-07 21:47:19 +03:00
i915_getparam.c drm/i915/sseu: Disassociate internal subslice mask representation from uapi 2022-06-02 07:20:59 -07:00
i915_getparam.h drm/i915: split out i915_getparam.h from i915_drv.h 2022-01-10 15:43:05 +02:00
i915_gpu_error.c drm/i915/gt: Add general DSS steering iterator to intel_gt_mcr 2022-07-08 09:32:57 -07:00
i915_gpu_error.h drm/i915: Add extra registers to GPU error dump 2022-06-02 09:14:36 -07:00
i915_ioc32.c drm/i915: split out i915_getparam.h from i915_drv.h 2022-01-10 15:43:05 +02:00
i915_ioc32.h
i915_ioctl.c drm/i915: split out i915_reg_read_ioctl() to i915_ioctl.[ch] 2022-01-21 09:59:22 +02:00
i915_ioctl.h drm/i915: split out i915_reg_read_ioctl() to i915_ioctl.[ch] 2022-01-21 09:59:22 +02:00
i915_iosf_mbi.h drm/i915: abstraction for iosf to compile on all archs 2021-10-27 00:32:01 -07:00
i915_irq.c drm: Fix typo 'the the' in comment 2022-07-27 09:17:58 +02:00
i915_irq.h drm/i915/hpd: hide struct intel_hotplug_funcs 2022-02-09 13:39:35 +02:00
i915_memcpy.c
i915_memcpy.h
i915_mitigations.c drm/i915: move the DRIVER_* macros to i915_driver.[ch] 2022-02-10 11:44:25 +02:00
i915_mitigations.h
i915_mm.c drm/i915: Skip remap_io_mapping() for non-x86 platforms 2021-12-08 13:26:14 -08:00
i915_mm.h drm/i915: Fix header test for !CONFIG_X86 2022-02-07 12:56:49 +00:00
i915_module.c Merge tag 'drm-intel-gt-next-2022-02-17' of git://anongit.freedesktop.org/drm/drm-intel into drm-intel-next 2022-02-23 15:03:51 -05:00
i915_params.c drm/i915: Add lmem_bar_size modparam 2022-07-13 17:47:51 +01:00
i915_params.h drm/i915: Add lmem_bar_size modparam 2022-07-13 17:47:51 +01:00
i915_pci.c Driver uAPI changes: 2022-07-22 15:51:31 +10:00
i915_pci.h drm/i915/pci: rename functions to have i915_pci prefix 2021-08-26 10:50:19 +03:00
i915_perf_oa_regs.h drm/i915/perf: Express OA register ranges with i915_range 2022-02-02 07:52:23 -08:00
i915_perf_types.h drm/i915: Fix CFI violation with show_dynamic_id() 2022-05-19 12:10:57 +03:00
i915_perf.c i915/perf: Disable OA sseu config param for gfx12.50+ 2022-07-08 08:27:36 -07:00
i915_perf.h drm/i915: Use a table for i915_init/exit (v2) 2021-07-22 12:05:17 +02:00
i915_pmu.c Bitmap patches for 5.19-rc1 2022-06-04 14:04:27 -07:00
i915_pmu.h drm/i915: Use a table for i915_init/exit (v2) 2021-07-22 12:05:17 +02:00
i915_priolist_types.h
i915_pvinfo.h
i915_query.c drm/i915/uapi: expose the avail tracking 2022-07-01 08:29:59 +01:00
i915_query.h
i915_reg_defs.h drm/i915/gt: Remove GEN12_SFC_DONE_MAX from register defs header 2022-03-11 08:18:27 -08:00
i915_reg.h - Suspend fixes for Display (Jose) 2022-07-12 12:55:36 +10:00
i915_request.c Revert "drm/i915: Hold reference to intel_context over life of i915_request" 2022-06-27 23:47:26 +05:30
i915_request.h drm/i915: Do not access rq->engine without a reference 2022-06-27 23:46:35 +05:30
i915_scatterlist.c drm/i915/ttm: fix 32b build 2022-07-13 16:06:08 +01:00
i915_scatterlist.h drm/i915/ttm: fix 32b build 2022-07-13 16:06:08 +01:00
i915_scheduler_types.h drm/i915/guc: Implement GuC priority management 2021-07-27 17:32:27 -07:00
i915_scheduler.c drm/i915: move scheduler slabs to direct module init/exit 2021-07-28 17:18:56 +02:00
i915_scheduler.h drm/i915/tasklet: separate local hacks around struct tasklet_struct 2022-06-07 21:47:19 +03:00
i915_selftest.h
i915_suspend.c drm/i915/fbc: Remove intel_fbc_global_disable() 2022-04-13 17:19:04 +03:00
i915_suspend.h
i915_sw_fence_work.c drm/i915: Drop stealing of bits from i915_sw_fence function pointer 2021-11-30 17:52:15 -08:00
i915_sw_fence_work.h drm/i915: Drop error handling from dma_fence_work 2021-07-16 21:47:39 +02:00
i915_sw_fence.c dma-buf: add enum dma_resv_usage v4 2022-04-07 12:53:53 +02:00
i915_sw_fence.h drm/i915: Drop stealing of bits from i915_sw_fence function pointer 2021-11-30 17:52:15 -08:00
i915_switcheroo.c drm/i915/driver: add i915_driver_ prefix to functions 2021-11-17 11:47:55 +02:00
i915_switcheroo.h
i915_syncmap.c
i915_syncmap.h
i915_sysfs.c drm/i915/gt: Fix memory leaks in per-gt sysfs 2022-05-26 09:37:05 +01:00
i915_sysfs.h drm/i915/gt: create per-tile sysfs interface 2022-03-21 08:37:39 +00:00
i915_tasklet.h drm/i915/tasklet: separate local hacks around struct tasklet_struct 2022-06-07 21:47:19 +03:00
i915_trace_points.c
i915_trace.h drm/i915/trace: split out display trace to a separate file 2021-12-09 11:21:46 +02:00
i915_ttm_buddy_manager.c drm/i915: Implement intersect/compatible functions 2022-08-22 15:35:45 +02:00
i915_ttm_buddy_manager.h drm/i915/uapi: expose the avail tracking 2022-07-01 08:29:59 +01:00
i915_user_extensions.c
i915_user_extensions.h
i915_utils.c drm/i915: Move intel_vtd_active and run_as_guest to i915_utils 2022-03-30 12:04:01 +01:00
i915_utils.h drm/i915/utils: throw out unused stuff 2022-06-07 21:47:25 +03:00
i915_vgpu.c drm/i915: Add object locking to i915_gem_evict_for_node and i915_gem_evict_something, v2. 2022-01-18 12:18:03 +01:00
i915_vgpu.h
i915_vma_resource.c drm/i915: Remove the vm open count 2022-03-07 08:50:03 +01:00
i915_vma_resource.h drm/i915: Remove the vm open count 2022-03-07 08:50:03 +01:00
i915_vma_types.h drm/i915: Remove the vma refcount 2022-03-07 08:50:52 +01:00
i915_vma.c drm/i915: Fix vm use-after-free in vma destruction 2022-07-04 10:25:50 +02:00
i915_vma.h drm/i915: use IOMEM_ERR_PTR() directly 2022-05-04 13:10:49 +01:00
intel_device_info.c drm/i915/mtl: Add MeteorLake PCI IDs 2022-07-08 13:25:33 -07:00
intel_device_info.h Driver uAPI changes: 2022-07-22 15:51:31 +10:00
intel_dram.c drm/i915/pcode: Extend pcode functions for multiple gt's 2022-05-20 09:11:27 +01:00
intel_dram.h
intel_gvt_mmio_table.c drm/i915/regs: split out intel audio register definitions 2022-06-03 10:49:16 +03:00
intel_gvt.c drm/i915/gvt: Fix the compiling error when CONFIG_DRM_I915_DEBUG_RUNTIME_PM=n 2022-04-28 17:01:17 -04:00
intel_gvt.h drm/i915/gvt: move the gvt code into kvmgt.ko 2022-04-21 07:36:56 -04:00
intel_mchbar_regs.h drm/i915: Clean up SSKPD/MLTR defines 2022-02-18 08:42:17 +02:00
intel_memory_region.c drm/i915: remove intel_memory_region avail 2022-07-01 08:29:59 +01:00
intel_memory_region.h drm/i915: remove intel_memory_region avail 2022-07-01 08:29:59 +01:00
intel_pch.c drm/i915: Nuke PCH_JSP 2022-07-06 20:33:47 +03:00
intel_pch.h drm/i915: Nuke PCH_JSP 2022-07-06 20:33:47 +03:00
intel_pci_config.h drm/i915: split out PCI config space registers from i915_reg.h 2022-01-10 16:17:46 +02:00
intel_pcode.c drm/i915/pcode: Add a couple of pcode helpers 2022-05-20 09:11:45 +01:00
intel_pcode.h drm/i915/pcode: Add a couple of pcode helpers 2022-05-20 09:11:45 +01:00
intel_pm_types.h drm/i915: split out intel_pm_types.h 2021-12-03 11:28:12 +02:00
intel_pm.c drm: Remove unnecessary include statements of drm_plane_helper.h 2022-07-26 18:42:04 +02:00
intel_pm.h drm/i915/wm: move wm state verification to intel_pm.c 2022-06-17 11:54:28 +03:00
intel_region_ttm.c drm/i915/ttm: fix 32b build 2022-07-13 16:06:08 +01:00
intel_region_ttm.h drm/i915/ttm: fix 32b build 2022-07-13 16:06:08 +01:00
intel_runtime_pm.c drm/i915/selftests: Disable runtime pm wakeref tracking for the mock device 2022-02-11 13:22:10 +02:00
intel_runtime_pm.h drm/i915/selftests: Disable runtime pm wakeref tracking for the mock device 2022-02-11 13:22:10 +02:00
intel_sbi.c drm/i915: Only include i915_reg.h from .c files 2022-02-02 07:59:54 -08:00
intel_sbi.h drm/i915: rename intel_sideband.[ch] to intel_sbi.[ch] 2021-10-14 18:05:04 +03:00
intel_step.c drm/i915/pvc: Extract stepping information from PCI revid 2022-05-31 14:44:57 -07:00
intel_step.h drm/i915/pvc: Extract stepping information from PCI revid 2022-05-31 14:44:57 -07:00
intel_uncore.c drm/i915/gt: Move multicast register handling to a dedicated file 2022-06-17 08:05:12 -07:00
intel_uncore.h drm/i915/gt: Move multicast register handling to a dedicated file 2022-06-17 08:05:12 -07:00
intel_wakeref.c
intel_wakeref.h drm/i915/guc: Take engine PM when a context is pinned with GuC submission 2021-10-15 10:37:26 -07:00
intel_wopcm.c drm/i915/wopcm: Handle pre-programmed WOPCM registers 2022-01-26 11:47:24 -08:00
intel_wopcm.h
Kconfig Merge tag 'drm-intel-next-2022-05-20' of git://anongit.freedesktop.org/drm/drm-intel into drm-intel-gt-next 2022-05-23 09:34:47 +01:00
Kconfig.debug drm/i915: Improve debug Kconfig texts a bit 2021-07-06 10:10:07 +02:00
Kconfig.profile drm/i915: Fail too long user submissions by default 2021-03-26 01:01:27 +01:00
Kconfig.unstable drm/i915: Kill the fake lmem support 2022-02-18 22:31:46 -08:00
Makefile Merge tag 'drm-intel-gt-next-2022-06-29' of git://anongit.freedesktop.org/drm/drm-intel into drm-next 2022-07-01 14:14:52 +10:00
TODO.txt drm/i915/tasklet: separate local hacks around struct tasklet_struct 2022-06-07 21:47:19 +03:00
vlv_sideband_reg.h drm/i915: split out vlv sideband registers from i915_reg.h 2022-01-10 16:17:50 +02:00
vlv_sideband.c drm/i915: Only include i915_reg.h from .c files 2022-02-02 07:59:54 -08:00
vlv_sideband.h drm/i915: split out vlv sideband registers from i915_reg.h 2022-01-10 16:17:50 +02:00
vlv_suspend.c drm/i915: Use str_on_off() 2022-03-02 08:48:23 -08:00
vlv_suspend.h