linux 2.6.16.38 w/ vs2.0.3-rc1
[linux-2.6.git] / include / asm-i386 / mmzone.h
index 22cb07c..74f595d 100644 (file)
@@ -14,7 +14,7 @@ extern struct pglist_data *node_data[];
 
 #ifdef CONFIG_X86_NUMAQ
        #include <asm/numaq.h>
-#elif defined(CONFIG_ACPI_SRAT)/* summit or generic arch */
+#else  /* summit or generic arch */
        #include <asm/srat.h>
 #endif
 
@@ -70,6 +70,8 @@ static inline int pfn_to_nid(unsigned long pfn)
 #endif
 }
 
+#define node_localnr(pfn, nid)         ((pfn) - node_data[nid]->node_start_pfn)
+
 /*
  * Following are macros that each numa implmentation must define.
  */
@@ -84,6 +86,21 @@ static inline int pfn_to_nid(unsigned long pfn)
 /* XXX: FIXME -- wli */
 #define kern_addr_valid(kaddr) (0)
 
+#define pfn_to_page(pfn)                                               \
+({                                                                     \
+       unsigned long __pfn = pfn;                                      \
+       int __node  = pfn_to_nid(__pfn);                                \
+       &NODE_DATA(__node)->node_mem_map[node_localnr(__pfn,__node)];   \
+})
+
+#define page_to_pfn(pg)                                                        \
+({                                                                     \
+       struct page *__page = pg;                                       \
+       struct zone *__zone = page_zone(__page);                        \
+       (unsigned long)(__page - __zone->zone_mem_map)                  \
+               + __zone->zone_start_pfn;                               \
+})
+
 #ifdef CONFIG_X86_NUMAQ            /* we have contiguous memory on NUMA-Q */
 #define pfn_valid(pfn)          ((pfn) < num_physpages)
 #else