|
@@ -77,8 +77,15 @@ void wakeme_after_rcu(struct rcu_head *head)
|
|
|
* sections are delimited by rcu_read_lock() and rcu_read_unlock(),
|
|
|
* and may be nested.
|
|
|
*/
|
|
|
-void synchronize_rcu(void); /* Makes kernel-doc tools happy */
|
|
|
-synchronize_rcu_xxx(synchronize_rcu, call_rcu)
|
|
|
+void synchronize_rcu(void)
|
|
|
+{
|
|
|
+ struct rcu_synchronize rcu;
|
|
|
+ init_completion(&rcu.completion);
|
|
|
+ /* Will wake me after RCU finished. */
|
|
|
+ call_rcu(&rcu.head, wakeme_after_rcu);
|
|
|
+ /* Wait for it. */
|
|
|
+ wait_for_completion(&rcu.completion);
|
|
|
+}
|
|
|
EXPORT_SYMBOL_GPL(synchronize_rcu);
|
|
|
|
|
|
static void rcu_barrier_callback(struct rcu_head *notused)
|