diff options
Diffstat (limited to 'kernel/srcu.c')
| -rw-r--r-- | kernel/srcu.c | 16 |
1 files changed, 11 insertions, 5 deletions
diff --git a/kernel/srcu.c b/kernel/srcu.c index 97c465ebd844..2b859828cdc3 100644 --- a/kernel/srcu.c +++ b/kernel/srcu.c | |||
| @@ -16,8 +16,10 @@ | |||
| 16 | * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. | 16 | * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. |
| 17 | * | 17 | * |
| 18 | * Copyright (C) IBM Corporation, 2006 | 18 | * Copyright (C) IBM Corporation, 2006 |
| 19 | * Copyright (C) Fujitsu, 2012 | ||
| 19 | * | 20 | * |
| 20 | * Author: Paul McKenney <paulmck@us.ibm.com> | 21 | * Author: Paul McKenney <paulmck@us.ibm.com> |
| 22 | * Lai Jiangshan <laijs@cn.fujitsu.com> | ||
| 21 | * | 23 | * |
| 22 | * For detailed explanation of Read-Copy Update mechanism see - | 24 | * For detailed explanation of Read-Copy Update mechanism see - |
| 23 | * Documentation/RCU/ *.txt | 25 | * Documentation/RCU/ *.txt |
| @@ -34,6 +36,10 @@ | |||
| 34 | #include <linux/delay.h> | 36 | #include <linux/delay.h> |
| 35 | #include <linux/srcu.h> | 37 | #include <linux/srcu.h> |
| 36 | 38 | ||
| 39 | #include <trace/events/rcu.h> | ||
| 40 | |||
| 41 | #include "rcu.h" | ||
| 42 | |||
| 37 | /* | 43 | /* |
| 38 | * Initialize an rcu_batch structure to empty. | 44 | * Initialize an rcu_batch structure to empty. |
| 39 | */ | 45 | */ |
| @@ -92,9 +98,6 @@ static inline void rcu_batch_move(struct rcu_batch *to, struct rcu_batch *from) | |||
| 92 | } | 98 | } |
| 93 | } | 99 | } |
| 94 | 100 | ||
| 95 | /* single-thread state-machine */ | ||
| 96 | static void process_srcu(struct work_struct *work); | ||
| 97 | |||
| 98 | static int init_srcu_struct_fields(struct srcu_struct *sp) | 101 | static int init_srcu_struct_fields(struct srcu_struct *sp) |
| 99 | { | 102 | { |
| 100 | sp->completed = 0; | 103 | sp->completed = 0; |
| @@ -464,7 +467,9 @@ static void __synchronize_srcu(struct srcu_struct *sp, int trycount) | |||
| 464 | */ | 467 | */ |
| 465 | void synchronize_srcu(struct srcu_struct *sp) | 468 | void synchronize_srcu(struct srcu_struct *sp) |
| 466 | { | 469 | { |
| 467 | __synchronize_srcu(sp, SYNCHRONIZE_SRCU_TRYCOUNT); | 470 | __synchronize_srcu(sp, rcu_expedited |
| 471 | ? SYNCHRONIZE_SRCU_EXP_TRYCOUNT | ||
| 472 | : SYNCHRONIZE_SRCU_TRYCOUNT); | ||
| 468 | } | 473 | } |
| 469 | EXPORT_SYMBOL_GPL(synchronize_srcu); | 474 | EXPORT_SYMBOL_GPL(synchronize_srcu); |
| 470 | 475 | ||
| @@ -637,7 +642,7 @@ static void srcu_reschedule(struct srcu_struct *sp) | |||
| 637 | /* | 642 | /* |
| 638 | * This is the work-queue function that handles SRCU grace periods. | 643 | * This is the work-queue function that handles SRCU grace periods. |
| 639 | */ | 644 | */ |
| 640 | static void process_srcu(struct work_struct *work) | 645 | void process_srcu(struct work_struct *work) |
| 641 | { | 646 | { |
| 642 | struct srcu_struct *sp; | 647 | struct srcu_struct *sp; |
| 643 | 648 | ||
| @@ -648,3 +653,4 @@ static void process_srcu(struct work_struct *work) | |||
| 648 | srcu_invoke_callbacks(sp); | 653 | srcu_invoke_callbacks(sp); |
| 649 | srcu_reschedule(sp); | 654 | srcu_reschedule(sp); |
| 650 | } | 655 | } |
| 656 | EXPORT_SYMBOL_GPL(process_srcu); | ||
