drm/i915: Fix misplaced intel_mark_page_flip_active()
authorBen Hutchings <ben@decadent.org.uk>
Thu, 7 Feb 2013 05:28:14 +0000 (05:28 +0000)
committerBen Hutchings <ben@decadent.org.uk>
Wed, 20 Feb 2013 03:15:18 +0000 (03:15 +0000)
In commit 28c4566d30b8, backport of commit e7d841ca03b7 ('drm/i915:
Close race between processing unpin task and queueing the flip') I
somehow added two calls to intel_mark_page_flip_active() from
intel_gen4_queue_flip() and none from intel_gen6_queue_flip().  There
should of course be one from each.

Reported-by: Julien Cristau <jcristau@debian.org>
Cc: Chris Wilson <chris@chris-wilson.co.uk>
Cc: Daniel Vetter <daniel.vetter@ffwll.ch>
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
drivers/gpu/drm/i915/intel_display.c

index c05e825..7817429 100644 (file)
@@ -7155,8 +7155,6 @@ static int intel_gen4_queue_flip(struct drm_device *dev,
        pipesrc = I915_READ(PIPESRC(intel_crtc->pipe)) & 0x0fff0fff;
        OUT_RING(pf | pipesrc);
 
-       intel_mark_page_flip_active(intel_crtc);
-
        intel_mark_page_flip_active(intel_crtc);
        ADVANCE_LP_RING();
        return 0;
@@ -7193,6 +7191,8 @@ static int intel_gen6_queue_flip(struct drm_device *dev,
        pf = I915_READ(PF_CTL(intel_crtc->pipe)) & PF_ENABLE;
        pipesrc = I915_READ(PIPESRC(intel_crtc->pipe)) & 0x0fff0fff;
        OUT_RING(pf | pipesrc);
+
+       intel_mark_page_flip_active(intel_crtc);
        ADVANCE_LP_RING();
        return 0;