diff options
author | Paul E. McKenney <paulmck@linux.vnet.ibm.com> | 2013-04-11 13:15:52 -0400 |
---|---|---|
committer | Paul E. McKenney <paulmck@linux.vnet.ibm.com> | 2013-06-10 16:45:52 -0400 |
commit | 2439b696cb5303f1eeb6aeebcee19e0056c3dd6e (patch) | |
tree | d3f58ced257743911040a2cff5b03cd82aacc8a7 /kernel | |
parent | 7807acdb6b794b3af42dfa1912edd4fba8d0b622 (diff) |
rcu: Shrink TINY_RCU by moving exit_rcu()
Now that TINY_PREEMPT_RCU is no more, exit_rcu() is always an empty
function. But if TINY_RCU is going to have an empty function, it should
be in include/linux/rcutiny.h, where it does not bloat the kernel.
This commit therefore moves exit_rcu() out of kernel/rcupdate.c to
kernel/rcutree_plugin.h, and places a static inline empty function in
include/linux/rcutiny.h in order to shrink TINY_RCU a bit.
Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
Reviewed-by: Josh Triplett <josh@joshtriplett.org>
Diffstat (limited to 'kernel')
-rw-r--r-- | kernel/rcupdate.c | 26 | ||||
-rw-r--r-- | kernel/rcutree_plugin.h | 26 |
2 files changed, 27 insertions, 25 deletions
diff --git a/kernel/rcupdate.c b/kernel/rcupdate.c index 48ab70384a4c..0be1fa2ea521 100644 --- a/kernel/rcupdate.c +++ b/kernel/rcupdate.c | |||
@@ -104,31 +104,7 @@ void __rcu_read_unlock(void) | |||
104 | } | 104 | } |
105 | EXPORT_SYMBOL_GPL(__rcu_read_unlock); | 105 | EXPORT_SYMBOL_GPL(__rcu_read_unlock); |
106 | 106 | ||
107 | /* | 107 | #endif /* #ifdef CONFIG_PREEMPT_RCU */ |
108 | * Check for a task exiting while in a preemptible-RCU read-side | ||
109 | * critical section, clean up if so. No need to issue warnings, | ||
110 | * as debug_check_no_locks_held() already does this if lockdep | ||
111 | * is enabled. | ||
112 | */ | ||
113 | void exit_rcu(void) | ||
114 | { | ||
115 | struct task_struct *t = current; | ||
116 | |||
117 | if (likely(list_empty(¤t->rcu_node_entry))) | ||
118 | return; | ||
119 | t->rcu_read_lock_nesting = 1; | ||
120 | barrier(); | ||
121 | t->rcu_read_unlock_special = RCU_READ_UNLOCK_BLOCKED; | ||
122 | __rcu_read_unlock(); | ||
123 | } | ||
124 | |||
125 | #else /* #ifdef CONFIG_PREEMPT_RCU */ | ||
126 | |||
127 | void exit_rcu(void) | ||
128 | { | ||
129 | } | ||
130 | |||
131 | #endif /* #else #ifdef CONFIG_PREEMPT_RCU */ | ||
132 | 108 | ||
133 | #ifdef CONFIG_DEBUG_LOCK_ALLOC | 109 | #ifdef CONFIG_DEBUG_LOCK_ALLOC |
134 | static struct lock_class_key rcu_lock_key; | 110 | static struct lock_class_key rcu_lock_key; |
diff --git a/kernel/rcutree_plugin.h b/kernel/rcutree_plugin.h index 207844ea0226..de701bbdb624 100644 --- a/kernel/rcutree_plugin.h +++ b/kernel/rcutree_plugin.h | |||
@@ -932,6 +932,24 @@ static void __init __rcu_init_preempt(void) | |||
932 | rcu_init_one(&rcu_preempt_state, &rcu_preempt_data); | 932 | rcu_init_one(&rcu_preempt_state, &rcu_preempt_data); |
933 | } | 933 | } |
934 | 934 | ||
935 | /* | ||
936 | * Check for a task exiting while in a preemptible-RCU read-side | ||
937 | * critical section, clean up if so. No need to issue warnings, | ||
938 | * as debug_check_no_locks_held() already does this if lockdep | ||
939 | * is enabled. | ||
940 | */ | ||
941 | void exit_rcu(void) | ||
942 | { | ||
943 | struct task_struct *t = current; | ||
944 | |||
945 | if (likely(list_empty(¤t->rcu_node_entry))) | ||
946 | return; | ||
947 | t->rcu_read_lock_nesting = 1; | ||
948 | barrier(); | ||
949 | t->rcu_read_unlock_special = RCU_READ_UNLOCK_BLOCKED; | ||
950 | __rcu_read_unlock(); | ||
951 | } | ||
952 | |||
935 | #else /* #ifdef CONFIG_TREE_PREEMPT_RCU */ | 953 | #else /* #ifdef CONFIG_TREE_PREEMPT_RCU */ |
936 | 954 | ||
937 | static struct rcu_state *rcu_state = &rcu_sched_state; | 955 | static struct rcu_state *rcu_state = &rcu_sched_state; |
@@ -1100,6 +1118,14 @@ static void __init __rcu_init_preempt(void) | |||
1100 | { | 1118 | { |
1101 | } | 1119 | } |
1102 | 1120 | ||
1121 | /* | ||
1122 | * Because preemptible RCU does not exist, tasks cannot possibly exit | ||
1123 | * while in preemptible RCU read-side critical sections. | ||
1124 | */ | ||
1125 | void exit_rcu(void) | ||
1126 | { | ||
1127 | } | ||
1128 | |||
1103 | #endif /* #else #ifdef CONFIG_TREE_PREEMPT_RCU */ | 1129 | #endif /* #else #ifdef CONFIG_TREE_PREEMPT_RCU */ |
1104 | 1130 | ||
1105 | #ifdef CONFIG_RCU_BOOST | 1131 | #ifdef CONFIG_RCU_BOOST |