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

Daniele Ceraolo Spurio daniele.ceraolospurio at intel.com
Wed Apr 17 15:42:41 UTC 2019


<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);



More information about the igt-dev mailing list