}
 
 #ifdef HAVE_ARCH_UNMAPPED_AREA
-#ifdef CONFIG_PPC_RADIX_MMU
-/*
- * Same function as generic code used only for radix, because we don't need to overload
- * the generic one. But we will have to duplicate, because hash select
- * HAVE_ARCH_UNMAPPED_AREA
- */
-static unsigned long
-radix__arch_get_unmapped_area(struct file *filp, unsigned long addr,
-                            unsigned long len, unsigned long pgoff,
-                            unsigned long flags)
-{
-       struct mm_struct *mm = current->mm;
-       struct vm_area_struct *vma;
-       int fixed = (flags & MAP_FIXED);
-       unsigned long high_limit;
-       struct vm_unmapped_area_info info;
-
-       high_limit = DEFAULT_MAP_WINDOW;
-       if (addr >= high_limit || (fixed && (addr + len > high_limit)))
-               high_limit = TASK_SIZE;
-
-       if (len > high_limit)
-               return -ENOMEM;
-
-       if (fixed) {
-               if (addr > high_limit - len)
-                       return -ENOMEM;
-               return addr;
-       }
-
-       if (addr) {
-               addr = PAGE_ALIGN(addr);
-               vma = find_vma(mm, addr);
-               if (high_limit - len >= addr && addr >= mmap_min_addr &&
-                   (!vma || addr + len <= vm_start_gap(vma)))
-                       return addr;
-       }
-
-       info.flags = 0;
-       info.length = len;
-       info.low_limit = mm->mmap_base;
-       info.high_limit = high_limit;
-       info.align_mask = 0;
-
-       return vm_unmapped_area(&info);
-}
-
-static unsigned long
-radix__arch_get_unmapped_area_topdown(struct file *filp,
-                                    const unsigned long addr0,
-                                    const unsigned long len,
-                                    const unsigned long pgoff,
-                                    const unsigned long flags)
-{
-       struct vm_area_struct *vma;
-       struct mm_struct *mm = current->mm;
-       unsigned long addr = addr0;
-       int fixed = (flags & MAP_FIXED);
-       unsigned long high_limit;
-       struct vm_unmapped_area_info info;
-
-       high_limit = DEFAULT_MAP_WINDOW;
-       if (addr >= high_limit || (fixed && (addr + len > high_limit)))
-               high_limit = TASK_SIZE;
-
-       if (len > high_limit)
-               return -ENOMEM;
-
-       if (fixed) {
-               if (addr > high_limit - len)
-                       return -ENOMEM;
-               return addr;
-       }
-
-       if (addr) {
-               addr = PAGE_ALIGN(addr);
-               vma = find_vma(mm, addr);
-               if (high_limit - len >= addr && addr >= mmap_min_addr &&
-                   (!vma || addr + len <= vm_start_gap(vma)))
-                       return addr;
-       }
-
-       info.flags = VM_UNMAPPED_AREA_TOPDOWN;
-       info.length = len;
-       info.low_limit = max(PAGE_SIZE, mmap_min_addr);
-       info.high_limit = mm->mmap_base + (high_limit - DEFAULT_MAP_WINDOW);
-       info.align_mask = 0;
-
-       addr = vm_unmapped_area(&info);
-       if (!(addr & ~PAGE_MASK))
-               return addr;
-       VM_BUG_ON(addr != -ENOMEM);
-
-       /*
-        * A failed mmap() very likely causes application failure,
-        * so fall back to the bottom-up function here. This scenario
-        * can happen with large stack limits and large mmap()
-        * allocations.
-        */
-       return radix__arch_get_unmapped_area(filp, addr0, len, pgoff, flags);
-}
-#endif
-
 unsigned long arch_get_unmapped_area(struct file *filp,
                                     unsigned long addr,
                                     unsigned long len,
                                     unsigned long pgoff,
                                     unsigned long flags)
 {
+       if (radix_enabled())
+               return generic_get_unmapped_area(filp, addr, len, pgoff, flags);
+
 #ifdef CONFIG_PPC_64S_HASH_MMU
        return slice_get_unmapped_area(addr, len, flags,
                                       mm_ctx_user_psize(¤t->mm->context), 0);
                                             const unsigned long pgoff,
                                             const unsigned long flags)
 {
+       if (radix_enabled())
+               return generic_get_unmapped_area_topdown(filp, addr0, len, pgoff, flags);
+
 #ifdef CONFIG_PPC_64S_HASH_MMU
        return slice_get_unmapped_area(addr0, len, flags,
                                       mm_ctx_user_psize(¤t->mm->context), 1);
 }
 #endif /* HAVE_ARCH_UNMAPPED_AREA */
 
-static void radix__arch_pick_mmap_layout(struct mm_struct *mm,
-                                       unsigned long random_factor,
-                                       struct rlimit *rlim_stack)
-{
-#ifdef CONFIG_PPC_RADIX_MMU
-       if (mmap_is_legacy(rlim_stack)) {
-               mm->mmap_base = TASK_UNMAPPED_BASE;
-               mm->get_unmapped_area = radix__arch_get_unmapped_area;
-       } else {
-               mm->mmap_base = mmap_base(random_factor, rlim_stack);
-               mm->get_unmapped_area = radix__arch_get_unmapped_area_topdown;
-       }
-#endif
-}
-
 /*
  * This function, called very early during the creation of a new
  * process VM image, sets up which VM layout function to use:
        if (current->flags & PF_RANDOMIZE)
                random_factor = arch_mmap_rnd();
 
-       if (radix_enabled())
-               return radix__arch_pick_mmap_layout(mm, random_factor,
-                                                   rlim_stack);
        /*
         * Fall back to the standard layout if the personality
         * bit is set, or if the expected stack growth is unlimited: