• Kirill A. Shutemov's avatar
    mm/shmem.c: thp, shmem: fix conflict of above-47bit hint address and PMD alignment · 99158997
    Kirill A. Shutemov authored
    Shmem/tmpfs tries to provide THP-friendly mappings if huge pages are
    enabled.  But it doesn't work well with above-47bit hint address.
    
    Normally, the kernel doesn't create userspace mappings above 47-bit,
    even if the machine allows this (such as with 5-level paging on x86-64).
    Not all user space is ready to handle wide addresses.  It's known that
    at least some JIT compilers use higher bits in pointers to encode their
    information.
    
    Userspace can ask for allocation from full address space by specifying
    hint address (with or without MAP_FIXED) above 47-bits.  If the
    application doesn't need a particular address, but wants to allocate
    from whole address space it can specify -1 as a hint address.
    
    Unfortunately, this trick breaks THP alignment in shmem/tmp:
    shmem_get_unmapped_area() would not try to allocate PMD-aligned area if
    *any* hint address specified.
    
    This can be fixed by requesting the aligned area if the we failed to
    allocated at user-specified hint address.  The request with inflated
    length will also take the user-specified hint address.  This way we will
    not lose an allocation request from the full address space.
    
    [kirill@shutemov.name: fold in a fixup]
      Link: http://lkml.kernel.org/r/20191223231309.t6bh5hkbmokihpfu@box
    Link: http://lkml.kernel.org/r/20191220142548.7118-3-kirill.shutemov@linux.intel.com
    Fixes: b569bab7 ("x86/mm: Prepare to expose larger address space to userspace")
    Signed-off-by: default avatarKirill A. Shutemov <kirill.shutemov@linux.intel.com>
    Cc: "Willhalm, Thomas" <thomas.willhalm@intel.com>
    Cc: Dan Williams <dan.j.williams@intel.com>
    Cc: "Bruggeman, Otto G" <otto.g.bruggeman@intel.com>
    Cc: "Aneesh Kumar K . V" <aneesh.kumar@linux.vnet.ibm.com>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    99158997
shmem.c 108 KB