[PATCH] drm/atomic: make drm_atomic_helper_wait_for_vblanks more agressive
Maarten Lankhorst
maarten.lankhorst at linux.intel.com
Wed Nov 29 14:36:37 UTC 2017
Op 29-11-17 om 12:04 schreef Lucas Stach:
> drm_atomic_helper_setup_commit expects that flipping of previous commits
> has happened when it is called to set up a new commit. This can be violated
> by commits where userspace doesn't get a flip completion event to
> synchronize against i.e. legacy modesets and property changes.
>
> The expectation is that those are done by blocking commits, which wait for
> completion. Most drivers call drm_atomic_helper_wait_for_vblanks in the
> commit_tail to ensure completion, but the wait for next vblank might not
> actually happen if the commit didn't change any planes.
>
> Make the wait more agressive by also waiting if no planes changed. This
> is the minimal regression fix for the 4.15 kernel series. Long term
> drivers should switch away from drm_atomic_helper_wait_for_vblanks and
> use drm_atomic_helper_wait_for_flip_done instead.
>
> Signed-off-by: Lucas Stach <l.stach at pengutronix.de>
> ---
> drivers/gpu/drm/drm_atomic_helper.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/drivers/gpu/drm/drm_atomic_helper.c b/drivers/gpu/drm/drm_atomic_helper.c
> index 71d712f1b56a..b16f1d69a0bb 100644
> --- a/drivers/gpu/drm/drm_atomic_helper.c
> +++ b/drivers/gpu/drm/drm_atomic_helper.c
> @@ -1225,7 +1225,7 @@ drm_atomic_helper_wait_for_vblanks(struct drm_device *dev,
> return;
>
> for_each_oldnew_crtc_in_state(old_state, crtc, old_crtc_state, new_crtc_state, i) {
> - if (!new_crtc_state->active || !new_crtc_state->planes_changed)
> + if (!new_crtc_state->active)
> continue;
>
> ret = drm_crtc_vblank_get(crtc);
Added a fixes tag because it likely started regressing with
commit de39bec1a0c4 ("drm/atomic: Remove waits in drm_atomic_helper_commit_cleanup_done, v2.")
Thanks for patch, pushed.
~Maarten
More information about the dri-devel
mailing list