diff mbox

[6/6] igt/gem_mmap_wc: Add the invalid flags subtest

Message ID 1420196614-13543-7-git-send-email-akash.goel@intel.com (mailing list archive)
State New, archived
Headers show

Commit Message

akash.goel@intel.com Jan. 2, 2015, 11:03 a.m. UTC
From: Akash Goel <akash.goel@intel.com>

A new subtest added to validate the new version of gem_mmap ioctl,
for creating the wc mappings, on yet to be supported flags.

v2: Removed the flags checking for older kernels (Daniel)

Signed-off-by: Akash Goel <akash.goel@intel.com>
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
---
 tests/gem_mmap_wc.c | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 52 insertions(+)

Comments

Daniel Vetter Jan. 5, 2015, 3:08 p.m. UTC | #1
On Fri, Jan 02, 2015 at 04:33:34PM +0530, akash.goel@intel.com wrote:
> From: Akash Goel <akash.goel@intel.com>
> 
> A new subtest added to validate the new version of gem_mmap ioctl,
> for creating the wc mappings, on yet to be supported flags.
> 
> v2: Removed the flags checking for older kernels (Daniel)
> 
> Signed-off-by: Akash Goel <akash.goel@intel.com>
> Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
> ---
>  tests/gem_mmap_wc.c | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++++
>  1 file changed, 52 insertions(+)
> 
> diff --git a/tests/gem_mmap_wc.c b/tests/gem_mmap_wc.c
> index 87140ff..4881ab7 100644
> --- a/tests/gem_mmap_wc.c
> +++ b/tests/gem_mmap_wc.c
> @@ -41,6 +41,17 @@
>  #include "drmtest.h"
>  #include "igt_debugfs.h"
>  
> +struct local_i915_gem_mmap_v2 {
> +	uint32_t handle;
> +	uint32_t pad;
> +	uint64_t offset;
> +	uint64_t size;
> +	uint64_t addr_ptr;
> +	uint64_t flags;
> +#define I915_MMAP_WC 0x1
> +};
> +#define LOCAL_IOCTL_I915_GEM_MMAP_v2 DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_GEM_MMAP, struct local_i915_gem_mmap_v2)
> +
>  static int OBJECT_SIZE = 16*1024*1024;
>  
>  static void set_domain(int fd, uint32_t handle)
> @@ -76,6 +87,45 @@ create_pointer(int fd)
>  }
>  
>  static void
> +test_invalid_flags(int fd)
> +{
> +	struct drm_i915_getparam gp;
> +	struct local_i915_gem_mmap_v2 arg;
> +	uint64_t flag = I915_MMAP_WC;
> +	int val = -1;
> +
> +	memset(&arg, 0, sizeof(arg));
> +	arg.handle = gem_create(fd, 4096);
> +	arg.offset = 0;
> +	arg.size = 4096;
> +
> +	memset(&gp, 0, sizeof(gp));
> +	gp.param = 30; /* MMAP_VERSION */
> +	gp.value = &val;
> +
> +	/* Do we have the new mmap_ioctl? */
> +	do_ioctl(fd, DRM_IOCTL_I915_GETPARAM, &gp);
> +
> +	if (val >= 1) {
> +		/*
> +		 * Only MMAP_WC flag is supported in version 1, so any other
> +		 * flag should be rejected.
> +		 */
> +		flag <<= 1;
> +		while (flag) {
> +			arg.flags = flag;
> +			igt_assert(drmIoctl(fd,
> +				   LOCAL_IOCTL_I915_GEM_MMAP_v2,
> +				   &arg) == -1);
> +			igt_assert_eq(errno, EINVAL);
> +			flag <<= 1;
> +		}
> +	}
> +
> +	gem_close(fd, arg.handle);
> +}
> +
> +static void
>  test_copy(int fd)
>  {
>  	void *src, *dst;
> @@ -336,6 +386,8 @@ igt_main
>  	igt_fixture
>  		fd = drm_open_any();
>  
> +	igt_subtest("invalid flags")

subtest names shouldn't have spaces (it might confuse our tooling). We use
a dash instead. I've fixed that up while applying.

Thanks for the patches, all merged.
-Daniel

> +		test_invalid_flags(fd);
>  	igt_subtest("copy")
>  		test_copy(fd);
>  	igt_subtest("read")
> -- 
> 1.9.2
>
diff mbox

Patch

diff --git a/tests/gem_mmap_wc.c b/tests/gem_mmap_wc.c
index 87140ff..4881ab7 100644
--- a/tests/gem_mmap_wc.c
+++ b/tests/gem_mmap_wc.c
@@ -41,6 +41,17 @@ 
 #include "drmtest.h"
 #include "igt_debugfs.h"
 
+struct local_i915_gem_mmap_v2 {
+	uint32_t handle;
+	uint32_t pad;
+	uint64_t offset;
+	uint64_t size;
+	uint64_t addr_ptr;
+	uint64_t flags;
+#define I915_MMAP_WC 0x1
+};
+#define LOCAL_IOCTL_I915_GEM_MMAP_v2 DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_GEM_MMAP, struct local_i915_gem_mmap_v2)
+
 static int OBJECT_SIZE = 16*1024*1024;
 
 static void set_domain(int fd, uint32_t handle)
@@ -76,6 +87,45 @@  create_pointer(int fd)
 }
 
 static void
+test_invalid_flags(int fd)
+{
+	struct drm_i915_getparam gp;
+	struct local_i915_gem_mmap_v2 arg;
+	uint64_t flag = I915_MMAP_WC;
+	int val = -1;
+
+	memset(&arg, 0, sizeof(arg));
+	arg.handle = gem_create(fd, 4096);
+	arg.offset = 0;
+	arg.size = 4096;
+
+	memset(&gp, 0, sizeof(gp));
+	gp.param = 30; /* MMAP_VERSION */
+	gp.value = &val;
+
+	/* Do we have the new mmap_ioctl? */
+	do_ioctl(fd, DRM_IOCTL_I915_GETPARAM, &gp);
+
+	if (val >= 1) {
+		/*
+		 * Only MMAP_WC flag is supported in version 1, so any other
+		 * flag should be rejected.
+		 */
+		flag <<= 1;
+		while (flag) {
+			arg.flags = flag;
+			igt_assert(drmIoctl(fd,
+				   LOCAL_IOCTL_I915_GEM_MMAP_v2,
+				   &arg) == -1);
+			igt_assert_eq(errno, EINVAL);
+			flag <<= 1;
+		}
+	}
+
+	gem_close(fd, arg.handle);
+}
+
+static void
 test_copy(int fd)
 {
 	void *src, *dst;
@@ -336,6 +386,8 @@  igt_main
 	igt_fixture
 		fd = drm_open_any();
 
+	igt_subtest("invalid flags")
+		test_invalid_flags(fd);
 	igt_subtest("copy")
 		test_copy(fd);
 	igt_subtest("read")