diff options
author | Tvrtko Ursulin <tvrtko.ursulin@intel.com> | 2018-09-07 10:01:29 +0100 |
---|---|---|
committer | Tvrtko Ursulin <tvrtko.ursulin@intel.com> | 2018-09-18 12:58:43 +0100 |
commit | 8631b5187924c1fdf36156c16bc4e17177e0a043 (patch) | |
tree | 2c0593b2798bc6173cb4bed855f911bf4c046126 /tests/gem_ctx_exec.c | |
parent | 03b90a39ed12a568c9da752466ea708d6348e110 (diff) |
tests/gem_ctx_bad_exec: Consolidate to gem_ctx_exec
Move a really small test that invalid context is rejected under the
gem_ctx_exec umbrella.
v2:
* And actually fix the test so it does what it claims. And add more
variety in the invalid context id's it tests with. (Chris Wilson)
v3:
* Rename the test as basic.
* Limit to 32-bit. (Chris Wilson)
* Add previously valid but closed context id to the test. (Chris Wilson)
v4:
* Add more invalid values. (Chris Wilson)
Signed-off-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
Reviewed-by: Chris Wilson <chris@chris-wilson.co.uk>
Diffstat (limited to 'tests/gem_ctx_exec.c')
-rw-r--r-- | tests/gem_ctx_exec.c | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/tests/gem_ctx_exec.c b/tests/gem_ctx_exec.c index 1f8ed64d..f02a88b1 100644 --- a/tests/gem_ctx_exec.c +++ b/tests/gem_ctx_exec.c @@ -30,6 +30,7 @@ */ #include "igt.h" +#include <limits.h> #include <unistd.h> #include <stdlib.h> #include <stdint.h> @@ -142,6 +143,42 @@ static void big_exec(int fd, uint32_t handle, int ring) gem_sync(fd, handle); } +static void invalid_context(int fd, unsigned ring, uint32_t handle) +{ + struct drm_i915_gem_exec_object2 obj = { + .handle = handle, + }; + struct drm_i915_gem_execbuffer2 execbuf = { + .buffers_ptr = to_user_pointer(&obj), + .buffer_count = 1, + .flags = ring, + }; + unsigned int i; + uint32_t ctx; + + /* Verify everything works. */ + i915_execbuffer2_set_context_id(execbuf, 0); + gem_execbuf(fd, &execbuf); + + ctx = gem_context_create(fd); + i915_execbuffer2_set_context_id(execbuf, ctx); + gem_execbuf(fd, &execbuf); + + gem_context_destroy(fd, ctx); + + /* Go through the non-existent context id's. */ + for (i = 0; i < 32; i++) { + i915_execbuffer2_set_context_id(execbuf, 1UL << i); + igt_assert_eq(__gem_execbuf(fd, &execbuf), -ENOENT); + } + + i915_execbuffer2_set_context_id(execbuf, INT_MAX); + igt_assert_eq(__gem_execbuf(fd, &execbuf), -ENOENT); + + i915_execbuffer2_set_context_id(execbuf, UINT_MAX); + igt_assert_eq(__gem_execbuf(fd, &execbuf), -ENOENT); +} + uint32_t handle; uint32_t batch[2] = {0, MI_BATCH_BUFFER_END}; uint32_t ctx_id, ctx_id2; @@ -149,6 +186,8 @@ int fd; igt_main { + const struct intel_execution_engine *e; + igt_fixture { fd = drm_open_driver_render(DRIVER_INTEL); igt_require_gem(fd); @@ -174,6 +213,13 @@ igt_main gem_sync(fd, handle); } + for (e = intel_execution_engines; e->name; e++) { + igt_subtest_f("basic-invalid-context-%s", e->name) { + gem_require_ring(fd, e->exec_id | e->flags); + invalid_context(fd, e->exec_id | e->flags, handle); + } + } + igt_subtest("eviction") big_exec(fd, handle, I915_EXEC_RENDER); |