summaryrefslogtreecommitdiff
path: root/include/linux/rcu_sync.h
diff options
context:
space:
mode:
authorOleg Nesterov <oleg@redhat.com>2015-08-21 20:42:50 +0300
committerPaul E. McKenney <paulmck@linux.vnet.ibm.com>2015-10-06 21:25:16 +0300
commit3a518b76af7bb411efe6dd090fbf098e29accb2e (patch)
tree784edc06760ddaa84fbdfdcfe3ea52c9fb872fca /include/linux/rcu_sync.h
parent82e8c565be8a72957570d7da8dd9b441db7bb648 (diff)
downloadlinux-3a518b76af7bb411efe6dd090fbf098e29accb2e.tar.xz
rcu_sync: Add CONFIG_PROVE_RCU checks
This commit validates that the caller of rcu_sync_is_idle() holds the corresponding type of RCU read-side lock, but only in kernels built with CONFIG_PROVE_RCU=y. This validation is carried out via a new rcu_sync_ops->held() method that is checked within rcu_sync_is_idle(). Note that although this does add code to the fast path, it only does so in kernels built with CONFIG_PROVE_RCU=y. Suggested-by: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com> Signed-off-by: Oleg Nesterov <oleg@redhat.com> Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org> Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com> Reviewed-by: Josh Triplett <josh@joshtriplett.org>
Diffstat (limited to 'include/linux/rcu_sync.h')
-rw-r--r--include/linux/rcu_sync.h6
1 files changed, 6 insertions, 0 deletions
diff --git a/include/linux/rcu_sync.h b/include/linux/rcu_sync.h
index c6d2272c4459..1f2d4fc30b04 100644
--- a/include/linux/rcu_sync.h
+++ b/include/linux/rcu_sync.h
@@ -40,6 +40,8 @@ struct rcu_sync {
enum rcu_sync_type gp_type;
};
+extern bool __rcu_sync_is_idle(struct rcu_sync *);
+
/**
* rcu_sync_is_idle() - Are readers permitted to use their fastpaths?
* @rsp: Pointer to rcu_sync structure to use for synchronization
@@ -50,7 +52,11 @@ struct rcu_sync {
*/
static inline bool rcu_sync_is_idle(struct rcu_sync *rsp)
{
+#ifdef CONFIG_PROVE_RCU
+ return __rcu_sync_is_idle(rsp);
+#else
return !rsp->gp_state; /* GP_IDLE */
+#endif
}
extern void rcu_sync_init(struct rcu_sync *, enum rcu_sync_type);