diff options
Diffstat (limited to 'include/linux/srcu.h')
-rw-r--r-- | include/linux/srcu.h | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/include/linux/srcu.h b/include/linux/srcu.h index e1b005918bbb..9a323728e60c 100644 --- a/include/linux/srcu.h +++ b/include/linux/srcu.h | |||
@@ -99,15 +99,18 @@ long srcu_batches_completed(struct srcu_struct *sp); | |||
99 | * power mode. This way we can notice an extended quiescent state to | 99 | * power mode. This way we can notice an extended quiescent state to |
100 | * other CPUs that started a grace period. Otherwise we would delay any | 100 | * other CPUs that started a grace period. Otherwise we would delay any |
101 | * grace period as long as we run in the idle task. | 101 | * grace period as long as we run in the idle task. |
102 | * | ||
103 | * Similarly, we avoid claiming an SRCU read lock held if the current | ||
104 | * CPU is offline. | ||
102 | */ | 105 | */ |
103 | static inline int srcu_read_lock_held(struct srcu_struct *sp) | 106 | static inline int srcu_read_lock_held(struct srcu_struct *sp) |
104 | { | 107 | { |
105 | if (rcu_is_cpu_idle()) | ||
106 | return 0; | ||
107 | |||
108 | if (!debug_lockdep_rcu_enabled()) | 108 | if (!debug_lockdep_rcu_enabled()) |
109 | return 1; | 109 | return 1; |
110 | 110 | if (rcu_is_cpu_idle()) | |
111 | return 0; | ||
112 | if (!rcu_lockdep_current_cpu_online()) | ||
113 | return 0; | ||
111 | return lock_is_held(&sp->dep_map); | 114 | return lock_is_held(&sp->dep_map); |
112 | } | 115 | } |
113 | 116 | ||