summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorChris Wilson <chris@chris-wilson.co.uk>2016-03-04 20:38:16 +0000
committerChris Wilson <chris@chris-wilson.co.uk>2016-03-08 09:57:33 +0000
commit9ba9af2ea4306796cbb72c76bc0de05a0fb14c6b (patch)
tree564fc5ab2cd3287c0327aa88e4053e0e2346fa09 /lib
parent0501dcfd0fd93709366db43d37c0aba09aab81b4 (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.c12
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;
}
/**