--- include/linux/mm.h | 24 ++---------------------- mm/page_alloc.c | 35 +++++++++++++++++++++++++++++++++++ 2 files changed, 37 insertions(+), 22 deletions(-) Index: linux-2.6/include/linux/mm.h =================================================================== --- linux-2.6.orig/include/linux/mm.h 2007-10-02 19:09:19.000000000 -0700 +++ linux-2.6/include/linux/mm.h 2007-10-02 19:14:41.000000000 -0700 @@ -585,32 +585,12 @@ static inline void set_page_links(struct */ #include -static __always_inline void *lowmem_page_address(struct page *page) -{ - return __va(page_to_pfn(page) << PAGE_SHIFT); -} +void *page_address(const struct page *page); #if defined(CONFIG_HIGHMEM) && !defined(WANT_PAGE_VIRTUAL) -#define HASHED_PAGE_VIRTUAL -#endif - -#if defined(WANT_PAGE_VIRTUAL) -#define page_address(page) ((page)->virtual) -#define set_page_address(page, address) \ - do { \ - (page)->virtual = (address); \ - } while(0) -#define page_address_init() do { } while(0) -#endif - -#if defined(HASHED_PAGE_VIRTUAL) -void *page_address(struct page *page); void set_page_address(struct page *page, void *virtual); void page_address_init(void); -#endif - -#if !defined(HASHED_PAGE_VIRTUAL) && !defined(WANT_PAGE_VIRTUAL) -#define page_address(page) lowmem_page_address(page) +#else #define set_page_address(page, address) do { } while(0) #define page_address_init() do { } while(0) #endif Index: linux-2.6/mm/page_alloc.c =================================================================== --- linux-2.6.orig/mm/page_alloc.c 2007-10-02 19:09:38.000000000 -0700 +++ linux-2.6/mm/page_alloc.c 2007-10-02 19:11:33.000000000 -0700 @@ -173,6 +173,41 @@ int virt_addr_valid(const void *kaddr) #endif } +void *page_address(const struct page *page) +{ +#ifdef WANT_PAGE_VIRTUAL + return page->virtual; +#else + return __va(page_to_pfn(page) << PAGE_SHIFT); +#endif +} + +#if defined(CONFIG_HIGHMEM) && !defined(WANT_PAGE_VIRTUAL) +#define HASHED_PAGE_VIRTUAL +#endif + +#if defined(WANT_PAGE_VIRTUAL) +#define page_address(page) ((page)->virtual) +#define set_page_address(page, address) \ + do { \ + (page)->virtual = (address); \ + } while(0) +#define page_address_init() do { } while(0) +#endif + +#if defined(HASHED_PAGE_VIRTUAL) +void *page_address(struct page *page); +void set_page_address(struct page *page, void *virtual); +void page_address_init(void); +#endif + +#if !defined(HASHED_PAGE_VIRTUAL) && !defined(WANT_PAGE_VIRTUAL) +#define page_address(page) lowmem_page_address(page) +#define set_page_address(page, address) do { } while(0) +#define page_address_init() do { } while(0) +#endif + + #ifdef CONFIG_DEBUG_VM static int page_outside_zone_boundaries(struct zone *zone, struct page *page) {