summaryrefslogtreecommitdiff
path: root/lib/ioctl_wrappers.c
diff options
context:
space:
mode:
authorMichał Winiarski <michal.winiarski@intel.com>2015-06-30 17:01:10 +0200
committerChris Wilson <chris@chris-wilson.co.uk>2017-03-08 21:57:09 +0000
commit7b46ae1ba16082669dc7947b290e327a86b68afa (patch)
tree93a1e4f1c23fc91baf1a40eaba46e0c0ca179b18 /lib/ioctl_wrappers.c
parentfd9f3647bb4a5ead4c2e55c3cf04bd5364486c6a (diff)
tests/gem_userptr_blits: subtests for MAP_FIXED mappings of regular BO
When the memory backing the userptr object is released by the user, but the BO itself is not closed, it's possible to trigger recursive deadlock caused by operations done on different BO mapped in that region. Testcases are simulating such behaviour by using MAP_FIXED mmap flag. Signed-off-by: Michał Winiarski <michal.winiarski@intel.com> Cc: Chris Wilson <chris@chris-wilson.co.uk> Cc: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
Diffstat (limited to 'lib/ioctl_wrappers.c')
-rw-r--r--lib/ioctl_wrappers.c33
1 files changed, 21 insertions, 12 deletions
diff --git a/lib/ioctl_wrappers.c b/lib/ioctl_wrappers.c
index 32cb0f36..4d30443f 100644
--- a/lib/ioctl_wrappers.c
+++ b/lib/ioctl_wrappers.c
@@ -403,29 +403,38 @@ void gem_read(int fd, uint32_t handle, uint64_t offset, void *buf, uint64_t leng
igt_assert_eq(__gem_read(fd, handle, offset, buf, length), 0);
}
+int __gem_set_domain(int fd, uint32_t handle, uint32_t read, uint32_t write)
+{
+ struct drm_i915_gem_set_domain set_domain;
+ int err;
+
+ memset(&set_domain, 0, sizeof(set_domain));
+ set_domain.handle = handle;
+ set_domain.read_domains = read;
+ set_domain.write_domain = write;
+
+ err = 0;
+ if (igt_ioctl(fd, DRM_IOCTL_I915_GEM_SET_DOMAIN, &set_domain))
+ err = -errno;
+
+ return err;
+}
+
/**
* gem_set_domain:
* @fd: open i915 drm file descriptor
* @handle: gem buffer object handle
- * @read_domains: gem domain bits for read access
- * @write_domain: gem domain bit for write access
+ * @read: gem domain bits for read access
+ * @write: gem domain bit for write access
*
* This wraps the SET_DOMAIN ioctl, which is used to control the coherency of
* the gem buffer object between the cpu and gtt mappings. It is also use to
* synchronize with outstanding rendering in general, but for that use-case
* please have a look at gem_sync().
*/
-void gem_set_domain(int fd, uint32_t handle,
- uint32_t read_domains, uint32_t write_domain)
+void gem_set_domain(int fd, uint32_t handle, uint32_t read, uint32_t write)
{
- struct drm_i915_gem_set_domain set_domain;
-
- memset(&set_domain, 0, sizeof(set_domain));
- set_domain.handle = handle;
- set_domain.read_domains = read_domains;
- set_domain.write_domain = write_domain;
-
- do_ioctl(fd, DRM_IOCTL_I915_GEM_SET_DOMAIN, &set_domain);
+ igt_assert_eq(__gem_set_domain(fd, handle, read, write), 0);
}
/**