On Wed 26-02-20 23:29:24, Vlastimil Babka wrote: > On 2/26/20 10:45 PM, Vlastimil Babka wrote: > > > > > > if (node == NUMA_NO_NODE) > > page = alloc_pages(flags, order); > > else > > page = __alloc_pages_node(node, flags, order); > > > > So yeah looks like SLUB's kmalloc_node() is supposed to behave like the > > page allocator's __alloc_pages_node() and respect __GFP_THISNODE but not > > enforce it by itself. There's probably just some missing data structure > > initialization somewhere right now for memoryless nodes. > > Upon more digging, I think the problem could manifest if > node_to_mem_node(0) (_node_numa_mem_[0]) returned 0 instead of 1, > because it wasn't initialized properly for a memoryless node. Can you > e.g. print it somewhere? A very good hint indeed. I would do this diff --git a/include/linux/topology.h b/include/linux/topology.h index eb2fe6edd73c..d9f1b6737e4d 100644 --- a/include/linux/topology.h +++ b/include/linux/topology.h @@ -137,6 +137,8 @@ static inline void set_numa_mem(int node) { this_cpu_write(_numa_mem_, node); _node_numa_mem_[numa_node_id()] = node; + pr_info("%s %d -> %d\n", __FUNCTION__, numa_node_id(), node); + dump_stack(); } #endif Btw. it would be also helpful to get `faddr2line ___slab_alloc+0x334' from your kernel Sachin. -- Michal Hocko SUSE Labs