linux_dsm_epyc7002/drivers/gpu/drm/amd/display/amdgpu_dm
Nicholas Kazlauskas eb3dc89785 drm/amd/display: Use private obj helpers for dm_atomic_state
[Why]
Two non-blocking commits in succession can result in a sequence where
the same dc->current_state is queried for both commits.

1. 1st commit -> check -> commit -> swaps atomic state -> queues work
2. 2nd commit -> check -> commit -> swaps atomic state -> queues work
3. 1st commit work finishes

The issue with this sequence is that the same dc->current_state is
read in both atomic checks. If the first commit modifies streams or
planes those will be missing from the dc->current_state for the
second atomic check. This result in many stream and plane errors in
atomic commit tail.

[How]
The driver still needs to track old to new state to determine if the
commit in its current implementation. Updating the dc_state in
atomic tail is wrong since the dc_state swap should be happening as
part of drm_atomic_helper_swap_state *before* the worker queue kicks
its work off.

The simplest replacement for the subclassing (which doesn't properly
manage the old to new atomic state swap) is to use the drm private
object helpers. While some of the dc_state members could be merged
into dm_crtc_state or dm_plane_state and copied over that way it is
easier for now to just treat the whole dc_state structure as a single
private object.

This allows amdgpu_dm to drop the dc->current_state copy from within
atomic check. It's replaced by a copy from the current atomic state
which is propagated correctly for the sequence described above.

Since access to the dm_state private object is now locked this should
also fix issues that could arise if submitting non-blocking commits
from different threads.

Cc: Harry Wentland <harry.wentland@amd.com>
Cc: Leo Li <sunpeng.li@amd.com>
Signed-off-by: Nicholas Kazlauskas <nicholas.kazlauskas@amd.com>
Reviewed-by: Leo Li <sunpeng.li@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
2018-11-28 15:55:30 -05:00
..
amdgpu_dm_color.c drm/amd/display: Add support for Freesync 2 HDR and Content to Display Mapping 2018-11-05 14:20:43 -05:00
amdgpu_dm_crc.c drm/amd/display: Guard against null stream_state in set_crc_source 2018-11-05 14:21:42 -05:00
amdgpu_dm_debugfs.c drm/amdgpu/display: dm/amdgpu: make dp phy debugfs for eDP 2018-10-12 12:53:04 -05:00
amdgpu_dm_debugfs.h drm/amd/display: Add support for hw_state logging via debugfs 2018-08-27 15:20:17 -05:00
amdgpu_dm_helpers.c drm/amd/display: Support reading hw state from debugfs file 2018-08-27 15:20:49 -05:00
amdgpu_dm_irq.c drm/amd/display: Initial documentation for AMDgpu DC 2018-11-05 14:21:37 -05:00
amdgpu_dm_irq.h
amdgpu_dm_mst_types.c drm/amd/amdgpu/dm: Fix dm_dp_create_fake_mst_encoder() 2018-11-07 18:21:05 -05:00
amdgpu_dm_mst_types.h drm/amd/display: Cleanup MST non-atomic code workaround 2018-11-07 18:20:49 -05:00
amdgpu_dm_pp_smu.c drm/amd/display: Retiring set_display_requirements in dm_pp_smu.h - part4 2018-11-05 14:21:41 -05:00
amdgpu_dm_services.c BackMerge v4.18-rc7 into drm-next 2018-07-30 10:39:22 +10:00
amdgpu_dm.c drm/amd/display: Use private obj helpers for dm_atomic_state 2018-11-28 15:55:30 -05:00
amdgpu_dm.h drm/amd/display: Use private obj helpers for dm_atomic_state 2018-11-28 15:55:30 -05:00
Makefile drm/amd/display: Moving powerplay functions to a separate class 2018-07-05 16:38:41 -05:00