Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ec5da01e authored by Chris Wilson's avatar Chris Wilson
Browse files

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: default avatarChris Wilson <chris@chris-wilson.co.uk>
parent c9f9ccc1
Loading
Loading
Loading
Loading
+7 −6
Original line number Diff line number Diff line
@@ -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");
}

+7 −0
Original line number Diff line number Diff line
@@ -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)