[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