[igt-dev] [PATCH i-g-t] i915/gem_engine_topology: Generate engine names based on class
Tvrtko Ursulin
tvrtko.ursulin at linux.intel.com
Wed Jan 22 10:15:56 UTC 2020
On 22/01/2020 10:10, Tvrtko Ursulin wrote:
> From: Tvrtko Ursulin <tvrtko.ursulin at intel.com>
>
> With the introduction of dynamic subtests we got one step closer towards
> eliminating the duality of static and dynamic engine enumeration.
>
> This patch makes one more step in that direction by removing the
> dependency on the static list when generating probed engine names.
>
> Signed-off-by: Tvrtko Ursulin <tvrtko.ursulin at intel.com>
> Cc: Andi Shyti <andi.shyti at intel.com>
> Cc: Petri Latvala <petri.latvala at intel.com>
> ---
> lib/i915/gem_engine_topology.c | 39 +++++++++++++++++++---------------
> lib/igt_gt.h | 2 +-
> 2 files changed, 23 insertions(+), 18 deletions(-)
>
> diff --git a/lib/i915/gem_engine_topology.c b/lib/i915/gem_engine_topology.c
> index 790d455ff2ad..eff231800b77 100644
> --- a/lib/i915/gem_engine_topology.c
> +++ b/lib/i915/gem_engine_topology.c
> @@ -97,39 +97,43 @@ static void ctx_map_engines(int fd, struct intel_engine_data *ed,
> gem_context_set_param(fd, param);
> }
>
> +static const char *class_names[] = {
> + [I915_ENGINE_CLASS_RENDER] = "rcs",
> + [I915_ENGINE_CLASS_COPY] = "bcs",
> + [I915_ENGINE_CLASS_VIDEO] = "vcs",
> + [I915_ENGINE_CLASS_VIDEO_ENHANCE] = "vecs",
> +};
> +
> static void init_engine(struct intel_execution_engine2 *e2,
> int class, int instance, uint64_t flags)
> {
> - const struct intel_execution_engine2 *__e2;
> - static const char *unknown_name = "unknown",
> - *virtual_name = "virtual";
> + int ret;
>
> e2->class = class;
> e2->instance = instance;
> - e2->flags = flags;
>
> /* engine is a virtual engine */
> if (class == I915_ENGINE_CLASS_INVALID &&
> instance == I915_ENGINE_CLASS_INVALID_VIRTUAL) {
> - e2->name = virtual_name;
> + strcpy(e2->name, "virtual");
> e2->is_virtual = true;
> return;
> + } else {
> + e2->is_virtual = false;
> }
>
> - __for_each_static_engine(__e2)
> - if (__e2->class == class && __e2->instance == instance)
> - break;
> -
> - if (__e2->name) {
> - e2->name = __e2->name;
> + if (class < ARRAY_SIZE(class_names)) {
> + e2->flags = flags;
> + ret = snprintf(e2->name, sizeof(e2->name), "%s%u",
> + class_names[class], instance);
> } else {
> igt_warn("found unknown engine (%d, %d)\n", class, instance);
> - e2->name = unknown_name;
> e2->flags = -1;
> + ret = snprintf(e2->name, sizeof(e2->name), "%u-%u",
> + class, instance);
> }
>
> - /* just to remark it */
> - e2->is_virtual = false;
> + igt_assert(ret < sizeof(e2->name));
> }
>
> static void query_engine_list(int fd, struct intel_engine_data *ed)
> @@ -223,7 +227,7 @@ struct intel_engine_data intel_init_engine_list(int fd, uint32_t ctx_id)
> struct intel_execution_engine2 *__e2 =
> &engine_data.engines[engine_data.nengines];
>
> - __e2->name = e2->name;
> + strcpy(__e2->name, e2->name);
> __e2->instance = e2->instance;
> __e2->class = e2->class;
> __e2->flags = e2->flags;
> @@ -297,12 +301,11 @@ struct intel_execution_engine2 gem_eb_flags_to_engine(unsigned int flags)
> .class = -1,
> .instance = -1,
> .flags = -1,
> - .name = "invalid"
> };
>
> if (ring == I915_EXEC_DEFAULT) {
> e2__.flags = I915_EXEC_DEFAULT;
> - e2__.name = "default";
> + strcpy(e2__.name, "default");
> } else {
> const struct intel_execution_engine2 *e2;
>
> @@ -310,6 +313,8 @@ struct intel_execution_engine2 gem_eb_flags_to_engine(unsigned int flags)
> if (e2->flags == ring)
> return *e2;
> }
> +
> + strcpy(e2__.name, "invalid");
> }
>
> return e2__;
> diff --git a/lib/igt_gt.h b/lib/igt_gt.h
> index 66088d39176a..6a8eceb68817 100644
> --- a/lib/igt_gt.h
> +++ b/lib/igt_gt.h
> @@ -95,7 +95,7 @@ bool gem_can_store_dword(int fd, unsigned int engine);
> bool gem_class_can_store_dword(int fd, int class);
>
> extern const struct intel_execution_engine2 {
> - const char *name;
> + char name[16];
I forgot that with this approach I'd need to apply default names
somewhere during IGT framework startup. :I As I forgot Petri you already
had a patch which solves the overall problem. Will re-read your
solution. Where did it get stuck btw?
Regards,
Tvrtko
> int class;
> int instance;
> uint64_t flags;
>
More information about the igt-dev
mailing list