Commit 7b8cd336 authored by Ville Syrjälä's avatar Ville Syrjälä Committed by Dave Airlie
Browse files

drm/i915: Make vblank evade warnings optional



Add a new Kconfig option to enable/disable the extra warnings
from the vblank evade code. For now we'll keep the warning
about an actually missed vblank always enabled as that can have
an actual user visible impact. But if we miss the deadline
othrwise there's no real need to bother the user with that.
We'll want these warnings enabled during development however
so that we can catch regressions.

Based on the reports it looks like this is still very easy
to hit on SKL, so we have more work ahead of us to optimize
the crtiical section further.

Cc: Daniel Vetter <daniel@ffwll.ch>
Cc: Jani Nikula <jani.nikula@linux.intel.com>
Cc: Dave Airlie <airlied@redhat.com>
Cc: Jens Axboe <axboe@kernel.dk>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
Reported-by: default avatarJens Axboe <axboe@kernel.dk>
Reported-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
Fixes: e1edbd44 ("drm/i915: Complain if we take too long under vblank evasion.")
Signed-off-by: default avatarVille Syrjälä <ville.syrjala@linux.intel.com>
Reviewed-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
Signed-off-by: default avatarDave Airlie <airlied@redhat.com>
parent bb57d041
Loading
Loading
Loading
Loading
+13 −0
Original line number Original line Diff line number Diff line
@@ -87,3 +87,16 @@ config DRM_I915_LOW_LEVEL_TRACEPOINTS
          and also analyze the request dependency resolving timeline.
          and also analyze the request dependency resolving timeline.


          If in doubt, say "N".
          If in doubt, say "N".

config DRM_I915_DEBUG_VBLANK_EVADE
	bool "Enable extra debug warnings for vblank evasion"
	depends on DRM_I915
	default n
	help
	  Choose this option to turn on extra debug warnings for the
	  vblank evade mechanism. This gives a warning every time the
	  the deadline allotted for the vblank evade critical section
	  is exceeded, even if there isn't an actual risk of missing
	  the vblank.

	  If in doubt, say "N".
+5 −2
Original line number Original line Diff line number Diff line
@@ -198,12 +198,15 @@ void intel_pipe_update_end(struct intel_crtc *crtc, struct intel_flip_work *work
			  ktime_us_delta(end_vbl_time, crtc->debug.start_vbl_time),
			  ktime_us_delta(end_vbl_time, crtc->debug.start_vbl_time),
			  crtc->debug.min_vbl, crtc->debug.max_vbl,
			  crtc->debug.min_vbl, crtc->debug.max_vbl,
			  crtc->debug.scanline_start, scanline_end);
			  crtc->debug.scanline_start, scanline_end);
	} else if (ktime_us_delta(end_vbl_time, crtc->debug.start_vbl_time) >
	}
#ifdef CONFIG_DRM_I915_DEBUG_VBLANK_EVADE
	else if (ktime_us_delta(end_vbl_time, crtc->debug.start_vbl_time) >
		 VBLANK_EVASION_TIME_US)
		 VBLANK_EVASION_TIME_US)
		DRM_WARN("Atomic update on pipe (%c) took %lld us, max time under evasion is %u us\n",
		DRM_WARN("Atomic update on pipe (%c) took %lld us, max time under evasion is %u us\n",
			 pipe_name(pipe),
			 pipe_name(pipe),
			 ktime_us_delta(end_vbl_time, crtc->debug.start_vbl_time),
			 ktime_us_delta(end_vbl_time, crtc->debug.start_vbl_time),
			 VBLANK_EVASION_TIME_US);
			 VBLANK_EVASION_TIME_US);
#endif
}
}


static void
static void