Re: [igt-dev] [RFC PATCH v9 5/5] tests: gem_exec_basic: add "exec-ctx" buffer execution demo test

Chris Wilson
2019-02-14T09:57:00Z

Quoting Andi Shyti (2019-02-14 00:44:45)
> The "exec-ctx" is a demo subtest inserted in the gem_exec_basic
> test. The main goal is to reach the engines by using
> the new uapi interfacing with igt_require_gem_engine_list().
>
> The "exec-ctx" subtest simply gets the list of engines, binds
> them to a context and executes a buffer. This is done through a
> new "for_each_engine2" loop which iterates through the
> engines.
>
> Signed-off-by: Andi Shyti <andi.shyti@intel.com>
> ---
> Hi Chris,
>
> one note on this. You didn't like the explicit iterator in the
> for_each, while for me it makes quite sense to have it explicit
> rather than hidden because, as I said in the previous review, the
> user might want to use it.
>
> At the end, we iterate for the iterating value, e.g. we do
>
> for (i = 0; i < N; i++)
> ...
>
> because we are interested in 'i' (of course, not always, but most
> of the cases), at the same way we might be interested to the e2
> value.
>
> If we really want to hide e2, I would rather call it
> for_each_mapped_idx() or similar.
>
> Andi
>
> tests/i915/gem_exec_basic.c | 15 +++++++++++++++
> 1 file changed, 15 insertions(+)
>
> diff --git a/tests/i915/gem_exec_basic.c b/tests/i915/gem_exec_basic.c
> index dcb83864b1c1..a26eaff1cfe8 100644
> --- a/tests/i915/gem_exec_basic.c
> +++ b/tests/i915/gem_exec_basic.c
> @@ -135,6 +135,21 @@ igt_main
> gtt(fd, e->exec_id | e->flags);
> }
>
> + igt_subtest("exec-ctx") {
> + uint32_t ctx_id;
> + struct intel_execution_engine2 *e2;
> + int index_map = 0;
> +
> + igt_require_gem_engine_list(fd);

This test is for the iterator, it needs to work regardless of having
SET_ENGINES.

Logging which interface it is using is useful.

> + ctx_id = gem_context_create(fd);
> +
> + for_each_engine2(fd, ctx_id, e2)
> + igt_assert(gem_context_has_engine(fd, ++index_map,
> + ctx_id));

Do you see why it must be using only the iterator now? As that's what I
want tested! gem_ctx_engines is checking the SET_ENGINES interface and
making sure execbufs on ctx->engines[] map back to the old uabi. What we
need here is a simple sanitycheck that the for_each_ctx_engine() does
not explode.
-Chris