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;
}
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;