On Wed, May 19, 2021 at 11:38:53AM -0700, Rob Clark wrote: > From: Rob Clark <robdclark@xxxxxxxxxxxx> > > Signed-off-by: Rob Clark <robdclark@xxxxxxxxxxxx> > --- > drivers/gpu/drm/drm_atomic_helper.c | 11 +++++++++++ > 1 file changed, 11 insertions(+) > > diff --git a/drivers/gpu/drm/drm_atomic_helper.c b/drivers/gpu/drm/drm_atomic_helper.c > index 560aaecba31b..fe10fc2e7f86 100644 > --- a/drivers/gpu/drm/drm_atomic_helper.c > +++ b/drivers/gpu/drm/drm_atomic_helper.c > @@ -1435,11 +1435,15 @@ int drm_atomic_helper_wait_for_fences(struct drm_device *dev, > int i, ret; > > for_each_new_plane_in_state(state, plane, new_plane_state, i) { > + u64 vblank_count; > + > if (!new_plane_state->fence) > continue; > > WARN_ON(!new_plane_state->fb); > > + vblank_count = drm_crtc_vblank_count(new_plane_state->crtc); > + > /* > * If waiting for fences pre-swap (ie: nonblock), userspace can > * still interrupt the operation. Instead of blocking until the > @@ -1449,6 +1453,13 @@ int drm_atomic_helper_wait_for_fences(struct drm_device *dev, > if (ret) > return ret; > > + /* > + * Check if we've missed a vblank while waiting, and if we have > + * signal the fence that it's signaler should be boosted > + */ > + if (vblank_count != drm_crtc_vblank_count(new_plane_state->crtc)) > + dma_fence_boost(new_plane_state->fence); I think we should do a lot better here: - maybe only bother doing this for single-crtc updates, and only if modeset isn't set. No one else cares about latency. - We should boost _right_ when we've missed the frame, so I think we should have a _timeout wait here that guesstimates when the vblank is over (might need to throw in a vblank wait if we missed) and then boost immediately. Not wait a bunch of frames (worst case) until we finally decide to boost. Otherwise I really like this, I think it's about the only real reason i915 isn't using atomic helpers. Also adding Matt B for this topic. -Daniel > + > dma_fence_put(new_plane_state->fence); > new_plane_state->fence = NULL; > } > -- > 2.30.2 > -- Daniel Vetter Software Engineer, Intel Corporation http://blog.ffwll.ch