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

Reply via email to