[Intel-gfx] [PATCH 01/26] drm/i915/ringbuffer: Reload PDs harder on byt/bcs
Joonas Lahtinen
joonas.lahtinen at linux.intel.com
Wed Sep 12 09:44:46 UTC 2018
Quoting Chris Wilson (2018-09-11 14:57:45)
> Baytrail takes a little more convincing that it needs to actually reload
> its Page Directoy (ppGTT) before the context switch, so repeat it until
> it gets the message. Once again the arbitrary values here are
> empirically derived.
>
> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=107861
> Testcase: igt/gem_exec_parallel/fds
> Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
> ---
> drivers/gpu/drm/i915/intel_ringbuffer.c | 23 ++++++++++++++++++++---
> 1 file changed, 20 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/intel_ringbuffer.c b/drivers/gpu/drm/i915/intel_ringbuffer.c
> index 472939f5c18f..d0ef50bf930a 100644
> --- a/drivers/gpu/drm/i915/intel_ringbuffer.c
> +++ b/drivers/gpu/drm/i915/intel_ringbuffer.c
> @@ -1677,9 +1677,26 @@ static int switch_context(struct i915_request *rq)
> GEM_BUG_ON(HAS_EXECLISTS(rq->i915));
>
> if (ppgtt) {
> - ret = load_pd_dir(rq, ppgtt);
> - if (ret)
> - goto err;
> + int loops;
> +
> + /*
> + * Baytail takes a little more convincing that it really needs
> + * to reload the PD between contexts. It is not just a little
> + * longer, as adding more stalls after the load_pd_dir (i.e.
> + * adding a long loop around flush_pd_dir) is not as effective
> + * as reloading the PD umpteen times. 32 is derived from
> + * experimentation (gem_exec_parallel/fds) and has no good
> + * explanation.
> + */
> + loops = 1;
> + if (engine->id == BCS && IS_VALLEYVIEW(engine->i915))
> + loops = 32;
> +
> + do {
> + ret = load_pd_dir(rq, ppgtt);
> + if (ret)
> + goto err;
> + } while (--loops);
This what they call black magic.
Reviewed-by: Joonas Lahtinen <joonas.lahtinen at linux.intel.com>
Regards, Joonas
More information about the Intel-gfx
mailing list