select TTY # Needed for pdc_cons.c
        select HAS_IOPORT if PCI || EISA
        select HAVE_DEBUG_STACKOVERFLOW
+       select ARCH_WANT_DEFAULT_TOPDOWN_MMAP_LAYOUT
+       select HAVE_ARCH_MMAP_RND_COMPAT_BITS if COMPAT
+       select HAVE_ARCH_MMAP_RND_BITS
        select HAVE_ARCH_AUDITSYSCALL
        select HAVE_ARCH_HASH
        select HAVE_ARCH_JUMP_LABEL
        depends on SMP
        default y
 
+config ARCH_MMAP_RND_BITS_MIN
+       default 18 if 64BIT
+       default 8
+
+config ARCH_MMAP_RND_COMPAT_BITS_MIN
+       default 8
+
+config ARCH_MMAP_RND_BITS_MAX
+       default 24 if 64BIT
+       default 17
+
+config ARCH_MMAP_RND_COMPAT_BITS_MAX
+       default 17
+
 # unless you want to implement ACPI on PA-RISC ... ;-)
 config PM
        bool
 
        }
 
        info.flags = 0;
-       info.low_limit = mm->mmap_legacy_base;
+       info.low_limit = mm->mmap_base;
        info.high_limit = mmap_upper_limit(NULL);
        return vm_unmapped_area(&info);
 }
                        addr, len, pgoff, flags, DOWN);
 }
 
-static int mmap_is_legacy(void)
-{
-       if (current->personality & ADDR_COMPAT_LAYOUT)
-               return 1;
-
-       /* parisc stack always grows up - so a unlimited stack should
-        * not be an indicator to use the legacy memory layout.
-        * if (rlimit(RLIMIT_STACK) == RLIM_INFINITY)
-        *      return 1;
-        */
-
-       return sysctl_legacy_va_layout;
-}
-
-static unsigned long mmap_rnd(void)
-{
-       unsigned long rnd = 0;
-
-       if (current->flags & PF_RANDOMIZE)
-               rnd = get_random_u32() & MMAP_RND_MASK;
-
-       return rnd << PAGE_SHIFT;
-}
-
-unsigned long arch_mmap_rnd(void)
-{
-       return (get_random_u32() & MMAP_RND_MASK) << PAGE_SHIFT;
-}
-
-static unsigned long mmap_legacy_base(void)
-{
-       return TASK_UNMAPPED_BASE + mmap_rnd();
-}
-
-/*
- * This function, called very early during the creation of a new
- * process VM image, sets up which VM layout function to use:
- */
-void arch_pick_mmap_layout(struct mm_struct *mm, struct rlimit *rlim_stack)
-{
-       mm->mmap_legacy_base = mmap_legacy_base();
-       mm->mmap_base = mmap_upper_limit(rlim_stack);
-
-       if (mmap_is_legacy()) {
-               mm->mmap_base = mm->mmap_legacy_base;
-               mm->get_unmapped_area = arch_get_unmapped_area;
-       } else {
-               mm->get_unmapped_area = arch_get_unmapped_area_topdown;
-       }
-}
-
-
 asmlinkage unsigned long sys_mmap2(unsigned long addr, unsigned long len,
        unsigned long prot, unsigned long flags, unsigned long fd,
        unsigned long pgoff)
 
        if (current->personality & ADDR_COMPAT_LAYOUT)
                return 1;
 
-       if (rlim_stack->rlim_cur == RLIM_INFINITY)
+       /* On parisc the stack always grows up - so a unlimited stack should
+        * not be an indicator to use the legacy memory layout. */
+       if (rlim_stack->rlim_cur == RLIM_INFINITY &&
+               !IS_ENABLED(CONFIG_STACK_GROWSUP))
                return 1;
 
        return sysctl_legacy_va_layout;