* User space process size: 2GB for 31 bit, 4TB or 8PT for 64 bit.
  */
 
-#define TASK_SIZE_OF(tsk)      ((tsk)->mm ? \
-                                (tsk)->mm->context.asce_limit : TASK_MAX_SIZE)
+#define TASK_SIZE_OF(tsk)      (test_tsk_thread_flag(tsk, TIF_31BIT) ? \
+                                       (1UL << 31) : (1UL << 53))
 #define TASK_UNMAPPED_BASE     (test_thread_flag(TIF_31BIT) ? \
                                        (1UL << 30) : (1UL << 41))
 #define TASK_SIZE              TASK_SIZE_OF(current)
-#define TASK_MAX_SIZE          (1UL << 53)
+#define TASK_SIZE_MAX          (1UL << 53)
 
-#define STACK_TOP              (1UL << (test_thread_flag(TIF_31BIT) ? 31:42))
+#define STACK_TOP              (test_thread_flag(TIF_31BIT) ? \
+                                       (1UL << 31) : (1UL << 42))
 #define STACK_TOP_MAX          (1UL << 42)
 
 #define HAVE_ARCH_PICK_MMAP_LAYOUT
 
        struct vm_area_struct *vma;
        struct vm_unmapped_area_info info;
 
-       if (len > TASK_SIZE - mmap_min_addr)
+       if (len > mm->context.asce_limit - mmap_min_addr)
                return -ENOMEM;
 
        if (flags & MAP_FIXED)
        if (addr) {
                addr = PAGE_ALIGN(addr);
                vma = find_vma(mm, addr);
-               if (TASK_SIZE - len >= addr && addr >= mmap_min_addr &&
+               if (mm->context.asce_limit - len >= addr &&
+                   addr >= mmap_min_addr &&
                    (!vma || addr + len <= vma->vm_start))
                        return addr;
        }
        info.flags = 0;
        info.length = len;
        info.low_limit = mm->mmap_base;
-       info.high_limit = TASK_SIZE;
+       info.high_limit = mm->context.asce_limit;
        if (filp || (flags & MAP_SHARED))
                info.align_mask = MMAP_ALIGN_MASK << PAGE_SHIFT;
        else
        struct vm_unmapped_area_info info;
 
        /* requested length too big for entire address space */
-       if (len > TASK_SIZE - mmap_min_addr)
+       if (len > mm->context.asce_limit - mmap_min_addr)
                return -ENOMEM;
 
        if (flags & MAP_FIXED)
        if (addr) {
                addr = PAGE_ALIGN(addr);
                vma = find_vma(mm, addr);
-               if (TASK_SIZE - len >= addr && addr >= mmap_min_addr &&
+               if (mm->context.asce_limit - len >= addr &&
+                   addr >= mmap_min_addr &&
                                (!vma || addr + len <= vma->vm_start))
                        return addr;
        }
                VM_BUG_ON(addr != -ENOMEM);
                info.flags = 0;
                info.low_limit = TASK_UNMAPPED_BASE;
-               info.high_limit = TASK_SIZE;
+               info.high_limit = mm->context.asce_limit;
                addr = vm_unmapped_area(&info);
        }
 
        return addr;
 }
 
-int s390_mmap_check(unsigned long addr, unsigned long len, unsigned long flags)
-{
-       if (is_compat_task() || TASK_SIZE >= TASK_MAX_SIZE)
-               return 0;
-       if (!(flags & MAP_FIXED))
-               addr = 0;
-       if ((addr + len) >= TASK_SIZE)
-               return crst_table_upgrade(current->mm);
-       return 0;
-}
-
 static unsigned long
 s390_get_unmapped_area(struct file *filp, unsigned long addr,
                unsigned long len, unsigned long pgoff, unsigned long flags)
        area = arch_get_unmapped_area(filp, addr, len, pgoff, flags);
        if (!(area & ~PAGE_MASK))
                return area;
-       if (area == -ENOMEM && !is_compat_task() && TASK_SIZE < TASK_MAX_SIZE) {
+       if (area == -ENOMEM && !is_compat_task() &&
+           current->mm->context.asce_limit < TASK_SIZE_MAX) {
                /* Upgrade the page table to 4 levels and retry. */
                rc = crst_table_upgrade(mm);
                if (rc)
        area = arch_get_unmapped_area_topdown(filp, addr, len, pgoff, flags);
        if (!(area & ~PAGE_MASK))
                return area;
-       if (area == -ENOMEM && !is_compat_task() && TASK_SIZE < TASK_MAX_SIZE) {
+       if (area == -ENOMEM && !is_compat_task() &&
+           current->mm->context.asce_limit < TASK_SIZE_MAX) {
                /* Upgrade the page table to 4 levels and retry. */
                rc = crst_table_upgrade(mm);
                if (rc)
 
        mm->context.asce_limit = 1UL << 53;
        mm->context.asce = __pa(mm->pgd) | _ASCE_TABLE_LENGTH |
                           _ASCE_USER_BITS | _ASCE_TYPE_REGION2;
-       mm->task_size = mm->context.asce_limit;
        spin_unlock_bh(&mm->page_table_lock);
 
        on_each_cpu(__crst_table_upgrade, mm, 0);
        mm->context.asce_limit = 1UL << 31;
        mm->context.asce = __pa(mm->pgd) | _ASCE_TABLE_LENGTH |
                           _ASCE_USER_BITS | _ASCE_TYPE_SEGMENT;
-       mm->task_size = mm->context.asce_limit;
        crst_table_free(mm, (unsigned long *) pgd);
 
        if (current->active_mm == mm)