[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