• Aneesh Kumar K.V's avatar
    powerpc/mm: Enable mappings above 128TB · f4ea6dcb
    Aneesh Kumar K.V authored
    Not all user space application is ready to handle wide addresses. It's
    known that at least some JIT compilers use higher bits in pointers to
    encode their information. It collides with valid pointers with 512TB
    addresses and leads to crashes.
    
    To mitigate this, we are not going to allocate virtual address space
    above 128TB by default.
    
    But userspace can ask for allocation from full address space by
    specifying hint address (with or without MAP_FIXED) above 128TB.
    
    If hint address set above 128TB, but MAP_FIXED is not specified, we try
    to look for unmapped area by specified address. If it's already
    occupied, we look for unmapped area in *full* address space, rather than
    from 128TB window.
    
    This approach helps to easily make application's memory allocator aware
    about large address space without manually tracking allocated virtual
    address space.
    
    This is going to be a per mmap decision. ie, we can have some mmaps with
    larger addresses and other that do not.
    
    A sample memory layout looks like:
    
      10000000-10010000 r-xp 00000000 fc:00 9057045          /home/max_addr_512TB
      10010000-10020000 r--p 00000000 fc:00 9057045          /home/max_addr_512TB
      10020000-10030000 rw-p 00010000 fc:00 9057045          /home/max_addr_512TB
      10029630000-10029660000 rw-p 00000000 00:00 0          [heap]
      7fff834a0000-7fff834b0000 rw-p 00000000 00:00 0
      7fff834b0000-7fff83670000 r-xp 00000000 fc:00 9177190  /lib/powerpc64le-linux-gnu/libc-2.23.so
      7fff83670000-7fff83680000 r--p 001b0000 fc:00 9177190  /lib/powerpc64le-linux-gnu/libc-2.23.so
      7fff83680000-7fff83690000 rw-p 001c0000 fc:00 9177190  /lib/powerpc64le-linux-gnu/libc-2.23.so
      7fff83690000-7fff836a0000 rw-p 00000000 00:00 0
      7fff836a0000-7fff836c0000 r-xp 00000000 00:00 0        [vdso]
      7fff836c0000-7fff83700000 r-xp 00000000 fc:00 9177193  /lib/powerpc64le-linux-gnu/ld-2.23.so
      7fff83700000-7fff83710000 r--p 00030000 fc:00 9177193  /lib/powerpc64le-linux-gnu/ld-2.23.so
      7fff83710000-7fff83720000 rw-p 00040000 fc:00 9177193  /lib/powerpc64le-linux-gnu/ld-2.23.so
      7fffdccf0000-7fffdcd20000 rw-p 00000000 00:00 0        [stack]
      1000000000000-1000000010000 rw-p 00000000 00:00 0
      1ffff83710000-1ffff83720000 rw-p 00000000 00:00 0
    Signed-off-by: default avatarAneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com>
    Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
    f4ea6dcb
processor.h 14.6 KB