All of lore.kernel.org
 help / color / mirror / Atom feed
From: Frederic Weisbecker <fweisbec@gmail.com>
To: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com>
Cc: LKML <linux-kernel@vger.kernel.org>,
	Frederic Weisbecker <fweisbec@gmail.com>,
	Ingo Molnar <mingo@elte.hu>,
	Peter Zijlstra <a.p.zijlstra@chello.nl>,
	Thomas Gleixner <tglx@linutronix.de>,
	Lai Jiangshan <laijs@cn.fujitsu.com>
Subject: [PATCH 03/11] rcu: Warn when rcu_read_lock() is used in extended quiescent state
Date: Fri,  7 Oct 2011 18:22:02 +0200	[thread overview]
Message-ID: <1318004530-705-4-git-send-email-fweisbec@gmail.com> (raw)
In-Reply-To: <1318004530-705-1-git-send-email-fweisbec@gmail.com>

We are currently able to detect uses of rcu_dereference_check() inside
extended quiescent states (such as the RCU-free window in idle).
But rcu_read_lock() and friends can be used without rcu_dereference(),
so that the earlier commit checking for use of rcu_dereference() and
friends while in RCU idle mode miss some error conditions.  This commit
therefore adds extended quiescent state checking to rcu_read_lock() and
friends.

Uses of RCU from within RCU-idle mode are totally ignored by
RCU, hence the importance of these checks.

Signed-off-by: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
Cc: Ingo Molnar <mingo@elte.hu>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Lai Jiangshan <laijs@cn.fujitsu.com>
Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
---
 include/linux/rcupdate.h |   52 +++++++++++++++++++++++++++++++++++++--------
 1 files changed, 42 insertions(+), 10 deletions(-)

diff --git a/include/linux/rcupdate.h b/include/linux/rcupdate.h
index 2f8e0a4..fe4f8976 100644
--- a/include/linux/rcupdate.h
+++ b/include/linux/rcupdate.h
@@ -227,21 +227,53 @@ static inline int rcu_is_cpu_idle(void)
 }
 #endif /* else !CONFIG_PROVE_RCU */
 
+static inline void rcu_lock_acquire(struct lockdep_map *map)
+{
+	WARN_ON_ONCE(rcu_is_cpu_idle());
+	lock_acquire(map, 0, 0, 2, 1, NULL, _THIS_IP_);
+}
+
+static inline void rcu_lock_release(struct lockdep_map *map)
+{
+	WARN_ON_ONCE(rcu_is_cpu_idle());
+	lock_release(map, 1, _THIS_IP_);
+}
+
 extern struct lockdep_map rcu_lock_map;
-# define rcu_read_acquire() \
-		lock_acquire(&rcu_lock_map, 0, 0, 2, 1, NULL, _THIS_IP_)
-# define rcu_read_release()	lock_release(&rcu_lock_map, 1, _THIS_IP_)
+
+static inline void rcu_read_acquire(void)
+{
+	rcu_lock_acquire(&rcu_lock_map);
+}
+
+static inline void rcu_read_release(void)
+{
+	rcu_lock_release(&rcu_lock_map);
+}
 
 extern struct lockdep_map rcu_bh_lock_map;
-# define rcu_read_acquire_bh() \
-		lock_acquire(&rcu_bh_lock_map, 0, 0, 2, 1, NULL, _THIS_IP_)
-# define rcu_read_release_bh()	lock_release(&rcu_bh_lock_map, 1, _THIS_IP_)
+
+static inline void rcu_read_acquire_bh(void)
+{
+	rcu_lock_acquire(&rcu_bh_lock_map);
+}
+
+static inline void rcu_read_release_bh(void)
+{
+	rcu_lock_release(&rcu_bh_lock_map);
+}
 
 extern struct lockdep_map rcu_sched_lock_map;
-# define rcu_read_acquire_sched() \
-		lock_acquire(&rcu_sched_lock_map, 0, 0, 2, 1, NULL, _THIS_IP_)
-# define rcu_read_release_sched() \
-		lock_release(&rcu_sched_lock_map, 1, _THIS_IP_)
+
+static inline void rcu_read_acquire_sched(void)
+{
+	rcu_lock_acquire(&rcu_sched_lock_map);
+}
+
+static inline void rcu_read_release_sched(void)
+{
+	rcu_lock_release(&rcu_sched_lock_map);
+}
 
 extern int debug_lockdep_rcu_enabled(void);
 
-- 
1.7.5.4


  parent reply	other threads:[~2011-10-07 16:25 UTC|newest]

Thread overview: 24+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-10-07 16:21 [PATCH 00/11] rcu: Detect illegal uses of RCU in idle and fix some v5 Frederic Weisbecker
2011-10-07 16:22 ` [PATCH 01/11] rcu: Detect illegal rcu dereference in extended quiescent state Frederic Weisbecker
2011-10-07 16:22 ` [PATCH 02/11] rcu: Inform the user about extended quiescent state on PROVE_RCU warning Frederic Weisbecker
2011-10-07 22:47   ` Paul E. McKenney
2011-10-07 16:22 ` Frederic Weisbecker [this message]
2011-10-07 16:22 ` [PATCH 04/11] rcu: Remove one layer of abstraction from PROVE_RCU checking Frederic Weisbecker
2011-10-07 16:22 ` [PATCH 05/11] rcu: Warn when srcu_read_lock() is used in an extended quiescent state Frederic Weisbecker
2011-10-07 16:22 ` [PATCH 06/11] rcu: Make srcu_read_lock_held() call common lockdep-enabled function Frederic Weisbecker
2011-10-07 16:22 ` [PATCH 07/11] nohz: Separate out irq exit and idle loop dyntick logic Frederic Weisbecker
2011-10-07 16:22 ` [PATCH 08/11] nohz: Allow rcu extended quiescent state handling seperately from tick stop Frederic Weisbecker
2011-10-08 13:43   ` Frederic Weisbecker
2011-10-08 14:01   ` [PATCH 08/11 v2] " Frederic Weisbecker
2011-10-13  6:57     ` Paul E. McKenney
2011-10-13  7:03       ` Paul E. McKenney
2011-10-13 12:50         ` Frederic Weisbecker
2011-10-13 22:51           ` Paul E. McKenney
2011-10-14 12:08             ` Frederic Weisbecker
2011-10-14 17:00               ` Paul E. McKenney
2011-10-16 13:28                 ` Frederic Weisbecker
2011-10-17  2:26                   ` Paul E. McKenney
2011-10-07 16:22 ` [PATCH 09/11] x86: Enter rcu extended qs after idle notifier call Frederic Weisbecker
2011-10-07 16:22 ` [PATCH 10/11] x86: Call idle notifier after irq_enter() Frederic Weisbecker
2011-10-07 16:22 ` [PATCH 11/11] rcu: Fix early call to rcu_idle_enter() Frederic Weisbecker
2011-10-07 23:32 ` [PATCH 00/11] rcu: Detect illegal uses of RCU in idle and fix some v5 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=1318004530-705-4-git-send-email-fweisbec@gmail.com \
    --to=fweisbec@gmail.com \
    --cc=a.p.zijlstra@chello.nl \
    --cc=laijs@cn.fujitsu.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@elte.hu \
    --cc=paulmck@linux.vnet.ibm.com \
    --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 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.