On 14/05/2018 09:02, Chris Wilson wrote:
If we trigger "too many" resets, the context and even the file, will be
banend and subsequent execbufs should fail with -EIO.

banned


Signed-off-by: Chris Wilson <ch...@chris-wilson.co.uk>
---
  tests/gem_eio.c | 49 +++++++++++++++++++++++++++++++++++++++++++++++++
  1 file changed, 49 insertions(+)

diff --git a/tests/gem_eio.c b/tests/gem_eio.c
index 6455c6acd..4720b47b5 100644
--- a/tests/gem_eio.c
+++ b/tests/gem_eio.c
@@ -250,6 +250,52 @@ static int __check_wait(int fd, uint32_t bo, unsigned int 
wait)
        return ret;
  }
+static void __test_banned(int fd)
+{
+       struct drm_i915_gem_exec_object2 obj = {
+               .handle = gem_create(fd, 4096),
+       };
+       struct drm_i915_gem_execbuffer2 execbuf = {
+               .buffers_ptr = to_user_pointer(&obj),
+               .buffer_count = 1,
+       };
+       const uint32_t bbe = MI_BATCH_BUFFER_END;
+       unsigned long count = 0;
+
+       gem_write(fd, obj.handle, 0, &bbe, sizeof(bbe));
+
+       gem_quiescent_gpu(fd);
+       igt_require(i915_reset_control(true));
+
+       igt_until_timeout(5) {
+               igt_spin_t *hang;
+
+               if (__gem_execbuf(fd, &execbuf) == -EIO) {
+                       igt_info("Banned after causing %lu hangs\n", count);
+                       igt_assert(count > 1);
+                       return;
+               }
+
+               /* Trigger a reset, making sure we are detected as guilty */
+               hang = spin_sync(fd, 0, 0);
+               trigger_reset(fd);
+               igt_spin_batch_free(fd, hang);
+
+               count++;
+       }
+
+       igt_assert_f(false,
+                    "Ran for 5s, %lu hangs without being banned\n",
+                    count);
+}
+
+static void test_banned(int fd)
+{
+       fd = gem_reopen_driver(fd);
+       __test_banned(fd);
+       close(fd);
+}
+
  #define TEST_WEDGE (1)
static void test_wait(int fd, unsigned int flags, unsigned int wait)
@@ -693,6 +739,9 @@ igt_main
        igt_subtest("execbuf")
                test_execbuf(fd);
+ igt_subtest("banned")
+               test_banned(fd);
+
        igt_subtest("suspend")
                test_suspend(fd, SUSPEND_STATE_MEM);

Reviewed-by: Tvrtko Ursulin <tvrtko.ursu...@intel.com>

Regards,

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

Reply via email to