[igt-dev] [PATCH i-g-t 1/3] lib/i915: Return actual submission method from gem_submission_method

John Harrison john.c.harrison at intel.com
Thu Oct 28 23:55:32 UTC 2021


On 10/27/2021 21:40, Ashutosh Dixit wrote:
> gem_submission_method() purports to return the currently used submission
> method by the kernel, as evidenced by its callers. Therefore remove the
> GEM_SUBMISSION_EXECLISTS flag when GuC submission is detected.
>
> This also fixes gem_has_execlists() to match its description, previously
> gem_has_execlists() would return true even if GuC submission was actually
> being used in the driver.
>
> v2: Or gem_has_execlists call-sites with gem_has_guc_submission to make the
>      new code equivalent to the previous code.
> v3: Clarify that submission method is either guc (0x4), execlists (0x2) or
>      legacy without semaphores (0x0) or legacy with semaphores (0x1)
What about GuC with semaphores vs GuC without semaphores? Likewise execlist.

>
> Reported-by: John Harrison <john.c.harrison at intel.com>
> Cc: Tvrtko Ursulin <tvrtko.ursulin at linux.intel.com>
> Signed-off-by: Ashutosh Dixit <ashutosh.dixit at intel.com>
> ---
>   lib/i915/gem_submission.c   | 10 +++++-----
>   tests/i915/gem_ctx_shared.c |  2 +-
>   tests/i915/gem_watchdog.c   |  2 +-
>   3 files changed, 7 insertions(+), 7 deletions(-)
>
> diff --git a/lib/i915/gem_submission.c b/lib/i915/gem_submission.c
> index 2627b802cfb..6fe7112d958 100644
> --- a/lib/i915/gem_submission.c
> +++ b/lib/i915/gem_submission.c
> @@ -77,7 +77,7 @@ static bool has_semaphores(int fd, int dir)
>   unsigned gem_submission_method(int fd)
>   {
>   	const int gen = intel_gen(intel_get_drm_devid(fd));
> -	unsigned flags = 0;
> +	unsigned method = 0;
>   
>   	int dir;
>   
> @@ -86,21 +86,21 @@ unsigned gem_submission_method(int fd)
>   		return 0;
>   
>   	if (igt_sysfs_get_u32(dir, "enable_guc") & 1) {
> -		flags |= GEM_SUBMISSION_GUC | GEM_SUBMISSION_EXECLISTS;
> +		method = GEM_SUBMISSION_GUC;
>   		goto out;
>   	}
>   
>   	if (gen >= 8) {
> -		flags |= GEM_SUBMISSION_EXECLISTS;
> +		method = GEM_SUBMISSION_EXECLISTS;
>   		goto out;
>   	}
>   
>   	if (has_semaphores(fd, dir))
> -		flags |= GEM_SUBMISSION_SEMAPHORES;
> +		method = GEM_SUBMISSION_SEMAPHORES;
Semaphores is not a submission method. They are a submission feature 
whose support or lack there of is independent of the submission method.

>   
>   out:
>   	close(dir);
> -	return flags;
> +	return method;
>   }
>   
>   /**
> diff --git a/tests/i915/gem_ctx_shared.c b/tests/i915/gem_ctx_shared.c
> index ea1b5dd1b8c..f50ef13263f 100644
> --- a/tests/i915/gem_ctx_shared.c
> +++ b/tests/i915/gem_ctx_shared.c
> @@ -159,7 +159,7 @@ static void disjoint_timelines(int i915, const intel_ctx_cfg_t *cfg)
>   	uint32_t plug;
>   	uint64_t ahnd;
>   
> -	igt_require(gem_has_execlists(i915));
> +	igt_require(gem_has_execlists(i915) || gem_has_guc_submission(i915));
Maybe 'require(submission_type() > SUBMISSION_RING)'? There will be 
likely other submission methods in the future.

But isn't this one really looking for semaphores, anyway? Or am I 
thinking of something else?

John.

>   
>   	/*
>   	 * Each context, although they share a vm, are expected to be
> diff --git a/tests/i915/gem_watchdog.c b/tests/i915/gem_watchdog.c
> index db562335a2a..21c7710a806 100644
> --- a/tests/i915/gem_watchdog.c
> +++ b/tests/i915/gem_watchdog.c
> @@ -222,7 +222,7 @@ static void virtual(int i915, const intel_ctx_cfg_t *base_cfg)
>   	const intel_ctx_t *ctx[num_engines];
>   	uint64_t ahnd;
>   
> -	igt_require(gem_has_execlists(i915));
> +	igt_require(gem_has_execlists(i915) || gem_has_guc_submission(i915));
>   
>   	igt_debug("%u virtual engines\n", num_engines);
>   	igt_require(num_engines);



More information about the igt-dev mailing list