Message ID | 1420196614-13543-7-git-send-email-akash.goel@intel.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
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 --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")