Looks like that wasn't helping after all. I still need to revert said commit. Guess I'll have to check what node_present_pages(node) returns in each case ...
Cheers, MIchael On Sat, Apr 23, 2011 at 1:31 PM, Michael Schmitz <[email protected]> wrote: > I'll check this out - might well be the correct fix for our problems. > > Cheers, > > Michael > > > On Thu, Apr 21, 2011 at 8:19 PM, Geert Uytterhoeven > <[email protected]> wrote: >> ---------- Forwarded message ---------- >> From: David Rientjes <[email protected]> >> Date: Thu, Apr 21, 2011 at 01:12 >> Subject: Re: [PATCH v3] mm: make expand_downwards symmetrical to >> expand_upwards >> To: James Bottomley <[email protected]> >> Cc: KOSAKI Motohiro <[email protected]>, Pekka Enberg >> <[email protected]>, Christoph Lameter <[email protected]>, Michal Hocko >> <[email protected]>, Andrew Morton <[email protected]>, Hugh >> Dickins <[email protected]>, [email protected], LKML >> <[email protected]>, [email protected], Ingo >> Molnar <[email protected]>, x86 maintainers <[email protected]> >> >> >> On Wed, 20 Apr 2011, James Bottomley wrote: >> >>> > This is probably because the parisc's DISCONTIGMEM memory ranges don't >>> > have bits set in N_NORMAL_MEMORY. >>> > >>> > diff --git a/arch/parisc/mm/init.c b/arch/parisc/mm/init.c >>> > --- a/arch/parisc/mm/init.c >>> > +++ b/arch/parisc/mm/init.c >>> > @@ -266,8 +266,10 @@ static void __init setup_bootmem(void) >>> > } >>> > memset(pfnnid_map, 0xff, sizeof(pfnnid_map)); >>> > >>> > - for (i = 0; i < npmem_ranges; i++) >>> > + for (i = 0; i < npmem_ranges; i++) { >>> > + node_set_state(i, N_NORMAL_MEMORY); >>> > node_set_online(i); >>> > + } >>> > #endif >>> >>> Yes, this seems to be the missing piece that gets it to boot. We really >>> need this in generic code, unless someone wants to run through all the >>> other arch's doing it ... >>> >> >> Looking at all other architectures that allow ARCH_DISCONTIGMEM_ENABLE, we >> already know x86 is fine, avr32 disables ARCH_DISCONTIGMEM_ENABLE entirely >> because its code only brings online node 0, and tile already sets the bit >> in N_NORMAL_MEMORY correctly when bringing a node online, probably because >> it was introduced after the various node state masks were added in >> 7ea1530ab3fd back in October 2007. >> >> So we're really only talking about alpha, ia64, m32r, m68k, and mips and >> it only seems to matter when using CONFIG_SLUB, which isn't surprising >> when greping for it: >> >> $ grep -r N_NORMAL_MEMORY mm/* >> mm/memcontrol.c: if (!node_state(node, N_NORMAL_MEMORY)) >> mm/memcontrol.c: if (!node_state(node, >> N_NORMAL_MEMORY)) >> mm/page_alloc.c: [N_NORMAL_MEMORY] = { { [0] = 1UL } }, >> mm/page_alloc.c: >> node_set_state(zone_to_nid(zone), N_NORMAL_MEMORY); >> mm/slub.c: for_each_node_state(node, N_NORMAL_MEMORY) { >> mm/slub.c: for_each_node_state(node, N_NORMAL_MEMORY) { >> mm/slub.c: for_each_node_state(node, N_NORMAL_MEMORY) { >> mm/slub.c: for_each_node_state(node, N_NORMAL_MEMORY) { >> mm/slub.c: for_each_node_state(node, N_NORMAL_MEMORY) { >> mm/slub.c: for_each_node_state(node, N_NORMAL_MEMORY) { >> mm/slub.c: for_each_node_state(node, N_NORMAL_MEMORY) { >> mm/slub.c: for_each_node_state(node, N_NORMAL_MEMORY) { >> mm/slub.c: for_each_node_state(node, N_NORMAL_MEMORY) { >> mm/slub.c: for_each_node_state(node, N_NORMAL_MEMORY) >> >> Those memory controller occurrences only result in it passing a node id of >> -1 to kmalloc_node() which means no specific node target, and that's fine >> for DISCONTIGMEM since we don't care about any proximity between memory >> ranges. >> >> This should fix the remaining architectures so they can use CONFIG_SLUB, >> but I hope it can be tested by the individual arch maintainers like you >> did for parisc. >> >> diff --git a/arch/alpha/mm/numa.c b/arch/alpha/mm/numa.c >> --- a/arch/alpha/mm/numa.c >> +++ b/arch/alpha/mm/numa.c >> @@ -245,6 +245,7 @@ setup_memory_node(int nid, void *kernel_end) >> bootmap_size, BOOTMEM_DEFAULT); >> printk(" reserving pages %ld:%ld\n", bootmap_start, >> bootmap_start+PFN_UP(bootmap_size)); >> >> + node_set_state(nid, N_NORMAL_MEMORY); >> node_set_online(nid); >> } >> >> diff --git a/arch/ia64/mm/discontig.c b/arch/ia64/mm/discontig.c >> --- a/arch/ia64/mm/discontig.c >> +++ b/arch/ia64/mm/discontig.c >> @@ -573,6 +573,8 @@ void __init find_memory(void) >> map>>PAGE_SHIFT, >> bdp->node_min_pfn, >> bdp->node_low_pfn); >> + if (node_present_pages(node)) >> + node_set_state(node, N_NORMAL_MEMORY); >> } >> >> efi_memmap_walk(filter_rsvd_memory, free_node_bootmem); >> diff --git a/arch/m32r/kernel/setup.c b/arch/m32r/kernel/setup.c >> --- a/arch/m32r/kernel/setup.c >> +++ b/arch/m32r/kernel/setup.c >> @@ -247,7 +247,9 @@ void __init setup_arch(char **cmdline_p) >> >> #ifdef CONFIG_DISCONTIGMEM >> nodes_clear(node_online_map); >> + node_set_state(0, N_NORMAL_MEMORY); /* always has memory */ >> node_set_online(0); >> + node_set_state(1, N_NORMAL_MEMORY); /* always has memory */ >> node_set_online(1); >> #endif /* CONFIG_DISCONTIGMEM */ >> >> diff --git a/arch/m68k/mm/init_mm.c b/arch/m68k/mm/init_mm.c >> --- a/arch/m68k/mm/init_mm.c >> +++ b/arch/m68k/mm/init_mm.c >> @@ -59,6 +59,8 @@ void __init m68k_setup_node(int node) >> } >> #endif >> pg_data_map[node].bdata = bootmem_node_data + node; >> + if (node_present_pages(node)) >> + node_set_state(node, N_NORMAL_MEMORY); >> node_set_online(node); >> } >> >> diff --git a/arch/mips/sgi-ip27/ip27-memory.c >> b/arch/mips/sgi-ip27/ip27-memory.c >> --- a/arch/mips/sgi-ip27/ip27-memory.c >> +++ b/arch/mips/sgi-ip27/ip27-memory.c >> @@ -471,6 +471,8 @@ void __init paging_init(void) >> >> if (end_pfn > max_low_pfn) >> max_low_pfn = end_pfn; >> + if (end_pfn > start_pfn) >> + node_set_state(node, N_NORMAL_MEMORY); >> } >> zones_size[ZONE_NORMAL] = max_low_pfn; >> free_area_init_nodes(zones_size); >> -- >> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in >> the body of a message to [email protected] >> More majordomo info at http://vger.kernel.org/majordomo-info.html >> Please read the FAQ at http://www.tux.org/lkml/ >> >> >> >> -- >> Gr{oetje,eeting}s, >> >> Geert >> >> -- >> Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- >> [email protected] >> >> In personal conversations with technical people, I call myself a hacker. But >> when I'm talking to journalists I just say "programmer" or something like >> that. >> -- Linus Torvalds >> > -- To unsubscribe from this list: send the line "unsubscribe linux-m68k" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
