If we hit a vblank and see that have a pageflip queue but not yet
processed, ensure that the GPU is running at maximum in order to clear
the backlog. Pageflips are only queued for the following vblank, if we
miss it, there will be a visible stutter. Boosting the GPU frequency
doesn't prevent us from missing the target vblank, but it should help
the subsequent frames hitting theirs.

Signed-off-by: Chris Wilson <[email protected]>
---
 drivers/gpu/drm/i915/intel_display.c |    5 +++++
 1 file changed, 5 insertions(+)

diff --git a/drivers/gpu/drm/i915/intel_display.c 
b/drivers/gpu/drm/i915/intel_display.c
index e15b3ab..215526f 100644
--- a/drivers/gpu/drm/i915/intel_display.c
+++ b/drivers/gpu/drm/i915/intel_display.c
@@ -8960,6 +8960,7 @@ void intel_check_page_flip(struct drm_device *dev, int 
pipe)
        struct drm_crtc *crtc = dev_priv->pipe_to_crtc_mapping[pipe];
        struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
        unsigned long flags;
+       bool outstanding;
 
        if (crtc == NULL)
                return;
@@ -8972,7 +8973,11 @@ void intel_check_page_flip(struct drm_device *dev, int 
pipe)
                page_flip_completed(dev_priv, intel_crtc, 
intel_crtc->unpin_work);
                intel_crtc->unpin_work = NULL;
        }
+       outstanding = intel_crtc->unpin_work != NULL;
        spin_unlock_irqrestore(&dev->event_lock, flags);
+
+       if (outstanding && INTEL_INFO(dev)->gen >= 6)
+               gen6_rps_boost(dev_priv);
 }
 
 static int intel_crtc_page_flip(struct drm_crtc *crtc,
-- 
1.7.9.5

_______________________________________________
Intel-gfx mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/intel-gfx

Reply via email to