diff options
Diffstat (limited to 'tests/drv_suspend.c')
-rw-r--r-- | tests/drv_suspend.c | 44 |
1 files changed, 11 insertions, 33 deletions
diff --git a/tests/drv_suspend.c b/tests/drv_suspend.c index 9a9ff200..b4212dca 100644 --- a/tests/drv_suspend.c +++ b/tests/drv_suspend.c @@ -163,52 +163,30 @@ test_sysfs_reader(bool hibernate) static void test_shrink(int fd, unsigned int mode) { - uint64_t *can_mlock, pin; + void *mem; + size_t size; gem_quiescent_gpu(fd); intel_purge_vm_caches(fd); - pin = (intel_get_total_ram_mb() + 1) << 20; - - igt_debug("Total memory %'"PRIu64" B (%'"PRIu64" MiB)\n", - pin, pin >> 20); - can_mlock = mmap(NULL, pin, PROT_WRITE, MAP_SHARED | MAP_ANON, -1, 0); - igt_require(can_mlock != MAP_FAILED); - - /* Lock all the system memory, forcing the driver into swap and OOM */ - for (uint64_t inc = 64 << 20; inc >= 4 << 10; inc >>= 1) { - igt_debug("Testing+ %'"PRIu64" B (%'"PRIu64" MiB)\n", - *can_mlock, *can_mlock >> 20); - - igt_fork(child, 1) { - for (uint64_t bytes = *can_mlock; - bytes <= pin; - bytes += inc) { - if (mlock(can_mlock, bytes)) - break; - - *can_mlock = bytes; - __sync_synchronize(); - } - } - __igt_waitchildren(); - } + size = intel_get_total_pinnable_mem(); + igt_require(size > 64 << 20); + size -= 64 << 20; - intel_purge_vm_caches(fd); + mem = mmap(NULL, size, PROT_READ, MAP_SHARED | MAP_ANON, -1, 0); - igt_require(*can_mlock > 64 << 20); - *can_mlock -= 64 << 20; + intel_purge_vm_caches(fd); igt_debug("Locking %'"PRIu64" B (%'"PRIu64" MiB)\n", - *can_mlock, *can_mlock >> 20); - igt_assert(!mlock(can_mlock, *can_mlock)); + size, size >> 20); + igt_assert(!mlock(mem, size)); igt_info("Locked %'"PRIu64" B (%'"PRIu64" MiB)\n", - *can_mlock, *can_mlock >> 20); + size, size >> 20); intel_purge_vm_caches(fd); igt_system_suspend_autoresume(mode, SUSPEND_TEST_NONE); - munmap(can_mlock, pin); + munmap(mem, size); } static void |