On Thu, Dec 6, 2018 at 6:03 PM Pingfan Liu <kernelfans@xxxxxxxxx> wrote: > > [...] > > THanks for pointing this out. It made my life easier. So It think the > > bug is that we call init_memory_less_node from this path. I suspect > > numa_register_memblks is the right place to do this. So I admit I > > am not 100% sure but could you give this a try please? > > > Sure. > > > diff --git a/arch/x86/mm/numa.c b/arch/x86/mm/numa.c > > index 1308f5408bf7..4575ae4d5449 100644 > > --- a/arch/x86/mm/numa.c > > +++ b/arch/x86/mm/numa.c > > @@ -527,6 +527,19 @@ static void __init numa_clear_kernel_node_hotplug(void) > > } > > } > > > > +static void __init init_memory_less_node(int nid) > > +{ > > + unsigned long zones_size[MAX_NR_ZONES] = {0}; > > + unsigned long zholes_size[MAX_NR_ZONES] = {0}; > > + > > + free_area_init_node(nid, zones_size, 0, zholes_size); > > + > > + /* > > + * All zonelists will be built later in start_kernel() after per cpu > > + * areas are initialized. > > + */ > > +} > > + > > static int __init numa_register_memblks(struct numa_meminfo *mi) > > { > > unsigned long uninitialized_var(pfn_align); > > @@ -592,6 +605,8 @@ static int __init numa_register_memblks(struct numa_meminfo *mi) > > continue; > > > > alloc_node_data(nid); > > + if (!end) > > + init_memory_less_node(nid); > > } > > > > /* Dump memblock with node info and return. */ > > @@ -721,21 +736,6 @@ void __init x86_numa_init(void) > > numa_init(dummy_numa_init); > > } > > > > -static void __init init_memory_less_node(int nid) > > -{ > > - unsigned long zones_size[MAX_NR_ZONES] = {0}; > > - unsigned long zholes_size[MAX_NR_ZONES] = {0}; > > - > > - /* Allocate and initialize node data. Memory-less node is now online.*/ > > - alloc_node_data(nid); > > - free_area_init_node(nid, zones_size, 0, zholes_size); > > - > > - /* > > - * All zonelists will be built later in start_kernel() after per cpu > > - * areas are initialized. > > - */ > > -} > > - > > /* > > * Setup early cpu_to_node. > > * > > @@ -763,9 +763,6 @@ void __init init_cpu_to_node(void) > > if (node == NUMA_NO_NODE) > > continue; > > > > - if (!node_online(node)) > > - init_memory_less_node(node); > > - > > numa_set_node(cpu, node); > > } > > } > > -- > Which commit is this patch applied on? I can not apply it on latest linux tree. > I applied it by manual, will see the test result. I think it should work since you instance all the node. But there are two things worth to consider: -1st. why x86 do not bring up all nodes by default, apparently it will be more simple by that way -2nd. there are other archs, do they obey the rules? Thanks, Pingfan