diff options
author | Roland McGrath <roland@gnu.org> | 2000-02-04 03:21:18 +0000 |
---|---|---|
committer | Roland McGrath <roland@gnu.org> | 2000-02-04 03:21:18 +0000 |
commit | 9fd51e9b0ad33a89a83fdbbb66bd20d85f7893fb (patch) | |
tree | 8845b79f170028cb4380045c50277bbf075b5b7d /pfinet/linux-src/include/linux/swap.h | |
download | hurd-9fd51e9b0ad33a89a83fdbbb66bd20d85f7893fb.tar.gz hurd-9fd51e9b0ad33a89a83fdbbb66bd20d85f7893fb.tar.bz2 hurd-9fd51e9b0ad33a89a83fdbbb66bd20d85f7893fb.zip |
Import of Linux 2.2.12 subset (ipv4 stack and related)
Diffstat (limited to 'pfinet/linux-src/include/linux/swap.h')
-rw-r--r-- | pfinet/linux-src/include/linux/swap.h | 175 |
1 files changed, 175 insertions, 0 deletions
diff --git a/pfinet/linux-src/include/linux/swap.h b/pfinet/linux-src/include/linux/swap.h new file mode 100644 index 00000000..66ba5d62 --- /dev/null +++ b/pfinet/linux-src/include/linux/swap.h @@ -0,0 +1,175 @@ +#ifndef _LINUX_SWAP_H +#define _LINUX_SWAP_H + +#include <asm/page.h> + +#define SWAP_FLAG_PREFER 0x8000 /* set if swap priority specified */ +#define SWAP_FLAG_PRIO_MASK 0x7fff +#define SWAP_FLAG_PRIO_SHIFT 0 + +#define MAX_SWAPFILES 8 + +union swap_header { + struct + { + char reserved[PAGE_SIZE - 10]; + char magic[10]; + } magic; + struct + { + char bootbits[1024]; /* Space for disklabel etc. */ + unsigned int version; + unsigned int last_page; + unsigned int nr_badpages; + unsigned int padding[125]; + unsigned int badpages[1]; + } info; +}; + +#ifdef __KERNEL__ + +/* + * Max bad pages in the new format.. + */ +#define __swapoffset(x) ((unsigned long)&((union swap_header *)0)->x) +#define MAX_SWAP_BADPAGES \ + ((__swapoffset(magic.magic) - __swapoffset(info.badpages)) / sizeof(int)) + +#undef DEBUG_SWAP + +#include <asm/atomic.h> + +#define SWP_USED 1 +#define SWP_WRITEOK 3 + +#define SWAP_CLUSTER_MAX 32 + +#define SWAP_MAP_MAX 0x7fff +#define SWAP_MAP_BAD 0x8000 + +struct swap_info_struct { + unsigned int flags; + kdev_t swap_device; + struct dentry * swap_file; + unsigned short * swap_map; + unsigned char * swap_lockmap; + unsigned int lowest_bit; + unsigned int highest_bit; + unsigned int cluster_next; + unsigned int cluster_nr; + int prio; /* swap priority */ + int pages; + unsigned long max; + int next; /* next entry on swap list */ +}; + +extern int nr_swap_pages; +extern int nr_free_pages; +extern atomic_t nr_async_pages; +extern struct inode swapper_inode; +extern unsigned long page_cache_size; +extern int buffermem; + +/* Incomplete types for prototype declarations: */ +struct task_struct; +struct vm_area_struct; +struct sysinfo; + +/* linux/ipc/shm.c */ +extern int shm_swap (int, int); + +/* linux/mm/swap.c */ +extern void swap_setup (void); + +/* linux/mm/vmscan.c */ +extern int try_to_free_pages(unsigned int gfp_mask); + +/* linux/mm/page_io.c */ +extern void rw_swap_page(int, unsigned long, char *, int); +extern void rw_swap_page_nocache(int, unsigned long, char *); +extern void rw_swap_page_nolock(int, unsigned long, char *, int); +extern void swap_after_unlock_page (unsigned long entry); + +/* linux/mm/page_alloc.c */ +extern void swap_in(struct task_struct *, struct vm_area_struct *, + pte_t *, unsigned long, int); + + +/* linux/mm/swap_state.c */ +extern void show_swap_cache_info(void); +extern int add_to_swap_cache(struct page *, unsigned long); +extern int swap_duplicate(unsigned long); +extern int swap_check_entry(unsigned long); +struct page * lookup_swap_cache(unsigned long); +extern struct page * read_swap_cache_async(unsigned long, int); +#define read_swap_cache(entry) read_swap_cache_async(entry, 1); +extern int FASTCALL(swap_count(unsigned long)); +/* + * Make these inline later once they are working properly. + */ +extern void delete_from_swap_cache(struct page *page); +extern void free_page_and_swap_cache(unsigned long addr); + +/* linux/mm/swapfile.c */ +extern unsigned int nr_swapfiles; +extern struct swap_info_struct swap_info[]; +void si_swapinfo(struct sysinfo *); +unsigned long get_swap_page(void); +extern void FASTCALL(swap_free(unsigned long)); +struct swap_list_t { + int head; /* head of priority-ordered swapfile list */ + int next; /* swapfile to be used next */ +}; +extern struct swap_list_t swap_list; +asmlinkage int sys_swapoff(const char *); +asmlinkage int sys_swapon(const char *, int); + +/* + * vm_ops not present page codes for shared memory. + * + * Will go away eventually.. + */ +#define SHM_SWP_TYPE 0x20 + +/* + * swap cache stuff (in linux/mm/swap_state.c) + */ + +#define SWAP_CACHE_INFO + +#ifdef SWAP_CACHE_INFO +extern unsigned long swap_cache_add_total; +extern unsigned long swap_cache_del_total; +extern unsigned long swap_cache_find_total; +extern unsigned long swap_cache_find_success; +#endif + +extern inline unsigned long in_swap_cache(struct page *page) +{ + if (PageSwapCache(page)) + return page->offset; + return 0; +} + +/* + * Work out if there are any other processes sharing this page, ignoring + * any page reference coming from the swap cache, or from outstanding + * swap IO on this page. (The page cache _does_ count as another valid + * reference to the page, however.) + */ +static inline int is_page_shared(struct page *page) +{ + unsigned int count; + if (PageReserved(page)) + return 1; + count = atomic_read(&page->count); + if (PageSwapCache(page)) + count += swap_count(page->offset) - 2; + if (PageFreeAfter(page)) + count--; + return count > 1; +} + +#endif /* __KERNEL__*/ + +#endif /* _LINUX_SWAP_H */ |