summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rw-r--r--tests/gem_mmap_wc.c47
1 files changed, 47 insertions, 0 deletions
diff --git a/tests/gem_mmap_wc.c b/tests/gem_mmap_wc.c
index 2edb332a..c945ba85 100644
--- a/tests/gem_mmap_wc.c
+++ b/tests/gem_mmap_wc.c
@@ -315,6 +315,51 @@ test_write_gtt_read_wc(int fd)
munmap(dst, OBJECT_SIZE);
}
+static void
+test_set_cache_level(int fd)
+{
+ struct drm_mode_cursor arg;
+ struct drm_mode_card_res res;
+ uint32_t crtc[32];
+ int active_crtc = 0;
+ int n;
+
+ /* We want to trigger an old WARN in set-cache-level when
+ * it sees an unbound object in the GTT domain, following
+ * the introduction of mmap(wc).
+ */
+
+ memset(&arg, 0, sizeof(arg));
+ arg.flags = DRM_MODE_CURSOR_BO;
+ arg.width = arg.height = 64;
+ arg.handle = gem_create(fd, 64*64*4);
+ set_domain(fd, arg.handle);
+
+ /* Bind the object to the cursor to force set-cache-level(DISPLAY) */
+ memset(&res, 0, sizeof(res));
+ res.count_crtcs = 32;
+ res.crtc_id_ptr = (uintptr_t)crtc;
+ do_ioctl(fd, DRM_IOCTL_MODE_GETRESOURCES, &res);
+ for (n = 0; n < res.count_crtcs; n++) {
+ struct drm_mode_crtc mode;
+
+ memset(&mode, 0, sizeof(mode));
+ mode.crtc_id = crtc[n];
+ do_ioctl(fd, DRM_IOCTL_MODE_GETCRTC, &mode);
+
+ if (!mode.mode_valid)
+ continue;
+
+ active_crtc++;
+
+ arg.crtc_id = crtc[n];
+ do_ioctl(fd, DRM_IOCTL_MODE_CURSOR, &arg);
+ }
+
+ gem_close(fd, arg.handle);
+ igt_require(active_crtc);
+}
+
struct thread_fault_concurrent {
pthread_t thread;
int id;
@@ -414,6 +459,8 @@ igt_main
test_write_cpu_read_wc(fd);
igt_subtest("write-gtt-read-wc")
test_write_gtt_read_wc(fd);
+ igt_subtest("set-cache-level")
+ test_set_cache_level(fd);
igt_fixture
close(fd);