[Intel-gfx] [PATCH i-g-t 1/2] tests/gem_exec_await: Relax the busy spinner

Tvrtko Ursulin tvrtko.ursulin at linux.intel.com
Mon Nov 19 15:22:28 UTC 2018


From: Tvrtko Ursulin <tvrtko.ursulin at intel.com>

Add some nop instructions between recursive batch buffer start calls to
give system some breathing room. Without these, especially when coupled
with memory pressure, false GPU hangs can be observed caused by the
inability of the chip to cope.

Signed-off-by: Tvrtko Ursulin <tvrtko.ursulin at intel.com>
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=106680
---
 tests/i915/gem_exec_await.c | 7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)

diff --git a/tests/i915/gem_exec_await.c b/tests/i915/gem_exec_await.c
index 5cfeb8ec8bfa..3ea5b5903c6b 100644
--- a/tests/i915/gem_exec_await.c
+++ b/tests/i915/gem_exec_await.c
@@ -63,6 +63,7 @@ static void xchg_obj(void *array, unsigned i, unsigned j)
 static void wide(int fd, int ring_size, int timeout, unsigned int flags)
 {
 	const uint32_t bbe = MI_BATCH_BUFFER_END;
+	const unsigned int num_nops = 1000;
 	const int gen = intel_gen(intel_get_drm_devid(fd));
 	struct {
 		struct drm_i915_gem_exec_object2 *obj;
@@ -123,7 +124,7 @@ static void wide(int fd, int ring_size, int timeout, unsigned int flags)
 		exec[e].execbuf.buffer_count = 2;
 
 		exec[e].reloc.target_handle = 1; /* recurse */
-		exec[e].reloc.offset = sizeof(uint32_t);
+		exec[e].reloc.offset = (1 + num_nops) * sizeof(uint32_t);
 		exec[e].reloc.read_domains = I915_GEM_DOMAIN_COMMAND;
 		if (gen < 4)
 			exec[e].reloc.delta = 1;
@@ -162,7 +163,7 @@ static void wide(int fd, int ring_size, int timeout, unsigned int flags)
 			gem_set_domain(fd, exec[e].exec[1].handle,
 				       I915_GEM_DOMAIN_WC, I915_GEM_DOMAIN_WC);
 
-			i = 0;
+			i = num_nops;
 			exec[e].cmd[i] = MI_BATCH_BUFFER_START;
 			if (gen >= 8) {
 				exec[e].cmd[i] |= 1 << 8 | 1;
@@ -200,7 +201,7 @@ static void wide(int fd, int ring_size, int timeout, unsigned int flags)
 		count += nengine;
 
 		for (unsigned e = 0; e < nengine; e++)
-			exec[e].cmd[0] = MI_BATCH_BUFFER_END;
+			exec[e].cmd[num_nops] = MI_BATCH_BUFFER_END;
 		__sync_synchronize();
 	}
 
-- 
2.19.1



More information about the Intel-gfx mailing list