tests/gem_mmap: Convert to subtests

I wanted to write a testcase for gtt mmap access restriction checking
and only noticed after conversion to subtests that this here is for
cpu mmaps ;-)

Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
This commit is contained in:
Daniel Vetter 2013-08-26 10:26:00 +02:00
parent 86f60ee593
commit c2c0efc21a
2 changed files with 41 additions and 34 deletions

View File

@ -30,6 +30,7 @@ TESTS_progs_M = \
gem_flink \
gem_flink_race \
gem_linear_blits \
gem_mmap \
gem_mmap_gtt \
gem_partial_pwrite_pread \
gem_pread \
@ -75,7 +76,6 @@ TESTS_progs = \
gem_hangcheck_forcewake \
gem_largeobject \
gem_lut_handle \
gem_mmap \
gem_mmap_offset_exhaustion \
gem_pin \
gem_pipe_control_store_loop \

View File

@ -40,56 +40,63 @@
#include "drmtest.h"
#define OBJECT_SIZE 16384
int fd;
int handle;
int main(int argc, char **argv)
{
int fd;
struct drm_i915_gem_mmap arg;
uint8_t expected[OBJECT_SIZE];
uint8_t buf[OBJECT_SIZE];
uint8_t *addr;
int ret;
int handle;
fd = drm_open_any();
igt_subtest_init(argc, argv);
memset(&arg, 0, sizeof(arg));
arg.handle = 0x10101010;
arg.offset = 0;
arg.size = 4096;
printf("Testing mmaping of bad object.\n");
ret = ioctl(fd, DRM_IOCTL_I915_GEM_MMAP, &arg);
igt_assert(ret == -1 && errno == ENOENT);
igt_fixture
fd = drm_open_any();
handle = gem_create(fd, OBJECT_SIZE);
igt_subtest("bad-object") {
memset(&arg, 0, sizeof(arg));
arg.handle = 0x10101010;
arg.offset = 0;
arg.size = 4096;
ret = ioctl(fd, DRM_IOCTL_I915_GEM_MMAP, &arg);
igt_assert(ret == -1 && errno == ENOENT);
}
printf("Testing mmaping of newly created object.\n");
arg.handle = handle;
arg.offset = 0;
arg.size = OBJECT_SIZE;
ret = ioctl(fd, DRM_IOCTL_I915_GEM_MMAP, &arg);
igt_assert(ret == 0);
addr = (uint8_t *)(uintptr_t)arg.addr_ptr;
igt_fixture
handle = gem_create(fd, OBJECT_SIZE);
printf("Testing contents of newly created object.\n");
memset(expected, 0, sizeof(expected));
igt_assert(memcmp(addr, expected, sizeof(expected)) == 0);
igt_subtest("new-object") {
arg.handle = handle;
arg.offset = 0;
arg.size = OBJECT_SIZE;
ret = ioctl(fd, DRM_IOCTL_I915_GEM_MMAP, &arg);
igt_assert(ret == 0);
addr = (uint8_t *)(uintptr_t)arg.addr_ptr;
printf("Testing coherency of writes and mmap reads.\n");
memset(buf, 0, sizeof(buf));
memset(buf + 1024, 0x01, 1024);
memset(expected + 1024, 0x01, 1024);
gem_write(fd, handle, 0, buf, OBJECT_SIZE);
igt_assert(memcmp(buf, addr, sizeof(buf)) == 0);
printf("Testing contents of newly created object.\n");
memset(expected, 0, sizeof(expected));
igt_assert(memcmp(addr, expected, sizeof(expected)) == 0);
printf("Testing that mapping stays after close\n");
gem_close(fd, handle);
igt_assert(memcmp(buf, addr, sizeof(buf)) == 0);
printf("Testing coherency of writes and mmap reads.\n");
memset(buf, 0, sizeof(buf));
memset(buf + 1024, 0x01, 1024);
memset(expected + 1024, 0x01, 1024);
gem_write(fd, handle, 0, buf, OBJECT_SIZE);
igt_assert(memcmp(buf, addr, sizeof(buf)) == 0);
printf("Testing unmapping\n");
munmap(addr, OBJECT_SIZE);
printf("Testing that mapping stays after close\n");
gem_close(fd, handle);
igt_assert(memcmp(buf, addr, sizeof(buf)) == 0);
close(fd);
printf("Testing unmapping\n");
munmap(addr, OBJECT_SIZE);
}
igt_fixture
close(fd);
return 0;
}