diff options
| author | Andrew Morton <akpm@osdl.org> | 2004-04-12 00:53:50 -0700 |
|---|---|---|
| committer | Linus Torvalds <torvalds@ppc970.osdl.org> | 2004-04-12 00:53:50 -0700 |
| commit | 4c4acd2447ef473f23aee53f04518f93840a8693 (patch) | |
| tree | f22b21da5f7e24ec6fda878fe1e31ce6baba5e74 /include/linux | |
| parent | 3e2ea65d7be031644c6d6a3ed5bd89af5ef2f090 (diff) | |
[PATCH] rmap 1 linux/rmap.h
From: Hugh Dickins <hugh@veritas.com>
First of a batch of three rmap patches: this initial batch of three paving
the way for a move to some form of object-based rmap (probably Andrea's, but
drawing from mine too), and making almost no functional change by itself. A
few days will intervene before the next batch, to give the struct page
changes in the second patch some exposure before proceeding.
rmap 1 create include/linux/rmap.h
Start small: linux/rmap-locking.h has already gathered some declarations
unrelated to locking, and the rest of the rmap declarations were over in
linux/swap.h: gather them all together in linux/rmap.h, and rename the
pte_chain_lock to rmap_lock.
Diffstat (limited to 'include/linux')
| -rw-r--r-- | include/linux/page-flags.h | 2 | ||||
| -rw-r--r-- | include/linux/rmap-locking.h | 23 | ||||
| -rw-r--r-- | include/linux/rmap.h | 52 | ||||
| -rw-r--r-- | include/linux/swap.h | 16 |
4 files changed, 53 insertions, 40 deletions
diff --git a/include/linux/page-flags.h b/include/linux/page-flags.h index bd6ddb279c55..93f22640b6cb 100644 --- a/include/linux/page-flags.h +++ b/include/linux/page-flags.h @@ -69,7 +69,7 @@ #define PG_private 12 /* Has something at ->private */ #define PG_writeback 13 /* Page is under writeback */ #define PG_nosave 14 /* Used for system suspend/resume */ -#define PG_chainlock 15 /* lock bit for ->pte_chain */ +#define PG_maplock 15 /* Lock bit for rmap to ptes */ #define PG_direct 16 /* ->pte_chain points directly at pte */ #define PG_mappedtodisk 17 /* Has blocks allocated on-disk */ diff --git a/include/linux/rmap-locking.h b/include/linux/rmap-locking.h deleted file mode 100644 index cb30ed470cf6..000000000000 --- a/include/linux/rmap-locking.h +++ /dev/null @@ -1,23 +0,0 @@ -/* - * include/linux/rmap-locking.h - * - * Locking primitives for exclusive access to a page's reverse-mapping - * pte chain. - */ - -#include <linux/slab.h> - -struct pte_chain; -extern kmem_cache_t *pte_chain_cache; - -#define pte_chain_lock(page) bit_spin_lock(PG_chainlock, (unsigned long *)&page->flags) -#define pte_chain_unlock(page) bit_spin_unlock(PG_chainlock, (unsigned long *)&page->flags) - -struct pte_chain *pte_chain_alloc(int gfp_flags); -void __pte_chain_free(struct pte_chain *pte_chain); - -static inline void pte_chain_free(struct pte_chain *pte_chain) -{ - if (pte_chain) - __pte_chain_free(pte_chain); -} diff --git a/include/linux/rmap.h b/include/linux/rmap.h new file mode 100644 index 000000000000..5f9b35f2fa65 --- /dev/null +++ b/include/linux/rmap.h @@ -0,0 +1,52 @@ +#ifndef _LINUX_RMAP_H +#define _LINUX_RMAP_H +/* + * Declarations for Reverse Mapping functions in mm/rmap.c + * Its structures are declared within that file. + */ + +#include <linux/config.h> +#include <linux/linkage.h> + +#define rmap_lock(page) \ + bit_spin_lock(PG_maplock, (unsigned long *)&(page)->flags) +#define rmap_unlock(page) \ + bit_spin_unlock(PG_maplock, (unsigned long *)&(page)->flags) + +#ifdef CONFIG_MMU + +struct pte_chain; +struct pte_chain *pte_chain_alloc(int gfp_flags); +void __pte_chain_free(struct pte_chain *pte_chain); + +static inline void pte_chain_free(struct pte_chain *pte_chain) +{ + if (pte_chain) + __pte_chain_free(pte_chain); +} + +struct pte_chain * fastcall + page_add_rmap(struct page *, pte_t *, struct pte_chain *); +void fastcall page_remove_rmap(struct page *, pte_t *); + +/* + * Called from mm/vmscan.c to handle paging out + */ +int fastcall page_referenced(struct page *); +int fastcall try_to_unmap(struct page *); + +#else /* !CONFIG_MMU */ + +#define page_referenced(page) TestClearPageReferenced(page) +#define try_to_unmap(page) SWAP_FAIL + +#endif /* CONFIG_MMU */ + +/* + * Return values of try_to_unmap + */ +#define SWAP_SUCCESS 0 +#define SWAP_AGAIN 1 +#define SWAP_FAIL 2 + +#endif /* _LINUX_RMAP_H */ diff --git a/include/linux/swap.h b/include/linux/swap.h index d189090cf63a..f911d8afb8a5 100644 --- a/include/linux/swap.h +++ b/include/linux/swap.h @@ -76,7 +76,6 @@ struct reclaim_state { #ifdef __KERNEL__ struct address_space; -struct pte_chain; struct sysinfo; struct writeback_control; struct zone; @@ -177,26 +176,11 @@ extern int try_to_free_pages(struct zone **, unsigned int, unsigned int); extern int shrink_all_memory(int); extern int vm_swappiness; -/* linux/mm/rmap.c */ #ifdef CONFIG_MMU -int FASTCALL(page_referenced(struct page *)); -struct pte_chain *FASTCALL(page_add_rmap(struct page *, pte_t *, - struct pte_chain *)); -void FASTCALL(page_remove_rmap(struct page *, pte_t *)); -int FASTCALL(try_to_unmap(struct page *)); - /* linux/mm/shmem.c */ extern int shmem_unuse(swp_entry_t entry, struct page *page); -#else -#define page_referenced(page) TestClearPageReferenced(page) -#define try_to_unmap(page) SWAP_FAIL #endif /* CONFIG_MMU */ -/* return values of try_to_unmap */ -#define SWAP_SUCCESS 0 -#define SWAP_AGAIN 1 -#define SWAP_FAIL 2 - extern void swap_unplug_io_fn(struct backing_dev_info *); #ifdef CONFIG_SWAP |
