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); | ||