[PATCH 2/5 Trusty SRU] kthread: ensure locality of task_struct allocations
Tim Gardner
tim.gardner at canonical.com
Thu Jun 19 13:38:28 UTC 2014
From: Nishanth Aravamudan <nacc at linux.vnet.ibm.com>
BugLink: http://bugs.launchpad.net/bugs/1332063
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 at linux.vnet.ibm.com>
Reviewed-by: Christoph Lameter <cl at linux.com>
Acked-by: David Rientjes <rientjes at google.com>
Cc: Anton Blanchard <anton at samba.org>
Cc: Tejun Heo <tj at kernel.org>
Cc: Oleg Nesterov <oleg at redhat.com>
Cc: Jan Kara <jack at suse.cz>
Cc: Thomas Gleixner <tglx at linutronix.de>
Cc: Tetsuo Handa <penguin-kernel at I-love.SAKURA.ne.jp>
Cc: Wanpeng Li <liwanp at linux.vnet.ibm.com>
Cc: Joonsoo Kim <iamjoonsoo.kim at lge.com>
Cc: Ben Herrenschmidt <benh at kernel.crashing.org>
Signed-off-by: Andrew Morton <akpm at linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds at linux-foundation.org>
(cherry picked from commit 81c98869faa5f3a9457c93efef908ef476326b31)
Signed-off-by: Tim Gardner <tim.gardner at canonical.com>
---
kernel/kthread.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/kernel/kthread.c b/kernel/kthread.c
index 52ae7dc..ca921a3 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_NO_NODE;
}
static void create_kthread(struct kthread_create_info *create)
@@ -381,7 +381,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;
--
1.9.1
More information about the kernel-team
mailing list