[igt-dev] [PATCH i-g-t 23/93] tests/i915/gem_exec_reloc: Convert to intel_ctx_t
Zbigniew Kempczyński
zbigniew.kempczynski at intel.com
Thu Jun 10 08:14:52 UTC 2021
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.
> 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:
Reviewed-by: Zbigniew Kempczyński <zbigniew.kempczynski at intel.com>
--
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