[Intel-gfx] [PATCH] drm/i915: Boost GPU frequency if we detect outstanding pageflips

Chris Wilson chris at chris-wilson.co.uk
Thu Mar 27 13:01:11 CET 2014


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 <chris at chris-wilson.co.uk>
---
 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




More information about the Intel-gfx mailing list