[igt-dev] [PATCH i-g-t 29/93] tests/i915/gem_spin_batch: Convert to intel_ctx_t
Zbigniew Kempczyński
zbigniew.kempczynski at intel.com
Thu Jun 10 12:17:22 UTC 2021
On Wed, Jun 09, 2021 at 12:36:12PM -0500, Jason Ekstrand wrote:
> Signed-off-by: Jason Ekstrand <jason at jlekstrand.net>
> ---
> tests/i915/gem_spin_batch.c | 81 +++++++++++++++++++++----------------
> 1 file changed, 46 insertions(+), 35 deletions(-)
>
> diff --git a/tests/i915/gem_spin_batch.c b/tests/i915/gem_spin_batch.c
> index db0af018..cc92c37c 100644
> --- a/tests/i915/gem_spin_batch.c
> +++ b/tests/i915/gem_spin_batch.c
> @@ -34,7 +34,7 @@
> "'%s' != '%s' (%lld not within %d%% tolerance of %lld)\n",\
> #x, #ref, (long long)x, tolerance, (long long)ref)
>
> -static void spin(int fd,
> +static void spin(int fd, const intel_ctx_t *ctx_id,
> unsigned int engine,
> unsigned int flags,
> unsigned int timeout_sec)
> @@ -46,10 +46,12 @@ static void spin(int fd,
> struct timespec itv = { };
> uint64_t elapsed;
>
> - spin = __igt_spin_new(fd, .engine = engine, .flags = flags);
> + spin = __igt_spin_new(fd, .ctx = ctx_id, .engine = engine,
> + .flags = flags);
> while ((elapsed = igt_nsec_elapsed(&tv)) >> 30 < timeout_sec) {
> igt_spin_t *next =
> - __igt_spin_new(fd, .engine = engine, .flags = flags);
> + __igt_spin_new(fd, .ctx = ctx_id, .engine = engine,
> + .flags = flags);
>
> igt_spin_set_timeout(spin,
> timeout_100ms - igt_nsec_elapsed(&itv));
> @@ -75,21 +77,25 @@ static void spin(int fd,
> #define RESUBMIT_NEW_CTX (1 << 0)
> #define RESUBMIT_ALL_ENGINES (1 << 1)
>
> -static void spin_resubmit(int fd, unsigned int engine, unsigned int flags)
> +static void spin_resubmit(int fd, const intel_ctx_t *ctx,
> + unsigned int engine, unsigned int flags)
> {
> + const intel_ctx_t *new_ctx = NULL;
> igt_spin_t *spin;
>
> if (flags & RESUBMIT_NEW_CTX)
> igt_require(gem_has_contexts(fd));
>
> - spin = __igt_spin_new(fd, .engine = engine);
> - if (flags & RESUBMIT_NEW_CTX)
> - spin->execbuf.rsvd1 = gem_context_clone_with_engines(fd, 0);
> + spin = __igt_spin_new(fd, .ctx = ctx, .engine = engine);
> + if (flags & RESUBMIT_NEW_CTX) {
> + new_ctx = intel_ctx_create(fd, &ctx->cfg);
> + spin->execbuf.rsvd1 = new_ctx->id;
> + }
>
> if (flags & RESUBMIT_ALL_ENGINES) {
> const struct intel_execution_engine2 *other;
>
> - for_each_context_engine(fd, spin->execbuf.rsvd1, other) {
> + for_each_ctx_engine(fd, ctx, other) {
> spin->execbuf.flags &= ~0x3f;
> spin->execbuf.flags |= other->flags;
> gem_execbuf(fd, &spin->execbuf);
> @@ -100,8 +106,8 @@ static void spin_resubmit(int fd, unsigned int engine, unsigned int flags)
> igt_spin_end(spin);
> gem_sync(fd, spin->handle);
>
> - if (spin->execbuf.rsvd1)
> - gem_context_destroy(fd, spin->execbuf.rsvd1);
> + if (flags & RESUBMIT_NEW_CTX)
> + intel_ctx_destroy(fd, new_ctx);
>
> igt_spin_free(fd, spin);
> }
> @@ -112,45 +118,44 @@ static void spin_exit_handler(int sig)
> }
>
> static void
> -spin_on_all_engines(int fd, unsigned long flags, unsigned int timeout_sec)
> +spin_on_all_engines(int fd, const intel_ctx_t *ctx,
> + unsigned long flags, unsigned int timeout_sec)
> {
> const struct intel_execution_engine2 *e2;
>
> - __for_each_physical_engine(fd, e2) {
> + for_each_ctx_engine(fd, ctx, e2) {
> igt_fork(child, 1) {
> igt_install_exit_handler(spin_exit_handler);
> - spin(fd, e2->flags, flags, timeout_sec);
> + spin(fd, ctx, e2->flags, flags, timeout_sec);
> }
> }
>
> igt_waitchildren();
> }
>
> -static void spin_all(int i915, unsigned int flags)
> +static void spin_all(int i915, const intel_ctx_t *ctx, unsigned int flags)
> #define PARALLEL_SPIN_NEW_CTX BIT(0)
> {
> const struct intel_execution_engine2 *e;
> + intel_ctx_cfg_t cfg = ctx->cfg;
> struct igt_spin *spin, *n;
> IGT_LIST_HEAD(list);
>
> - __for_each_physical_engine(i915, e) {
> - uint32_t ctx;
> -
> + for_each_ctx_cfg_engine(i915, &cfg, e) {
> if (!gem_class_can_store_dword(i915, e->class))
> continue;
>
> - ctx = 0;
> if (flags & PARALLEL_SPIN_NEW_CTX)
> - ctx = gem_context_clone_with_engines(i915, 0);
> + ctx = intel_ctx_create(i915, &cfg);
>
> /* Prevent preemption so only one is allowed on each engine */
> spin = igt_spin_new(i915,
> - .ctx_id = ctx,
> + .ctx = ctx,
> .engine = e->flags,
> .flags = (IGT_SPIN_POLL_RUN |
> IGT_SPIN_NO_PREEMPTION));
> - if (ctx)
> - gem_context_destroy(i915, ctx);
> + if (flags & PARALLEL_SPIN_NEW_CTX)
> + intel_ctx_destroy(i915, ctx);
>
> igt_spin_busywait_until_started(spin);
> igt_list_move(&spin->link, &list);
> @@ -187,11 +192,14 @@ igt_main
> {
> const struct intel_execution_engine2 *e2;
> const struct intel_execution_ring *e;
> + const intel_ctx_t *ctx = NULL;
This is unnecessary. All the rest looks ok.
Reviewed-by: Zbigniew Kempczyński <zbigniew.kempczynski at intel.com>
--
Zbigniew
> int fd = -1;
>
> igt_fixture {
> fd = drm_open_driver(DRIVER_INTEL);
> igt_require_gem(fd);
> + ctx = intel_ctx_create_all_physical(fd);
> +
> igt_fork_hang_detector(fd);
> }
>
> @@ -202,53 +210,56 @@ igt_main
> igt_dynamic_f("%s", e->name)
>
> test_each_legacy_ring("legacy")
> - spin(fd, eb_ring(e), 0, 3);
> + spin(fd, intel_ctx_0(fd), eb_ring(e), 0, 3);
> test_each_legacy_ring("legacy-resubmit")
> - spin_resubmit(fd, eb_ring(e), 0);
> + spin_resubmit(fd, intel_ctx_0(fd), eb_ring(e), 0);
> test_each_legacy_ring("legacy-resubmit-new")
> - spin_resubmit(fd, eb_ring(e), RESUBMIT_NEW_CTX);
> + spin_resubmit(fd, intel_ctx_0(fd), eb_ring(e), RESUBMIT_NEW_CTX);
>
> #undef test_each_legcy_ring
>
> igt_subtest("spin-all")
> - spin_all(fd, 0);
> + spin_all(fd, ctx, 0);
> igt_subtest("spin-all-new")
> - spin_all(fd, PARALLEL_SPIN_NEW_CTX);
> + spin_all(fd, ctx, PARALLEL_SPIN_NEW_CTX);
>
> #define test_each_engine(test) \
> igt_subtest_with_dynamic(test) \
> - __for_each_physical_engine(fd, e2) \
> + for_each_ctx_engine(fd, ctx, e2) \
> igt_dynamic_f("%s", e2->name)
>
> test_each_engine("engines")
> - spin(fd, e2->flags, 0, 3);
> + spin(fd, ctx, e2->flags, 0, 3);
>
> test_each_engine("resubmit")
> - spin_resubmit(fd, e2->flags, 0);
> + spin_resubmit(fd, ctx, e2->flags, 0);
>
> test_each_engine("resubmit-new")
> - spin_resubmit(fd, e2->flags, RESUBMIT_NEW_CTX);
> + spin_resubmit(fd, ctx, e2->flags,
> + RESUBMIT_NEW_CTX);
>
> test_each_engine("resubmit-all")
> - spin_resubmit(fd, e2->flags, RESUBMIT_ALL_ENGINES);
> + spin_resubmit(fd, ctx, e2->flags,
> + RESUBMIT_ALL_ENGINES);
>
> test_each_engine("resubmit-new-all")
> - spin_resubmit(fd, e2->flags,
> + spin_resubmit(fd, ctx, e2->flags,
> RESUBMIT_NEW_CTX |
> RESUBMIT_ALL_ENGINES);
>
> #undef test_each_engine
>
> igt_subtest("spin-each")
> - spin_on_all_engines(fd, 0, 3);
> + spin_on_all_engines(fd, ctx, 0, 3);
>
> igt_subtest("user-each") {
> igt_require(has_userptr(fd));
> - spin_on_all_engines(fd, IGT_SPIN_USERPTR, 3);
> + spin_on_all_engines(fd, ctx, IGT_SPIN_USERPTR, 3);
> }
>
> igt_fixture {
> igt_stop_hang_detector();
> + intel_ctx_destroy(fd, ctx);
> close(fd);
> }
> }
> --
> 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