[Intel-gfx] [PATCH] drm/i915/selftest: test aligned offsets for 64K

Chris Wilson chris at chris-wilson.co.uk
Mon Oct 29 20:54:49 UTC 2018


Quoting Matthew Auld (2018-10-29 20:37:34)
> When using softpin it's not enough to just pad the vma size, we also
> need to ensure the vma offset is at the start of the pt boundary, if we
> plan to utilize 64K pages. Therefore to improve test coverage we should
> use both aligned and unaligned gtt offsets in igt_write_huge.
> 
> Suggested-by: Chris Wilson <chris at chris-wilson.co.uk>
> Signed-off-by: Matthew Auld <matthew.auld at intel.com>
> Cc: Chris Wilson <chris at chris-wilson.co.uk>
> ---
>  drivers/gpu/drm/i915/selftests/huge_pages.c | 22 +++++++++++++++++----
>  1 file changed, 18 insertions(+), 4 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/selftests/huge_pages.c b/drivers/gpu/drm/i915/selftests/huge_pages.c
> index 256001b00e32..26c065c8d2c0 100644
> --- a/drivers/gpu/drm/i915/selftests/huge_pages.c
> +++ b/drivers/gpu/drm/i915/selftests/huge_pages.c
> @@ -1135,7 +1135,8 @@ static int igt_write_huge(struct i915_gem_context *ctx,
>         n = 0;
>         for_each_engine(engine, i915, id) {
>                 if (!intel_engine_can_store_dword(engine)) {
> -                       pr_info("store-dword-imm not supported on engine=%u\n", id);
> +                       pr_info("store-dword-imm not supported on engine=%u\n",
> +                               id);
>                         continue;
>                 }
>                 engines[n++] = engine;
> @@ -1167,17 +1168,30 @@ static int igt_write_huge(struct i915_gem_context *ctx,
>                 engine = engines[order[i] % n];
>                 i = (i + 1) % (n * I915_NUM_ENGINES);
>  
> -               err = __igt_write_huge(ctx, engine, obj, size, offset_low, dword, num + 1);
> +               /*
> +                * In order to utilize 64K pages we need to both pad the vma
> +                * size and ensure the vma offset is at the start of the pt
> +                * boundary, however to improve coverage we opt for testing both
> +                * aligned and unaligned offsets.
> +                */
> +               if (obj->mm.page_sizes.sg & I915_GTT_PAGE_SIZE_64K)
> +                       offset_low = round_down(offset_low,
> +                                               I915_GTT_PAGE_SIZE_2M);
> +
> +               err = __igt_write_huge(ctx, engine, obj, size, offset_low,
> +                                      dword, num + 1);
>                 if (err)
>                         break;
>  
> -               err = __igt_write_huge(ctx, engine, obj, size, offset_high, dword, num + 1);
> +               err = __igt_write_huge(ctx, engine, obj, size, offset_high,
> +                                      dword, num + 1);

Gotcha, alternating between an aligned address and unaligned address.
Reviewed-by: Chris Wilson <chris at chris-wilson.co.uk>
-Chris


More information about the Intel-gfx mailing list