From: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
To: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com>
Cc: linux-kernel@vger.kernel.org, mingo@elte.hu,
laijs@cn.fujitsu.com, dipankar@in.ibm.com,
akpm@linux-foundation.org, josh@joshtriplett.org,
dvhltc@us.ibm.com, niv@us.ibm.com, tglx@linutronix.de,
peterz@infradead.org, rostedt@goodmis.org,
Valdis.Kletnieks@vt.edu, dhowells@redhat.com,
eric.dumazet@gmail.com
Subject: Re: [PATCH tip/core/rcu 09/10] rcu: update obsolete rcu_read_lock() comment.
Date: Mon, 16 Aug 2010 10:45:32 -0400 [thread overview]
Message-ID: <20100816144532.GA8320@Krystal> (raw)
In-Reply-To: <1281392111-25060-9-git-send-email-paulmck@linux.vnet.ibm.com>
* Paul E. McKenney (paulmck@linux.vnet.ibm.com) wrote:
> The comment says that blocking is illegal in rcu_read_lock()-style
> RCU read-side critical sections, which is no longer entirely true
> given preemptible RCU. This commit provides a fix.
>
> Suggested-by: David Miller <davem@davemloft.net>
> Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
> ---
> include/linux/rcupdate.h | 15 ++++++++++++++-
> 1 files changed, 14 insertions(+), 1 deletions(-)
>
> diff --git a/include/linux/rcupdate.h b/include/linux/rcupdate.h
> index 24b8966..d7af96e 100644
> --- a/include/linux/rcupdate.h
> +++ b/include/linux/rcupdate.h
> @@ -458,7 +458,20 @@ extern int rcu_my_thread_group_empty(void);
> * will be deferred until the outermost RCU read-side critical section
> * completes.
> *
> - * It is illegal to block while in an RCU read-side critical section.
> + * You can avoid reading and understanding the next paragraph by
> + * following this rule: don't put anything in an rcu_read_lock() RCU
> + * read-side critical section that would block in a !PREEMPT kernel.
> + * But if you want the full story, read on!
> + *
> + * In non-preemptible RCU implementations (TREE_RCU and TINY_RCU), it
> + * is illegal to block while in an RCU read-side critical section. In
> + * preemptible RCU implementations (TREE_PREEMPT_RCU and TINY_PREEMPT_RCU)
> + * in CONFIG_PREEMPT kernel builds, RCU read-side critical sections may
> + * be preempted, but explicit blocking is illegal. Finally, in preemptible
> + * RCU implementations in real-time (CONFIG_PREEMPT_RT) kernel builds,
> + * RCU read-side critical sections may be preempted and they may also
> + * block, but only when acquiring spinlocks that are subject to priority
> + * inheritance.
It might be good to add a note about locking chain dependency that is
created in the RT case, e.g., the lock we are sharing with another
context in preempt RT is subject to the same rules as the RCU C.S.. It
should never call synchronize_rcu(); this would cause a RCU+lock-induced
deadlock.
I must admit, however, that because calling synchronize_rcu() from
spinlocks is already forbidden, this is already implied.
Thanks,
Mathieu
> */
> static inline void rcu_read_lock(void)
> {
> --
> 1.7.0.6
>
--
Mathieu Desnoyers
Operating System Efficiency R&D Consultant
EfficiOS Inc.
http://www.efficios.com
next prev parent reply other threads:[~2010-08-16 14:45 UTC|newest]
Thread overview: 33+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-08-09 22:14 [PATCH tip/core/rcu 0/N] Additional RCU commits queued for 2.6.37 Paul E. McKenney
2010-08-09 22:15 ` [PATCH tip/core/rcu 01/10] rcu head remove init Paul E. McKenney
2010-08-09 22:15 ` [PATCH tip/core/rcu 02/10] Update documentation to note the passage of INIT_RCU_HEAD() Paul E. McKenney
2010-08-09 22:15 ` [PATCH tip/core/rcu 03/10] Update call_rcu() usage, add synchronize_rcu() Paul E. McKenney
2010-08-09 22:15 ` [PATCH tip/core/rcu 04/10] rcu: allow RCU CPU stall warning messages to be controlled in /sys Paul E. McKenney
2010-08-09 22:15 ` [PATCH tip/core/rcu 05/10] rcu: restrict TREE_RCU to SMP builds with !PREEMPT Paul E. McKenney
2010-08-09 22:15 ` [PATCH tip/core/rcu 06/10] rcu: Allow RCU CPU stall warnings to be off at boot, but manually enablable Paul E. McKenney
2010-08-09 22:15 ` [PATCH tip/core/rcu 07/10] rcu: Fix RCU_FANOUT help message Paul E. McKenney
2010-08-09 22:15 ` [PATCH tip/core/rcu 08/10] rcu: Add a TINY_PREEMPT_RCU Paul E. McKenney
2010-08-16 15:07 ` Mathieu Desnoyers
2010-08-16 18:33 ` Paul E. McKenney
2010-08-16 19:19 ` Mathieu Desnoyers
2010-08-16 21:32 ` Paul E. McKenney
2010-08-16 21:41 ` Mathieu Desnoyers
2010-08-16 21:55 ` Paul E. McKenney
2010-08-16 22:07 ` Mathieu Desnoyers
2010-08-16 22:24 ` Paul E. McKenney
2010-08-17 9:36 ` Lai Jiangshan
2010-08-17 14:35 ` Paul E. McKenney
2010-08-17 13:27 ` Steven Rostedt
2010-08-17 14:16 ` Mathieu Desnoyers
2010-08-17 14:54 ` Steven Rostedt
2010-08-17 15:55 ` Mathieu Desnoyers
2010-08-17 16:04 ` Steven Rostedt
2010-08-17 16:06 ` Steven Rostedt
2010-08-17 16:25 ` Mathieu Desnoyers
2010-08-17 19:33 ` Paul E. McKenney
2010-08-17 20:00 ` Paul E. McKenney
2010-08-09 22:15 ` [PATCH tip/core/rcu 09/10] rcu: update obsolete rcu_read_lock() comment Paul E. McKenney
2010-08-16 14:45 ` Mathieu Desnoyers [this message]
2010-08-16 17:55 ` Paul E. McKenney
2010-08-16 18:24 ` Mathieu Desnoyers
2010-08-09 22:15 ` [PATCH tip/core/rcu 10/10] rcu: refer RCU CPU stall-warning victims to stallwarn.txt 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=20100816144532.GA8320@Krystal \
--to=mathieu.desnoyers@polymtl.ca \
--cc=Valdis.Kletnieks@vt.edu \
--cc=akpm@linux-foundation.org \
--cc=dhowells@redhat.com \
--cc=dipankar@in.ibm.com \
--cc=dvhltc@us.ibm.com \
--cc=eric.dumazet@gmail.com \
--cc=josh@joshtriplett.org \
--cc=laijs@cn.fujitsu.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@elte.hu \
--cc=niv@us.ibm.com \
--cc=paulmck@linux.vnet.ibm.com \
--cc=peterz@infradead.org \
--cc=rostedt@goodmis.org \
--cc=tglx@linutronix.de \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox