Signed-off-by: Dave Hansen --- include/linux/mmzone.h | 0 memhotplug-dave/mm/sparse.c | 16 ++++++++++++---- 2 files changed, 12 insertions(+), 4 deletions(-) diff -puN mm/sparse.c~sparse-debug mm/sparse.c --- memhotplug/mm/sparse.c~sparse-debug 2005-06-23 09:04:52.000000000 -0700 +++ memhotplug-dave/mm/sparse.c 2005-06-23 09:14:23.000000000 -0700 @@ -13,6 +13,8 @@ * * 1) mem_section - memory sections, mem_map's for valid memory */ +struct mem_section __mem_section[NR_MEM_SECTIONS] + ____cacheline_maxaligned_in_smp; #ifdef CONFIG_ARCH_SPARSEMEM_EXTREME struct mem_section *mem_section[NR_SECTION_ROOTS] ____cacheline_maxaligned_in_smp; @@ -23,15 +25,13 @@ static void sparse_index_init(unsigned l if (mem_section[root]) return; - mem_section[root] = alloc_bootmem_node(NODE_DATA(nid), PAGE_SIZE); + mem_section[root] = &__mem_section[section]; if (mem_section[root]) memset(mem_section[root], 0, PAGE_SIZE); else panic("memory_present: NO MEMORY\n"); } #else -struct mem_section mem_section[NR_MEM_SECTIONS] - ____cacheline_maxaligned_in_smp; #endif EXPORT_SYMBOL(mem_section); @@ -40,10 +40,14 @@ void memory_present(int nid, unsigned lo { unsigned long pfn; + printk("%s(%d, %08lx, %08lx)\n", __func__, nid, start, end); start &= PAGE_SECTION_MASK; for (pfn = start; pfn < end; pfn += PAGES_PER_SECTION) { - unsigned long section = pfn_to_section_nr(pfn); + unsigned long section; struct mem_section *ms; + printk("\tpfn: %08lx\n", pfn); + section = pfn_to_section_nr(pfn); + printk("\tsection: %08lx\n", section); sparse_index_init(section, nid); @@ -51,6 +55,7 @@ void memory_present(int nid, unsigned lo if (!ms->section_mem_map) ms->section_mem_map = SECTION_MARKED_PRESENT; } + printk("%s(%d, %08lx, %08lx) done\n", __func__, nid, start, end); } /* @@ -97,6 +102,7 @@ struct page *sparse_decode_mem_map(unsig static int sparse_init_one_section(struct mem_section *ms, unsigned long pnum, struct page *mem_map) { + printk("sparse.c: %s()\n", __func__); if (!valid_section(ms)) return -EINVAL; @@ -110,6 +116,7 @@ static struct page *sparse_early_mem_map struct page *map; int nid = early_pfn_to_nid(section_nr_to_pfn(pnum)); struct mem_section *ms = __nr_to_section(pnum); + printk("sparse.c: %s()\n", __func__); map = alloc_remap(nid, sizeof(struct page) * PAGES_PER_SECTION); if (map) @@ -133,6 +140,7 @@ void sparse_init(void) { unsigned long pnum; struct page *map; + printk("sparse.c: %s()\n", __func__); for (pnum = 0; pnum < NR_MEM_SECTIONS; pnum++) { if (!valid_section_nr(pnum)) diff -puN include/linux/mmzone.h~sparse-debug include/linux/mmzone.h _