From: Bob Picco This patch abstracts the mapping from a section number to a section pointer. Signed-off-by: Andy Whitcroft Signed-off-by: Bob Picco Signed-off-by: Andrew Morton --- 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))); } /* _