summaryrefslogtreecommitdiff
path: root/tests/drv_suspend.c
diff options
context:
space:
mode:
Diffstat (limited to 'tests/drv_suspend.c')
-rw-r--r--tests/drv_suspend.c44
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