kthread: use kthread_create_on_node()

ksoftirqd, kworker, migration, and pktgend kthreads can be created with
kthread_create_on_node(), to get proper NUMA affinities for their stack and
task_struct.

Signed-off-by: Eric Dumazet <eric.dumazet@gmail.com>
Acked-by: David S. Miller <davem@davemloft.net>
Reviewed-by: Andi Kleen <ak@linux.intel.com>
Acked-by: Rusty Russell <rusty@rustcorp.com.au>
Acked-by: Tejun Heo <tj@kernel.org>
Cc: Tony Luck <tony.luck@intel.com>
Cc: Fenghua Yu <fenghua.yu@intel.com>
Cc: David Howells <dhowells@redhat.com>
Cc: <linux-arch@vger.kernel.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
Eric Dumazet 2011-03-22 16:30:45 -07:00 коммит произвёл Linus Torvalds
Родитель 207205a2ba
Коммит 94dcf29a11
4 изменённых файлов: 16 добавлений и 6 удалений

Просмотреть файл

@ -845,7 +845,10 @@ static int __cpuinit cpu_callback(struct notifier_block *nfb,
switch (action) { switch (action) {
case CPU_UP_PREPARE: case CPU_UP_PREPARE:
case CPU_UP_PREPARE_FROZEN: case CPU_UP_PREPARE_FROZEN:
p = kthread_create(run_ksoftirqd, hcpu, "ksoftirqd/%d", hotcpu); p = kthread_create_on_node(run_ksoftirqd,
hcpu,
cpu_to_node(hotcpu),
"ksoftirqd/%d", hotcpu);
if (IS_ERR(p)) { if (IS_ERR(p)) {
printk("ksoftirqd for %i failed\n", hotcpu); printk("ksoftirqd for %i failed\n", hotcpu);
return notifier_from_errno(PTR_ERR(p)); return notifier_from_errno(PTR_ERR(p));

Просмотреть файл

@ -301,8 +301,10 @@ static int __cpuinit cpu_stop_cpu_callback(struct notifier_block *nfb,
case CPU_UP_PREPARE: case CPU_UP_PREPARE:
BUG_ON(stopper->thread || stopper->enabled || BUG_ON(stopper->thread || stopper->enabled ||
!list_empty(&stopper->works)); !list_empty(&stopper->works));
p = kthread_create(cpu_stopper_thread, stopper, "migration/%d", p = kthread_create_on_node(cpu_stopper_thread,
cpu); stopper,
cpu_to_node(cpu),
"migration/%d", cpu);
if (IS_ERR(p)) if (IS_ERR(p))
return notifier_from_errno(PTR_ERR(p)); return notifier_from_errno(PTR_ERR(p));
get_task_struct(p); get_task_struct(p);

Просмотреть файл

@ -1366,7 +1366,9 @@ static struct worker *create_worker(struct global_cwq *gcwq, bool bind)
worker->id = id; worker->id = id;
if (!on_unbound_cpu) if (!on_unbound_cpu)
worker->task = kthread_create(worker_thread, worker, worker->task = kthread_create_on_node(worker_thread,
worker,
cpu_to_node(gcwq->cpu),
"kworker/%u:%d", gcwq->cpu, id); "kworker/%u:%d", gcwq->cpu, id);
else else
worker->task = kthread_create(worker_thread, worker, worker->task = kthread_create(worker_thread, worker,

Просмотреть файл

@ -3761,7 +3761,10 @@ static int __init pktgen_create_thread(int cpu)
list_add_tail(&t->th_list, &pktgen_threads); list_add_tail(&t->th_list, &pktgen_threads);
init_completion(&t->start_done); init_completion(&t->start_done);
p = kthread_create(pktgen_thread_worker, t, "kpktgend_%d", cpu); p = kthread_create_on_node(pktgen_thread_worker,
t,
cpu_to_node(cpu),
"kpktgend_%d", cpu);
if (IS_ERR(p)) { if (IS_ERR(p)) {
pr_err("kernel_thread() failed for cpu %d\n", t->cpu); pr_err("kernel_thread() failed for cpu %d\n", t->cpu);
list_del(&t->th_list); list_del(&t->th_list);