[igt-dev] [PATCH i-g-t 23/93] tests/i915/gem_exec_reloc: Convert to intel_ctx_t

Jason Ekstrand jason at jlekstrand.net
Thu Jun 10 15:08:57 UTC 2021


On Thu, Jun 10, 2021 at 3:15 AM Zbigniew Kempczyński
<zbigniew.kempczynski at intel.com> wrote:
>
> On Wed, Jun 09, 2021 at 12:36:06PM -0500, Jason Ekstrand wrote:
> > Signed-off-by: Jason Ekstrand <jason at jlekstrand.net>
> > ---
> >  tests/i915/gem_exec_reloc.c | 102 ++++++++++++++++++++++--------------
> >  1 file changed, 62 insertions(+), 40 deletions(-)
> >
> > diff --git a/tests/i915/gem_exec_reloc.c b/tests/i915/gem_exec_reloc.c
> > index c79400fb..83206f10 100644
> > --- a/tests/i915/gem_exec_reloc.c
> > +++ b/tests/i915/gem_exec_reloc.c
> > @@ -267,7 +267,7 @@ static void check_bo(int fd, uint32_t handle)
> >       munmap(map, 4096);
> >  }
> >
> > -static void active(int fd, unsigned engine)
> > +static void active(int fd, const intel_ctx_t *ctx, unsigned engine)
> >  {
> >       const unsigned int gen = intel_gen(intel_get_drm_devid(fd));
> >       struct drm_i915_gem_relocation_entry reloc;
> > @@ -281,7 +281,7 @@ static void active(int fd, unsigned engine)
> >       if (engine == ALL_ENGINES) {
> >               const struct intel_execution_engine2 *e;
> >
> > -             __for_each_physical_engine(fd, e) {
> > +             for_each_ctx_engine(fd, ctx, e) {
> >                       if (gem_class_can_store_dword(fd, e->class))
> >                               engines[nengine++] = e->flags;
> >               }
> > @@ -309,6 +309,7 @@ static void active(int fd, unsigned engine)
> >       execbuf.buffer_count = 2;
> >       if (gen < 6)
> >               execbuf.flags |= I915_EXEC_SECURE;
> > +     execbuf.rsvd1 = ctx->id;
> >
> >       for (pass = 0; pass < 1024; pass++) {
> >               uint32_t batch[16];
> > @@ -368,7 +369,8 @@ static uint64_t many_relocs(unsigned long count, unsigned long *out)
> >       return to_user_pointer(reloc);
> >  }
> >
> > -static void __many_active(int i915, unsigned engine, unsigned long count)
> > +static void __many_active(int i915, const intel_ctx_t *ctx, unsigned engine,
> > +                       unsigned long count)
> >  {
> >       unsigned long reloc_sz;
> >       struct drm_i915_gem_exec_object2 obj[2] = {{
> > @@ -380,10 +382,12 @@ static void __many_active(int i915, unsigned engine, unsigned long count)
> >               .buffers_ptr = to_user_pointer(obj),
> >               .buffer_count = ARRAY_SIZE(obj),
> >               .flags = engine | I915_EXEC_HANDLE_LUT,
> > +             .rsvd1 = ctx->id,
> >       };
> >       igt_spin_t *spin;
> >
> >       spin = __igt_spin_new(i915,
> > +                           .ctx = ctx,
> >                             .engine = engine,
> >                             .dependency = obj[0].handle,
> >                             .flags = (IGT_SPIN_FENCE_OUT |
> > @@ -406,7 +410,7 @@ static void __many_active(int i915, unsigned engine, unsigned long count)
> >       gem_close(i915, obj[0].handle);
> >  }
> >
> > -static void many_active(int i915, unsigned engine)
> > +static void many_active(int i915, const intel_ctx_t *ctx, unsigned engine)
> >  {
> >       const uint64_t max = 2048;
> >       unsigned long count = 256;
> > @@ -419,7 +423,7 @@ static void many_active(int i915, unsigned engine)
> >                       break;
> >
> >               igt_debug("Testing count:%lu\n", count);
> > -             __many_active(i915, engine, count);
> > +             __many_active(i915, ctx, engine, count);
> >
> >               count <<= 1;
> >               if (count >= max)
> > @@ -427,7 +431,8 @@ static void many_active(int i915, unsigned engine)
> >       }
> >  }
> >
> > -static void __wide_active(int i915, unsigned engine, unsigned long count)
> > +static void __wide_active(int i915, const intel_ctx_t *ctx, unsigned engine,
> > +                       unsigned long count)
> >  {
> >       struct drm_i915_gem_relocation_entry *reloc =
> >               calloc(count, sizeof(*reloc));
> > @@ -437,6 +442,7 @@ static void __wide_active(int i915, unsigned engine, unsigned long count)
> >               .buffers_ptr = to_user_pointer(obj),
> >               .buffer_count = count + 1,
> >               .flags = engine | I915_EXEC_HANDLE_LUT,
> > +             .rsvd1 = ctx->id,
> >       };
> >       igt_spin_t *spin;
> >
> > @@ -447,6 +453,7 @@ static void __wide_active(int i915, unsigned engine, unsigned long count)
> >       }
> >
> >       spin = __igt_spin_new(i915,
> > +                           .ctx = ctx,
> >                             .engine = engine,
> >                             .flags = (IGT_SPIN_FENCE_OUT |
> >                                       IGT_SPIN_NO_PREEMPTION));
> > @@ -476,7 +483,7 @@ static void __wide_active(int i915, unsigned engine, unsigned long count)
> >       free(reloc);
> >  }
> >
> > -static void wide_active(int i915, unsigned engine)
> > +static void wide_active(int i915, const intel_ctx_t *ctx, unsigned engine)
> >  {
> >       const uint64_t max = gem_aperture_size(i915) / 4096 / 2;
> >       unsigned long count = 256;
> > @@ -489,7 +496,7 @@ static void wide_active(int i915, unsigned engine)
> >                       break;
> >
> >               igt_debug("Testing count:%lu\n", count);
> > -             __wide_active(i915, engine, count);
> > +             __wide_active(i915, ctx, engine, count);
> >
> >               count <<= 1;
> >               if (count >= max)
> > @@ -502,7 +509,7 @@ static unsigned int offset_in_page(void *addr)
> >       return (uintptr_t)addr & 4095;
> >  }
> >
> > -static void active_spin(int fd, unsigned engine)
> > +static void active_spin(int fd, const intel_ctx_t *ctx, unsigned engine)
> >  {
> >       const uint32_t bbe = MI_BATCH_BUFFER_END;
> >       struct drm_i915_gem_relocation_entry reloc;
> > @@ -511,6 +518,7 @@ static void active_spin(int fd, unsigned engine)
> >       igt_spin_t *spin;
> >
> >       spin = igt_spin_new(fd,
> > +                         .ctx = ctx,
> >                           .engine = engine,
> >                           .flags = IGT_SPIN_NO_PREEMPTION);
> >
> > @@ -530,6 +538,7 @@ static void active_spin(int fd, unsigned engine)
> >       execbuf.buffers_ptr = to_user_pointer(obj);
> >       execbuf.buffer_count = 2;
> >       execbuf.flags = engine;
> > +     execbuf.rsvd1 = ctx->id;
> >
> >       gem_execbuf(fd, &execbuf);
> >       gem_close(fd, obj[1].handle);
> > @@ -542,7 +551,7 @@ static void active_spin(int fd, unsigned engine)
> >       igt_spin_free(fd, spin);
> >  }
> >
> > -static void others_spin(int i915, unsigned engine)
> > +static void others_spin(int i915, const intel_ctx_t *ctx, unsigned engine)
> >  {
> >       struct drm_i915_gem_relocation_entry reloc = {};
> >       struct drm_i915_gem_exec_object2 obj = {
> > @@ -553,18 +562,20 @@ static void others_spin(int i915, unsigned engine)
> >               .buffers_ptr = to_user_pointer(&obj),
> >               .buffer_count = 1,
> >               .flags = engine,
> > +             .rsvd1 = ctx->id,
> >       };
> >       const struct intel_execution_engine2 *e;
> >       igt_spin_t *spin = NULL;
> >       uint64_t addr;
> >       int fence;
> >
> > -     __for_each_physical_engine(i915, e) {
> > +     for_each_ctx_engine(i915, ctx, e) {
> >               if (e->flags == engine)
> >                       continue;
> >
> >               if (!spin) {
> >                       spin = igt_spin_new(i915,
> > +                                         .ctx = ctx,
> >                                           .engine = e->flags,
> >                                           .flags = IGT_SPIN_FENCE_OUT);
> >                       fence = dup(spin->out_fence);
> > @@ -986,12 +997,13 @@ static void sighandler(int sig)
> >       stop = 1;
> >  }
> >
> > -static void parallel_child(int i915,
> > +static void parallel_child(int i915, const intel_ctx_t *ctx,
> >                          const struct intel_execution_engine2 *engine,
> >                          struct drm_i915_gem_relocation_entry *reloc,
> >                          uint32_t common)
> >  {
> > -     igt_spin_t *spin = __igt_spin_new(i915, .engine = engine->flags);
> > +     igt_spin_t *spin = __igt_spin_new(i915, .ctx = ctx,
> > +                                       .engine = engine->flags);
> >       struct drm_i915_gem_exec_object2 reloc_target = {
> >               .handle = gem_create(i915, 32 * 1024 * 8),
> >               .relocation_count = 32 * 1024,
> > @@ -1006,6 +1018,7 @@ static void parallel_child(int i915,
> >               .buffers_ptr = to_user_pointer(obj),
> >               .buffer_count = ARRAY_SIZE(obj),
> >               .flags = engine->flags | I915_EXEC_HANDLE_LUT,
> > +             .rsvd1 = ctx->id,
> >       };
> >       struct sigaction act = {
> >               .sa_handler = sighandler,
> > @@ -1033,7 +1046,7 @@ static void kill_children(int sig)
> >       signal(sig, SIG_DFL);
> >  }
> >
> > -static void parallel(int i915)
> > +static void parallel(int i915, const intel_ctx_t *ctx)
> >  {
> >       const struct intel_execution_engine2 *e;
> >       struct drm_i915_gem_relocation_entry *reloc;
> > @@ -1044,16 +1057,16 @@ static void parallel(int i915)
> >       reloc = parallel_relocs(32 * 1024, &reloc_sz);
> >
> >       stop = 0;
> > -     __for_each_physical_engine(i915, e) {
> > +     for_each_ctx_engine(i915, ctx, e) {
> >               igt_fork(child, 1)
> > -                     parallel_child(i915, e, reloc, common);
> > +                     parallel_child(i915, ctx, e, reloc, common);
> >       }
> >       sleep(2);
> >
> >       if (gem_scheduler_has_preemption(i915)) {
> > -             uint32_t ctx = gem_context_clone_with_engines(i915, 0);
> > +             const intel_ctx_t *tmp_ctx = intel_ctx_create(i915, &ctx->cfg);
> >
> > -             __for_each_physical_engine(i915, e) {
> > +             for_each_ctx_engine(i915, ctx, e) {
>
> I know it doesn't matter and config is really same (copy), but to avoid
> confusion on reader I would use tmp_ctx instead ctx.

Yup.  Good call.

> >                       struct drm_i915_gem_exec_object2 obj[2] = {
> >                               { .handle = common },
> >                               { .handle = batch },
> > @@ -1062,12 +1075,12 @@ static void parallel(int i915)
> >                               .buffers_ptr = to_user_pointer(obj),
> >                               .buffer_count = ARRAY_SIZE(obj),
> >                               .flags = e->flags,
> > -                             .rsvd1 = ctx,
> > +                             .rsvd1 = tmp_ctx->id,
> >                       };
> >                       gem_execbuf(i915, &execbuf);
> >               }
> >
> > -             gem_context_destroy(i915, ctx);
> > +             intel_ctx_destroy(i915, tmp_ctx);
> >       }
> >       gem_sync(i915, batch);
> >       gem_close(i915, batch);
> > @@ -1121,7 +1134,7 @@ static void xchg_u32(void *array, unsigned i, unsigned j)
> >       u32[j] = tmp;
> >  }
> >
> > -static void concurrent_child(int i915,
> > +static void concurrent_child(int i915, const intel_ctx_t *ctx,
> >                            const struct intel_execution_engine2 *e,
> >                            uint32_t *common, int num_common,
> >                            int in, int out)
> > @@ -1134,6 +1147,7 @@ static void concurrent_child(int i915,
> >               .buffers_ptr = to_user_pointer(obj),
> >               .buffer_count = ARRAY_SIZE(obj),
> >               .flags = e->flags | I915_EXEC_HANDLE_LUT | (gen < 6 ? I915_EXEC_SECURE : 0),
> > +             .rsvd1 = ctx->id,
> >       };
> >       uint32_t *batch = &obj[num_common + 1].handle;
> >       unsigned long count = 0;
> > @@ -1214,7 +1228,7 @@ static uint32_t create_concurrent_batch(int i915, unsigned int count)
> >       return handle;
> >  }
> >
> > -static void concurrent(int i915, int num_common)
> > +static void concurrent(int i915, const intel_ctx_t *ctx, int num_common)
> >  {
> >       const struct intel_execution_engine2 *e;
> >       int in[2], out[2];
> > @@ -1240,12 +1254,12 @@ static void concurrent(int i915, int num_common)
> >               common[n] = gem_create(i915, 4 * 4 * CONCURRENT);
> >
> >       nchild = 0;
> > -     __for_each_physical_engine(i915, e) {
> > +     for_each_ctx_engine(i915, ctx, e) {
> >               if (!gem_class_can_store_dword(i915, e->class))
> >                       continue;
> >
> >               igt_fork(child, 1)
> > -                     concurrent_child(i915, e,
> > +                     concurrent_child(i915, ctx, e,
> >                                        common, num_common,
> >                                        in[0], out[1]);
> >
> > @@ -1309,6 +1323,7 @@ pin_scanout(igt_display_t *dpy, igt_output_t *output, struct igt_fb *fb)
> >
> >  static void scanout(int i915,
> >                   igt_display_t *dpy,
> > +                 const intel_ctx_t *ctx,
> >                   const struct intel_execution_engine2 *e)
> >  {
> >       struct drm_i915_gem_relocation_entry reloc = {};
> > @@ -1319,6 +1334,7 @@ static void scanout(int i915,
> >               .buffers_ptr = to_user_pointer(obj),
> >               .buffer_count = 2,
> >               .flags = e->flags,
> > +             .rsvd1 = ctx->id,
> >       };
> >       igt_output_t *output;
> >       struct igt_fb fb;
> > @@ -1438,6 +1454,7 @@ static void invalid_domains(int fd)
> >
> >  igt_main
> >  {
> > +     const intel_ctx_t *ctx = 0;
>
> Initialization not necessary. Both nits can be ignored:

Done.

> Reviewed-by: Zbigniew Kempczyński <zbigniew.kempczynski at intel.com>

Thanks!

> --
> Zbigniew
>
> >       const struct intel_execution_engine2 *e;
> >       const struct mode {
> >               const char *name;
> > @@ -1481,6 +1498,11 @@ igt_main
> >               igt_require_gem(fd);
> >               /* Check if relocations supported by platform */
> >               igt_require(gem_has_relocations(fd));
> > +
> > +             if (gem_has_contexts(fd))
> > +                     ctx = intel_ctx_create_all_physical(fd);
> > +             else
> > +                     ctx = intel_ctx_0(fd);
> >       }
> >
> >       for (f = flags; f->name; f++) {
> > @@ -1542,52 +1564,52 @@ igt_main
> >
> >       igt_subtest_with_dynamic("basic-active") {
> >               igt_dynamic("all")
> > -                     active(fd, ALL_ENGINES);
> > +                     active(fd, ctx, ALL_ENGINES);
> >
> > -             __for_each_physical_engine(fd, e) {
> > +             for_each_ctx_engine(fd, ctx, e) {
> >                       if (!gem_class_can_store_dword(fd, e->class))
> >                               continue;
> >
> >                       igt_dynamic_f("%s", e->name)
> > -                             active(fd, e->flags);
> > +                             active(fd, ctx, e->flags);
> >               }
> >       }
> >
> >       igt_subtest_with_dynamic("basic-spin") {
> > -             __for_each_physical_engine(fd, e) {
> > +             for_each_ctx_engine(fd, ctx, e) {
> >                       igt_dynamic_f("%s", e->name)
> > -                             active_spin(fd, e->flags);
> > +                             active_spin(fd, ctx, e->flags);
> >               }
> >       }
> >
> >       igt_subtest_with_dynamic("basic-spin-others") {
> > -             __for_each_physical_engine(fd, e) {
> > +             for_each_ctx_engine(fd, ctx, e) {
> >                       igt_dynamic_f("%s", e->name)
> > -                             others_spin(fd, e->flags);
> > +                             others_spin(fd, ctx, e->flags);
> >               }
> >       }
> >
> >       igt_subtest_with_dynamic("basic-many-active") {
> > -             __for_each_physical_engine(fd, e) {
> > +             for_each_ctx_engine(fd, ctx, e) {
> >                       igt_dynamic_f("%s", e->name)
> > -                             many_active(fd, e->flags);
> > +                             many_active(fd, ctx, e->flags);
> >               }
> >       }
> >
> >       igt_subtest_with_dynamic("basic-wide-active") {
> > -             __for_each_physical_engine(fd, e) {
> > +             for_each_ctx_engine(fd, ctx, e) {
> >                       igt_dynamic_f("%s", e->name)
> > -                             wide_active(fd, e->flags);
> > +                             wide_active(fd, ctx, e->flags);
> >               }
> >       }
> >
> >       igt_subtest("basic-parallel")
> > -             parallel(fd);
> > +             parallel(fd, ctx);
> >
> >       igt_subtest("basic-concurrent0")
> > -             concurrent(fd, 0);
> > +             concurrent(fd, ctx, 0);
> >       igt_subtest("basic-concurrent16")
> > -             concurrent(fd, 16);
> > +             concurrent(fd, ctx, 16);
> >
> >       igt_subtest("invalid-domains")
> >               invalid_domains(fd);
> > @@ -1605,9 +1627,9 @@ igt_main
> >               }
> >
> >               igt_subtest_with_dynamic("basic-scanout") {
> > -                     __for_each_physical_engine(fd, e) {
> > +                     for_each_ctx_engine(fd, ctx, e) {
> >                               igt_dynamic_f("%s", e->name)
> > -                                     scanout(fd, &display, e);
> > +                                     scanout(fd, &display, ctx, e);
> >                       }
> >               }
> >
> > --
> > 2.31.1
> >
> > _______________________________________________
> > igt-dev mailing list
> > igt-dev at lists.freedesktop.org
> > https://lists.freedesktop.org/mailman/listinfo/igt-dev


More information about the igt-dev mailing list