From: Hugh Dickins anobjrmap 2/6 create include/linux/rmap.h Start small: linux/rmap-locking.h has already gathered some declarations unrelated to locking, then the rest of the rmap declarations were over in linux/swap.h: gather them all together in linux/rmap.h. diff -upN reference/fs/exec.c current/fs/exec.c --- reference/fs/exec.c 2004-04-29 10:39:09.000000000 -0700 +++ current/fs/exec.c 2004-04-29 10:39:09.000000000 -0700 @@ -45,7 +45,7 @@ #include #include #include -#include +#include #include #include diff -upN reference/include/linux/rmap-locking.h current/include/linux/rmap-locking.h --- reference/include/linux/rmap-locking.h 2004-04-07 14:54:36.000000000 -0700 +++ current/include/linux/rmap-locking.h 1969-12-31 16:00:00.000000000 -0800 @@ -1,23 +0,0 @@ -/* - * include/linux/rmap-locking.h - * - * Locking primitives for exclusive access to a page's reverse-mapping - * pte chain. - */ - -#include - -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 -upN /dev/null current/include/linux/rmap.h --- /dev/null 2004-02-24 15:23:11.000000000 -0800 +++ current/include/linux/rmap.h 2004-04-29 10:39:09.000000000 -0700 @@ -0,0 +1,51 @@ +#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 +#include + +#define pte_chain_lock(page) bit_spin_lock(PG_chainlock, &(page)->flags) +#define pte_chain_unlock(page) bit_spin_unlock(PG_chainlock, &(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 *); +int page_convert_anon(struct page *page); + +/* + * 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 -upN reference/include/linux/swap.h current/include/linux/swap.h --- reference/include/linux/swap.h 2004-04-29 10:39:09.000000000 -0700 +++ current/include/linux/swap.h 2004-04-29 10:39:09.000000000 -0700 @@ -76,7 +76,6 @@ struct reclaim_state { #ifdef __KERNEL__ struct address_space; -struct pte_chain; struct sysinfo; struct writeback_control; struct zone; @@ -177,28 +176,11 @@ extern int try_to_free_pages(struct zone 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 *)); - -int page_convert_anon(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 - #ifdef CONFIG_SWAP /* linux/mm/page_io.c */ extern int swap_readpage(struct file *, struct page *); diff -upN reference/mm/fremap.c current/mm/fremap.c --- reference/mm/fremap.c 2004-04-29 10:39:09.000000000 -0700 +++ current/mm/fremap.c 2004-04-29 10:39:09.000000000 -0700 @@ -12,7 +12,7 @@ #include #include #include -#include +#include #include #include diff -upN reference/mm/memory.c current/mm/memory.c --- reference/mm/memory.c 2004-04-29 10:39:09.000000000 -0700 +++ current/mm/memory.c 2004-04-29 10:39:09.000000000 -0700 @@ -43,7 +43,7 @@ #include #include #include -#include +#include #include #include diff -upN reference/mm/mremap.c current/mm/mremap.c --- reference/mm/mremap.c 2004-02-18 14:57:24.000000000 -0800 +++ current/mm/mremap.c 2004-04-29 10:39:09.000000000 -0700 @@ -15,7 +15,7 @@ #include #include #include -#include +#include #include #include diff -upN reference/mm/rmap.c current/mm/rmap.c --- reference/mm/rmap.c 2004-04-29 10:39:09.000000000 -0700 +++ current/mm/rmap.c 2004-04-29 10:39:09.000000000 -0700 @@ -26,7 +26,7 @@ #include #include #include -#include +#include #include #include @@ -552,7 +552,6 @@ out: * pte_chain_lock shrink_list() * mm->page_table_lock try_to_unmap_one(), trylock */ -static int FASTCALL(try_to_unmap_one(struct page *, pte_addr_t)); static int fastcall try_to_unmap_one(struct page * page, pte_addr_t paddr) { pte_t *ptep = rmap_ptep_map(paddr); diff -upN reference/mm/swapfile.c current/mm/swapfile.c --- reference/mm/swapfile.c 2004-04-29 10:39:09.000000000 -0700 +++ current/mm/swapfile.c 2004-04-29 10:39:09.000000000 -0700 @@ -21,7 +21,7 @@ #include #include #include -#include +#include #include #include diff -upN reference/mm/vmscan.c current/mm/vmscan.c --- reference/mm/vmscan.c 2004-04-07 14:54:38.000000000 -0700 +++ current/mm/vmscan.c 2004-04-29 10:39:09.000000000 -0700 @@ -28,7 +28,7 @@ #include #include #include -#include +#include #include #include #include