aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWilco Dijkstra <wilco.dijkstra@arm.com>2025-08-08 14:00:11 +0000
committerWilco Dijkstra <wilco.dijkstra@arm.com>2025-08-08 14:00:11 +0000
commit05a14648e92c3da5fa44bdd24e6b56f8d9f38b1a (patch)
tree7abf4b4c1529febe251693367c0959186e7ab96c
parent94ebcfc4f253129ca772392fe034eea6c0aa6963 (diff)
downloadglibc-05a14648e92c3da5fa44bdd24e6b56f8d9f38b1a.zip
glibc-05a14648e92c3da5fa44bdd24e6b56f8d9f38b1a.tar.gz
glibc-05a14648e92c3da5fa44bdd24e6b56f8d9f38b1a.tar.bz2
malloc: Support THP in arenas
Arenas support huge pages but not transparent huge pages. Add this by also checking mp_.thp_pagesize when creating a new arena, and use madvise. Reviewed-by: Adhemerval Zanella  <adhemerval.zanella@linaro.org>
-rw-r--r--malloc/arena.c11
1 files changed, 8 insertions, 3 deletions
diff --git a/malloc/arena.c b/malloc/arena.c
index 90c526f..91a4f36 100644
--- a/malloc/arena.c
+++ b/malloc/arena.c
@@ -444,10 +444,13 @@ alloc_new_heap (size_t size, size_t top_pad, size_t pagesize,
static heap_info *
new_heap (size_t size, size_t top_pad)
{
- if (mp_.hp_pagesize != 0 && mp_.hp_pagesize <= heap_max_size ())
+ bool use_hugepage = mp_.hp_pagesize != 0;
+ size_t pagesize = use_hugepage ? mp_.hp_pagesize : mp_.thp_pagesize;
+
+ if (pagesize != 0 && pagesize <= heap_max_size ())
{
- heap_info *h = alloc_new_heap (size, top_pad, mp_.hp_pagesize,
- mp_.hp_flags);
+ heap_info *h = alloc_new_heap (size, top_pad, pagesize,
+ use_hugepage ? mp_.hp_flags : 0);
if (h != NULL)
return h;
}
@@ -479,6 +482,8 @@ grow_heap (heap_info *h, long diff)
h->mprotect_size = new_size;
}
+ madvise_thp (h, new_size);
+
h->size = new_size;
LIBC_PROBE (memory_heap_more, 2, h, h->size);
return 0;