mirror of
https://github.com/tiagovignatti/intel-gpu-tools.git
synced 2025-07-27 03:36:44 +00:00
igt/gem_exec_reloc: Check WC mmaps as well
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
This commit is contained in:
parent
15deba4575
commit
556535400c
@ -88,14 +88,17 @@ static void write_dword(int fd,
|
|||||||
gem_close(fd, obj[1].handle);
|
gem_close(fd, obj[1].handle);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void from_mmap(int fd, uint64_t size, int use_gtt)
|
enum mode { MEM, CPU, WC, GTT };
|
||||||
|
static void from_mmap(int fd, uint64_t size, enum mode mode)
|
||||||
{
|
{
|
||||||
uint32_t bbe = MI_BATCH_BUFFER_END;
|
uint32_t bbe = MI_BATCH_BUFFER_END;
|
||||||
struct drm_i915_gem_execbuffer2 execbuf;
|
struct drm_i915_gem_execbuffer2 execbuf;
|
||||||
struct drm_i915_gem_exec_object2 obj;
|
struct drm_i915_gem_exec_object2 obj;
|
||||||
struct drm_i915_gem_relocation_entry *relocs;
|
struct drm_i915_gem_relocation_entry *relocs;
|
||||||
|
uint32_t reloc_handle;
|
||||||
uint64_t value;
|
uint64_t value;
|
||||||
uint64_t max, i;
|
uint64_t max, i;
|
||||||
|
int retry = 2;
|
||||||
|
|
||||||
intel_require_memory(1, size, CHECK_RAM);
|
intel_require_memory(1, size, CHECK_RAM);
|
||||||
|
|
||||||
@ -104,32 +107,39 @@ static void from_mmap(int fd, uint64_t size, int use_gtt)
|
|||||||
gem_write(fd, obj.handle, 0, &bbe, sizeof(bbe));
|
gem_write(fd, obj.handle, 0, &bbe, sizeof(bbe));
|
||||||
|
|
||||||
max = size / sizeof(*relocs);
|
max = size / sizeof(*relocs);
|
||||||
if (use_gtt < 0) {
|
switch (mode) {
|
||||||
|
case MEM:
|
||||||
relocs = mmap(0, size,
|
relocs = mmap(0, size,
|
||||||
PROT_WRITE, MAP_PRIVATE | MAP_ANON,
|
PROT_WRITE, MAP_PRIVATE | MAP_ANON,
|
||||||
-1, 0);
|
-1, 0);
|
||||||
igt_assert(relocs != (void *)-1);
|
igt_assert(relocs != (void *)-1);
|
||||||
} else if (use_gtt) {
|
break;
|
||||||
uint32_t reloc_handle;
|
case GTT:
|
||||||
|
|
||||||
reloc_handle = gem_create(fd, size);
|
reloc_handle = gem_create(fd, size);
|
||||||
relocs = gem_mmap__gtt(fd, reloc_handle, size, PROT_WRITE);
|
relocs = gem_mmap__gtt(fd, reloc_handle, size, PROT_WRITE);
|
||||||
gem_set_domain(fd, reloc_handle,
|
gem_set_domain(fd, reloc_handle,
|
||||||
I915_GEM_DOMAIN_GTT, I915_GEM_DOMAIN_GTT);
|
I915_GEM_DOMAIN_GTT, I915_GEM_DOMAIN_GTT);
|
||||||
gem_close(fd, reloc_handle);
|
gem_close(fd, reloc_handle);
|
||||||
} else {
|
break;
|
||||||
uint32_t reloc_handle;
|
case CPU:
|
||||||
|
|
||||||
reloc_handle = gem_create(fd, size);
|
reloc_handle = gem_create(fd, size);
|
||||||
relocs = gem_mmap__cpu(fd, reloc_handle, 0, size, PROT_WRITE);
|
relocs = gem_mmap__cpu(fd, reloc_handle, 0, size, PROT_WRITE);
|
||||||
gem_set_domain(fd, reloc_handle,
|
gem_set_domain(fd, reloc_handle,
|
||||||
I915_GEM_DOMAIN_CPU, I915_GEM_DOMAIN_CPU);
|
I915_GEM_DOMAIN_CPU, I915_GEM_DOMAIN_CPU);
|
||||||
gem_close(fd, reloc_handle);
|
gem_close(fd, reloc_handle);
|
||||||
|
break;
|
||||||
|
case WC:
|
||||||
|
reloc_handle = gem_create(fd, size);
|
||||||
|
relocs = gem_mmap__wc(fd, reloc_handle, 0, size, PROT_WRITE);
|
||||||
|
gem_set_domain(fd, reloc_handle,
|
||||||
|
I915_GEM_DOMAIN_GTT, I915_GEM_DOMAIN_GTT);
|
||||||
|
gem_close(fd, reloc_handle);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (i = 0; i < max; i++) {
|
for (i = 0; i < max; i++) {
|
||||||
relocs[i].target_handle = obj.handle;
|
relocs[i].target_handle = obj.handle;
|
||||||
relocs[i].presumed_offset = 0;
|
relocs[i].presumed_offset = ~0ull;
|
||||||
relocs[i].offset = 1024;
|
relocs[i].offset = 1024;
|
||||||
relocs[i].delta = i;
|
relocs[i].delta = i;
|
||||||
relocs[i].read_domains = I915_GEM_DOMAIN_INSTRUCTION;
|
relocs[i].read_domains = I915_GEM_DOMAIN_INSTRUCTION;
|
||||||
@ -141,16 +151,16 @@ static void from_mmap(int fd, uint64_t size, int use_gtt)
|
|||||||
memset(&execbuf, 0, sizeof(execbuf));
|
memset(&execbuf, 0, sizeof(execbuf));
|
||||||
execbuf.buffers_ptr = (uintptr_t)&obj;
|
execbuf.buffers_ptr = (uintptr_t)&obj;
|
||||||
execbuf.buffer_count = 1;
|
execbuf.buffer_count = 1;
|
||||||
|
while (relocs[0].presumed_offset == ~0ull && retry--)
|
||||||
gem_execbuf(fd, &execbuf);
|
gem_execbuf(fd, &execbuf);
|
||||||
gem_read(fd, obj.handle, 1024, &value, sizeof(value));
|
gem_read(fd, obj.handle, 1024, &value, sizeof(value));
|
||||||
gem_close(fd, obj.handle);
|
gem_close(fd, obj.handle);
|
||||||
|
|
||||||
igt_assert_eq_u64(value, obj.offset + max - 1);
|
igt_assert_eq_u64(value, obj.offset + max - 1);
|
||||||
for (i = 0; i < max; i++) {
|
if (relocs[0].presumed_offset != ~0ull) {
|
||||||
if (relocs[i].presumed_offset == ~0ull)
|
for (i = 0; i < max; i++)
|
||||||
continue;
|
igt_assert_eq_u64(relocs[i].presumed_offset,
|
||||||
|
obj.offset);
|
||||||
igt_assert_eq_u64(relocs[i].presumed_offset, obj.offset);
|
|
||||||
}
|
}
|
||||||
munmap(relocs, size);
|
munmap(relocs, size);
|
||||||
}
|
}
|
||||||
@ -215,11 +225,13 @@ igt_main
|
|||||||
|
|
||||||
for (size = 4096; size <= 4ull*1024*1024*1024; size <<= 1) {
|
for (size = 4096; size <= 4ull*1024*1024*1024; size <<= 1) {
|
||||||
igt_subtest_f("mmap-%u", find_last_set(size) - 1)
|
igt_subtest_f("mmap-%u", find_last_set(size) - 1)
|
||||||
from_mmap(fd, size, -1);
|
from_mmap(fd, size, MEM);
|
||||||
igt_subtest_f("cpu-%u", find_last_set(size) - 1)
|
igt_subtest_f("cpu-%u", find_last_set(size) - 1)
|
||||||
from_mmap(fd, size, 0);
|
from_mmap(fd, size, CPU);
|
||||||
|
igt_subtest_f("wc-%u", find_last_set(size) - 1)
|
||||||
|
from_mmap(fd, size, WC);
|
||||||
igt_subtest_f("gtt-%u", find_last_set(size) - 1)
|
igt_subtest_f("gtt-%u", find_last_set(size) - 1)
|
||||||
from_mmap(fd, size, 1);
|
from_mmap(fd, size, GTT);
|
||||||
}
|
}
|
||||||
|
|
||||||
igt_subtest("gpu")
|
igt_subtest("gpu")
|
||||||
|
Loading…
x
Reference in New Issue
Block a user