summaryrefslogtreecommitdiff
path: root/lib/sw_sync.c
diff options
context:
space:
mode:
authorChris Wilson <chris@chris-wilson.co.uk>2017-01-03 14:57:25 +0000
committerChris Wilson <chris@chris-wilson.co.uk>2017-01-04 11:43:41 +0000
commita3f0d75d19aa252d3896af4763d6a9a5172f8814 (patch)
tree7a99b5ae1ed68e9d813bae33aa6ed61a867c2b73 /lib/sw_sync.c
parent31811f4b6c5a95de82e47ddf1f37739c3b2cfc58 (diff)
igt/gem_exec_fence: Check sync_file->status after the fence is signaled
After the fence is signaled, the status feed reports whether or not the request completed successfully. We set this to -EIO if a hang was detected. Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Diffstat (limited to 'lib/sw_sync.c')
-rw-r--r--lib/sw_sync.c17
1 files changed, 17 insertions, 0 deletions
diff --git a/lib/sw_sync.c b/lib/sw_sync.c
index 04585261..9dc6ec85 100644
--- a/lib/sw_sync.c
+++ b/lib/sw_sync.c
@@ -231,6 +231,23 @@ int sync_fence_count_status(int fd, int status)
return count;
}
+int sync_fence_status(int fence)
+{
+ struct local_sync_fence_info fence_info;
+ struct local_sync_file_info file_info = {
+ .sync_fence_info = to_user_pointer(&fence_info),
+ .num_fences = 1,
+ };
+
+ if (ioctl(fence, LOCAL_SYNC_IOC_FILE_INFO, &file_info))
+ return -errno;
+
+ if (file_info.num_fences != 1)
+ return -EINVAL;
+
+ return fence_info.status;
+}
+
static bool kernel_has_sw_sync(void)
{
char buf[128];