Use pread right after moving out of CPU domain to verify all
writes flushed correctly.

Due to extended usage, add own buffer.

Signed-off-by: Joonas Lahtinen <joonas.lahti...@linux.intel.com>
---
 tests/gem_mmap_gtt.c | 28 +++++++++++++++++++++-------
 1 file changed, 21 insertions(+), 7 deletions(-)

diff --git a/tests/gem_mmap_gtt.c b/tests/gem_mmap_gtt.c
index 92fa644..e53ab13 100644
--- a/tests/gem_mmap_gtt.c
+++ b/tests/gem_mmap_gtt.c
@@ -291,6 +291,7 @@ test_huge_bo(int fd)
        char *ptr_gtt;
        char *cpu_pattern;
        char *gtt_pattern;
+       char *pread_buffer;
        uint64_t mappable_aperture_pages = gem_mappable_aperture_size() /
                                           PAGE_SIZE;
        uint64_t huge_object_size = (mappable_aperture_pages + 1) * PAGE_SIZE;
@@ -298,7 +299,8 @@ test_huge_bo(int fd)
 
        cpu_pattern = malloc(PAGE_SIZE);
        gtt_pattern = malloc(PAGE_SIZE);
-       igt_assert(cpu_pattern && gtt_pattern);
+       pread_buffer = malloc(PAGE_SIZE);
+       igt_assert(cpu_pattern && gtt_pattern && pread_buffer);
        memset(cpu_pattern,  0xaa, PAGE_SIZE);
        memset(gtt_pattern, ~0xaa, PAGE_SIZE);
 
@@ -334,6 +336,17 @@ test_huge_bo(int fd)
 
        set_domain_gtt(fd, bo);
 
+       /* Verify the page contents via pread after domain transfer.
+        * This is to make sure the transfer actually flushed everything.
+        */
+       memset(pread_buffer, 0, PAGE_SIZE);
+       pread_bo(fd, bo, pread_buffer, 0, PAGE_SIZE);
+       igt_assert(memcmp(pread_buffer, cpu_pattern, PAGE_SIZE) == 0);
+
+       memset(pread_buffer, 0, PAGE_SIZE);
+       pread_bo(fd, bo, pread_buffer, last_offset, PAGE_SIZE);
+       igt_assert(memcmp(pread_buffer, cpu_pattern, PAGE_SIZE) == 0);
+
        /* Access through GTT should still provide the CPU written values. */
        igt_assert(memcmp(ptr_gtt              , cpu_pattern, PAGE_SIZE) == 0);
        igt_assert(memcmp(ptr_gtt + last_offset, cpu_pattern, PAGE_SIZE) == 0);
@@ -356,17 +369,18 @@ test_huge_bo(int fd)
        /* Verify the page contents after GTT writes by reading without mapping.
         * Mapping to CPU domain is avoided not to cause a huge flush.
         */
-       pread_bo(fd, bo, cpu_pattern, 0, PAGE_SIZE);
-       igt_assert(memcmp(cpu_pattern, gtt_pattern, PAGE_SIZE) == 0);
-
-       memset(cpu_pattern, 0x00, PAGE_SIZE);
+       memset(pread_buffer, 0x00, PAGE_SIZE);
+       pread_bo(fd, bo, pread_buffer, 0, PAGE_SIZE);
+       igt_assert(memcmp(pread_buffer, gtt_pattern, PAGE_SIZE) == 0);
 
-       pread_bo(fd, bo, cpu_pattern, last_offset, PAGE_SIZE);
-       igt_assert(memcmp(cpu_pattern, gtt_pattern, PAGE_SIZE) == 0);
+       memset(pread_buffer, 0x00, PAGE_SIZE);
+       pread_bo(fd, bo, pread_buffer, last_offset, PAGE_SIZE);
+       igt_assert(memcmp(pread_buffer, gtt_pattern, PAGE_SIZE) == 0);
 
        gem_close(fd, bo);
        free(cpu_pattern);
        free(gtt_pattern);
+       free(pread_buffer);
 }
 
 static void
-- 
1.9.3





_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx

Reply via email to