From: Chris Wilson <chris@chris-wilson.co.uk>
Date: Sun, 12 Sep 2010 12:34:08 +0000 (+0100)
Subject: drm/i915: Use msleep instead of mdelay during wait_vblank_off
X-Git-Tag: firefly_0821_release~7613^2~3600^2~31^2~137
X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=ec5da01e23eec303dd313aa62b8ed4712c488437;p=firefly-linux-kernel-4.4.55.git

drm/i915: Use msleep instead of mdelay during wait_vblank_off

Avoid a potentially long busy-wait if we not in the process of
atomically switching to the kdb console.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
---

diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
index 1e88ebbc1a1e..594f8f2410ab 100644
--- a/drivers/gpu/drm/i915/intel_display.c
+++ b/drivers/gpu/drm/i915/intel_display.c
@@ -1034,16 +1034,17 @@ void intel_wait_for_vblank_off(struct drm_device *dev, int pipe)
 	struct drm_i915_private *dev_priv = dev->dev_private;
 	int pipedsl_reg = (pipe == 0 ? PIPEADSL : PIPEBDSL);
 	unsigned long timeout = jiffies + msecs_to_jiffies(100);
-	u32 last_line;
+	u32 last_line, line;
 
 	/* Wait for the display line to settle */
+	line = I915_READ(pipedsl_reg) & DSL_LINEMASK;
 	do {
-		last_line = I915_READ(pipedsl_reg) & DSL_LINEMASK;
-		mdelay(5);
-	} while (((I915_READ(pipedsl_reg) & DSL_LINEMASK) != last_line) &&
-		 time_after(timeout, jiffies));
+		last_line = line;
+		MSLEEP(5);
+		line = I915_READ(pipedsl_reg) & DSL_LINEMASK;
+	} while (line != last_line && time_after(timeout, jiffies));
 
-	if (time_after(jiffies, timeout))
+	if (line != last_line)
 		DRM_DEBUG_KMS("vblank wait timed out\n");
 }
 
diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h
index 6c6b897539f8..e5f2a61af9f6 100644
--- a/drivers/gpu/drm/i915/intel_drv.h
+++ b/drivers/gpu/drm/i915/intel_drv.h
@@ -49,6 +49,13 @@
 #define wait_for(COND, MS) _wait_for(COND, MS, 1)
 #define wait_for_atomic(COND, MS) _wait_for(COND, MS, 0)
 
+#define MSLEEP(x) do { \
+	if (in_dbg_master()) \
+	       	mdelay(x); \
+	else \
+		msleep(x); \
+} while(0)
+
 #define KHz(x) (1000*x)
 #define MHz(x) KHz(1000*x)