From: Frederic Weisbecker <frederic@kernel.org>
To: "Paul E. McKenney" <paulmck@kernel.org>
Cc: Valentin Schneider <valentin.schneider@arm.com>,
linux-kernel@vger.kernel.org,
linux-arm-kernel@lists.infradead.org, rcu@vger.kernel.org,
linux-rt-users@vger.kernel.org,
Catalin Marinas <catalin.marinas@arm.com>,
Will Deacon <will@kernel.org>, Ingo Molnar <mingo@kernel.org>,
Peter Zijlstra <peterz@infradead.org>,
Thomas Gleixner <tglx@linutronix.de>,
Steven Rostedt <rostedt@goodmis.org>,
Daniel Bristot de Oliveira <bristot@redhat.com>,
Sebastian Andrzej Siewior <bigeasy@linutronix.de>,
Josh Triplett <josh@joshtriplett.org>,
Mathieu Desnoyers <mathieu.desnoyers@efficios.com>,
Davidlohr Bueso <dave@stgolabs.net>,
Lai Jiangshan <jiangshanlai@gmail.com>,
Joel Fernandes <joel@joelfernandes.org>,
Anshuman Khandual <anshuman.khandual@arm.com>,
Vincenzo Frascino <vincenzo.frascino@arm.com>,
Steven Price <steven.price@arm.com>,
Ard Biesheuvel <ardb@kernel.org>,
Boqun Feng <boqun.feng@gmail.com>, Mike Galbraith <efault@gmx.de>
Subject: Re: [PATCH v3 3/4] rcu/nocb: Protect NOCB state via local_lock() under PREEMPT_RT
Date: Tue, 24 Aug 2021 15:00:33 +0200 [thread overview]
Message-ID: <20210824130033.GA880822@lothringen> (raw)
In-Reply-To: <20210813002045.GZ4126399@paulmck-ThinkPad-P17-Gen-1>
[-- Attachment #1: Type: text/plain, Size: 2366 bytes --]
On Thu, Aug 12, 2021 at 05:20:45PM -0700, Paul E. McKenney wrote:
> Another concern...
>
> During the preemption of rcu_check_quiescent_state() someone might report
> a quiescent state on behalf of CPU x (perhaps due to its having recently
> been idle) and then the RCU grace-period kthread might start running on
> CPU x, where it might initialize a new grace period in rcu_gp_init().
> It can then invoke __note_gp_changes(), also on CPU x.
>
> If preempted as shown above just after checking >core_needs_qs, the
> ->cpu_no_qs.b.norm field will be set by the grace-period kthread, which
> will cause the rcu_check_quiescent_state() function's subsequent check
> of ->cpu_no_qs.b.norm to take an early exit. So OK here.
>
> On the other hand, if preempted just after the rcu_check_quiescent_state()
> function's check of ->cpu_no_qs.b.norm, the later invocation of
> rcu_report_qs_rdp() should take an early exit due to ->gp_seq mismatch.
> So OK here.
It looks like this could already happen through call_rcu() interrupting
rcu_core(). call_rcu() can also call note_gp_changes().
>
> However, this should be added to the commit log. Might be a big commit
> log, but mass storage is cheap these days. ;-)
Agreed, and a comment.
>
> This needs a review of each and every manipulation of ->core_needs_qs
> and ->cpu_no_qs.b.norm. For example, the preemptions will cause the
> scheduler to invoke RCU's context-switch hooks, which also mess with
> ->cpu_no_qs.b.norm.
I think those situations should be fine. In the worst case rcu_core() misses
an opportunity to propagate an rdp quiescent state, waiting for the next core
invocation. The most important is that we don't report a quiescent state that
applied to a previous gp_seq but rcu_report_qs_rdp() should take care about that.
Of course I can easily miss something. Btw I'm attaching a map of all the
interactions with rdp.cpu_no_qs if that can help anyone. I used that to stop
getting lost alone with my headlamp.
> I can get to that some time next week (or tomorrow,
> if things go better than expected), but it would be good for you (and
> others) to check as well.
>
> Frederic should look this over, but I am taking a quick pass in the
> meantime. Please see below.
I have yet to check again the nocb bits. They look fine from a quick glance
but I need to sit down a bit longer.
Thanks.
[-- Attachment #2: rdp.cpu_no_qs.norm.jpg --]
[-- Type: image/jpeg, Size: 472684 bytes --]
next prev parent reply other threads:[~2021-08-24 13:00 UTC|newest]
Thread overview: 102+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-08-11 20:13 [PATCH v3 0/4] rcu, arm64: PREEMPT_RT fixlets Valentin Schneider
2021-08-11 20:13 ` Valentin Schneider
2021-08-11 20:13 ` [PATCH v3 1/4] rcutorture: Don't disable softirqs with preemption disabled when PREEMPT_RT Valentin Schneider
2021-08-11 20:13 ` Valentin Schneider
2021-08-12 16:47 ` Paul E. McKenney
2021-08-12 16:47 ` Paul E. McKenney
2021-08-17 12:13 ` Sebastian Andrzej Siewior
2021-08-17 12:13 ` Sebastian Andrzej Siewior
2021-08-17 13:17 ` Sebastian Andrzej Siewior
2021-08-17 13:17 ` Sebastian Andrzej Siewior
2021-08-17 14:40 ` [PATCH] rcutorture: Avoid problematic critical section nesting on RT Sebastian Andrzej Siewior
2021-08-17 14:40 ` Sebastian Andrzej Siewior
2021-08-18 22:46 ` Paul E. McKenney
2021-08-18 22:46 ` Paul E. McKenney
2021-08-19 15:35 ` Sebastian Andrzej Siewior
2021-08-19 15:35 ` Sebastian Andrzej Siewior
2021-08-19 15:39 ` Sebastian Andrzej Siewior
2021-08-19 15:39 ` Sebastian Andrzej Siewior
2021-08-19 15:47 ` Sebastian Andrzej Siewior
2021-08-19 15:47 ` Sebastian Andrzej Siewior
2021-08-19 18:20 ` Paul E. McKenney
2021-08-19 18:20 ` Paul E. McKenney
2021-08-19 18:45 ` Sebastian Andrzej Siewior
2021-08-19 18:45 ` Sebastian Andrzej Siewior
2021-08-20 4:11 ` Scott Wood
2021-08-20 4:11 ` Scott Wood
2021-08-20 7:11 ` Sebastian Andrzej Siewior
2021-08-20 7:11 ` Sebastian Andrzej Siewior
2021-08-20 7:42 ` [PATCH v2] rcutorture: Avoid problematic critical section nesting on PREEMPT_RT Sebastian Andrzej Siewior
2021-08-20 7:42 ` Sebastian Andrzej Siewior
2021-08-20 22:10 ` Paul E. McKenney
2021-08-20 22:10 ` Paul E. McKenney
2021-08-20 3:23 ` [PATCH] rcutorture: Avoid problematic critical section nesting on RT Scott Wood
2021-08-20 3:23 ` Scott Wood
2021-08-20 6:54 ` Sebastian Andrzej Siewior
2021-08-20 6:54 ` Sebastian Andrzej Siewior
2021-08-11 20:13 ` [PATCH v3 2/4] sched: Introduce migratable() Valentin Schneider
2021-08-11 20:13 ` Valentin Schneider
2021-08-17 14:43 ` Sebastian Andrzej Siewior
2021-08-17 14:43 ` Sebastian Andrzej Siewior
2021-08-22 17:31 ` Valentin Schneider
2021-08-22 17:31 ` Valentin Schneider
2021-08-17 17:09 ` Sebastian Andrzej Siewior
2021-08-17 17:09 ` Sebastian Andrzej Siewior
2021-08-17 19:30 ` Phil Auld
2021-08-17 19:30 ` Phil Auld
2021-08-22 18:14 ` Valentin Schneider
2021-08-22 18:14 ` Valentin Schneider
2022-01-26 16:56 ` Sebastian Andrzej Siewior
2022-01-26 16:56 ` Sebastian Andrzej Siewior
2022-01-26 18:10 ` Valentin Schneider
2022-01-26 18:10 ` Valentin Schneider
2022-01-27 10:07 ` Sebastian Andrzej Siewior
2022-01-27 10:07 ` Sebastian Andrzej Siewior
2022-01-27 18:23 ` Valentin Schneider
2022-01-27 18:23 ` Valentin Schneider
2022-01-27 19:27 ` Valentin Schneider
2022-01-27 19:27 ` Valentin Schneider
2022-02-04 9:24 ` Sebastian Andrzej Siewior
2022-02-04 9:24 ` Sebastian Andrzej Siewior
2021-08-11 20:13 ` [PATCH v3 3/4] rcu/nocb: Protect NOCB state via local_lock() under PREEMPT_RT Valentin Schneider
2021-08-11 20:13 ` Valentin Schneider
2021-08-13 0:20 ` Paul E. McKenney
2021-08-13 0:20 ` Paul E. McKenney
2021-08-13 18:48 ` Valentin Schneider
2021-08-13 18:48 ` Valentin Schneider
2021-08-24 13:00 ` Frederic Weisbecker [this message]
2021-08-17 15:36 ` Sebastian Andrzej Siewior
2021-08-17 15:36 ` Sebastian Andrzej Siewior
2021-08-22 18:15 ` Valentin Schneider
2021-08-22 18:15 ` Valentin Schneider
2021-09-21 14:05 ` Thomas Gleixner
2021-09-21 14:05 ` Thomas Gleixner
2021-09-21 21:12 ` rcu/tree: Protect rcu_rdp_is_offloaded() invocations on RT Thomas Gleixner
2021-09-21 23:36 ` Frederic Weisbecker
2021-09-21 23:36 ` Frederic Weisbecker
2021-09-22 2:18 ` Paul E. McKenney
2021-09-22 2:18 ` Paul E. McKenney
2021-09-22 11:31 ` Frederic Weisbecker
2021-09-22 11:31 ` Frederic Weisbecker
2021-09-21 23:45 ` Frederic Weisbecker
2021-09-21 23:45 ` Frederic Weisbecker
2021-09-22 6:32 ` Sebastian Andrzej Siewior
2021-09-22 6:32 ` Sebastian Andrzej Siewior
2021-09-22 11:10 ` Frederic Weisbecker
2021-09-22 11:10 ` Frederic Weisbecker
2021-09-22 11:27 ` Sebastian Andrzej Siewior
2021-09-22 11:27 ` Sebastian Andrzej Siewior
2021-09-22 11:38 ` Frederic Weisbecker
2021-09-22 11:38 ` Frederic Weisbecker
2021-09-22 13:02 ` Sebastian Andrzej Siewior
2021-09-22 13:02 ` Sebastian Andrzej Siewior
2021-09-23 10:02 ` Frederic Weisbecker
2021-09-23 10:02 ` Frederic Weisbecker
2021-09-30 9:00 ` Valentin Schneider
2021-09-30 9:00 ` Valentin Schneider
2021-09-30 10:53 ` Frederic Weisbecker
2021-09-30 10:53 ` Frederic Weisbecker
2021-09-30 13:22 ` Valentin Schneider
2021-09-30 13:22 ` Valentin Schneider
2021-08-11 20:13 ` [PATCH v3 4/4] arm64: mm: Make arch_faults_on_old_pte() check for migratability Valentin Schneider
2021-08-11 20:13 ` Valentin Schneider
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=20210824130033.GA880822@lothringen \
--to=frederic@kernel.org \
--cc=anshuman.khandual@arm.com \
--cc=ardb@kernel.org \
--cc=bigeasy@linutronix.de \
--cc=boqun.feng@gmail.com \
--cc=bristot@redhat.com \
--cc=catalin.marinas@arm.com \
--cc=dave@stgolabs.net \
--cc=efault@gmx.de \
--cc=jiangshanlai@gmail.com \
--cc=joel@joelfernandes.org \
--cc=josh@joshtriplett.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-rt-users@vger.kernel.org \
--cc=mathieu.desnoyers@efficios.com \
--cc=mingo@kernel.org \
--cc=paulmck@kernel.org \
--cc=peterz@infradead.org \
--cc=rcu@vger.kernel.org \
--cc=rostedt@goodmis.org \
--cc=steven.price@arm.com \
--cc=tglx@linutronix.de \
--cc=valentin.schneider@arm.com \
--cc=vincenzo.frascino@arm.com \
--cc=will@kernel.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.