tests/gem_cpu_reloc: Fix gem_cpu_reloc OOM failure

On android with small memory footprints gem_cpu_reloc can fail
due to OOM.

Refactor gem_cpu_reloc into 2 tests, a basic test which performs
10 relocations and a full test which skips if there is insufficient
memory.

Changed the memory required test to better estimate the actual
RAM used.

v2: Addresed comments from Thomas Wood

Signed-off-by: Derek Morton <derek.j.morton@intel.com>
Signed-off-by: Thomas Wood <thomas.wood@intel.com>
This commit is contained in:
Derek Morton 2015-05-14 09:59:44 +01:00 committed by Thomas Wood
parent 1a80f90b7d
commit 1f6f6c07bd

View File

@ -159,16 +159,14 @@ uint32_t gen8_batch[] = {
uint32_t *batch = gen6_batch; uint32_t *batch = gen6_batch;
uint32_t batch_size = sizeof(gen6_batch); uint32_t batch_size = sizeof(gen6_batch);
igt_simple_main static void run_test(int fd, int count)
{ {
const uint32_t hang[] = {-1, -1, -1, -1}; const uint32_t hang[] = {-1, -1, -1, -1};
const uint32_t end[] = {MI_BATCH_BUFFER_END, 0}; const uint32_t end[] = {MI_BATCH_BUFFER_END, 0};
uint64_t aper_size;
uint32_t noop; uint32_t noop;
uint32_t *handles; uint32_t *handles;
int fd, i, count; int i;
fd = drm_open_any();
noop = intel_get_drm_devid(fd); noop = intel_get_drm_devid(fd);
use_blt = 0; use_blt = 0;
@ -180,13 +178,6 @@ igt_simple_main
batch_size += 2 * 4; batch_size += 2 * 4;
} }
aper_size = gem_mappable_aperture_size();
count = aper_size / 4096 * 2;
if (igt_run_in_simulation())
count = 10;
intel_require_memory(1+count, 4096, CHECK_RAM);
handles = malloc (count * sizeof(uint32_t)); handles = malloc (count * sizeof(uint32_t));
igt_assert(handles); igt_assert(handles);
@ -246,6 +237,41 @@ igt_simple_main
igt_progress("gem_cpu_reloc: ", 2*count+i, 3*count); igt_progress("gem_cpu_reloc: ", 2*count+i, 3*count);
} }
igt_info("Test suceeded, cleanup up - this might take a while.\n"); igt_info("Subtest suceeded, cleanup up - this might take a while.\n");
close(fd); for (i = 0; i < count; i++) {
gem_close(fd, handles[i]);
}
gem_close(fd, noop);
free(handles);
}
igt_main
{
uint64_t aper_size;
int fd, count;
igt_fixture {
fd = drm_open_any();
}
igt_subtest("basic") {
run_test (fd, 10);
}
igt_skip_on_simulation();
igt_subtest("full") {
aper_size = gem_mappable_aperture_size();
count = aper_size / 4096 * 2;
/* count + 2 (noop & bad) buffers. A gem object appears to
require about 2kb + buffer + kernel overhead */
intel_require_memory(2+count, 2048+4096, CHECK_RAM);
run_test (fd, count);
}
igt_fixture {
close(fd);
}
} }