Commit 81c98869faa5f3a9457c93efef908ef476326b31

Authored by Nishanth Aravamudan
Committed by Linus Torvalds
1 parent 5acda9d12d

kthread: ensure locality of task_struct allocations

In the presence of memoryless nodes, numa_node_id() will return the
current CPU's NUMA node, but that may not be where we expect to allocate
from memory from.  Instead, we should rely on the fallback code in the
memory allocator itself, by using NUMA_NO_NODE.  Also, when calling
kthread_create_on_node(), use the nearest node with memory to the cpu in
question, rather than the node it is running on.

Signed-off-by: Nishanth Aravamudan <nacc@linux.vnet.ibm.com>
Reviewed-by: Christoph Lameter <cl@linux.com>
Acked-by: David Rientjes <rientjes@google.com>
Cc: Anton Blanchard <anton@samba.org>
Cc: Tejun Heo <tj@kernel.org>
Cc: Oleg Nesterov <oleg@redhat.com>
Cc: Jan Kara <jack@suse.cz>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Tetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp>
Cc: Wanpeng Li <liwanp@linux.vnet.ibm.com>
Cc: Joonsoo Kim <iamjoonsoo.kim@lge.com>
Cc: Ben Herrenschmidt <benh@kernel.crashing.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>

Showing 1 changed file with 2 additions and 2 deletions Side-by-side Diff

... ... @@ -217,7 +217,7 @@
217 217 if (tsk == kthreadd_task)
218 218 return tsk->pref_node_fork;
219 219 #endif
220   - return numa_node_id();
  220 + return NUMA_NO_NODE;
221 221 }
222 222  
223 223 static void create_kthread(struct kthread_create_info *create)
... ... @@ -369,7 +369,7 @@
369 369 {
370 370 struct task_struct *p;
371 371  
372   - p = kthread_create_on_node(threadfn, data, cpu_to_node(cpu), namefmt,
  372 + p = kthread_create_on_node(threadfn, data, cpu_to_mem(cpu), namefmt,
373 373 cpu);
374 374 if (IS_ERR(p))
375 375 return p;