mirror of
https://github.com/tiagovignatti/intel-gpu-tools.git
synced 2025-06-10 09:26:10 +00:00
lib: Move gem_wait() to ioctl-wrappers
We intend to use gem_wait() in more tests than gem_wait.c, so move the simple ioctl wrapper into the core. Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
This commit is contained in:
parent
babcf40f29
commit
f27d295fe3
@ -369,6 +369,36 @@ void gem_set_domain(int fd, uint32_t handle,
|
||||
do_ioctl(fd, DRM_IOCTL_I915_GEM_SET_DOMAIN, &set_domain);
|
||||
}
|
||||
|
||||
/**
|
||||
* __gem_wait:
|
||||
* @fd: open i915 drm file descriptor
|
||||
* @handle: gem buffer object handle
|
||||
* @timeout_ns: [in] time to wait, [out] remaining time (in nanoseconds)
|
||||
*
|
||||
* This functions waits for outstanding rendering to complete, upto
|
||||
* the timeout_ns. If no timeout_ns is provided, the wait is indefinite and
|
||||
* only returns upon an error or when the rendering is complete.
|
||||
*/
|
||||
int gem_wait(int fd, uint32_t handle, int64_t *timeout_ns)
|
||||
{
|
||||
struct drm_i915_gem_wait wait;
|
||||
int ret;
|
||||
|
||||
memset(&wait, 0, sizeof(wait));
|
||||
wait.bo_handle = handle;
|
||||
wait.timeout_ns = timeout_ns ? *timeout_ns : -1;
|
||||
wait.flags = 0;
|
||||
|
||||
ret = 0;
|
||||
if (drmIoctl(fd, DRM_IOCTL_I915_GEM_WAIT, &wait))
|
||||
ret = -errno;
|
||||
|
||||
if (timeout_ns)
|
||||
*timeout_ns = wait.timeout_ns;
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
* gem_sync:
|
||||
* @fd: open i915 drm file descriptor
|
||||
@ -378,20 +408,14 @@ void gem_set_domain(int fd, uint32_t handle,
|
||||
*/
|
||||
void gem_sync(int fd, uint32_t handle)
|
||||
{
|
||||
struct drm_i915_gem_wait wait;
|
||||
|
||||
memset(&wait, 0, sizeof(wait));
|
||||
wait.bo_handle = handle;
|
||||
wait.timeout_ns =-1;
|
||||
if (drmIoctl(fd, DRM_IOCTL_I915_GEM_WAIT, &wait) == 0) {
|
||||
errno = 0;
|
||||
return;
|
||||
}
|
||||
|
||||
gem_set_domain(fd, handle,
|
||||
I915_GEM_DOMAIN_GTT, I915_GEM_DOMAIN_GTT);
|
||||
if (gem_wait(fd, handle, NULL))
|
||||
gem_set_domain(fd, handle,
|
||||
I915_GEM_DOMAIN_GTT,
|
||||
I915_GEM_DOMAIN_GTT);
|
||||
errno = 0;
|
||||
}
|
||||
|
||||
|
||||
bool gem_create__has_stolen_support(int fd)
|
||||
{
|
||||
static int has_stolen_support = -1;
|
||||
|
@ -55,6 +55,7 @@ void gem_write(int fd, uint32_t handle, uint64_t offset, const void *buf, uint6
|
||||
void gem_read(int fd, uint32_t handle, uint64_t offset, void *buf, uint64_t length);
|
||||
void gem_set_domain(int fd, uint32_t handle,
|
||||
uint32_t read_domains, uint32_t write_domain);
|
||||
int gem_wait(int fd, uint32_t handle, int64_t *timeout_ns);
|
||||
void gem_sync(int fd, uint32_t handle);
|
||||
bool gem_create__has_stolen_support(int fd);
|
||||
uint32_t __gem_create_stolen(int fd, uint64_t size);
|
||||
|
@ -64,23 +64,6 @@ do_time_diff(struct timespec *end, struct timespec *start)
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int
|
||||
gem_bo_wait_timeout(int fd, uint32_t handle, int64_t *timeout_ns)
|
||||
{
|
||||
struct drm_i915_gem_wait wait;
|
||||
int ret;
|
||||
|
||||
igt_assert(timeout_ns);
|
||||
|
||||
wait.bo_handle = handle;
|
||||
wait.timeout_ns = *timeout_ns;
|
||||
wait.flags = 0;
|
||||
ret = drmIoctl(fd, DRM_IOCTL_I915_GEM_WAIT, &wait);
|
||||
*timeout_ns = wait.timeout_ns;
|
||||
|
||||
return ret ? -errno : 0;
|
||||
}
|
||||
|
||||
static void blt_color_fill(struct intel_batchbuffer *batch,
|
||||
drm_intel_bo *buf,
|
||||
const unsigned int pages)
|
||||
@ -122,7 +105,7 @@ static void render_timeout(int fd)
|
||||
dst = drm_intel_bo_alloc(bufmgr, "dst", BUF_SIZE, 4096);
|
||||
dst2 = drm_intel_bo_alloc(bufmgr, "dst2", BUF_SIZE, 4096);
|
||||
|
||||
igt_skip_on_f(gem_bo_wait_timeout(fd, dst->handle, &timeout) == -EINVAL,
|
||||
igt_skip_on_f(gem_wait(fd, dst->handle, &timeout) == -EINVAL,
|
||||
"kernel doesn't support wait_timeout, skipping test\n");
|
||||
timeout = ENOUGH_WORK_IN_SECONDS * NSEC_PER_SEC;
|
||||
|
||||
@ -169,7 +152,7 @@ static void render_timeout(int fd)
|
||||
intel_batchbuffer_flush(batch);
|
||||
igt_assert(gem_bo_busy(fd, dst2->handle) == true);
|
||||
|
||||
igt_assert_eq(gem_bo_wait_timeout(fd, dst2->handle, &timeout), 0);
|
||||
igt_assert_eq(gem_wait(fd, dst2->handle, &timeout), 0);
|
||||
igt_assert(gem_bo_busy(fd, dst2->handle) == false);
|
||||
igt_assert_neq(timeout, 0);
|
||||
if (timeout == (ENOUGH_WORK_IN_SECONDS * NSEC_PER_SEC))
|
||||
@ -179,7 +162,7 @@ static void render_timeout(int fd)
|
||||
|
||||
/* check that polling with timeout=0 works. */
|
||||
timeout = 0;
|
||||
igt_assert_eq(gem_bo_wait_timeout(fd, dst2->handle, &timeout), 0);
|
||||
igt_assert_eq(gem_wait(fd, dst2->handle, &timeout), 0);
|
||||
igt_assert_eq(timeout, 0);
|
||||
|
||||
/* Now check that we correctly time out, twice the auto-tune load should
|
||||
@ -190,14 +173,14 @@ static void render_timeout(int fd)
|
||||
|
||||
intel_batchbuffer_flush(batch);
|
||||
|
||||
ret = gem_bo_wait_timeout(fd, dst2->handle, &timeout);
|
||||
ret = gem_wait(fd, dst2->handle, &timeout);
|
||||
igt_assert_eq(ret, -ETIME);
|
||||
igt_assert_eq(timeout, 0);
|
||||
igt_assert(gem_bo_busy(fd, dst2->handle) == true);
|
||||
|
||||
/* check that polling with timeout=0 works. */
|
||||
timeout = 0;
|
||||
igt_assert_eq(gem_bo_wait_timeout(fd, dst2->handle, &timeout), -ETIME);
|
||||
igt_assert_eq(gem_wait(fd, dst2->handle, &timeout), -ETIME);
|
||||
igt_assert_eq(timeout, 0);
|
||||
|
||||
|
||||
@ -208,7 +191,7 @@ static void render_timeout(int fd)
|
||||
|
||||
intel_batchbuffer_flush(batch);
|
||||
|
||||
igt_assert_eq(gem_bo_wait_timeout(fd, dst2->handle, &negative_timeout), 0);
|
||||
igt_assert_eq(gem_wait(fd, dst2->handle, &negative_timeout), 0);
|
||||
igt_assert_eq(negative_timeout, -1); /* infinity always remains */
|
||||
igt_assert(gem_bo_busy(fd, dst2->handle) == false);
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user