diff options
author | Chris Wilson <chris@chris-wilson.co.uk> | 2016-03-04 20:38:16 +0000 |
---|---|---|
committer | Chris Wilson <chris@chris-wilson.co.uk> | 2016-03-08 09:57:33 +0000 |
commit | 9ba9af2ea4306796cbb72c76bc0de05a0fb14c6b (patch) | |
tree | 564fc5ab2cd3287c0327aa88e4053e0e2346fa09 /lib | |
parent | 0501dcfd0fd93709366db43d37c0aba09aab81b4 (diff) |
lib: Skip execution in gem_has_ring()
By looking for a particular error we can avoid actually executing
anything when testing whether the kernel supports an individual ring.
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Diffstat (limited to 'lib')
-rw-r--r-- | lib/ioctl_wrappers.c | 12 |
1 files changed, 2 insertions, 10 deletions
diff --git a/lib/ioctl_wrappers.c b/lib/ioctl_wrappers.c index 5d497293..ffeb44cb 100644 --- a/lib/ioctl_wrappers.c +++ b/lib/ioctl_wrappers.c @@ -541,6 +541,7 @@ int __gem_execbuf(int fd, struct drm_i915_gem_execbuffer2 *execbuf) int err = 0; if (drmIoctl(fd, DRM_IOCTL_I915_GEM_EXECBUFFER2, execbuf)) err = -errno; + errno = 0; return err; } @@ -555,7 +556,6 @@ int __gem_execbuf(int fd, struct drm_i915_gem_execbuffer2 *execbuf) void gem_execbuf(int fd, struct drm_i915_gem_execbuffer2 *execbuf) { igt_assert_eq(__gem_execbuf(fd, execbuf), 0); - errno = 0; } /** @@ -1398,23 +1398,15 @@ void gem_require_caching(int fd) static int gem_has_ring(int fd, int ring) { - uint32_t bbe = MI_BATCH_BUFFER_END; struct drm_i915_gem_execbuffer2 execbuf; struct drm_i915_gem_exec_object2 exec; - int ret; memset(&exec, 0, sizeof(exec)); - exec.handle = gem_create(fd, 4096); - gem_write(fd, exec.handle, 0, &bbe, sizeof(bbe)); - memset(&execbuf, 0, sizeof(execbuf)); execbuf.buffers_ptr = (uintptr_t)&exec; execbuf.buffer_count = 1; execbuf.flags = ring; - ret = __gem_execbuf(fd, &execbuf); - gem_close(fd, exec.handle); - - return ret == 0; + return __gem_execbuf(fd, &execbuf) == -ENOENT; } /** |