All of lore.kernel.org
 help / color / mirror / Atom feed
From: Valentin Schneider <valentin.schneider@arm.com>
To: Peter Zijlstra <peterz@infradead.org>,
	mingo@kernel.org, tglx@linutronix.de
Cc: linux-kernel@vger.kernel.org, jiangshanlai@gmail.com,
	cai@redhat.com, vincent.donnefort@arm.com, decui@microsoft.com,
	paulmck@kernel.org, vincent.guittot@linaro.org,
	rostedt@goodmis.org, tj@kernel.org, peterz@infradead.org
Subject: Re: [PATCH -v3 8/9] sched: Fix CPU hotplug / tighten is_per_cpu_kthread()
Date: Thu, 21 Jan 2021 14:01:03 +0000	[thread overview]
Message-ID: <jhjeeiemlsw.mognet@arm.com> (raw)
In-Reply-To: <20210121103507.102416009@infradead.org>

On 21/01/21 11:17, Peter Zijlstra wrote:
> @@ -7504,6 +7525,9 @@ int sched_cpu_deactivate(unsigned int cp
>        * preempt-disabled and RCU users of this state to go away such that
>        * all new such users will observe it.
>        *
> +	 * Specifically, we rely on ttwu to no longer target this CPU, see
> +	 * ttwu_queue_cond() and is_cpu_allowed().
> +	 *

So the last time ttwu_queue_wakelist() can append a task onto a dying
CPU's wakelist is before sched_cpu_deactivate()'s synchronize_rcu()
returns. 

As discussed on IRC, paranoia would have us issue a

  flush_smp_call_function_from_idle()

upon returning from said sync, but this will require further surgery.

Do we want something like the below in the meantime? Ideally we'd warn on
setting rq->ttwu_pending when !cpu_active(), but as per the above this is
allowed before the synchronize_rcu() returns.

---

diff --git a/kernel/sched/core.c b/kernel/sched/core.c
index ed6ff94aa68a..4b5b4b02ee64 100644
--- a/kernel/sched/core.c
+++ b/kernel/sched/core.c
@@ -7590,6 +7590,7 @@ int sched_cpu_starting(unsigned int cpu)
  */
 int sched_cpu_wait_empty(unsigned int cpu)
 {
+	WARN_ON_ONCE(READ_ONCE(cpu_rq(cpu)->ttwu_pending));
 	balance_hotplug_wait();
 	return 0;
 }

>        * Do sync before park smpboot threads to take care the rcu boost case.
>        */
>       synchronize_rcu();

  reply	other threads:[~2021-01-21 14:03 UTC|newest]

Thread overview: 25+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-01-21 10:17 [PATCH -v3 0/9] sched: Fix hot-unplug regression Peter Zijlstra
2021-01-21 10:17 ` [PATCH -v3 1/9] sched/core: Print out straggler tasks in sched_cpu_dying() Peter Zijlstra
2021-01-21 10:17 ` [PATCH -v3 2/9] workqueue: Use cpu_possible_mask instead of cpu_active_mask to break affinity Peter Zijlstra
2021-01-21 10:17 ` [PATCH -v3 3/9] sched: Dont run cpu-online with balance_push() enabled Peter Zijlstra
2021-01-21 14:00   ` Valentin Schneider
2021-01-21 14:14     ` Peter Zijlstra
2021-01-22 17:41   ` [tip: sched/urgent] sched: Don't " tip-bot2 for Peter Zijlstra
2021-01-21 10:17 ` [PATCH -v3 4/9] kthread: Extract KTHREAD_IS_PER_CPU Peter Zijlstra
2021-01-22 17:41   ` [tip: sched/urgent] " tip-bot2 for Peter Zijlstra
2021-01-21 10:17 ` [PATCH -v3 5/9] workqueue: Tag bound workers with KTHREAD_IS_PER_CPU Peter Zijlstra
2021-01-21 14:31   ` Valentin Schneider
2021-01-22 17:41   ` [tip: sched/urgent] " tip-bot2 for Peter Zijlstra
2021-01-21 10:17 ` [PATCH -v3 6/9] workqueue: Restrict affinity change to rescuer Peter Zijlstra
2021-01-22 17:41   ` [tip: sched/urgent] " tip-bot2 for Peter Zijlstra
2021-01-21 10:17 ` [PATCH -v3 7/9] sched: Prepare to use balance_push in ttwu() Peter Zijlstra
2021-01-22 17:41   ` [tip: sched/urgent] " tip-bot2 for Peter Zijlstra
2021-01-21 10:17 ` [PATCH -v3 8/9] sched: Fix CPU hotplug / tighten is_per_cpu_kthread() Peter Zijlstra
2021-01-21 14:01   ` Valentin Schneider [this message]
2021-01-21 14:18     ` Peter Zijlstra
2021-01-21 14:36       ` Valentin Schneider
2021-01-22 17:41   ` [tip: sched/urgent] " tip-bot2 for Peter Zijlstra
2021-01-21 10:17 ` [PATCH -v3 9/9] sched: Relax the set_cpus_allowed_ptr() semantics Peter Zijlstra
2021-01-22 17:41   ` [tip: sched/urgent] " tip-bot2 for Peter Zijlstra
2021-01-21 14:36 ` [PATCH -v3 0/9] sched: Fix hot-unplug regression Valentin Schneider
2021-01-21 19:56 ` Paul E. McKenney

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=jhjeeiemlsw.mognet@arm.com \
    --to=valentin.schneider@arm.com \
    --cc=cai@redhat.com \
    --cc=decui@microsoft.com \
    --cc=jiangshanlai@gmail.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@kernel.org \
    --cc=paulmck@kernel.org \
    --cc=peterz@infradead.org \
    --cc=rostedt@goodmis.org \
    --cc=tglx@linutronix.de \
    --cc=tj@kernel.org \
    --cc=vincent.donnefort@arm.com \
    --cc=vincent.guittot@linaro.org \
    /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.