diff options
author | Maarten Lankhorst <maarten.lankhorst@linux.intel.com> | 2015-09-01 06:15:33 -0400 |
---|---|---|
committer | Daniel Vetter <daniel.vetter@ffwll.ch> | 2015-09-02 07:51:40 -0400 |
commit | 85a62bf9d8ef8d533635270ae985281c58e8c974 (patch) | |
tree | b8fbe6c3f327b94c71fa936bee3abac94934c65d | |
parent | 34e0adbb4508a318e8039ee3959383e4bf080f04 (diff) |
drm/i915: Also record time difference if vblank evasion fails, v2.
This makes the error message slightly more useful.
Changes since v1:
- Use ktime_get() while irqs are still disabled. (vsyrjala)
Signed-off-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
-rw-r--r-- | drivers/gpu/drm/i915/intel_drv.h | 2 | ||||
-rw-r--r-- | drivers/gpu/drm/i915/intel_sprite.c | 7 |
2 files changed, 7 insertions, 2 deletions
diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h index 8f8d320486ff..090d67b04307 100644 --- a/drivers/gpu/drm/i915/intel_drv.h +++ b/drivers/gpu/drm/i915/intel_drv.h | |||
@@ -564,6 +564,8 @@ struct intel_crtc { | |||
564 | int scanline_offset; | 564 | int scanline_offset; |
565 | 565 | ||
566 | unsigned start_vbl_count; | 566 | unsigned start_vbl_count; |
567 | ktime_t start_vbl_time; | ||
568 | |||
567 | struct intel_crtc_atomic_commit atomic; | 569 | struct intel_crtc_atomic_commit atomic; |
568 | 570 | ||
569 | /* scalers available on this crtc */ | 571 | /* scalers available on this crtc */ |
diff --git a/drivers/gpu/drm/i915/intel_sprite.c b/drivers/gpu/drm/i915/intel_sprite.c index c35c2339f472..ca7e26430e66 100644 --- a/drivers/gpu/drm/i915/intel_sprite.c +++ b/drivers/gpu/drm/i915/intel_sprite.c | |||
@@ -134,6 +134,7 @@ void intel_pipe_update_start(struct intel_crtc *crtc) | |||
134 | 134 | ||
135 | drm_crtc_vblank_put(&crtc->base); | 135 | drm_crtc_vblank_put(&crtc->base); |
136 | 136 | ||
137 | crtc->start_vbl_time = ktime_get(); | ||
137 | crtc->start_vbl_count = dev->driver->get_vblank_counter(dev, pipe); | 138 | crtc->start_vbl_count = dev->driver->get_vblank_counter(dev, pipe); |
138 | 139 | ||
139 | trace_i915_pipe_update_vblank_evaded(crtc, min, max, | 140 | trace_i915_pipe_update_vblank_evaded(crtc, min, max, |
@@ -154,14 +155,16 @@ void intel_pipe_update_end(struct intel_crtc *crtc) | |||
154 | struct drm_device *dev = crtc->base.dev; | 155 | struct drm_device *dev = crtc->base.dev; |
155 | enum pipe pipe = crtc->pipe; | 156 | enum pipe pipe = crtc->pipe; |
156 | u32 end_vbl_count = dev->driver->get_vblank_counter(dev, pipe); | 157 | u32 end_vbl_count = dev->driver->get_vblank_counter(dev, pipe); |
158 | ktime_t end_vbl_time = ktime_get(); | ||
157 | 159 | ||
158 | trace_i915_pipe_update_end(crtc, end_vbl_count); | 160 | trace_i915_pipe_update_end(crtc, end_vbl_count); |
159 | 161 | ||
160 | local_irq_enable(); | 162 | local_irq_enable(); |
161 | 163 | ||
162 | if (crtc->start_vbl_count && crtc->start_vbl_count != end_vbl_count) | 164 | if (crtc->start_vbl_count && crtc->start_vbl_count != end_vbl_count) |
163 | DRM_ERROR("Atomic update failure on pipe %c (start=%u end=%u)\n", | 165 | DRM_ERROR("Atomic update failure on pipe %c (start=%u end=%u) time %lld us\n", |
164 | pipe_name(pipe), crtc->start_vbl_count, end_vbl_count); | 166 | pipe_name(pipe), crtc->start_vbl_count, end_vbl_count, |
167 | ktime_us_delta(end_vbl_time, crtc->start_vbl_time)); | ||
165 | } | 168 | } |
166 | 169 | ||
167 | static void | 170 | static void |