diff --git a/lib/intel_drm.c b/lib/intel_drm.c index 55a534d5..9cc76d3c 100644 --- a/lib/intel_drm.c +++ b/lib/intel_drm.c @@ -36,6 +36,7 @@ #include #include #include +#include #include "intel_gpu_tools.h" #include "i915_drm.h" @@ -73,3 +74,19 @@ int intel_gen(uint32_t devid) return -1; } + +uint64_t +intel_get_total_ram_mb(void) +{ + struct sysinfo sysinf; + uint64_t retval; + int ret; + + ret = sysinfo(&sysinf); + assert(ret == 0); + + retval = sysinf.totalram; + retval *= sysinf.mem_unit; + + return retval / (1024*1024); +} diff --git a/lib/intel_gpu_tools.h b/lib/intel_gpu_tools.h index 4315b503..f2134bf6 100644 --- a/lib/intel_gpu_tools.h +++ b/lib/intel_gpu_tools.h @@ -80,6 +80,7 @@ struct pci_device *intel_get_pci_device(void); uint32_t intel_get_drm_devid(int fd); int intel_gen(uint32_t devid); +uint64_t intel_get_total_ram_mb(void); void intel_map_file(char *); diff --git a/tests/gem_linear_blits.c b/tests/gem_linear_blits.c index ae188ff8..14cf4f4b 100644 --- a/tests/gem_linear_blits.c +++ b/tests/gem_linear_blits.c @@ -248,6 +248,13 @@ int main(int argc, char **argv) count = atoi(argv[1]); if (count == 0) count = 3 * gem_aperture_size(fd) / (1024*1024) / 2; + + if (count > intel_get_total_ram_mb() * 9 / 10) { + count = intel_get_total_ram_mb() * 9 / 10; + fprintf(stderr, "not enough RAM to run test, reducing buffer count\n"); + return 77; + } + printf("Using %d 1MiB buffers\n", count); handle = malloc(sizeof(uint32_t)*count*2); diff --git a/tests/gem_tiled_blits.c b/tests/gem_tiled_blits.c index 54b2d400..8c48b760 100644 --- a/tests/gem_tiled_blits.c +++ b/tests/gem_tiled_blits.c @@ -144,6 +144,13 @@ int main(int argc, char **argv) count = 3 * gem_aperture_size(fd) / (1024*1024) / 2; count += (count & 1) == 0; } + + if (count > intel_get_total_ram_mb() * 9 / 10) { + count = intel_get_total_ram_mb() * 9 / 10; + fprintf(stderr, "not enough RAM to run test, reducing buffer count\n"); + return 77; + } + printf("Using %d 1MiB buffers\n", count); bo = malloc(sizeof(drm_intel_bo *)*count); diff --git a/tests/gem_tiled_fence_blits.c b/tests/gem_tiled_fence_blits.c index 9f41f7be..6d53bcd1 100644 --- a/tests/gem_tiled_fence_blits.c +++ b/tests/gem_tiled_fence_blits.c @@ -148,6 +148,11 @@ int main(int argc, char **argv) fd = drm_open_any(); count = 3 * gem_aperture_size(fd) / (1024*1024) / 2; + if (count > intel_get_total_ram_mb() * 9 / 10) { + count = intel_get_total_ram_mb() * 9 / 10; + fprintf(stderr, "not enough RAM to run test, reducing buffer count\n"); + return 77; + } count |= 1; printf("Using %d 1MiB buffers\n", count);