Re: [igt-dev] [PATCH v21 5/6] lib: igt_dummyload: use for_each_context_engine()

Daniele Ceraolo Spurio
2019-04-17T15:42:48Z

<snip>

> @@ -94,17 +95,17 @@ emit_recursive_batch(igt_spin_t *spin,
>
> nengine = 0;
> if (opts->engine == ALL_ENGINES) {
> - unsigned int engine;
> + struct intel_execution_engine2 *engine;
>
> - for_each_physical_engine(fd, engine) {
> + for_each_context_engine(fd, opts->ctx, engine) {

On a kernel that has the new I915_CONTEXT_PARAM_ENGINES, wouldn't this
implicitly update opts->ctx to use it (via the ctx_map_engines in
intel_init_engine_list)? What if the caller then tries to submit with
that ctx using an execbuf flag?only an issue until all the callers are
updated I guess.

Thanks,
Daniele

> if (opts->flags & IGT_SPIN_POLL_RUN &&
> - !gem_can_store_dword(fd, engine))
> + !gem_class_can_store_dword(fd, engine->class))
> continue;
>
> - engines[nengine++] = engine;
> + flags[nengine++] = engine->flags;
> }
> } else {
> - engines[nengine++] = opts->engine;
> + flags[nengine++] = opts->engine;
> }
> igt_require(nengine);
>
> @@ -234,7 +235,7 @@ emit_recursive_batch(igt_spin_t *spin,
>
> for (i = 0; i < nengine; i++) {
> execbuf->flags &= ~ENGINE_MASK;
> - execbuf->flags |= engines[i];
> + execbuf->flags |= flags[i];
>
> gem_execbuf_wr(fd, execbuf);
>
> @@ -309,9 +310,19 @@ igt_spin_batch_factory(int fd, const struct igt_spin_factory *opts)
> igt_require_gem(fd);
>
> if (opts->engine != ALL_ENGINES) {
> - gem_require_ring(fd, opts->engine);
> + struct intel_execution_engine2 e;
> + int class;
> +
> + if (!gem_context_lookup_engine(fd, opts->engine,
> + opts->ctx, &e)) {
> + class = e.class;
> + } else {
> + gem_require_ring(fd, opts->engine);
> + class = gem_execbuf_flags_to_engine_class(opts->engine);
> + }
> +
> if (opts->flags & IGT_SPIN_POLL_RUN)
> - igt_require(gem_can_store_dword(fd, opts->engine));
> + igt_require(gem_class_can_store_dword(fd, class));
> }
>
> spin = spin_batch_create(fd, opts);