All of lore.kernel.org
 help / color / mirror / Atom feed
From: Lai Jiangshan <laijs@cn.fujitsu.com>
To: Peter Zijlstra <peterz@infradead.org>
Cc: <riel@redhat.com>, <linux-kernel@vger.kernel.org>, <mingo@kernel.org>
Subject: Re: [PATCH] sched: Fix migration_cpu_stop() return value
Date: Wed, 4 Jun 2014 19:10:54 +0800	[thread overview]
Message-ID: <538EFEBE.2090809@cn.fujitsu.com> (raw)
In-Reply-To: <20140604104122.GL30445@twins.programming.kicks-ass.net>

On 06/04/2014 06:41 PM, Peter Zijlstra wrote:
> 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;


Current __migrate_task() returns 0 in these cases:
  !cpu_active(dest_cpu):
	hotplug subsystem's responsibility to migrate it

  !cpumask_test_cpu(dest_cpu, tsk_cpus_allowed(p)):
	newer set_cpus_allowed_ptr()'s responsibility

In these cases, current set_cpus_allowed_ptr() doesn't have the responsibility,
I don't think -EAGAIN is proper here since "-EAGAIN" asks the caller to do it again.


>  	local_irq_enable();
> -	return 0;
> +
> +	return ret;
>  }
>  
>  #ifdef CONFIG_HOTPLUG_CPU


  reply	other threads:[~2014-06-04 11:06 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-06-04 10:41 [PATCH] sched: Fix migration_cpu_stop() return value Peter Zijlstra
2014-06-04 11:10 ` Lai Jiangshan [this message]
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=538EFEBE.2090809@cn.fujitsu.com \
    --to=laijs@cn.fujitsu.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@kernel.org \
    --cc=peterz@infradead.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.