From: Peter Zijlstra <peterz@infradead.org>
To: riel@redhat.com, laijs@cn.fujitsu.com
Cc: linux-kernel@vger.kernel.org, mingo@kernel.org
Subject: [PATCH] sched: Fix migration_cpu_stop() return value
Date: Wed, 4 Jun 2014 12:41:22 +0200 [thread overview]
Message-ID: <20140604104122.GL30445@twins.programming.kicks-ass.net> (raw)
[-- Attachment #1: Type: text/plain, Size: 2167 bytes --]
A while ago I did a similar patch for some debugging, but looking at it
again today I realized we should probably fix this anyway.
---
Subject: sched: Fix migration_cpu_stop() return value
There are a number of migration_cpu_stop() users; and some actually care
about the success of the migration. So report this.
In particular migrate_task_to() as used from task_numa_migrate()
actually tests this return value.
Also change set_cpus_allowed_ptr() to propagate this return value, since
it already returns other errors.
Cc: Lai Jiangshan <laijs@cn.fujitsu.com>
Cc: Ingo Molnar <mingo@redhat.com>
Signed-off-by: Peter Zijlstra <peterz@infradead.org>
---
kernel/sched/core.c | 15 +++++++++++----
1 file changed, 11 insertions(+), 4 deletions(-)
--- a/kernel/sched/core.c
+++ b/kernel/sched/core.c
@@ -4633,11 +4633,13 @@ int set_cpus_allowed_ptr(struct task_str
dest_cpu = cpumask_any_and(cpu_active_mask, new_mask);
if (p->on_rq) {
struct migration_arg arg = { p, dest_cpu };
+
/* Need help from migration thread: drop lock and wait. */
task_rq_unlock(rq, p, &flags);
- stop_one_cpu(cpu_of(rq), migration_cpu_stop, &arg);
+ ret = stop_one_cpu(cpu_of(rq), migration_cpu_stop, &arg);
tlb_migrate_finish(p->mm);
- return 0;
+
+ return ret;
}
out:
task_rq_unlock(rq, p, &flags);
@@ -4747,19 +4749,24 @@ void sched_setnuma(struct task_struct *p
* migration_cpu_stop - this will be executed by a highprio stopper thread
* and performs thread migration by bumping thread off CPU then
* 'pushing' onto another runqueue.
+ *
+ * Returns 0 on success, -EAGAIN on failure to migrate.
*/
static int migration_cpu_stop(void *data)
{
struct migration_arg *arg = data;
+ int ret = 0;
/*
* The original target cpu might have gone down and we might
* be on another cpu but it doesn't matter.
*/
local_irq_disable();
- __migrate_task(arg->task, raw_smp_processor_id(), arg->dest_cpu);
+ if (!__migrate_task(arg->task, raw_smp_processor_id(), arg->dest_cpu))
+ ret = -EAGAIN;
local_irq_enable();
- return 0;
+
+ return ret;
}
#ifdef CONFIG_HOTPLUG_CPU
[-- Attachment #2: Type: application/pgp-signature, Size: 836 bytes --]
next reply other threads:[~2014-06-04 10:41 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-06-04 10:41 Peter Zijlstra [this message]
2014-06-04 11:10 ` [PATCH] sched: Fix migration_cpu_stop() return value Lai Jiangshan
2014-06-04 11:18 ` Kirill Tkhai
2014-06-04 12:03 ` Peter Zijlstra
2014-06-04 12:29 ` Peter Zijlstra
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20140604104122.GL30445@twins.programming.kicks-ass.net \
--to=peterz@infradead.org \
--cc=laijs@cn.fujitsu.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@kernel.org \
--cc=riel@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.