On Wed, 29 Jan 2014, Christoph Lameter wrote: > > > diff --git a/kernel/kthread.c b/kernel/kthread.c > > > index b5ae3ee..8573e4e 100644 > > > --- a/kernel/kthread.c > > > +++ b/kernel/kthread.c > > > @@ -217,7 +217,7 @@ int tsk_fork_get_node(struct task_struct *tsk) > > > if (tsk == kthreadd_task) > > > return tsk->pref_node_fork; > > > #endif > > > - return numa_node_id(); > > > + return numa_mem_id(); > > > > I'm wondering why return NUMA_NO_NODE wouldn't have the same effect and > > prefer the local node? > > > > The idea here seems to be that the allocation may occur from a cpu that is > different from where the process will run later on. > Yeah, that makes sense for kthreadd, but I'm wondering why we have to return numa_mem_id() rather than just NUMA_NO_NODE. Sorry for not being specific about doing s/numa_mem_id/NUMA_NO_NODE/ here. That should just turn kmem_cache_alloc_node() into kmem_cache_alloc() and alloc_pages_node() into alloc_pages() for the allocators that use this return value, task_struct and thread_info. If that's not allocating local memory, if possible, and numa_mem_id() magically does, then there's a problem. Eric, did you try this when writing 207205a2ba26 ("kthread: NUMA aware kthread_create_on_node()") or was it always numa_node_id() from the beginning? -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@xxxxxxxxx. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"dont@xxxxxxxxx"> email@xxxxxxxxx </a>