aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMathieu Desnoyers <mathieu.desnoyers@efficios.com>2024-03-13 20:22:08 -0400
committerMathieu Desnoyers <mathieu.desnoyers@efficios.com>2024-03-13 20:22:08 -0400
commitfa6a0fb3ae4724141f2db1a8282d50ad5680af67 (patch)
tree8dbf27057f2a5835673b3aeec0e0dc898053e5d8
parente62b6d5494ffa3c177ff5ba4dbd0c2a5196bdd79 (diff)
downloadlibrseq-fa6a0fb3ae4724141f2db1a8282d50ad5680af67.tar.gz
mempool: Introduce mmap_addr and mmap_len range fields
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com> Change-Id: Ia91571ba9f3535402f456074973875503e688690
-rw-r--r--src/rseq-mempool.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/src/rseq-mempool.c b/src/rseq-mempool.c
index b39c478..f59fc10 100644
--- a/src/rseq-mempool.c
+++ b/src/rseq-mempool.c
@@ -99,6 +99,11 @@ struct rseq_mempool_range {
void *header;
void *base;
size_t next_unused;
+
+ /* Pool range mmap/munmap */
+ void *mmap_addr;
+ size_t mmap_len;
+
/* Track alloc/free. */
unsigned long *alloc_bitmap;
};
@@ -446,8 +451,7 @@ int rseq_mempool_range_destroy(struct rseq_mempool *pool,
{
destroy_alloc_bitmap(pool, range);
/* range is a header located one page before the aligned mapping. */
- return pool->attr.munmap_func(pool->attr.mmap_priv, range->header,
- (pool->attr.stride * pool->attr.max_nr_cpus) + rseq_get_page_len());
+ return pool->attr.munmap_func(pool->attr.mmap_priv, range->mmap_addr, range->mmap_len);
}
/*
@@ -557,6 +561,8 @@ struct rseq_mempool_range *rseq_mempool_range_create(struct rseq_mempool *pool)
range->pool = pool;
range->base = base;
range->header = header;
+ range->mmap_addr = header;
+ range->mmap_len = page_size + (pool->attr.stride * pool->attr.max_nr_cpus);
if (pool->attr.robust_set) {
if (create_alloc_bitmap(pool, range))
goto error_alloc;