swap.h
上传用户:lgb322
上传日期:2013-02-24
资源大小:30529k
文件大小:6k
源码类别:

嵌入式Linux

开发平台:

Unix_Linux

  1. #ifndef _LINUX_SWAP_H
  2. #define _LINUX_SWAP_H
  3. #include <linux/spinlock.h>
  4. #include <asm/page.h>
  5. #define SWAP_FLAG_PREFER 0x8000 /* set if swap priority specified */
  6. #define SWAP_FLAG_PRIO_MASK 0x7fff
  7. #define SWAP_FLAG_PRIO_SHIFT 0
  8. #define MAX_SWAPFILES 32
  9. /*
  10.  * Magic header for a swap area. The first part of the union is
  11.  * what the swap magic looks like for the old (limited to 128MB)
  12.  * swap area format, the second part of the union adds - in the
  13.  * old reserved area - some extra information. Note that the first
  14.  * kilobyte is reserved for boot loader or disk label stuff...
  15.  *
  16.  * Having the magic at the end of the PAGE_SIZE makes detecting swap
  17.  * areas somewhat tricky on machines that support multiple page sizes.
  18.  * For 2.5 we'll probably want to move the magic to just beyond the
  19.  * bootbits...
  20.  */
  21. union swap_header {
  22. struct 
  23. {
  24. char reserved[PAGE_SIZE - 10];
  25. char magic[10]; /* SWAP-SPACE or SWAPSPACE2 */
  26. } magic;
  27. struct 
  28. {
  29. char      bootbits[1024]; /* Space for disklabel etc. */
  30. unsigned int version;
  31. unsigned int last_page;
  32. unsigned int nr_badpages;
  33. unsigned int padding[125];
  34. unsigned int badpages[1];
  35. } info;
  36. };
  37. #ifdef __KERNEL__
  38. /*
  39.  * Max bad pages in the new format..
  40.  */
  41. #define __swapoffset(x) ((unsigned long)&((union swap_header *)0)->x)
  42. #define MAX_SWAP_BADPAGES 
  43. ((__swapoffset(magic.magic) - __swapoffset(info.badpages)) / sizeof(int))
  44. #include <asm/atomic.h>
  45. #define SWP_USED 1
  46. #define SWP_WRITEOK 3
  47. #define SWAP_CLUSTER_MAX 32
  48. #define SWAP_MAP_MAX 0x7fff
  49. #define SWAP_MAP_BAD 0x8000
  50. /*
  51.  * The in-memory structure used to track swap areas.
  52.  */
  53. struct swap_info_struct {
  54. unsigned int flags;
  55. kdev_t swap_device;
  56. spinlock_t sdev_lock;
  57. struct dentry * swap_file;
  58. struct vfsmount *swap_vfsmnt;
  59. unsigned short * swap_map;
  60. unsigned int lowest_bit;
  61. unsigned int highest_bit;
  62. unsigned int cluster_next;
  63. unsigned int cluster_nr;
  64. int prio; /* swap priority */
  65. int pages;
  66. unsigned long max;
  67. int next; /* next entry on swap list */
  68. };
  69. extern int nr_swap_pages;
  70. /* Swap 50% full? Release swapcache more aggressively.. */
  71. #define vm_swap_full() (nr_swap_pages*2 < total_swap_pages)
  72. extern unsigned int nr_free_pages(void);
  73. extern unsigned int nr_free_buffer_pages(void);
  74. extern int nr_active_pages;
  75. extern int nr_inactive_pages;
  76. extern atomic_t nr_async_pages;
  77. extern atomic_t page_cache_size;
  78. extern atomic_t buffermem_pages;
  79. extern spinlock_t pagecache_lock;
  80. extern void __remove_inode_page(struct page *);
  81. /* Incomplete types for prototype declarations: */
  82. struct task_struct;
  83. struct vm_area_struct;
  84. struct sysinfo;
  85. struct zone_t;
  86. /* linux/mm/swap.c */
  87. extern void FASTCALL(lru_cache_add(struct page *));
  88. extern void FASTCALL(__lru_cache_del(struct page *));
  89. extern void FASTCALL(lru_cache_del(struct page *));
  90. extern void FASTCALL(activate_page(struct page *));
  91. extern void swap_setup(void);
  92. /* linux/mm/vmscan.c */
  93. extern wait_queue_head_t kswapd_wait;
  94. extern int FASTCALL(try_to_free_pages(zone_t *, unsigned int, unsigned int));
  95. /* linux/mm/page_io.c */
  96. extern void rw_swap_page(int, struct page *);
  97. extern void rw_swap_page_nolock(int, swp_entry_t, char *);
  98. /* linux/mm/page_alloc.c */
  99. /* linux/mm/swap_state.c */
  100. #define SWAP_CACHE_INFO
  101. #ifdef SWAP_CACHE_INFO
  102. extern void show_swap_cache_info(void);
  103. #endif
  104. extern int add_to_swap_cache(struct page *, swp_entry_t);
  105. extern void __delete_from_swap_cache(struct page *page);
  106. extern void delete_from_swap_cache(struct page *page);
  107. extern void free_page_and_swap_cache(struct page *page);
  108. extern struct page * lookup_swap_cache(swp_entry_t);
  109. extern struct page * read_swap_cache_async(swp_entry_t);
  110. /* linux/mm/oom_kill.c */
  111. extern void out_of_memory(void);
  112. /* linux/mm/swapfile.c */
  113. extern int total_swap_pages;
  114. extern unsigned int nr_swapfiles;
  115. extern struct swap_info_struct swap_info[];
  116. extern int is_swap_partition(kdev_t);
  117. extern void si_swapinfo(struct sysinfo *);
  118. extern swp_entry_t get_swap_page(void);
  119. extern void get_swaphandle_info(swp_entry_t, unsigned long *, kdev_t *, 
  120. struct inode **);
  121. extern int swap_duplicate(swp_entry_t);
  122. extern int swap_count(struct page *);
  123. extern int valid_swaphandles(swp_entry_t, unsigned long *);
  124. extern void swap_free(swp_entry_t);
  125. extern void free_swap_and_cache(swp_entry_t);
  126. struct swap_list_t {
  127. int head; /* head of priority-ordered swapfile list */
  128. int next; /* swapfile to be used next */
  129. };
  130. extern struct swap_list_t swap_list;
  131. asmlinkage long sys_swapoff(const char *);
  132. asmlinkage long sys_swapon(const char *, int);
  133. extern spinlock_t pagemap_lru_lock;
  134. extern void FASTCALL(mark_page_accessed(struct page *));
  135. /*
  136.  * List add/del helper macros. These must be called
  137.  * with the pagemap_lru_lock held!
  138.  */
  139. #define DEBUG_LRU_PAGE(page)
  140. do {
  141. if (!PageLRU(page))
  142. BUG();
  143. if (PageActive(page))
  144. BUG();
  145. } while (0)
  146. #define add_page_to_active_list(page)
  147. do {
  148. DEBUG_LRU_PAGE(page);
  149. SetPageActive(page);
  150. list_add(&(page)->lru, &active_list);
  151. nr_active_pages++;
  152. } while (0)
  153. #define add_page_to_inactive_list(page)
  154. do {
  155. DEBUG_LRU_PAGE(page);
  156. list_add(&(page)->lru, &inactive_list);
  157. nr_inactive_pages++;
  158. } while (0)
  159. #define del_page_from_active_list(page)
  160. do {
  161. list_del(&(page)->lru);
  162. ClearPageActive(page);
  163. nr_active_pages--;
  164. } while (0)
  165. #define del_page_from_inactive_list(page)
  166. do {
  167. list_del(&(page)->lru);
  168. nr_inactive_pages--;
  169. } while (0)
  170. extern spinlock_t swaplock;
  171. #define swap_list_lock() spin_lock(&swaplock)
  172. #define swap_list_unlock() spin_unlock(&swaplock)
  173. #define swap_device_lock(p) spin_lock(&p->sdev_lock)
  174. #define swap_device_unlock(p) spin_unlock(&p->sdev_lock)
  175. extern void shmem_unuse(swp_entry_t entry, struct page *page);
  176. #endif /* __KERNEL__*/
  177. #endif /* _LINUX_SWAP_H */