summaryrefslogtreecommitdiff
path: root/tests/gem_madvise.c
diff options
context:
space:
mode:
authorChris Wilson <chris@chris-wilson.co.uk>2016-08-05 09:37:00 +0100
committerChris Wilson <chris@chris-wilson.co.uk>2016-08-05 09:59:00 +0100
commitb9e2db934b262fe541e4800854f320bce59b34de (patch)
treefd16f5534912e41c242e80e21c29f6db4e22e077 /tests/gem_madvise.c
parentdb636a7a392aa657de89bdc7ea9a15f56596751c (diff)
igt/gem_madvise: Quick fixup of expectation around mmap()
We don't do any santiy checking at the point of crating the mmap(), that is deferred until the pointer is actually dereferenced (as the state of the object may well change between mmap and pagefault). Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Diffstat (limited to 'tests/gem_madvise.c')
-rw-r--r--tests/gem_madvise.c21
1 files changed, 17 insertions, 4 deletions
diff --git a/tests/gem_madvise.c b/tests/gem_madvise.c
index 36408fe3..24d58dd5 100644
--- a/tests/gem_madvise.c
+++ b/tests/gem_madvise.c
@@ -63,10 +63,23 @@ dontneed_before_mmap(void)
handle = gem_create(fd, OBJECT_SIZE);
gem_madvise(fd, handle, I915_MADV_DONTNEED);
- ptr = __gem_mmap__gtt(fd, handle, OBJECT_SIZE, PROT_READ | PROT_WRITE);
- igt_assert(ptr == NULL);
- igt_assert(errno == EFAULT);
+ ptr = gem_mmap__gtt(fd, handle, OBJECT_SIZE, PROT_READ | PROT_WRITE);
close(fd);
+
+ signal(SIGSEGV, sigtrap);
+ signal(SIGBUS, sigtrap);
+ switch (setjmp(jmp)) {
+ case SIGBUS:
+ break;
+ case 0:
+ *ptr = 0;
+ default:
+ igt_assert(!"reached");
+ break;
+ }
+ munmap(ptr, OBJECT_SIZE);
+ signal(SIGBUS, SIG_DFL);
+ signal(SIGSEGV, SIG_DFL);
}
static void
@@ -77,7 +90,7 @@ dontneed_after_mmap(void)
char *ptr;
handle = gem_create(fd, OBJECT_SIZE);
- ptr = __gem_mmap__gtt(fd, handle, OBJECT_SIZE, PROT_READ | PROT_WRITE);
+ ptr = gem_mmap__gtt(fd, handle, OBJECT_SIZE, PROT_READ | PROT_WRITE);
igt_assert(ptr);
gem_madvise(fd, handle, I915_MADV_DONTNEED);
close(fd);