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

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



From: Tvrtko Ursulin <tvrtko.ursulin@xxxxxxxxx>

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@xxxxxxxxx>
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

_______________________________________________
Intel-gfx mailing list
Intel-gfx@xxxxxxxxxxxxxxxxxxxxx
https://lists.freedesktop.org/mailman/listinfo/intel-gfx




[Index of Archives]     [AMD Graphics]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux