diff options
author | Chris Wilson <chris@chris-wilson.co.uk> | 2020-01-20 17:29:59 +0000 |
---|---|---|
committer | Chris Wilson <chris@chris-wilson.co.uk> | 2020-01-20 20:39:59 +0000 |
commit | 87e37b96bbf0966afada24362cd32915d3d2d162 (patch) | |
tree | 3985409cbb16f3f3845aea4790ce6dd51b82deaa /tests/i915/gem_exec_fence.c | |
parent | 83c32e859202e43ff6a8cca162c76fcd90ad6e3b (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.c | 20 |
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); |