lkml.org 
[lkml]   [2018]   [Jan]   [8]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH] powerpc/mm: Fix growth direction for hugepages mmaps with slice
    Date
    An application running with libhugetlbfs fails to allocate
    additional pages to HEAP due to the hugemap being done
    inconditionally as topdown mapping:

    mmap(0x10080000, 1572864, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS|0x40000, -1, 0) = 0x73e80000
    [...]
    mmap(0x74000000, 1048576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS|0x40000, -1, 0x180000) = 0x73d80000
    munmap(0x73d80000, 1048576) = 0
    [...]
    mmap(0x74000000, 1572864, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS|0x40000, -1, 0x180000) = 0x73d00000
    munmap(0x73d00000, 1572864) = 0
    [...]
    mmap(0x74000000, 1572864, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS|0x40000, -1, 0x180000) = 0x73d00000
    munmap(0x73d00000, 1572864) = 0
    [...]

    As one can see from the above strace log, mmap() allocates further
    pages below the initial one.

    This patch fixes it by taking into account MAP_GROWSDOWN flag.

    Fixes: d0f13e3c20b6f ("[POWERPC] Introduce address space "slices" ")
    Signed-off-by: Christophe Leroy <christophe.leroy@c-s.fr>
    ---
    arch/powerpc/mm/hugetlbpage.c | 3 ++-
    1 file changed, 2 insertions(+), 1 deletion(-)

    diff --git a/arch/powerpc/mm/hugetlbpage.c b/arch/powerpc/mm/hugetlbpage.c
    index 5c5873259127..76330a976f9e 100644
    --- a/arch/powerpc/mm/hugetlbpage.c
    +++ b/arch/powerpc/mm/hugetlbpage.c
    @@ -558,7 +558,8 @@ unsigned long hugetlb_get_unmapped_area(struct file *file, unsigned long addr,
    return radix__hugetlb_get_unmapped_area(file, addr, len,
    pgoff, flags);
    #endif
    - return slice_get_unmapped_area(addr, len, flags, mmu_psize, 1);
    + return slice_get_unmapped_area(addr, len, flags, mmu_psize,
    + flags & MAP_GROWSDOWN);
    }
    #endif

    --
    2.13.3
    \
     
     \ /
      Last update: 2018-01-14 23:17    [W:3.410 / U:0.004 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site