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

Ashutosh Dixit ashutosh.dixit at intel.com
Thu Oct 28 04:40:55 UTC 2021


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)

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;
 
 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));
 
 	/*
 	 * 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);
-- 
2.33.0



More information about the igt-dev mailing list