]> pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - include/asm-mips/page.h
Merge branch 'upstream' of git://git.kernel.org/pub/scm/linux/kernel/git/jgarzik...
[linux-2.6-omap-h63xx.git] / include / asm-mips / page.h
index ee25a779bf4984f84d4ac7ed4b418299a3354c28..3d262c01521c3ea78821797cf7de79b049c9d9d2 100644 (file)
@@ -139,11 +139,30 @@ typedef struct { unsigned long pgprot; } pgprot_t;
 
 #define pfn_to_kaddr(pfn)      __va((pfn) << PAGE_SHIFT)
 
+#ifndef CONFIG_SPARSEMEM
 #ifndef CONFIG_NEED_MULTIPLE_NODES
-#define pfn_to_page(pfn)       (mem_map + (pfn))
-#define page_to_pfn(page)      ((unsigned long)((page) - mem_map))
 #define pfn_valid(pfn)         ((pfn) < max_mapnr)
 #endif
+#endif
+
+#ifdef CONFIG_FLATMEM
+
+#define pfn_valid(pfn)         ((pfn) < max_mapnr)
+
+#elif defined(CONFIG_NEED_MULTIPLE_NODES)
+
+#define pfn_valid(pfn)                                                 \
+({                                                                     \
+       unsigned long __pfn = (pfn);                                    \
+       int __n = pfn_to_nid(__pfn);                                    \
+       ((__n >= 0) ? (__pfn < NODE_DATA(__n)->node_start_pfn +         \
+                              NODE_DATA(__n)->node_spanned_pages)      \
+                   : 0);                                               \
+})
+
+#else
+#error Provide a definition of pfn_valid
+#endif
 
 #define virt_to_page(kaddr)    pfn_to_page(__pa(kaddr) >> PAGE_SHIFT)
 #define virt_addr_valid(kaddr) pfn_valid(__pa(kaddr) >> PAGE_SHIFT)
@@ -160,6 +179,7 @@ typedef struct { unsigned long pgprot; } pgprot_t;
 #define WANT_PAGE_VIRTUAL
 #endif
 
+#include <asm-generic/memory_model.h>
 #include <asm-generic/page.h>
 
 #endif /* _ASM_PAGE_H */