1
0
Fork 0
mirror of synced 2025-03-06 20:59:54 +01:00
linux/drivers/gpu/drm/amd/display/amdgpu_dm
Rodrigo Siqueira 8976f73b67 drm/amd/display: Always get CRTC updated constant values inside commit tail
We recently improved our display atomic commit and tail sequence to
avoid some issues related to concurrency. One of the major changes
consisted of moving the interrupt disable and the stream release from
our atomic commit to our atomic tail (commit 6d90a208cf
("drm/amd/display: Move disable interrupt into commit tail")) .
However, the new code introduced inside our commit tail function was
inserted right after the function
drm_atomic_helper_update_legacy_modeset_state(), which has routines for
updating internal data structs related to timestamps. As a result, in
certain conditions, the display module can reach a situation where we
update our constants and, after that, clean it. This situation generates
the following warning:

 amdgpu 0000:03:00.0: drm_WARN_ON_ONCE(drm_drv_uses_atomic_modeset(dev))
 WARNING: CPU: 6 PID: 1269 at drivers/gpu/drm/drm_vblank.c:722
 drm_crtc_vblank_helper_get_vblank_timestamp_internal+0x32b/0x340 [drm]
 ...
 RIP:
 0010:drm_crtc_vblank_helper_get_vblank_timestamp_internal+0x32b/0x340
 [drm]
 ...
 Call Trace:
  ? dc_stream_get_vblank_counter+0x57/0x60 [amdgpu]
  drm_crtc_vblank_helper_get_vblank_timestamp+0x1c/0x20 [drm]
  drm_get_last_vbltimestamp+0xad/0xc0 [drm]
  drm_reset_vblank_timestamp+0x63/0xd0 [drm]
  drm_crtc_vblank_on+0x85/0x150 [drm]
  amdgpu_dm_atomic_commit_tail+0xaf1/0x2330 [amdgpu]
  commit_tail+0x99/0x130 [drm_kms_helper]
  drm_atomic_helper_commit+0x123/0x150 [drm_kms_helper]
  amdgpu_dm_atomic_commit+0x11/0x20 [amdgpu]
  drm_atomic_commit+0x4a/0x50 [drm]
  drm_atomic_helper_set_config+0x7c/0xc0 [drm_kms_helper]
  drm_mode_setcrtc+0x20b/0x7e0 [drm]
  ? tomoyo_path_number_perm+0x6f/0x200
  ? drm_mode_getcrtc+0x190/0x190 [drm]
  drm_ioctl_kernel+0xae/0xf0 [drm]
  drm_ioctl+0x245/0x400 [drm]
  ? drm_mode_getcrtc+0x190/0x190 [drm]
  amdgpu_drm_ioctl+0x4e/0x80 [amdgpu]
  __x64_sys_ioctl+0x91/0xc0
  do_syscall_64+0x38/0x90
  entry_SYSCALL_64_after_hwframe+0x44/0xa9
 ...

For fixing this issue we rely upon a refactor introduced on
drm_atomic_helper_update_legacy_modeset_state ("Remove the timestamping
constant update from drm_atomic_helper_update_legacy_modeset_state()")
which decouples constant values update from
drm_atomic_helper_update_legacy_modeset_state to a new helper.
Basically, this commit uses this new helper and place it right after our
release module to avoid a situation where our CRTC struct gets wrong
values.

Bug: https://gitlab.freedesktop.org/drm/amd/-/issues/1373
Reviewed-by: Harry Wentland <harry.wentland@amd.com>
Signed-off-by: Rodrigo Siqueira <Rodrigo.Siqueira@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
2020-11-18 14:35:15 -05:00
..
amdgpu_dm.c drm/amd/display: Always get CRTC updated constant values inside commit tail 2020-11-18 14:35:15 -05:00
amdgpu_dm.h drm/amd/display: Expose new CRC window property 2020-11-16 12:19:44 -05:00
amdgpu_dm_color.c drm/amdgpu: drm_device to amdgpu_device by inline-f (v2) 2020-08-24 13:06:06 -04:00
amdgpu_dm_crc.c drm/amd/display: Expose new CRC window property 2020-11-16 12:19:44 -05:00
amdgpu_dm_crc.h drm/amd/display: Expose new CRC window property 2020-11-16 12:19:44 -05:00
amdgpu_dm_debugfs.c drm/amd/display: Engage PSR synchronously 2020-11-10 14:24:55 -05:00
amdgpu_dm_debugfs.h amdgpu_dm: no need to check return value of debugfs_create functions 2019-06-13 13:59:49 -05:00
amdgpu_dm_hdcp.c drm/amd/display: fix return value check for hdcp_work 2020-09-25 16:53:32 -04:00
amdgpu_dm_hdcp.h drm/amd/display: Add sysfs interface for set/get srm 2020-02-06 15:04:36 -05:00
amdgpu_dm_helpers.c drm/amdgpu: fold CONFIG_DRM_AMD_DC_DCN3* into CONFIG_DRM_AMD_DC_DCN (v3) 2020-11-04 17:11:37 -05:00
amdgpu_dm_irq.c drm/amdgpu: Get DRM dev from adev by inline-f 2020-08-24 13:06:06 -04:00
amdgpu_dm_irq.h drm/amd/display: make amdgpu_dm_irq_handler static 2017-10-17 10:43:04 +10:00
amdgpu_dm_irq_params.h drm/amd/display: Refactor to prevent crtc state access in DM IRQ handler 2020-09-15 17:52:39 -04:00
amdgpu_dm_mst_types.c Merge tag 'amd-drm-next-5.11-2020-11-05' of git://people.freedesktop.org/~agd5f/linux into drm-next 2020-11-10 17:48:47 +10:00
amdgpu_dm_mst_types.h drm/amdgpu/display: create fake mst encoders ahead of time (v4) 2020-07-14 15:11:07 -04:00
amdgpu_dm_pp_smu.c drm/amdgpu: apply dm_pp_notify_wm_clock_changes() for Polaris only 2020-11-02 15:33:12 -05:00
amdgpu_dm_services.c drm/amd/display: Decouple amdgpu_dm_trace from service 2020-10-26 13:33:59 -04:00
amdgpu_dm_trace.h drm/amd/display: Add tracepoint for capturing clocks state 2020-10-26 13:34:26 -04:00
Makefile drm/amd/display: Create amdgpu_dm_hdcp 2019-10-03 09:10:58 -05:00