diff --git a/lib/i915/gem_mman.h b/lib/i915/gem_mman.h
index 4fc6a0186..491767023 100644
--- a/lib/i915/gem_mman.h
+++ b/lib/i915/gem_mman.h
@@ -101,9 +101,10 @@ extern const struct mmap_offset {
 	unsigned int domain;
 } mmap_offset_types[];
 
-#define for_each_mmap_offset_type(__t) \
+#define for_each_mmap_offset_type(fd, __t) \
 	for (const struct mmap_offset *__t = mmap_offset_types; \
-	     (__t)->name; \
+	     (__t)->name && (gem_has_mmap_offset(fd) || \
+			     (__t)->type == I915_MMAP_OFFSET_GTT); \
 	     (__t)++)
 
 #endif /* GEM_MMAN_H */
diff --git a/tests/i915/gem_ctx_sseu.c b/tests/i915/gem_ctx_sseu.c
index d558c8baa..3bef11b51 100644
--- a/tests/i915/gem_ctx_sseu.c
+++ b/tests/i915/gem_ctx_sseu.c
@@ -531,7 +531,7 @@ igt_main
 			test_invalid_sseu(fd);
 
 		igt_subtest_with_dynamic("mmap-args") {
-			for_each_mmap_offset_type(t) {
+			for_each_mmap_offset_type(fd, t) {
 				igt_dynamic_f("%s", t->name)
 					test_mmapped_args(fd, t);
 			}
diff --git a/tests/i915/gem_exec_params.c b/tests/i915/gem_exec_params.c
index e2912685b..cf7ea3065 100644
--- a/tests/i915/gem_exec_params.c
+++ b/tests/i915/gem_exec_params.c
@@ -244,7 +244,7 @@ static void mmapped(int i915)
 	buf = gem_create(i915, 4096);
 	handle = batch_create(i915);
 
-	for_each_mmap_offset_type(t) { /* repetitive! */
+	for_each_mmap_offset_type(i915, t) { /* repetitive! */
 		struct drm_i915_gem_execbuffer2 *execbuf;
 		struct drm_i915_gem_exec_object2 *exec;
 
diff --git a/tests/i915/gem_madvise.c b/tests/i915/gem_madvise.c
index e8716a891..54c9befff 100644
--- a/tests/i915/gem_madvise.c
+++ b/tests/i915/gem_madvise.c
@@ -62,12 +62,13 @@ dontneed_before_mmap(void)
 	char *ptr;
 	int fd;
 
-	for_each_mmap_offset_type(t) {
+	fd = drm_open_driver(DRIVER_INTEL);
+
+	for_each_mmap_offset_type(fd, 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);
 
@@ -93,7 +94,11 @@ dontneed_before_mmap(void)
 		munmap(ptr, OBJECT_SIZE);
 		signal(SIGBUS, old_sigsegv);
 		signal(SIGSEGV, old_sigbus);
+
+		fd = drm_open_driver(DRIVER_INTEL);
 	}
+
+	close(fd);
 }
 
 static void
@@ -103,12 +108,13 @@ dontneed_after_mmap(void)
 	char *ptr;
 	int fd;
 
-	for_each_mmap_offset_type(t) {
+	fd = drm_open_driver(DRIVER_INTEL);
+
+	for_each_mmap_offset_type(fd, 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,
@@ -134,7 +140,11 @@ dontneed_after_mmap(void)
 		munmap(ptr, OBJECT_SIZE);
 		signal(SIGBUS, old_sigbus);
 		signal(SIGSEGV, old_sigsegv);
+
+		fd = drm_open_driver(DRIVER_INTEL);
 	}
+
+	close(fd);
 }
 
 static void
diff --git a/tests/i915/gem_mmap_offset.c b/tests/i915/gem_mmap_offset.c
index f49d18e63..1ec963b25 100644
--- a/tests/i915/gem_mmap_offset.c
+++ b/tests/i915/gem_mmap_offset.c
@@ -128,7 +128,7 @@ static void basic_uaf(int i915)
 {
 	const uint32_t obj_size = 4096;
 
-	for_each_mmap_offset_type(t) {
+	for_each_mmap_offset_type(i915, t) {
 		uint32_t handle = gem_create(i915, obj_size);
 		uint8_t *expected, *buf, *addr;
 
@@ -176,7 +176,7 @@ static void basic_uaf(int i915)
 
 static void isolation(int i915)
 {
-	for_each_mmap_offset_type(t) {
+	for_each_mmap_offset_type(i915, t) {
 		struct drm_i915_gem_mmap_offset mmap_arg = {
 			.flags = t->type
 		};
@@ -245,7 +245,7 @@ static void pf_nonblock(int i915)
 {
 	igt_spin_t *spin = igt_spin_new(i915);
 
-	for_each_mmap_offset_type(t) {
+	for_each_mmap_offset_type(i915, t) {
 		uint32_t *ptr;
 
 		ptr = __mmap_offset(i915, spin->handle, 0, 4096,
@@ -324,7 +324,7 @@ static void open_flood(int i915, int timeout)
 	handle = gem_create(i915, 4096);
 	dmabuf = prime_handle_to_fd(i915, handle);
 
-	for_each_mmap_offset_type(t) {
+	for_each_mmap_offset_type(i915, t) {
 		struct drm_i915_gem_mmap_offset arg = {
 			.handle = handle,
 			.flags = t->type,
@@ -351,7 +351,7 @@ static void open_flood(int i915, int timeout)
 		tmp = gem_reopen_driver(i915);
 		handle = prime_fd_to_handle(i915, dmabuf);
 
-		for_each_mmap_offset_type(t) {
+		for_each_mmap_offset_type(i915, t) {
 			struct drm_i915_gem_mmap_offset arg = {
 				.handle = handle,
 				.flags = t->type,
diff --git a/tests/i915/i915_pm_rpm.c b/tests/i915/i915_pm_rpm.c
index 0c2821122..1bec80db7 100644
--- a/tests/i915/i915_pm_rpm.c
+++ b/tests/i915/i915_pm_rpm.c
@@ -2006,7 +2006,7 @@ igt_main_args("", long_options, help_str, opt_handler, NULL)
 
 	/* GEM */
 	igt_subtest_with_dynamic("gem-mmap-type") {
-		for_each_mmap_offset_type(t) {
+		for_each_mmap_offset_type(drm_fd, t) {
 			igt_dynamic_f("%s", t->name)
 				gem_mmap_args(t);
 		}
