igt/gem_exec_flush: Add interruptible testing

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
This commit is contained in:
Chris Wilson 2016-05-02 09:01:48 +01:00
parent 16c9edb464
commit 805a05caae

View File

@ -32,6 +32,7 @@ IGT_TEST_DESCRIPTION("Basic check of flushing after batches");
#define WRITE 2 #define WRITE 2
#define KERNEL 4 #define KERNEL 4
#define SET_DOMAIN 8 #define SET_DOMAIN 8
#define INTERRUPTIBLE 16
static void run(int fd, unsigned ring, int nchild, int timeout, static void run(int fd, unsigned ring, int nchild, int timeout,
unsigned flags) unsigned flags)
@ -160,49 +161,51 @@ static void run(int fd, unsigned ring, int nchild, int timeout,
gem_execbuf(fd, &execbuf); gem_execbuf(fd, &execbuf);
if (flags & SET_DOMAIN) { igt_interruptible(flags & INTERRUPTIBLE) {
gem_set_domain(fd, obj[0].handle, if (flags & SET_DOMAIN) {
I915_GEM_DOMAIN_GTT, gem_set_domain(fd, obj[0].handle,
flags & WRITE ? I915_GEM_DOMAIN_GTT : 0); I915_GEM_DOMAIN_GTT,
(flags & WRITE) ? I915_GEM_DOMAIN_GTT : 0);
if (xor) if (xor)
igt_assert_eq_u32(map[i], i ^ 0xffffffff); igt_assert_eq_u32(map[i], i ^ 0xffffffff);
else else
igt_assert_eq_u32(map[i], i); igt_assert_eq_u32(map[i], i);
if (flags & WRITE) if (flags & WRITE)
map[i] = 0xdeadbeef; map[i] = 0xdeadbeef;
} else if (flags & KERNEL) { } else if (flags & KERNEL) {
uint32_t val; uint32_t val;
gem_read(fd, obj[0].handle, i*sizeof(uint32_t), gem_read(fd, obj[0].handle, i*sizeof(uint32_t),
&val, sizeof(val)); &val, sizeof(val));
if (xor) if (xor)
igt_assert_eq_u32(val, i ^ 0xffffffff); igt_assert_eq_u32(val, i ^ 0xffffffff);
else else
igt_assert_eq_u32(val, i); igt_assert_eq_u32(val, i);
if (flags & WRITE) { if (flags & WRITE) {
val = 0xdeadbeef; val = 0xdeadbeef;
gem_write(fd, obj[0].handle, i*sizeof(uint32_t), gem_write(fd, obj[0].handle, i*sizeof(uint32_t),
&val, sizeof(val)); &val, sizeof(val));
} }
} else { } else {
gem_sync(fd, obj[0].handle); gem_sync(fd, obj[0].handle);
if (!(flags & COHERENT) && !gem_has_llc(fd)) if (!(flags & COHERENT) && !gem_has_llc(fd))
igt_clflush_range(&map[i], sizeof(map[i]));
if (xor)
igt_assert_eq_u32(map[i], i ^ 0xffffffff);
else
igt_assert_eq_u32(map[i], i);
if (flags & WRITE) {
map[i] = 0xdeadbeef;
if (!(flags & COHERENT))
igt_clflush_range(&map[i], sizeof(map[i])); igt_clflush_range(&map[i], sizeof(map[i]));
if (xor)
igt_assert_eq_u32(map[i], i ^ 0xffffffff);
else
igt_assert_eq_u32(map[i], i);
if (flags & WRITE) {
map[i] = 0xdeadbeef;
if (!(flags & COHERENT))
igt_clflush_range(&map[i], sizeof(map[i]));
}
} }
} }
} }
@ -263,12 +266,26 @@ igt_main
run(fd, ring, ncpus, timeout, run(fd, ring, ncpus, timeout,
UNCACHED | m->flags); UNCACHED | m->flags);
igt_subtest_f("%suc-%s-%s-interruptible",
e->exec_id == 0 ? "basic-" : "",
m->name,
e->name)
run(fd, ring, ncpus, timeout,
UNCACHED | m->flags | INTERRUPTIBLE);
igt_subtest_f("%swb-%s-%s", igt_subtest_f("%swb-%s-%s",
e->exec_id == 0 ? "basic-" : "", e->exec_id == 0 ? "basic-" : "",
m->name, m->name,
e->name) e->name)
run(fd, ring, ncpus, timeout, run(fd, ring, ncpus, timeout,
COHERENT | m->flags); COHERENT | m->flags);
igt_subtest_f("%swb-%s-%s-interruptible",
e->exec_id == 0 ? "basic-" : "",
m->name,
e->name)
run(fd, ring, ncpus, timeout,
COHERENT | m->flags | INTERRUPTIBLE);
} }
} }