summaryrefslogtreecommitdiff
path: root/tests/eviction_common.c
diff options
context:
space:
mode:
authorChris Wilson <chris@chris-wilson.co.uk>2019-02-19 22:17:45 +0000
committerChris Wilson <chris@chris-wilson.co.uk>2019-02-28 21:06:49 +0000
commit6be2dc8ddfa332d129149aa3b13db14fa2cd6c0a (patch)
tree732ce1f224a22f059f26c0c2a2de78bf518c8a6c /tests/eviction_common.c
parent0f0db14e7f4ec41251ca156d7cb5b8d531a38006 (diff)
lib: Incrementally mlock()
As we already have the previous portion of the mmap mlocked, we only need to mlock() the fresh portion for testing available memory. v2: Fixup the uint64_t pointer arithmetric and only use a single mmap to avoid subsequent mlock fail (for reasons unknown, but bet on mm/). Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> Cc: Caz Yokoyama <Caz.Yokoyama@intel.com> Reviewed-by: Caz Yokoyama <Caz.Yokoyama@intel.com>
Diffstat (limited to 'tests/eviction_common.c')
-rw-r--r--tests/eviction_common.c17
1 files changed, 9 insertions, 8 deletions
diff --git a/tests/eviction_common.c b/tests/eviction_common.c
index 321772ba..a3b9e416 100644
--- a/tests/eviction_common.c
+++ b/tests/eviction_common.c
@@ -133,23 +133,24 @@ static void mlocked_evictions(int fd, struct igt_eviction_test_ops *ops,
uint64_t surface_size,
uint64_t surface_count)
{
+ uint64_t sz, pin, total;
void *mem;
- uint64_t sz, pin_total;
intel_require_memory(surface_count, surface_size, CHECK_RAM);
- sz = surface_size*surface_count;
- pin_total = intel_get_total_pinnable_mem();
- igt_require(pin_total > sz);
-
- mem = mmap(NULL, pin_total, PROT_READ, MAP_SHARED | MAP_ANON, -1, 0);
+ mem = intel_get_total_pinnable_mem(&total);
igt_assert(mem != MAP_FAILED);
+ pin = *(uint64_t *)mem;
+ igt_assert(!munlock(mem, pin));
+
+ sz = surface_size * surface_count;
+ igt_require(pin > sz);
igt_fork(child, 1) {
uint32_t *bo;
uint64_t n;
int ret;
- size_t lock = pin_total - sz;
+ size_t lock = pin - sz;
bo = malloc(surface_count * sizeof(*bo));
igt_assert(bo);
@@ -186,7 +187,7 @@ static void mlocked_evictions(int fd, struct igt_eviction_test_ops *ops,
}
igt_waitchildren();
- munmap(mem, pin_total);
+ munmap(mem, total);
}
static int swapping_evictions(int fd, struct igt_eviction_test_ops *ops,