From: Bob Picco <bob.picco@hp.com>

This patch abstracts the mapping from a section number to a section pointer.

Signed-off-by: Andy Whitcroft <apw@shadowen.org>
Signed-off-by: Bob Picco <bob.picco@hp.com>
Signed-off-by: Andrew Morton <akpm@osdl.org>
---

 include/linux/mmzone.h |   16 +++++++++++-----
 1 files changed, 11 insertions(+), 5 deletions(-)

diff -puN include/linux/mmzone.h~sparsemem-hotplug-base-abstract-section-number-to-section-mapping include/linux/mmzone.h
--- 25/include/linux/mmzone.h~sparsemem-hotplug-base-abstract-section-number-to-section-mapping	2005-06-15 17:48:52.000000000 -0700
+++ 25-akpm/include/linux/mmzone.h	2005-06-15 17:48:52.000000000 -0700
@@ -472,6 +472,11 @@ struct mem_section {
 
 extern struct mem_section mem_section[NR_MEM_SECTIONS];
 
+static inline struct mem_section *__nr_to_section(unsigned long nr)
+{
+	return &mem_section[nr];
+}
+
 /*
  * We use the lower bits of the mem_map pointer to store
  * a little bit of information.  There should be at least
@@ -499,9 +504,9 @@ static inline int section_has_mem_map(st
 	return (section->section_mem_map & SECTION_HAS_MEM_MAP);
 }
 
-static inline int valid_section_nr(int nr)
+static inline int valid_section_nr(unsigned long nr)
 {
-	return valid_section(&mem_section[nr]);
+	return valid_section(__nr_to_section(nr));
 }
 
 /*
@@ -511,7 +516,7 @@ static inline int valid_section_nr(int n
 
 static inline struct mem_section *__pfn_to_section(unsigned long pfn)
 {
-	return &mem_section[pfn_to_section_nr(pfn)];
+	return __nr_to_section(pfn_to_section_nr(pfn));
 }
 
 #define pfn_to_page(pfn) 						\
@@ -521,14 +526,15 @@ static inline struct mem_section *__pfn_
 })
 #define page_to_pfn(page)						\
 ({									\
-	page - __section_mem_map_addr(&mem_section[page_to_section(page)]);	\
+	page - __section_mem_map_addr(__nr_to_section(			\
+		page_to_section(page)));				\
 })
 
 static inline int pfn_valid(unsigned long pfn)
 {
 	if (pfn_to_section_nr(pfn) >= NR_MEM_SECTIONS)
 		return 0;
-	return valid_section(&mem_section[pfn_to_section_nr(pfn)]);
+	return valid_section(__nr_to_section(pfn_to_section_nr(pfn)));
 }
 
 /*
_