mm.h
上传用户:jlfgdled
上传日期:2013-04-10
资源大小:33168k
文件大小:25k
源码类别:

Linux/Unix编程

开发平台:

Unix_Linux

  1. #ifndef _LINUX_MM_H
  2. #define _LINUX_MM_H
  3. #include <linux/sched.h>
  4. #include <linux/errno.h>
  5. #ifdef __KERNEL__
  6. #include <linux/config.h>
  7. #include <linux/string.h>
  8. #include <linux/list.h>
  9. #include <linux/mmzone.h>
  10. #include <linux/swap.h>
  11. #include <linux/rbtree.h>
  12. extern unsigned long max_mapnr;
  13. extern unsigned long num_physpages;
  14. extern unsigned long num_mappedpages;
  15. extern void * high_memory;
  16. extern int page_cluster;
  17. /* The inactive_clean lists are per zone. */
  18. extern struct list_head active_list;
  19. extern struct list_head inactive_list;
  20. #include <asm/page.h>
  21. #include <asm/pgtable.h>
  22. #include <asm/atomic.h>
  23. /*
  24.  * Linux kernel virtual memory manager primitives.
  25.  * The idea being to have a "virtual" mm in the same way
  26.  * we have a virtual fs - giving a cleaner interface to the
  27.  * mm details, and allowing different kinds of memory mappings
  28.  * (from shared memory to executable loading to arbitrary
  29.  * mmap() functions).
  30.  */
  31. /*
  32.  * This struct defines a memory VMM memory area. There is one of these
  33.  * per VM-area/task.  A VM area is any part of the process virtual memory
  34.  * space that has a special rule for the page-fault handlers (ie a shared
  35.  * library, the executable area etc).
  36.  */
  37. struct vm_area_struct {
  38. struct mm_struct * vm_mm; /* The address space we belong to. */
  39. unsigned long vm_start; /* Our start address within vm_mm. */
  40. unsigned long vm_end; /* The first byte after our end address
  41.    within vm_mm. */
  42. /* linked list of VM areas per task, sorted by address */
  43. struct vm_area_struct *vm_next;
  44. pgprot_t vm_page_prot; /* Access permissions of this VMA. */
  45. unsigned long vm_flags; /* Flags, listed below. */
  46. rb_node_t vm_rb;
  47. /*
  48.  * For areas with an address space and backing store,
  49.  * one of the address_space->i_mmap{,shared} lists,
  50.  * for shm areas, the list of attaches, otherwise unused.
  51.  */
  52. struct vm_area_struct *vm_next_share;
  53. struct vm_area_struct **vm_pprev_share;
  54. /* Function pointers to deal with this struct. */
  55. struct vm_operations_struct * vm_ops;
  56. /* Information about our backing store: */
  57. unsigned long vm_pgoff; /* Offset (within vm_file) in PAGE_SIZE
  58.    units, *not* PAGE_CACHE_SIZE */
  59. struct file * vm_file; /* File we map to (can be NULL). */
  60. unsigned long vm_raend; /* XXX: put full readahead info here. */
  61. void * vm_private_data; /* was vm_pte (shared mem) */
  62. };
  63. /*
  64.  * vm_flags..
  65.  */
  66. #define VM_READ 0x00000001 /* currently active flags */
  67. #define VM_WRITE 0x00000002
  68. #define VM_EXEC 0x00000004
  69. #define VM_SHARED 0x00000008
  70. #define VM_MAYREAD 0x00000010 /* limits for mprotect() etc */
  71. #define VM_MAYWRITE 0x00000020
  72. #define VM_MAYEXEC 0x00000040
  73. #define VM_MAYSHARE 0x00000080
  74. #define VM_GROWSDOWN 0x00000100 /* general info on the segment */
  75. #define VM_GROWSUP 0x00000200
  76. #define VM_SHM 0x00000400 /* shared memory area, don't swap out */
  77. #define VM_DENYWRITE 0x00000800 /* ETXTBSY on write attempts.. */
  78. #define VM_EXECUTABLE 0x00001000
  79. #define VM_LOCKED 0x00002000
  80. #define VM_IO           0x00004000 /* Memory mapped I/O or similar */
  81. /* Used by sys_madvise() */
  82. #define VM_SEQ_READ 0x00008000 /* App will access data sequentially */
  83. #define VM_RAND_READ 0x00010000 /* App will not benefit from clustered reads */
  84. #define VM_DONTCOPY 0x00020000      /* Do not copy this vma on fork */
  85. #define VM_DONTEXPAND 0x00040000 /* Cannot expand with mremap() */
  86. #define VM_RESERVED 0x00080000 /* Don't unmap it from swap_out */
  87. #define VM_STACK_FLAGS 0x00000177
  88. #define VM_READHINTMASK (VM_SEQ_READ | VM_RAND_READ)
  89. #define VM_ClearReadHint(v) (v)->vm_flags &= ~VM_READHINTMASK
  90. #define VM_NormalReadHint(v) (!((v)->vm_flags & VM_READHINTMASK))
  91. #define VM_SequentialReadHint(v) ((v)->vm_flags & VM_SEQ_READ)
  92. #define VM_RandomReadHint(v) ((v)->vm_flags & VM_RAND_READ)
  93. /* read ahead limits */
  94. extern int vm_min_readahead;
  95. extern int vm_max_readahead;
  96. /*
  97.  * mapping from the currently active vm_flags protection bits (the
  98.  * low four bits) to a page protection mask..
  99.  */
  100. extern pgprot_t protection_map[16];
  101. /*
  102.  * These are the virtual MM functions - opening of an area, closing and
  103.  * unmapping it (needed to keep files on disk up-to-date etc), pointer
  104.  * to the functions called when a no-page or a wp-page exception occurs. 
  105.  */
  106. struct vm_operations_struct {
  107. void (*open)(struct vm_area_struct * area);
  108. void (*close)(struct vm_area_struct * area);
  109. struct page * (*nopage)(struct vm_area_struct * area, unsigned long address, int unused);
  110. };
  111. /*
  112.  * Each physical page in the system has a struct page associated with
  113.  * it to keep track of whatever it is we are using the page for at the
  114.  * moment. Note that we have no way to track which tasks are using
  115.  * a page.
  116.  *
  117.  * Try to keep the most commonly accessed fields in single cache lines
  118.  * here (16 bytes or greater).  This ordering should be particularly
  119.  * beneficial on 32-bit processors.
  120.  *
  121.  * The first line is data used in page cache lookup, the second line
  122.  * is used for linear searches (eg. clock algorithm scans). 
  123.  *
  124.  * TODO: make this structure smaller, it could be as small as 32 bytes.
  125.  */
  126. typedef struct page {
  127. struct list_head list; /* ->mapping has some page lists. */
  128. struct address_space *mapping; /* The inode (or ...) we belong to. */
  129. unsigned long index; /* Our offset within mapping. */
  130. struct page *next_hash; /* Next page sharing our hash bucket in
  131.    the pagecache hash table. */
  132. atomic_t count; /* Usage count, see below. */
  133. unsigned long flags; /* atomic flags, some possibly
  134.    updated asynchronously */
  135. struct list_head lru; /* Pageout list, eg. active_list;
  136.    protected by pagemap_lru_lock !! */
  137. struct page **pprev_hash; /* Complement to *next_hash. */
  138. struct buffer_head * buffers; /* Buffer maps us to a disk block. */
  139. /*
  140.  * On machines where all RAM is mapped into kernel address space,
  141.  * we can simply calculate the virtual address. On machines with
  142.  * highmem some memory is mapped into kernel virtual memory
  143.  * dynamically, so we need a place to store that address.
  144.  * Note that this field could be 16 bits on x86 ... ;)
  145.  *
  146.  * Architectures with slow multiplication can define
  147.  * WANT_PAGE_VIRTUAL in asm/page.h
  148.  */
  149. #if defined(CONFIG_HIGHMEM) || defined(WANT_PAGE_VIRTUAL)
  150. void *virtual; /* Kernel virtual address (NULL if
  151.    not kmapped, ie. highmem) */
  152. #endif /* CONFIG_HIGMEM || WANT_PAGE_VIRTUAL */
  153. } mem_map_t;
  154. /*
  155.  * Methods to modify the page usage count.
  156.  *
  157.  * What counts for a page usage:
  158.  * - cache mapping   (page->mapping)
  159.  * - disk mapping    (page->buffers)
  160.  * - page mapped in a task's page tables, each mapping
  161.  *   is counted separately
  162.  *
  163.  * Also, many kernel routines increase the page count before a critical
  164.  * routine so they can be sure the page doesn't go away from under them.
  165.  */
  166. #define get_page(p) atomic_inc(&(p)->count)
  167. #define put_page(p) __free_page(p)
  168. #define put_page_testzero(p)  atomic_dec_and_test(&(p)->count)
  169. #define page_count(p) atomic_read(&(p)->count)
  170. #define set_page_count(p,v)  atomic_set(&(p)->count, v)
  171. /*
  172.  * Various page->flags bits:
  173.  *
  174.  * PG_reserved is set for special pages, which can never be swapped
  175.  * out. Some of them might not even exist (eg empty_bad_page)...
  176.  *
  177.  * Multiple processes may "see" the same page. E.g. for untouched
  178.  * mappings of /dev/null, all processes see the same page full of
  179.  * zeroes, and text pages of executables and shared libraries have
  180.  * only one copy in memory, at most, normally.
  181.  *
  182.  * For the non-reserved pages, page->count denotes a reference count.
  183.  *   page->count == 0 means the page is free.
  184.  *   page->count == 1 means the page is used for exactly one purpose
  185.  *   (e.g. a private data page of one process).
  186.  *
  187.  * A page may be used for kmalloc() or anyone else who does a
  188.  * __get_free_page(). In this case the page->count is at least 1, and
  189.  * all other fields are unused but should be 0 or NULL. The
  190.  * management of this page is the responsibility of the one who uses
  191.  * it.
  192.  *
  193.  * The other pages (we may call them "process pages") are completely
  194.  * managed by the Linux memory manager: I/O, buffers, swapping etc.
  195.  * The following discussion applies only to them.
  196.  *
  197.  * A page may belong to an inode's memory mapping. In this case,
  198.  * page->mapping is the pointer to the inode, and page->index is the
  199.  * file offset of the page, in units of PAGE_CACHE_SIZE.
  200.  *
  201.  * A page may have buffers allocated to it. In this case,
  202.  * page->buffers is a circular list of these buffer heads. Else,
  203.  * page->buffers == NULL.
  204.  *
  205.  * For pages belonging to inodes, the page->count is the number of
  206.  * attaches, plus 1 if buffers are allocated to the page, plus one
  207.  * for the page cache itself.
  208.  *
  209.  * All pages belonging to an inode are in these doubly linked lists:
  210.  * mapping->clean_pages, mapping->dirty_pages and mapping->locked_pages;
  211.  * using the page->list list_head. These fields are also used for
  212.  * freelist managemet (when page->count==0).
  213.  *
  214.  * There is also a hash table mapping (mapping,index) to the page
  215.  * in memory if present. The lists for this hash table use the fields
  216.  * page->next_hash and page->pprev_hash.
  217.  *
  218.  * All process pages can do I/O:
  219.  * - inode pages may need to be read from disk,
  220.  * - inode pages which have been modified and are MAP_SHARED may need
  221.  *   to be written to disk,
  222.  * - private pages which have been modified may need to be swapped out
  223.  *   to swap space and (later) to be read back into memory.
  224.  * During disk I/O, PG_locked is used. This bit is set before I/O
  225.  * and reset when I/O completes. page_waitqueue(page) is a wait queue of all
  226.  * tasks waiting for the I/O on this page to complete.
  227.  * PG_uptodate tells whether the page's contents is valid.
  228.  * When a read completes, the page becomes uptodate, unless a disk I/O
  229.  * error happened.
  230.  *
  231.  * For choosing which pages to swap out, inode pages carry a
  232.  * PG_referenced bit, which is set any time the system accesses
  233.  * that page through the (mapping,index) hash table. This referenced
  234.  * bit, together with the referenced bit in the page tables, is used
  235.  * to manipulate page->age and move the page across the active,
  236.  * inactive_dirty and inactive_clean lists.
  237.  *
  238.  * Note that the referenced bit, the page->lru list_head and the
  239.  * active, inactive_dirty and inactive_clean lists are protected by
  240.  * the pagemap_lru_lock, and *NOT* by the usual PG_locked bit!
  241.  *
  242.  * PG_skip is used on sparc/sparc64 architectures to "skip" certain
  243.  * parts of the address space.
  244.  *
  245.  * PG_error is set to indicate that an I/O error occurred on this page.
  246.  *
  247.  * PG_arch_1 is an architecture specific page state bit.  The generic
  248.  * code guarantees that this bit is cleared for a page when it first
  249.  * is entered into the page cache.
  250.  *
  251.  * PG_highmem pages are not permanently mapped into the kernel virtual
  252.  * address space, they need to be kmapped separately for doing IO on
  253.  * the pages. The struct page (these bits with information) are always
  254.  * mapped into kernel address space...
  255.  */
  256. #define PG_locked  0 /* Page is locked. Don't touch. */
  257. #define PG_error  1
  258. #define PG_referenced  2
  259. #define PG_uptodate  3
  260. #define PG_dirty  4
  261. #define PG_unused  5
  262. #define PG_lru  6
  263. #define PG_active  7
  264. #define PG_slab  8
  265. #define PG_skip 10
  266. #define PG_highmem 11
  267. #define PG_checked 12 /* kill me in 2.5.<early>. */
  268. #define PG_arch_1 13
  269. #define PG_reserved 14
  270. #define PG_launder 15 /* written out by VM pressure.. */
  271. /* Make it prettier to test the above... */
  272. #define UnlockPage(page) unlock_page(page)
  273. #define Page_Uptodate(page) test_bit(PG_uptodate, &(page)->flags)
  274. #define SetPageUptodate(page) set_bit(PG_uptodate, &(page)->flags)
  275. #define ClearPageUptodate(page) clear_bit(PG_uptodate, &(page)->flags)
  276. #define PageDirty(page) test_bit(PG_dirty, &(page)->flags)
  277. #define SetPageDirty(page) set_bit(PG_dirty, &(page)->flags)
  278. #define ClearPageDirty(page) clear_bit(PG_dirty, &(page)->flags)
  279. #define PageLocked(page) test_bit(PG_locked, &(page)->flags)
  280. #define LockPage(page) set_bit(PG_locked, &(page)->flags)
  281. #define TryLockPage(page) test_and_set_bit(PG_locked, &(page)->flags)
  282. #define PageChecked(page) test_bit(PG_checked, &(page)->flags)
  283. #define SetPageChecked(page) set_bit(PG_checked, &(page)->flags)
  284. #define PageLaunder(page) test_bit(PG_launder, &(page)->flags)
  285. #define SetPageLaunder(page) set_bit(PG_launder, &(page)->flags)
  286. #define ClearPageLaunder(page) clear_bit(PG_launder, &(page)->flags)
  287. /*
  288.  * The zone field is never updated after free_area_init_core()
  289.  * sets it, so none of the operations on it need to be atomic.
  290.  */
  291. #define NODE_SHIFT 4
  292. #define ZONE_SHIFT (BITS_PER_LONG - 8)
  293. struct zone_struct;
  294. extern struct zone_struct *zone_table[];
  295. static inline zone_t *page_zone(struct page *page)
  296. {
  297. return zone_table[page->flags >> ZONE_SHIFT];
  298. }
  299. static inline void set_page_zone(struct page *page, unsigned long zone_num)
  300. {
  301. page->flags &= ~(~0UL << ZONE_SHIFT);
  302. page->flags |= zone_num << ZONE_SHIFT;
  303. }
  304. /*
  305.  * In order to avoid #ifdefs within C code itself, we define
  306.  * set_page_address to a noop for non-highmem machines, where
  307.  * the field isn't useful.
  308.  * The same is true for page_address() in arch-dependent code.
  309.  */
  310. #if defined(CONFIG_HIGHMEM) || defined(WANT_PAGE_VIRTUAL)
  311. #define set_page_address(page, address)
  312. do {
  313. (page)->virtual = (address);
  314. } while(0)
  315. #else /* CONFIG_HIGHMEM || WANT_PAGE_VIRTUAL */
  316. #define set_page_address(page, address)  do { } while(0)
  317. #endif /* CONFIG_HIGHMEM || WANT_PAGE_VIRTUAL */
  318. /*
  319.  * Permanent address of a page. Obviously must never be
  320.  * called on a highmem page.
  321.  */
  322. #if defined(CONFIG_HIGHMEM) || defined(WANT_PAGE_VIRTUAL)
  323. #define page_address(page) ((page)->virtual)
  324. #else /* CONFIG_HIGHMEM || WANT_PAGE_VIRTUAL */
  325. #define page_address(page)
  326. __va( (((page) - page_zone(page)->zone_mem_map) << PAGE_SHIFT)
  327. + page_zone(page)->zone_start_paddr)
  328. #endif /* CONFIG_HIGHMEM || WANT_PAGE_VIRTUAL */
  329. extern void FASTCALL(set_page_dirty(struct page *));
  330. /*
  331.  * The first mb is necessary to safely close the critical section opened by the
  332.  * TryLockPage(), the second mb is necessary to enforce ordering between
  333.  * the clear_bit and the read of the waitqueue (to avoid SMP races with a
  334.  * parallel wait_on_page).
  335.  */
  336. #define PageError(page) test_bit(PG_error, &(page)->flags)
  337. #define SetPageError(page) set_bit(PG_error, &(page)->flags)
  338. #define ClearPageError(page) clear_bit(PG_error, &(page)->flags)
  339. #define PageReferenced(page) test_bit(PG_referenced, &(page)->flags)
  340. #define SetPageReferenced(page) set_bit(PG_referenced, &(page)->flags)
  341. #define ClearPageReferenced(page) clear_bit(PG_referenced, &(page)->flags)
  342. #define PageTestandClearReferenced(page) test_and_clear_bit(PG_referenced, &(page)->flags)
  343. #define PageSlab(page) test_bit(PG_slab, &(page)->flags)
  344. #define PageSetSlab(page) set_bit(PG_slab, &(page)->flags)
  345. #define PageClearSlab(page) clear_bit(PG_slab, &(page)->flags)
  346. #define PageReserved(page) test_bit(PG_reserved, &(page)->flags)
  347. #define PageActive(page) test_bit(PG_active, &(page)->flags)
  348. #define SetPageActive(page) set_bit(PG_active, &(page)->flags)
  349. #define ClearPageActive(page) clear_bit(PG_active, &(page)->flags)
  350. #define PageLRU(page) test_bit(PG_lru, &(page)->flags)
  351. #define TestSetPageLRU(page) test_and_set_bit(PG_lru, &(page)->flags)
  352. #define TestClearPageLRU(page) test_and_clear_bit(PG_lru, &(page)->flags)
  353. #ifdef CONFIG_HIGHMEM
  354. #define PageHighMem(page) test_bit(PG_highmem, &(page)->flags)
  355. #else
  356. #define PageHighMem(page) 0 /* needed to optimize away at compile time */
  357. #endif
  358. #define SetPageReserved(page) set_bit(PG_reserved, &(page)->flags)
  359. #define ClearPageReserved(page) clear_bit(PG_reserved, &(page)->flags)
  360. /*
  361.  * Error return values for the *_nopage functions
  362.  */
  363. #define NOPAGE_SIGBUS (NULL)
  364. #define NOPAGE_OOM ((struct page *) (-1))
  365. /* The array of struct pages */
  366. extern mem_map_t * mem_map;
  367. /*
  368.  * There is only one page-allocator function, and two main namespaces to
  369.  * it. The alloc_page*() variants return 'struct page *' and as such
  370.  * can allocate highmem pages, the *get*page*() variants return
  371.  * virtual kernel addresses to the allocated page(s).
  372.  */
  373. extern struct page * FASTCALL(_alloc_pages(unsigned int gfp_mask, unsigned int order));
  374. extern struct page * FASTCALL(__alloc_pages(unsigned int gfp_mask, unsigned int order, zonelist_t *zonelist));
  375. extern struct page * alloc_pages_node(int nid, unsigned int gfp_mask, unsigned int order);
  376. static inline struct page * alloc_pages(unsigned int gfp_mask, unsigned int order)
  377. {
  378. /*
  379.  * Gets optimized away by the compiler.
  380.  */
  381. if (order >= MAX_ORDER)
  382. return NULL;
  383. return _alloc_pages(gfp_mask, order);
  384. }
  385. #define alloc_page(gfp_mask) alloc_pages(gfp_mask, 0)
  386. extern unsigned long FASTCALL(__get_free_pages(unsigned int gfp_mask, unsigned int order));
  387. extern unsigned long FASTCALL(get_zeroed_page(unsigned int gfp_mask));
  388. #define __get_free_page(gfp_mask) 
  389. __get_free_pages((gfp_mask),0)
  390. #define __get_dma_pages(gfp_mask, order) 
  391. __get_free_pages((gfp_mask) | GFP_DMA,(order))
  392. /*
  393.  * The old interface name will be removed in 2.5:
  394.  */
  395. #define get_free_page get_zeroed_page
  396. /*
  397.  * There is only one 'core' page-freeing function.
  398.  */
  399. extern void FASTCALL(__free_pages(struct page *page, unsigned int order));
  400. extern void FASTCALL(free_pages(unsigned long addr, unsigned int order));
  401. #define __free_page(page) __free_pages((page), 0)
  402. #define free_page(addr) free_pages((addr),0)
  403. extern void show_free_areas(void);
  404. extern void show_free_areas_node(pg_data_t *pgdat);
  405. extern void clear_page_tables(struct mm_struct *, unsigned long, int);
  406. extern int fail_writepage(struct page *);
  407. struct page * shmem_nopage(struct vm_area_struct * vma, unsigned long address, int unused);
  408. struct file *shmem_file_setup(char * name, loff_t size);
  409. extern void shmem_lock(struct file * file, int lock);
  410. extern int shmem_zero_setup(struct vm_area_struct *);
  411. extern void zap_page_range(struct mm_struct *mm, unsigned long address, unsigned long size);
  412. extern int copy_page_range(struct mm_struct *dst, struct mm_struct *src, struct vm_area_struct *vma);
  413. extern int remap_page_range(unsigned long from, unsigned long to, unsigned long size, pgprot_t prot);
  414. extern int zeromap_page_range(unsigned long from, unsigned long size, pgprot_t prot);
  415. extern int vmtruncate(struct inode * inode, loff_t offset);
  416. extern pmd_t *FASTCALL(__pmd_alloc(struct mm_struct *mm, pgd_t *pgd, unsigned long address));
  417. extern pte_t *FASTCALL(pte_alloc(struct mm_struct *mm, pmd_t *pmd, unsigned long address));
  418. extern int handle_mm_fault(struct mm_struct *mm,struct vm_area_struct *vma, unsigned long address, int write_access);
  419. extern int make_pages_present(unsigned long addr, unsigned long end);
  420. extern int access_process_vm(struct task_struct *tsk, unsigned long addr, void *buf, int len, int write);
  421. extern int ptrace_readdata(struct task_struct *tsk, unsigned long src, char *dst, int len);
  422. extern int ptrace_writedata(struct task_struct *tsk, char * src, unsigned long dst, int len);
  423. extern int ptrace_attach(struct task_struct *tsk);
  424. extern int ptrace_detach(struct task_struct *, unsigned int);
  425. extern void ptrace_disable(struct task_struct *);
  426. extern int ptrace_check_attach(struct task_struct *task, int kill);
  427. int get_user_pages(struct task_struct *tsk, struct mm_struct *mm, unsigned long start,
  428. int len, int write, int force, struct page **pages, struct vm_area_struct **vmas);
  429. /*
  430.  * On a two-level page table, this ends up being trivial. Thus the
  431.  * inlining and the symmetry break with pte_alloc() that does all
  432.  * of this out-of-line.
  433.  */
  434. static inline pmd_t *pmd_alloc(struct mm_struct *mm, pgd_t *pgd, unsigned long address)
  435. {
  436. if (pgd_none(*pgd))
  437. return __pmd_alloc(mm, pgd, address);
  438. return pmd_offset(pgd, address);
  439. }
  440. extern int pgt_cache_water[2];
  441. extern int check_pgt_cache(void);
  442. extern void free_area_init(unsigned long * zones_size);
  443. extern void free_area_init_node(int nid, pg_data_t *pgdat, struct page *pmap,
  444. unsigned long * zones_size, unsigned long zone_start_paddr, 
  445. unsigned long *zholes_size);
  446. extern void mem_init(void);
  447. extern void show_mem(void);
  448. extern void si_meminfo(struct sysinfo * val);
  449. extern void swapin_readahead(swp_entry_t);
  450. extern struct address_space swapper_space;
  451. #define PageSwapCache(page) ((page)->mapping == &swapper_space)
  452. static inline int is_page_cache_freeable(struct page * page)
  453. {
  454. return page_count(page) - !!page->buffers == 1;
  455. }
  456. extern int can_share_swap_page(struct page *);
  457. extern int remove_exclusive_swap_page(struct page *);
  458. extern void __free_pte(pte_t);
  459. /* mmap.c */
  460. extern void lock_vma_mappings(struct vm_area_struct *);
  461. extern void unlock_vma_mappings(struct vm_area_struct *);
  462. extern void insert_vm_struct(struct mm_struct *, struct vm_area_struct *);
  463. extern void __insert_vm_struct(struct mm_struct *, struct vm_area_struct *);
  464. extern void build_mmap_rb(struct mm_struct *);
  465. extern void exit_mmap(struct mm_struct *);
  466. extern unsigned long get_unmapped_area(struct file *, unsigned long, unsigned long, unsigned long, unsigned long);
  467. extern unsigned long do_mmap_pgoff(struct file *file, unsigned long addr,
  468. unsigned long len, unsigned long prot,
  469. unsigned long flag, unsigned long pgoff);
  470. static inline unsigned long do_mmap(struct file *file, unsigned long addr,
  471. unsigned long len, unsigned long prot,
  472. unsigned long flag, unsigned long offset)
  473. {
  474. unsigned long ret = -EINVAL;
  475. if ((offset + PAGE_ALIGN(len)) < offset)
  476. goto out;
  477. if (!(offset & ~PAGE_MASK))
  478. ret = do_mmap_pgoff(file, addr, len, prot, flag, offset >> PAGE_SHIFT);
  479. out:
  480. return ret;
  481. }
  482. extern int do_munmap(struct mm_struct *, unsigned long, size_t);
  483. extern unsigned long do_brk(unsigned long, unsigned long);
  484. static inline void __vma_unlink(struct mm_struct * mm, struct vm_area_struct * vma, struct vm_area_struct * prev)
  485. {
  486. prev->vm_next = vma->vm_next;
  487. rb_erase(&vma->vm_rb, &mm->mm_rb);
  488. if (mm->mmap_cache == vma)
  489. mm->mmap_cache = prev;
  490. }
  491. static inline int can_vma_merge(struct vm_area_struct * vma, unsigned long vm_flags)
  492. {
  493. if (!vma->vm_file && vma->vm_flags == vm_flags)
  494. return 1;
  495. else
  496. return 0;
  497. }
  498. struct zone_t;
  499. /* filemap.c */
  500. extern void remove_inode_page(struct page *);
  501. extern unsigned long page_unuse(struct page *);
  502. extern void truncate_inode_pages(struct address_space *, loff_t);
  503. /* generic vm_area_ops exported for stackable file systems */
  504. extern int filemap_sync(struct vm_area_struct *, unsigned long, size_t, unsigned int);
  505. extern struct page *filemap_nopage(struct vm_area_struct *, unsigned long, int);
  506. /*
  507.  * GFP bitmasks..
  508.  */
  509. /* Zone modifiers in GFP_ZONEMASK (see linux/mmzone.h - low four bits) */
  510. #define __GFP_DMA 0x01
  511. #define __GFP_HIGHMEM 0x02
  512. /* Action modifiers - doesn't change the zoning */
  513. #define __GFP_WAIT 0x10 /* Can wait and reschedule? */
  514. #define __GFP_HIGH 0x20 /* Should access emergency pools? */
  515. #define __GFP_IO 0x40 /* Can start low memory physical IO? */
  516. #define __GFP_HIGHIO 0x80 /* Can start high mem physical IO? */
  517. #define __GFP_FS 0x100 /* Can call down to low-level FS? */
  518. #define GFP_NOHIGHIO (__GFP_HIGH | __GFP_WAIT | __GFP_IO)
  519. #define GFP_NOIO (__GFP_HIGH | __GFP_WAIT)
  520. #define GFP_NOFS (__GFP_HIGH | __GFP_WAIT | __GFP_IO | __GFP_HIGHIO)
  521. #define GFP_ATOMIC (__GFP_HIGH)
  522. #define GFP_USER (             __GFP_WAIT | __GFP_IO | __GFP_HIGHIO | __GFP_FS)
  523. #define GFP_HIGHUSER (             __GFP_WAIT | __GFP_IO | __GFP_HIGHIO | __GFP_FS | __GFP_HIGHMEM)
  524. #define GFP_KERNEL (__GFP_HIGH | __GFP_WAIT | __GFP_IO | __GFP_HIGHIO | __GFP_FS)
  525. #define GFP_NFS (__GFP_HIGH | __GFP_WAIT | __GFP_IO | __GFP_HIGHIO | __GFP_FS)
  526. #define GFP_KSWAPD (             __GFP_WAIT | __GFP_IO | __GFP_HIGHIO | __GFP_FS)
  527. /* Flag - indicates that the buffer will be suitable for DMA.  Ignored on some
  528.    platforms, used as appropriate on others */
  529. #define GFP_DMA __GFP_DMA
  530. static inline unsigned int pf_gfp_mask(unsigned int gfp_mask)
  531. {
  532. /* avoid all memory balancing I/O methods if this task cannot block on I/O */
  533. if (current->flags & PF_NOIO)
  534. gfp_mask &= ~(__GFP_IO | __GFP_HIGHIO | __GFP_FS);
  535. return gfp_mask;
  536. }
  537. /* vma is the first one with  address < vma->vm_end,
  538.  * and even  address < vma->vm_start. Have to extend vma. */
  539. static inline int expand_stack(struct vm_area_struct * vma, unsigned long address)
  540. {
  541. unsigned long grow;
  542. /*
  543.  * vma->vm_start/vm_end cannot change under us because the caller is required
  544.  * to hold the mmap_sem in write mode. We need to get the spinlock only
  545.  * before relocating the vma range ourself.
  546.  */
  547. address &= PAGE_MASK;
  548.   spin_lock(&vma->vm_mm->page_table_lock);
  549. grow = (vma->vm_start - address) >> PAGE_SHIFT;
  550. if (vma->vm_end - address > current->rlim[RLIMIT_STACK].rlim_cur ||
  551.     ((vma->vm_mm->total_vm + grow) << PAGE_SHIFT) > current->rlim[RLIMIT_AS].rlim_cur) {
  552. spin_unlock(&vma->vm_mm->page_table_lock);
  553. return -ENOMEM;
  554. }
  555. vma->vm_start = address;
  556. vma->vm_pgoff -= grow;
  557. vma->vm_mm->total_vm += grow;
  558. if (vma->vm_flags & VM_LOCKED)
  559. vma->vm_mm->locked_vm += grow;
  560. spin_unlock(&vma->vm_mm->page_table_lock);
  561. return 0;
  562. }
  563. /* Look up the first VMA which satisfies  addr < vm_end,  NULL if none. */
  564. extern struct vm_area_struct * find_vma(struct mm_struct * mm, unsigned long addr);
  565. extern struct vm_area_struct * find_vma_prev(struct mm_struct * mm, unsigned long addr,
  566.      struct vm_area_struct **pprev);
  567. /* Look up the first VMA which intersects the interval start_addr..end_addr-1,
  568.    NULL if none.  Assume start_addr < end_addr. */
  569. static inline struct vm_area_struct * find_vma_intersection(struct mm_struct * mm, unsigned long start_addr, unsigned long end_addr)
  570. {
  571. struct vm_area_struct * vma = find_vma(mm,start_addr);
  572. if (vma && end_addr <= vma->vm_start)
  573. vma = NULL;
  574. return vma;
  575. }
  576. extern struct vm_area_struct *find_extend_vma(struct mm_struct *mm, unsigned long addr);
  577. extern struct page * vmalloc_to_page(void *addr);
  578. #endif /* __KERNEL__ */
  579. #endif