diff options
-rw-r--r-- | tests/i915/gem_mmap.c | 22 | ||||
-rw-r--r-- | tests/i915/gem_mmap_gtt.c | 35 | ||||
-rw-r--r-- | tests/i915/gem_mmap_wc.c | 21 |
3 files changed, 78 insertions, 0 deletions
diff --git a/tests/i915/gem_mmap.c b/tests/i915/gem_mmap.c index 05a40d8a..227ae7ca 100644 --- a/tests/i915/gem_mmap.c +++ b/tests/i915/gem_mmap.c @@ -116,6 +116,25 @@ test_huge_bo(int huge) free(cpu_pattern); } +static void +test_pf_nonblock(int i915) +{ + igt_spin_t *spin; + uint32_t *ptr; + + spin = igt_spin_batch_new(i915); + + igt_set_timeout(1, "initial pagefaulting did not complete within 1s"); + + ptr = gem_mmap__cpu(i915, spin->handle, 0, 4096, PROT_WRITE); + ptr[256] = 0; + munmap(ptr, 4096); + + igt_reset_timeout(); + + igt_spin_batch_free(i915, spin); +} + static int mmap_ioctl(int i915, struct drm_i915_gem_mmap *arg) { int err = 0; @@ -248,6 +267,9 @@ igt_main gem_close(fd, handle); } + igt_subtest("pf-nonblock") + test_pf_nonblock(fd); + igt_subtest("basic-small-bo") test_huge_bo(-1); igt_subtest("big-bo") diff --git a/tests/i915/gem_mmap_gtt.c b/tests/i915/gem_mmap_gtt.c index e6244fd0..9a00f4ea 100644 --- a/tests/i915/gem_mmap_gtt.c +++ b/tests/i915/gem_mmap_gtt.c @@ -287,6 +287,39 @@ test_wc(int fd) 5*gtt_writes/256., 5*cpu_writes/256.); } +static int mmap_gtt_version(int i915) +{ + int val = 0; + struct drm_i915_getparam gp = { + gp.param = 40, /* MMAP_GTT_VERSION */ + gp.value = &val, + }; + + ioctl(i915, DRM_IOCTL_I915_GETPARAM, &gp); + return val; +} + +static void +test_pf_nonblock(int i915) +{ + igt_spin_t *spin; + uint32_t *ptr; + + igt_require(mmap_gtt_version(i915) >= 3); + + spin = igt_spin_batch_new(i915); + + igt_set_timeout(1, "initial pagefaulting did not complete within 1s"); + + ptr = gem_mmap__gtt(i915, spin->handle, 4096, PROT_WRITE); + ptr[256] = 0; + munmap(ptr, 4096); + + igt_reset_timeout(); + + igt_spin_batch_free(i915, spin); +} + static void test_write_gtt(int fd) { @@ -900,6 +933,8 @@ igt_main test_write_cpu_read_gtt(fd); igt_subtest("basic-wc") test_wc(fd); + igt_subtest("pf-nonblock") + test_pf_nonblock(fd); igt_subtest("basic-small-bo") test_huge_bo(fd, -1, I915_TILING_NONE); diff --git a/tests/i915/gem_mmap_wc.c b/tests/i915/gem_mmap_wc.c index b8cff46e..e3ffc5ad 100644 --- a/tests/i915/gem_mmap_wc.c +++ b/tests/i915/gem_mmap_wc.c @@ -443,6 +443,25 @@ test_fault_concurrent(int fd) } static void +test_pf_nonblock(int i915) +{ + igt_spin_t *spin; + uint32_t *ptr; + + spin = igt_spin_batch_new(i915); + + igt_set_timeout(1, "initial pagefaulting did not complete within 1s"); + + ptr = gem_mmap__wc(i915, spin->handle, 0, 4096, PROT_WRITE); + ptr[256] = 0; + munmap(ptr, 4096); + + igt_reset_timeout(); + + igt_spin_batch_free(i915, spin); +} + +static void run_without_prefault(int fd, void (*func)(int fd)) { @@ -581,6 +600,8 @@ igt_main test_write_cpu_read_wc(fd, 0); igt_subtest("write-gtt-read-wc") test_write_gtt_read_wc(fd); + igt_subtest("pf-nonblock") + test_pf_nonblock(fd); igt_subtest("set-cache-level") test_set_cache_level(fd); |