Messages in this thread Patch in this message | | | Date | Mon, 14 Apr 2008 09:23:42 +0200 | From | Ingo Molnar <> | Subject | Re: replace patch about memmap |
| |
* Yinghai Lu <yhlu.kernel@gmail.com> wrote:
> Ingo, > > please use attached one to replace the two in x86.git/testing.
thanks Yinghai, applied. The delta patch is below.
Ingo
Index: linux-x86.q/mm/sparse.c =================================================================== --- linux-x86.q.orig/mm/sparse.c +++ linux-x86.q/mm/sparse.c @@ -297,48 +297,50 @@ void __init sparse_init(void) unsigned long pnum; struct page *map; unsigned long *usemap; - struct page **section_map; + unsigned long **usemap_map; int size; - int node; /* * map is using big page (aka 2M in x86 64 bit) * usemap is less one page (aka 24 bytes) * so alloc 2M (with 2M align) and 24 bytes in turn will * make next 2M slip to one more 2M later. - * then in big system, the memmory will have a lot hole... + * then in big system, the memory will have a lot of holes... * here try to allocate 2M pages continously. + * + * powerpc need to call sparse_init_one_section right after each + * sparse_early_mem_map_alloc, so allocate usemap_map at first. */ - size = sizeof(struct page *) * NR_MEM_SECTIONS; - section_map = alloc_bootmem(size); - if (!section_map) - panic("can not allocate section_map\n"); + size = sizeof(unsigned long *) * NR_MEM_SECTIONS; + usemap_map = alloc_bootmem(size); + if (!usemap_map) + panic("can not allocate usemap_map\n"); for (pnum = 0; pnum < NR_MEM_SECTIONS; pnum++) { if (!present_section_nr(pnum)) continue; - section_map[pnum] = sparse_early_mem_map_alloc(pnum); + usemap_map[pnum] = sparse_early_usemap_alloc(pnum); } for (pnum = 0; pnum < NR_MEM_SECTIONS; pnum++) { if (!present_section_nr(pnum)) continue; - map = section_map[pnum]; - if (!map) - continue; - - usemap = sparse_early_usemap_alloc(pnum); + usemap = usemap_map[pnum]; if (!usemap) continue; + map = sparse_early_mem_map_alloc(pnum); + if (!map) + continue; + sparse_init_one_section(__nr_to_section(pnum), pnum, map, usemap); } vmemmap_populate_print_last(); - free_bootmem(__pa(section_map), size); + free_bootmem(__pa(usemap_map), size); } #ifdef CONFIG_MEMORY_HOTPLUG
| |