[igt-dev] [PATCH] [PATCH i-g-t][V3]tests/i915/gem_exec_nop:-Fixed Crash issue seen on few platform

Arjun Melkaveri arjun.melkaveri at intel.com
Mon Mar 30 13:50:39 UTC 2020


Crash issue was seen w.r.t engines on different platforms.
Fixed this by initializing engine and engine name with
maximum supported engines value.

V2:

Made changes for other tests using engine array.

V3:
Replaced GEM_MAX_ENGINES with EXECBUF_MAX_ENGINES.

Reviewed-by: Antonio Argenziano <antonio.argenziano at intel.com>
Signed-off-by: Arjun Melkaveri <arjun.melkaveri at intel.com>
---
 tests/i915/gem_exec_nop.c | 18 ++++++++++--------
 1 file changed, 10 insertions(+), 8 deletions(-)

diff --git a/tests/i915/gem_exec_nop.c b/tests/i915/gem_exec_nop.c
index 6da6234f..21aba98a 100644
--- a/tests/i915/gem_exec_nop.c
+++ b/tests/i915/gem_exec_nop.c
@@ -55,6 +55,7 @@
 
 #define MAX_PRIO LOCAL_I915_CONTEXT_MAX_USER_PRIORITY
 #define MIN_PRIO LOCAL_I915_CONTEXT_MIN_USER_PRIORITY
+#define EXECBUF_MAX_ENGINES (I915_EXEC_RING_MASK + 1)
 
 #define FORKED 1
 #define CHAINED 2
@@ -225,7 +226,7 @@ static void poll_sequential(int fd, const char *name, int timeout)
 	struct drm_i915_gem_exec_object2 obj[2];
 	struct drm_i915_gem_relocation_entry reloc[4], *r;
 	uint32_t *bbe[2], *state, *batch;
-	unsigned engines[16], nengine, flags;
+	unsigned int engines[EXECBUF_MAX_ENGINES], nengine, flags;
 	struct timespec tv = {};
 	unsigned long cycles;
 	uint64_t elapsed;
@@ -435,14 +436,15 @@ static void parallel(int fd, uint32_t handle, int timeout)
 	const struct intel_execution_engine2 *e;
 	struct drm_i915_gem_execbuffer2 execbuf;
 	struct drm_i915_gem_exec_object2 obj;
-	unsigned engines[16];
-	char *names[16];
+	unsigned int engines[EXECBUF_MAX_ENGINES];
+	char *names[EXECBUF_MAX_ENGINES];
 	unsigned nengine;
 	unsigned long count;
 	double time, sum;
 
 	sum = 0;
 	nengine = 0;
+
 	__for_each_physical_engine(fd, e) {
 		engines[nengine] = e->flags;
 		names[nengine++] = strdup(e->name);
@@ -497,8 +499,8 @@ static void independent(int fd, uint32_t handle, int timeout)
 	const struct intel_execution_engine2 *e;
 	struct drm_i915_gem_execbuffer2 execbuf;
 	struct drm_i915_gem_exec_object2 obj;
-	unsigned engines[16];
-	char *names[16];
+	unsigned int engines[EXECBUF_MAX_ENGINES];
+	char *names[EXECBUF_MAX_ENGINES];
 	unsigned nengine;
 	unsigned long count;
 	double time, sum;
@@ -621,7 +623,7 @@ static void series(int fd, uint32_t handle, int timeout)
 	struct drm_i915_gem_execbuffer2 execbuf;
 	struct drm_i915_gem_exec_object2 obj;
 	struct timespec start, now, sync;
-	unsigned engines[16];
+	unsigned int engines[EXECBUF_MAX_ENGINES];
 	unsigned nengine;
 	unsigned long count;
 	double time, max = 0, min = HUGE_VAL, sum = 0;
@@ -711,7 +713,7 @@ static void sequential(int fd, uint32_t handle, unsigned flags, int timeout)
 	const struct intel_execution_engine2 *e;
 	struct drm_i915_gem_execbuffer2 execbuf;
 	struct drm_i915_gem_exec_object2 obj[2];
-	unsigned engines[16];
+	unsigned int engines[EXECBUF_MAX_ENGINES];
 	unsigned nengine;
 	double *results;
 	double time, sum;
@@ -847,7 +849,7 @@ static void fence_signal(int fd, uint32_t handle,
 	struct drm_i915_gem_exec_object2 obj;
 	struct intel_execution_engine2 *__e;
 	struct timespec start, now;
-	unsigned engines[16];
+	unsigned  int engines[EXECBUF_MAX_ENGINES];
 	unsigned nengine;
 	int *fences, n;
 	unsigned long count, signal;
-- 
2.25.1



More information about the igt-dev mailing list