From e8869c4bc439de941be399d156323620a2d6ecda Mon Sep 17 00:00:00 2001 From: Chris Wilson Date: Thu, 3 Apr 2014 09:43:58 +0100 Subject: gem_tiled_swapping: Limit to available memory If there is not enough free RAM+swap for us to execute our test, we will hit OOM, so check first. Signed-off-by: Chris Wilson --- lib/igt_aux.h | 1 + lib/intel_os.c | 34 ++++++++++++++++++++++++++++++++++ 2 files changed, 35 insertions(+) (limited to 'lib') diff --git a/lib/igt_aux.h b/lib/igt_aux.h index 25a479f2..948101d2 100644 --- a/lib/igt_aux.h +++ b/lib/igt_aux.h @@ -61,6 +61,7 @@ void igt_wait_for_keypress(void); /* These are separate to allow easier testing when porting, see the comment at * the bottom of intel_os.c. */ +uint64_t intel_get_avail_ram_mb(void); uint64_t intel_get_total_ram_mb(void); uint64_t intel_get_total_swap_mb(void); diff --git a/lib/intel_os.c b/lib/intel_os.c index fb9f19cb..6f0621c7 100644 --- a/lib/intel_os.c +++ b/lib/intel_os.c @@ -85,6 +85,40 @@ intel_get_total_ram_mb(void) return retval / (1024*1024); } +/** + * intel_get_avail_ram_mb: + * + * Returns: + * The amount of unused system RAM available in MB. + */ +uint64_t +intel_get_avail_ram_mb(void) +{ + uint64_t retval; + +#ifdef HAVE_STRUCT_SYSINFO_TOTALRAM /* Linux */ + struct sysinfo sysinf; + int ret; + + ret = sysinfo(&sysinf); + assert(ret == 0); + + retval = sysinf.freeram; + retval *= sysinf.mem_unit; +#elif defined(_SC_PAGESIZE) && defined(_SC_PHYS_PAGES) /* Solaris */ + long pagesize, npages; + + pagesize = sysconf(_SC_PAGESIZE); + npages = sysconf(_SC_AVPHYS_PAGES); + + retval = (uint64_t) pagesize * npages; +#else +#error "Unknown how to get available RAM for this OS" +#endif + + return retval / (1024*1024); +} + /** * intel_get_total_swap_mb: * -- cgit v1.2.3