* [PATCH 1/2] drm/i915: Remove start frame argument to pipe_update_begin/end.
@ 2015-08-31 11:04 Maarten Lankhorst
2015-08-31 11:04 ` [PATCH 2/2] drm/i915: Also record time difference if vblank evasion fails Maarten Lankhorst
0 siblings, 1 reply; 5+ messages in thread
From: Maarten Lankhorst @ 2015-08-31 11:04 UTC (permalink / raw)
To: intel-gfx
There's already a per crtc member that can be used for it.
Signed-off-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
---
drivers/gpu/drm/i915/intel_display.c | 9 ++++-----
drivers/gpu/drm/i915/intel_drv.h | 5 ++---
drivers/gpu/drm/i915/intel_sprite.c | 15 ++++++++-------
3 files changed, 14 insertions(+), 15 deletions(-)
diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
index b5dc2fab98d1..86586642b5f0 100644
--- a/drivers/gpu/drm/i915/intel_display.c
+++ b/drivers/gpu/drm/i915/intel_display.c
@@ -11098,11 +11098,10 @@ static void ilk_do_mmio_flip(struct intel_crtc *intel_crtc)
static void intel_do_mmio_flip(struct intel_crtc *intel_crtc)
{
struct drm_device *dev = intel_crtc->base.dev;
- u32 start_vbl_count;
intel_mark_page_flip_active(intel_crtc);
- intel_pipe_update_start(intel_crtc, &start_vbl_count);
+ intel_pipe_update_start(intel_crtc);
if (INTEL_INFO(dev)->gen >= 9)
skl_do_mmio_flip(intel_crtc);
@@ -11110,7 +11109,7 @@ static void intel_do_mmio_flip(struct intel_crtc *intel_crtc)
/* use_mmio_flip() retricts MMIO flips to ilk+ */
ilk_do_mmio_flip(intel_crtc);
- intel_pipe_update_end(intel_crtc, start_vbl_count);
+ intel_pipe_update_end(intel_crtc);
}
static void intel_mmio_flip_work_func(struct work_struct *work)
@@ -13441,7 +13440,7 @@ static void intel_begin_crtc_commit(struct drm_crtc *crtc,
/* Perform vblank evasion around commit operation */
if (crtc->state->active)
- intel_pipe_update_start(intel_crtc, &intel_crtc->start_vbl_count);
+ intel_pipe_update_start(intel_crtc);
if (modeset)
return;
@@ -13458,7 +13457,7 @@ static void intel_finish_crtc_commit(struct drm_crtc *crtc,
struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
if (crtc->state->active)
- intel_pipe_update_end(intel_crtc, intel_crtc->start_vbl_count);
+ intel_pipe_update_end(intel_crtc);
}
/**
diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h
index 2e02bed0d3c1..172c10ac92ae 100644
--- a/drivers/gpu/drm/i915/intel_drv.h
+++ b/drivers/gpu/drm/i915/intel_drv.h
@@ -1414,9 +1414,8 @@ struct drm_plane *intel_plane_init(struct drm_device *dev, enum pipe pipe,
int plane, enum drm_plane_type plane_type);
int intel_sprite_set_colorkey(struct drm_device *dev, void *data,
struct drm_file *file_priv);
-void intel_pipe_update_start(struct intel_crtc *crtc,
- uint32_t *start_vbl_count);
-void intel_pipe_update_end(struct intel_crtc *crtc, u32 start_vbl_count);
+void intel_pipe_update_start(struct intel_crtc *crtc);
+void intel_pipe_update_end(struct intel_crtc *crtc);
/* intel_tv.c */
void intel_tv_init(struct drm_device *dev);
diff --git a/drivers/gpu/drm/i915/intel_sprite.c b/drivers/gpu/drm/i915/intel_sprite.c
index 596fa4319681..63fba42be2cf 100644
--- a/drivers/gpu/drm/i915/intel_sprite.c
+++ b/drivers/gpu/drm/i915/intel_sprite.c
@@ -76,7 +76,7 @@ static int usecs_to_scanlines(const struct drm_display_mode *mode, int usecs)
* avoid random delays. The value written to @start_vbl_count should be
* supplied to intel_pipe_update_end() for error checking.
*/
-void intel_pipe_update_start(struct intel_crtc *crtc, uint32_t *start_vbl_count)
+void intel_pipe_update_start(struct intel_crtc *crtc)
{
struct drm_device *dev = crtc->base.dev;
const struct drm_display_mode *mode = &crtc->config->base.adjusted_mode;
@@ -95,7 +95,7 @@ void intel_pipe_update_start(struct intel_crtc *crtc, uint32_t *start_vbl_count)
max = vblank_start - 1;
local_irq_disable();
- *start_vbl_count = 0;
+ crtc->start_vbl_count = 0;
if (min <= 0 || max <= 0)
return;
@@ -134,9 +134,10 @@ void intel_pipe_update_start(struct intel_crtc *crtc, uint32_t *start_vbl_count)
drm_crtc_vblank_put(&crtc->base);
- *start_vbl_count = dev->driver->get_vblank_counter(dev, pipe);
+ crtc->start_vbl_count = dev->driver->get_vblank_counter(dev, pipe);
- trace_i915_pipe_update_vblank_evaded(crtc, min, max, *start_vbl_count);
+ trace_i915_pipe_update_vblank_evaded(crtc, min, max,
+ crtc->start_vbl_count);
}
/**
@@ -148,7 +149,7 @@ void intel_pipe_update_start(struct intel_crtc *crtc, uint32_t *start_vbl_count)
* re-enables interrupts and verifies the update was actually completed
* before a vblank using the value of @start_vbl_count.
*/
-void intel_pipe_update_end(struct intel_crtc *crtc, u32 start_vbl_count)
+void intel_pipe_update_end(struct intel_crtc *crtc)
{
struct drm_device *dev = crtc->base.dev;
enum pipe pipe = crtc->pipe;
@@ -158,9 +159,9 @@ void intel_pipe_update_end(struct intel_crtc *crtc, u32 start_vbl_count)
local_irq_enable();
- if (start_vbl_count && start_vbl_count != end_vbl_count)
+ if (crtc->start_vbl_count && crtc->start_vbl_count != end_vbl_count)
DRM_ERROR("Atomic update failure on pipe %c (start=%u end=%u)\n",
- pipe_name(pipe), start_vbl_count, end_vbl_count);
+ pipe_name(pipe), crtc->start_vbl_count, end_vbl_count);
}
static void
--
2.1.0
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply related [flat|nested] 5+ messages in thread
* [PATCH 2/2] drm/i915: Also record time difference if vblank evasion fails.
2015-08-31 11:04 [PATCH 1/2] drm/i915: Remove start frame argument to pipe_update_begin/end Maarten Lankhorst
@ 2015-08-31 11:04 ` Maarten Lankhorst
2015-08-31 11:49 ` Ville Syrjälä
0 siblings, 1 reply; 5+ messages in thread
From: Maarten Lankhorst @ 2015-08-31 11:04 UTC (permalink / raw)
To: intel-gfx
This makes the error message slightly more useful.
Signed-off-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
---
drivers/gpu/drm/i915/intel_drv.h | 2 ++
drivers/gpu/drm/i915/intel_sprite.c | 6 ++++--
2 files changed, 6 insertions(+), 2 deletions(-)
diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h
index 172c10ac92ae..513981751e92 100644
--- a/drivers/gpu/drm/i915/intel_drv.h
+++ b/drivers/gpu/drm/i915/intel_drv.h
@@ -565,6 +565,8 @@ struct intel_crtc {
int scanline_offset;
unsigned start_vbl_count;
+ ktime_t start_vbl_time;
+
struct intel_crtc_atomic_commit atomic;
/* scalers available on this crtc */
diff --git a/drivers/gpu/drm/i915/intel_sprite.c b/drivers/gpu/drm/i915/intel_sprite.c
index 63fba42be2cf..cc0eb3915f1c 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)
drm_crtc_vblank_put(&crtc->base);
+ crtc->start_vbl_time = ktime_get();
crtc->start_vbl_count = dev->driver->get_vblank_counter(dev, pipe);
trace_i915_pipe_update_vblank_evaded(crtc, min, max,
@@ -160,8 +161,9 @@ void intel_pipe_update_end(struct intel_crtc *crtc)
local_irq_enable();
if (crtc->start_vbl_count && crtc->start_vbl_count != end_vbl_count)
- DRM_ERROR("Atomic update failure on pipe %c (start=%u end=%u)\n",
- pipe_name(pipe), crtc->start_vbl_count, end_vbl_count);
+ DRM_ERROR("Atomic update failure on pipe %c (start=%u end=%u) time %lld us\n",
+ pipe_name(pipe), crtc->start_vbl_count, end_vbl_count,
+ ktime_us_delta(ktime_get(), crtc->start_vbl_time));
}
static void
--
2.1.0
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH 2/2] drm/i915: Also record time difference if vblank evasion fails.
2015-08-31 11:04 ` [PATCH 2/2] drm/i915: Also record time difference if vblank evasion fails Maarten Lankhorst
@ 2015-08-31 11:49 ` Ville Syrjälä
2015-09-01 10:15 ` [PATCH v2 2/2] drm/i915: Also record time difference if vblank evasion fails, v2 Maarten Lankhorst
0 siblings, 1 reply; 5+ messages in thread
From: Ville Syrjälä @ 2015-08-31 11:49 UTC (permalink / raw)
To: Maarten Lankhorst; +Cc: intel-gfx
On Mon, Aug 31, 2015 at 01:04:26PM +0200, Maarten Lankhorst wrote:
> This makes the error message slightly more useful.
>
> Signed-off-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
> ---
> drivers/gpu/drm/i915/intel_drv.h | 2 ++
> drivers/gpu/drm/i915/intel_sprite.c | 6 ++++--
> 2 files changed, 6 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h
> index 172c10ac92ae..513981751e92 100644
> --- a/drivers/gpu/drm/i915/intel_drv.h
> +++ b/drivers/gpu/drm/i915/intel_drv.h
> @@ -565,6 +565,8 @@ struct intel_crtc {
> int scanline_offset;
>
> unsigned start_vbl_count;
> + ktime_t start_vbl_time;
> +
> struct intel_crtc_atomic_commit atomic;
>
> /* scalers available on this crtc */
> diff --git a/drivers/gpu/drm/i915/intel_sprite.c b/drivers/gpu/drm/i915/intel_sprite.c
> index 63fba42be2cf..cc0eb3915f1c 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)
>
> drm_crtc_vblank_put(&crtc->base);
>
> + crtc->start_vbl_time = ktime_get();
> crtc->start_vbl_count = dev->driver->get_vblank_counter(dev, pipe);
>
> trace_i915_pipe_update_vblank_evaded(crtc, min, max,
> @@ -160,8 +161,9 @@ void intel_pipe_update_end(struct intel_crtc *crtc)
> local_irq_enable();
>
> if (crtc->start_vbl_count && crtc->start_vbl_count != end_vbl_count)
> - DRM_ERROR("Atomic update failure on pipe %c (start=%u end=%u)\n",
> - pipe_name(pipe), crtc->start_vbl_count, end_vbl_count);
> + DRM_ERROR("Atomic update failure on pipe %c (start=%u end=%u) time %lld us\n",
> + pipe_name(pipe), crtc->start_vbl_count, end_vbl_count,
> + ktime_us_delta(ktime_get(), crtc->start_vbl_time));
Should really do the ktime_get() before local_irq_enable().
With that fixed this series is
Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
> }
>
> static void
> --
> 2.1.0
>
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx@lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/intel-gfx
--
Ville Syrjälä
Intel OTC
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH v2 2/2] drm/i915: Also record time difference if vblank evasion fails, v2.
2015-08-31 11:49 ` Ville Syrjälä
@ 2015-09-01 10:15 ` Maarten Lankhorst
2015-09-02 11:51 ` Daniel Vetter
0 siblings, 1 reply; 5+ messages in thread
From: Maarten Lankhorst @ 2015-09-01 10:15 UTC (permalink / raw)
To: Ville Syrjälä; +Cc: intel-gfx
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>
---
diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h
index 63f0d5850cdf..b0c3a3af7ed2 100644
--- a/drivers/gpu/drm/i915/intel_drv.h
+++ b/drivers/gpu/drm/i915/intel_drv.h
@@ -563,6 +563,8 @@ struct intel_crtc {
int scanline_offset;
unsigned start_vbl_count;
+ ktime_t start_vbl_time;
+
struct intel_crtc_atomic_commit atomic;
/* scalers available on this crtc */
diff --git a/drivers/gpu/drm/i915/intel_sprite.c b/drivers/gpu/drm/i915/intel_sprite.c
index 63fba42be2cf..9387af5ef1b8 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)
drm_crtc_vblank_put(&crtc->base);
+ crtc->start_vbl_time = ktime_get();
crtc->start_vbl_count = dev->driver->get_vblank_counter(dev, pipe);
trace_i915_pipe_update_vblank_evaded(crtc, min, max,
@@ -154,14 +155,16 @@ void intel_pipe_update_end(struct intel_crtc *crtc)
struct drm_device *dev = crtc->base.dev;
enum pipe pipe = crtc->pipe;
u32 end_vbl_count = dev->driver->get_vblank_counter(dev, pipe);
+ ktime_t end_vbl_time = ktime_get();
trace_i915_pipe_update_end(crtc, end_vbl_count);
local_irq_enable();
if (crtc->start_vbl_count && crtc->start_vbl_count != end_vbl_count)
- DRM_ERROR("Atomic update failure on pipe %c (start=%u end=%u)\n",
- pipe_name(pipe), crtc->start_vbl_count, end_vbl_count);
+ DRM_ERROR("Atomic update failure on pipe %c (start=%u end=%u) time %lld us\n",
+ pipe_name(pipe), crtc->start_vbl_count, end_vbl_count,
+ ktime_us_delta(end_vbl_time, crtc->start_vbl_time));
}
static void
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH v2 2/2] drm/i915: Also record time difference if vblank evasion fails, v2.
2015-09-01 10:15 ` [PATCH v2 2/2] drm/i915: Also record time difference if vblank evasion fails, v2 Maarten Lankhorst
@ 2015-09-02 11:51 ` Daniel Vetter
0 siblings, 0 replies; 5+ messages in thread
From: Daniel Vetter @ 2015-09-02 11:51 UTC (permalink / raw)
To: Maarten Lankhorst; +Cc: intel-gfx
On Tue, Sep 01, 2015 at 12:15:33PM +0200, Maarten Lankhorst wrote:
> 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>
Both applied to dinq, thanks.
-Daniel
> ---
> diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h
> index 63f0d5850cdf..b0c3a3af7ed2 100644
> --- a/drivers/gpu/drm/i915/intel_drv.h
> +++ b/drivers/gpu/drm/i915/intel_drv.h
> @@ -563,6 +563,8 @@ struct intel_crtc {
> int scanline_offset;
>
> unsigned start_vbl_count;
> + ktime_t start_vbl_time;
> +
> struct intel_crtc_atomic_commit atomic;
>
> /* scalers available on this crtc */
> diff --git a/drivers/gpu/drm/i915/intel_sprite.c b/drivers/gpu/drm/i915/intel_sprite.c
> index 63fba42be2cf..9387af5ef1b8 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)
>
> drm_crtc_vblank_put(&crtc->base);
>
> + crtc->start_vbl_time = ktime_get();
> crtc->start_vbl_count = dev->driver->get_vblank_counter(dev, pipe);
>
> trace_i915_pipe_update_vblank_evaded(crtc, min, max,
> @@ -154,14 +155,16 @@ void intel_pipe_update_end(struct intel_crtc *crtc)
> struct drm_device *dev = crtc->base.dev;
> enum pipe pipe = crtc->pipe;
> u32 end_vbl_count = dev->driver->get_vblank_counter(dev, pipe);
> + ktime_t end_vbl_time = ktime_get();
>
> trace_i915_pipe_update_end(crtc, end_vbl_count);
>
> local_irq_enable();
>
> if (crtc->start_vbl_count && crtc->start_vbl_count != end_vbl_count)
> - DRM_ERROR("Atomic update failure on pipe %c (start=%u end=%u)\n",
> - pipe_name(pipe), crtc->start_vbl_count, end_vbl_count);
> + DRM_ERROR("Atomic update failure on pipe %c (start=%u end=%u) time %lld us\n",
> + pipe_name(pipe), crtc->start_vbl_count, end_vbl_count,
> + ktime_us_delta(end_vbl_time, crtc->start_vbl_time));
> }
>
> static void
>
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx@lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/intel-gfx
--
Daniel Vetter
Software Engineer, Intel Corporation
http://blog.ffwll.ch
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2015-09-02 11:51 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-08-31 11:04 [PATCH 1/2] drm/i915: Remove start frame argument to pipe_update_begin/end Maarten Lankhorst
2015-08-31 11:04 ` [PATCH 2/2] drm/i915: Also record time difference if vblank evasion fails Maarten Lankhorst
2015-08-31 11:49 ` Ville Syrjälä
2015-09-01 10:15 ` [PATCH v2 2/2] drm/i915: Also record time difference if vblank evasion fails, v2 Maarten Lankhorst
2015-09-02 11:51 ` Daniel Vetter
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox