aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPaul E. McKenney <paulmck@linux.vnet.ibm.com>2010-03-03 20:50:16 -0500
committerIngo Molnar <mingo@elte.hu>2010-03-04 06:07:33 -0500
commite6033e3b307fcfae08408e0673266db38392bda4 (patch)
treefd8d37b2aee0a1a22499297df4b748ace5166df7
parentcc5b83a9f884fe8722a275069a5a6fde39988455 (diff)
rcu: Make rcu_read_lock_sched_held() handle !PREEMPT
The rcu_read_lock_sched_held() needs to unconditionally return the value "1" in a !PREEMPT kernel, because under !PREEMPT, -all- kernel code is implicitly preempt-disabled. This patch makes this happen. Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com> Cc: laijs@cn.fujitsu.com Cc: dipankar@in.ibm.com Cc: mathieu.desnoyers@polymtl.ca Cc: josh@joshtriplett.org Cc: dvhltc@us.ibm.com Cc: niv@us.ibm.com Cc: peterz@infradead.org Cc: rostedt@goodmis.org Cc: Valdis.Kletnieks@vt.edu Cc: dhowells@redhat.com LKML-Reference: <1267667418-32233-1-git-send-email-paulmck@linux.vnet.ibm.com> Signed-off-by: Ingo Molnar <mingo@elte.hu>
-rw-r--r--include/linux/rcupdate.h14
1 files changed, 14 insertions, 0 deletions
diff --git a/include/linux/rcupdate.h b/include/linux/rcupdate.h
index c84373626336..e22960ecb71a 100644
--- a/include/linux/rcupdate.h
+++ b/include/linux/rcupdate.h
@@ -136,6 +136,7 @@ static inline int rcu_read_lock_bh_held(void)
136 * can prove otherwise. Note that disabling of preemption (including 136 * can prove otherwise. Note that disabling of preemption (including
137 * disabling irqs) counts as an RCU-sched read-side critical section. 137 * disabling irqs) counts as an RCU-sched read-side critical section.
138 */ 138 */
139#ifdef CONFIG_PREEMPT
139static inline int rcu_read_lock_sched_held(void) 140static inline int rcu_read_lock_sched_held(void)
140{ 141{
141 int lockdep_opinion = 0; 142 int lockdep_opinion = 0;
@@ -144,6 +145,12 @@ static inline int rcu_read_lock_sched_held(void)
144 lockdep_opinion = lock_is_held(&rcu_sched_lock_map); 145 lockdep_opinion = lock_is_held(&rcu_sched_lock_map);
145 return lockdep_opinion || preempt_count() != 0 || !rcu_scheduler_active; 146 return lockdep_opinion || preempt_count() != 0 || !rcu_scheduler_active;
146} 147}
148#else /* #ifdef CONFIG_PREEMPT */
149static inline int rcu_read_lock_sched_held(void)
150{
151 return 1;
152}
153#endif /* #else #ifdef CONFIG_PREEMPT */
147 154
148#else /* #ifdef CONFIG_DEBUG_LOCK_ALLOC */ 155#else /* #ifdef CONFIG_DEBUG_LOCK_ALLOC */
149 156
@@ -164,10 +171,17 @@ static inline int rcu_read_lock_bh_held(void)
164 return 1; 171 return 1;
165} 172}
166 173
174#ifdef CONFIG_PREEMPT
167static inline int rcu_read_lock_sched_held(void) 175static inline int rcu_read_lock_sched_held(void)
168{ 176{
169 return preempt_count() != 0 || !rcu_scheduler_active; 177 return preempt_count() != 0 || !rcu_scheduler_active;
170} 178}
179#else /* #ifdef CONFIG_PREEMPT */
180static inline int rcu_read_lock_sched_held(void)
181{
182 return 1;
183}
184#endif /* #else #ifdef CONFIG_PREEMPT */
171 185
172#endif /* #else #ifdef CONFIG_DEBUG_LOCK_ALLOC */ 186#endif /* #else #ifdef CONFIG_DEBUG_LOCK_ALLOC */
173 187