summaryrefslogtreecommitdiffstats
path: root/include/linux/rcu_sync.h
diff options
context:
space:
mode:
authorOleg Nesterov2015-08-21 19:42:52 +0200
committerPaul E. McKenney2015-10-06 20:25:21 +0200
commit07899a6e5f56136028c44a57ad0451e797365ac3 (patch)
tree48fc600387bae30a64284ae0d7acfb767277cfde /include/linux/rcu_sync.h
parentrcu_sync: Add CONFIG_PROVE_RCU checks (diff)
downloadkernel-qcow2-linux-07899a6e5f56136028c44a57ad0451e797365ac3.tar.gz
kernel-qcow2-linux-07899a6e5f56136028c44a57ad0451e797365ac3.tar.xz
kernel-qcow2-linux-07899a6e5f56136028c44a57ad0451e797365ac3.zip
rcu_sync: Introduce rcu_sync_dtor()
This commit allows rcu_sync structures to be safely deallocated, The trick is to add a new ->wait field to the gp_ops array. This field is a pointer to the rcu_barrier() function corresponding to the flavor of RCU in question. This allows a new rcu_sync_dtor() to wait for any outstanding callbacks before freeing the rcu_sync structure. 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.h1
1 files changed, 1 insertions, 0 deletions
diff --git a/include/linux/rcu_sync.h b/include/linux/rcu_sync.h
index 1f2d4fc30b04..8069d6468bc4 100644
--- a/include/linux/rcu_sync.h
+++ b/include/linux/rcu_sync.h
@@ -62,6 +62,7 @@ static inline bool rcu_sync_is_idle(struct rcu_sync *rsp)
extern void rcu_sync_init(struct rcu_sync *, enum rcu_sync_type);
extern void rcu_sync_enter(struct rcu_sync *);
extern void rcu_sync_exit(struct rcu_sync *);
+extern void rcu_sync_dtor(struct rcu_sync *);
#define __RCU_SYNC_INITIALIZER(name, type) { \
.gp_state = 0, \