benchmarks/gem_exec_reloc: Allow profiling 0 relocs

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
This commit is contained in:
Chris Wilson 2015-08-21 22:26:42 +01:00
parent 05f5e16eaf
commit 5e68ad9f82

View File

@ -70,14 +70,14 @@ static int run(unsigned batch_size,
{ {
uint32_t batch[2] = {MI_BATCH_BUFFER_END}; uint32_t batch[2] = {MI_BATCH_BUFFER_END};
uint32_t cycle[16]; uint32_t cycle[16];
int fd, n, count, c, size; int fd, n, count, c, size = 0;
struct drm_i915_gem_relocation_entry *reloc; struct drm_i915_gem_relocation_entry *reloc = NULL;
struct drm_i915_gem_execbuffer2 execbuf; struct drm_i915_gem_execbuffer2 execbuf;
struct drm_i915_gem_exec_object2 *objects; struct drm_i915_gem_exec_object2 *objects;
struct timeval start, end; struct timeval start, end;
uint32_t reloc_handle; uint32_t reloc_handle = 0;
struct drm_i915_gem_exec_object2 *gem_exec; struct drm_i915_gem_exec_object2 *gem_exec;
struct drm_i915_gem_relocation_entry *mem_reloc; struct drm_i915_gem_relocation_entry *mem_reloc = NULL;
int *target; int *target;
gem_exec = calloc(sizeof(*gem_exec), num_objects + 1); gem_exec = calloc(sizeof(*gem_exec), num_objects + 1);
@ -112,17 +112,19 @@ static int run(unsigned batch_size,
mem_reloc[n].read_domains = I915_GEM_DOMAIN_RENDER; mem_reloc[n].read_domains = I915_GEM_DOMAIN_RENDER;
} }
size = ALIGN(sizeof(*mem_reloc)*num_relocs, 4096); if (num_relocs) {
reloc_handle = gem_create(fd, size); size = ALIGN(sizeof(*mem_reloc)*num_relocs, 4096);
reloc = gem_mmap__cpu(fd, reloc_handle, 0, size, PROT_READ | PROT_WRITE); reloc_handle = gem_create(fd, size);
memcpy(reloc, mem_reloc, sizeof(*mem_reloc)*num_relocs);
munmap(reloc, size);
if (flags & FAULT) {
igt_disable_prefault();
reloc = gem_mmap__cpu(fd, reloc_handle, 0, size, PROT_READ | PROT_WRITE); reloc = gem_mmap__cpu(fd, reloc_handle, 0, size, PROT_READ | PROT_WRITE);
} else memcpy(reloc, mem_reloc, sizeof(*mem_reloc)*num_relocs);
reloc = mem_reloc; munmap(reloc, size);
if (flags & FAULT) {
igt_disable_prefault();
reloc = gem_mmap__cpu(fd, reloc_handle, 0, size, PROT_READ | PROT_WRITE);
} else
reloc = mem_reloc;
}
gem_exec[num_objects].relocation_count = num_relocs; gem_exec[num_objects].relocation_count = num_relocs;
gem_exec[num_objects].relocs_ptr = (uintptr_t)reloc; gem_exec[num_objects].relocs_ptr = (uintptr_t)reloc;
@ -158,7 +160,7 @@ static int run(unsigned batch_size,
gem_exec[num_objects].handle = cycle[c]; gem_exec[num_objects].handle = cycle[c];
} }
} }
if (flags & FAULT) { if (flags & FAULT && reloc) {
munmap(reloc, size); munmap(reloc, size);
reloc = gem_mmap__cpu(fd, reloc_handle, 0, size, PROT_READ | PROT_WRITE); reloc = gem_mmap__cpu(fd, reloc_handle, 0, size, PROT_READ | PROT_WRITE);
gem_exec[num_objects].relocs_ptr = (uintptr_t)reloc; gem_exec[num_objects].relocs_ptr = (uintptr_t)reloc;
@ -169,7 +171,7 @@ static int run(unsigned batch_size,
printf("%.3f\n", ELAPSED(&start, &end)); printf("%.3f\n", ELAPSED(&start, &end));
} }
if (flags & FAULT) { if (flags & FAULT && reloc) {
munmap(reloc, size); munmap(reloc, size);
igt_enable_prefault(); igt_enable_prefault();
} }