[PATCH 5/7] prime_mmap: Test for userptr mmap
Tiago Vignatti
tiago.vignatti at intel.com
Wed Aug 12 16:29:18 PDT 2015
A userptr doesn't have the obj->base.filp, but can be exported via dma-buf, so
make sure it fails when mmaping.
Signed-off-by: Tiago Vignatti <tiago.vignatti at intel.com>
---
In machine, export the handle to fd is actually returning error and falling
before the actual test happens. Same issue happens in gem_userptr_blits's
test_dmabuf(). This patch needs to be tested properly therefore.
tests/prime_mmap.c | 38 +++++++++++++++++++++++++++++++++++++-
1 file changed, 37 insertions(+), 1 deletion(-)
diff --git a/tests/prime_mmap.c b/tests/prime_mmap.c
index ad91371..fd6d13b 100644
--- a/tests/prime_mmap.c
+++ b/tests/prime_mmap.c
@@ -299,12 +299,47 @@ static int prime_handle_to_fd_no_assert(uint32_t handle, int *fd_out)
args.fd = -1;
ret = drmIoctl(fd, DRM_IOCTL_PRIME_HANDLE_TO_FD, &args);
-
+ if (ret)
+ ret = errno;
*fd_out = args.fd;
return ret;
}
+/* test for mmap(dma_buf_export(userptr)) */
+static void
+test_userptr(void)
+{
+ int ret, dma_buf_fd;
+ void *ptr;
+ uint32_t handle;
+
+ /* create userptr bo */
+ ret = posix_memalign(&ptr, 4096, BO_SIZE);
+ igt_assert_eq(ret, 0);
+
+ ret = gem_userptr(fd, (uint32_t *)ptr, BO_SIZE, 0, LOCAL_I915_USERPTR_UNSYNCHRONIZED, &handle);
+ igt_assert_eq(ret, 0);
+
+ /* export userptr */
+ ret = prime_handle_to_fd_no_assert(handle, &dma_buf_fd);
+ if (ret) {
+ igt_assert(ret == EINVAL || ret == ENODEV);
+ goto free_userptr;
+ } else {
+ igt_assert_eq(ret, 0);
+ igt_assert_lte(0, dma_buf_fd);
+ }
+
+ /* a userptr doesn't have the obj->base.filp, but can be exported via
+ * dma-buf, so make sure it fails here */
+ ptr = mmap(NULL, BO_SIZE, PROT_READ, MAP_SHARED, dma_buf_fd, 0);
+ igt_assert(ptr == MAP_FAILED && errno == ENODEV);
+free_userptr:
+ gem_close(fd, handle);
+ close(dma_buf_fd);
+}
+
static void
test_errors(void)
{
@@ -413,6 +448,7 @@ igt_main
{ "test_forked_cpu_write", test_forked_cpu_write },
{ "test_refcounting", test_refcounting },
{ "test_dup", test_dup },
+ { "test_userptr", test_userptr },
{ "test_errors", test_errors },
{ "test_aperture_limit", test_aperture_limit },
};
--
2.1.0
More information about the dri-devel
mailing list