On Fri, Nov 19, 2010 at 04:33:58PM -0700, Eric B Munson wrote: > 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
Same comment on the ifdef. Avoid if possible to avoid possible drift on the fallback code. > + 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) { -- Mel Gorman Part-time Phd Student Linux Technology Center University of Limerick IBM Dublin Software Lab ------------------------------------------------------------------------------ Increase Visibility of Your 3D Game App & Earn a Chance To Win $500! Tap into the largest installed PC base & get more eyes on your game by optimizing for Intel(R) Graphics Technology. Get started today with the Intel(R) Software Partner Program. Five $500 cash prizes are up for grabs. http://p.sf.net/sfu/intelisp-dev2dev _______________________________________________ Libhugetlbfs-devel mailing list Libhugetlbfs-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/libhugetlbfs-devel