summaryrefslogtreecommitdiff
path: root/tests/i915/gem_madvise.c
diff options
context:
space:
mode:
authorVinay Belgaumkar <vinay.belgaumkar@intel.com>2020-01-30 13:44:55 -0800
committerChris Wilson <chris@chris-wilson.co.uk>2020-01-31 10:17:55 +0000
commit92132fa31bb528eec98cbfd027a5c33095155f82 (patch)
treee76ba953c222d37205578eed69641693a3633465 /tests/i915/gem_madvise.c
parentf35a238f80c6bc695d4c60446f5a2400f80c44f2 (diff)
i915/gem_madvise: Use gem_mmap_offset
Update test to use mmap_offset which allows test execution on platforms without aperture. Iterate the test for GTT and WC mapping types. Signed-off-by: Antonio Argenziano <antonio.argenziano@intel.com> Signed-off-by: Vinay Belgaumkar <vinay.belgaumkar@intel.com> Cc: Chris Wilson <chris@chris-wilson.co.uk> Reviewed-by: Chris Wilson <chris@chris-wilson.co.uk> Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Diffstat (limited to 'tests/i915/gem_madvise.c')
-rw-r--r--tests/i915/gem_madvise.c128
1 files changed, 87 insertions, 41 deletions
diff --git a/tests/i915/gem_madvise.c b/tests/i915/gem_madvise.c
index 7162a5c3..8baef0d9 100644
--- a/tests/i915/gem_madvise.c
+++ b/tests/i915/gem_madvise.c
@@ -43,70 +43,116 @@ IGT_TEST_DESCRIPTION("Checks that the kernel reports EFAULT when trying to use"
#define OBJECT_SIZE (1024*1024)
-/* Testcase: checks that the kernel reports EFAULT when trying to use purged bo
+/*
+ * Testcase: checks that the kernel reports EFAULT when trying to use purged bo
*
*/
+static const struct mmap_offset {
+ const char *name;
+ unsigned int type;
+ unsigned int domain;
+} mmap_offset_types[] = {
+ { "gtt", I915_MMAP_OFFSET_GTT, I915_GEM_DOMAIN_GTT },
+ { "wb", I915_MMAP_OFFSET_WB, I915_GEM_DOMAIN_CPU },
+ { "wc", I915_MMAP_OFFSET_WC, I915_GEM_DOMAIN_WC },
+ { "uc", I915_MMAP_OFFSET_UC, I915_GEM_DOMAIN_WC },
+ {},
+};
+
+#define for_each_mmap_offset_type(__t) \
+ for (const struct mmap_offset *__t = mmap_offset_types; \
+ (__t)->name; \
+ (__t)++)
+
+
static jmp_buf jmp;
static void __attribute__((noreturn)) sigtrap(int sig)
{
- longjmp(jmp, sig);
+ siglongjmp(jmp, sig);
}
static void
dontneed_before_mmap(void)
{
- int fd = drm_open_driver(DRIVER_INTEL);
uint32_t handle;
char *ptr;
-
- 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);
- close(fd);
-
- signal(SIGSEGV, sigtrap);
- signal(SIGBUS, sigtrap);
- switch (setjmp(jmp)) {
- case SIGBUS:
- break;
- case 0:
- *ptr = 0;
- default:
- igt_assert(!"reached");
- break;
+ int fd;
+
+ for_each_mmap_offset_type(t) {
+ sighandler_t old_sigsegv, old_sigbus;
+
+ igt_debug("Mapping mode: %s\n", t->name);
+
+ fd = drm_open_driver(DRIVER_INTEL);
+ handle = gem_create(fd, OBJECT_SIZE);
+ gem_madvise(fd, handle, I915_MADV_DONTNEED);
+
+ ptr = __gem_mmap_offset(fd, handle, 0, OBJECT_SIZE,
+ PROT_READ | PROT_WRITE,
+ t->type);
+
+ close(fd);
+ if (!ptr)
+ continue;
+
+ old_sigsegv = signal(SIGSEGV, sigtrap);
+ old_sigbus = signal(SIGBUS, sigtrap);
+ switch (sigsetjmp(jmp, SIGBUS | SIGSEGV)) {
+ case SIGBUS:
+ break;
+ case 0:
+ *ptr = 0;
+ default:
+ igt_assert(!"reached");
+ break;
+ }
+ munmap(ptr, OBJECT_SIZE);
+ signal(SIGBUS, old_sigsegv);
+ signal(SIGSEGV, old_sigbus);
}
- munmap(ptr, OBJECT_SIZE);
- signal(SIGBUS, SIG_DFL);
- signal(SIGSEGV, SIG_DFL);
}
static void
dontneed_after_mmap(void)
{
- int fd = drm_open_driver(DRIVER_INTEL);
uint32_t handle;
char *ptr;
-
- handle = gem_create(fd, OBJECT_SIZE);
- ptr = gem_mmap__gtt(fd, handle, OBJECT_SIZE, PROT_READ | PROT_WRITE);
- igt_assert(ptr);
- gem_madvise(fd, handle, I915_MADV_DONTNEED);
- close(fd);
-
- signal(SIGBUS, sigtrap);
- switch (setjmp(jmp)) {
- case SIGBUS:
- break;
- case 0:
- *ptr = 0;
- default:
- igt_assert(!"reached");
- break;
+ int fd;
+
+ for_each_mmap_offset_type(t) {
+ sighandler_t old_sigsegv, old_sigbus;
+
+ igt_debug("Mapping mode: %s\n", t->name);
+
+ fd = drm_open_driver(DRIVER_INTEL);
+ handle = gem_create(fd, OBJECT_SIZE);
+
+ ptr = __gem_mmap_offset(fd, handle, 0, OBJECT_SIZE,
+ PROT_READ | PROT_WRITE,
+ t->type);
+
+ gem_madvise(fd, handle, I915_MADV_DONTNEED);
+ close(fd);
+ if (!ptr)
+ continue;
+
+ old_sigsegv = signal(SIGSEGV, sigtrap);
+ old_sigbus = signal(SIGBUS, sigtrap);
+ switch (sigsetjmp(jmp, SIGBUS | SIGSEGV)) {
+ case SIGBUS:
+ break;
+ case 0:
+ *ptr = 0;
+ default:
+ igt_assert(!"reached");
+ break;
+ }
+ munmap(ptr, OBJECT_SIZE);
+ signal(SIGBUS, old_sigbus);
+ signal(SIGSEGV, old_sigsegv);
}
- munmap(ptr, OBJECT_SIZE);
- signal(SIGBUS, SIG_DFL);
}
static void