linux/mm/nommu.c
<<
>>
Prefs
   1/*
   2 *  linux/mm/nommu.c
   3 *
   4 *  Replacement code for mm functions to support CPU's that don't
   5 *  have any form of memory management unit (thus no virtual memory).
   6 *
   7 *  See Documentation/nommu-mmap.txt
   8 *
   9 *  Copyright (c) 2004-2008 David Howells <dhowells@redhat.com>
  10 *  Copyright (c) 2000-2003 David McCullough <davidm@snapgear.com>
  11 *  Copyright (c) 2000-2001 D Jeff Dionne <jeff@uClinux.org>
  12 *  Copyright (c) 2002      Greg Ungerer <gerg@snapgear.com>
  13 *  Copyright (c) 2007-2010 Paul Mundt <lethal@linux-sh.org>
  14 */
  15
  16#include <linux/export.h>
  17#include <linux/mm.h>
  18#include <linux/mman.h>
  19#include <linux/swap.h>
  20#include <linux/file.h>
  21#include <linux/highmem.h>
  22#include <linux/pagemap.h>
  23#include <linux/slab.h>
  24#include <linux/vmalloc.h>
  25#include <linux/blkdev.h>
  26#include <linux/backing-dev.h>
  27#include <linux/mount.h>
  28#include <linux/personality.h>
  29#include <linux/security.h>
  30#include <linux/syscalls.h>
  31#include <linux/audit.h>
  32#include <linux/sched/sysctl.h>
  33
  34#include <asm/uaccess.h>
  35#include <asm/tlb.h>
  36#include <asm/tlbflush.h>
  37#include <asm/mmu_context.h>
  38#include "internal.h"
  39
  40#if 0
  41#define kenter(FMT, ...) \
  42        printk(KERN_DEBUG "==> %s("FMT")\n", __func__, ##__VA_ARGS__)
  43#define kleave(FMT, ...) \
  44        printk(KERN_DEBUG "<== %s()"FMT"\n", __func__, ##__VA_ARGS__)
  45#define kdebug(FMT, ...) \
  46        printk(KERN_DEBUG "xxx" FMT"yyy\n", ##__VA_ARGS__)
  47#else
  48#define kenter(FMT, ...) \
  49        no_printk(KERN_DEBUG "==> %s("FMT")\n", __func__, ##__VA_ARGS__)
  50#define kleave(FMT, ...) \
  51        no_printk(KERN_DEBUG "<== %s()"FMT"\n", __func__, ##__VA_ARGS__)
  52#define kdebug(FMT, ...) \
  53        no_printk(KERN_DEBUG FMT"\n", ##__VA_ARGS__)
  54#endif
  55
  56void *high_memory;
  57struct page *mem_map;
  58unsigned long max_mapnr;
  59unsigned long num_physpages;
  60unsigned long highest_memmap_pfn;
  61struct percpu_counter vm_committed_as;
  62int sysctl_overcommit_memory = OVERCOMMIT_GUESS; /* heuristic overcommit */
  63int sysctl_overcommit_ratio = 50; /* default is 50% */
  64int sysctl_max_map_count = DEFAULT_MAX_MAP_COUNT;
  65int sysctl_nr_trim_pages = CONFIG_NOMMU_INITIAL_TRIM_EXCESS;
  66unsigned long sysctl_user_reserve_kbytes __read_mostly = 1UL << 17; /* 128MB */
  67unsigned long sysctl_admin_reserve_kbytes __read_mostly = 1UL << 13; /* 8MB */
  68int heap_stack_gap = 0;
  69
  70atomic_long_t mmap_pages_allocated;
  71
  72/*
  73 * The global memory commitment made in the system can be a metric
  74 * that can be used to drive ballooning decisions when Linux is hosted
  75 * as a guest. On Hyper-V, the host implements a policy engine for dynamically
  76 * balancing memory across competing virtual machines that are hosted.
  77 * Several metrics drive this policy engine including the guest reported
  78 * memory commitment.
  79 */
  80unsigned long vm_memory_committed(void)
  81{
  82        return percpu_counter_read_positive(&vm_committed_as);
  83}
  84
  85EXPORT_SYMBOL_GPL(vm_memory_committed);
  86
  87EXPORT_SYMBOL(mem_map);
  88EXPORT_SYMBOL(num_physpages);
  89
  90/* list of mapped, potentially shareable regions */
  91static struct kmem_cache *vm_region_jar;
  92struct rb_root nommu_region_tree = RB_ROOT;
  93DECLARE_RWSEM(nommu_region_sem);
  94
  95const struct vm_operations_struct generic_file_vm_ops = {
  96};
  97
  98/*
  99 * Return the total memory allocated for this pointer, not
 100 * just what the caller asked for.
 101 *
 102 * Doesn't have to be accurate, i.e. may have races.
 103 */
 104unsigned int kobjsize(const void *objp)
 105{
 106        struct page *page;
 107
 108        /*
 109         * If the object we have should not have ksize performed on it,
 110         * return size of 0
 111         */
 112        if (!objp || !virt_addr_valid(objp))
 113                return 0;
 114
 115        page = virt_to_head_page(objp);
 116
 117        /*
 118         * If the allocator sets PageSlab, we know the pointer came from
 119         * kmalloc().
 120         */
 121        if (PageSlab(page))
 122                return ksize(objp);
 123
 124        /*
 125         * If it's not a compound page, see if we have a matching VMA
 126         * region. This test is intentionally done in reverse order,
 127         * so if there's no VMA, we still fall through and hand back
 128         * PAGE_SIZE for 0-order pages.
 129         */
 130        if (!PageCompound(page)) {
 131                struct vm_area_struct *vma;
 132
 133                vma = find_vma(current->mm, (unsigned long)objp);
 134                if (vma)
 135                        return vma->vm_end - vma->vm_start;
 136        }
 137
 138        /*
 139         * The ksize() function is only guaranteed to work for pointers
 140         * returned by kmalloc(). So handle arbitrary pointers here.
 141         */
 142        return PAGE_SIZE << compound_order(page);
 143}
 144
 145long __get_user_pages(struct task_struct *tsk, struct mm_struct *mm,
 146                      unsigned long start, unsigned long nr_pages,
 147                      unsigned int foll_flags, struct page **pages,
 148                      struct vm_area_struct **vmas, int *nonblocking)
 149{
 150        struct vm_area_struct *vma;
 151        unsigned long vm_flags;
 152        int i;
 153
 154        /* calculate required read or write permissions.
 155         * If FOLL_FORCE is set, we only require the "MAY" flags.
 156         */
 157        vm_flags  = (foll_flags & FOLL_WRITE) ?
 158                        (VM_WRITE | VM_MAYWRITE) : (VM_READ | VM_MAYREAD);
 159        vm_flags &= (foll_flags & FOLL_FORCE) ?
 160                        (VM_MAYREAD | VM_MAYWRITE) : (VM_READ | VM_WRITE);
 161
 162        for (i = 0; i < nr_pages; i++) {
 163                vma = find_vma(mm, start);
 164                if (!vma)
 165                        goto finish_or_fault;
 166
 167                /* protect what we can, including chardevs */
 168                if ((vma->vm_flags & (VM_IO | VM_PFNMAP)) ||
 169                    !(vm_flags & vma->vm_flags))
 170                        goto finish_or_fault;
 171
 172                if (pages) {
 173                        pages[i] = virt_to_page(start);
 174                        if (pages[i])
 175                                page_cache_get(pages[i]);
 176                }
 177                if (vmas)
 178                        vmas[i] = vma;
 179                start = (start + PAGE_SIZE) & PAGE_MASK;
 180        }
 181
 182        return i;
 183
 184finish_or_fault:
 185        return i ? : -EFAULT;
 186}
 187
 188/*
 189 * get a list of pages in an address range belonging to the specified process
 190 * and indicate the VMA that covers each page
 191 * - this is potentially dodgy as we may end incrementing the page count of a
 192 *   slab page or a secondary page from a compound page
 193 * - don't permit access to VMAs that don't support it, such as I/O mappings
 194 */
 195long get_user_pages(struct task_struct *tsk, struct mm_struct *mm,
 196                    unsigned long start, unsigned long nr_pages,
 197                    int write, int force, struct page **pages,
 198                    struct vm_area_struct **vmas)
 199{
 200        int flags = 0;
 201
 202        if (write)
 203                flags |= FOLL_WRITE;
 204        if (force)
 205                flags |= FOLL_FORCE;
 206
 207        return __get_user_pages(tsk, mm, start, nr_pages, flags, pages, vmas,
 208                                NULL);
 209}
 210EXPORT_SYMBOL(get_user_pages);
 211
 212/**
 213 * follow_pfn - look up PFN at a user virtual address
 214 * @vma: memory mapping
 215 * @address: user virtual address
 216 * @pfn: location to store found PFN
 217 *
 218 * Only IO mappings and raw PFN mappings are allowed.
 219 *
 220 * Returns zero and the pfn at @pfn on success, -ve otherwise.
 221 */
 222int follow_pfn(struct vm_area_struct *vma, unsigned long address,
 223        unsigned long *pfn)
 224{
 225        if (!(vma->vm_flags & (VM_IO | VM_PFNMAP)))
 226                return -EINVAL;
 227
 228        *pfn = address >> PAGE_SHIFT;
 229        return 0;
 230}
 231EXPORT_SYMBOL(follow_pfn);
 232
 233LIST_HEAD(vmap_area_list);
 234
 235void vfree(const void *addr)
 236{
 237        kfree(addr);
 238}
 239EXPORT_SYMBOL(vfree);
 240
 241void *__vmalloc(unsigned long size, gfp_t gfp_mask, pgprot_t prot)
 242{
 243        /*
 244         *  You can't specify __GFP_HIGHMEM with kmalloc() since kmalloc()
 245         * returns only a logical address.
 246         */
 247        return kmalloc(size, (gfp_mask | __GFP_COMP) & ~__GFP_HIGHMEM);
 248}
 249EXPORT_SYMBOL(__vmalloc);
 250
 251void *vmalloc_user(unsigned long size)
 252{
 253        void *ret;
 254
 255        ret = __vmalloc(size, GFP_KERNEL | __GFP_HIGHMEM | __GFP_ZERO,
 256                        PAGE_KERNEL);
 257        if (ret) {
 258                struct vm_area_struct *vma;
 259
 260                down_write(&current->mm->mmap_sem);
 261                vma = find_vma(current->mm, (unsigned long)ret);
 262                if (vma)
 263                        vma->vm_flags |= VM_USERMAP;
 264                up_write(&current->mm->mmap_sem);
 265        }
 266
 267        return ret;
 268}
 269EXPORT_SYMBOL(vmalloc_user);
 270
 271struct page *vmalloc_to_page(const void *addr)
 272{
 273        return virt_to_page(addr);
 274}
 275EXPORT_SYMBOL(vmalloc_to_page);
 276
 277unsigned long vmalloc_to_pfn(const void *addr)
 278{
 279        return page_to_pfn(virt_to_page(addr));
 280}
 281EXPORT_SYMBOL(vmalloc_to_pfn);
 282
 283long vread(char *buf, char *addr, unsigned long count)
 284{
 285        memcpy(buf, addr, count);
 286        return count;
 287}
 288
 289long vwrite(char *buf, char *addr, unsigned long count)
 290{
 291        /* Don't allow overflow */
 292        if ((unsigned long) addr + count < count)
 293                count = -(unsigned long) addr;
 294
 295        memcpy(addr, buf, count);
 296        return(count);
 297}
 298
 299/*
 300 *      vmalloc  -  allocate virtually continguos memory
 301 *
 302 *      @size:          allocation size
 303 *
 304 *      Allocate enough pages to cover @size from the page level
 305 *      allocator and map them into continguos kernel virtual space.
 306 *
 307 *      For tight control over page level allocator and protection flags
 308 *      use __vmalloc() instead.
 309 */
 310void *vmalloc(unsigned long size)
 311{
 312       return __vmalloc(size, GFP_KERNEL | __GFP_HIGHMEM, PAGE_KERNEL);
 313}
 314EXPORT_SYMBOL(vmalloc);
 315
 316/*
 317 *      vzalloc - allocate virtually continguos memory with zero fill
 318 *
 319 *      @size:          allocation size
 320 *
 321 *      Allocate enough pages to cover @size from the page level
 322 *      allocator and map them into continguos kernel virtual space.
 323 *      The memory allocated is set to zero.
 324 *
 325 *      For tight control over page level allocator and protection flags
 326 *      use __vmalloc() instead.
 327 */
 328void *vzalloc(unsigned long size)
 329{
 330        return __vmalloc(size, GFP_KERNEL | __GFP_HIGHMEM | __GFP_ZERO,
 331                        PAGE_KERNEL);
 332}
 333EXPORT_SYMBOL(vzalloc);
 334
 335/**
 336 * vmalloc_node - allocate memory on a specific node
 337 * @size:       allocation size
 338 * @node:       numa node
 339 *
 340 * Allocate enough pages to cover @size from the page level
 341 * allocator and map them into contiguous kernel virtual space.
 342 *
 343 * For tight control over page level allocator and protection flags
 344 * use __vmalloc() instead.
 345 */
 346void *vmalloc_node(unsigned long size, int node)
 347{
 348        return vmalloc(size);
 349}
 350EXPORT_SYMBOL(vmalloc_node);
 351
 352/**
 353 * vzalloc_node - allocate memory on a specific node with zero fill
 354 * @size:       allocation size
 355 * @node:       numa node
 356 *
 357 * Allocate enough pages to cover @size from the page level
 358 * allocator and map them into contiguous kernel virtual space.
 359 * The memory allocated is set to zero.
 360 *
 361 * For tight control over page level allocator and protection flags
 362 * use __vmalloc() instead.
 363 */
 364void *vzalloc_node(unsigned long size, int node)
 365{
 366        return vzalloc(size);
 367}
 368EXPORT_SYMBOL(vzalloc_node);
 369
 370#ifndef PAGE_KERNEL_EXEC
 371# define PAGE_KERNEL_EXEC PAGE_KERNEL
 372#endif
 373
 374/**
 375 *      vmalloc_exec  -  allocate virtually contiguous, executable memory
 376 *      @size:          allocation size
 377 *
 378 *      Kernel-internal function to allocate enough pages to cover @size
 379 *      the page level allocator and map them into contiguous and
 380 *      executable kernel virtual space.
 381 *
 382 *      For tight control over page level allocator and protection flags
 383 *      use __vmalloc() instead.
 384 */
 385
 386void *vmalloc_exec(unsigned long size)
 387{
 388        return __vmalloc(size, GFP_KERNEL | __GFP_HIGHMEM, PAGE_KERNEL_EXEC);
 389}
 390
 391/**
 392 * vmalloc_32  -  allocate virtually contiguous memory (32bit addressable)
 393 *      @size:          allocation size
 394 *
 395 *      Allocate enough 32bit PA addressable pages to cover @size from the
 396 *      page level allocator and map them into continguos kernel virtual space.
 397 */
 398void *vmalloc_32(unsigned long size)
 399{
 400        return __vmalloc(size, GFP_KERNEL, PAGE_KERNEL);
 401}
 402EXPORT_SYMBOL(vmalloc_32);
 403
 404/**
 405 * vmalloc_32_user - allocate zeroed virtually contiguous 32bit memory
 406 *      @size:          allocation size
 407 *
 408 * The resulting memory area is 32bit addressable and zeroed so it can be
 409 * mapped to userspace without leaking data.
 410 *
 411 * VM_USERMAP is set on the corresponding VMA so that subsequent calls to
 412 * remap_vmalloc_range() are permissible.
 413 */
 414void *vmalloc_32_user(unsigned long size)
 415{
 416        /*
 417         * We'll have to sort out the ZONE_DMA bits for 64-bit,
 418         * but for now this can simply use vmalloc_user() directly.
 419         */
 420        return vmalloc_user(size);
 421}
 422EXPORT_SYMBOL(vmalloc_32_user);
 423
 424void *vmap(struct page **pages, unsigned int count, unsigned long flags, pgprot_t prot)
 425{
 426        BUG();
 427        return NULL;
 428}
 429EXPORT_SYMBOL(vmap);
 430
 431void vunmap(const void *addr)
 432{
 433        BUG();
 434}
 435EXPORT_SYMBOL(vunmap);
 436
 437void *vm_map_ram(struct page **pages, unsigned int count, int node, pgprot_t prot)
 438{
 439        BUG();
 440        return NULL;
 441}
 442EXPORT_SYMBOL(vm_map_ram);
 443
 444void vm_unmap_ram(const void *mem, unsigned int count)
 445{
 446        BUG();
 447}
 448EXPORT_SYMBOL(vm_unmap_ram);
 449
 450void vm_unmap_aliases(void)
 451{
 452}
 453EXPORT_SYMBOL_GPL(vm_unmap_aliases);
 454
 455/*
 456 * Implement a stub for vmalloc_sync_all() if the architecture chose not to
 457 * have one.
 458 */
 459void  __attribute__((weak)) vmalloc_sync_all(void)
 460{
 461}
 462
 463/**
 464 *      alloc_vm_area - allocate a range of kernel address space
 465 *      @size:          size of the area
 466 *
 467 *      Returns:        NULL on failure, vm_struct on success
 468 *
 469 *      This function reserves a range of kernel address space, and
 470 *      allocates pagetables to map that range.  No actual mappings
 471 *      are created.  If the kernel address space is not shared
 472 *      between processes, it syncs the pagetable across all
 473 *      processes.
 474 */
 475struct vm_struct *alloc_vm_area(size_t size, pte_t **ptes)
 476{
 477        BUG();
 478        return NULL;
 479}
 480EXPORT_SYMBOL_GPL(alloc_vm_area);
 481
 482void free_vm_area(struct vm_struct *area)
 483{
 484        BUG();
 485}
 486EXPORT_SYMBOL_GPL(free_vm_area);
 487
 488int vm_insert_page(struct vm_area_struct *vma, unsigned long addr,
 489                   struct page *page)
 490{
 491        return -EINVAL;
 492}
 493EXPORT_SYMBOL(vm_insert_page);
 494
 495/*
 496 *  sys_brk() for the most part doesn't need the global kernel
 497 *  lock, except when an application is doing something nasty
 498 *  like trying to un-brk an area that has already been mapped
 499 *  to a regular file.  in this case, the unmapping will need
 500 *  to invoke file system routines that need the global lock.
 501 */
 502SYSCALL_DEFINE1(brk, unsigned long, brk)
 503{
 504        struct mm_struct *mm = current->mm;
 505
 506        if (brk < mm->start_brk || brk > mm->context.end_brk)
 507                return mm->brk;
 508
 509        if (mm->brk == brk)
 510                return mm->brk;
 511
 512        /*
 513         * Always allow shrinking brk
 514         */
 515        if (brk <= mm->brk) {
 516                mm->brk = brk;
 517                return brk;
 518        }
 519
 520        /*
 521         * Ok, looks good - let it rip.
 522         */
 523        flush_icache_range(mm->brk, brk);
 524        return mm->brk = brk;
 525}
 526
 527/*
 528 * initialise the VMA and region record slabs
 529 */
 530void __init mmap_init(void)
 531{
 532        int ret;
 533
 534        ret = percpu_counter_init(&vm_committed_as, 0);
 535        VM_BUG_ON(ret);
 536        vm_region_jar = KMEM_CACHE(vm_region, SLAB_PANIC);
 537}
 538
 539/*
 540 * validate the region tree
 541 * - the caller must hold the region lock
 542 */
 543#ifdef CONFIG_DEBUG_NOMMU_REGIONS
 544static noinline void validate_nommu_regions(void)
 545{
 546        struct vm_region *region, *last;
 547        struct rb_node *p, *lastp;
 548
 549        lastp = rb_first(&nommu_region_tree);
 550        if (!lastp)
 551                return;
 552
 553        last = rb_entry(lastp, struct vm_region, vm_rb);
 554        BUG_ON(unlikely(last->vm_end <= last->vm_start));
 555        BUG_ON(unlikely(last->vm_top < last->vm_end));
 556
 557        while ((p = rb_next(lastp))) {
 558                region = rb_entry(p, struct vm_region, vm_rb);
 559                last = rb_entry(lastp, struct vm_region, vm_rb);
 560
 561                BUG_ON(unlikely(region->vm_end <= region->vm_start));
 562                BUG_ON(unlikely(region->vm_top < region->vm_end));
 563                BUG_ON(unlikely(region->vm_start < last->vm_top));
 564
 565                lastp = p;
 566        }
 567}
 568#else
 569static void validate_nommu_regions(void)
 570{
 571}
 572#endif
 573
 574/*
 575 * add a region into the global tree
 576 */
 577static void add_nommu_region(struct vm_region *region)
 578{
 579        struct vm_region *pregion;
 580        struct rb_node **p, *parent;
 581
 582        validate_nommu_regions();
 583
 584        parent = NULL;
 585        p = &nommu_region_tree.rb_node;
 586        while (*p) {
 587                parent = *p;
 588                pregion = rb_entry(parent, struct vm_region, vm_rb);
 589                if (region->vm_start < pregion->vm_start)
 590                        p = &(*p)->rb_left;
 591                else if (region->vm_start > pregion->vm_start)
 592                        p = &(*p)->rb_right;
 593                else if (pregion == region)
 594                        return;
 595                else
 596                        BUG();
 597        }
 598
 599        rb_link_node(&region->vm_rb, parent, p);
 600        rb_insert_color(&region->vm_rb, &nommu_region_tree);
 601
 602        validate_nommu_regions();
 603}
 604
 605/*
 606 * delete a region from the global tree
 607 */
 608static void delete_nommu_region(struct vm_region *region)
 609{
 610        BUG_ON(!nommu_region_tree.rb_node);
 611
 612        validate_nommu_regions();
 613        rb_erase(&region->vm_rb, &nommu_region_tree);
 614        validate_nommu_regions();
 615}
 616
 617/*
 618 * free a contiguous series of pages
 619 */
 620static void free_page_series(unsigned long from, unsigned long to)
 621{
 622        for (; from < to; from += PAGE_SIZE) {
 623                struct page *page = virt_to_page(from);
 624
 625                kdebug("- free %lx", from);
 626                atomic_long_dec(&mmap_pages_allocated);
 627                if (page_count(page) != 1)
 628                        kdebug("free page %p: refcount not one: %d",
 629                               page, page_count(page));
 630                put_page(page);
 631        }
 632}
 633
 634/*
 635 * release a reference to a region
 636 * - the caller must hold the region semaphore for writing, which this releases
 637 * - the region may not have been added to the tree yet, in which case vm_top
 638 *   will equal vm_start
 639 */
 640static void __put_nommu_region(struct vm_region *region)
 641        __releases(nommu_region_sem)
 642{
 643        kenter("%p{%d}", region, region->vm_usage);
 644
 645        BUG_ON(!nommu_region_tree.rb_node);
 646
 647        if (--region->vm_usage == 0) {
 648                if (region->vm_top > region->vm_start)
 649                        delete_nommu_region(region);
 650                up_write(&nommu_region_sem);
 651
 652                if (region->vm_file)
 653                        fput(region->vm_file);
 654
 655                /* IO memory and memory shared directly out of the pagecache
 656                 * from ramfs/tmpfs mustn't be released here */
 657                if (region->vm_flags & VM_MAPPED_COPY) {
 658                        kdebug("free series");
 659                        free_page_series(region->vm_start, region->vm_top);
 660                }
 661                kmem_cache_free(vm_region_jar, region);
 662        } else {
 663                up_write(&nommu_region_sem);
 664        }
 665}
 666
 667/*
 668 * release a reference to a region
 669 */
 670static void put_nommu_region(struct vm_region *region)
 671{
 672        down_write(&nommu_region_sem);
 673        __put_nommu_region(region);
 674}
 675
 676/*
 677 * update protection on a vma
 678 */
 679static void protect_vma(struct vm_area_struct *vma, unsigned long flags)
 680{
 681#ifdef CONFIG_MPU
 682        struct mm_struct *mm = vma->vm_mm;
 683        long start = vma->vm_start & PAGE_MASK;
 684        while (start < vma->vm_end) {
 685                protect_page(mm, start, flags);
 686                start += PAGE_SIZE;
 687        }
 688        update_protections(mm);
 689#endif
 690}
 691
 692/*
 693 * add a VMA into a process's mm_struct in the appropriate place in the list
 694 * and tree and add to the address space's page tree also if not an anonymous
 695 * page
 696 * - should be called with mm->mmap_sem held writelocked
 697 */
 698static void add_vma_to_mm(struct mm_struct *mm, struct vm_area_struct *vma)
 699{
 700        struct vm_area_struct *pvma, *prev;
 701        struct address_space *mapping;
 702        struct rb_node **p, *parent, *rb_prev;
 703
 704        kenter(",%p", vma);
 705
 706        BUG_ON(!vma->vm_region);
 707
 708        mm->map_count++;
 709        vma->vm_mm = mm;
 710
 711        protect_vma(vma, vma->vm_flags);
 712
 713        /* add the VMA to the mapping */
 714        if (vma->vm_file) {
 715                mapping = vma->vm_file->f_mapping;
 716
 717                mutex_lock(&mapping->i_mmap_mutex);
 718                flush_dcache_mmap_lock(mapping);
 719                vma_interval_tree_insert(vma, &mapping->i_mmap);
 720                flush_dcache_mmap_unlock(mapping);
 721                mutex_unlock(&mapping->i_mmap_mutex);
 722        }
 723
 724        /* add the VMA to the tree */
 725        parent = rb_prev = NULL;
 726        p = &mm->mm_rb.rb_node;
 727        while (*p) {
 728                parent = *p;
 729                pvma = rb_entry(parent, struct vm_area_struct, vm_rb);
 730
 731                /* sort by: start addr, end addr, VMA struct addr in that order
 732                 * (the latter is necessary as we may get identical VMAs) */
 733                if (vma->vm_start < pvma->vm_start)
 734                        p = &(*p)->rb_left;
 735                else if (vma->vm_start > pvma->vm_start) {
 736                        rb_prev = parent;
 737                        p = &(*p)->rb_right;
 738                } else if (vma->vm_end < pvma->vm_end)
 739                        p = &(*p)->rb_left;
 740                else if (vma->vm_end > pvma->vm_end) {
 741                        rb_prev = parent;
 742                        p = &(*p)->rb_right;
 743                } else if (vma < pvma)
 744                        p = &(*p)->rb_left;
 745                else if (vma > pvma) {
 746                        rb_prev = parent;
 747                        p = &(*p)->rb_right;
 748                } else
 749                        BUG();
 750        }
 751
 752        rb_link_node(&vma->vm_rb, parent, p);
 753        rb_insert_color(&vma->vm_rb, &mm->mm_rb);
 754
 755        /* add VMA to the VMA list also */
 756        prev = NULL;
 757        if (rb_prev)
 758                prev = rb_entry(rb_prev, struct vm_area_struct, vm_rb);
 759
 760        __vma_link_list(mm, vma, prev, parent);
 761}
 762
 763/*
 764 * delete a VMA from its owning mm_struct and address space
 765 */
 766static void delete_vma_from_mm(struct vm_area_struct *vma)
 767{
 768        struct address_space *mapping;
 769        struct mm_struct *mm = vma->vm_mm;
 770
 771        kenter("%p", vma);
 772
 773        protect_vma(vma, 0);
 774
 775        mm->map_count--;
 776        if (mm->mmap_cache == vma)
 777                mm->mmap_cache = NULL;
 778
 779        /* remove the VMA from the mapping */
 780        if (vma->vm_file) {
 781                mapping = vma->vm_file->f_mapping;
 782
 783                mutex_lock(&mapping->i_mmap_mutex);
 784                flush_dcache_mmap_lock(mapping);
 785                vma_interval_tree_remove(vma, &mapping->i_mmap);
 786                flush_dcache_mmap_unlock(mapping);
 787                mutex_unlock(&mapping->i_mmap_mutex);
 788        }
 789
 790        /* remove from the MM's tree and list */
 791        rb_erase(&vma->vm_rb, &mm->mm_rb);
 792
 793        if (vma->vm_prev)
 794                vma->vm_prev->vm_next = vma->vm_next;
 795        else
 796                mm->mmap = vma->vm_next;
 797
 798        if (vma->vm_next)
 799                vma->vm_next->vm_prev = vma->vm_prev;
 800}
 801
 802/*
 803 * destroy a VMA record
 804 */
 805static void delete_vma(struct mm_struct *mm, struct vm_area_struct *vma)
 806{
 807        kenter("%p", vma);
 808        if (vma->vm_ops && vma->vm_ops->close)
 809                vma->vm_ops->close(vma);
 810        if (vma->vm_file)
 811                fput(vma->vm_file);
 812        put_nommu_region(vma->vm_region);
 813        kmem_cache_free(vm_area_cachep, vma);
 814}
 815
 816/*
 817 * look up the first VMA in which addr resides, NULL if none
 818 * - should be called with mm->mmap_sem at least held readlocked
 819 */
 820struct vm_area_struct *find_vma(struct mm_struct *mm, unsigned long addr)
 821{
 822        struct vm_area_struct *vma;
 823
 824        /* check the cache first */
 825        vma = ACCESS_ONCE(mm->mmap_cache);
 826        if (vma && vma->vm_start <= addr && vma->vm_end > addr)
 827                return vma;
 828
 829        /* trawl the list (there may be multiple mappings in which addr
 830         * resides) */
 831        for (vma = mm->mmap; vma; vma = vma->vm_next) {
 832                if (vma->vm_start > addr)
 833                        return NULL;
 834                if (vma->vm_end > addr) {
 835                        mm->mmap_cache = vma;
 836                        return vma;
 837                }
 838        }
 839
 840        return NULL;
 841}
 842EXPORT_SYMBOL(find_vma);
 843
 844/*
 845 * find a VMA
 846 * - we don't extend stack VMAs under NOMMU conditions
 847 */
 848struct vm_area_struct *find_extend_vma(struct mm_struct *mm, unsigned long addr)
 849{
 850        return find_vma(mm, addr);
 851}
 852
 853/*
 854 * expand a stack to a given address
 855 * - not supported under NOMMU conditions
 856 */
 857int expand_stack(struct vm_area_struct *vma, unsigned long address)
 858{
 859        return -ENOMEM;
 860}
 861
 862/*
 863 * look up the first VMA exactly that exactly matches addr
 864 * - should be called with mm->mmap_sem at least held readlocked
 865 */
 866static struct vm_area_struct *find_vma_exact(struct mm_struct *mm,
 867                                             unsigned long addr,
 868                                             unsigned long len)
 869{
 870        struct vm_area_struct *vma;
 871        unsigned long end = addr + len;
 872
 873        /* check the cache first */
 874        vma = mm->mmap_cache;
 875        if (vma && vma->vm_start == addr && vma->vm_end == end)
 876                return vma;
 877
 878        /* trawl the list (there may be multiple mappings in which addr
 879         * resides) */
 880        for (vma = mm->mmap; vma; vma = vma->vm_next) {
 881                if (vma->vm_start < addr)
 882                        continue;
 883                if (vma->vm_start > addr)
 884                        return NULL;
 885                if (vma->vm_end == end) {
 886                        mm->mmap_cache = vma;
 887                        return vma;
 888                }
 889        }
 890
 891        return NULL;
 892}
 893
 894/*
 895 * determine whether a mapping should be permitted and, if so, what sort of
 896 * mapping we're capable of supporting
 897 */
 898static int validate_mmap_request(struct file *file,
 899                                 unsigned long addr,
 900                                 unsigned long len,
 901                                 unsigned long prot,
 902                                 unsigned long flags,
 903                                 unsigned long pgoff,
 904                                 unsigned long *_capabilities)
 905{
 906        unsigned long capabilities, rlen;
 907        int ret;
 908
 909        /* do the simple checks first */
 910        if (flags & MAP_FIXED) {
 911                printk(KERN_DEBUG
 912                       "%d: Can't do fixed-address/overlay mmap of RAM\n",
 913                       current->pid);
 914                return -EINVAL;
 915        }
 916
 917        if ((flags & MAP_TYPE) != MAP_PRIVATE &&
 918            (flags & MAP_TYPE) != MAP_SHARED)
 919                return -EINVAL;
 920
 921        if (!len)
 922                return -EINVAL;
 923
 924        /* Careful about overflows.. */
 925        rlen = PAGE_ALIGN(len);
 926        if (!rlen || rlen > TASK_SIZE)
 927                return -ENOMEM;
 928
 929        /* offset overflow? */
 930        if ((pgoff + (rlen >> PAGE_SHIFT)) < pgoff)
 931                return -EOVERFLOW;
 932
 933        if (file) {
 934                /* validate file mapping requests */
 935                struct address_space *mapping;
 936
 937                /* files must support mmap */
 938                if (!file->f_op || !file->f_op->mmap)
 939                        return -ENODEV;
 940
 941                /* work out if what we've got could possibly be shared
 942                 * - we support chardevs that provide their own "memory"
 943                 * - we support files/blockdevs that are memory backed
 944                 */
 945                mapping = file->f_mapping;
 946                if (!mapping)
 947                        mapping = file_inode(file)->i_mapping;
 948
 949                capabilities = 0;
 950                if (mapping && mapping->backing_dev_info)
 951                        capabilities = mapping->backing_dev_info->capabilities;
 952
 953                if (!capabilities) {
 954                        /* no explicit capabilities set, so assume some
 955                         * defaults */
 956                        switch (file_inode(file)->i_mode & S_IFMT) {
 957                        case S_IFREG:
 958                        case S_IFBLK:
 959                                capabilities = BDI_CAP_MAP_COPY;
 960                                break;
 961
 962                        case S_IFCHR:
 963                                capabilities =
 964                                        BDI_CAP_MAP_DIRECT |
 965                                        BDI_CAP_READ_MAP |
 966                                        BDI_CAP_WRITE_MAP;
 967                                break;
 968
 969                        default:
 970                                return -EINVAL;
 971                        }
 972                }
 973
 974                /* eliminate any capabilities that we can't support on this
 975                 * device */
 976                if (!file->f_op->get_unmapped_area)
 977                        capabilities &= ~BDI_CAP_MAP_DIRECT;
 978                if (!file->f_op->read)
 979                        capabilities &= ~BDI_CAP_MAP_COPY;
 980
 981                /* The file shall have been opened with read permission. */
 982                if (!(file->f_mode & FMODE_READ))
 983                        return -EACCES;
 984
 985                if (flags & MAP_SHARED) {
 986                        /* do checks for writing, appending and locking */
 987                        if ((prot & PROT_WRITE) &&
 988                            !(file->f_mode & FMODE_WRITE))
 989                                return -EACCES;
 990
 991                        if (IS_APPEND(file_inode(file)) &&
 992                            (file->f_mode & FMODE_WRITE))
 993                                return -EACCES;
 994
 995                        if (locks_verify_locked(file_inode(file)))
 996                                return -EAGAIN;
 997
 998                        if (!(capabilities & BDI_CAP_MAP_DIRECT))
 999                                return -ENODEV;
1000
1001                        /* we mustn't privatise shared mappings */
1002                        capabilities &= ~BDI_CAP_MAP_COPY;
1003                }
1004                else {
1005                        /* we're going to read the file into private memory we
1006                         * allocate */
1007                        if (!(capabilities & BDI_CAP_MAP_COPY))
1008                                return -ENODEV;
1009
1010                        /* we don't permit a private writable mapping to be
1011                         * shared with the backing device */
1012                        if (prot & PROT_WRITE)
1013                                capabilities &= ~BDI_CAP_MAP_DIRECT;
1014                }
1015
1016                if (capabilities & BDI_CAP_MAP_DIRECT) {
1017                        if (((prot & PROT_READ)  && !(capabilities & BDI_CAP_READ_MAP))  ||
1018                            ((prot & PROT_WRITE) && !(capabilities & BDI_CAP_WRITE_MAP)) ||
1019                            ((prot & PROT_EXEC)  && !(capabilities & BDI_CAP_EXEC_MAP))
1020                            ) {
1021                                capabilities &= ~BDI_CAP_MAP_DIRECT;
1022                                if (flags & MAP_SHARED) {
1023                                        printk(KERN_WARNING
1024                                               "MAP_SHARED not completely supported on !MMU\n");
1025                                        return -EINVAL;
1026                                }
1027                        }
1028                }
1029
1030                /* handle executable mappings and implied executable
1031                 * mappings */
1032                if (file->f_path.mnt->mnt_flags & MNT_NOEXEC) {
1033                        if (prot & PROT_EXEC)
1034                                return -EPERM;
1035                }
1036                else if ((prot & PROT_READ) && !(prot & PROT_EXEC)) {
1037                        /* handle implication of PROT_EXEC by PROT_READ */
1038                        if (current->personality & READ_IMPLIES_EXEC) {
1039                                if (capabilities & BDI_CAP_EXEC_MAP)
1040                                        prot |= PROT_EXEC;
1041                        }
1042                }
1043                else if ((prot & PROT_READ) &&
1044                         (prot & PROT_EXEC) &&
1045                         !(capabilities & BDI_CAP_EXEC_MAP)
1046                         ) {
1047                        /* backing file is not executable, try to copy */
1048                        capabilities &= ~BDI_CAP_MAP_DIRECT;
1049                }
1050        }
1051        else {
1052                /* anonymous mappings are always memory backed and can be
1053                 * privately mapped
1054                 */
1055                capabilities = BDI_CAP_MAP_COPY;
1056
1057                /* handle PROT_EXEC implication by PROT_READ */
1058                if ((prot & PROT_READ) &&
1059                    (current->personality & READ_IMPLIES_EXEC))
1060                        prot |= PROT_EXEC;
1061        }
1062
1063        /* allow the security API to have its say */
1064        ret = security_mmap_addr(addr);
1065        if (ret < 0)
1066                return ret;
1067
1068        /* looks okay */
1069        *_capabilities = capabilities;
1070        return 0;
1071}
1072
1073/*
1074 * we've determined that we can make the mapping, now translate what we
1075 * now know into VMA flags
1076 */
1077static unsigned long determine_vm_flags(struct file *file,
1078                                        unsigned long prot,
1079                                        unsigned long flags,
1080                                        unsigned long capabilities)
1081{
1082        unsigned long vm_flags;
1083
1084        vm_flags = calc_vm_prot_bits(prot) | calc_vm_flag_bits(flags);
1085        /* vm_flags |= mm->def_flags; */
1086
1087        if (!(capabilities & BDI_CAP_MAP_DIRECT)) {
1088                /* attempt to share read-only copies of mapped file chunks */
1089                vm_flags |= VM_MAYREAD | VM_MAYWRITE | VM_MAYEXEC;
1090                if (file && !(prot & PROT_WRITE))
1091                        vm_flags |= VM_MAYSHARE;
1092        } else {
1093                /* overlay a shareable mapping on the backing device or inode
1094                 * if possible - used for chardevs, ramfs/tmpfs/shmfs and
1095                 * romfs/cramfs */
1096                vm_flags |= VM_MAYSHARE | (capabilities & BDI_CAP_VMFLAGS);
1097                if (flags & MAP_SHARED)
1098                        vm_flags |= VM_SHARED;
1099        }
1100
1101        /* refuse to let anyone share private mappings with this process if
1102         * it's being traced - otherwise breakpoints set in it may interfere
1103         * with another untraced process
1104         */
1105        if ((flags & MAP_PRIVATE) && current->ptrace)
1106                vm_flags &= ~VM_MAYSHARE;
1107
1108        return vm_flags;
1109}
1110
1111/*
1112 * set up a shared mapping on a file (the driver or filesystem provides and
1113 * pins the storage)
1114 */
1115static int do_mmap_shared_file(struct vm_area_struct *vma)
1116{
1117        int ret;
1118
1119        ret = vma->vm_file->f_op->mmap(vma->vm_file, vma);
1120        if (ret == 0) {
1121                vma->vm_region->vm_top = vma->vm_region->vm_end;
1122                return 0;
1123        }
1124        if (ret != -ENOSYS)
1125                return ret;
1126
1127        /* getting -ENOSYS indicates that direct mmap isn't possible (as
1128         * opposed to tried but failed) so we can only give a suitable error as
1129         * it's not possible to make a private copy if MAP_SHARED was given */
1130        return -ENODEV;
1131}
1132
1133/*
1134 * set up a private mapping or an anonymous shared mapping
1135 */
1136static int do_mmap_private(struct vm_area_struct *vma,
1137                           struct vm_region *region,
1138                           unsigned long len,
1139                           unsigned long capabilities)
1140{
1141        struct page *pages;
1142        unsigned long total, point, n;
1143        void *base;
1144        int ret, order;
1145
1146        /* invoke the file's mapping function so that it can keep track of
1147         * shared mappings on devices or memory
1148         * - VM_MAYSHARE will be set if it may attempt to share
1149         */
1150        if (capabilities & BDI_CAP_MAP_DIRECT) {
1151                ret = vma->vm_file->f_op->mmap(vma->vm_file, vma);
1152                if (ret == 0) {
1153                        /* shouldn't return success if we're not sharing */
1154                        BUG_ON(!(vma->vm_flags & VM_MAYSHARE));
1155                        vma->vm_region->vm_top = vma->vm_region->vm_end;
1156                        return 0;
1157                }
1158                if (ret != -ENOSYS)
1159                        return ret;
1160
1161                /* getting an ENOSYS error indicates that direct mmap isn't
1162                 * possible (as opposed to tried but failed) so we'll try to
1163                 * make a private copy of the data and map that instead */
1164        }
1165
1166
1167        /* allocate some memory to hold the mapping
1168         * - note that this may not return a page-aligned address if the object
1169         *   we're allocating is smaller than a page
1170         */
1171        order = get_order(len);
1172        kdebug("alloc order %d for %lx", order, len);
1173
1174        pages = alloc_pages(GFP_KERNEL, order);
1175        if (!pages)
1176                goto enomem;
1177
1178        total = 1 << order;
1179        atomic_long_add(total, &mmap_pages_allocated);
1180
1181        point = len >> PAGE_SHIFT;
1182
1183        /* we allocated a power-of-2 sized page set, so we may want to trim off
1184         * the excess */
1185        if (sysctl_nr_trim_pages && total - point >= sysctl_nr_trim_pages) {
1186                while (total > point) {
1187                        order = ilog2(total - point);
1188                        n = 1 << order;
1189                        kdebug("shave %lu/%lu @%lu", n, total - point, total);
1190                        atomic_long_sub(n, &mmap_pages_allocated);
1191                        total -= n;
1192                        set_page_refcounted(pages + total);
1193                        __free_pages(pages + total, order);
1194                }
1195        }
1196
1197        for (point = 1; point < total; point++)
1198                set_page_refcounted(&pages[point]);
1199
1200        base = page_address(pages);
1201        region->vm_flags = vma->vm_flags |= VM_MAPPED_COPY;
1202        region->vm_start = (unsigned long) base;
1203        region->vm_end   = region->vm_start + len;
1204        region->vm_top   = region->vm_start + (total << PAGE_SHIFT);
1205
1206        vma->vm_start = region->vm_start;
1207        vma->vm_end   = region->vm_start + len;
1208
1209        if (vma->vm_file) {
1210                /* read the contents of a file into the copy */
1211                mm_segment_t old_fs;
1212                loff_t fpos;
1213
1214                fpos = vma->vm_pgoff;
1215                fpos <<= PAGE_SHIFT;
1216
1217                old_fs = get_fs();
1218                set_fs(KERNEL_DS);
1219                ret = vma->vm_file->f_op->read(vma->vm_file, base, len, &fpos);
1220                set_fs(old_fs);
1221
1222                if (ret < 0)
1223                        goto error_free;
1224
1225                /* clear the last little bit */
1226                if (ret < len)
1227                        memset(base + ret, 0, len - ret);
1228
1229        }
1230
1231        return 0;
1232
1233error_free:
1234        free_page_series(region->vm_start, region->vm_top);
1235        region->vm_start = vma->vm_start = 0;
1236        region->vm_end   = vma->vm_end = 0;
1237        region->vm_top   = 0;
1238        return ret;
1239
1240enomem:
1241        printk("Allocation of length %lu from process %d (%s) failed\n",
1242               len, current->pid, current->comm);
1243        show_free_areas(0);
1244        return -ENOMEM;
1245}
1246
1247/*
1248 * handle mapping creation for uClinux
1249 */
1250unsigned long do_mmap_pgoff(struct file *file,
1251                            unsigned long addr,
1252                            unsigned long len,
1253                            unsigned long prot,
1254                            unsigned long flags,
1255                            unsigned long pgoff,
1256                            unsigned long *populate)
1257{
1258        struct vm_area_struct *vma;
1259        struct vm_region *region;
1260        struct rb_node *rb;
1261        unsigned long capabilities, vm_flags, result;
1262        int ret;
1263
1264        kenter(",%lx,%lx,%lx,%lx,%lx", addr, len, prot, flags, pgoff);
1265
1266        *populate = 0;
1267
1268        /* decide whether we should attempt the mapping, and if so what sort of
1269         * mapping */
1270        ret = validate_mmap_request(file, addr, len, prot, flags, pgoff,
1271                                    &capabilities);
1272        if (ret < 0) {
1273                kleave(" = %d [val]", ret);
1274                return ret;
1275        }
1276
1277        /* we ignore the address hint */
1278        addr = 0;
1279        len = PAGE_ALIGN(len);
1280
1281        /* we've determined that we can make the mapping, now translate what we
1282         * now know into VMA flags */
1283        vm_flags = determine_vm_flags(file, prot, flags, capabilities);
1284
1285        /* we're going to need to record the mapping */
1286        region = kmem_cache_zalloc(vm_region_jar, GFP_KERNEL);
1287        if (!region)
1288                goto error_getting_region;
1289
1290        vma = kmem_cache_zalloc(vm_area_cachep, GFP_KERNEL);
1291        if (!vma)
1292                goto error_getting_vma;
1293
1294        region->vm_usage = 1;
1295        region->vm_flags = vm_flags;
1296        region->vm_pgoff = pgoff;
1297
1298        INIT_LIST_HEAD(&vma->anon_vma_chain);
1299        vma->vm_flags = vm_flags;
1300        vma->vm_pgoff = pgoff;
1301
1302        if (file) {
1303                region->vm_file = get_file(file);
1304                vma->vm_file = get_file(file);
1305        }
1306
1307        down_write(&nommu_region_sem);
1308
1309        /* if we want to share, we need to check for regions created by other
1310         * mmap() calls that overlap with our proposed mapping
1311         * - we can only share with a superset match on most regular files
1312         * - shared mappings on character devices and memory backed files are
1313         *   permitted to overlap inexactly as far as we are concerned for in
1314         *   these cases, sharing is handled in the driver or filesystem rather
1315         *   than here
1316         */
1317        if (vm_flags & VM_MAYSHARE) {
1318                struct vm_region *pregion;
1319                unsigned long pglen, rpglen, pgend, rpgend, start;
1320
1321                pglen = (len + PAGE_SIZE - 1) >> PAGE_SHIFT;
1322                pgend = pgoff + pglen;
1323
1324                for (rb = rb_first(&nommu_region_tree); rb; rb = rb_next(rb)) {
1325                        pregion = rb_entry(rb, struct vm_region, vm_rb);
1326
1327                        if (!(pregion->vm_flags & VM_MAYSHARE))
1328                                continue;
1329
1330                        /* search for overlapping mappings on the same file */
1331                        if (file_inode(pregion->vm_file) !=
1332                            file_inode(file))
1333                                continue;
1334
1335                        if (pregion->vm_pgoff >= pgend)
1336                                continue;
1337
1338                        rpglen = pregion->vm_end - pregion->vm_start;
1339                        rpglen = (rpglen + PAGE_SIZE - 1) >> PAGE_SHIFT;
1340                        rpgend = pregion->vm_pgoff + rpglen;
1341                        if (pgoff >= rpgend)
1342                                continue;
1343
1344                        /* handle inexactly overlapping matches between
1345                         * mappings */
1346                        if ((pregion->vm_pgoff != pgoff || rpglen != pglen) &&
1347                            !(pgoff >= pregion->vm_pgoff && pgend <= rpgend)) {
1348                                /* new mapping is not a subset of the region */
1349                                if (!(capabilities & BDI_CAP_MAP_DIRECT))
1350                                        goto sharing_violation;
1351                                continue;
1352                        }
1353
1354                        /* we've found a region we can share */
1355                        pregion->vm_usage++;
1356                        vma->vm_region = pregion;
1357                        start = pregion->vm_start;
1358                        start += (pgoff - pregion->vm_pgoff) << PAGE_SHIFT;
1359                        vma->vm_start = start;
1360                        vma->vm_end = start + len;
1361
1362                        if (pregion->vm_flags & VM_MAPPED_COPY) {
1363                                kdebug("share copy");
1364                                vma->vm_flags |= VM_MAPPED_COPY;
1365                        } else {
1366                                kdebug("share mmap");
1367                                ret = do_mmap_shared_file(vma);
1368                                if (ret < 0) {
1369                                        vma->vm_region = NULL;
1370                                        vma->vm_start = 0;
1371                                        vma->vm_end = 0;
1372                                        pregion->vm_usage--;
1373                                        pregion = NULL;
1374                                        goto error_just_free;
1375                                }
1376                        }
1377                        fput(region->vm_file);
1378                        kmem_cache_free(vm_region_jar, region);
1379                        region = pregion;
1380                        result = start;
1381                        goto share;
1382                }
1383
1384                /* obtain the address at which to make a shared mapping
1385                 * - this is the hook for quasi-memory character devices to
1386                 *   tell us the location of a shared mapping
1387                 */
1388                if (capabilities & BDI_CAP_MAP_DIRECT) {
1389                        addr = file->f_op->get_unmapped_area(file, addr, len,
1390                                                             pgoff, flags);
1391                        if (IS_ERR_VALUE(addr)) {
1392                                ret = addr;
1393                                if (ret != -ENOSYS)
1394                                        goto error_just_free;
1395
1396                                /* the driver refused to tell us where to site
1397                                 * the mapping so we'll have to attempt to copy
1398                                 * it */
1399                                ret = -ENODEV;
1400                                if (!(capabilities & BDI_CAP_MAP_COPY))
1401                                        goto error_just_free;
1402
1403                                capabilities &= ~BDI_CAP_MAP_DIRECT;
1404                        } else {
1405                                vma->vm_start = region->vm_start = addr;
1406                                vma->vm_end = region->vm_end = addr + len;
1407                        }
1408                }
1409        }
1410
1411        vma->vm_region = region;
1412
1413        /* set up the mapping
1414         * - the region is filled in if BDI_CAP_MAP_DIRECT is still set
1415         */
1416        if (file && vma->vm_flags & VM_SHARED)
1417                ret = do_mmap_shared_file(vma);
1418        else
1419                ret = do_mmap_private(vma, region, len, capabilities);
1420        if (ret < 0)
1421                goto error_just_free;
1422        add_nommu_region(region);
1423
1424        /* clear anonymous mappings that don't ask for uninitialized data */
1425        if (!vma->vm_file && !(flags & MAP_UNINITIALIZED))
1426                memset((void *)region->vm_start, 0,
1427                       region->vm_end - region->vm_start);
1428
1429        /* okay... we have a mapping; now we have to register it */
1430        result = vma->vm_start;
1431
1432        current->mm->total_vm += len >> PAGE_SHIFT;
1433
1434share:
1435        add_vma_to_mm(current->mm, vma);
1436
1437        /* we flush the region from the icache only when the first executable
1438         * mapping of it is made  */
1439        if (vma->vm_flags & VM_EXEC && !region->vm_icache_flushed) {
1440                flush_icache_range(region->vm_start, region->vm_end);
1441                region->vm_icache_flushed = true;
1442        }
1443
1444        up_write(&nommu_region_sem);
1445
1446        kleave(" = %lx", result);
1447        return result;
1448
1449error_just_free:
1450        up_write(&nommu_region_sem);
1451error:
1452        if (region->vm_file)
1453                fput(region->vm_file);
1454        kmem_cache_free(vm_region_jar, region);
1455        if (vma->vm_file)
1456                fput(vma->vm_file);
1457        kmem_cache_free(vm_area_cachep, vma);
1458        kleave(" = %d", ret);
1459        return ret;
1460
1461sharing_violation:
1462        up_write(&nommu_region_sem);
1463        printk(KERN_WARNING "Attempt to share mismatched mappings\n");
1464        ret = -EINVAL;
1465        goto error;
1466
1467error_getting_vma:
1468        kmem_cache_free(vm_region_jar, region);
1469        printk(KERN_WARNING "Allocation of vma for %lu byte allocation"
1470               " from process %d failed\n",
1471               len, current->pid);
1472        show_free_areas(0);
1473        return -ENOMEM;
1474
1475error_getting_region:
1476        printk(KERN_WARNING "Allocation of vm region for %lu byte allocation"
1477               " from process %d failed\n",
1478               len, current->pid);
1479        show_free_areas(0);
1480        return -ENOMEM;
1481}
1482
1483SYSCALL_DEFINE6(mmap_pgoff, unsigned long, addr, unsigned long, len,
1484                unsigned long, prot, unsigned long, flags,
1485                unsigned long, fd, unsigned long, pgoff)
1486{
1487        struct file *file = NULL;
1488        unsigned long retval = -EBADF;
1489
1490        audit_mmap_fd(fd, flags);
1491        if (!(flags & MAP_ANONYMOUS)) {
1492                file = fget(fd);
1493                if (!file)
1494                        goto out;
1495        }
1496
1497        flags &= ~(MAP_EXECUTABLE | MAP_DENYWRITE);
1498
1499        retval = vm_mmap_pgoff(file, addr, len, prot, flags, pgoff);
1500
1501        if (file)
1502                fput(file);
1503out:
1504        return retval;
1505}
1506
1507#ifdef __ARCH_WANT_SYS_OLD_MMAP
1508struct mmap_arg_struct {
1509        unsigned long addr;
1510        unsigned long len;
1511        unsigned long prot;
1512        unsigned long flags;
1513        unsigned long fd;
1514        unsigned long offset;
1515};
1516
1517SYSCALL_DEFINE1(old_mmap, struct mmap_arg_struct __user *, arg)
1518{
1519        struct mmap_arg_struct a;
1520
1521        if (copy_from_user(&a, arg, sizeof(a)))
1522                return -EFAULT;
1523        if (a.offset & ~PAGE_MASK)
1524                return -EINVAL;
1525
1526        return sys_mmap_pgoff(a.addr, a.len, a.prot, a.flags, a.fd,
1527                              a.offset >> PAGE_SHIFT);
1528}
1529#endif /* __ARCH_WANT_SYS_OLD_MMAP */
1530
1531/*
1532 * split a vma into two pieces at address 'addr', a new vma is allocated either
1533 * for the first part or the tail.
1534 */
1535int split_vma(struct mm_struct *mm, struct vm_area_struct *vma,
1536              unsigned long addr, int new_below)
1537{
1538        struct vm_area_struct *new;
1539        struct vm_region *region;
1540        unsigned long npages;
1541
1542        kenter("");
1543
1544        /* we're only permitted to split anonymous regions (these should have
1545         * only a single usage on the region) */
1546        if (vma->vm_file)
1547                return -ENOMEM;
1548
1549        if (mm->map_count >= sysctl_max_map_count)
1550                return -ENOMEM;
1551
1552        region = kmem_cache_alloc(vm_region_jar, GFP_KERNEL);
1553        if (!region)
1554                return -ENOMEM;
1555
1556        new = kmem_cache_alloc(vm_area_cachep, GFP_KERNEL);
1557        if (!new) {
1558                kmem_cache_free(vm_region_jar, region);
1559                return -ENOMEM;
1560        }
1561
1562        /* most fields are the same, copy all, and then fixup */
1563        *new = *vma;
1564        *region = *vma->vm_region;
1565        new->vm_region = region;
1566
1567        npages = (addr - vma->vm_start) >> PAGE_SHIFT;
1568
1569        if (new_below) {
1570                region->vm_top = region->vm_end = new->vm_end = addr;
1571        } else {
1572                region->vm_start = new->vm_start = addr;
1573                region->vm_pgoff = new->vm_pgoff += npages;
1574        }
1575
1576        if (new->vm_ops && new->vm_ops->open)
1577                new->vm_ops->open(new);
1578
1579        delete_vma_from_mm(vma);
1580        down_write(&nommu_region_sem);
1581        delete_nommu_region(vma->vm_region);
1582        if (new_below) {
1583                vma->vm_region->vm_start = vma->vm_start = addr;
1584                vma->vm_region->vm_pgoff = vma->vm_pgoff += npages;
1585        } else {
1586                vma->vm_region->vm_end = vma->vm_end = addr;
1587                vma->vm_region->vm_top = addr;
1588        }
1589        add_nommu_region(vma->vm_region);
1590        add_nommu_region(new->vm_region);
1591        up_write(&nommu_region_sem);
1592        add_vma_to_mm(mm, vma);
1593        add_vma_to_mm(mm, new);
1594        return 0;
1595}
1596
1597/*
1598 * shrink a VMA by removing the specified chunk from either the beginning or
1599 * the end
1600 */
1601static int shrink_vma(struct mm_struct *mm,
1602                      struct vm_area_struct *vma,
1603                      unsigned long from, unsigned long to)
1604{
1605        struct vm_region *region;
1606
1607        kenter("");
1608
1609        /* adjust the VMA's pointers, which may reposition it in the MM's tree
1610         * and list */
1611        delete_vma_from_mm(vma);
1612        if (from > vma->vm_start)
1613                vma->vm_end = from;
1614        else
1615                vma->vm_start = to;
1616        add_vma_to_mm(mm, vma);
1617
1618        /* cut the backing region down to size */
1619        region = vma->vm_region;
1620        BUG_ON(region->vm_usage != 1);
1621
1622        down_write(&nommu_region_sem);
1623        delete_nommu_region(region);
1624        if (from > region->vm_start) {
1625                to = region->vm_top;
1626                region->vm_top = region->vm_end = from;
1627        } else {
1628                region->vm_start = to;
1629        }
1630        add_nommu_region(region);
1631        up_write(&nommu_region_sem);
1632
1633        free_page_series(from, to);
1634        return 0;
1635}
1636
1637/*
1638 * release a mapping
1639 * - under NOMMU conditions the chunk to be unmapped must be backed by a single
1640 *   VMA, though it need not cover the whole VMA
1641 */
1642int do_munmap(struct mm_struct *mm, unsigned long start, size_t len)
1643{
1644        struct vm_area_struct *vma;
1645        unsigned long end;
1646        int ret;
1647
1648        kenter(",%lx,%zx", start, len);
1649
1650        len = PAGE_ALIGN(len);
1651        if (len == 0)
1652                return -EINVAL;
1653
1654        end = start + len;
1655
1656        /* find the first potentially overlapping VMA */
1657        vma = find_vma(mm, start);
1658        if (!vma) {
1659                static int limit = 0;
1660                if (limit < 5) {
1661                        printk(KERN_WARNING
1662                               "munmap of memory not mmapped by process %d"
1663                               " (%s): 0x%lx-0x%lx\n",
1664                               current->pid, current->comm,
1665                               start, start + len - 1);
1666                        limit++;
1667                }
1668                return -EINVAL;
1669        }
1670
1671        /* we're allowed to split an anonymous VMA but not a file-backed one */
1672        if (vma->vm_file) {
1673                do {
1674                        if (start > vma->vm_start) {
1675                                kleave(" = -EINVAL [miss]");
1676                                return -EINVAL;
1677                        }
1678                        if (end == vma->vm_end)
1679                                goto erase_whole_vma;
1680                        vma = vma->vm_next;
1681                } while (vma);
1682                kleave(" = -EINVAL [split file]");
1683                return -EINVAL;
1684        } else {
1685                /* the chunk must be a subset of the VMA found */
1686                if (start == vma->vm_start && end == vma->vm_end)
1687                        goto erase_whole_vma;
1688                if (start < vma->vm_start || end > vma->vm_end) {
1689                        kleave(" = -EINVAL [superset]");
1690                        return -EINVAL;
1691                }
1692                if (start & ~PAGE_MASK) {
1693                        kleave(" = -EINVAL [unaligned start]");
1694                        return -EINVAL;
1695                }
1696                if (end != vma->vm_end && end & ~PAGE_MASK) {
1697                        kleave(" = -EINVAL [unaligned split]");
1698                        return -EINVAL;
1699                }
1700                if (start != vma->vm_start && end != vma->vm_end) {
1701                        ret = split_vma(mm, vma, start, 1);
1702                        if (ret < 0) {
1703                                kleave(" = %d [split]", ret);
1704                                return ret;
1705                        }
1706                }
1707                return shrink_vma(mm, vma, start, end);
1708        }
1709
1710erase_whole_vma:
1711        delete_vma_from_mm(vma);
1712        delete_vma(mm, vma);
1713        kleave(" = 0");
1714        return 0;
1715}
1716EXPORT_SYMBOL(do_munmap);
1717
1718int vm_munmap(unsigned long addr, size_t len)
1719{
1720        struct mm_struct *mm = current->mm;
1721        int ret;
1722
1723        down_write(&mm->mmap_sem);
1724        ret = do_munmap(mm, addr, len);
1725        up_write(&mm->mmap_sem);
1726        return ret;
1727}
1728EXPORT_SYMBOL(vm_munmap);
1729
1730SYSCALL_DEFINE2(munmap, unsigned long, addr, size_t, len)
1731{
1732        return vm_munmap(addr, len);
1733}
1734
1735/*
1736 * release all the mappings made in a process's VM space
1737 */
1738void exit_mmap(struct mm_struct *mm)
1739{
1740        struct vm_area_struct *vma;
1741
1742        if (!mm)
1743                return;
1744
1745        kenter("");
1746
1747        mm->total_vm = 0;
1748
1749        while ((vma = mm->mmap)) {
1750                mm->mmap = vma->vm_next;
1751                delete_vma_from_mm(vma);
1752                delete_vma(mm, vma);
1753                cond_resched();
1754        }
1755
1756        kleave("");
1757}
1758
1759unsigned long vm_brk(unsigned long addr, unsigned long len)
1760{
1761        return -ENOMEM;
1762}
1763
1764/*
1765 * expand (or shrink) an existing mapping, potentially moving it at the same
1766 * time (controlled by the MREMAP_MAYMOVE flag and available VM space)
1767 *
1768 * under NOMMU conditions, we only permit changing a mapping's size, and only
1769 * as long as it stays within the region allocated by do_mmap_private() and the
1770 * block is not shareable
1771 *
1772 * MREMAP_FIXED is not supported under NOMMU conditions
1773 */
1774static unsigned long do_mremap(unsigned long addr,
1775                        unsigned long old_len, unsigned long new_len,
1776                        unsigned long flags, unsigned long new_addr)
1777{
1778        struct vm_area_struct *vma;
1779
1780        /* insanity checks first */
1781        old_len = PAGE_ALIGN(old_len);
1782        new_len = PAGE_ALIGN(new_len);
1783        if (old_len == 0 || new_len == 0)
1784                return (unsigned long) -EINVAL;
1785
1786        if (addr & ~PAGE_MASK)
1787                return -EINVAL;
1788
1789        if (flags & MREMAP_FIXED && new_addr != addr)
1790                return (unsigned long) -EINVAL;
1791
1792        vma = find_vma_exact(current->mm, addr, old_len);
1793        if (!vma)
1794                return (unsigned long) -EINVAL;
1795
1796        if (vma->vm_end != vma->vm_start + old_len)
1797                return (unsigned long) -EFAULT;
1798
1799        if (vma->vm_flags & VM_MAYSHARE)
1800                return (unsigned long) -EPERM;
1801
1802        if (new_len > vma->vm_region->vm_end - vma->vm_region->vm_start)
1803                return (unsigned long) -ENOMEM;
1804
1805        /* all checks complete - do it */
1806        vma->vm_end = vma->vm_start + new_len;
1807        return vma->vm_start;
1808}
1809
1810SYSCALL_DEFINE5(mremap, unsigned long, addr, unsigned long, old_len,
1811                unsigned long, new_len, unsigned long, flags,
1812                unsigned long, new_addr)
1813{
1814        unsigned long ret;
1815
1816        down_write(&current->mm->mmap_sem);
1817        ret = do_mremap(addr, old_len, new_len, flags, new_addr);
1818        up_write(&current->mm->mmap_sem);
1819        return ret;
1820}
1821
1822struct page *follow_page_mask(struct vm_area_struct *vma,
1823                              unsigned long address, unsigned int flags,
1824                              unsigned int *page_mask)
1825{
1826        *page_mask = 0;
1827        return NULL;
1828}
1829
1830int remap_pfn_range(struct vm_area_struct *vma, unsigned long addr,
1831                unsigned long pfn, unsigned long size, pgprot_t prot)
1832{
1833        if (addr != (pfn << PAGE_SHIFT))
1834                return -EINVAL;
1835
1836        vma->vm_flags |= VM_IO | VM_PFNMAP | VM_DONTEXPAND | VM_DONTDUMP;
1837        return 0;
1838}
1839EXPORT_SYMBOL(remap_pfn_range);
1840
1841int vm_iomap_memory(struct vm_area_struct *vma, phys_addr_t start, unsigned long len)
1842{
1843        unsigned long pfn = start >> PAGE_SHIFT;
1844        unsigned long vm_len = vma->vm_end - vma->vm_start;
1845
1846        pfn += vma->vm_pgoff;
1847        return io_remap_pfn_range(vma, vma->vm_start, pfn, vm_len, vma->vm_page_prot);
1848}
1849EXPORT_SYMBOL(vm_iomap_memory);
1850
1851int remap_vmalloc_range(struct vm_area_struct *vma, void *addr,
1852                        unsigned long pgoff)
1853{
1854        unsigned int size = vma->vm_end - vma->vm_start;
1855
1856        if (!(vma->vm_flags & VM_USERMAP))
1857                return -EINVAL;
1858
1859        vma->vm_start = (unsigned long)(addr + (pgoff << PAGE_SHIFT));
1860        vma->vm_end = vma->vm_start + size;
1861
1862        return 0;
1863}
1864EXPORT_SYMBOL(remap_vmalloc_range);
1865
1866unsigned long arch_get_unmapped_area(struct file *file, unsigned long addr,
1867        unsigned long len, unsigned long pgoff, unsigned long flags)
1868{
1869        return -ENOMEM;
1870}
1871
1872void arch_unmap_area(struct mm_struct *mm, unsigned long addr)
1873{
1874}
1875
1876void unmap_mapping_range(struct address_space *mapping,
1877                         loff_t const holebegin, loff_t const holelen,
1878                         int even_cows)
1879{
1880}
1881EXPORT_SYMBOL(unmap_mapping_range);
1882
1883/*
1884 * Check that a process has enough memory to allocate a new virtual
1885 * mapping. 0 means there is enough memory for the allocation to
1886 * succeed and -ENOMEM implies there is not.
1887 *
1888 * We currently support three overcommit policies, which are set via the
1889 * vm.overcommit_memory sysctl.  See Documentation/vm/overcommit-accounting
1890 *
1891 * Strict overcommit modes added 2002 Feb 26 by Alan Cox.
1892 * Additional code 2002 Jul 20 by Robert Love.
1893 *
1894 * cap_sys_admin is 1 if the process has admin privileges, 0 otherwise.
1895 *
1896 * Note this is a helper function intended to be used by LSMs which
1897 * wish to use this logic.
1898 */
1899int __vm_enough_memory(struct mm_struct *mm, long pages, int cap_sys_admin)
1900{
1901        unsigned long free, allowed, reserve;
1902
1903        vm_acct_memory(pages);
1904
1905        /*
1906         * Sometimes we want to use more memory than we have
1907         */
1908        if (sysctl_overcommit_memory == OVERCOMMIT_ALWAYS)
1909                return 0;
1910
1911        if (sysctl_overcommit_memory == OVERCOMMIT_GUESS) {
1912                free = global_page_state(NR_FREE_PAGES);
1913                free += global_page_state(NR_FILE_PAGES);
1914
1915                /*
1916                 * shmem pages shouldn't be counted as free in this
1917                 * case, they can't be purged, only swapped out, and
1918                 * that won't affect the overall amount of available
1919                 * memory in the system.
1920                 */
1921                free -= global_page_state(NR_SHMEM);
1922
1923                free += get_nr_swap_pages();
1924
1925                /*
1926                 * Any slabs which are created with the
1927                 * SLAB_RECLAIM_ACCOUNT flag claim to have contents
1928                 * which are reclaimable, under pressure.  The dentry
1929                 * cache and most inode caches should fall into this
1930                 */
1931                free += global_page_state(NR_SLAB_RECLAIMABLE);
1932
1933                /*
1934                 * Leave reserved pages. The pages are not for anonymous pages.
1935                 */
1936                if (free <= totalreserve_pages)
1937                        goto error;
1938                else
1939                        free -= totalreserve_pages;
1940
1941                /*
1942                 * Reserve some for root
1943                 */
1944                if (!cap_sys_admin)
1945                        free -= sysctl_admin_reserve_kbytes >> (PAGE_SHIFT - 10);
1946
1947                if (free > pages)
1948                        return 0;
1949
1950                goto error;
1951        }
1952
1953        allowed = totalram_pages * sysctl_overcommit_ratio / 100;
1954        /*
1955         * Reserve some 3% for root
1956         */
1957        if (!cap_sys_admin)
1958                allowed -= sysctl_admin_reserve_kbytes >> (PAGE_SHIFT - 10);
1959        allowed += total_swap_pages;
1960
1961        /*
1962         * Don't let a single process grow so big a user can't recover
1963         */
1964        if (mm) {
1965                reserve = sysctl_user_reserve_kbytes >> (PAGE_SHIFT - 10);
1966                allowed -= min(mm->total_vm / 32, reserve);
1967        }
1968
1969        if (percpu_counter_read_positive(&vm_committed_as) < allowed)
1970                return 0;
1971
1972error:
1973        vm_unacct_memory(pages);
1974
1975        return -ENOMEM;
1976}
1977
1978int in_gate_area_no_mm(unsigned long addr)
1979{
1980        return 0;
1981}
1982
1983int filemap_fault(struct vm_area_struct *vma, struct vm_fault *vmf)
1984{
1985        BUG();
1986        return 0;
1987}
1988EXPORT_SYMBOL(filemap_fault);
1989
1990int generic_file_remap_pages(struct vm_area_struct *vma, unsigned long addr,
1991                             unsigned long size, pgoff_t pgoff)
1992{
1993        BUG();
1994        return 0;
1995}
1996EXPORT_SYMBOL(generic_file_remap_pages);
1997
1998static int __access_remote_vm(struct task_struct *tsk, struct mm_struct *mm,
1999                unsigned long addr, void *buf, int len, int write)
2000{
2001        struct vm_area_struct *vma;
2002
2003        down_read(&mm->mmap_sem);
2004
2005        /* the access must start within one of the target process's mappings */
2006        vma = find_vma(mm, addr);
2007        if (vma) {
2008                /* don't overrun this mapping */
2009                if (addr + len >= vma->vm_end)
2010                        len = vma->vm_end - addr;
2011
2012                /* only read or write mappings where it is permitted */
2013                if (write && vma->vm_flags & VM_MAYWRITE)
2014                        copy_to_user_page(vma, NULL, addr,
2015                                         (void *) addr, buf, len);
2016                else if (!write && vma->vm_flags & VM_MAYREAD)
2017                        copy_from_user_page(vma, NULL, addr,
2018                                            buf, (void *) addr, len);
2019                else
2020                        len = 0;
2021        } else {
2022                len = 0;
2023        }
2024
2025        up_read(&mm->mmap_sem);
2026
2027        return len;
2028}
2029
2030/**
2031 * @access_remote_vm - access another process' address space
2032 * @mm:         the mm_struct of the target address space
2033 * @addr:       start address to access
2034 * @buf:        source or destination buffer
2035 * @len:        number of bytes to transfer
2036 * @write:      whether the access is a write
2037 *
2038 * The caller must hold a reference on @mm.
2039 */
2040int access_remote_vm(struct mm_struct *mm, unsigned long addr,
2041                void *buf, int len, int write)
2042{
2043        return __access_remote_vm(NULL, mm, addr, buf, len, write);
2044}
2045
2046/*
2047 * Access another process' address space.
2048 * - source/target buffer must be kernel space
2049 */
2050int access_process_vm(struct task_struct *tsk, unsigned long addr, void *buf, int len, int write)
2051{
2052        struct mm_struct *mm;
2053
2054        if (addr + len < addr)
2055                return 0;
2056
2057        mm = get_task_mm(tsk);
2058        if (!mm)
2059                return 0;
2060
2061        len = __access_remote_vm(tsk, mm, addr, buf, len, write);
2062
2063        mmput(mm);
2064        return len;
2065}
2066
2067/**
2068 * nommu_shrink_inode_mappings - Shrink the shared mappings on an inode
2069 * @inode: The inode to check
2070 * @size: The current filesize of the inode
2071 * @newsize: The proposed filesize of the inode
2072 *
2073 * Check the shared mappings on an inode on behalf of a shrinking truncate to
2074 * make sure that that any outstanding VMAs aren't broken and then shrink the
2075 * vm_regions that extend that beyond so that do_mmap_pgoff() doesn't
2076 * automatically grant mappings that are too large.
2077 */
2078int nommu_shrink_inode_mappings(struct inode *inode, size_t size,
2079                                size_t newsize)
2080{
2081        struct vm_area_struct *vma;
2082        struct vm_region *region;
2083        pgoff_t low, high;
2084        size_t r_size, r_top;
2085
2086        low = newsize >> PAGE_SHIFT;
2087        high = (size + PAGE_SIZE - 1) >> PAGE_SHIFT;
2088
2089        down_write(&nommu_region_sem);
2090        mutex_lock(&inode->i_mapping->i_mmap_mutex);
2091
2092        /* search for VMAs that fall within the dead zone */
2093        vma_interval_tree_foreach(vma, &inode->i_mapping->i_mmap, low, high) {
2094                /* found one - only interested if it's shared out of the page
2095                 * cache */
2096                if (vma->vm_flags & VM_SHARED) {
2097                        mutex_unlock(&inode->i_mapping->i_mmap_mutex);
2098                        up_write(&nommu_region_sem);
2099                        return -ETXTBSY; /* not quite true, but near enough */
2100                }
2101        }
2102
2103        /* reduce any regions that overlap the dead zone - if in existence,
2104         * these will be pointed to by VMAs that don't overlap the dead zone
2105         *
2106         * we don't check for any regions that start beyond the EOF as there
2107         * shouldn't be any
2108         */
2109        vma_interval_tree_foreach(vma, &inode->i_mapping->i_mmap,
2110                                  0, ULONG_MAX) {
2111                if (!(vma->vm_flags & VM_SHARED))
2112                        continue;
2113
2114                region = vma->vm_region;
2115                r_size = region->vm_top - region->vm_start;
2116                r_top = (region->vm_pgoff << PAGE_SHIFT) + r_size;
2117
2118                if (r_top > newsize) {
2119                        region->vm_top -= r_top - newsize;
2120                        if (region->vm_end > region->vm_top)
2121                                region->vm_end = region->vm_top;
2122                }
2123        }
2124
2125        mutex_unlock(&inode->i_mapping->i_mmap_mutex);
2126        up_write(&nommu_region_sem);
2127        return 0;
2128}
2129
2130/*
2131 * Initialise sysctl_user_reserve_kbytes.
2132 *
2133 * This is intended to prevent a user from starting a single memory hogging
2134 * process, such that they cannot recover (kill the hog) in OVERCOMMIT_NEVER
2135 * mode.
2136 *
2137 * The default value is min(3% of free memory, 128MB)
2138 * 128MB is enough to recover with sshd/login, bash, and top/kill.
2139 */
2140static int __meminit init_user_reserve(void)
2141{
2142        unsigned long free_kbytes;
2143
2144        free_kbytes = global_page_state(NR_FREE_PAGES) << (PAGE_SHIFT - 10);
2145
2146        sysctl_user_reserve_kbytes = min(free_kbytes / 32, 1UL << 17);
2147        return 0;
2148}
2149module_init(init_user_reserve)
2150
2151/*
2152 * Initialise sysctl_admin_reserve_kbytes.
2153 *
2154 * The purpose of sysctl_admin_reserve_kbytes is to allow the sys admin
2155 * to log in and kill a memory hogging process.
2156 *
2157 * Systems with more than 256MB will reserve 8MB, enough to recover
2158 * with sshd, bash, and top in OVERCOMMIT_GUESS. Smaller systems will
2159 * only reserve 3% of free pages by default.
2160 */
2161static int __meminit init_admin_reserve(void)
2162{
2163        unsigned long free_kbytes;
2164
2165        free_kbytes = global_page_state(NR_FREE_PAGES) << (PAGE_SHIFT - 10);
2166
2167        sysctl_admin_reserve_kbytes = min(free_kbytes / 32, 1UL << 13);
2168        return 0;
2169}
2170module_init(init_admin_reserve)
2171
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.