diff options
Diffstat (limited to 'include/linux/rcupdate.h')
-rw-r--r-- | include/linux/rcupdate.h | 24 |
1 files changed, 12 insertions, 12 deletions
diff --git a/include/linux/rcupdate.h b/include/linux/rcupdate.h index f1f1bc39346b..39cbb889e20d 100644 --- a/include/linux/rcupdate.h +++ b/include/linux/rcupdate.h | |||
@@ -261,6 +261,10 @@ static inline void rcu_user_hooks_switch(struct task_struct *prev, | |||
261 | rcu_irq_exit(); \ | 261 | rcu_irq_exit(); \ |
262 | } while (0) | 262 | } while (0) |
263 | 263 | ||
264 | #if defined(CONFIG_DEBUG_LOCK_ALLOC) || defined(CONFIG_RCU_TRACE) || defined(CONFIG_SMP) | ||
265 | extern bool __rcu_is_watching(void); | ||
266 | #endif /* #if defined(CONFIG_DEBUG_LOCK_ALLOC) || defined(CONFIG_RCU_TRACE) || defined(CONFIG_SMP) */ | ||
267 | |||
264 | /* | 268 | /* |
265 | * Infrastructure to implement the synchronize_() primitives in | 269 | * Infrastructure to implement the synchronize_() primitives in |
266 | * TREE_RCU and rcu_barrier_() primitives in TINY_RCU. | 270 | * TREE_RCU and rcu_barrier_() primitives in TINY_RCU. |
@@ -297,10 +301,6 @@ static inline void destroy_rcu_head_on_stack(struct rcu_head *head) | |||
297 | } | 301 | } |
298 | #endif /* #else !CONFIG_DEBUG_OBJECTS_RCU_HEAD */ | 302 | #endif /* #else !CONFIG_DEBUG_OBJECTS_RCU_HEAD */ |
299 | 303 | ||
300 | #if defined(CONFIG_DEBUG_LOCK_ALLOC) || defined(CONFIG_SMP) | ||
301 | extern int rcu_is_cpu_idle(void); | ||
302 | #endif /* #if defined(CONFIG_DEBUG_LOCK_ALLOC) || defined(CONFIG_SMP) */ | ||
303 | |||
304 | #if defined(CONFIG_HOTPLUG_CPU) && defined(CONFIG_PROVE_RCU) | 304 | #if defined(CONFIG_HOTPLUG_CPU) && defined(CONFIG_PROVE_RCU) |
305 | bool rcu_lockdep_current_cpu_online(void); | 305 | bool rcu_lockdep_current_cpu_online(void); |
306 | #else /* #if defined(CONFIG_HOTPLUG_CPU) && defined(CONFIG_PROVE_RCU) */ | 306 | #else /* #if defined(CONFIG_HOTPLUG_CPU) && defined(CONFIG_PROVE_RCU) */ |
@@ -351,7 +351,7 @@ static inline int rcu_read_lock_held(void) | |||
351 | { | 351 | { |
352 | if (!debug_lockdep_rcu_enabled()) | 352 | if (!debug_lockdep_rcu_enabled()) |
353 | return 1; | 353 | return 1; |
354 | if (rcu_is_cpu_idle()) | 354 | if (!rcu_is_watching()) |
355 | return 0; | 355 | return 0; |
356 | if (!rcu_lockdep_current_cpu_online()) | 356 | if (!rcu_lockdep_current_cpu_online()) |
357 | return 0; | 357 | return 0; |
@@ -402,7 +402,7 @@ static inline int rcu_read_lock_sched_held(void) | |||
402 | 402 | ||
403 | if (!debug_lockdep_rcu_enabled()) | 403 | if (!debug_lockdep_rcu_enabled()) |
404 | return 1; | 404 | return 1; |
405 | if (rcu_is_cpu_idle()) | 405 | if (!rcu_is_watching()) |
406 | return 0; | 406 | return 0; |
407 | if (!rcu_lockdep_current_cpu_online()) | 407 | if (!rcu_lockdep_current_cpu_online()) |
408 | return 0; | 408 | return 0; |
@@ -771,7 +771,7 @@ static inline void rcu_read_lock(void) | |||
771 | __rcu_read_lock(); | 771 | __rcu_read_lock(); |
772 | __acquire(RCU); | 772 | __acquire(RCU); |
773 | rcu_lock_acquire(&rcu_lock_map); | 773 | rcu_lock_acquire(&rcu_lock_map); |
774 | rcu_lockdep_assert(!rcu_is_cpu_idle(), | 774 | rcu_lockdep_assert(rcu_is_watching(), |
775 | "rcu_read_lock() used illegally while idle"); | 775 | "rcu_read_lock() used illegally while idle"); |
776 | } | 776 | } |
777 | 777 | ||
@@ -792,7 +792,7 @@ static inline void rcu_read_lock(void) | |||
792 | */ | 792 | */ |
793 | static inline void rcu_read_unlock(void) | 793 | static inline void rcu_read_unlock(void) |
794 | { | 794 | { |
795 | rcu_lockdep_assert(!rcu_is_cpu_idle(), | 795 | rcu_lockdep_assert(rcu_is_watching(), |
796 | "rcu_read_unlock() used illegally while idle"); | 796 | "rcu_read_unlock() used illegally while idle"); |
797 | rcu_lock_release(&rcu_lock_map); | 797 | rcu_lock_release(&rcu_lock_map); |
798 | __release(RCU); | 798 | __release(RCU); |
@@ -821,7 +821,7 @@ static inline void rcu_read_lock_bh(void) | |||
821 | local_bh_disable(); | 821 | local_bh_disable(); |
822 | __acquire(RCU_BH); | 822 | __acquire(RCU_BH); |
823 | rcu_lock_acquire(&rcu_bh_lock_map); | 823 | rcu_lock_acquire(&rcu_bh_lock_map); |
824 | rcu_lockdep_assert(!rcu_is_cpu_idle(), | 824 | rcu_lockdep_assert(rcu_is_watching(), |
825 | "rcu_read_lock_bh() used illegally while idle"); | 825 | "rcu_read_lock_bh() used illegally while idle"); |
826 | } | 826 | } |
827 | 827 | ||
@@ -832,7 +832,7 @@ static inline void rcu_read_lock_bh(void) | |||
832 | */ | 832 | */ |
833 | static inline void rcu_read_unlock_bh(void) | 833 | static inline void rcu_read_unlock_bh(void) |
834 | { | 834 | { |
835 | rcu_lockdep_assert(!rcu_is_cpu_idle(), | 835 | rcu_lockdep_assert(rcu_is_watching(), |
836 | "rcu_read_unlock_bh() used illegally while idle"); | 836 | "rcu_read_unlock_bh() used illegally while idle"); |
837 | rcu_lock_release(&rcu_bh_lock_map); | 837 | rcu_lock_release(&rcu_bh_lock_map); |
838 | __release(RCU_BH); | 838 | __release(RCU_BH); |
@@ -857,7 +857,7 @@ static inline void rcu_read_lock_sched(void) | |||
857 | preempt_disable(); | 857 | preempt_disable(); |
858 | __acquire(RCU_SCHED); | 858 | __acquire(RCU_SCHED); |
859 | rcu_lock_acquire(&rcu_sched_lock_map); | 859 | rcu_lock_acquire(&rcu_sched_lock_map); |
860 | rcu_lockdep_assert(!rcu_is_cpu_idle(), | 860 | rcu_lockdep_assert(rcu_is_watching(), |
861 | "rcu_read_lock_sched() used illegally while idle"); | 861 | "rcu_read_lock_sched() used illegally while idle"); |
862 | } | 862 | } |
863 | 863 | ||
@@ -875,7 +875,7 @@ static inline notrace void rcu_read_lock_sched_notrace(void) | |||
875 | */ | 875 | */ |
876 | static inline void rcu_read_unlock_sched(void) | 876 | static inline void rcu_read_unlock_sched(void) |
877 | { | 877 | { |
878 | rcu_lockdep_assert(!rcu_is_cpu_idle(), | 878 | rcu_lockdep_assert(rcu_is_watching(), |
879 | "rcu_read_unlock_sched() used illegally while idle"); | 879 | "rcu_read_unlock_sched() used illegally while idle"); |
880 | rcu_lock_release(&rcu_sched_lock_map); | 880 | rcu_lock_release(&rcu_sched_lock_map); |
881 | __release(RCU_SCHED); | 881 | __release(RCU_SCHED); |