aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux/rcupdate.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/linux/rcupdate.h')
-rw-r--r--include/linux/rcupdate.h14
1 files changed, 9 insertions, 5 deletions
diff --git a/include/linux/rcupdate.h b/include/linux/rcupdate.h
index cf307ebf345d..96f1baf62ab8 100644
--- a/include/linux/rcupdate.h
+++ b/include/linux/rcupdate.h
@@ -58,8 +58,6 @@ void call_rcu(struct rcu_head *head, rcu_callback_t func);
58void call_rcu_bh(struct rcu_head *head, rcu_callback_t func); 58void call_rcu_bh(struct rcu_head *head, rcu_callback_t func);
59void call_rcu_sched(struct rcu_head *head, rcu_callback_t func); 59void call_rcu_sched(struct rcu_head *head, rcu_callback_t func);
60void synchronize_sched(void); 60void synchronize_sched(void);
61void call_rcu_tasks(struct rcu_head *head, rcu_callback_t func);
62void synchronize_rcu_tasks(void);
63void rcu_barrier_tasks(void); 61void rcu_barrier_tasks(void);
64 62
65#ifdef CONFIG_PREEMPT_RCU 63#ifdef CONFIG_PREEMPT_RCU
@@ -105,6 +103,7 @@ static inline int rcu_preempt_depth(void)
105 103
106/* Internal to kernel */ 104/* Internal to kernel */
107void rcu_init(void); 105void rcu_init(void);
106extern int rcu_scheduler_active __read_mostly;
108void rcu_sched_qs(void); 107void rcu_sched_qs(void);
109void rcu_bh_qs(void); 108void rcu_bh_qs(void);
110void rcu_check_callbacks(int user); 109void rcu_check_callbacks(int user);
@@ -165,8 +164,6 @@ static inline void rcu_init_nohz(void) { }
165 * macro rather than an inline function to avoid #include hell. 164 * macro rather than an inline function to avoid #include hell.
166 */ 165 */
167#ifdef CONFIG_TASKS_RCU 166#ifdef CONFIG_TASKS_RCU
168#define TASKS_RCU(x) x
169extern struct srcu_struct tasks_rcu_exit_srcu;
170#define rcu_note_voluntary_context_switch_lite(t) \ 167#define rcu_note_voluntary_context_switch_lite(t) \
171 do { \ 168 do { \
172 if (READ_ONCE((t)->rcu_tasks_holdout)) \ 169 if (READ_ONCE((t)->rcu_tasks_holdout)) \
@@ -177,10 +174,17 @@ extern struct srcu_struct tasks_rcu_exit_srcu;
177 rcu_all_qs(); \ 174 rcu_all_qs(); \
178 rcu_note_voluntary_context_switch_lite(t); \ 175 rcu_note_voluntary_context_switch_lite(t); \
179 } while (0) 176 } while (0)
177void call_rcu_tasks(struct rcu_head *head, rcu_callback_t func);
178void synchronize_rcu_tasks(void);
179void exit_tasks_rcu_start(void);
180void exit_tasks_rcu_finish(void);
180#else /* #ifdef CONFIG_TASKS_RCU */ 181#else /* #ifdef CONFIG_TASKS_RCU */
181#define TASKS_RCU(x) do { } while (0)
182#define rcu_note_voluntary_context_switch_lite(t) do { } while (0) 182#define rcu_note_voluntary_context_switch_lite(t) do { } while (0)
183#define rcu_note_voluntary_context_switch(t) rcu_all_qs() 183#define rcu_note_voluntary_context_switch(t) rcu_all_qs()
184#define call_rcu_tasks call_rcu_sched
185#define synchronize_rcu_tasks synchronize_sched
186static inline void exit_tasks_rcu_start(void) { }
187static inline void exit_tasks_rcu_finish(void) { }
184#endif /* #else #ifdef CONFIG_TASKS_RCU */ 188#endif /* #else #ifdef CONFIG_TASKS_RCU */
185 189
186/** 190/**