diff options
author | Paul E. McKenney <paulmck@linux.vnet.ibm.com> | 2010-03-03 20:50:16 -0500 |
---|---|---|
committer | Ingo Molnar <mingo@elte.hu> | 2010-03-04 06:07:33 -0500 |
commit | e6033e3b307fcfae08408e0673266db38392bda4 (patch) | |
tree | fd8d37b2aee0a1a22499297df4b748ace5166df7 | |
parent | cc5b83a9f884fe8722a275069a5a6fde39988455 (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.h | 14 |
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 | ||
139 | static inline int rcu_read_lock_sched_held(void) | 140 | static 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 */ | ||
149 | static 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 | ||
167 | static inline int rcu_read_lock_sched_held(void) | 175 | static 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 */ | ||
180 | static 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 | ||