public inbox for igt-dev@lists.freedesktop.org
 help / color / mirror / Atom feed
From: Tvrtko Ursulin <tvrtko.ursulin@linux.intel.com>
To: igt-dev@lists.freedesktop.org
Cc: Intel-gfx@lists.freedesktop.org,
	Petri Latvala <petri.latvala@intel.com>,
	Tvrtko Ursulin <tvrtko.ursulin@intel.com>
Subject: Re: [igt-dev] [PATCH i-g-t] i915/gem_engine_topology: Generate engine names based on class
Date: Wed, 22 Jan 2020 10:15:56 +0000	[thread overview]
Message-ID: <c4d26e02-2b86-7ebd-f848-8cb36882841d@linux.intel.com> (raw)
In-Reply-To: <20200122101043.21347-1-tvrtko.ursulin@linux.intel.com>


On 22/01/2020 10:10, Tvrtko Ursulin wrote:
> From: Tvrtko Ursulin <tvrtko.ursulin@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@intel.com>
> Cc: Andi Shyti <andi.shyti@intel.com>
> Cc: Petri Latvala <petri.latvala@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;
> 
_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev

  reply	other threads:[~2020-01-22 10:15 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-01-22 10:10 [igt-dev] [PATCH i-g-t] i915/gem_engine_topology: Generate engine names based on class Tvrtko Ursulin
2020-01-22 10:15 ` Tvrtko Ursulin [this message]
2020-01-22 10:33   ` Petri Latvala
2020-01-22 14:40 ` [igt-dev] [PATCH i-g-t v2] " Tvrtko Ursulin
2020-01-22 14:46   ` Chris Wilson
2020-01-22 14:53     ` Tvrtko Ursulin
2020-01-22 15:16       ` Tvrtko Ursulin
2020-01-22 16:00 ` [igt-dev] ✗ Fi.CI.BAT: failure for i915/gem_engine_topology: Generate engine names based on class (rev2) Patchwork
2020-01-23 13:50 ` [igt-dev] ✗ GitLab.Pipeline: warning for i915/gem_engine_topology: Generate engine names based on class Patchwork
2020-01-23 13:51 ` [igt-dev] ✗ GitLab.Pipeline: warning for i915/gem_engine_topology: Generate engine names based on class (rev2) Patchwork

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=c4d26e02-2b86-7ebd-f848-8cb36882841d@linux.intel.com \
    --to=tvrtko.ursulin@linux.intel.com \
    --cc=Intel-gfx@lists.freedesktop.org \
    --cc=igt-dev@lists.freedesktop.org \
    --cc=petri.latvala@intel.com \
    --cc=tvrtko.ursulin@intel.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox