[Intel-gfx] [PATCH v2 4/4] drm/i915: Skip clearing the GGTT on full-ppgtt systems
David Weinehall
david.weinehall at linux.intel.com
Fri May 13 13:17:58 UTC 2016
On Thu, May 12, 2016 at 03:28:16PM +0100, Chris Wilson wrote:
> Under full-ppgtt, access to the global GTT is carefully regulated
> through hardware functions (i.e. userspace cannot read and write to
> arbitrary locations in the GGTT via the GPU). With this restriction in
> place, we can forgo clearing stale entries from the GGTT as they will
> not be accessed.
>
> For aliasing-ppgtt, we could almost do the same except that we do allow
> userspace access to the global-GTT via execbuf in order to workraound
> some quirks of certain instructions. (This execbuf path is filtered out
> with EINVAL on full-ppgtt.)
>
> The most dramatic effect this will have will be during resume, as with
> full-ppgtt the GGTT is only used sparingly.
>
> Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
> Cc: David Weinehall <david.weinehall at intel.com>
I've tested patch 3 + 4 with SuspendResume
(analyze_suspend.py -config suspend-callgraph.cfg).
The takeaway is that restore_gtt (almost) disappears
in the noise. Nice improvement.
I've also confirmed that hibernate works properly.
Tested-by: David Weinehall <david.weinehall at intel.com>
> ---
> drivers/gpu/drm/i915/i915_gem_gtt.c | 20 +++++++++++++++-----
> 1 file changed, 15 insertions(+), 5 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/i915_gem_gtt.c b/drivers/gpu/drm/i915/i915_gem_gtt.c
> index 319f3b459b3e..7eab619a3eb2 100644
> --- a/drivers/gpu/drm/i915/i915_gem_gtt.c
> +++ b/drivers/gpu/drm/i915/i915_gem_gtt.c
> @@ -2477,6 +2477,13 @@ static void gen6_ggtt_insert_entries(struct i915_address_space *vm,
> assert_rpm_atomic_end(dev_priv, rpm_atomic_seq);
> }
>
> +static void nop_clear_range(struct i915_address_space *vm,
> + uint64_t start,
> + uint64_t length,
> + bool use_scratch)
> +{
> +}
> +
> static void gen8_ggtt_clear_range(struct i915_address_space *vm,
> uint64_t start,
> uint64_t length,
> @@ -3072,14 +3079,17 @@ static int gen8_gmch_probe(struct i915_ggtt *ggtt)
>
> ret = ggtt_probe_common(dev, ggtt->size);
>
> - ggtt->base.clear_range = gen8_ggtt_clear_range;
> - if (IS_CHERRYVIEW(dev_priv))
> - ggtt->base.insert_entries = gen8_ggtt_insert_entries__BKL;
> - else
> - ggtt->base.insert_entries = gen8_ggtt_insert_entries;
> ggtt->base.bind_vma = ggtt_bind_vma;
> ggtt->base.unbind_vma = ggtt_unbind_vma;
>
> + ggtt->base.clear_range = nop_clear_range;
> + if (!USES_FULL_PPGTT(dev_priv))
> + ggtt->base.clear_range = gen8_ggtt_clear_range;
> +
> + ggtt->base.insert_entries = gen8_ggtt_insert_entries;
> + if (IS_CHERRYVIEW(dev_priv))
> + ggtt->base.insert_entries = gen8_ggtt_insert_entries__BKL;
> +
> return ret;
> }
>
> --
> 2.8.1
>
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/intel-gfx
More information about the Intel-gfx
mailing list