summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/igt_aux.h1
-rw-r--r--lib/intel_os.c34
-rw-r--r--tests/gem_tiled_swapping.c13
3 files changed, 45 insertions, 3 deletions
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
@@ -86,6 +86,40 @@ intel_get_total_ram_mb(void)
}
/**
+ * 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:
*
* Returns:
diff --git a/tests/gem_tiled_swapping.c b/tests/gem_tiled_swapping.c
index 74723645..eb1453ca 100644
--- a/tests/gem_tiled_swapping.c
+++ b/tests/gem_tiled_swapping.c
@@ -104,15 +104,22 @@ igt_simple_main
igt_skip_on_simulation();
fd = drm_open_any();
- /* need slightly more than total ram */
- count = intel_get_total_ram_mb() * 11 / 10;
+ /* need slightly more than available memory */
+ count = intel_get_total_ram_mb() + intel_get_total_swap_mb() / 4;
bo_handles = calloc(count, sizeof(uint32_t));
igt_assert(bo_handles);
idx_arr = calloc(count, sizeof(int));
igt_assert(idx_arr);
- igt_require(intel_get_total_ram_mb() / 4 < intel_get_total_swap_mb());
+ igt_log(IGT_LOG_INFO,
+ "Using %d 1MiB objects (available RAM: %ld/%ld, swap: %ld)\n",
+ count,
+ (long)intel_get_avail_ram_mb(),
+ (long)intel_get_total_ram_mb(),
+ (long)intel_get_total_swap_mb());
+
+ igt_require(count < intel_get_avail_ram_mb() + intel_get_total_swap_mb());
for (i = 0; i < count; i++) {
bo_handles[i] = create_bo_and_fill(fd);