summaryrefslogtreecommitdiff
path: root/tests/i915/gem_exec_fence.c
diff options
context:
space:
mode:
authorChris Wilson <chris@chris-wilson.co.uk>2020-01-20 17:29:59 +0000
committerChris Wilson <chris@chris-wilson.co.uk>2020-01-20 20:39:59 +0000
commit87e37b96bbf0966afada24362cd32915d3d2d162 (patch)
tree3985409cbb16f3f3845aea4790ce6dd51b82deaa /tests/i915/gem_exec_fence.c
parent83c32e859202e43ff6a8cca162c76fcd90ad6e3b (diff)
i915/gem_exec_fence: Fix fence leak for gen9-cmdparser
Fixes: 9e57f8a51d59 ("lib/i915: Add query to detect if engine accepts only ro batches") References: https://gitlab.freedesktop.org/drm/intel/issues/997 Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> Cc: Mika Kuoppala <mika.kuoppala@intel.com> Reviewed-by: Mika Kuoppala <mika.kuoppala@intel.com>
Diffstat (limited to 'tests/i915/gem_exec_fence.c')
-rw-r--r--tests/i915/gem_exec_fence.c20
1 files changed, 14 insertions, 6 deletions
diff --git a/tests/i915/gem_exec_fence.c b/tests/i915/gem_exec_fence.c
index 0fc7301a..2f802eec 100644
--- a/tests/i915/gem_exec_fence.c
+++ b/tests/i915/gem_exec_fence.c
@@ -139,14 +139,17 @@ static void test_fence_busy(int fd, unsigned ring, unsigned flags)
gem_set_domain(fd, obj.handle,
I915_GEM_DOMAIN_GTT, I915_GEM_DOMAIN_GTT);
+ i = 0;
+ if ((flags & HANG) == 0)
+ batch[i++] = 0x5 << 23;
+
reloc.target_handle = obj.handle; /* recurse */
reloc.presumed_offset = 0;
- reloc.offset = sizeof(uint32_t);
+ reloc.offset = (i + 1) * sizeof(uint32_t);
reloc.delta = 0;
reloc.read_domains = I915_GEM_DOMAIN_COMMAND;
reloc.write_domain = 0;
- i = 0;
batch[i] = MI_BATCH_BUFFER_START;
if (gen >= 8) {
batch[i] |= 1 << 8 | 1;
@@ -227,14 +230,17 @@ static void test_fence_busy_all(int fd, unsigned flags)
gem_set_domain(fd, obj.handle,
I915_GEM_DOMAIN_GTT, I915_GEM_DOMAIN_GTT);
+ i = 0;
+ if ((flags & HANG) == 0)
+ batch[i++] = 0x5 << 23;
+
reloc.target_handle = obj.handle; /* recurse */
reloc.presumed_offset = 0;
- reloc.offset = sizeof(uint32_t);
+ reloc.offset = (i + 1) * sizeof(uint32_t);
reloc.delta = 0;
reloc.read_domains = I915_GEM_DOMAIN_COMMAND;
reloc.write_domain = 0;
- i = 0;
batch[i] = MI_BATCH_BUFFER_START;
if (gen >= 8) {
batch[i] |= 1 << 8 | 1;
@@ -257,8 +263,10 @@ static void test_fence_busy_all(int fd, unsigned flags)
for_each_engine(e, fd) {
int fence, new;
- if ((flags & HANG) == 0)
- igt_require(gem_engine_has_mutable_submission(fd, eb_ring(e)));
+ if ((flags & HANG) == 0 &&
+ !gem_engine_has_mutable_submission(fd, eb_ring(e)))
+ continue;
+
execbuf.flags = eb_ring(e) | I915_EXEC_FENCE_OUT;
execbuf.rsvd2 = -1;
gem_execbuf_wr(fd, &execbuf);