]> Git Repo - linux.git/commitdiff
kthread: ensure locality of task_struct allocations
authorNishanth Aravamudan <[email protected]>
Thu, 3 Apr 2014 21:46:25 +0000 (14:46 -0700)
committerLinus Torvalds <[email protected]>
Thu, 3 Apr 2014 23:20:49 +0000 (16:20 -0700)
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 <[email protected]>
Reviewed-by: Christoph Lameter <[email protected]>
Acked-by: David Rientjes <[email protected]>
Cc: Anton Blanchard <[email protected]>
Cc: Tejun Heo <[email protected]>
Cc: Oleg Nesterov <[email protected]>
Cc: Jan Kara <[email protected]>
Cc: Thomas Gleixner <[email protected]>
Cc: Tetsuo Handa <[email protected]>
Cc: Wanpeng Li <[email protected]>
Cc: Joonsoo Kim <[email protected]>
Cc: Ben Herrenschmidt <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
kernel/kthread.c

index b5ae3ee860a9a520d1ea78d15ecdb94b75a02cca..9a130ec06f7a5aa38c92f2f7961db6131f43153d 100644 (file)
@@ -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_NO_NODE;
 }
 
 static void create_kthread(struct kthread_create_info *create)
@@ -369,7 +369,7 @@ struct task_struct *kthread_create_on_cpu(int (*threadfn)(void *data),
 {
        struct task_struct *p;
 
-       p = kthread_create_on_node(threadfn, data, cpu_to_node(cpu), namefmt,
+       p = kthread_create_on_node(threadfn, data, cpu_to_mem(cpu), namefmt,
                                   cpu);
        if (IS_ERR(p))
                return p;
This page took 0.058977 seconds and 4 git commands to generate.