From: Aurabindo Pillai <aurabindo.pillai@xxxxxxx> The SubVP feature introduces a new mechanism named phantom streams, which can be summed up as a fake stream used to calculate the required parameters for handing the cache request and cache reading for a small portion of the framebuffer used in the sub-viewport. With the new commit sequence, we do not want the state to be copied before the call to dc_commit_state() since this leaks the phantom streams into new state. To address this issue, this commit move the dc state copy right after the dc_commit_state() call. Signed-off-by: Aurabindo Pillai <aurabindo.pillai@xxxxxxx> --- .../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c index 63f076a46260..17a9108f8186 100644 --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c @@ -7999,15 +7999,8 @@ static void amdgpu_dm_atomic_commit_tail(struct drm_atomic_state *state) drm_atomic_helper_update_legacy_modeset_state(dev, state); dm_state = dm_atomic_get_new_state(state); - if (dm_state && dm_state->context) { + if (dm_state && dm_state->context) dc_state = dm_state->context; - } else { - /* No state changes, retain current state. */ - dc_state_temp = dc_create_state(dm->dc); - ASSERT(dc_state_temp); - dc_state = dc_state_temp; - dc_resource_state_copy_construct_current(dm->dc, dc_state); - } for_each_oldnew_crtc_in_state (state, crtc, old_crtc_state, new_crtc_state, i) { @@ -8127,6 +8120,14 @@ static void amdgpu_dm_atomic_commit_tail(struct drm_atomic_state *state) mutex_unlock(&dm->dc_lock); } + if (dc_state == NULL) { + /* No state changes, retain current state. */ + dc_state_temp = dc_create_state(dm->dc); + ASSERT(dc_state_temp); + dc_state = dc_state_temp; + dc_resource_state_copy_construct_current(dm->dc, dc_state); + } + for_each_new_crtc_in_state(state, crtc, new_crtc_state, i) { struct amdgpu_crtc *acrtc = to_amdgpu_crtc(crtc); -- 2.38.0