linux-bk/include/linux/mm.h History
<<
>>
Prefs
   1#ifndef _LINUX_MM_H
   2#define _LINUX_MM_H
   3
   4#include <linux/sched.h>
   5#include <linux/errno.h>
   6
   7#ifdef __KERNEL__
   8
   9#include <linux/config.h>
  10#include <linux/gfp.h>
  11#include <linux/list.h>
  12#include <linux/mmzone.h>
  13#include <linux/rbtree.h>
  14#include <linux/prio_tree.h>
  15#include <linux/fs.h>
  16
  17struct mempolicy;
  18struct anon_vma;
  19
  20#ifndef CONFIG_DISCONTIGMEM          /* Don't use mapnrs, do it properly */
  21extern unsigned long max_mapnr;
  22#endif
  23
  24extern unsigned long num_physpages;
  25extern void * high_memory;
  26extern unsigned long vmalloc_earlyreserve;
  27extern int page_cluster;
  28
  29#include <asm/page.h>
  30#include <asm/pgtable.h>
  31#include <asm/processor.h>
  32#include <asm/atomic.h>
  33
  34#ifndef MM_VM_SIZE
  35#define MM_VM_SIZE(mm)  TASK_SIZE
  36#endif
  37
  38/*
  39 * Linux kernel virtual memory manager primitives.
  40 * The idea being to have a "virtual" mm in the same way
  41 * we have a virtual fs - giving a cleaner interface to the
  42 * mm details, and allowing different kinds of memory mappings
  43 * (from shared memory to executable loading to arbitrary
  44 * mmap() functions).
  45 */
  46
  47/*
  48 * This struct defines a memory VMM memory area. There is one of these
  49 * per VM-area/task.  A VM area is any part of the process virtual memory
  50 * space that has a special rule for the page-fault handlers (ie a shared
  51 * library, the executable area etc).
  52 */
  53struct vm_area_struct {
  54        struct mm_struct * vm_mm;       /* The address space we belong to. */
  55        unsigned long vm_start;         /* Our start address within vm_mm. */
  56        unsigned long vm_end;           /* The first byte after our end address
  57                                           within vm_mm. */
  58
  59        /* linked list of VM areas per task, sorted by address */
  60        struct vm_area_struct *vm_next;
  61
  62        pgprot_t vm_page_prot;          /* Access permissions of this VMA. */
  63        unsigned long vm_flags;         /* Flags, listed below. */
  64
  65        struct rb_node vm_rb;
  66
  67        /*
  68         * For areas with an address space and backing store,
  69         * linkage into the address_space->i_mmap prio tree, or
  70         * linkage to the list of like vmas hanging off its node, or
  71         * linkage of vma in the address_space->i_mmap_nonlinear list.
  72         */
  73        union {
  74                struct {
  75                        struct list_head list;
  76                        void *parent;   /* aligns with prio_tree_node parent */
  77                        struct vm_area_struct *head;
  78                } vm_set;
  79
  80                struct prio_tree_node prio_tree_node;
  81        } shared;
  82
  83        /*
  84         * A file's MAP_PRIVATE vma can be in both i_mmap tree and anon_vma
  85         * list, after a COW of one of the file pages.  A MAP_SHARED vma
  86         * can only be in the i_mmap tree.  An anonymous MAP_PRIVATE, stack
  87         * or brk vma (with NULL file) can only be in an anon_vma list.
  88         */
  89        struct list_head anon_vma_node; /* Serialized by anon_vma->lock */
  90        struct anon_vma *anon_vma;      /* Serialized by page_table_lock */
  91
  92        /* Function pointers to deal with this struct. */
  93        struct vm_operations_struct * vm_ops;
  94
  95        /* Information about our backing store: */
  96        unsigned long vm_pgoff;         /* Offset (within vm_file) in PAGE_SIZE
  97                                           units, *not* PAGE_CACHE_SIZE */
  98        struct file * vm_file;          /* File we map to (can be NULL). */
  99        void * vm_private_data;         /* was vm_pte (shared mem) */
 100
 101#ifdef CONFIG_NUMA
 102        struct mempolicy *vm_policy;    /* NUMA policy for the VMA */
 103#endif
 104};
 105
 106/*
 107 * vm_flags..
 108 */
 109#define VM_READ         0x00000001      /* currently active flags */
 110#define VM_WRITE        0x00000002
 111#define VM_EXEC         0x00000004
 112#define VM_SHARED       0x00000008
 113
 114#define VM_MAYREAD      0x00000010      /* limits for mprotect() etc */
 115#define VM_MAYWRITE     0x00000020
 116#define VM_MAYEXEC      0x00000040
 117#define VM_MAYSHARE     0x00000080
 118
 119#define VM_GROWSDOWN    0x00000100      /* general info on the segment */
 120#define VM_GROWSUP      0x00000200
 121#define VM_SHM          0x00000400      /* shared memory area, don't swap out */
 122#define VM_DENYWRITE    0x00000800      /* ETXTBSY on write attempts.. */
 123
 124#define VM_EXECUTABLE   0x00001000
 125#define VM_LOCKED       0x00002000
 126#define VM_IO           0x00004000      /* Memory mapped I/O or similar */
 127
 128                                        /* Used by sys_madvise() */
 129#define VM_SEQ_READ     0x00008000      /* App will access data sequentially */
 130#define VM_RAND_READ    0x00010000      /* App will not benefit from clustered reads */
 131
 132#define VM_DONTCOPY     0x00020000      /* Do not copy this vma on fork */
 133#define VM_DONTEXPAND   0x00040000      /* Cannot expand with mremap() */
 134#define VM_RESERVED     0x00080000      /* Don't unmap it from swap_out */
 135#define VM_ACCOUNT      0x00100000      /* Is a VM accounted object */
 136#define VM_HUGETLB      0x00400000      /* Huge TLB Page VM */
 137#define VM_NONLINEAR    0x00800000      /* Is non-linear (remap_file_pages) */
 138
 139#ifndef VM_STACK_DEFAULT_FLAGS          /* arch can override this */
 140#define VM_STACK_DEFAULT_FLAGS VM_DATA_DEFAULT_FLAGS
 141#endif
 142
 143#ifdef CONFIG_STACK_GROWSUP
 144#define VM_STACK_FLAGS  (VM_GROWSUP | VM_STACK_DEFAULT_FLAGS | VM_ACCOUNT)
 145#else
 146#define VM_STACK_FLAGS  (VM_GROWSDOWN | VM_STACK_DEFAULT_FLAGS | VM_ACCOUNT)
 147#endif
 148
 149#define VM_READHINTMASK                 (VM_SEQ_READ | VM_RAND_READ)
 150#define VM_ClearReadHint(v)             (v)->vm_flags &= ~VM_READHINTMASK
 151#define VM_NormalReadHint(v)            (!((v)->vm_flags & VM_READHINTMASK))
 152#define VM_SequentialReadHint(v)        ((v)->vm_flags & VM_SEQ_READ)
 153#define VM_RandomReadHint(v)            ((v)->vm_flags & VM_RAND_READ)
 154
 155/*
 156 * mapping from the currently active vm_flags protection bits (the
 157 * low four bits) to a page protection mask..
 158 */
 159extern pgprot_t protection_map[16];
 160
 161
 162/*
 163 * These are the virtual MM functions - opening of an area, closing and
 164 * unmapping it (needed to keep files on disk up-to-date etc), pointer
 165 * to the functions called when a no-page or a wp-page exception occurs. 
 166 */
 167struct vm_operations_struct {
 168        void (*open)(struct vm_area_struct * area);
 169        void (*close)(struct vm_area_struct * area);
 170        struct page * (*nopage)(struct vm_area_struct * area, unsigned long address, int *type);
 171        int (*populate)(struct vm_area_struct * area, unsigned long address, unsigned long len, pgprot_t prot, unsigned long pgoff, int nonblock);
 172#ifdef CONFIG_NUMA
 173        int (*set_policy)(struct vm_area_struct *vma, struct mempolicy *new);
 174        struct mempolicy *(*get_policy)(struct vm_area_struct *vma,
 175                                        unsigned long addr);
 176#endif
 177};
 178
 179struct mmu_gather;
 180struct inode;
 181
 182#ifdef ARCH_HAS_ATOMIC_UNSIGNED
 183typedef unsigned page_flags_t;
 184#else
 185typedef unsigned long page_flags_t;
 186#endif
 187
 188/*
 189 * Each physical page in the system has a struct page associated with
 190 * it to keep track of whatever it is we are using the page for at the
 191 * moment. Note that we have no way to track which tasks are using
 192 * a page.
 193 */
 194struct page {
 195        page_flags_t flags;             /* Atomic flags, some possibly
 196                                         * updated asynchronously */
 197        atomic_t _count;                /* Usage count, see below. */
 198        unsigned int mapcount;          /* Count of ptes mapped in mms,
 199                                         * to show when page is mapped
 200                                         * & limit reverse map searches,
 201                                         * protected by PG_maplock.
 202                                         */
 203        unsigned long private;          /* Mapping-private opaque data:
 204                                         * usually used for buffer_heads
 205                                         * if PagePrivate set; used for
 206                                         * swp_entry_t if PageSwapCache
 207                                         */
 208        struct address_space *mapping;  /* If PG_anon clear, points to
 209                                         * inode address_space, or NULL.
 210                                         * If page mapped as anonymous
 211                                         * memory, PG_anon is set, and
 212                                         * it points to anon_vma object.
 213                                         */
 214        pgoff_t index;                  /* Our offset within mapping. */
 215        struct list_head lru;           /* Pageout list, eg. active_list
 216                                         * protected by zone->lru_lock !
 217                                         */
 218        /*
 219         * On machines where all RAM is mapped into kernel address space,
 220         * we can simply calculate the virtual address. On machines with
 221         * highmem some memory is mapped into kernel virtual memory
 222         * dynamically, so we need a place to store that address.
 223         * Note that this field could be 16 bits on x86 ... ;)
 224         *
 225         * Architectures with slow multiplication can define
 226         * WANT_PAGE_VIRTUAL in asm/page.h
 227         */
 228#if defined(WANT_PAGE_VIRTUAL)
 229        void *virtual;                  /* Kernel virtual address (NULL if
 230                                           not kmapped, ie. highmem) */
 231#endif /* WANT_PAGE_VIRTUAL */
 232};
 233
 234/*
 235 * FIXME: take this include out, include page-flags.h in
 236 * files which need it (119 of them)
 237 */
 238#include <linux/page-flags.h>
 239
 240/*
 241 * Methods to modify the page usage count.
 242 *
 243 * What counts for a page usage:
 244 * - cache mapping   (page->mapping)
 245 * - private data    (page->private)
 246 * - page mapped in a task's page tables, each mapping
 247 *   is counted separately
 248 *
 249 * Also, many kernel routines increase the page count before a critical
 250 * routine so they can be sure the page doesn't go away from under them.
 251 *
 252 * Since 2.6.6 (approx), a free page has ->_count = -1.  This is so that we
 253 * can use atomic_add_negative(-1, page->_count) to detect when the page
 254 * becomes free and so that we can also use atomic_inc_and_test to atomically
 255 * detect when we just tried to grab a ref on a page which some other CPU has
 256 * already deemed to be freeable.
 257 *
 258 * NO code should make assumptions about this internal detail!  Use the provided
 259 * macros which retain the old rules: page_count(page) == 0 is a free page.
 260 */
 261
 262/*
 263 * Drop a ref, return true if the logical refcount fell to zero (the page has
 264 * no users)
 265 */
 266#define put_page_testzero(p)                            \
 267        ({                                              \
 268                BUG_ON(page_count(p) == 0);             \
 269                atomic_add_negative(-1, &(p)->_count);  \
 270        })
 271
 272/*
 273 * Grab a ref, return true if the page previously had a logical refcount of
 274 * zero.  ie: returns true if we just grabbed an already-deemed-to-be-free page
 275 */
 276#define get_page_testone(p)     atomic_inc_and_test(&(p)->_count)
 277
 278#define set_page_count(p,v)     atomic_set(&(p)->_count, v - 1)
 279#define __put_page(p)           atomic_dec(&(p)->_count)
 280
 281extern void FASTCALL(__page_cache_release(struct page *));
 282
 283#ifdef CONFIG_HUGETLB_PAGE
 284
 285static inline int page_count(struct page *p)
 286{
 287        if (PageCompound(p))
 288                p = (struct page *)p->private;
 289        return atomic_read(&(p)->_count) + 1;
 290}
 291
 292static inline void get_page(struct page *page)
 293{
 294        if (unlikely(PageCompound(page)))
 295                page = (struct page *)page->private;
 296        atomic_inc(&page->_count);
 297}
 298
 299void put_page(struct page *page);
 300
 301#else           /* CONFIG_HUGETLB_PAGE */
 302
 303#define page_count(p)           (atomic_read(&(p)->_count) + 1)
 304
 305static inline void get_page(struct page *page)
 306{
 307        atomic_inc(&page->_count);
 308}
 309
 310static inline void put_page(struct page *page)
 311{
 312        if (!PageReserved(page) && put_page_testzero(page))
 313                __page_cache_release(page);
 314}
 315
 316#endif          /* CONFIG_HUGETLB_PAGE */
 317
 318/*
 319 * Multiple processes may "see" the same page. E.g. for untouched
 320 * mappings of /dev/null, all processes see the same page full of
 321 * zeroes, and text pages of executables and shared libraries have
 322 * only one copy in memory, at most, normally.
 323 *
 324 * For the non-reserved pages, page_count(page) denotes a reference count.
 325 *   page_count() == 0 means the page is free.
 326 *   page_count() == 1 means the page is used for exactly one purpose
 327 *   (e.g. a private data page of one process).
 328 *
 329 * A page may be used for kmalloc() or anyone else who does a
 330 * __get_free_page(). In this case the page_count() is at least 1, and
 331 * all other fields are unused but should be 0 or NULL. The
 332 * management of this page is the responsibility of the one who uses
 333 * it.
 334 *
 335 * The other pages (we may call them "process pages") are completely
 336 * managed by the Linux memory manager: I/O, buffers, swapping etc.
 337 * The following discussion applies only to them.
 338 *
 339 * A page may belong to an inode's memory mapping. In this case,
 340 * page->mapping is the pointer to the inode, and page->index is the
 341 * file offset of the page, in units of PAGE_CACHE_SIZE.
 342 *
 343 * A page contains an opaque `private' member, which belongs to the
 344 * page's address_space.  Usually, this is the address of a circular
 345 * list of the page's disk buffers.
 346 *
 347 * For pages belonging to inodes, the page_count() is the number of
 348 * attaches, plus 1 if `private' contains something, plus one for
 349 * the page cache itself.
 350 *
 351 * All pages belonging to an inode are in these doubly linked lists:
 352 * mapping->clean_pages, mapping->dirty_pages and mapping->locked_pages;
 353 * using the page->list list_head. These fields are also used for
 354 * freelist managemet (when page_count()==0).
 355 *
 356 * There is also a per-mapping radix tree mapping index to the page
 357 * in memory if present. The tree is rooted at mapping->root.  
 358 *
 359 * All process pages can do I/O:
 360 * - inode pages may need to be read from disk,
 361 * - inode pages which have been modified and are MAP_SHARED may need
 362 *   to be written to disk,
 363 * - private pages which have been modified may need to be swapped out
 364 *   to swap space and (later) to be read back into memory.
 365 */
 366
 367/*
 368 * The zone field is never updated after free_area_init_core()
 369 * sets it, so none of the operations on it need to be atomic.
 370 * We'll have up to (MAX_NUMNODES * MAX_NR_ZONES) zones total,
 371 * so we use (MAX_NODES_SHIFT + MAX_ZONES_SHIFT) here to get enough bits.
 372 */
 373#define NODEZONE_SHIFT (sizeof(page_flags_t)*8 - MAX_NODES_SHIFT - MAX_ZONES_SHIFT)
 374#define NODEZONE(node, zone)    ((node << ZONES_SHIFT) | zone)
 375
 376static inline unsigned long page_zonenum(struct page *page)
 377{
 378        return (page->flags >> NODEZONE_SHIFT) & (~(~0UL << ZONES_SHIFT));
 379}
 380static inline unsigned long page_to_nid(struct page *page)
 381{
 382        return (page->flags >> (NODEZONE_SHIFT + ZONES_SHIFT));
 383}
 384
 385struct zone;
 386extern struct zone *zone_table[];
 387
 388static inline struct zone *page_zone(struct page *page)
 389{
 390        return zone_table[page->flags >> NODEZONE_SHIFT];
 391}
 392
 393static inline void set_page_zone(struct page *page, unsigned long nodezone_num)
 394{
 395        page->flags &= ~(~0UL << NODEZONE_SHIFT);
 396        page->flags |= nodezone_num << NODEZONE_SHIFT;
 397}
 398
 399#ifndef CONFIG_DISCONTIGMEM
 400/* The array of struct pages - for discontigmem use pgdat->lmem_map */
 401extern struct page *mem_map;
 402#endif
 403
 404static inline void *lowmem_page_address(struct page *page)
 405{
 406        return __va(page_to_pfn(page) << PAGE_SHIFT);
 407}
 408
 409#if defined(CONFIG_HIGHMEM) && !defined(WANT_PAGE_VIRTUAL)
 410#define HASHED_PAGE_VIRTUAL
 411#endif
 412
 413#if defined(WANT_PAGE_VIRTUAL)
 414#define page_address(page) ((page)->virtual)
 415#define set_page_address(page, address)                 \
 416        do {                                            \
 417                (page)->virtual = (address);            \
 418        } while(0)
 419#define page_address_init()  do { } while(0)
 420#endif
 421
 422#if defined(HASHED_PAGE_VIRTUAL)
 423void *page_address(struct page *page);
 424void set_page_address(struct page *page, void *virtual);
 425void page_address_init(void);
 426#endif
 427
 428#if !defined(HASHED_PAGE_VIRTUAL) && !defined(WANT_PAGE_VIRTUAL)
 429#define page_address(page) lowmem_page_address(page)
 430#define set_page_address(page, address)  do { } while(0)
 431#define page_address_init()  do { } while(0)
 432#endif
 433
 434/*
 435 * On an anonymous page mapped into a user virtual memory area,
 436 * page->mapping points to its anon_vma, not to a struct address_space.
 437 *
 438 * Please note that, confusingly, "page_mapping" refers to the inode
 439 * address_space which maps the page from disk; whereas "page_mapped"
 440 * refers to user virtual address space into which the page is mapped.
 441 */
 442extern struct address_space swapper_space;
 443static inline struct address_space *page_mapping(struct page *page)
 444{
 445        struct address_space *mapping = NULL;
 446
 447        if (unlikely(PageSwapCache(page)))
 448                mapping = &swapper_space;
 449        else if (likely(!PageAnon(page)))
 450                mapping = page->mapping;
 451        return mapping;
 452}
 453
 454/*
 455 * Return the pagecache index of the passed page.  Regular pagecache pages
 456 * use ->index whereas swapcache pages use ->private
 457 */
 458static inline pgoff_t page_index(struct page *page)
 459{
 460        if (unlikely(PageSwapCache(page)))
 461                return page->private;
 462        return page->index;
 463}
 464
 465/*
 466 * Return true if this page is mapped into pagetables.
 467 */
 468static inline int page_mapped(struct page *page)
 469{
 470        return page->mapcount != 0;
 471}
 472
 473/*
 474 * Error return values for the *_nopage functions
 475 */
 476#define NOPAGE_SIGBUS   (NULL)
 477#define NOPAGE_OOM      ((struct page *) (-1))
 478
 479/*
 480 * Different kinds of faults, as returned by handle_mm_fault().
 481 * Used to decide whether a process gets delivered SIGBUS or
 482 * just gets major/minor fault counters bumped up.
 483 */
 484#define VM_FAULT_OOM    (-1)
 485#define VM_FAULT_SIGBUS 0
 486#define VM_FAULT_MINOR  1
 487#define VM_FAULT_MAJOR  2
 488
 489#define offset_in_page(p)       ((unsigned long)(p) & ~PAGE_MASK)
 490
 491extern void show_free_areas(void);
 492
 493struct page *shmem_nopage(struct vm_area_struct * vma,
 494                        unsigned long address, int *type);
 495int shmem_set_policy(struct vm_area_struct *vma, struct mempolicy *new);
 496struct mempolicy *shmem_get_policy(struct vm_area_struct *vma,
 497                                        unsigned long addr);
 498struct file *shmem_file_setup(char * name, loff_t size, unsigned long flags);
 499void shmem_lock(struct file * file, int lock);
 500int shmem_zero_setup(struct vm_area_struct *);
 501
 502/*
 503 * Parameter block passed down to zap_pte_range in exceptional cases.
 504 */
 505struct zap_details {
 506        struct vm_area_struct *nonlinear_vma;   /* Check page->index if set */
 507        struct address_space *check_mapping;    /* Check page->mapping if set */
 508        pgoff_t first_index;                    /* Lowest page->index to unmap */
 509        pgoff_t last_index;                     /* Highest page->index to unmap */
 510        int atomic;                             /* May not schedule() */
 511};
 512
 513void zap_page_range(struct vm_area_struct *vma, unsigned long address,
 514                unsigned long size, struct zap_details *);
 515int unmap_vmas(struct mmu_gather **tlbp, struct mm_struct *mm,
 516                struct vm_area_struct *start_vma, unsigned long start_addr,
 517                unsigned long end_addr, unsigned long *nr_accounted,
 518                struct zap_details *);
 519void clear_page_tables(struct mmu_gather *tlb, unsigned long first, int nr);
 520int copy_page_range(struct mm_struct *dst, struct mm_struct *src,
 521                        struct vm_area_struct *vma);
 522int zeromap_page_range(struct vm_area_struct *vma, unsigned long from,
 523                        unsigned long size, pgprot_t prot);
 524void unmap_mapping_range(struct address_space *mapping,
 525                loff_t const holebegin, loff_t const holelen, int even_cows);
 526
 527static inline void unmap_shared_mapping_range(struct address_space *mapping,
 528                loff_t const holebegin, loff_t const holelen)
 529{
 530        unmap_mapping_range(mapping, holebegin, holelen, 0);
 531}
 532
 533extern int vmtruncate(struct inode * inode, loff_t offset);
 534extern pmd_t *FASTCALL(__pmd_alloc(struct mm_struct *mm, pgd_t *pgd, unsigned long address));
 535extern pte_t *FASTCALL(pte_alloc_kernel(struct mm_struct *mm, pmd_t *pmd, unsigned long address));
 536extern pte_t *FASTCALL(pte_alloc_map(struct mm_struct *mm, pmd_t *pmd, unsigned long address));
 537extern int install_page(struct mm_struct *mm, struct vm_area_struct *vma, unsigned long addr, struct page *page, pgprot_t prot);
 538extern int install_file_pte(struct mm_struct *mm, struct vm_area_struct *vma, unsigned long addr, unsigned long pgoff, pgprot_t prot);
 539extern int handle_mm_fault(struct mm_struct *mm,struct vm_area_struct *vma, unsigned long address, int write_access);
 540extern int make_pages_present(unsigned long addr, unsigned long end);
 541extern int access_process_vm(struct task_struct *tsk, unsigned long addr, void *buf, int len, int write);
 542void install_arg_page(struct vm_area_struct *, struct page *, unsigned long);
 543
 544int get_user_pages(struct task_struct *tsk, struct mm_struct *mm, unsigned long start,
 545                int len, int write, int force, struct page **pages, struct vm_area_struct **vmas);
 546
 547int __set_page_dirty_buffers(struct page *page);
 548int __set_page_dirty_nobuffers(struct page *page);
 549int redirty_page_for_writepage(struct writeback_control *wbc,
 550                                struct page *page);
 551int FASTCALL(set_page_dirty(struct page *page));
 552int set_page_dirty_lock(struct page *page);
 553int clear_page_dirty_for_io(struct page *page);
 554
 555/*
 556 * Prototype to add a shrinker callback for ageable caches.
 557 * 
 558 * These functions are passed a count `nr_to_scan' and a gfpmask.  They should
 559 * scan `nr_to_scan' objects, attempting to free them.
 560 *
 561 * The callback must the number of objects which remain in the cache.
 562 *
 563 * The callback will be passes nr_to_scan == 0 when the VM is querying the
 564 * cache size, so a fastpath for that case is appropriate.
 565 */
 566typedef int (*shrinker_t)(int nr_to_scan, unsigned int gfp_mask);
 567
 568/*
 569 * Add an aging callback.  The int is the number of 'seeks' it takes
 570 * to recreate one of the objects that these functions age.
 571 */
 572
 573#define DEFAULT_SEEKS 2
 574struct shrinker;
 575extern struct shrinker *set_shrinker(int, shrinker_t);
 576extern void remove_shrinker(struct shrinker *shrinker);
 577
 578/*
 579 * On a two-level page table, this ends up being trivial. Thus the
 580 * inlining and the symmetry break with pte_alloc_map() that does all
 581 * of this out-of-line.
 582 */
 583static inline pmd_t *pmd_alloc(struct mm_struct *mm, pgd_t *pgd, unsigned long address)
 584{
 585        if (pgd_none(*pgd))
 586                return __pmd_alloc(mm, pgd, address);
 587        return pmd_offset(pgd, address);
 588}
 589
 590extern void free_area_init(unsigned long * zones_size);
 591extern void free_area_init_node(int nid, pg_data_t *pgdat, struct page *pmap,
 592        unsigned long * zones_size, unsigned long zone_start_pfn, 
 593        unsigned long *zholes_size);
 594extern void memmap_init_zone(struct page *, unsigned long, int,
 595        unsigned long, unsigned long);
 596extern void mem_init(void);
 597extern void show_mem(void);
 598extern void si_meminfo(struct sysinfo * val);
 599extern void si_meminfo_node(struct sysinfo *val, int nid);
 600
 601static inline void vma_prio_tree_init(struct vm_area_struct *vma)
 602{
 603        vma->shared.vm_set.list.next = NULL;
 604        vma->shared.vm_set.list.prev = NULL;
 605        vma->shared.vm_set.parent = NULL;
 606        vma->shared.vm_set.head = NULL;
 607}
 608
 609/* prio_tree.c */
 610void vma_prio_tree_add(struct vm_area_struct *, struct vm_area_struct *old);
 611void vma_prio_tree_insert(struct vm_area_struct *, struct prio_tree_root *);
 612void vma_prio_tree_remove(struct vm_area_struct *, struct prio_tree_root *);
 613struct vm_area_struct *vma_prio_tree_next(
 614        struct vm_area_struct *, struct prio_tree_root *,
 615        struct prio_tree_iter *, pgoff_t begin, pgoff_t end);
 616
 617/* mmap.c */
 618extern void vma_adjust(struct vm_area_struct *vma, unsigned long start,
 619        unsigned long end, pgoff_t pgoff, struct vm_area_struct *insert);
 620extern struct vm_area_struct *vma_merge(struct mm_struct *,
 621        struct vm_area_struct *prev, unsigned long addr, unsigned long end,
 622        unsigned long vm_flags, struct anon_vma *, struct file *, pgoff_t,
 623        struct mempolicy *);
 624extern struct anon_vma *find_mergeable_anon_vma(struct vm_area_struct *);
 625extern int split_vma(struct mm_struct *,
 626        struct vm_area_struct *, unsigned long addr, int new_below);
 627extern void insert_vm_struct(struct mm_struct *, struct vm_area_struct *);
 628extern void __vma_link_rb(struct mm_struct *, struct vm_area_struct *,
 629        struct rb_node **, struct rb_node *);
 630extern struct vm_area_struct *copy_vma(struct vm_area_struct **,
 631        unsigned long addr, unsigned long len, pgoff_t pgoff);
 632extern void exit_mmap(struct mm_struct *);
 633
 634extern unsigned long get_unmapped_area(struct file *, unsigned long, unsigned long, unsigned long, unsigned long);
 635
 636extern unsigned long do_mmap_pgoff(struct file *file, unsigned long addr,
 637        unsigned long len, unsigned long prot,
 638        unsigned long flag, unsigned long pgoff);
 639
 640static inline unsigned long do_mmap(struct file *file, unsigned long addr,
 641        unsigned long len, unsigned long prot,
 642        unsigned long flag, unsigned long offset)
 643{
 644        unsigned long ret = -EINVAL;
 645        if ((offset + PAGE_ALIGN(len)) < offset)
 646                goto out;
 647        if (!(offset & ~PAGE_MASK))
 648                ret = do_mmap_pgoff(file, addr, len, prot, flag, offset >> PAGE_SHIFT);
 649out:
 650        return ret;
 651}
 652
 653extern int do_munmap(struct mm_struct *, unsigned long, size_t);
 654
 655extern unsigned long do_brk(unsigned long, unsigned long);
 656
 657/* filemap.c */
 658extern unsigned long page_unuse(struct page *);
 659extern void truncate_inode_pages(struct address_space *, loff_t);
 660
 661/* generic vm_area_ops exported for stackable file systems */
 662struct page *filemap_nopage(struct vm_area_struct *, unsigned long, int *);
 663
 664/* mm/page-writeback.c */
 665int write_one_page(struct page *page, int wait);
 666
 667/* readahead.c */
 668#define VM_MAX_READAHEAD        128     /* kbytes */
 669#define VM_MIN_READAHEAD        16      /* kbytes (includes current page) */
 670
 671int do_page_cache_readahead(struct address_space *mapping, struct file *filp,
 672                        unsigned long offset, unsigned long nr_to_read);
 673int force_page_cache_readahead(struct address_space *mapping, struct file *filp,
 674                        unsigned long offset, unsigned long nr_to_read);
 675void page_cache_readahead(struct address_space *mapping, 
 676                          struct file_ra_state *ra,
 677                          struct file *filp,
 678                          unsigned long offset);
 679void handle_ra_miss(struct address_space *mapping, 
 680                    struct file_ra_state *ra, pgoff_t offset);
 681unsigned long max_sane_readahead(unsigned long nr);
 682
 683/* Do stack extension */
 684extern int expand_stack(struct vm_area_struct * vma, unsigned long address);
 685
 686/* Look up the first VMA which satisfies  addr < vm_end,  NULL if none. */
 687extern struct vm_area_struct * find_vma(struct mm_struct * mm, unsigned long addr);
 688extern struct vm_area_struct * find_vma_prev(struct mm_struct * mm, unsigned long addr,
 689                                             struct vm_area_struct **pprev);
 690
 691/* Look up the first VMA which intersects the interval start_addr..end_addr-1,
 692   NULL if none.  Assume start_addr < end_addr. */
 693static inline struct vm_area_struct * find_vma_intersection(struct mm_struct * mm, unsigned long start_addr, unsigned long end_addr)
 694{
 695        struct vm_area_struct * vma = find_vma(mm,start_addr);
 696
 697        if (vma && end_addr <= vma->vm_start)
 698                vma = NULL;
 699        return vma;
 700}
 701
 702static inline unsigned long vma_pages(struct vm_area_struct *vma)
 703{
 704        return (vma->vm_end - vma->vm_start) >> PAGE_SHIFT;
 705}
 706
 707extern struct vm_area_struct *find_extend_vma(struct mm_struct *mm, unsigned long addr);
 708
 709extern struct page * vmalloc_to_page(void *addr);
 710extern struct page * follow_page(struct mm_struct *mm, unsigned long address,
 711                int write);
 712extern int remap_page_range(struct vm_area_struct *vma, unsigned long from,
 713                unsigned long to, unsigned long size, pgprot_t prot);
 714
 715#ifndef CONFIG_DEBUG_PAGEALLOC
 716static inline void
 717kernel_map_pages(struct page *page, int numpages, int enable)
 718{
 719}
 720#endif
 721
 722#ifndef CONFIG_ARCH_GATE_AREA
 723extern struct vm_area_struct *get_gate_vma(struct task_struct *tsk);
 724int in_gate_area(struct task_struct *task, unsigned long addr);
 725#endif
 726
 727#endif /* __KERNEL__ */
 728#endif /* _LINUX_MM_H */
 729
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.