diff options
-rw-r--r-- | include/linux/rcupdate.h | 9 | ||||
-rw-r--r-- | kernel/rcu/srcu.c | 17 | ||||
-rw-r--r-- | kernel/rcu/update.c | 15 |
3 files changed, 15 insertions, 26 deletions
diff --git a/include/linux/rcupdate.h b/include/linux/rcupdate.h index 78097491cd99..3e6afed51051 100644 --- a/include/linux/rcupdate.h +++ b/include/linux/rcupdate.h | |||
@@ -195,6 +195,15 @@ void call_rcu_sched(struct rcu_head *head, | |||
195 | 195 | ||
196 | void synchronize_sched(void); | 196 | void synchronize_sched(void); |
197 | 197 | ||
198 | /* | ||
199 | * Structure allowing asynchronous waiting on RCU. | ||
200 | */ | ||
201 | struct rcu_synchronize { | ||
202 | struct rcu_head head; | ||
203 | struct completion completion; | ||
204 | }; | ||
205 | void wakeme_after_rcu(struct rcu_head *head); | ||
206 | |||
198 | /** | 207 | /** |
199 | * call_rcu_tasks() - Queue an RCU for invocation task-based grace period | 208 | * call_rcu_tasks() - Queue an RCU for invocation task-based grace period |
200 | * @head: structure to be used for queueing the RCU updates. | 209 | * @head: structure to be used for queueing the RCU updates. |
diff --git a/kernel/rcu/srcu.c b/kernel/rcu/srcu.c index 445bf8ffe3fb..81f53b504c18 100644 --- a/kernel/rcu/srcu.c +++ b/kernel/rcu/srcu.c | |||
@@ -402,23 +402,6 @@ void call_srcu(struct srcu_struct *sp, struct rcu_head *head, | |||
402 | } | 402 | } |
403 | EXPORT_SYMBOL_GPL(call_srcu); | 403 | EXPORT_SYMBOL_GPL(call_srcu); |
404 | 404 | ||
405 | struct rcu_synchronize { | ||
406 | struct rcu_head head; | ||
407 | struct completion completion; | ||
408 | }; | ||
409 | |||
410 | /* | ||
411 | * Awaken the corresponding synchronize_srcu() instance now that a | ||
412 | * grace period has elapsed. | ||
413 | */ | ||
414 | static void wakeme_after_rcu(struct rcu_head *head) | ||
415 | { | ||
416 | struct rcu_synchronize *rcu; | ||
417 | |||
418 | rcu = container_of(head, struct rcu_synchronize, head); | ||
419 | complete(&rcu->completion); | ||
420 | } | ||
421 | |||
422 | static void srcu_advance_batches(struct srcu_struct *sp, int trycount); | 405 | static void srcu_advance_batches(struct srcu_struct *sp, int trycount); |
423 | static void srcu_reschedule(struct srcu_struct *sp); | 406 | static void srcu_reschedule(struct srcu_struct *sp); |
424 | 407 | ||
diff --git a/kernel/rcu/update.c b/kernel/rcu/update.c index e0d31a345ee6..8864ed90f0d7 100644 --- a/kernel/rcu/update.c +++ b/kernel/rcu/update.c | |||
@@ -199,16 +199,13 @@ EXPORT_SYMBOL_GPL(rcu_read_lock_bh_held); | |||
199 | 199 | ||
200 | #endif /* #ifdef CONFIG_DEBUG_LOCK_ALLOC */ | 200 | #endif /* #ifdef CONFIG_DEBUG_LOCK_ALLOC */ |
201 | 201 | ||
202 | struct rcu_synchronize { | 202 | /** |
203 | struct rcu_head head; | 203 | * wakeme_after_rcu() - Callback function to awaken a task after grace period |
204 | struct completion completion; | 204 | * @head: Pointer to rcu_head member within rcu_synchronize structure |
205 | }; | 205 | * |
206 | 206 | * Awaken the corresponding task now that a grace period has elapsed. | |
207 | /* | ||
208 | * Awaken the corresponding synchronize_rcu() instance now that a | ||
209 | * grace period has elapsed. | ||
210 | */ | 207 | */ |
211 | static void wakeme_after_rcu(struct rcu_head *head) | 208 | void wakeme_after_rcu(struct rcu_head *head) |
212 | { | 209 | { |
213 | struct rcu_synchronize *rcu; | 210 | struct rcu_synchronize *rcu; |
214 | 211 | ||