diff options
author | Chris Wilson <chris@chris-wilson.co.uk> | 2016-05-06 10:46:50 +0100 |
---|---|---|
committer | Chris Wilson <chris@chris-wilson.co.uk> | 2016-05-06 11:03:30 +0100 |
commit | 2c3144aaee6547c70720b80b7f00c0be8bb7c214 (patch) | |
tree | 053de0b707b3f96bb22ff0cf147ab0d1dcd3aea3 /tests/gem_exec_flush.c | |
parent | 93ab767511cb7a82fded43f2ee181dd9cf6d588c (diff) |
igt/gem_exec_flush: Add a WC mmapping of the target buffer
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Diffstat (limited to 'tests/gem_exec_flush.c')
-rw-r--r-- | tests/gem_exec_flush.c | 59 |
1 files changed, 40 insertions, 19 deletions
diff --git a/tests/gem_exec_flush.c b/tests/gem_exec_flush.c index 6664be8c..7e343d23 100644 --- a/tests/gem_exec_flush.c +++ b/tests/gem_exec_flush.c @@ -29,12 +29,13 @@ IGT_TEST_DESCRIPTION("Basic check of flushing after batches"); #define UNCACHED 0 #define COHERENT 1 -#define WRITE 2 -#define KERNEL 4 -#define SET_DOMAIN 8 -#define BEFORE 16 -#define INTERRUPTIBLE 32 -#define CMDPARSER 64 +#define WC 2 +#define WRITE 4 +#define KERNEL 8 +#define SET_DOMAIN 16 +#define BEFORE 32 +#define INTERRUPTIBLE 64 +#define CMDPARSER 128 static void run(int fd, unsigned ring, int nchild, int timeout, unsigned flags) @@ -56,18 +57,26 @@ static void run(int fd, unsigned ring, int nchild, int timeout, obj[0].handle = gem_create(fd, 4096); obj[0].flags |= EXEC_OBJECT_WRITE; - gem_set_caching(fd, obj[0].handle, !!(flags & COHERENT)); - map = gem_mmap__cpu(fd, obj[0].handle, 0, 4096, PROT_WRITE); + if (flags & WC) { + igt_assert(flags & COHERENT); + map = gem_mmap__wc(fd, obj[0].handle, 0, 4096, PROT_WRITE); + gem_set_domain(fd, obj[0].handle, + I915_GEM_DOMAIN_GTT, + I915_GEM_DOMAIN_GTT); + } else { + gem_set_caching(fd, obj[0].handle, !!(flags & COHERENT)); + map = gem_mmap__cpu(fd, obj[0].handle, 0, 4096, PROT_WRITE); + gem_set_domain(fd, obj[0].handle, + I915_GEM_DOMAIN_CPU, + I915_GEM_DOMAIN_CPU); + } - gem_set_domain(fd, obj[0].handle, - I915_GEM_DOMAIN_CPU, - I915_GEM_DOMAIN_CPU); for (i = 0; i < 1024; i++) map[i] = 0xabcdabcd; gem_set_domain(fd, obj[0].handle, - I915_GEM_DOMAIN_GTT, - I915_GEM_DOMAIN_GTT); + I915_GEM_DOMAIN_GTT, + I915_GEM_DOMAIN_GTT); memset(&execbuf, 0, sizeof(execbuf)); execbuf.buffers_ptr = (uintptr_t)obj; @@ -85,9 +94,9 @@ static void run(int fd, unsigned ring, int nchild, int timeout, obj[2].relocation_count = 1; ptr = gem_mmap__wc(fd, obj[1].handle, 0, 64*1024, - PROT_WRITE | PROT_READ); + PROT_WRITE | PROT_READ); gem_set_domain(fd, obj[1].handle, - I915_GEM_DOMAIN_GTT, I915_GEM_DOMAIN_GTT); + I915_GEM_DOMAIN_GTT, I915_GEM_DOMAIN_GTT); memset(reloc0, 0, sizeof(reloc0)); for (i = 0; i < 1024; i++) { @@ -119,9 +128,9 @@ static void run(int fd, unsigned ring, int nchild, int timeout, munmap(ptr, 64*1024); ptr = gem_mmap__wc(fd, obj[2].handle, 0, 64*1024, - PROT_WRITE | PROT_READ); + PROT_WRITE | PROT_READ); gem_set_domain(fd, obj[2].handle, - I915_GEM_DOMAIN_GTT, I915_GEM_DOMAIN_GTT); + I915_GEM_DOMAIN_GTT, I915_GEM_DOMAIN_GTT); memset(reloc1, 0, sizeof(reloc1)); for (i = 0; i < 1024; i++) { @@ -171,10 +180,10 @@ overwrite: gem_execbuf(fd, &execbuf); if (flags & SET_DOMAIN) { + unsigned domain = flags & WC ? I915_GEM_DOMAIN_GTT : I915_GEM_DOMAIN_CPU; igt_interruptible(flags & INTERRUPTIBLE) gem_set_domain(fd, obj[0].handle, - I915_GEM_DOMAIN_CPU, - (flags & WRITE) ? I915_GEM_DOMAIN_CPU : 0); + domain, (flags & WRITE) ? domain : 0); if (xor) igt_assert_eq_u32(map[i], i ^ 0xffffffff); @@ -525,6 +534,18 @@ igt_main e->name) run(fd, ring, ncpus, timeout, COHERENT | m->flags | INTERRUPTIBLE); + + igt_subtest_f("wc-%s-%s", + m->name, + e->name) + run(fd, ring, ncpus, timeout, + COHERENT | WC | m->flags); + + igt_subtest_f("wc-%s-%s-interruptible", + m->name, + e->name) + run(fd, ring, ncpus, timeout, + COHERENT | WC | m->flags | INTERRUPTIBLE); } } |