[Intel-gfx] [PATCH] drm/i915/execlists: Skip a lite-restore immediately prior to a context-completion
Chris Wilson
chris at chris-wilson.co.uk
Thu Nov 16 22:25:45 UTC 2017
Quoting Chris Wilson (2017-11-16 22:11:30)
> If we are about to do another context-switch in the near future skip
> doing performing a lite-restore now. (Forcing a lite-restore just before
> a context-switch effectively doubles the cost of that context-switch, so
> long as we can handle the interrupt and resubmit before the GPU powers
> down, which under normal conditions is expected.)
>
> Coincidentally, skipping a lite-restore just before idling also prevents
> (not entirely, but the window for occurrence now depends on the next
> context completing within the same period and we have already noted that
> we can resubmit faster than the GPU can context switch to make this
> worthwhile) an issue on bxt/glk where it may become confused in an attempt
> to lite-restore an already idle context, after which nothing is quite the
> same again.
Well only testing will tell...
> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=102035
> Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
> Cc: Mika Kuoppala <mika.kuoppala at linux.intel.com>
> Cc: Joonas Lahtinen <joonas.lahtinen at linux.intel.com>
> Cc: Tvrtko Ursulin <tvrtko.ursulin at intel.com>
> ---
> drivers/gpu/drm/i915/intel_lrc.c | 19 +++++++++++++++++++
> 1 file changed, 19 insertions(+)
>
> diff --git a/drivers/gpu/drm/i915/intel_lrc.c b/drivers/gpu/drm/i915/intel_lrc.c
> index 5a22bdffd387..5272eb23d98a 100644
> --- a/drivers/gpu/drm/i915/intel_lrc.c
> +++ b/drivers/gpu/drm/i915/intel_lrc.c
> @@ -584,6 +584,25 @@ static void execlists_dequeue(struct intel_engine_cs *engine)
> if (port_count(&port[1]))
> goto unlock;
>
> + /*
> + * If we are about to do another context-switch in
> + * the near future skip doing performing a lite-restore
> + * now. (Forcing a lite-restore just before a
> + * context-switch effectively doubles the cost of that
> + * context-switch, so long as we can handle the
> + * interrupt and resubmit before the GPU powers down,
> + * which under normal conditions is expected.)
> + *
> + * Skipping a lite-restore just before idling also
> + * prevents an issue on bxt/glk where it may become
> + * confused in an attempt to lite-restore an already
> + * idle context, after which nothing is quite the same
> + * again.
> + */
> + if (i915_seqno_passed(intel_engine_get_seqno(engine),
> + last->global_seqno - 1))
> + goto unlock;
> +
> /* WaIdleLiteRestore:bdw,skl
> * Apply the wa NOOPs to prevent
> * ring:HEAD == req:TAIL as we resubmit the
The subtext is that lite-restore are pointless... Not sure I fully agree
yet; in most scenarios pointless. The last time I was thinking of only
doing the lite-restore iff we were on the last request, otherwise we are
just interrupting a request which already has a continuation.
-Chris
More information about the Intel-gfx
mailing list