As with get_huge_pages it is appropriate to use MAP_HUGETLB for mappings that will hold the heap.
Signed-off-by: Eric B Munson <emun...@mgebm.net> --- morecore.c | 35 +++++++++++++++++++++++++++-------- 1 files changed, 27 insertions(+), 8 deletions(-) diff --git a/morecore.c b/morecore.c index e120d55..f156c95 100644 --- a/morecore.c +++ b/morecore.c @@ -73,6 +73,8 @@ static void *hugetlbfs_morecore(ptrdiff_t increment) void *p; long delta; int mmap_reserve = __hugetlb_opts.no_reserve ? MAP_NORESERVE : 0; + int using_default_pagesize = + (hpage_size == kernel_default_hugepage_size()); INFO("hugetlbfs_morecore(%ld) = ...\n", (long)increment); @@ -94,8 +96,18 @@ static void *hugetlbfs_morecore(ptrdiff_t increment) INFO("Attempting to map %ld bytes\n", delta); /* map in (extend) more of the file at the end of our last map */ +#ifdef MAP_HUGETLB + if (__hugetlb_opts.map_hugetlb && using_default_pagesize) + p = mmap(heapbase + mapsize, delta, PROT_READ|PROT_WRITE, + MAP_HUGETLB|MAP_ANONYMOUS|MAP_PRIVATE|mmap_reserve, + heap_fd, mapsize); + else + p = mmap(heapbase + mapsize, delta, PROT_READ|PROT_WRITE, + MAP_PRIVATE|mmap_reserve, heap_fd, mapsize); +#else p = mmap(heapbase + mapsize, delta, PROT_READ|PROT_WRITE, MAP_PRIVATE|mmap_reserve, heap_fd, mapsize); +#endif if (p == MAP_FAILED) { WARNING("New heap segment map at %p failed: %s\n", heapbase+mapsize, strerror(errno)); @@ -166,7 +178,7 @@ static void *hugetlbfs_morecore(ptrdiff_t increment) if (ret) { WARNING("Unmapping failed while shrinking heap: " "%s\n", strerror(errno)); - } else { + } else if (!__hugetlb_opts.map_hugetlb && !using_default_pagesize){ /* * Now shrink the hugetlbfs file. @@ -223,15 +235,22 @@ void hugetlbfs_setup_morecore(void) else WARNING("Hugepage size (%s)\n", strerror(errno)); return; - } else if (!hugetlbfs_find_path_for_size(hpage_size)) { - WARNING("Hugepage size %li unavailable", hpage_size); - return; } - heap_fd = hugetlbfs_unlinked_fd_for_size(hpage_size); - if (heap_fd < 0) { - WARNING("Couldn't open hugetlbfs file for morecore\n"); - return; + if(__hugetlb_opts.map_hugetlb && + hpage_size == kernel_default_hugepage_size()) { + heap_fd = -1; + } else { + if (!hugetlbfs_find_path_for_size(hpage_size)) { + WARNING("Hugepage size %li unavailable", hpage_size); + return; + } + + heap_fd = hugetlbfs_unlinked_fd_for_size(hpage_size); + if (heap_fd < 0) { + WARNING("Couldn't open hugetlbfs file for morecore\n"); + return; + } } if (__hugetlb_opts.heapbase) { -- 1.7.1 ------------------------------------------------------------------------------ Beautiful is writing same markup. Internet Explorer 9 supports standards for HTML5, CSS3, SVG 1.1, ECMAScript5, and DOM L2 & L3. Spend less time writing and rewriting code and more time creating great experiences on the web. Be a part of the beta today http://p.sf.net/sfu/msIE9-sfdev2dev _______________________________________________ Libhugetlbfs-devel mailing list Libhugetlbfs-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/libhugetlbfs-devel