[IA64] - Make pfn_valid more precise for SGI Altix systems
authorDean Roe <roe@sgi.com>
Wed, 9 Nov 2005 20:25:06 +0000 (14:25 -0600)
committerTony Luck <tony.luck@intel.com>
Tue, 29 Nov 2005 17:24:10 +0000 (09:24 -0800)
A single SGI Altix system can be divided into multiple partitions,
each running their own instance of the Linux kernel.  pfn_valid()
is currently not optimal for any but the first partition, since it
does not compare the pfn with min_low_pfn before calling the more
costly ia64_pfn_valid().

Signed-off-by: Dean Roe <roe@sgi.com>
Signed-off-by: Tony Luck <tony.luck@intel.com>
arch/ia64/kernel/ia64_ksyms.c
include/asm-ia64/page.h

index 01572814abe42bfefff13b134c58bfe3ebd38e07..5db9d3bcbbcbe262b85352e3c8fb3be7d1ff8597 100644 (file)
@@ -42,6 +42,7 @@ EXPORT_SYMBOL(clear_page);
 
 #ifdef CONFIG_VIRTUAL_MEM_MAP
 #include <linux/bootmem.h>
+EXPORT_SYMBOL(min_low_pfn);    /* defined by bootmem.c, but not exported by generic code */
 EXPORT_SYMBOL(max_low_pfn);    /* defined by bootmem.c, but not exported by generic code */
 #endif
 
index 9dd9da10527849add26749970dc31a963237854a..5e6362a786b72b2b5b9ce98a51db94d1b74f27d2 100644 (file)
@@ -110,8 +110,9 @@ extern int ia64_pfn_valid (unsigned long pfn);
 # define pfn_to_page(pfn)      (mem_map + (pfn))
 #elif defined(CONFIG_DISCONTIGMEM)
 extern struct page *vmem_map;
+extern unsigned long min_low_pfn;
 extern unsigned long max_low_pfn;
-# define pfn_valid(pfn)                (((pfn) < max_low_pfn) && ia64_pfn_valid(pfn))
+# define pfn_valid(pfn)                (((pfn) >= min_low_pfn) && ((pfn) < max_low_pfn) && ia64_pfn_valid(pfn))
 # define page_to_pfn(page)     ((unsigned long) (page - vmem_map))
 # define pfn_to_page(pfn)      (vmem_map + (pfn))
 #endif