From: Ville Syrjälä <ville.syrj...@linux.intel.com>

On machines where the vblank interrupt fires some time after the start
of vblank (or we just manage to race with the vblank interrupt handler)
we will currently stuff a stale vblank counter value into the flip event,
and thus we'll prematurely complete the flip.

Switch over to drm_crtc_accurate_vblank_count() to make sure we have an
up to date counter value, crucially also remember to add the +1 so that
the delayed vblank interrupt won't complete the flip prematurely.

Cc: sta...@vger.kernel.org
Cc: Daniel Vetter <dan...@ffwll.ch>
Suggested-by: Daniel Vetter <dan...@ffwll.ch>
Signed-off-by: Ville Syrjälä <ville.syrj...@linux.intel.com>
---
 drivers/gpu/drm/drm_vblank.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/drm_vblank.c b/drivers/gpu/drm/drm_vblank.c
index 70f2b9593edc..f14e6c92e332 100644
--- a/drivers/gpu/drm/drm_vblank.c
+++ b/drivers/gpu/drm/drm_vblank.c
@@ -869,7 +869,7 @@ void drm_crtc_arm_vblank_event(struct drm_crtc *crtc,
        assert_spin_locked(&dev->event_lock);
 
        e->pipe = pipe;
-       e->event.sequence = drm_vblank_count(dev, pipe);
+       e->event.sequence = drm_crtc_accurate_vblank_count(crtc) + 1;
        e->event.crtc_id = crtc->base.id;
        list_add_tail(&e->base.link, &dev->vblank_event_list);
 }
-- 
2.13.6

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

Reply via email to