if (len & ~huge_page_mask(h))
                return -EINVAL;
-       if (len > TASK_SIZE)
+       if (len > mm->context.addr_limit)
                return -ENOMEM;
 
        if (flags & MAP_FIXED) {
        if (addr) {
                addr = ALIGN(addr, huge_page_size(h));
                vma = find_vma(mm, addr);
-               if (TASK_SIZE - len >= addr &&
+               if (mm->context.addr_limit - len >= addr &&
                    (!vma || addr + len <= vma->vm_start))
                        return addr;
        }
 
        struct vm_area_struct *vma;
        struct vm_unmapped_area_info info;
 
-       if (len > TASK_SIZE - mmap_min_addr)
+       if (len > mm->context.addr_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.addr_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.addr_limit;
        info.align_mask = 0;
        return vm_unmapped_area(&info);
 }
        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.addr_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.addr_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.addr_limit;
                addr = vm_unmapped_area(&info);
        }
 
 
        info.align_offset = 0;
 
        addr = TASK_UNMAPPED_BASE;
-       while (addr < TASK_SIZE) {
+       while (addr < mm->context.addr_limit) {
                info.low_limit = addr;
                if (!slice_scan_available(addr, available, 1, &addr))
                        continue;
                 * Check if we need to reduce the range, or if we can
                 * extend it to cover the next available slice.
                 */
-               if (addr >= TASK_SIZE)
-                       addr = TASK_SIZE;
+               if (addr >= mm->context.addr_limit)
+                       addr = mm->context.addr_limit;
                else if (slice_scan_available(addr, available, 1, &next_end)) {
                        addr = next_end;
                        goto next_slice;
 
 
        /* Check parameters */
        if ((addr & ~PAGE_MASK) || (len & ~PAGE_MASK) ||
-           addr >= TASK_SIZE || len >= TASK_SIZE || addr + len > TASK_SIZE)
+           addr >= mm->context.addr_limit || len >= mm->context.addr_limit ||
+           addr + len > mm->context.addr_limit)
                return -EINVAL;
 
        if (is_hugepage_only_range(mm, addr, len))