Messages in this thread Patch in this message | | | Date | Sun, 24 Apr 2011 13:59:43 +1200 | From | Michael Schmitz <> | Subject | Re: [patch] m68k, mm: set all online nodes in N_NORMAL_MEMORY |
| |
David Rientjes wrote: > For m68k, N_NORMAL_MEMORY represents all nodes that have present memory > since it does not support HIGHMEM. This patch sets the bit at the time > the node is brought online. > > If N_NORMAL_MEMORY is not accurate, slub may encounter errors since it > uses this nodemask to setup per-cache kmem_cache_node data structures. > > Signed-off-by: David Rientjes <rientjes@google.com> > --- > arch/m68k/mm/init_mm.c | 2 ++ > 1 files changed, 2 insertions(+), 0 deletions(-) > > 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); > } > > As Andreas pointed out, node_present_pages is set in free_area_init_node which only gets called at the very end of m68k mm paging_init.
The correct patch would be something like this - the need for the conditional is perhaps debatable, seeing as we set the pages present just before node_set_state.
Tested on my ARAnyM test setup so far. I'd like to wait for an independent kernel image built by Thorsten before I test on the actual hardware. Sorry but you'll have to restart your build Thorsten :-)
Signed-off-by: Michael Schmitz <schmitz@debian.org> -- diff --git a/arch/m68k/mm/motorola.c b/arch/m68k/mm/motorola.c index 02b7a03..b806c19 100644 --- a/arch/m68k/mm/motorola.c +++ b/arch/m68k/mm/motorola.c @@ -300,6 +300,8 @@ void __init paging_init(void) zones_size[ZONE_DMA] = m68k_memory[i].size >> PAGE_SHIFT; free_area_init_node(i, zones_size, m68k_memory[i].addr >> PAGE_SHIFT, NULL); + if (node_present_pages(i)) + node_set_state(i, N_NORMAL_MEMORY); } }
| |